You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by jd...@apache.org on 2006/09/03 03:28:14 UTC

svn commit: r439696 - in /geronimo/server/trunk/maven-plugins/selenium-maven-plugin: ./ src/main/java/org/apache/geronimo/mavenplugins/selenium/ src/main/resources/ src/main/resources/org/ src/main/resources/org/apache/ src/main/resources/org/apache/ge...

Author: jdillon
Date: Sat Sep  2 18:28:13 2006
New Revision: 439696

URL: http://svn.apache.org/viewvc?rev=439696&view=rev
Log:
Adding support for a default set of user extentions, and merging with local if needed

Added:
    geronimo/server/trunk/maven-plugins/selenium-maven-plugin/src/main/resources/
    geronimo/server/trunk/maven-plugins/selenium-maven-plugin/src/main/resources/org/
    geronimo/server/trunk/maven-plugins/selenium-maven-plugin/src/main/resources/org/apache/
    geronimo/server/trunk/maven-plugins/selenium-maven-plugin/src/main/resources/org/apache/geronimo/
    geronimo/server/trunk/maven-plugins/selenium-maven-plugin/src/main/resources/org/apache/geronimo/mavenplugins/
    geronimo/server/trunk/maven-plugins/selenium-maven-plugin/src/main/resources/org/apache/geronimo/mavenplugins/selenium/
    geronimo/server/trunk/maven-plugins/selenium-maven-plugin/src/main/resources/org/apache/geronimo/mavenplugins/selenium/default-user-extentions.js   (with props)
Modified:
    geronimo/server/trunk/maven-plugins/selenium-maven-plugin/pom.xml
    geronimo/server/trunk/maven-plugins/selenium-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/selenium/StartServerMojo.java

Modified: geronimo/server/trunk/maven-plugins/selenium-maven-plugin/pom.xml
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/maven-plugins/selenium-maven-plugin/pom.xml?rev=439696&r1=439695&r2=439696&view=diff
==============================================================================
--- geronimo/server/trunk/maven-plugins/selenium-maven-plugin/pom.xml (original)
+++ geronimo/server/trunk/maven-plugins/selenium-maven-plugin/pom.xml Sat Sep  2 18:28:13 2006
@@ -38,6 +38,12 @@
             <artifactId>selenium-server</artifactId>
             <version>0.8.1</version>
         </dependency>
+
+        <dependency>
+            <groupId>commons-io</groupId>
+            <artifactId>commons-io</artifactId>
+            <version>1.2</version>
+        </dependency>
     </dependencies>
     
     <repositories>

Modified: geronimo/server/trunk/maven-plugins/selenium-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/selenium/StartServerMojo.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/maven-plugins/selenium-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/selenium/StartServerMojo.java?rev=439696&r1=439695&r2=439696&view=diff
==============================================================================
--- geronimo/server/trunk/maven-plugins/selenium-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/selenium/StartServerMojo.java (original)
+++ geronimo/server/trunk/maven-plugins/selenium-maven-plugin/src/main/java/org/apache/geronimo/mavenplugins/selenium/StartServerMojo.java Sat Sep  2 18:28:13 2006
@@ -14,19 +14,27 @@
  *  limitations under the License.
  */
 
-package org.apache.geronimo.mavenplugins.server;
+package org.apache.geronimo.mavenplugins.selenium;
 
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.artifact.resolver.ArtifactResolver;
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.artifact.factory.ArtifactFactory;
+import org.apache.maven.plugin.MojoFailureException;
 
 import java.io.File;
+import java.io.PrintWriter;
+import java.io.BufferedWriter;
+import java.io.FileWriter;
+
+import java.net.URL;
+import java.net.MalformedURLException;
 
 import org.apache.geronimo.genesis.AntMojoSupport;
 import org.apache.geronimo.plugin.ArtifactItem;
 import org.apache.commons.lang.SystemUtils;
+import org.apache.commons.io.IOUtils;
 
 import org.apache.tools.ant.taskdefs.ExecTask;
 
@@ -45,29 +53,45 @@
      *
      * @parameter default-value="4444"
      */
-    private int port;
+    private int port = -1;
     
     /**
      * Timeout for the server in seconds.
      *
      * @parameter default-value="-1"
      */
-    private int timeout;
-    
-    
+    private int timeout = -1;
+
     /**
      * Enable the server's debug mode..
      *
      * @parameter default-value="false"
      */
-    private boolean debug;
-    
+    private boolean debug = false;
+
+    /**
+     * The file or resource to use for default user-extentions.js.
+     *
+     * @parameter default-value="org/apache/geronimo/mavenplugins/selenium/default-user-extentions.js"
+     */
+    private String defaultUserExtensions = null;
+
+    /**
+     * Enable or disable default user-extentions.js
+     *
+     * @parameter default-value="true"
+     */
+    private boolean defaultUserExtensionsEnabled = true;
+
     /**
      * Location of the user-extentions.js to load into the server.
      *
+     * <p>
+     * If defaultUserExtensionsEnabled is true, then this file will be appended to the defaults.
+     *
      * @parameter
      */
