You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@struts.apache.org by mr...@apache.org on 2005/02/21 07:52:08 UTC

svn commit: r154644 - in struts/flow/trunk: ./ src/java/org/apache/struts/flow/sugar/ src/test/ src/test/org/ src/test/org/apache/ src/test/org/apache/struts/ src/test/org/apache/struts/flow/ src/test/org/apache/struts/flow/sugar/

Author: mrdon
Date: Sun Feb 20 22:52:04 2005
New Revision: 154644

URL: http://svn.apache.org/viewcvs?view=rev&rev=154644
Log:
 * Adding a very simple Javascript junit implementation
 * Adding tests for the List and Map wrappers
 * Adding tests for File and List extension functions
 * Fixing errors revealed by the unit tests
 * Adding description of sugar package


Added:
    struts/flow/trunk/src/java/org/apache/struts/flow/sugar/package.html   (with props)
    struts/flow/trunk/src/test/
    struts/flow/trunk/src/test/assert.js   (with props)
    struts/flow/trunk/src/test/fileTest.js   (with props)
    struts/flow/trunk/src/test/listTest.js   (with props)
    struts/flow/trunk/src/test/org/
    struts/flow/trunk/src/test/org/apache/
    struts/flow/trunk/src/test/org/apache/struts/
    struts/flow/trunk/src/test/org/apache/struts/flow/
    struts/flow/trunk/src/test/org/apache/struts/flow/sugar/
    struts/flow/trunk/src/test/org/apache/struts/flow/sugar/JavascriptSugarTest.java   (with props)
    struts/flow/trunk/src/test/wrappersTest.js   (with props)
Modified:
    struts/flow/trunk/build.xml
    struts/flow/trunk/src/java/org/apache/struts/flow/sugar/ExtensionFunction.java
    struts/flow/trunk/src/java/org/apache/struts/flow/sugar/ListExtensions.java
    struts/flow/trunk/src/java/org/apache/struts/flow/sugar/SugarWrapFactory.java

Modified: struts/flow/trunk/build.xml
URL: http://svn.apache.org/viewcvs/struts/flow/trunk/build.xml?view=diff&r1=154643&r2=154644
==============================================================================
--- struts/flow/trunk/build.xml (original)
+++ struts/flow/trunk/build.xml Sun Feb 20 22:52:04 2005
@@ -30,13 +30,16 @@
    
     <property name="src.dir" value="src" />
     <property name="src.java" value="${src.dir}/java" />
+    <property name="src.test" value="${src.dir}/test" />
     <property name="src.guess.example" value="${src.dir}/guess-example" />
     <property name="src.wizard.example" value="${src.dir}/wizard-example" />
     
+    
     <property name="build.dir" value="build" />
     <property name="build.guess.example" value="${build.dir}/guess-example" />
     <property name="build.wizard.example" value="${build.dir}/wizard-example" />
     <property name="build.target" value="${build.dir}/target" />
+    <property name="build.test" value="${build.dir}/test" />
 
     <property name="javadoc.packages" value="org.apache.struts.flow.*" />
 
@@ -177,13 +180,19 @@
         </copy>
     </target>
 
-<!--
+
 	<target name="run-tests" depends="compile">
-		<javac srcdir="${test.src}" destdir="${test.build}"
+    <mkdir dir="${build.test}" />
+		<javac srcdir="${src.test}" destdir="${build.test}"
 			debug="on" optimize="off" deprecation="off" >
             <classpath refid="base.classpath" />
         </javac>
-		<junit printsummary="on" fork="on">
+     
+     <java classpathref="base.classpath" classname="org.apache.struts.flow.sugar.JavascriptSugarTest">
+      <arg path="${src.test}" />
+     </java>
+		<!--
+    <junit printsummary="on" fork="on">
 			<formatter type="xml" />
 			<classpath refid="base.classpath" />
 
@@ -192,9 +201,8 @@
 					<include name="**/*Test.java" />
 				</fileset>
 			</batchtest>
-		</junit>
+		</junit> -->
     </target>
-    -->
     <!--
             The 'javadoc' target creates the API documentation.
             All javadoc is created in the ${doc.dir}/javadoc directory.

Modified: struts/flow/trunk/src/java/org/apache/struts/flow/sugar/ExtensionFunction.java
URL: http://svn.apache.org/viewcvs/struts/flow/trunk/src/java/org/apache/struts/flow/sugar/ExtensionFunction.java?view=diff&r1=154643&r2=154644
==============================================================================
--- struts/flow/trunk/src/java/org/apache/struts/flow/sugar/ExtensionFunction.java (original)
+++ struts/flow/trunk/src/java/org/apache/struts/flow/sugar/ExtensionFunction.java Sun Feb 20 22:52:04 2005
@@ -13,7 +13,6 @@
  *  See the License for the specific language governing permissions and
  *  limitations under the License.
  */
