1eec952b3de4809092316c90f9523b7ad74885ac1mikesamuelpackage org.owasp.html; 2eec952b3de4809092316c90f9523b7ad74885ac1mikesamuel 3eec952b3de4809092316c90f9523b7ad74885ac1mikesamuelimport java.util.Arrays; 4eec952b3de4809092316c90f9523b7ad74885ac1mikesamuelimport java.util.List; 5eec952b3de4809092316c90f9523b7ad74885ac1mikesamuel 6eec952b3de4809092316c90f9523b7ad74885ac1mikesamuelimport javax.annotation.Nullable; 7eec952b3de4809092316c90f9523b7ad74885ac1mikesamuel 8be666032a113a8af92bc557add8e83579cf0ef5cmikesamuelimport org.junit.Test; 9be666032a113a8af92bc557add8e83579cf0ef5cmikesamuel 10eec952b3de4809092316c90f9523b7ad74885ac1mikesamuelimport junit.framework.TestCase; 11eec952b3de4809092316c90f9523b7ad74885ac1mikesamuel 12eec952b3de4809092316c90f9523b7ad74885ac1mikesamuelimport com.google.common.collect.ImmutableList; 13eec952b3de4809092316c90f9523b7ad74885ac1mikesamuelimport com.google.common.collect.Lists; 14eec952b3de4809092316c90f9523b7ad74885ac1mikesamuel 15eec952b3de4809092316c90f9523b7ad74885ac1mikesamuelimport static org.owasp.html.ElementPolicy.REJECT_ALL_ELEMENT_POLICY; 16eec952b3de4809092316c90f9523b7ad74885ac1mikesamuelimport static org.owasp.html.ElementPolicy.IDENTITY_ELEMENT_POLICY; 17eec952b3de4809092316c90f9523b7ad74885ac1mikesamuelimport static org.owasp.html.ElementPolicy.Util.join; 18eec952b3de4809092316c90f9523b7ad74885ac1mikesamuel 19eec952b3de4809092316c90f9523b7ad74885ac1mikesamuelpublic final class ElementPolicyTest extends TestCase { 20eec952b3de4809092316c90f9523b7ad74885ac1mikesamuel 21eec952b3de4809092316c90f9523b7ad74885ac1mikesamuel static class HasCharElementPolicy implements ElementPolicy { 22eec952b3de4809092316c90f9523b7ad74885ac1mikesamuel final char ch; 23eec952b3de4809092316c90f9523b7ad74885ac1mikesamuel 24eec952b3de4809092316c90f9523b7ad74885ac1mikesamuel HasCharElementPolicy(char ch) { 25eec952b3de4809092316c90f9523b7ad74885ac1mikesamuel this.ch = ch; 26eec952b3de4809092316c90f9523b7ad74885ac1mikesamuel } 27eec952b3de4809092316c90f9523b7ad74885ac1mikesamuel 28eec952b3de4809092316c90f9523b7ad74885ac1mikesamuel public @Nullable 29eec952b3de4809092316c90f9523b7ad74885ac1mikesamuel String apply(String elementName, List<String> attrs) { 30eec952b3de4809092316c90f9523b7ad74885ac1mikesamuel attrs.clear(); 31eec952b3de4809092316c90f9523b7ad74885ac1mikesamuel return elementName.indexOf(ch) >= 0 ? elementName : null; 32eec952b3de4809092316c90f9523b7ad74885ac1mikesamuel } 33eec952b3de4809092316c90f9523b7ad74885ac1mikesamuel 34eec952b3de4809092316c90f9523b7ad74885ac1mikesamuel @Override 35eec952b3de4809092316c90f9523b7ad74885ac1mikesamuel public String toString() { 36eec952b3de4809092316c90f9523b7ad74885ac1mikesamuel return "(has '" + ch + "')"; 37eec952b3de4809092316c90f9523b7ad74885ac1mikesamuel } 38eec952b3de4809092316c90f9523b7ad74885ac1mikesamuel } 39eec952b3de4809092316c90f9523b7ad74885ac1mikesamuel 40be666032a113a8af92bc557add8e83579cf0ef5cmikesamuel private static void assertPassed(ElementPolicy p, String... expected) { 41eec952b3de4809092316c90f9523b7ad74885ac1mikesamuel List<String> attrs = Lists.newArrayList(); 42eec952b3de4809092316c90f9523b7ad74885ac1mikesamuel ImmutableList.Builder<String> actual = ImmutableList.builder(); 43eec952b3de4809092316c90f9523b7ad74885ac1mikesamuel for (String elName : TEST_EL_NAMES) { 44eec952b3de4809092316c90f9523b7ad74885ac1mikesamuel if (p.apply(elName, attrs) != null) { 45eec952b3de4809092316c90f9523b7ad74885ac1mikesamuel actual.add(elName); 46eec952b3de4809092316c90f9523b7ad74885ac1mikesamuel } 47eec952b3de4809092316c90f9523b7ad74885ac1mikesamuel } 48eec952b3de4809092316c90f9523b7ad74885ac1mikesamuel assertEquals(p.toString(), Arrays.asList(expected), actual.build()); 49eec952b3de4809092316c90f9523b7ad74885ac1mikesamuel } 50eec952b3de4809092316c90f9523b7ad74885ac1mikesamuel 51eec952b3de4809092316c90f9523b7ad74885ac1mikesamuel private static List<String> TEST_EL_NAMES = ImmutableList.of( 52eec952b3de4809092316c90f9523b7ad74885ac1mikesamuel "abacus", "abracadabra", "bar", "foo", "far", "cadr", "cdr"); 53eec952b3de4809092316c90f9523b7ad74885ac1mikesamuel 54be666032a113a8af92bc557add8e83579cf0ef5cmikesamuel @Test 55be666032a113a8af92bc557add8e83579cf0ef5cmikesamuel public static final void testJoin() { 56eec952b3de4809092316c90f9523b7ad74885ac1mikesamuel ElementPolicy a = new HasCharElementPolicy('a'); 57eec952b3de4809092316c90f9523b7ad74885ac1mikesamuel ElementPolicy b = new HasCharElementPolicy('b'); 58eec952b3de4809092316c90f9523b7ad74885ac1mikesamuel ElementPolicy c = new HasCharElementPolicy('c'); 59eec952b3de4809092316c90f9523b7ad74885ac1mikesamuel ElementPolicy d = new HasCharElementPolicy('d'); 60eec952b3de4809092316c90f9523b7ad74885ac1mikesamuel assertPassed(REJECT_ALL_ELEMENT_POLICY); 61eec952b3de4809092316c90f9523b7ad74885ac1mikesamuel assertPassed(IDENTITY_ELEMENT_POLICY, 62eec952b3de4809092316c90f9523b7ad74885ac1mikesamuel TEST_EL_NAMES.toArray(new String[0])); 63eec952b3de4809092316c90f9523b7ad74885ac1mikesamuel assertPassed(a, "abacus", "abracadabra", "bar", "far", "cadr"); 64eec952b3de4809092316c90f9523b7ad74885ac1mikesamuel assertPassed(c, "abacus", "abracadabra", "cadr", "cdr"); 65eec952b3de4809092316c90f9523b7ad74885ac1mikesamuel assertPassed(d, "abracadabra", "cadr", "cdr"); 66eec952b3de4809092316c90f9523b7ad74885ac1mikesamuel ElementPolicy a_b = join(a, b); 67eec952b3de4809092316c90f9523b7ad74885ac1mikesamuel ElementPolicy b_a = join(b, a); 68eec952b3de4809092316c90f9523b7ad74885ac1mikesamuel assertPassed(a_b, "abacus", "abracadabra", "bar"); 69eec952b3de4809092316c90f9523b7ad74885ac1mikesamuel assertPassed(b_a, "abacus", "abracadabra", "bar"); 70eec952b3de4809092316c90f9523b7ad74885ac1mikesamuel assertPassed(join(b_a, b_a), "abacus", "abracadabra", "bar"); 71eec952b3de4809092316c90f9523b7ad74885ac1mikesamuel assertPassed(join(a_b, c), "abacus", "abracadabra"); 72eec952b3de4809092316c90f9523b7ad74885ac1mikesamuel assertPassed(join(c, REJECT_ALL_ELEMENT_POLICY)); 73eec952b3de4809092316c90f9523b7ad74885ac1mikesamuel assertPassed(join(REJECT_ALL_ELEMENT_POLICY, a_b)); 74eec952b3de4809092316c90f9523b7ad74885ac1mikesamuel } 75eec952b3de4809092316c90f9523b7ad74885ac1mikesamuel 76eec952b3de4809092316c90f9523b7ad74885ac1mikesamuel} 77