-    private File userExtensions;
+    private String userExtensions = null;
     
     //
     // MojoSupport Hooks
@@ -82,7 +106,6 @@
      */
     private MavenProject project = null;
 
-
     protected MavenProject getProject() {
         return project;
     }
@@ -146,62 +169,125 @@
 
         final String executable = "java" +  (SystemUtils.IS_OS_WINDOWS ? ".exe" : "");
 
+        final ExecTask exec = (ExecTask)createTask("exec");
+        exec.setExecutable(executable);
+
+        //
+        // HACK: Use Simple log instead of evil JDK 1.4 logging
+        //       Should change to Java task and setup log4j.properties in the cp
+        //
+        exec.createArg().setValue("-Dorg.apache.commons.logging.Log=org.apache.commons.logging.impl.SimpleLog");
+
+        exec.createArg().setValue("-jar");
+        exec.createArg().setFile(artifact.getFile());
+
+        exec.createArg().setValue("-port");
+        exec.createArg().setValue(String.valueOf(port));
+
+        if (debug) {
+            exec.createArg().setValue("-debug");
+        }
+
+        if (timeout > 0) {
+            log.info("Timeout after: " + timeout + " seconds");
+
+            exec.createArg().setValue("-timeout");
+            exec.createArg().setValue(String.valueOf(timeout));
+        }
+
+        File userExtentionsFile = getUserExtentionsFile();
+        if (userExtentionsFile != null) {
+            log.info("Using user extensions: " + userExtentionsFile);
+
+            exec.createArg().setValue("-userExtensions");
+            exec.createArg().setFile(userExtentionsFile);
+        }
+
+        exec.setLogError(true);
+
         // Start the server int a seperate thread
         Thread t = new Thread("Server Runner") {
             public void run() {
                 try {
-                    ExecTask exec = (ExecTask)createTask("exec");
-                    exec.setExecutable(executable);
-                    
-                    //
-                    // HACK: Use Simple log instead of evil JDK 1.4 logging
-                    //       Should change to Java task and setup log4j.properties in the cp
-                    //
-                    exec.createArg().setValue("-Dorg.apache.commons.logging.Log=org.apache.commons.logging.impl.SimpleLog");
-                    
-                    exec.createArg().setValue("-jar");
-                    exec.createArg().setFile(artifact.getFile());
-                    
-                    exec.createArg().setValue("-port");
-                    exec.createArg().setValue(String.valueOf(port));
-                    
-                    if (debug) {
-                        exec.createArg().setValue("-debug");
-                    }
-                    
-                    if (timeout > 0) {
-                        log.info("Timeout after: " + timeout + " seconds");
-                        
-                        exec.createArg().setValue("-timeout");
-                        exec.createArg().setValue(String.valueOf(timeout));
-                    }
-                    
-                    if (userExtensions != null) {
-                        log.info("Using user extensions: " + userExtensions);
-                        
-                        exec.createArg().setValue("-userExtensions");
-                        exec.createArg().setFile(userExtensions);
-                    }
-                    
-                    exec.setLogError(true);
                     exec.execute();
                 }
                 catch (Exception e) {
                     log.error("Failed to start server", e);
                 }
-                
-                try {
-                    synchronized(this) {
-                        wait();
-                    }
-                }
-                catch (Exception e) {
-                    // ignore
-                }
             }
         };
         t.start();
 
         log.info("Server started");
+    }
+
+    /**
+     * Resolve a resource to a file, URL or resource.
+     */
+    private URL resolveResource(final String name) throws MalformedURLException, MojoFailureException {
+        assert name != null;
+
+        URL url;
+
+        File file = new File(name);
+        if (file.exists()) {
+            url = file.toURL();
+        }
+        else {
+            try {
+                url = new URL(name);
+            }
+            catch (MalformedURLException e) {
+                url = Thread.currentThread().getContextClassLoader().getResource(name);
+            }
+        }
+
+        if (url == null) {
+            throw new MojoFailureException("Could not resolve resource: " + name);
+        }
+
+        log.debug("Resolved resource '" + name + "' as: " + url);
+
+        return url;
+    }
+
+    /**
+     * Retutn the user-extentions.js file to use, or null if it should not be installed.
+     */
+    private File getUserExtentionsFile() throws Exception {
+        if (!defaultUserExtensionsEnabled && userExtensions == null) {
+            return null;
+        }
+
+        File file = File.createTempFile("user-extentions-", ".js");
+        file.deleteOnExit();
+        PrintWriter writer = new PrintWriter(new BufferedWriter(new FileWriter(file)));
+
+        if (defaultUserExtensionsEnabled) {
+            URL url = resolveResource(defaultUserExtensions);
+            log.debug("Using defaults: " + url);
+
+            writer.println("//");
+            writer.println("// Default user extentions; from: " + url);
+            writer.println("//");
+
+            IOUtils.copy(url.openStream(), writer);
+        }
+
+        if (userExtensions != null) {
+            URL url = resolveResource(userExtensions);
+            log.debug("Using user extentions: " + url);
+
+            writer.println("//");
+            writer.println("// User extentions; from: " + url);
+            writer.println("//");
+
+            IOUtils.copy(url.openStream(), writer);
+        }
+
+        writer.flush();
+        writer.close();
+
+        return file;
     }
 }

