package org.bndtools.utils.parse.properties;
import static org.bndtools.utils.parse.properties.LineType.*;
import junit.framework.TestCase;
import org.eclipse.jface.text.Region;
public class TestPropertiesLineReader extends TestCase {
public static void testEmpty() throws Exception {
String input = "\n" + " \n" + "\t ";
PropertiesLineReader reader = new PropertiesLineReader(input);
assertEquals(blank, reader.next());
assertEquals(new Region(0, 0), reader.region());
assertEquals(blank, reader.next());
assertEquals(new Region(1, 2), reader.region());
assertEquals(blank, reader.next());
assertEquals(new Region(4, 3), reader.region());
assertEquals(eof, reader.next());
}
public static void testRegionAfterEOF() throws Exception {
PropertiesLineReader reader = new PropertiesLineReader("");
assertEquals(blank, reader.next());
assertEquals(new Region(0, 0), reader.region());
assertEquals(eof, reader.next());
try {
reader.region();
fail("Should throw IllegalStateException");
} catch (IllegalStateException e) {
// expected
}
}
public static void testComment() throws Exception {
String input = "# comment";
PropertiesLineReader reader = new PropertiesLineReader(input);
assertEquals(comment, reader.next());
assertEquals(new Region(0, 9), reader.region());
assertEquals(eof, reader.next());
}
public static void testCommentLines() throws Exception {
String input = "# comment1\n" + "# comment2\n" + " # comment3\n" + "! comment4\n" + " ! comment5";
PropertiesLineReader reader = new PropertiesLineReader(input);
assertEquals(comment, reader.next());
assertEquals(new Region(0, 10), reader.region());
assertEquals(comment, reader.next());
assertEquals(new Region(11, 10), reader.region());
assertEquals(comment, reader.next());
assertEquals(new Region(22, 13), reader.region());
assertEquals(comment, reader.next());
assertEquals(new Region(36, 10), reader.region());
assertEquals(comment, reader.next());
assertEquals(new Region(47, 13), reader.region());
assertEquals(eof, reader.next());
}
public static void testCommentsDontContinue() throws Exception {
// first comment ends with backslash but this shouldn't continue the
// line
String input = "# comment\\\n# comment";
PropertiesLineReader reader = new PropertiesLineReader(input);
assertEquals(comment, reader.next());
assertEquals(new Region(0, 10), reader.region());
assertEquals(comment, reader.next());
assertEquals(new Region(11, 9), reader.region());
assertEquals(eof, reader.next());
}
public static void testEntryLines() throws Exception {
String input = "foo=bar\n" + "foo2:bar2\n" + " foo3:bar3";
PropertiesLineReader reader = new PropertiesLineReader(input);
assertEquals(entry, reader.next());
assertEquals(new Region(0, 7), reader.region());
assertEquals("foo", reader.key());
assertEquals(entry, reader.next());
assertEquals(new Region(8, 9), reader.region());
assertEquals("foo2", reader.key());
assertEquals(entry, reader.next());
assertEquals(new Region(18, 12), reader.region());
assertEquals("foo3", reader.key());
}
public static void testContinuedLine() throws Exception {
String input = "foo=bar,\\\n" + " baz";
PropertiesLineReader reader = new PropertiesLineReader(input);
assertEquals(entry, reader.next());
assertEquals(new Region(0, 15), reader.region());
assertEquals("foo", reader.key());
}
public static void testTrailingWhitespaceAfterKey() throws Exception {
String input = " hello :world";
PropertiesLineReader reader = new PropertiesLineReader(input);
assertEquals(entry, reader.next());
assertEquals(new Region(0, 16), reader.region());
assertEquals("hello", reader.key());
}
public static void testEscapedCharsInKey() throws Exception {
String input = "hel\\ \\ lo: world\n" + "hell\\=o\\:world=foo";
PropertiesLineReader reader = new PropertiesLineReader(input);
assertEquals(entry, reader.next());
assertEquals(new Region(0, 16), reader.region());
assertEquals("hel lo", reader.key());
assertEquals(entry, reader.next());
assertEquals(new Region(17, 18), reader.region());
assertEquals("hell=o:world", reader.key());
}
public static void testEmptyValue() throws Exception {
String input = "cheeses";
PropertiesLineReader reader = new PropertiesLineReader(input);
assertEquals(entry, reader.next());
assertEquals(new Region(0, 7), reader.region());
assertEquals("cheeses", reader.key());
}
public static void testCarriageReturnAndLineFeed() throws Exception {
String input = "line1=foo\r\n" + "line2=foo,\\\r\n" + " bar";
PropertiesLineReader reader = new PropertiesLineReader(input);
assertEquals(entry, reader.next());
assertEquals(new Region(0, 9), reader.region());
assertEquals("line1", reader.key());
assertEquals(entry, reader.next());
assertEquals(new Region(11, 18), reader.region());
assertEquals("line2", reader.key());
}
}