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