Added: geronimo/server/trunk/maven-plugins/selenium-maven-plugin/src/main/resources/org/apache/geronimo/mavenplugins/selenium/default-user-extentions.js
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/maven-plugins/selenium-maven-plugin/src/main/resources/org/apache/geronimo/mavenplugins/selenium/default-user-extentions.js?rev=439696&view=auto
==============================================================================
--- geronimo/server/trunk/maven-plugins/selenium-maven-plugin/src/main/resources/org/apache/geronimo/mavenplugins/selenium/default-user-extentions.js (added)
+++ geronimo/server/trunk/maven-plugins/selenium-maven-plugin/src/main/resources/org/apache/geronimo/mavenplugins/selenium/default-user-extentions.js Sat Sep  2 18:28:13 2006
@@ -0,0 +1,123 @@
+/*
+ *  Copyright 2006 The Apache Software Foundation
+ *
+ *  Licensed 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.
+ */
+
+//
+// $Rev$ $Date$
+//
+
+//
+// Incorporated from: http://wiki.openqa.org/display/SEL/removeCookie
+//
+
+function createCookie(doc, name, value, path, days) {
+    if (!path) {
+        path = "/";
+    }
+
+    if (days) {
+        var date = new Date();
+        date.setTime(date.getTime()+(days*24*60*60*1000));
+        var expires = "; expires=" + date.toGMTString();
+    }
+    else {
+        var expires = "";
+    }
+    
+    doc.cookie = name + "=" + value + expires + "; path=" + path;
+}
+
+/**
+ * Removes the cookie with the given name.
+ *  text - the cookie name
+ *  path - the cookie path
+ */
+Selenium.prototype.removeCookie = function(text, path) {
+    createCookie(this.page().currentDocument, text, "", path, -1);
+};
+
+//
+// Incorporated from user-extentions.js.sample from Selenium RC 0.8.1
+//
+
+// The following examples try to give an indication of how Selenium can be extended with javascript.
+
+/**
+ * All do* methods on the Selenium prototype are added as actions.
+ * Eg add a typeRepeated action to Selenium, which types the text twice into a text box.
+ * The typeTwiceAndWait command will be available automatically
+ */
+Selenium.prototype.doTypeRepeated = function(locator, text) {
+    // All locator-strategies are automatically handled by "findElement"
+    var element = this.page().findElement(locator);
+
+    // Create the text to type
+    var valueToType = text + text;
+
+    // Replace the element text with the new text
+    this.page().replaceText(element, valueToType);
+};
+
+/**
+ * All assert* methods on the Selenium prototype are added as checks.
+ * Eg add a assertValueRepeated check, that makes sure that the element value
+ * consists of the supplied text repeated.
+ * The verify version will be available automatically.
+ */
+Selenium.prototype.assertValueRepeated = function(locator, text) {
+    // All locator-strategies are automatically handled by "findElement"
+    var element = this.page().findElement(locator);
+
+    // Create the text to verify
+    var expectedValue = text + text;
+
+    // Get the actual element value
+    var actualValue = element.value;
+
+    // Make sure the actual value matches the expected
+    Assert.matches(expectedValue, actualValue);
+};
+
+/**
+ * All get* methods on the Selenium prototype result in
+ * store, assert, assertNot, verify, verifyNot, waitFor, and waitForNot commands.
+ * E.g. add a getTextLength method that returns the length of the text
+ * of a specified element.
+ * Will result in support for storeTextLength, assertTextLength, etc.
+ */
+Selenium.prototype.getTextLength = function(locator) {
+	return this.getText(locator).length;
+};
+
+/**
+ * All locateElementBy* methods are added as locator-strategies.
+ * Eg add a "valuerepeated=" locator, that finds the first element with the supplied value, repeated.
+ * The "inDocument" is a the document you are searching.
+ */
+PageBot.prototype.locateElementByValueRepeated = function(text, inDocument) {
+    // Create the text to search for
+    var expectedValue = text + text;
+
+    // Loop through all elements, looking for ones that have a value === our expected value
+    var allElements = inDocument.getElementsByTagName("*");
+    for (var i = 0; i < allElements.length; i++) {
+        var testElement = allElements[i];
+        if (testElement.value && testElement.value === expectedValue) {
+            return testElement;
+        }
+    }
+    return null;
+};
+

Propchange: geronimo/server/trunk/maven-plugins/selenium-maven-plugin/src/main/resources/org/apache/geronimo/mavenplugins/selenium/default-user-extentions.js
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/server/trunk/maven-plugins/selenium-maven-plugin/src/main/resources/org/apache/geronimo/mavenplugins/selenium/default-user-extentions.js
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: geronimo/server/trunk/maven-plugins/selenium-maven-plugin/src/main/resources/org/apache/geronimo/mavenplugins/selenium/default-user-extentions.js
------------------------------------------------------------------------------
    svn:mime-type = text/plain