Return-Path: Delivered-To: apmail-cocoon-cvs-archive@www.apache.org Received: (qmail 81436 invoked from network); 14 Jun 2004 14:54:17 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur-2.apache.org with SMTP; 14 Jun 2004 14:54:17 -0000 Received: (qmail 53977 invoked by uid 500); 14 Jun 2004 14:54:20 -0000 Delivered-To: apmail-cocoon-cvs-archive@cocoon.apache.org Received: (qmail 53757 invoked by uid 500); 14 Jun 2004 14:54:19 -0000 Mailing-List: contact cvs-help@cocoon.apache.org; run by ezmlm Precedence: bulk Reply-To: dev@cocoon.apache.org list-help: list-unsubscribe: list-post: Delivered-To: mailing list cvs@cocoon.apache.org Received: (qmail 53698 invoked by uid 500); 14 Jun 2004 14:54:18 -0000 Delivered-To: apmail-cocoon-2.1-cvs@apache.org Received: (qmail 53668 invoked by uid 99); 14 Jun 2004 14:54:18 -0000 Received: from [209.237.227.194] (HELO minotaur.apache.org) (209.237.227.194) by apache.org (qpsmtpd/0.27.1) with SMTP; Mon, 14 Jun 2004 07:54:18 -0700 Received: (qmail 81168 invoked by uid 1509); 14 Jun 2004 14:53:57 -0000 Date: 14 Jun 2004 14:53:57 -0000 Message-ID: <20040614145357.81167.qmail@minotaur.apache.org> From: stephan@apache.org To: cocoon-2.1-cvs@apache.org Subject: cvs commit: cocoon-2.1/src/blocks/javaflow/test/org/apache/cocoon/components/flow/javascript JavaScriptFlowTestCase.java X-Virus-Checked: Checked X-Spam-Rating: minotaur-2.apache.org 1.6.2 0/1000/N stephan 2004/06/14 07:53:57 Modified: src/blocks/javaflow/java/org/apache/cocoon/components/flow/java ContinuationClassLoader.java JavaInterpreter.java src/blocks/javaflow/test/org/apache/cocoon/components/flow/java/test ExtendedContinuable.java SimpleContinuable.java SimpleFlow.java WrapperContinuable.java src/blocks/javaflow/test/org/apache/cocoon/components/flow/javascript JavaScriptFlowTestCase.java Added: src/blocks/javaflow/test/org/apache/cocoon/components/flow/java/test FooException.java JavaFlowTestCase.java JavaFlowTestCase.xtest Removed: src/blocks/javaflow/test/org/apache/cocoon/components/flow/java/test FlowTest.java InheritanceFlowTest.java Log: Fixing bug, which occur in some combinations of long/double and SWAP. Refactor the flow tests using some higher grad test routines. Revision Changes Path 1.9 +27 -7 cocoon-2.1/src/blocks/javaflow/java/org/apache/cocoon/components/flow/java/ContinuationClassLoader.java Index: ContinuationClassLoader.java =================================================================== RCS file: /home/cvs/cocoon-2.1/src/blocks/javaflow/java/org/apache/cocoon/components/flow/java/ContinuationClassLoader.java,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- ContinuationClassLoader.java 3 Jun 2004 14:30:39 -0000 1.8 +++ ContinuationClassLoader.java 14 Jun 2004 14:53:56 -0000 1.9 @@ -168,7 +168,7 @@ } } - /*byte[] changed = clazz.getJavaClass().getBytes(); + byte[] changed = clazz.getJavaClass().getBytes(); try { java.io.FileOutputStream out = new java.io.FileOutputStream(clazz.getClassName() + ".rewritten.class"); out.write(changed); @@ -176,7 +176,7 @@ out.close(); } catch (java.io.IOException ioe) { ioe.printStackTrace(); - }*/ + } clazz.addInterface(CONTINUATIONCAPABLE_CLASS); return clazz.getJavaClass().getBytes(); @@ -459,13 +459,23 @@ // pop all arguments for the constructor from the stack for (int i = arguments.length - 1; i >= 0; i--) { Type type = arguments[i]; - insList.append(InstructionFactory.createLoad(STACK_TYPE, method.getMaxLocals()+1)); - insList.append(new SWAP()); + // check for types with two words on stack + if (type.equals(Type.LONG) || type.equals(Type.DOUBLE)) { + insList.append(new ACONST_NULL()); // create dummy stack entry + insList.append(InstructionFactory.createLoad(STACK_TYPE, method.getMaxLocals()+1)); + insList.append(new DUP2_X2()); // swap ContinuationStack object and long/float + insList.append(new POP2()); + } else { + insList.append(InstructionFactory.createLoad(STACK_TYPE, method.getMaxLocals()+1)); + insList.append(new SWAP()); + } if (type instanceof BasicType) { if (type.getSize() < 2 && !type.equals(Type.FLOAT)) { type = Type.INT; } insList.append(insFactory.createInvoke(STACK_CLASS, getPushMethod(type), Type.VOID, new Type[]{type}, Constants.INVOKEVIRTUAL)); + if (type.equals(Type.LONG) || type.equals(Type.DOUBLE)) + insList.append(new POP()); // remove dummy stack entry } else if (type instanceof ReferenceType) { insList.append(insFactory.createInvoke(STACK_CLASS, getPushMethod(Type.OBJECT), Type.VOID, new Type[]{Type.OBJECT}, Constants.INVOKEVIRTUAL)); } @@ -538,9 +548,19 @@ if (type.getSize() < 2 && !type.equals(Type.FLOAT)) { type = Type.INT; } - insList.append(InstructionFactory.createLoad(STACK_TYPE, method.getMaxLocals()+1)); - insList.append(new SWAP()); // TODO: check for types with two words on stack + // check for types with two words on stack + if (type.equals(Type.LONG) || type.equals(Type.DOUBLE)) { + insList.append(new ACONST_NULL()); // create dummy stack entry + insList.append(InstructionFactory.createLoad(STACK_TYPE, method.getMaxLocals()+1)); + insList.append(new DUP2_X2()); // swap ContinuationStack object and long/float + insList.append(new POP2()); + } else { + insList.append(InstructionFactory.createLoad(STACK_TYPE, method.getMaxLocals()+1)); + insList.append(new SWAP()); + } insList.append(insFactory.createInvoke(STACK_CLASS, getPushMethod(type), Type.VOID, new Type[]{type}, Constants.INVOKEVIRTUAL)); + if (type.equals(Type.LONG) || type.equals(Type.DOUBLE)) + insList.append(new POP()); // remove dummy stack entry } else if (type.equals(Type.NULL)) { insList.append(InstructionConstants.POP); } else if (type instanceof UninitializedObjectType) { 1.8 +4 -4 cocoon-2.1/src/blocks/javaflow/java/org/apache/cocoon/components/flow/java/JavaInterpreter.java Index: JavaInterpreter.java =================================================================== RCS file: /home/cvs/cocoon-2.1/src/blocks/javaflow/java/org/apache/cocoon/components/flow/java/JavaInterpreter.java,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- JavaInterpreter.java 4 Jun 2004 14:02:38 -0000 1.7 +++ JavaInterpreter.java 14 Jun 2004 14:53:56 -0000 1.8 @@ -68,7 +68,7 @@ public void configure(Configuration config) throws ConfigurationException { super.configure(config); - + javascriptclassloader = new JavaScriptCompilingClassLoader(Thread.currentThread().getContextClassLoader()); try { javascriptclassloader.service(this.manager); @@ -86,9 +86,9 @@ int prefixLen = ACTION_METHOD_PREFIX.length(); return name.substring(prefixLen, prefixLen + 1).toLowerCase() + name.substring(prefixLen + 1); } - + public void initialize() throws Exception { - + if (getLogger().isDebugEnabled()) getLogger().debug("initialize java flow interpreter"); 1.2 +2 -2 cocoon-2.1/src/blocks/javaflow/test/org/apache/cocoon/components/flow/java/test/ExtendedContinuable.java Index: ExtendedContinuable.java =================================================================== RCS file: /home/cvs/cocoon-2.1/src/blocks/javaflow/test/org/apache/cocoon/components/flow/java/test/ExtendedContinuable.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- ExtendedContinuable.java 16 Apr 2004 09:39:57 -0000 1.1 +++ ExtendedContinuable.java 14 Jun 2004 14:53:56 -0000 1.2 @@ -18,7 +18,7 @@ public class ExtendedContinuable extends SimpleContinuable { - public void test() { - super.suspend(); + public void doExtendedTest() { + super.doSuspendTest(); } } 1.2 +1 -1 cocoon-2.1/src/blocks/javaflow/test/org/apache/cocoon/components/flow/java/test/SimpleContinuable.java Index: SimpleContinuable.java =================================================================== RCS file: /home/cvs/cocoon-2.1/src/blocks/javaflow/test/org/apache/cocoon/components/flow/java/test/SimpleContinuable.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- SimpleContinuable.java 16 Apr 2004 09:39:57 -0000 1.1 +++ SimpleContinuable.java 14 Jun 2004 14:53:56 -0000 1.2 @@ -18,7 +18,7 @@ import org.apache.cocoon.components.flow.java.*; public class SimpleContinuable implements Continuable { - public void suspend() { + public void doSuspendTest() { System.out.println("suspending"); Continuation.suspend(); System.out.println("continuing"); 1.5 +18 -8 cocoon-2.1/src/blocks/javaflow/test/org/apache/cocoon/components/flow/java/test/SimpleFlow.java Index: SimpleFlow.java =================================================================== RCS file: /home/cvs/cocoon-2.1/src/blocks/javaflow/test/org/apache/cocoon/components/flow/java/test/SimpleFlow.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- SimpleFlow.java 3 Jun 2004 14:30:39 -0000 1.4 +++ SimpleFlow.java 14 Jun 2004 14:53:56 -0000 1.5 @@ -26,12 +26,12 @@ public class SimpleFlow extends AbstractSimpleFlow { public SimpleFlow() { - if (Continuation.currentContinuation() != null) - throw new RuntimeException("Conitnuation should not exist"); + /*if (Continuation.currentContinuation() != null) + throw new RuntimeException("Conitnuation should not exist");*/ //sendPageAndWait("should not stop"); } - /*public boolean run() { + public boolean doSimpleTest() { System.out.println("start of flow"); float a = 1; sendPageAndWait("getNumberA"); @@ -40,13 +40,14 @@ sendPage("result", new VarMap().add("result", a + 1)); System.out.println("end of flow"); return true; - }*/ + } - public void testNew(Locale locale) { + public void doNewTest() { + Locale locale = null; FormContext formContext = new FormContext(getRequest(), locale); } - public void testCatch() { + public void doCatchTest() { try { sendPageAndWait("getNumberA"); float a = Float.parseFloat(getRequest().getParameter("a")); @@ -69,11 +70,11 @@ //nothing } - public void testAbstract() { + public void doAbstractTest() { super.parent(); } - public void testDelegate() { + public void doDelegateTest() { CalculatorFlow flow = new CalculatorFlow(); flow.run(); } @@ -113,6 +114,15 @@ hits = searcher.search(query); } }*/ + + public void doExceptionTest() throws Exception { + + while(true) { + + this.sendPageAndWait("test.jxt"); + throw new FooException("test", 123); + } + } } class FooInner { 1.2 +2 -2 cocoon-2.1/src/blocks/javaflow/test/org/apache/cocoon/components/flow/java/test/WrapperContinuable.java Index: WrapperContinuable.java =================================================================== RCS file: /home/cvs/cocoon-2.1/src/blocks/javaflow/test/org/apache/cocoon/components/flow/java/test/WrapperContinuable.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- WrapperContinuable.java 16 Apr 2004 09:39:57 -0000 1.1 +++ WrapperContinuable.java 14 Jun 2004 14:53:56 -0000 1.2 @@ -25,8 +25,8 @@ simple = new SimpleContinuable(); } - public void test() { - simple.suspend(); + public void doWrapperTest() { + simple.doSuspendTest(); } } 1.1 cocoon-2.1/src/blocks/javaflow/test/org/apache/cocoon/components/flow/java/test/FooException.java Index: FooException.java =================================================================== /* * 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.cocoon.components.flow.java.test; public class FooException extends java.lang.Exception { private long id = 0; public FooException() { } public FooException(String msg) { super(msg); } public FooException(String msg, long id) { super(msg); this.id = id; } } 1.1 cocoon-2.1/src/blocks/javaflow/test/org/apache/cocoon/components/flow/java/test/JavaFlowTestCase.java Index: JavaFlowTestCase.java =================================================================== /* * 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.cocoon.components.flow.java.test; import java.util.ArrayList; import org.apache.cocoon.SitemapComponentTestCase; import org.apache.cocoon.components.flow.java.VarMap; import org.apache.commons.jxpath.JXPathContext; /** * * * @author Stephan Michels * @version CVS $Id: JavaFlowTestCase.java,v 1.1 2004/06/14 14:53:56 stephan Exp $ */ public class JavaFlowTestCase extends SitemapComponentTestCase { public JavaFlowTestCase(String name) { super(name); } public void testSimple() throws Exception { String source = "org.apache.cocoon.components.flow.java.test.SimpleFlow"; String id = callFunction("java", source, "simpleTest", new ArrayList()); getRequest().addParameter("a", "2.3"); getRedirector().reset(); callContinuation("java", source, id, new ArrayList()); VarMap map = (VarMap)getFlowContextObject(); assertEquals(((Float)map.getMap().get("result")).floatValue(), 3.3f, 0.1f); JXPathContext jxcontext = JXPathContext.newContext(getFlowContextObject()); Float result = (Float)jxcontext.getValue("result"); assertEquals(result.floatValue(), 3.3f, 0.1f); } public void testNew() throws Exception { String source = "org.apache.cocoon.components.flow.java.test.SimpleFlow"; String id = callFunction("java", source, "newTest", new ArrayList()); } public void testCatch() throws Exception { String source = "org.apache.cocoon.components.flow.java.test.SimpleFlow"; String id = callFunction("java", source, "catchTest", new ArrayList()); assertEquals(getRedirector().getRedirect(), "cocoon:/getNumberA"); getRequest().addParameter("a", "bla"); getRedirector().reset(); id = callContinuation("java", source, id, new ArrayList()); assertEquals(getRedirector().getRedirect(), "cocoon:/error"); getRedirector().reset(); id = callContinuation("java", source, id, new ArrayList()); assertEquals(getRedirector().getRedirect(), "cocoon:/result"); } public void testAbstract() throws Exception { String source = "org.apache.cocoon.components.flow.java.test.SimpleFlow"; String id = callFunction("java", source, "abstractTest", new ArrayList()); assertEquals(getRedirector().getRedirect(), "cocoon:/parent"); } public void testDelegate() throws Exception { String source = "org.apache.cocoon.components.flow.java.test.SimpleFlow"; String id = callFunction("java", source, "delegateTest", new ArrayList()); assertEquals(getRedirector().getRedirect(), "cocoon:/page/getNumberA"); getRequest().addParameter("a", "2"); getRedirector().reset(); id = callContinuation("java", source, id, new ArrayList()); assertEquals(getRedirector().getRedirect(), "cocoon:/page/getNumberB"); getRequest().addParameter("b", "2"); getRedirector().reset(); id = callContinuation("java", source, id, new ArrayList()); assertEquals(getRedirector().getRedirect(), "cocoon:/page/getOperator"); getRequest().addParameter("operator", "plus"); getRedirector().reset(); id = callContinuation("java", source, id, new ArrayList()); assertEquals(getRedirector().getRedirect(), "cocoon:/page/displayResult"); } public void testException() throws Exception { String source = "org.apache.cocoon.components.flow.java.test.SimpleFlow"; String id = callFunction("java", source, "exceptionTest", new ArrayList()); assertEquals(getRedirector().getRedirect(), "cocoon:/test.jxt"); try { callContinuation("java", source, id, new ArrayList()); fail("Excepting a FooException"); } catch (FooException e) {} } public void testSimpleContinuable() throws Exception { String source = "org.apache.cocoon.components.flow.java.test.SimpleContinuable"; String id = callFunction("java", source, "suspendTest", new ArrayList()); id = callContinuation("java", source, id, new ArrayList()); } public void testWrapperContinuable() throws Exception { String source = "org.apache.cocoon.components.flow.java.test.WrapperContinuable"; String id = callFunction("java", source, "wrapperTest", new ArrayList()); id = callContinuation("java", source, id, new ArrayList()); } public void testExtendedContinuable() throws Exception { String source = "org.apache.cocoon.components.flow.java.test.ExtendedContinuable"; String id = callFunction("java", source, "extendedTest", new ArrayList()); id = callContinuation("java", source, id, new ArrayList()); } } 1.1 cocoon-2.1/src/blocks/javaflow/test/org/apache/cocoon/components/flow/java/test/JavaFlowTestCase.xtest Index: JavaFlowTestCase.xtest =================================================================== Test Cases: JavaScriptFlowTestCase System.out %7.7{priority} %5.5{time} [%9.9{category}] (%{context}): %{message}\n%{throwable} 180000 180000 1.2 +3 -84 cocoon-2.1/src/blocks/javaflow/test/org/apache/cocoon/components/flow/javascript/JavaScriptFlowTestCase.java Index: JavaScriptFlowTestCase.java =================================================================== RCS file: /home/cvs/cocoon-2.1/src/blocks/javaflow/test/org/apache/cocoon/components/flow/javascript/JavaScriptFlowTestCase.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- JavaScriptFlowTestCase.java 4 Jun 2004 14:02:38 -0000 1.1 +++ JavaScriptFlowTestCase.java 14 Jun 2004 14:53:57 -0000 1.2 @@ -16,16 +16,7 @@ package org.apache.cocoon.components.flow.javascript; -import java.util.*; - -import org.apache.avalon.framework.component.*; -import org.apache.avalon.framework.container.ContainerUtil; -import org.apache.avalon.framework.logger.Logger; import org.apache.cocoon.SitemapComponentTestCase; -import org.apache.cocoon.components.flow.*; -import org.apache.excalibur.event.Queue; -import org.apache.excalibur.event.command.CommandManager; -import org.apache.excalibur.source.SourceResolver; /** * @@ -39,80 +30,8 @@ super(name); } - /*public void setUp() { - CommandManager commands = new CommandManager(); - ContainerUtil.enableLogging(commands, (Logger) getLogger()); - //this.threads.register(this.commands); - - getContext(). put(Queue.ROLE, commands.getCommandSink()); - }*/ - public void testCalculator() throws Exception { - String source = "resource://org/apache/cocoon/components/flow/javascript/calc.js"; - callFunction("java", source, "calculator", new ArrayList()); - } - - public void callFunction(String type, String source, String function, List params) throws Exception { - - ComponentSelector selector = null; - Interpreter interpreter = null; - SourceResolver resolver = null; - - try { - selector = (ComponentSelector) this.manager.lookup(Interpreter.ROLE); - assertNotNull("Test lookup of interpreter selector", selector); - - resolver = (SourceResolver) this.manager.lookup(SourceResolver.ROLE); - assertNotNull("Test lookup of source resolver", resolver); - - assertNotNull("Test if interpreter name is not null", type); - interpreter = (Interpreter) selector.select(type); - assertNotNull("Test lookup of interpreter", interpreter); - - ((AbstractInterpreter)interpreter).register(source); - interpreter.callFunction(function, params, getRedirector()); - - } catch (ComponentException ce) { - getLogger().error("Could not retrieve interpeter", ce); - fail("Could not retrieve interpreter: " + ce.toString()); - } finally { - if (interpreter != null) { - selector.release((Component) interpreter); - } - this.manager.release(selector); - this.manager.release(resolver); - } - } - - public void handleContinuation(String type, String source, String id, List params) throws Exception { - - ComponentSelector selector = null; - Interpreter interpreter = null; - SourceResolver resolver = null; - - try { - selector = (ComponentSelector) this.manager.lookup(Interpreter.ROLE); - assertNotNull("Test lookup of interpreter selector", selector); - - resolver = (SourceResolver) this.manager.lookup(SourceResolver.ROLE); - assertNotNull("Test lookup of source resolver", resolver); - - assertNotNull("Test if interpreter name is not null", type); - interpreter = (Interpreter) selector.select(type); - assertNotNull("Test lookup of interpreter", interpreter); - - ((AbstractInterpreter)interpreter).register(source); - interpreter.handleContinuation(id, params, getRedirector()); - - } catch (ComponentException ce) { - getLogger().error("Could not retrieve interpreter", ce); - fail("Could not retrieve interpreter: " + ce.toString()); - } finally { - if (interpreter != null) { - selector.release((Component) interpreter); - } - this.manager.release(selector); - this.manager.release(resolver); - } + /*String source = "resource://org/apache/cocoon/components/flow/javascript/calc.js"; + callFunction("java", source, "calculator", new ArrayList());*/ } }