package jenkins.util; import static org.junit.Assert.*; import java.util.ArrayList; import java.util.List; import java.util.Random; import org.junit.Test; /** * Tests the class {@link TreeStringBuilder}. * * @author Kohsuke Kawaguchi */ @SuppressWarnings({"PMD", "all"}) //CHECKSTYLE:OFF public class TreeStringBuilderTest { /** * Tests the simple operations inside the builder. */ @Test public void test() { TreeStringBuilder b = new TreeStringBuilder(); verify("foo", b.intern("foo")); TreeString s = b.intern("foo/bar/zot"); verify("foo/bar/zot", s); verify("", b.intern("")); verify("foo/bar/xxx", b.intern("foo/bar/xxx")); // this will create new // middle node verify("foo/bar/zot", s); // make sure existing strings aren't affected } /** * Pseudo random (but deterministic) test. */ @Test public void testRandom() { String[] dict = new String[]{"aa","b","aba","ba"}; TreeStringBuilder x = new TreeStringBuilder(); Random r = new Random(0); List<String> a = new ArrayList<String>(); List<TreeString> o = new ArrayList<TreeString>(); for (int i = 0; i < 1000; i++) { StringBuilder b = new StringBuilder(); for (int j = 0; j < r.nextInt(10) + 3; j++) { b.append(dict[r.nextInt(4)]); } String s = b.toString(); a.add(s); TreeString p = x.intern(s); verify(s, p); o.add(p); } // make sure values are still all intact for (int i = 0; i < a.size(); i++) { verify(a.get(i), o.get(i)); } x.dedup(); // verify one more time for (int i = 0; i < a.size(); i++) { verify(a.get(i), o.get(i)); } } private void verify(final String s, final TreeString t) { assertEquals(s, t.toString()); } }