1
2
Fork 0
mirror of https://github.com/mat-1/azalea.git synced 2025-08-02 06:16:04 +00:00
azalea/azalea-brigadier/tests/suggestion/suggestions_builder_test.rs
2023-10-12 20:14:29 -05:00

133 lines
3.6 KiB
Rust
Executable file

use std::collections::HashSet;
use azalea_brigadier::{
context::StringRange,
suggestion::{Suggestion, SuggestionsBuilder},
};
#[test]
fn suggest_appends() {
let builder = SuggestionsBuilder::new("Hello w", 6);
let result = builder.suggest("orld!").build();
assert_eq!(
result.list(),
vec![Suggestion::new(StringRange::between(6, 7), "orld!")]
);
assert_eq!(result.range(), StringRange::between(6, 7));
assert!(!result.is_empty());
}
#[test]
fn suggest_replaces() {
let builder = SuggestionsBuilder::new("Hello w", 6);
let result = builder.suggest("everybody").build();
assert_eq!(
result.list(),
vec![Suggestion::new(StringRange::between(6, 7), "everybody")]
);
assert_eq!(result.range(), StringRange::between(6, 7));
assert!(!result.is_empty());
}
#[test]
fn suggest_noop() {
let builder = SuggestionsBuilder::new("Hello w", 6);
let result = builder.suggest("w").build();
assert_eq!(result.list(), vec![]);
assert!(result.is_empty());
}
#[test]
fn suggest_multiple() {
let builder = SuggestionsBuilder::new("Hello w", 6);
let result = builder
.suggest("world!")
.suggest("everybody")
.suggest("weekend")
.build();
assert_eq!(
result.list(),
vec![
Suggestion::new(StringRange::between(6, 7), "everybody"),
Suggestion::new(StringRange::between(6, 7), "weekend"),
Suggestion::new(StringRange::between(6, 7), "world!"),
]
);
assert_eq!(result.range(), StringRange::between(6, 7));
assert!(!result.is_empty());
}
#[test]
fn restart() {
let builder = SuggestionsBuilder::new("Hello w", 6);
let builder = builder.suggest("won't be included in restart");
let other = builder.restart();
assert_ne!(other, builder);
assert_eq!(other.input(), builder.input());
assert_eq!(other.start(), builder.start());
assert_eq!(other.remaining(), builder.remaining());
}
#[test]
fn sort_alphabetical() {
let builder = SuggestionsBuilder::new("Hello w", 6);
let result = builder
.suggest("2")
.suggest("4")
.suggest("6")
.suggest("8")
.suggest("30")
.suggest("32")
.build();
let actual = result.list().iter().map(|s| s.text()).collect::<Vec<_>>();
assert_eq!(actual, vec!["2", "30", "32", "4", "6", "8"]);
}
#[test]
fn sort_numerical() {
let builder = SuggestionsBuilder::new("Hello w", 6);
let result = builder
.suggest_integer(2)
.suggest_integer(4)
.suggest_integer(6)
.suggest_integer(8)
.suggest_integer(30)
.suggest_integer(32)
.build();
let actual = result.list().iter().map(|s| s.text()).collect::<Vec<_>>();
assert_eq!(actual, vec!["2", "4", "6", "8", "30", "32"]);
}
#[test]
fn sort_mixed() {
let builder = SuggestionsBuilder::new("Hello w", 6);
let result = builder
.suggest("11")
.suggest("22")
.suggest("33")
.suggest("a")
.suggest("b")
.suggest("c")
.suggest_integer(2)
.suggest_integer(4)
.suggest_integer(6)
.suggest_integer(8)
.suggest_integer(30)
.suggest_integer(32)
.suggest("3a")
.suggest("a3")
.build();
let actual = result
.list()
.iter()
.map(|s| s.text())
.collect::<HashSet<_>>();
// mojang please
let expected = vec![
"11", "2", "22", "33", "3a", "4", "6", "8", "30", "32", "a", "a3", "b", "c",
]
.into_iter()
.map(|s| s.to_string())
.collect::<HashSet<_>>();
assert_eq!(actual, expected);
}