Add some unit tests

This is a start at least.. I have some catching up to do!
This commit is contained in:
Luck committed 2020-12-22 14:40:29 +00:00
1 parent abb608b856
commit 142cdc8e89
7 files changed
+250 -18

No files matched your search

+7
View File
@@ -1,4 +1,11 @@
test {
useJUnitPlatform()
}
dependencies {
testCompile 'org.junit.jupiter:junit-jupiter-api:5.7.0'
testCompile 'org.junit.jupiter:junit-jupiter-engine:5.7.0'
compile project(':api')
compile 'org.checkerframework:checker-qual:2.5.5'
@@ -227,8 +227,8 @@ public class BooleanExpressionCompiler {
Lexer(String expression) {
this.tokenizer = new StreamTokenizer(new StringReader(expression));
this.tokenizer.resetSyntax();
this.tokenizer.wordChars('!', '~'); // all ascii characters
this.tokenizer.whitespaceChars('\u0000', ' ');
this.tokenizer.whitespaceChars('\u0000', '\u0020');
this.tokenizer.wordChars('\u0021', '\u007E');
"()&|!".chars().forEach(this.tokenizer::ordinaryChar);
}
@@ -278,20 +278,4 @@ public class BooleanExpressionCompiler {
}
}
/*
private static void assertion(String expression, boolean expected) {
if (compile(expression).eval(var -> var.equals("true")) != expected) {
throw new AssertionError(expression + " is not " + expected);
}
}
public static void main(String[] args) {
assertion("false & false | true", true);
assertion("false & (false | true)", false);
assertion("true | false & false", true);
assertion("(true | false) & false", false);
assertion("(true & ((true | false) & !(true & false)))", true);
}
*/
}
@@ -0,0 +1,91 @@
package me.lucko.luckperms.common.util;
import org.junit.jupiter.api.Test;
import java.time.Duration;
import java.time.temporal.ChronoUnit;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class DurationParserTest {
private static void test(Duration expected, String input) {
assertEquals(expected, DurationParser.parseDuration(input));
}
@Test
void testSimple() {
test(ChronoUnit.YEARS.getDuration().multipliedBy(2), "2y");
test(ChronoUnit.YEARS.getDuration().multipliedBy(3), "3year");
test(ChronoUnit.YEARS.getDuration().multipliedBy(4), "4years");
test(ChronoUnit.YEARS.getDuration().multipliedBy(2), "2 y");
test(ChronoUnit.YEARS.getDuration().multipliedBy(3), "3 year");
test(ChronoUnit.YEARS.getDuration().multipliedBy(4), "4 years");
test(ChronoUnit.MONTHS.getDuration().multipliedBy(2), "2mo");
test(ChronoUnit.MONTHS.getDuration().multipliedBy(3), "3month");
test(ChronoUnit.MONTHS.getDuration().multipliedBy(4), "4months");
test(ChronoUnit.MONTHS.getDuration().multipliedBy(2), "2 mo");
test(ChronoUnit.MONTHS.getDuration().multipliedBy(3), "3 month");
test(ChronoUnit.MONTHS.getDuration().multipliedBy(4), "4 months");
test(Duration.ofDays(7 * 2), "2w");
test(Duration.ofDays(7 * 3), "3week");
test(Duration.ofDays(7 * 4), "4weeks");
test(Duration.ofDays(7 * 2), "2 w");
test(Duration.ofDays(7 * 3), "3 week");
test(Duration.ofDays(7 * 4), "4 weeks");
test(Duration.ofDays(2), "2d");
test(Duration.ofDays(3), "3day");
test(Duration.ofDays(4), "4days");
test(Duration.ofDays(2), "2 d");
test(Duration.ofDays(3), "3 day");
test(Duration.ofDays(4), "4 days");
test(Duration.ofHours(2), "2h");
test(Duration.ofHours(3), "3hour");
test(Duration.ofHours(4), "4hours");
test(Duration.ofHours(2), "2 h");
test(Duration.ofHours(3), "3 hour");
test(Duration.ofHours(4), "4 hours");
test(Duration.ofMinutes(2), "2m");
test(Duration.ofMinutes(3), "3min");
test(Duration.ofMinutes(4), "4mins");
test(Duration.ofMinutes(5), "5minute");
test(Duration.ofMinutes(6), "6minutes");
test(Duration.ofMinutes(2), "2 m");
test(Duration.ofMinutes(3), "3 min");
test(Duration.ofMinutes(4), "4 mins");
test(Duration.ofMinutes(5), "5 minute");
test(Duration.ofMinutes(6), "6 minutes");
test(Duration.ofSeconds(2), "2s");
test(Duration.ofSeconds(3), "3sec");
test(Duration.ofSeconds(4), "4secs");
test(Duration.ofSeconds(5), "5second");
test(Duration.ofSeconds(6), "6seconds");
test(Duration.ofSeconds(2), "2 s");
test(Duration.ofSeconds(3), "3 sec");
test(Duration.ofSeconds(4), "4 secs");
test(Duration.ofSeconds(5), "5 second");
test(Duration.ofSeconds(6), "6 seconds");
}
@Test
void testCombined() {
Duration expected = ChronoUnit.YEARS.getDuration().multipliedBy(5)
.plus(ChronoUnit.MONTHS.getDuration().multipliedBy(4))
.plus(ChronoUnit.WEEKS.getDuration().multipliedBy(3))
.plusDays(2)
.plusHours(1)
.plusMinutes(6)
.plusSeconds(7);
test(expected, "5y 4mo 3w 2d 1h 6m 7s");
test(expected, "5y4mo3w2d1h6m7s");
test(expected, "5 years 4 months 3 weeks 2 days 1 hour 6 minutes 7 seconds");
}
}
@@ -0,0 +1,28 @@
package me.lucko.luckperms.common.util;
import com.google.common.collect.ImmutableMap;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class EnumNamerTest {
@Test
void testSimple() {
EnumNamer<TestEnum> namer = new EnumNamer<>(
TestEnum.class,
ImmutableMap.of(TestEnum.THING, "hi"),
v -> v.name().toLowerCase().replace('_', '-')
);
assertEquals("test", namer.name(TestEnum.TEST));
assertEquals("a-test", namer.name(TestEnum.A_TEST));
assertEquals("hi", namer.name(TestEnum.THING));
}
enum TestEnum {
TEST, A_TEST, THING
}
}
@@ -0,0 +1,49 @@
package me.lucko.luckperms.common.util;
import com.google.common.collect.ImmutableList;
import org.junit.jupiter.api.Test;
import java.util.List;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class IteratorsTest {
@Test
void testDivideEmpty() {
assertEquals(ImmutableList.of(), Iterators.divideIterable(ImmutableList.of(), 2));
}
@Test
void testDivideSimple() {
List<List<String>> expected = ImmutableList.of(
ImmutableList.of("one", "two"),
ImmutableList.of("three", "four"),
ImmutableList.of("five")
);
List<List<String>> actual = Iterators.divideIterable(
ImmutableList.of("one", "two", "three", "four", "five"),
2
);
assertEquals(expected, actual);
}
@Test
void testDivideBoundary() {
List<List<String>> expected = ImmutableList.of(
ImmutableList.of("one", "two"),
ImmutableList.of("three", "four")
);
List<List<String>> actual = Iterators.divideIterable(
ImmutableList.of("one", "two", "three", "four"),
2
);
assertEquals(expected, actual);
}
}
@@ -0,0 +1,45 @@
package me.lucko.luckperms.common.util;
import com.google.common.collect.ImmutableList;
import org.junit.jupiter.api.Test;
import java.util.List;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
public class PaginatedTest {
@Test
void testSimple() {
Paginated<String> paginated = new Paginated<>(ImmutableList.of("one", "two", "three", "four", "five"));
assertEquals(3, paginated.getMaxPages(2));
assertEquals(1, paginated.getMaxPages(5));
assertEquals(1, paginated.getMaxPages(6));
List<Paginated.Entry<String>> page1 = paginated.getPage(1, 2);
assertEquals(2, page1.size());
assertEquals("one", page1.get(0).value());
assertEquals(1, page1.get(0).position());
assertEquals("two", page1.get(1).value());
assertEquals(2, page1.get(1).position());
List<Paginated.Entry<String>> page2 = paginated.getPage(2, 2);
assertEquals(2, page2.size());
assertEquals("three", page2.get(0).value());
assertEquals(3, page2.get(0).position());
assertEquals("four", page2.get(1).value());
assertEquals(4, page2.get(1).position());
List<Paginated.Entry<String>> page3 = paginated.getPage(3, 2);
assertEquals(1, page3.size());
assertEquals("five", page3.get(0).value());
assertEquals(5, page3.get(0).position());
assertThrows(IllegalArgumentException.class, () -> paginated.getPage(4, 2));
assertThrows(IllegalArgumentException.class, () -> paginated.getPage(0, 2));
assertThrows(IllegalArgumentException.class, () -> paginated.getPage(-1, 2));
}
}
@@ -0,0 +1,28 @@
package me.lucko.luckperms.common.verbose;
import me.lucko.luckperms.common.verbose.expression.BooleanExpressionCompiler;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class BooleanExpressionTest {
private static void test(String expression, boolean expected) {
assertEquals(
expected,
BooleanExpressionCompiler.compile(expression).eval(var -> var.equals("true")),
expression + " is not " + expected
);
}
@Test
void testBrackets() {
test("false & false | true", true);
test("false & (false | true)", false);
test("true | false & false", true);
test("(true | false) & false", false);
test("(true & ((true | false) & !(true & false)))", true);
}
}