Author: hlship
Date: Fri Oct 28 16:09:18 2011
New Revision: 1190418
URL: http://svn.apache.org/viewvc?rev=1190418&view=rev
Log:
TAP5-1726: JavaScript Assets fail to load for already-minified JS assets in
Production mode
Added:
tapestry/tapestry5/trunk/tapestry-yuicompressor/src/test/java/yuicompressor/testapp/pages/BadJavaScript.java
tapestry/tapestry5/trunk/tapestry-yuicompressor/src/test/resources/yuicompressor/testapp/pages/BadJavaScript.tml
tapestry/tapestry5/trunk/tapestry-yuicompressor/src/test/resources/yuicompressor/testapp/pages/bad.js
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/StackAssetRequestHandler.java
tapestry/tapestry5/trunk/tapestry-yuicompressor/src/main/java/org/apache/tapestry5/internal/yuicompressor/JavaScriptResourceMinimizer.java
tapestry/tapestry5/trunk/tapestry-yuicompressor/src/test/groovy/org/apache/tapestry5/yuicompressor/itest/YUICompressorIntegrationTests.groovy
tapestry/tapestry5/trunk/tapestry-yuicompressor/src/test/java/yuicompressor/testapp/pages/Index.java
tapestry/tapestry5/trunk/tapestry-yuicompressor/src/test/resources/yuicompressor/testapp/pages/Index.tml
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/StackAssetRequestHandler.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/StackAssetRequestHandler.java?rev=1190418&r1=1190417&r2=1190418&view=diff
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/StackAssetRequestHandler.java
(original)
+++
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/StackAssetRequestHandler.java
Fri Oct 28 16:09:18 2011
@@ -182,7 +182,7 @@ public class StackAssetRequestHandler im
PrintWriter writer = new PrintWriter(osw, true);
long lastModified = 0;
- StringBuilder description = new StringBuilder(String.format("stack=%s,
locale=%s, resources=[", stackName, localeName));
+ StringBuilder description = new StringBuilder(String.format("'%s'
JavaScript stack, for locale %s, resources=", stackName, localeName));
String sep = "";
JSONArray paths = new JSONArray();
@@ -211,7 +211,7 @@ public class StackAssetRequestHandler im
writer.close();
return new StreamableResourceImpl(
- description.append("]").toString(),
+ description.toString(),
JAVASCRIPT_CONTENT_TYPE, CompressionStatus.COMPRESSABLE,
lastModified,
new BytestreamCache(stream));
}
Modified:
tapestry/tapestry5/trunk/tapestry-yuicompressor/src/main/java/org/apache/tapestry5/internal/yuicompressor/JavaScriptResourceMinimizer.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-yuicompressor/src/main/java/org/apache/tapestry5/internal/yuicompressor/JavaScriptResourceMinimizer.java?rev=1190418&r1=1190417&r2=1190418&view=diff
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-yuicompressor/src/main/java/org/apache/tapestry5/internal/yuicompressor/JavaScriptResourceMinimizer.java
(original)
+++
tapestry/tapestry5/trunk/tapestry-yuicompressor/src/main/java/org/apache/tapestry5/internal/yuicompressor/JavaScriptResourceMinimizer.java
Fri Oct 28 16:09:18 2011
@@ -101,17 +101,23 @@ public class JavaScriptResourceMinimizer
{
logInputLines(resource, errorLines);
- throw ex;
+ recoverFromException(ex, resource, output);
+
} catch (Exception ex)
{
- logger.error(String.format("Exception minimizing %s: %s",
resource, InternalUtils.toMessage(ex), ex));
-
- streamUnminimized(resource, output);
+ recoverFromException(ex, resource, output);
}
reader.close();
}
+ private void recoverFromException(Exception ex, StreamableResource
resource, Writer output) throws IOException
+ {
+ logger.error(String.format("Exception minimizing %s: %s",
resource.getDescription(), InternalUtils.toMessage(ex), ex));
+
+ streamUnminimized(resource, output);
+ }
+
private void streamUnminimized(StreamableResource resource, Writer output)
throws IOException
{
Reader reader = toReader(resource);
@@ -140,6 +146,8 @@ public class JavaScriptResourceMinimizer
private void logInputLines(StreamableResource resource, Set<Integer> lines)
{
+ logger.error(String.format("Errors in resource %s:",
resource.getDescription()));
+
int last = -1;
try
Modified:
tapestry/tapestry5/trunk/tapestry-yuicompressor/src/test/groovy/org/apache/tapestry5/yuicompressor/itest/YUICompressorIntegrationTests.groovy
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-yuicompressor/src/test/groovy/org/apache/tapestry5/yuicompressor/itest/YUICompressorIntegrationTests.groovy?rev=1190418&r1=1190417&r2=1190418&view=diff
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-yuicompressor/src/test/groovy/org/apache/tapestry5/yuicompressor/itest/YUICompressorIntegrationTests.groovy
(original)
+++
tapestry/tapestry5/trunk/tapestry-yuicompressor/src/test/groovy/org/apache/tapestry5/yuicompressor/itest/YUICompressorIntegrationTests.groovy
Fri Oct 28 16:09:18 2011
@@ -34,4 +34,13 @@ class YUICompressorIntegrationTests exte
assertText "selected", "CLOJURE, JAVA"
}
+
+ @Test
+ void bad_js_is_reported() {
+ openLinks "Bad JavaScript Demo"
+
+ // We still get there, no the exception page.
+
+ assertTitle "Tapestry 5: Bad JavaScript Demo"
+ }
}
Added:
tapestry/tapestry5/trunk/tapestry-yuicompressor/src/test/java/yuicompressor/testapp/pages/BadJavaScript.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-yuicompressor/src/test/java/yuicompressor/testapp/pages/BadJavaScript.java?rev=1190418&view=auto
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-yuicompressor/src/test/java/yuicompressor/testapp/pages/BadJavaScript.java
(added)
+++
tapestry/tapestry5/trunk/tapestry-yuicompressor/src/test/java/yuicompressor/testapp/pages/BadJavaScript.java
Fri Oct 28 16:09:18 2011
@@ -0,0 +1,9 @@
+package yuicompressor.testapp.pages;
+
+
+import org.apache.tapestry5.annotations.Import;
+
+@Import(library = "bad.js")
+public class BadJavaScript
+{
+}
Modified:
tapestry/tapestry5/trunk/tapestry-yuicompressor/src/test/java/yuicompressor/testapp/pages/Index.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-yuicompressor/src/test/java/yuicompressor/testapp/pages/Index.java?rev=1190418&r1=1190417&r2=1190418&view=diff
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-yuicompressor/src/test/java/yuicompressor/testapp/pages/Index.java
(original)
+++
tapestry/tapestry5/trunk/tapestry-yuicompressor/src/test/java/yuicompressor/testapp/pages/Index.java
Fri Oct 28 16:09:18 2011
@@ -1,17 +1,18 @@
package yuicompressor.testapp.pages;
-import java.util.List;
-
import org.apache.tapestry5.SelectModel;
import org.apache.tapestry5.ValueEncoder;
import org.apache.tapestry5.annotations.Persist;
import org.apache.tapestry5.annotations.Property;
import org.apache.tapestry5.ioc.Messages;
import org.apache.tapestry5.ioc.annotations.Inject;
+import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
import org.apache.tapestry5.ioc.internal.util.InternalUtils;
import org.apache.tapestry5.services.ValueEncoderSource;
import org.apache.tapestry5.util.EnumSelectModel;
+import java.util.List;
+
public class Index
{
static enum Languages
@@ -26,6 +27,14 @@ public class Index
@Inject
private Messages messages;
+ void onActivate()
+ {
+ if (languages == null)
+ {
+ languages = CollectionFactory.newList();
+ }
+ }
+
@Inject
private ValueEncoderSource vec;
Added:
tapestry/tapestry5/trunk/tapestry-yuicompressor/src/test/resources/yuicompressor/testapp/pages/BadJavaScript.tml
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-yuicompressor/src/test/resources/yuicompressor/testapp/pages/BadJavaScript.tml?rev=1190418&view=auto
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-yuicompressor/src/test/resources/yuicompressor/testapp/pages/BadJavaScript.tml
(added)
+++
tapestry/tapestry5/trunk/tapestry-yuicompressor/src/test/resources/yuicompressor/testapp/pages/BadJavaScript.tml
Fri Oct 28 16:09:18 2011
@@ -0,0 +1,6 @@
+<i:internallayout title="Bad JavaScript Demo"
xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd"
+ xmlns:p="tapestry:parameter"
xmlns:i="tapestry-library:t5internal">
+
+
+
+</i:internallayout>
\ No newline at end of file
Modified:
tapestry/tapestry5/trunk/tapestry-yuicompressor/src/test/resources/yuicompressor/testapp/pages/Index.tml
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-yuicompressor/src/test/resources/yuicompressor/testapp/pages/Index.tml?rev=1190418&r1=1190417&r2=1190418&view=diff
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-yuicompressor/src/test/resources/yuicompressor/testapp/pages/Index.tml
(original)
+++
tapestry/tapestry5/trunk/tapestry-yuicompressor/src/test/resources/yuicompressor/testapp/pages/Index.tml
Fri Oct 28 16:09:18 2011
@@ -1,25 +1,26 @@
-<html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd"
xmlns:p="tapestry:parameter">
- <head>
- <title>YUICompressor Test</title>
- </head>
- <body>
+<i:internallayout title="YUICompressor Test"
xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd"
+ xmlns:p="tapestry:parameter"
xmlns:i="tapestry-library:t5internal">
+
+ <p:leftnav>
+ <t:pagelink page="badJavaScript">Bad JavaScript Demo</t:pagelink>
+ </p:leftnav>
<t:form>
- <t:errors/>
- <t:palette t:id="languages" selected="languages" model="languagesModel"
encoder="languagesEncoder" reorder="true"/>
- <br/>
- <input type="submit"/>
+ <t:errors/>
+ <t:palette t:id="languages" selected="languages"
model="languagesModel" encoder="languagesEncoder"
+ reorder="true"/>
+ <br/>
+ <input type="submit"/>
</t:form>
<hr/>
<t:if test="languages">
- <p>
- Selected languages:
- <span id="selected">${selectedLanguages}</span>
- </p>
+ <p>
+ Selected languages:
+ <span id="selected">${selectedLanguages}</span>
+ </p>
</t:if>
- </body>
-</html>
\ No newline at end of file
+</i:internallayout>
\ No newline at end of file
Added:
tapestry/tapestry5/trunk/tapestry-yuicompressor/src/test/resources/yuicompressor/testapp/pages/bad.js
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-yuicompressor/src/test/resources/yuicompressor/testapp/pages/bad.js?rev=1190418&view=auto
==============================================================================
---
tapestry/tapestry5/trunk/tapestry-yuicompressor/src/test/resources/yuicompressor/testapp/pages/bad.js
(added)
+++
tapestry/tapestry5/trunk/tapestry-yuicompressor/src/test/resources/yuicompressor/testapp/pages/bad.js
Fri Oct 28 16:09:18 2011
@@ -0,0 +1,30 @@
+/**
+ * This file contains bad JavaScript.
+ */
+
+function ok() { return null; }
+
+
+
+// Lots of space here, to exercise the code that shows only
+// a snippet
+// of the source
+// around the failed code.
+
+
+
+
+
+// Ok, back to where we put the syntax error.
+
+function name with spaces() { this.will not.compile(); }
+
+
+
+// Meanwhile, down here,
+// we have code that is OK again.
+
+
+function also_ok() {
+ return "no worries, mate!";
+}