package com.jcwhatever.nucleus.utils.text;
import com.jcwhatever.nucleus.utils.text.components.IChatMessage;
import com.jcwhatever.nucleus.utils.text.format.TextFormatterSettings;
import com.jcwhatever.nucleus.utils.text.format.TextFormatterSettings.FormatPolicy;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class TextFormatterTest {
/**
* General test.
*/
@Test
public void testFormat() throws Exception {
assertEquals("zero, one, two", format("{0}, {1}, {2}", "zero", "one", "two"));
assertEquals("§czero, one, two", format("{RED}{0}, {1}, {2}", "zero", "one", "two"));
assertEquals("§czero, §9one, two", format("{RED}{0}, {BLUE}{1}, {2}", "zero", "one", "two"));
assertEquals("§czero, §9one§c, two", format("{RED}{0}, {1}, {2}", "zero", "§9one", "two"));
assertEquals("§czero, §9one§c, two", format("{RED}{0}, {1}, {2}", "zero", "{BLUE}one", "two"));
assertEquals("§c§lzero, §9one§c§l, two", format("{RED}{BOLD}{0}, {1}, {2}", "zero", "§9one", "two"));
assertEquals("§zero", format("\\u00A7zero"));
assertEquals("\\u00A7zero", format("\\\\u00A7zero"));
assertEquals("\\§zero", format("\\\\\\u00A7zero"));
assertEquals("zero\n one", format("zero\\n one"));
assertEquals("zero\\n one", format("zero\\\\n one"));
assertEquals("ZeroZeroOneZero", format("{0}{0}{1}{0}", "Zero", "One"));
assertEquals("\"", format("{0}", "\""));
assertEquals("§c§czero, §9§9one§9, two", format("{RED}{RED}{0}, {BLUE}{1}, {2}", "zero", "{BLUE}one", "two"));
assertEquals("§c§czero, §9§9one§9, two", format("{RED}{RED}{0}, §9{1}, {2}", "zero", "§9one", "two"));
assertEquals("§c§czero, §9, ", format("{RED}{RED}{0}, §9{1}, {2}", "zero", "", ""));
assertEquals("§czero, §a", format("{RED}{0}, {GREEN}{1}", "zero", ""));
}
@Test
public void testFormat1() throws Exception {
TextFormatterSettings settings = new TextFormatterSettings().setEscaped('"');
assertEquals("\\\"", format(settings, "\""));
assertEquals("\\\"", format(settings, "{0}", "\""));
}
/**
* Test Line Return Settings
*/
@Test
public void testFormat2() throws Exception {
TextFormatterSettings settings = new TextFormatterSettings().setLineReturnPolicy(FormatPolicy.IGNORE);
assertEquals("\\r", format(settings, "\\r"));
assertEquals("\\n", format(settings, "\\n"));
assertEquals("\\r", format(settings, "{0}", "\\r"));
assertEquals("\\n", format(settings, "{0}", "\\n"));
settings = new TextFormatterSettings().setLineReturnPolicy(FormatPolicy.REMOVE);
assertEquals("", format(settings, "\\r"));
assertEquals("", format(settings, "\\n"));
assertEquals("", format(settings, "{0}", "\\r"));
assertEquals("", format(settings, "{0}", "\\n"));
}
/**
* Test Color Settings
*/
@Test
public void testFormat3() throws Exception {
TextFormatterSettings settings = new TextFormatterSettings().setColorPolicy(FormatPolicy.IGNORE);
assertEquals("{RED}redRed", format(settings, "{RED}red{0}", "Red"));
assertEquals("{RED}red{RED}Red", format(settings, "{RED}red{0}", "{RED}Red"));
settings = new TextFormatterSettings().setColorPolicy(FormatPolicy.REMOVE);
assertEquals("redRed", format(settings, "{RED}red{0}", "Red"));
assertEquals("redRed", format(settings, "{RED}red{0}", "{RED}Red"));
}
/**
* Test Unicode Settings
*/
@Test
public void testFormat4() throws Exception {
TextFormatterSettings settings = new TextFormatterSettings().setUnicodePolicy(FormatPolicy.IGNORE);
assertEquals("\\u00A7unicodeTest", format(settings, "\\u00A7unicode{0}", "Test"));
assertEquals("\\u00A7unicode\\u00A7Test", format(settings, "\\u00A7unicode{0}", "\\u00A7Test"));
settings = new TextFormatterSettings().setUnicodePolicy(FormatPolicy.REMOVE);
assertEquals("unicodeTest", format(settings, "\\u00A7unicode{0}", "Test"));
assertEquals("unicodeTest", format(settings, "\\u00A7unicode{0}", "\\u00A7Test"));
}
/**
* Test Argument Formatting Settings
*/
@Test
public void testFormat5() throws Exception {
TextFormatterSettings settings = new TextFormatterSettings().setIsArgsFormatted(false);
assertEquals("zero, one, two", format(settings, "{0}, {1}, {2}", "zero", "one", "two"));
assertEquals("§czero, one, two", format(settings, "{RED}{0}, {1}, {2}", "zero", "one", "two"));
assertEquals("§czero, §9one§c, two", format(settings, "{RED}{0}, {1}, {2}", "zero", "§9one", "two"));
assertEquals("§czero, {BLUE}one, two", format(settings, "{RED}{0}, {1}, {2}", "zero", "{BLUE}one", "two"));
assertEquals("§unicode\\u00A7Test", format(settings, "\\u00A7unicode{0}", "\\u00A7Test"));
assertEquals("\n \\n", format(settings, "\\n {0}", "\\n"));
settings.setEscaped('\"');
assertEquals("\\\"\"", format(settings, "\"{0}", "\""));
}
/**
* Test chat message arg
*/
@Test
public void testFormat6() throws Exception {
IChatMessage message1 = TextUtils.format("{RED}red");
assertEquals("§cred", format("{0}", message1));
assertEquals("§cred§9 blue", format("{0}{BLUE} blue", message1));
assertEquals("§9§cred§9 blue", format("{BLUE}{0} blue", message1));
}
/**
* Test reset
*/
@Test
public void testFormat7() throws Exception {
assertEquals("§ctest§r reset", format("{RED}test{RESET} reset"));
assertEquals("§ctest§r reset", format("{RED}test§r reset"));
assertEquals("§ctest§r reset", format("§ctest§r reset"));
assertEquals("§ctest§r reset", format("§ctest{RESET} reset"));
}
private String format(TextFormatterSettings settings, String template, Object... args) {
return TextUtils.format(settings, template, args).toString();
}
private String format(String template, Object... args) {
return TextUtils.format(template, args).toString();
}
}