Fix unit test broken by Selenium upgrade
authorBob Harner <bobharner@gmail.com>
Sat, 3 Nov 2018 18:00:02 +0000 (14:00 -0400)
committerBob Harner <bobharner@gmail.com>
Sat, 3 Nov 2018 18:00:02 +0000 (14:00 -0400)
tapestry-core/src/test/groovy/org/apache/tapestry5/integration/GroovyTapestryCoreTestCase.groovy
tapestry-core/src/test/groovy/org/apache/tapestry5/integration/appfolder/AppFolderTests.groovy
tapestry-core/src/test/java/org/apache/tapestry5/integration/TapestryCoreTestCase.java
tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/AssetTests.java

index 144d20f..2525194 100644 (file)
@@ -1,19 +1,6 @@
 package org.apache.tapestry5.integration
 
-import org.apache.tapestry5.test.TapestryRunnerConstants
-
 class GroovyTapestryCoreTestCase extends TapestryCoreTestCase
 {
 
-    protected final assertDownloadedAsset(String assetURL, String path)
-    {
-
-        URL url = new URL(getBaseURL() + assetURL.substring(1))
-
-        byte[] downloaded = url.bytes
-
-        byte[] actual = new File(TapestryRunnerConstants.MODULE_BASE_DIR, path).bytes
-
-        assertEquals downloaded, actual, "Contents of $path do not match"
-    }
 }
index 0ee69ba..c2baaab 100644 (file)
@@ -53,11 +53,14 @@ class AppFolderTests extends GroovyTapestryCoreTestCase
     {
         openLinks "t5app/"
 
-        // Ony one image on page
+        // there's only one image on page
         String assetURL = getAttribute("//img/@src")
 
-        assert assetURL.startsWith("/t5app/assets/")
+        // Selenium now adds unwanted port & host
+        String urlPath = new URL(assetURL).getPath();
 
-        assertDownloadedAsset assetURL, "src/test/appfolder/images/t5-logo.png"
+        assert urlPath.startsWith("/t5app/assets/")
+
+        assertDownloadedAsset urlPath, "src/test/appfolder/images/t5-logo.png"
     }
 }
index 1c3baa7..204f9ad 100644 (file)
 
 package org.apache.tapestry5.integration;
 
+import java.io.BufferedInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.nio.file.Files;
+
+import org.apache.tapestry5.internal.TapestryInternalUtils;
 import org.apache.tapestry5.test.SeleniumTestCase;
+import org.apache.tapestry5.test.TapestryRunnerConstants;
 
 public abstract class TapestryCoreTestCase extends SeleniumTestCase
 {
@@ -65,4 +75,46 @@ public abstract class TapestryCoreTestCase extends SeleniumTestCase
         assertText("css=[data-container-type=alerts] .alert span", text);
     }
 
+    /**
+     * Assert that asset at the given URL contains the exact same contents as the
+     * file at the given path.
+     * @param assetURL a root-relative (starting with "/") URL to an asset, such as
+     * "/t5app/assets/ctx/b492f3dd/images/t5-logo.png"
+     * @param path the path (relative to the module base directory) where the asset file exists, such
+     * as "src/test/appfolder/images/filename.ext"
+     * @throws IOException 
+     * @since 5.5
+     */
+    protected final void assertDownloadedAsset(String assetURL, String path) throws IOException
+    {
+        URL url = new URL(getBaseURL() + assetURL.substring(1));
+
+        byte[] downloaded = getBytes(url);
+
+        File file = new File(TapestryRunnerConstants.MODULE_BASE_DIR, path);
+        byte[] actual = Files.readAllBytes(file.toPath());
+        
+        assertEquals(downloaded, actual, "Asset contents differ at " + url + " and " + path);
+    }
+
+    /**
+     * Read (download) the content of this URL and return it as a byte[].
+     *
+     * @param url URL to read content from
+     * @return the byte[] from that URL
+     * @throws IOException if an IOException occurs.
+     */
+    private static byte[] getBytes(URL url) throws IOException {
+        InputStream is = new BufferedInputStream(url.openStream());
+
+        ByteArrayOutputStream os = new ByteArrayOutputStream();
+
+        TapestryInternalUtils.copy(is, os);
+
+        os.close();
+        is.close();
+
+        return os.toByteArray();
+    }
+
 }
index 40f148c..444a83e 100644 (file)
@@ -51,7 +51,7 @@ public class AssetTests extends App1TestCase
 
         String assetURL = getAttribute(String.format("//img[@id='%s']/@src", id));
 
-        compareDownloadedAsset(assetURL, localPath);
+        assertDownloadedAsset(assetURL, localPath);
     }
     
     // TAP5-1515
@@ -79,34 +79,4 @@ public class AssetTests extends App1TestCase
         // used by tapestry testing code to know when the page is finished loading is never invoked.
         assertTrue(isVisible("assetWithWrongChecksum"));
     }
-
-
-    private void compareDownloadedAsset(String assetURL, String localPath) throws Exception
-    {
-        // Strip off the leading slash
-
-        URL url = new URL(getBaseURL() + assetURL.substring(1));
-
-        byte[] downloaded = readContent(url);
-
-        File local = new File(TapestryRunnerConstants.MODULE_BASE_DIR, localPath);
-
-        byte[] actual = readContent(local.toURL());
-
-        assertEquals(downloaded, actual);
-    }
-
-    private byte[] readContent(URL url) throws Exception
-    {
-        InputStream is = new BufferedInputStream(url.openStream());
-
-        ByteArrayOutputStream os = new ByteArrayOutputStream();
-
-        TapestryInternalUtils.copy(is, os);
-
-        os.close();
-        is.close();
-
-        return os.toByteArray();
-    }
 }