EMMA Coverage Report (generated Mon Nov 01 16:48:29 PDT 2010)
[all classes][com.google.caja.lang.css]

COVERAGE SUMMARY FOR SOURCE FILE [JSRETest.java]

nameclass, %method, %block, %line, %
JSRETest.java100% (1/1)100% (3/3)100% (711/711)100% (63/63)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class JSRETest100% (1/1)100% (3/3)100% (711/711)100% (63/63)
JSRETest (): void 100% (1/1)100% (3/3)100% (1/1)
assertOptimized (String, JSRE): void 100% (1/1)100% (20/20)100% (5/5)
testOptimize (): void 100% (1/1)100% (688/688)100% (57/57)

1// Copyright (C) 2010 Google Inc.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//      http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14 
15package com.google.caja.lang.css;
16 
17import junit.framework.TestCase;
18import static com.google.caja.lang.css.JSRE.alt;
19import static com.google.caja.lang.css.JSRE.any;
20import static com.google.caja.lang.css.JSRE.cat;
21import static com.google.caja.lang.css.JSRE.lit;
22import static com.google.caja.lang.css.JSRE.many;
23import static com.google.caja.lang.css.JSRE.opt;
24import static com.google.caja.lang.css.JSRE.raw;
25import static com.google.caja.lang.css.JSRE.rep;
26 
27public class JSRETest extends TestCase {
28  public final void testOptimize() {
29    assertOptimized("foo", lit("foo"));
30    assertOptimized("foo", raw("foo"));
31    assertEquals("(?:fo)(?:o)*", "" + cat(lit("fo"), any(lit("o"))));
32    assertOptimized("fo+", cat(lit("fo"), any(lit("o"))));
33    assertOptimized("bar\\\\baz", lit("bar\\baz"));
34    assertOptimized("bar\\baz", raw("bar\\baz"));
35    assertOptimized("foo|bar", alt(lit("foo"), lit("bar")));
36    assertOptimized("b(?:a|ee)r", alt(lit("bar"), lit("beer")));
37    assertOptimized("be[ae]r", alt(lit("bear"), lit("beer")));
38    assertOptimized(
39        "a[+\\-\\n]b",
40        alt(lit("a+b"), lit("a-b"), cat(raw("a"), raw("\\n"), raw("b"))));
41    assertOptimized("barn?", alt(lit("bar"), lit("barn")));
42    assertOptimized("b?ear", alt(lit("bear"), lit("ear")));
43    assertOptimized("", alt(cat(), lit(""), raw("")));
44    assertOptimized("(?:foo)?", opt(lit("foo")));
45    assertOptimized("(?:foo)+", many(lit("foo")));
46    assertOptimized("(?:foo)*", any(lit("foo")));
47    JSRE x = lit("x");
48    assertOptimized("x?", opt(opt(x)));
49    assertOptimized("x*", many(opt(x)));
50    assertOptimized("x*", any(opt(x)));
51    assertOptimized("x*", rep(opt(x), 2, Integer.MAX_VALUE));
52    assertOptimized("x{0,4}", rep(opt(x), 2, 4));
53    assertOptimized("x*", opt(any(x)));
54    assertOptimized("x*", any(any(x)));
55    assertOptimized("x*", many(any(x)));
56    assertOptimized("x*", rep(any(x), 2, 3));
57    assertOptimized("x*", opt(many(x)));
58    assertOptimized("x*", any(many(x)));
59    assertOptimized("x+", many(many(x)));
60    assertOptimized("x{2,}", rep(many(x), 2, 4));
61    assertOptimized("(?:x{2,4})*", any(rep(x, 2, 4)));
62    assertOptimized("(?:x{2,4})+", many(rep(x, 2, 4)));
63    assertOptimized("(?:x{2,4})?", opt(rep(x, 2, 4)));
64    assertOptimized("(?:x{2,4}){1,3}", rep(rep(x, 2, 4), 1, 3));
65    assertOptimized("x{2,}", rep(x, 2, Integer.MAX_VALUE));
66    assertOptimized("x{0,4}", rep(x, 0, 4));
67    assertEquals("(?:foo)(?:foo)*", "" + cat(lit("foo"), any(lit("foo"))));
68    assertOptimized("(?:foo)+", cat(lit("foo"), any(lit("foo"))));
69    assertOptimized("(?:foo)+", cat(any(lit("foo")), lit("foo")));
70    assertOptimized("foo|ba[rz]", alt(lit("foo"), alt(lit("bar"), lit("baz"))));
71    assertOptimized("foo|bar|ak", alt(lit("foo"), alt(lit("bar"), lit("ak"))));
72    assertOptimized("[xy]", alt(x, x, x, lit("y"), x));
73    JSRE noop = lit("");
74    assertOptimized("[xy]?", alt(x, noop, x, lit("y"), x, noop));
75    assertOptimized("a(?:bac){1,2}", alt(lit("abacbac"), lit("abac")));
76    assertOptimized("a(?:bac){1,2}", alt(lit("abac"), lit("abacbac")));
77    assertOptimized("ab", cat(lit("a"), noop, lit("b")));
78    assertOptimized("foo", rep(lit("foo"), 1, 1));
79    assertOptimized("", opt(noop));
80    assertOptimized("", many(noop));
81    assertOptimized("x*(?:foo)?", cat(any(x), opt(cat(any(x), lit("foo")))));
82    assertOptimized("[ab]", alt(lit("a"), lit("b")));
83    assertOptimized("[ab]", alt(lit("b"), lit("a")));
84    assertOptimized("[a-c]", alt(lit("a"), lit("b"), lit("c")));
85    assertOptimized(
86        "[BCa-c]", alt(lit("b"), lit("C"), lit("a"), lit("B"), lit("c")));
87    assertOptimized(
88        "[ACa-c]", alt(lit("b"), lit("A"), lit("a"), lit("C"), lit("c")));
89  }
90 
91  private static void assertOptimized(String regex, JSRE p) {
92    assertEquals(p, p);
93    JSRE optimized = p.optimize();
94    assertEquals(optimized, optimized);
95    assertEquals(regex, "" + optimized);
96  }
97}

[all classes][com.google.caja.lang.css]
EMMA 2.0.5312 (C) Vladimir Roubtsov