-
 package org.apache.struts.flow.sugar;
 
 import org.mozilla.javascript.*;

Modified: struts/flow/trunk/src/java/org/apache/struts/flow/sugar/ListExtensions.java
URL: http://svn.apache.org/viewcvs/struts/flow/trunk/src/java/org/apache/struts/flow/sugar/ListExtensions.java?view=diff&r1=154643&r2=154644
==============================================================================
--- struts/flow/trunk/src/java/org/apache/struts/flow/sugar/ListExtensions.java (original)
+++ struts/flow/trunk/src/java/org/apache/struts/flow/sugar/ListExtensions.java Sun Feb 20 22:52:04 2005
@@ -62,7 +62,7 @@
                 Object o = null;
                 if (list.size() > 0) {
                     o = list.get(list.size() - 1);
-                    list.remove(list.size());
+                    list.remove(list.size() - 1);
                 }
                 return o;
             }

Modified: struts/flow/trunk/src/java/org/apache/struts/flow/sugar/SugarWrapFactory.java
URL: http://svn.apache.org/viewcvs/struts/flow/trunk/src/java/org/apache/struts/flow/sugar/SugarWrapFactory.java?view=diff&r1=154643&r2=154644
==============================================================================
--- struts/flow/trunk/src/java/org/apache/struts/flow/sugar/SugarWrapFactory.java (original)
+++ struts/flow/trunk/src/java/org/apache/struts/flow/sugar/SugarWrapFactory.java Sun Feb 20 22:52:04 2005
@@ -113,31 +113,6 @@
         return map;
     }
     
