/* LanguageTool, a natural language style checker
* Copyright (C) 2006 Daniel Naber (http://www.danielnaber.de)
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
* USA
*/
package org.languagetool.tools;
import junit.framework.TestCase;
import org.languagetool.Language;
import org.languagetool.TestTools;
import org.languagetool.FakeLanguage;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;
/**
* @author Daniel Naber
*/
public class StringToolsTest extends TestCase {
public void testAssureSet() {
try {
StringTools.assureSet("", "varName");
fail();
} catch (IllegalArgumentException expected) {}
try {
StringTools.assureSet(" \t", "varName");
fail();
} catch (IllegalArgumentException expected) {}
try {
StringTools.assureSet(null, "varName");
fail();
} catch (NullPointerException expected) {}
StringTools.assureSet("foo", "varName");
}
public void testReadStream() throws IOException {
final String content = StringTools.readStream(new FileInputStream("src/test/resources/testinput.txt"), "utf-8");
assertEquals("one\ntwo\nöäüß\nșțîâăȘȚÎÂĂ\n", content);
}
public void testIsAllUppercase() {
assertTrue(StringTools.isAllUppercase("A"));
assertTrue(StringTools.isAllUppercase("ABC"));
assertTrue(StringTools.isAllUppercase("ASV-EDR"));
assertTrue(StringTools.isAllUppercase("ASV-ÖÄÜ"));
assertTrue(StringTools.isAllUppercase(""));
assertFalse(StringTools.isAllUppercase("ß"));
assertFalse(StringTools.isAllUppercase("AAAAAAAAAAAAq"));
assertFalse(StringTools.isAllUppercase("a"));
assertFalse(StringTools.isAllUppercase("abc"));
}
public void testIsMixedCase() {
assertTrue(StringTools.isMixedCase("AbC"));
assertTrue(StringTools.isMixedCase("MixedCase"));
assertTrue(StringTools.isMixedCase("iPod"));
assertTrue(StringTools.isMixedCase("AbCdE"));
assertFalse(StringTools.isMixedCase(""));
assertFalse(StringTools.isMixedCase("ABC"));
assertFalse(StringTools.isMixedCase("abc"));
assertFalse(StringTools.isMixedCase("!"));
assertFalse(StringTools.isMixedCase("Word"));
}
public void testIsCapitalizedWord() {
assertTrue(StringTools.isCapitalizedWord("Abc"));
assertTrue(StringTools.isCapitalizedWord("Uppercase"));
assertTrue(StringTools.isCapitalizedWord("Ipod"));
assertFalse(StringTools.isCapitalizedWord(""));
assertFalse(StringTools.isCapitalizedWord("ABC"));
assertFalse(StringTools.isCapitalizedWord("abc"));
assertFalse(StringTools.isCapitalizedWord("!"));
assertFalse(StringTools.isCapitalizedWord("wOrD"));
}
public void testStartsWithUppercase() {
assertTrue(StringTools.startsWithUppercase("A"));
assertTrue(StringTools.startsWithUppercase("ÄÖ"));
assertFalse(StringTools.startsWithUppercase(""));
assertFalse(StringTools.startsWithUppercase("ß"));
assertFalse(StringTools.startsWithUppercase("-"));
}
public void testUppercaseFirstChar() {
assertEquals("", StringTools.uppercaseFirstChar(""));
assertEquals("A", StringTools.uppercaseFirstChar("A"));
assertEquals("Öäü", StringTools.uppercaseFirstChar("öäü"));
assertEquals("ßa", StringTools.uppercaseFirstChar("ßa"));
assertEquals("'Test'", StringTools.uppercaseFirstChar("'test'"));
assertEquals("''Test", StringTools.uppercaseFirstChar("''test"));
assertEquals("''T", StringTools.uppercaseFirstChar("''t"));
assertEquals("'''", StringTools.uppercaseFirstChar("'''"));
}
public void testLowercaseFirstChar() {
assertEquals("", StringTools.lowercaseFirstChar(""));
assertEquals("a", StringTools.lowercaseFirstChar("A"));
assertEquals("öäü", StringTools.lowercaseFirstChar("Öäü"));
assertEquals("ßa", StringTools.lowercaseFirstChar("ßa"));
assertEquals("'test'", StringTools.lowercaseFirstChar("'Test'"));
assertEquals("''test", StringTools.lowercaseFirstChar("''Test"));
assertEquals("''t", StringTools.lowercaseFirstChar("''T"));
assertEquals("'''", StringTools.lowercaseFirstChar("'''"));
}
public void testReaderToString() throws IOException {
final String str = StringTools.readerToString(new StringReader("bla\nöäü"));
assertEquals("bla\nöäü", str);
final StringBuilder longStr = new StringBuilder();
for (int i = 0; i < 4000; i++) {
longStr.append("x");
}
longStr.append("1234567");
assertEquals(4007, longStr.length());
final String str2 = StringTools.readerToString(new StringReader(longStr.toString()));
assertEquals(longStr.toString(), str2);
}
public void testEscapeXMLandHTML() {
assertEquals("!ä"<>&&", StringTools.escapeXML("!ä\"<>&&"));
assertEquals("!ä"<>&&", StringTools.escapeHTML("!ä\"<>&&"));
}
public void testListToString() {
final List<String> list = new ArrayList<>();
list.add("foo");
list.add("bar");
list.add(",");
assertEquals("foo,bar,,", StringTools.listToString(list, ","));
assertEquals("foo\tbar\t,", StringTools.listToString(list, "\t"));
}
public void testTrimWhitespace() {
try {
assertEquals(null, StringTools.trimWhitespace(null));
fail();
} catch (NullPointerException expected) {}
assertEquals("", StringTools.trimWhitespace(""));
assertEquals("", StringTools.trimWhitespace(" "));
assertEquals("XXY", StringTools.trimWhitespace(" \nXX\t Y"));
assertEquals("XXY", StringTools.trimWhitespace(" \r\nXX\t Y"));
assertEquals("word", StringTools.trimWhitespace("word"));
//only one space in the middle of the word is significant:
assertEquals("1 234,56", StringTools.trimWhitespace("1 234,56"));
assertEquals("1234,56", StringTools.trimWhitespace("1 234,56"));
}
public void testAddSpace() {
Language demoLanguage = TestTools.getDemoLanguage();
assertEquals(" ", StringTools.addSpace("word", demoLanguage));
assertEquals("", StringTools.addSpace(",", demoLanguage));
assertEquals("", StringTools.addSpace(",", demoLanguage));
assertEquals("", StringTools.addSpace(",", demoLanguage));
assertEquals("", StringTools.addSpace(".", new FakeLanguage("fr")));
assertEquals("", StringTools.addSpace(".", new FakeLanguage("de")));
assertEquals(" ", StringTools.addSpace("!", new FakeLanguage("fr")));
assertEquals("", StringTools.addSpace("!", new FakeLanguage("de")));
}
public void testIsWhitespace() {
assertEquals(true, StringTools.isWhitespace(" "));
assertEquals(true, StringTools.isWhitespace("\t"));
assertEquals(true, StringTools.isWhitespace("\u2002"));
//non-breaking space is not a whitespace
assertEquals(false, StringTools.isWhitespace("\u00a0"));
assertEquals(false, StringTools.isWhitespace("abc"));
//non-breaking OOo field
assertEquals(false, StringTools.isWhitespace("\\u02"));
assertEquals(false, StringTools.isWhitespace("\u0001"));
}
public void testIsPositiveNumber() {
assertEquals(true, StringTools.isPositiveNumber('3'));
assertEquals(false, StringTools.isPositiveNumber('a'));
}
public void testIsEmpty() {
assertEquals(true, StringTools.isEmpty(""));
assertEquals(true, StringTools.isEmpty(null));
assertEquals(false, StringTools.isEmpty("a"));
}
public void testFilterXML() {
assertEquals("test", StringTools.filterXML("test"));
assertEquals("<<test>>", StringTools.filterXML("<<test>>"));
assertEquals("test", StringTools.filterXML("<b>test</b>"));
assertEquals("A sentence with a test", StringTools.filterXML("A sentence with a <em>test</em>"));
}
public void testAsString() {
assertNull(StringTools.asString(null));
assertEquals("foo!", "foo!");
}
}