You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@shindig.apache.org by lr...@apache.org on 2009/02/24 02:03:09 UTC
svn commit: r747244 - in /incubator/shindig/trunk/java/gadgets/src:
main/java/org/apache/shindig/gadgets/parse/caja/
main/java/org/apache/shindig/gadgets/rewrite/
test/java/org/apache/shindig/gadgets/parse/caja/
test/java/org/apache/shindig/gadgets/rew...
Author: lryan
Date: Tue Feb 24 01:03:09 2009
New Revision: 747244
URL: http://svn.apache.org/viewvc?rev=747244&view=rev
Log:
Converting CSS rewriting back to a Caja lexer based solution until the Caja DOM parser becomes more lenient. For examples
of problem cases see CajaCssParserTest
Added:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/caja/CajaCssLexerParser.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/parse/caja/CajaCssLexerParserTest.java
Modified:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/caja/CajaCssParser.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CSSContentRewriter.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/parse/caja/CajaCssParserTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/CSSContentRewriterTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/HTMLContentRewriterTest.java
incubator/shindig/trunk/java/gadgets/src/test/resources/org/apache/shindig/gadgets/rewrite/rewritebasic-expected.css
Added: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/caja/CajaCssLexerParser.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/caja/CajaCssLexerParser.java?rev=747244&view=auto
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/caja/CajaCssLexerParser.java (added)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/caja/CajaCssLexerParser.java Tue Feb 24 01:03:09 2009
@@ -0,0 +1,205 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package org.apache.shindig.gadgets.parse.caja;
+
+import org.apache.shindig.common.cache.Cache;
+import org.apache.shindig.common.cache.CacheProvider;
+import org.apache.shindig.common.util.HashUtil;
+import org.apache.shindig.gadgets.GadgetException;
+
+import com.google.caja.lexer.CharProducer;
+import com.google.caja.lexer.CssLexer;
+import com.google.caja.lexer.CssTokenType;
+import com.google.caja.lexer.InputSource;
+import com.google.caja.lexer.ParseException;
+import com.google.caja.lexer.Token;
+import com.google.common.collect.Lists;
+import com.google.inject.Inject;
+
+import java.io.IOException;
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.net.URI;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * A parser that records the stream of CSS lexial tokens from the Caja lexer and creates a
+ * pseudo-DOM from that stream.
+ *
+ * TODO: Remove once Caja CSS DOM parser issues are resolved.
+ */
+public class CajaCssLexerParser {
+
+ private static final Pattern urlMatcher =
+ Pattern.compile("(url\\s*\\(\\s*['\"]?)([^\\)'\"]*)(['\"]?\\s*\\))",
+ Pattern.CASE_INSENSITIVE);
+
+ private static final URI DUMMY_SOURCE = URI.create("http://www.example.org");
+
+ private static final String PARSED_CSS = "parsedCss";
+
+ private Cache<String, List<Object>> parsedCssCache;
+
+ @Inject
+ public void setCacheProvider(CacheProvider cacheProvider) {
+ parsedCssCache = cacheProvider.createCache(PARSED_CSS);
+ }
+
+ public List<Object> parse(String content) throws GadgetException {
+ List<Object> parsedCss = null;
+ boolean shouldCache = shouldCache();
+ String key = null;
+ if (shouldCache) {
+ // TODO - Consider using the source if its under a certain size
+ key = HashUtil.rawChecksum(content.getBytes());
+ parsedCss = parsedCssCache.getElement(key);
+ }
+ if (parsedCss == null) {
+ parsedCss = Lists.newArrayList();
+ CharProducer producer = CharProducer.Factory.create(new StringReader(content),
+ new InputSource(DUMMY_SOURCE));
+ CssLexer lexer = new CssLexer(producer);
+ try {
+ StringBuilder builder = new StringBuilder();
+ boolean inImport = false;
+ while (lexer.hasNext()) {
+ Token<CssTokenType> token = lexer.next();
+ if (token.type == CssTokenType.SYMBOL && token.text.equalsIgnoreCase("@import")) {
+ parsedCss.add(builder.toString());
+ builder.setLength(0);
+ inImport = true;
+ } else if (inImport) {
+ if (token.type == CssTokenType.URI) {
+ parsedCss.add(builder.toString());
+ builder.setLength(0);
+ Matcher matcher = urlMatcher.matcher(token.text);
+ if (matcher.find()) {
+ parsedCss.add(new ImportDecl(matcher.group(2).trim()));
+ }
+ } else if (token.type != CssTokenType.SPACE && token.type != CssTokenType.PUNCTUATION) {
+ inImport = false;
+ builder.append(token.text);
+ } else {
+ //builder.append(token.text);
+ }
+ } else if (token.type == CssTokenType.URI) {
+ Matcher matcher = urlMatcher.matcher(token.text);
+ if (!matcher.find()) {
+ builder.append(token.text);
+ } else {
+ parsedCss.add(builder.toString());
+ builder.setLength(0);
+ parsedCss.add(new UriDecl(matcher.group(2).trim()));
+ }
+ } else {
+ builder.append(token.text);
+ }
+ }
+ parsedCss.add(builder.toString());
+
+ if (shouldCache) {
+ parsedCssCache.addElement(key, parsedCss);
+ }
+ } catch (ParseException pe) {
+ throw new GadgetException(GadgetException.Code.CSS_PARSE_ERROR, pe);
+ }
+ }
+
+ if (shouldCache) {
+ List<Object> cloned = Lists.newArrayListWithExpectedSize(parsedCss.size());
+ for (Object o : parsedCss) {
+ if (o instanceof ImportDecl) {
+ cloned.add(new ImportDecl(((ImportDecl) o).getUri()));
+ } else if (o instanceof UriDecl) {
+ cloned.add(new ImportDecl(((UriDecl) o).getUri()));
+ } else {
+ cloned.add(o);
+ }
+ }
+ return cloned;
+ }
+ return parsedCss;
+ }
+
+ /** Serialize a stylesheet to a String */
+ public String serialize(List<Object> styleSheet) {
+ StringWriter writer = new StringWriter();
+ serialize(styleSheet, writer);
+ return writer.toString();
+ }
+
+ /** Serialize a stylesheet to a Writer. */
+ public void serialize(List<Object> styleSheet, Appendable writer) {
+ try {
+ for (Object o : styleSheet) {
+ writer.append(o.toString());
+ }
+ } catch (IOException ioe) {
+ throw new RuntimeException(ioe);
+ }
+ }
+
+
+ private boolean shouldCache() {
+ return parsedCssCache != null && parsedCssCache.getCapacity() != 0;
+ }
+
+ public static class ImportDecl {
+
+ private String uri;
+
+ public ImportDecl(String uri) {
+ this.uri = uri;
+ }
+
+ public String getUri() {
+ return uri;
+ }
+
+ public void setUri(String uri) {
+ this.uri = uri;
+ }
+
+ public String toString() {
+ return "@import url(\"" + uri + "\");\n";
+ }
+ }
+
+ public static class UriDecl {
+
+ private String uri;
+
+ public UriDecl(String uri) {
+ this.uri = uri;
+ }
+
+ public String getUri() {
+ return uri;
+ }
+
+ public void setUri(String uri) {
+ this.uri = uri;
+ }
+
+ public String toString() {
+ return "url(\"" + uri + "\");\n";
+ }
+ }
+}
Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/caja/CajaCssParser.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/caja/CajaCssParser.java?rev=747244&r1=747243&r2=747244&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/caja/CajaCssParser.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/caja/CajaCssParser.java Tue Feb 24 01:03:09 2009
@@ -56,7 +56,8 @@
*/
private static final URI FAKE_SOURCE = URI.create("http://a.dummy.url");
- private static final String PARSED_CSS = "parsedCss";
+ // Switch to "parsedCss" once CajaCssLexerParser is removed. See ehCacheConfig
+ private static final String PARSED_CSS = "parsedCssDom";
private Cache<String, CssTree.StyleSheet> parsedCssCache;
Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CSSContentRewriter.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CSSContentRewriter.java?rev=747244&r1=747243&r2=747244&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CSSContentRewriter.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/CSSContentRewriter.java Tue Feb 24 01:03:09 2009
@@ -24,13 +24,9 @@
import org.apache.shindig.gadgets.GadgetException;
import org.apache.shindig.gadgets.http.HttpRequest;
import org.apache.shindig.gadgets.http.HttpResponse;
-import org.apache.shindig.gadgets.parse.caja.CajaCssParser;
+import org.apache.shindig.gadgets.parse.caja.CajaCssLexerParser;
import com.google.caja.lexer.ParseException;
-import com.google.caja.parser.AbstractParseTreeNode;
-import com.google.caja.parser.AncestorChain;
-import com.google.caja.parser.Visitor;
-import com.google.caja.parser.css.CssTree;
import com.google.common.collect.Lists;
import com.google.inject.Inject;
import com.google.inject.name.Named;
@@ -56,12 +52,12 @@
private final ContentRewriterFeatureFactory rewriterFeatureFactory;
private final String proxyBaseNoGadget;
- private final CajaCssParser cssParser;
+ private final CajaCssLexerParser cssParser;
@Inject
public CSSContentRewriter(ContentRewriterFeatureFactory rewriterFeatureFactory,
@Named("shindig.content-rewrite.proxy-url")String proxyBaseNoGadget,
- CajaCssParser cssParser) {
+ CajaCssLexerParser cssParser) {
this.rewriterFeatureFactory = rewriterFeatureFactory;
this.proxyBaseNoGadget = proxyBaseNoGadget;
this.cssParser = cssParser;
@@ -102,7 +98,7 @@
try {
String original = IOUtils.toString(content);
try {
- CssTree.StyleSheet stylesheet = cssParser.parseDom(original);
+ List<Object> stylesheet = cssParser.parse(original);
List<String> stringList = rewrite(stylesheet, source, rewriter, extractImports);
// Serialize the stylesheet
cssParser.serialize(stylesheet, writer);
@@ -134,11 +130,11 @@
public List<String> rewrite(Element styleNode, Uri source,
LinkRewriter rewriter, boolean extractImports) {
try {
- CssTree.StyleSheet stylesheet = cssParser.parseDom(styleNode.getTextContent());
+ List<Object> stylesheet = cssParser.parse(styleNode.getTextContent());
List<String> imports = rewrite(stylesheet, source, rewriter, extractImports);
// Write the rewritten CSS back into the element
String content = cssParser.serialize(stylesheet);
- if (StringUtils.isEmpty(content)) {
+ if (StringUtils.isEmpty(content) || StringUtils.isWhitespace(content)) {
// Remove the owning node
styleNode.getParentNode().removeChild(styleNode);
} else {
@@ -165,29 +161,26 @@
* referenced URIs.
* @return Empty list of extracted import URIs.
*/
- public static List<String> rewrite(CssTree.StyleSheet styleSheet, final Uri source,
+ public static List<String> rewrite(List<Object> styleSheet, final Uri source,
final LinkRewriter rewriter, final boolean extractImports) {
- final List<String> imports = Lists.newArrayList();
+ final List<String> imports = Lists.newLinkedList();
- styleSheet.acceptPostOrder(new Visitor() {
- public boolean visit(AncestorChain<?> chain) {
- if (extractImports && chain.node instanceof CssTree.Import) {
- // Extract the import statment, add its URI to the returned list
- // and remove it from the DOM.
- CssTree.Import importNode = (CssTree.Import) chain.node;
- imports.add(importNode.getUri().getValue());
- ((AbstractParseTreeNode) chain.getParentNode()).removeChild(chain.node);
- } else if (chain.node instanceof CssTree.UriLiteral) {
- // If were not extracting imports then rewrite its link
- if (!(chain.getParentNode() instanceof CssTree.Import && extractImports)) {
- String rewritten = rewriter
- .rewrite(((CssTree.UriLiteral) chain.node).getValue(), source);
- ((CssTree.UriLiteral) chain.node).setValue(rewritten);
- }
+ for (int i = styleSheet.size() - 1; i >= 0; i--) {
+ if (styleSheet.get(i) instanceof CajaCssLexerParser.ImportDecl) {
+ if (extractImports) {
+ imports.add(0, ((CajaCssLexerParser.ImportDecl)styleSheet.get(i)).getUri());
+ styleSheet.remove(i);
+ } else {
+ CajaCssLexerParser.ImportDecl importDecl = (CajaCssLexerParser.ImportDecl) styleSheet
+ .get(i);
+ importDecl.setUri(rewriter.rewrite(importDecl.getUri(), source));
}
- return true;
- }}, null);
-
+ } else if (styleSheet.get(i) instanceof CajaCssLexerParser.UriDecl) {
+ CajaCssLexerParser.UriDecl uriDecl = (CajaCssLexerParser.UriDecl) styleSheet
+ .get(i);
+ uriDecl.setUri(rewriter.rewrite(uriDecl.getUri(), source));
+ }
+ }
return imports;
}
Added: incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/parse/caja/CajaCssLexerParserTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/parse/caja/CajaCssLexerParserTest.java?rev=747244&view=auto
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/parse/caja/CajaCssLexerParserTest.java (added)
+++ incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/parse/caja/CajaCssLexerParserTest.java Tue Feb 24 01:03:09 2009
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package org.apache.shindig.gadgets.parse.caja;
+
+import org.apache.shindig.common.cache.LruCacheProvider;
+
+import junit.framework.TestCase;
+
+import java.util.List;
+
+/**
+ * Basic test of CSS lexer
+ */
+public class CajaCssLexerParserTest extends TestCase {
+
+ private CajaCssLexerParser cajaCssParser;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ cajaCssParser = new CajaCssLexerParser();
+ }
+
+ public void testBasicCssParse() throws Exception {
+ String css = ".xyz { font : bold; } A { color : #7f7f7f }";
+ List<Object> styleSheet = cajaCssParser.parse(css);
+ assertEquals(cajaCssParser.serialize(styleSheet), css);
+ }
+
+ public void testClone() throws Exception {
+ cajaCssParser.setCacheProvider(new LruCacheProvider(100));
+ String css = "@import url('www.example.org/someother.css'); .xyz { font : bold; } A { color : #7f7f7f }";
+ List<Object> styleSheet = cajaCssParser.parse(css);
+ List<Object> styleSheet2 = cajaCssParser.parse(css);
+ assertFalse(styleSheet.equals(styleSheet2));
+ }
+}
\ No newline at end of file
Modified: incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/parse/caja/CajaCssParserTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/parse/caja/CajaCssParserTest.java?rev=747244&r1=747243&r2=747244&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/parse/caja/CajaCssParserTest.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/parse/caja/CajaCssParserTest.java Tue Feb 24 01:03:09 2009
@@ -17,6 +17,8 @@
*/
package org.apache.shindig.gadgets.parse.caja;
+import org.apache.shindig.gadgets.GadgetException;
+
import com.google.caja.parser.css.CssTree;
import junit.framework.TestCase;
@@ -44,4 +46,64 @@
assertEquals(2, selectorList.size());
assertSame(CssTree.SimpleSelector.class, selectorList.get(0).getClass());
}
+
+ /**
+ * These tests will fail when Caja successfully parses funky CSS.
+ * They can be converted into a test of success once that happens
+ */
+ public void testCajaParseFailureColonInRValue() {
+ String original = " A {\n"
+ + " -moz-opacity: 0.80;\n"
+ + " filter: alpha(opacity=40);\n"
+ + " filter: progid:DXImageTransform.Microsoft.Alpha(opacity=80);\n"
+ + "}";
+ try {
+ cajaCssParser.parseDom(original);
+ fail();
+ } catch (GadgetException ge) {
+ // Expected
+ }
+ }
+
+ public void testCajaParseFailureNoLValue() {
+ String original = "body, input, td {\n"
+ + " Arial, sans-serif;\n"
+ + "}";
+ try {
+ cajaCssParser.parseDom(original);
+ fail();
+ } catch (GadgetException ge) {
+ // Expected
+ }
+ }
+
+ public void testCajaParseFailureCommentInContent() {
+ String original = "body { font : bold; } \n//A comment\n A { font : bold; }";
+ try {
+ cajaCssParser.parseDom(original);
+ fail();
+ } catch (GadgetException ge) {
+ // Expected
+ }
+ }
+
+ public void testCajaParseFailureDotInIdent() {
+ String original = "li{list-style:none;.padding-bottom:4px;}";
+ try {
+ cajaCssParser.parseDom(original);
+ fail();
+ } catch (GadgetException ge) {
+ // Expected
+ }
+ }
+
+ public void testCajaParseFailureDotInFunction() {
+ String original = ".iepngfix {behavior: expression(IEPNGFIX.fix(this)); }";
+ try {
+ cajaCssParser.parseDom(original);
+ fail();
+ } catch (GadgetException ge) {
+ // Expected
+ }
+ }
}
Modified: incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/CSSContentRewriterTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/CSSContentRewriterTest.java?rev=747244&r1=747243&r2=747244&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/CSSContentRewriterTest.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/CSSContentRewriterTest.java Tue Feb 24 01:03:09 2009
@@ -22,7 +22,7 @@
import org.apache.shindig.gadgets.http.HttpRequest;
import org.apache.shindig.gadgets.http.HttpResponse;
import org.apache.shindig.gadgets.http.HttpResponseBuilder;
-import org.apache.shindig.gadgets.parse.caja.CajaCssParser;
+import org.apache.shindig.gadgets.parse.caja.CajaCssLexerParser;
import com.google.common.collect.Lists;
@@ -46,7 +46,7 @@
rewriterFeatureFactory.get(createSpecWithRewrite(".*", ".*exclude.*", "HTTP",
HTMLContentRewriter.TAGS));
ContentRewriterFeatureFactory factory = mockContentRewriterFeatureFactory(overrideFeature);
- rewriter = new CSSContentRewriter(factory, DEFAULT_PROXY_BASE, new CajaCssParser());
+ rewriter = new CSSContentRewriter(factory, DEFAULT_PROXY_BASE, new CajaCssLexerParser());
dummyUri = Uri.parse("http://www.w3c.org");
}
@@ -96,20 +96,10 @@
"div {list-style-image:url('http://a.b.com/bullet.gif');list-style-position:outside;margin:5px;padding:0}\n" +
".someid {background-image:url(http://a.b.com/bigimg.png);float:right;width:165px;height:23px;margin-top:4px;margin-left:5px}";
String rewritten =
- "div {\n" +
- " list-style-image: url('http\\3A//www.test.com/dir/proxy?url\\3Dhttp%3A%2F%2Fa.b.com%2Fbullet.gif\\26 fp\\3D 1150739864');\n" +
- " list-style-position: outside;\n" +
- " margin: 5px;\n" +
- " padding: 0\n" +
- "}\n" +
- ".someid {\n" +
- " background-image: url('http\\3A//www.test.com/dir/proxy?url\\3Dhttp%3A%2F%2Fa.b.com%2Fbigimg.png\\26 fp\\3D 1150739864');\n" +
- " float: right;\n" +
- " width: 165px;\n" +
- " height: 23px;\n" +
- " margin-top: 4px;\n" +
- " margin-left: 5px\n" +
- "}";
+ "div {list-style-image:url(\"http://www.test.com/dir/proxy?url=http%3A%2F%2Fa.b.com%2Fbullet.gif&fp=1150739864\");\n"
+ + ";list-style-position:outside;margin:5px;padding:0}\n"
+ + ".someid {background-image:url(\"http://www.test.com/dir/proxy?url=http%3A%2F%2Fa.b.com%2Fbigimg.png&fp=1150739864\");\n"
+ + ";float:right;width:165px;height:23px;margin-top:4px;margin-left:5px}";
validateRewritten(original, rewritten);
}
@@ -120,15 +110,9 @@
" div { color: blue; }\n" +
" p { color: black; }\n" +
" span { color: red; }";
- String expected = "div {\n"
- + " color: blue;\n"
- + "}\n"
- + "p {\n"
- + " color: black;\n"
- + "}\n"
- + "span {\n"
- + " color: red;\n"
- + "}";
+ String expected = " div { color: blue; }\n" +
+ " p { color: black; }\n" +
+ " span { color: red; }";
StringWriter sw = new StringWriter();
List<String> stringList = rewriter
.rewrite(new StringReader(original), dummyUri, defaultLinkRewriter, sw, true);
@@ -136,49 +120,4 @@
assertEquals(stringList, Lists.newArrayList("www.example.org/some.css",
"www.example.org/someother.css", "www.example.org/another.css"));
}
-
- /**
- * These tests will fail when Caja successfully parses funky CSS.
- * They can be converted into a test of success once that happens
- */
- public void testCajaParseFailureColonInRValue() {
- String original = " A {\n"
- + " -moz-opacity: 0.80;\n"
- + " filter: alpha(opacity=40);\n"
- + " filter: progid:DXImageTransform.Microsoft.Alpha(opacity=80);\n"
- + "}";
- StringWriter sw = new StringWriter();
- rewriter.rewrite(new StringReader(original), dummyUri, defaultLinkRewriter, sw, true);
- assertEquals(original, sw.toString());
- }
-
- public void testCajaParseFailureNoLValue() {
- String original = "body, input, td {\n"
- + " Arial, sans-serif;\n"
- + "}";
- StringWriter sw = new StringWriter();
- rewriter.rewrite(new StringReader(original), dummyUri, defaultLinkRewriter, sw, true);
- assertEquals(original, sw.toString());
- }
-
- public void testCajaParseFailureCommentInContent() {
- String original = "body { font : bold; } \n//A comment\n A { font : bold; }";
- StringWriter sw = new StringWriter();
- rewriter.rewrite(new StringReader(original), dummyUri, defaultLinkRewriter, sw, true);
- assertEquals(original, sw.toString());
- }
-
- public void testCajaParseFailureDotInIdent() {
- String original = "li{list-style:none;.padding-bottom:4px;}";
- StringWriter sw = new StringWriter();
- rewriter.rewrite(new StringReader(original), dummyUri, defaultLinkRewriter, sw, true);
- assertEquals(original, sw.toString());
- }
-
- public void testCajaParseFailureDotInFunction() {
- String original = ".iepngfix {behavior: expression(IEPNGFIX.fix(this)); }";
- StringWriter sw = new StringWriter();
- rewriter.rewrite(new StringReader(original), dummyUri, defaultLinkRewriter, sw, true);
- assertEquals(original, sw.toString());
- }
}
Modified: incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/HTMLContentRewriterTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/HTMLContentRewriterTest.java?rev=747244&r1=747243&r2=747244&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/HTMLContentRewriterTest.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/HTMLContentRewriterTest.java Tue Feb 24 01:03:09 2009
@@ -19,7 +19,7 @@
import org.apache.commons.io.IOUtils;
import org.apache.shindig.gadgets.http.HttpRequest;
-import org.apache.shindig.gadgets.parse.caja.CajaCssParser;
+import org.apache.shindig.gadgets.parse.caja.CajaCssLexerParser;
import org.easymock.EasyMock;
import org.w3c.dom.Document;
@@ -38,7 +38,7 @@
HTMLContentRewriter.TAGS));
ContentRewriterFeatureFactory factory = mockContentRewriterFeatureFactory(overrideFeature);
rewriter = new HTMLContentRewriter(factory, DEFAULT_PROXY_BASE, DEFAULT_CONCAT_BASE,
- new CSSContentRewriter(factory, DEFAULT_PROXY_BASE, new CajaCssParser()));
+ new CSSContentRewriter(factory, DEFAULT_PROXY_BASE, new CajaCssLexerParser()));
}
public void testScriptsBasic() throws Exception {
@@ -154,7 +154,7 @@
assertEquals(1, wrapper.getNodeList("//style").getLength());
// All @imports are stripped
- assertEquals("div {\n color: black;\n}", wrapper.getValue("//style[1]"));
+ assertEquals("div { color : black; }", wrapper.getValue("//style[1]").trim());
}
public void testNoRewriteUnknownMimeType() {
Modified: incubator/shindig/trunk/java/gadgets/src/test/resources/org/apache/shindig/gadgets/rewrite/rewritebasic-expected.css
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/resources/org/apache/shindig/gadgets/rewrite/rewritebasic-expected.css?rev=747244&r1=747243&r2=747244&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/test/resources/org/apache/shindig/gadgets/rewrite/rewritebasic-expected.css (original)
+++ incubator/shindig/trunk/java/gadgets/src/test/resources/org/apache/shindig/gadgets/rewrite/rewritebasic-expected.css Tue Feb 24 01:03:09 2009
@@ -1,6 +1,11 @@
-@import url('http\3A//www.test.com/dir/proxy?url\3Dhttp%3A%2F%2Fwww.example.org%2Fother1.css\26gadget\3Dhttp%3A%2F%2Fwww.example.org%2Fdir%2Fg.xml\26 fp\3D 1150739864');
-@import url('http\3A//www.test.com/dir/proxy?url\3Dhttp%3A%2F%2Fwww.example.org%2Fpath%2Frelative%2Fother2.css\26gadget\3Dhttp%3A%2F%2Fwww.example.org%2Fdir%2Fg.xml\26 fp\3D 1150739864');
-@import url('http\3A//www.example.org/hostrelative/excluded/other1.css');
+
+/* Rewrite various url forms in input statements, absolute and host/path relative.
+ Test exclusions */
+@import url("http://www.test.com/dir/proxy?url=http%3A%2F%2Fwww.example.org%2Fother1.css&gadget=http%3A%2F%2Fwww.example.org%2Fdir%2Fg.xml&fp=1150739864");
+@import url("http://www.test.com/dir/proxy?url=http%3A%2F%2Fwww.example.org%2Fpath%2Frelative%2Fother2.css&gadget=http%3A%2F%2Fwww.example.org%2Fdir%2Fg.xml&fp=1150739864");
+@import url("http://www.example.org/hostrelative/excluded/other1.css");
DiV {
font: arial;
-}
\ No newline at end of file
+}
+
+/* A comment? */
\ No newline at end of file