-    // temporary method for testing
-    public static final void main(String[] args) throws Exception {
-        // Creates and enters a Context. The Context stores information
-        // about the execution environment of a script.
-        Context cx = Context.enter();
-        try {
-            cx.setWrapFactory(new SugarWrapFactory());
-            // Initialize the standard objects (Object, Function, etc.)
-            // This must be done before scripts can be executed. Returns
-            // a scope object that we use in later calls.
-            Scriptable scope = cx.initStandardObjects();
-
-            // Now evaluate the string we've colected.
-            FileReader reader = new FileReader(args[0]);
-            Object result = cx.evaluateReader(scope, reader, args[0], 1, null);
-
-            // Convert the result to a string and print it.
-            System.err.println(cx.toString(result));
-
-        } finally {
-            // Exit from the context.
-            Context.exit();
-        }   
-    }
-    
     class ExtensionFunctionEntry {
         public Class clazz;
         public String name;

Added: struts/flow/trunk/src/java/org/apache/struts/flow/sugar/package.html
URL: http://svn.apache.org/viewcvs/struts/flow/trunk/src/java/org/apache/struts/flow/sugar/package.html?view=auto&rev=154644
==============================================================================
--- struts/flow/trunk/src/java/org/apache/struts/flow/sugar/package.html (added)
+++ struts/flow/trunk/src/java/org/apache/struts/flow/sugar/package.html Sun Feb 20 22:52:04 2005
@@ -0,0 +1,12 @@
+<html>
+<head>
+    <title>Struts Flow - Sugar</title>
+</head>
+<body>
+    This package contains syntactic "sugar" in the form of function extensions for 
+    Java core classes.  It also contains wrappers for the Collections interfaces to make
+    their information accessible through normal javascript techniques.  This package doesn't depend on 
+    any other Struts Flow classes and can be used with any other embedded instance of Rhino.
+</body>
+</html>
+    

Propchange: struts/flow/trunk/src/java/org/apache/struts/flow/sugar/package.html
------------------------------------------------------------------------------
    svn:executable = *

Added: struts/flow/trunk/src/test/assert.js
URL: http://svn.apache.org/viewcvs/struts/flow/trunk/src/test/assert.js?view=auto&rev=154644
==============================================================================
--- struts/flow/trunk/src/test/assert.js (added)
+++ struts/flow/trunk/src/test/assert.js Sun Feb 20 22:52:04 2005
@@ -0,0 +1,63 @@
+var errors = new Array();
+var failures = new Array();
+var successes = new Array();
+
+function assertTrue(msg, test) {
+  if (test == undefined) {
+    test = msg;
+    msg = "Test failed";
+  }
+  if (test != true) {
+      this.result = failures.push(msg+" - "+this.curTest);
+  } else {
+      successes.push(this.curTest);
+  }
+}
+
+function runTests() {
+    
+    for (id in this) {
+        if (id.length > 4 && id.substr(0, 4) == 'test') {
+            try {
+                if (this.setUp != null) {
+                    this.setUp();
+                }
+                this.curTest = id.substr(4);
+                this[id]();
+            } catch (e) {
+                errors.push(this.curTest + " - "+e+" line:"+e.lineNumber);
+            } finally {
+                if (this.tearDown != null) {
+                    this.tearDown();
+                }
+            }
+        }
+    }
+    
+    printResults()
+}
+
+function printResults() {
+    print("Test Results");
+    print("===============\n");
+    print("Successes  - "+successes.length);
+    for (x in successes) {
+        print("\t"+successes[x]);
+    }
+    print("Failures   - "+failures.length);
+    for (x in failures) {
+        print("\t"+failures[x]);
+    }
+    print("Errors     - "+errors.length);
+    for (x in errors) {
+        print("\t"+errors[x]);
+    }    
+}
+
+function print(val) {
+    java.lang.System.out.println((val == null ? "null" : val));
+}
+
+runTests();
+  
+  

Propchange: struts/flow/trunk/src/test/assert.js
------------------------------------------------------------------------------
    svn:executable = *

Added: struts/flow/trunk/src/test/fileTest.js
URL: http://svn.apache.org/viewcvs/struts/flow/trunk/src/test/fileTest.js?view=auto&rev=154644
==============================================================================
--- struts/flow/trunk/src/test/fileTest.js (added)
+++ struts/flow/trunk/src/test/fileTest.js Sun Feb 20 22:52:04 2005
@@ -0,0 +1,29 @@
+function setUp() {
+    this.file = java.io.File.createTempFile("test", ".tmp");
+}
+
+function testAppend() {
+  file.append("this is a test");
+  txt = new java.io.BufferedReader(new java.io.FileReader(file)).readLine();
+  assertTrue("Didn't append text - "+txt, txt == "this is a test");
+}
+
+function testGetText() {
+  writer = new java.io.FileWriter(file);
+  writer.write("foo\nbar");
+  writer.close();
+  txt = file.getText();
+  assertTrue("Didn't get text - "+txt, txt == "foo\nbar");
+}
+
+function testEachLine() {
+  writer = new java.io.FileWriter(file);
+  writer.write("foo\nbar");
+  writer.close();
+  foo = false;
+  bar = false;
+  file.eachLine(function(line) {eval(line+" = true");});
+  assertTrue("Didn't read both lines", foo == true && bar == true);
+}
+
+

Propchange: struts/flow/trunk/src/test/fileTest.js
------------------------------------------------------------------------------
    svn:executable = *

Added: struts/flow/trunk/src/test/listTest.js
URL: http://svn.apache.org/viewcvs/struts/flow/trunk/src/test/listTest.js?view=auto&rev=154644
==============================================================================
--- struts/flow/trunk/src/test/listTest.js (added)
+++ struts/flow/trunk/src/test/listTest.js Sun Feb 20 22:52:04 2005
@@ -0,0 +1,43 @@
+function setUp() {
+    this.list = new java.util.ArrayList();
+    this.list.add("foo");
+    this.list.add("bar");
+}
+
+function testEach() {
+  foo = false;
+  bar = false;
+  list.each(function(val) { eval(val+" = true;");});
+  assertTrue("Didn't iterate over both", foo == true && bar == true);
+}
+
+function testAsImmutable() {
+    lst = list.asImmutable();
+    passed = false;
+    try {
+        lst.add("foo");
+    } catch (e) {
+        passed = true;
+    }
+    assertTrue("Shouldn't have allowed an add", passed);
+}
+
+function testPop() {
+  val = list.pop();
+  assertTrue("Wrong top value", val == "bar");
+  assertTrue("Didn't reduce size", list.size() == 1);
+}
+
+function testSort() {
+  list.sort();
+  assertTrue("Didn't sort, bar should be first", list[0] == "bar");
+}
+
+function testSortEach() {
+  list.sortEach(function(val1, val2) {
+    if (val1 == "bar") return -1;
+    else return 1;
+   });
+  assertTrue("Didn't sort, bar should be first", list[0] == "bar");
+}
+

Propchange: struts/flow/trunk/src/test/listTest.js
------------------------------------------------------------------------------
    svn:executable = *

Added: struts/flow/trunk/src/test/org/apache/struts/flow/sugar/JavascriptSugarTest.java
URL: http://svn.apache.org/viewcvs/struts/flow/trunk/src/test/org/apache/struts/flow/sugar/JavascriptSugarTest.java?view=auto&rev=154644
==============================================================================
--- struts/flow/trunk/src/test/org/apache/struts/flow/sugar/JavascriptSugarTest.java (added)
+++ struts/flow/trunk/src/test/org/apache/struts/flow/sugar/JavascriptSugarTest.java Sun Feb 20 22:52:04 2005
@@ -0,0 +1,79 @@
+/*
+ *  Copyright 1999-2004 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.
+ */
+package org.apache.struts.flow.sugar;
+
+import java.io.*;
+import java.util.*;
+import org.mozilla.javascript.*;
+
+/**
+ *  Driver class for all the Javascript-based unit tests
+ */
+public class JavascriptSugarTest {
+    
+    /** 
+     *  Driver main method for running tests
+     *
+     * @param args Array of command line arguments.  First argument should be a
+     *             path to the directory where "assert.js" and unit test Javascript
+     *             scripts (*Test.js) can be found.
+     */
+    public static void main(String args[]) throws Exception {
+        
+        File baseDir = new File(args[0]);
+                
+        String assertCode = readAll(new File(baseDir, "assert.js"));
+        File[] kids = baseDir.listFiles();
+        for (int x=0; x<kids.length; x++) {
+            if (kids[x].getName().endsWith("Test.js")) {
+                // Creates and enters a Context. The Context stores information
+                // about the execution environment of a script.
+                Context cx = Context.enter();
+                try {
+                    cx.setWrapFactory(new SugarWrapFactory());
+                    // Initialize the standard objects (Object, Function, etc.)
+                    // This must be done before scripts can be executed. Returns
+                    // a scope object that we use in later calls.
+                    Scriptable scope = cx.initStandardObjects();
+        
+                    // Now evaluate the string we've colected.
+                    String code = readAll(kids[x]);
+                    StringReader reader = new StringReader(code + "\n" + assertCode);
+                    Object result = cx.evaluateReader(scope, reader, kids[x].getName(), 1, null);
+        
+                    // Convert the result to a string and print it.
+                    //System.err.println(cx.toString(result));
+                } finally {
+                    // Exit from the context.
+                    Context.exit();
+                }   
+            }
+        }
+    }
+    
+    private static String readAll(File file) throws IOException {
+        StringBuffer sb = new StringBuffer();
+        FileReader reader = new FileReader(file);
+        char[] buffer = new char[4096];
+        int len = 0;
+        while ((len = reader.read(buffer, 0, buffer.length)) > -1) {
+            sb.append(buffer, 0, len);
+        }
+        return sb.toString();
+    }
+
+}
+

Propchange: struts/flow/trunk/src/test/org/apache/struts/flow/sugar/JavascriptSugarTest.java
------------------------------------------------------------------------------
    svn:executable = *

Added: struts/flow/trunk/src/test/wrappersTest.js
URL: http://svn.apache.org/viewcvs/struts/flow/trunk/src/test/wrappersTest.js?view=auto&rev=154644
==============================================================================
--- struts/flow/trunk/src/test/wrappersTest.js (added)
+++ struts/flow/trunk/src/test/wrappersTest.js Sun Feb 20 22:52:04 2005
@@ -0,0 +1,25 @@
+function testMapIndex() {
+  map = new java.util.HashMap();
+  map.put("foo", "bar");
+  assertTrue("brackets didn't work", map["foo"] == "bar");
+  assertTrue("dot notation didn't work", map.foo == "bar");
+  assertTrue("normal map get() didn't work", map.get("foo") == "bar");
+}
+
+function testListIndex() {
+  list = new java.util.ArrayList();
+  list.add("foo");
+  list.add("bar");
+  assertTrue("Index didn't work", list[0] == "foo");
+}
+
+function testListForIn() {
+  list = new java.util.ArrayList();
+  list.add("foo");
+  list.add("bar");
+  count = 0;
+  for (x in list) {
+      if (x == 0) assertTrue("first value wrong", list[x] == "foo");
+      if (x == 1) assertTrue("second value wrong", list[x] == "bar");
+  }
+}

Propchange: struts/flow/trunk/src/test/wrappersTest.js
------------------------------------------------------------------------------
    svn:executable = *



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
For additional commands, e-mail: dev-help@struts.apache.org