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