package org.nutz.lang.segment; import static org.junit.Assert.*; import org.junit.Test; import org.nutz.lang.segment.CharSegment; import org.nutz.lang.segment.Segment; public class CharSegmentTest { @Test public void testNormal() { Segment seg = Segments.create("H${4}B"); seg.set("4", "zzh"); assertEquals("H${4}B", seg.getOrginalString()); assertEquals("HzzhB", seg.toString()); assertEquals(1, seg.keys().size()); assertEquals(3, seg.values().size()); } @Test public void testWrongPPname() { Segment seg = Segments.create("H${4}B"); seg.set("RVT", "zzh"); assertEquals("HB", seg.toString()); seg.set("4", "zzh"); assertEquals("HzzhB", seg.toString()); assertEquals(1, seg.keys().size()); assertEquals(3, seg.values().size()); } @Test(expected = RuntimeException.class) public void testLackRightBracket() { Segments.create("H${4"); } @Test public void testLackLeftBracket() { Segment seg = Segments.create("H$4}B"); assertEquals("H$4}B", seg.toString()); assertEquals(0, seg.keys().size()); assertEquals(1, seg.values().size()); } @Test public void testEscapeChar() { Segment seg = Segments.create("H$$4}B"); assertEquals("H$4}B", seg.toString()); assertEquals(0, seg.keys().size()); assertEquals(1, seg.values().size()); } @Test public void testEscapeChar2() { Segment seg = Segments.create("H$$$4}B"); assertEquals("H$$4}B", seg.toString()); } @Test public void testEscapeChar3() { Segment seg = Segments.create("H$$$$4}B"); assertEquals("H$$4}B", seg.toString()); } @Test public void testAtTheEnd() { Segment seg = Segments.create("H${4}"); seg.set("4", "zzh"); assertEquals("Hzzh", seg.toString()); assertEquals(1, seg.keys().size()); assertEquals(2, seg.values().size()); } @Test public void testAtTheBegin() { Segment seg = Segments.create("${4}B"); seg.set("4", "zzh"); assertEquals("zzhB", seg.toString()); assertEquals(1, seg.keys().size()); assertEquals(2, seg.values().size()); } @Test public void testTwoPoints() { Segment seg = Segments.create("A${1}B${2}C"); seg.set("1", "$p1"); seg.set("2", "$p2"); assertEquals("A$p1B$p2C", seg.toString()); assertEquals(2, seg.keys().size()); assertEquals(5, seg.values().size()); } @Test public void testTwoSamePoints() { Segment seg = Segments.create("A${1}B${1}C"); seg.set("1", "$p1"); assertEquals("A$p1B$p1C", seg.toString()); assertEquals(1, seg.keys().size()); assertEquals(5, seg.values().size()); } @Test public void testThreePoints() { Segment seg = Segments.create("A${1}B${1}C${2}D"); seg.set("1", "$p1"); seg.set("2", "$p2"); assertEquals("A$p1B$p1C$p2D", seg.toString()); assertEquals(2, seg.keys().size()); assertEquals(7, seg.values().size()); } @Test public void testClearAll() { Segment seg = Segments.create("A${1}B${1}C${2}D"); seg.set("1", "T1"); seg.set("2", "T2"); seg.clearAll(); assertEquals("ABCD", seg.toString()); } @Test public void testCloseDynamicMark_E1() { Segment seg = Segments.create("A${1}}}B"); seg.set("1", "T1"); assertEquals("AT1}}B", seg.toString()); } @Test public void testBorn() { Segment seg = Segments.create("A${a}B"); seg.set("a", "A"); assertEquals("AAB", seg.toString()); Segment seg2 = (CharSegment) seg.born(); assertEquals("AB", seg2.toString()); assertEquals("AAB", seg.toString()); } @Test public void testClone() { Segment seg = Segments.create("A${a}B"); seg.set("a", "A"); assertEquals("AAB", seg.toString()); Segment seg2 = (CharSegment) seg.clone(); seg.set("a", "FF"); assertEquals("AAB", seg2.toString()); assertEquals("AFFB", seg.toString()); } @Test public void testTrueFalse() { Segment seg = Segments.create("true:[${true}]\tfalse:[${false}]"); seg.set("true", true); seg.set("false", false); assertEquals("true:[true]\tfalse:[false]", seg.toString()); } @Test public void testKeys() { Segment seg = Segments.create("-${A}-${B}-${A}-${B}-"); assertEquals(2, seg.keys().size()); seg.set("A", "[a]"); seg.set("B", "[b]"); assertEquals("-[a]-[b]-[a]-[b]-", seg.toString()); } @Test public void testAddPP1() { Segment seg = Segments.create("-${A}-"); seg.add("A", "A"); seg.add("A", "B"); seg.add("A", "C"); assertEquals("-ABC-", seg.toString()); seg.set("A", "HH"); assertEquals("-HH-", seg.toString()); } @Test public void testAddPP2() { Segment seg = Segments.create("-${A}-${B}-"); seg.add("A", "A"); seg.add("A", "B"); seg.add("A", "C"); seg.add("B", "H"); seg.add("B", "M"); assertEquals("-ABC-HM-", seg.toString()); seg.set("B", "ZZH"); assertEquals("-ABC-ZZH-", seg.toString()); } @Test public void testAddPP3() { Segment seg = Segments.create("-${A}-${B}-"); Segment sub = Segments.create("[${V}]"); Segment sub2 = Segments.create("%${V}%"); seg.add("A", sub); seg.add("A", sub2); seg.set("B", "***"); sub.set("V", "#"); sub2.set("V", "@"); assertEquals("-[#]%@%-***-", seg.toString()); seg.set("B", "ZZH"); assertEquals("-[#]%@%-ZZH-", seg.toString()); } @Test public void testChineseChar() { String s = new StringBuilder().append((char) Integer.parseInt("6211", 16)).toString(); Segment seg = Segments.create(s); assertTrue(s.equals(seg.toString())); } public void test_blankKeys() { Segment seg = Segments.create("1${A}2${B}3${C}4${D}5"); // assertEquals(4, seg.blankKeys().size()); seg.set("A", 34); seg.set("D", "GG"); // assertEquals(2, seg.blankKeys().size()); } }