/*
* Copyright (C) 2012 eXo Platform SAS.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.crsh.shell.impl.command;
import org.crsh.lang.impl.groovy.closure.PipeLineClosure;
import org.crsh.shell.AbstractShellTestCase;
import test.command.Commands;
/**
* Various test related to command dispatch.
*/
public class DispatchTestCase extends AbstractShellTestCase {
/*
public void testInvokeCompound() throws Exception {
String foo = "class foo {\n" +
"@Command\n" +
"public String main() {\n" +
"compound_command.compound 'bar'\n" +
"}\n" +
"}";
lifeCycle.bindClass("compound_command", Commands.Compound.class);
lifeCycle.bindGroovy("foo", foo);
//
assertEquals("bar", assertOk("foo"));
}
public void testProduceToClosure() {
String foo = "class foo {\n" +
"@Command\n" +
"public void main() {\n" +
"(produce_command { it })()\n" +
"}\n" +
"}";
lifeCycle.bindGroovy("foo", foo);
lifeCycle.bindClass("produce_command", Commands.ProduceString.class);
//
assertEquals("foobar", assertOk("foo"));
}
public void testProduceToClosureInScript() {
lifeCycle.bindGroovy("foo", "produce_command { it }\n");
lifeCycle.bindClass("produce_command", Commands.ProduceString.class);
//
assertEquals("foobar", assertOk("foo"));
}
public void testClosure() {
String foo = "class foo {\n" +
"@Command\n" +
"public void main() {\n" +
"def closure = echo\n" +
"closure 'bar'\n" +
"}\n" +
"}";
lifeCycle.bindGroovy("foo", foo);
//
assertEquals("bar", assertOk("foo"));
}
public void testClosureInScript() {
String foo = "def closure = echo\n" +
"closure 'bar'\n";
lifeCycle.bindGroovy("foo", foo);
lifeCycle.bindClass("compound_command", Commands.Compound.class);
//
assertEquals("bar", assertOk("foo"));
}
public void testCompoundClosure() {
String foo = "class foo {\n" +
"@Command\n" +
"public void main() {\n" +
"def closure = compound_command.compound\n" +
"closure()\n" +
"}\n" +
"}";
lifeCycle.bindGroovy("foo", foo);
lifeCycle.bindClass("compound_command", Commands.Compound.class);
//
assertEquals("bar", assertOk("foo"));
}
public void testCompoundClosureInScript() {
String foo = "def closure = compound_command.compound\n" +
"closure()\n";
lifeCycle.bindGroovy("foo", foo);
lifeCycle.bindClass("compound_command", Commands.Compound.class);
//
assertEquals("bar", assertOk("foo"));
}
public void testCompoundProduceToClosure() {
String foo = "class foo {\n" +
"@Command\n" +
"public void main() {\n" +
"(compound_produce_command.compound | { it })()\n" +
"}\n" +
"}";
lifeCycle.bindGroovy("foo", foo);
lifeCycle.bindClass("compound_produce_command", Commands.CompoundProduceString.class);
assertEquals("foobar", assertOk("foo"));
// Test with wrong type
String bar = "class bar {\n" +
"@Command\n" +
"public void main() {\n" +
"(compound_produce_command.compound | { boolean it -> it })()\n" +
"}\n" +
"}";
lifeCycle.bindGroovy("bar", bar);
lifeCycle.bindClass("compound_produce_command", Commands.CompoundProduceString.class);
assertEquals("", assertOk("bar"));
}
public void testCompoundProduceToClosureInScript() {
String foo = "(compound_produce_command.compound | { it })()\n";
lifeCycle.bindGroovy("foo", foo);
lifeCycle.bindClass("compound_produce_command", Commands.CompoundProduceString.class);
assertEquals("foobar", assertOk("foo"));
//
String bar = "(compound_produce_command.compound | { boolean it -> it })()\n";
lifeCycle.bindGroovy("bar", bar);
lifeCycle.bindClass("compound_produce_command", Commands.CompoundProduceString.class);
assertEquals("", assertOk("bar"));
}
public void testInvokeCompoundInScript() throws Exception {
String foo = "compound_command.compound 'bar'\n";
lifeCycle.bindClass("compound_command", Commands.Compound.class);
lifeCycle.bindGroovy("foo", foo);
//
assertEquals("bar", assertOk("foo"));
}
*/
public void testCheckedException() {
String foo = "class foo {\n" +
"@Command\n" +
"public String main() {\n" +
"try {" +
"checked_exception_command()" +
"} catch(javax.naming.NamingException e) {\n" +
"return 'bar'\n" +
"}\n" +
"}\n" +
"}";
lifeCycle.bindGroovy("foo", foo);
lifeCycle.bindClass("checked_exception_command", Commands.ThrowCheckedException.class);
//
assertEquals("bar", assertOk("foo"));
}
public void testCheckedExceptionInScript() {
String foo = "try {" +
"checked_exception_command()" +
"} catch(javax.naming.NamingException e) {\n" +
"out << 'bar'\n" +
"}\n";
lifeCycle.bindGroovy("foo", foo);
lifeCycle.bindClass("checked_exception_command", Commands.ThrowCheckedException.class);
//
assertEquals("bar", assertOk("foo"));
}
public void testScriptException() {
String foo = "class foo {\n" +
"@Command\n" +
"public String main() {\n" +
"try {" +
"script_exception_command()" +
"} catch(org.crsh.command.ScriptException e) {\n" +
"return 'bar'\n" +
"}\n" +
"}\n" +
"}";
lifeCycle.bindGroovy("foo", foo);
lifeCycle.bindClass("script_exception_command", Commands.ThrowScriptException.class);
//
assertEquals("bar", assertOk("foo"));
}
public void testScriptExceptionInScript() {
String foo = "try {" +
"script_exception_command()" +
"} catch(org.crsh.command.ScriptException e) {\n" +
"out << 'bar'\n" +
"}\n";
lifeCycle.bindGroovy("foo", foo);
lifeCycle.bindClass("script_exception_command", Commands.ThrowScriptException.class);
//
assertEquals("bar", assertOk("foo"));
}
public void testGroovyScriptException() {
String foo = "class foo {\n" +
"@Command\n" +
"public String main() {\n" +
"try {" +
"groovy_script_exception_command()" +
"} catch(groovy.util.ScriptException e) {\n" +
"return 'bar'\n" +
"}\n" +
"}\n" +
"}";
lifeCycle.bindGroovy("foo", foo);
lifeCycle.bindGroovyClass("groovy_script_exception_command", Commands.ThrowGroovyScriptException.class);
//
assertEquals("bar", assertOk("foo"));
}
public void testGroovyScriptExceptionInScript() {
String foo = "try {" +
"groovy_script_exception_command()" +
"} catch(groovy.util.ScriptException e) {\n" +
"out << 'bar'\n" +
"}\n";
lifeCycle.bindGroovy("foo", foo);
lifeCycle.bindGroovyClass("groovy_script_exception_command", Commands.ThrowGroovyScriptException.class);
//
assertEquals("bar", assertOk("foo"));
}
public void testRuntimeException() {
String foo = "class foo {\n" +
"@Command\n" +
"public String main() {\n" +
"try {" +
"runtime_exception_command()" +
"} catch(java.lang.SecurityException e) {\n" +
"return 'bar'\n" +
"}\n" +
"}\n" +
"}";
lifeCycle.bindGroovy("foo", foo);
lifeCycle.bindClass("runtime_exception_command", Commands.ThrowRuntimeException.class);
//
assertEquals("bar", assertOk("foo"));
}
public void testRuntimeExceptionInScript() {
String foo = "try {" +
"runtime_exception_command()" +
"} catch(java.lang.SecurityException e) {\n" +
"out << 'bar'\n" +
"}\n";
lifeCycle.bindGroovy("foo", foo);
lifeCycle.bindClass("runtime_exception_command", Commands.ThrowRuntimeException.class);
//
assertEquals("bar", assertOk("foo"));
}
public void testError() {
String foo = "class foo {\n" +
"@Command\n" +
"public String main() {\n" +
"try {" +
"error_command()" +
"} catch(java.awt.AWTError e) {\n" +
"return 'bar'\n" +
"}\n" +
"}\n" +
"}";
lifeCycle.bindGroovy("foo", foo);
lifeCycle.bindClass("error_command", Commands.ThrowError.class);
//
assertEquals("bar", assertOk("foo"));
}
public void testErrorInScript() {
String foo = "try {" +
"error_command()" +
"} catch(java.awt.AWTError e) {\n" +
"out << 'bar'\n" +
"}\n";
lifeCycle.bindGroovy("foo", foo);
lifeCycle.bindClass("error_command", Commands.ThrowError.class);
//
assertEquals("bar", assertOk("foo"));
}
public void testCannotCreateCommand() {
String foo = "class foo {\n" +
"@Command\n" +
"public String main() {\n" +
"try {\n" +
"cannot_create_command()" +
"} catch (" + RuntimeException.class.getName() + " e) {\n" +
"return 'bar';\n" +
"}\n" +
"}\n" +
"}";
lifeCycle.bindGroovy("foo", foo);
lifeCycle.bindClass("cannot_create_command", Commands.CannotInstantiate.class);
//
assertEquals("bar", assertOk("foo"));
}
public void testCannotCreateCommandInScript() {
String foo = "try {\n" +
"cannot_create_command()" +
"} catch (" + RuntimeException.class.getName() + " e) {\n" +
"out << 'bar';\n" +
"}\n";
lifeCycle.bindGroovy("foo", foo);
lifeCycle.bindClass("cannot_create_command", Commands.CannotInstantiate.class);
//
assertEquals("bar", assertOk("foo"));
}
public static Object bound;
public void testBindCommandInCommand() {
lifeCycle.bindClass("bound", Commands.Parameterized.class);
lifeCycle.bindGroovy("container", "public class container {\n" +
"@Command public void main() {\n" +
DispatchTestCase.class.getName() + ".bound = bound { }\n" +
"}\n" +
"}\n");
bound = null;
assertOk("container");
assertNotNull(bound);
assertInstance(PipeLineClosure.class, bound);
}
public void testBindCommandInScript() {
lifeCycle.bindClass("bound", Commands.Parameterized.class);
lifeCycle.bindGroovy("container", DispatchTestCase.class.getName() + ".bound = bound { }\n");
bound = null;
assertOk("container");
assertNotNull(bound);
assertInstance(PipeLineClosure.class, bound);
}
}