/* * 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; import org.crsh.command.ScriptException; import javax.management.JMException; import java.awt.*; import java.util.EmptyStackException; public class CommandTestCase extends AbstractShellTestCase { /** . */ private final String no_ret = "class no_ret {\n" + "@Command\n" + "public void main() {\n" + "}\n" + "}"; public void testUnknownCommand() throws Exception { assertUnknownCommand("bilto"); } public void testFailure() throws Exception { Throwable t = assertEvalError("fail"); // assertEquals(Exception.class, t.getClass()); } public void testGroovyCompilationError() throws Exception { assertInternalError("invalid"); } public void testGroovyInvalidCommandDescriptor() throws Exception { lifeCycle.bindGroovy("foo", "public class foo { @Command public void main(@Option(names = [\"-h\"]) String opt) { } }"); assertInternalError("foo"); } public void testJavaCompilationError() throws Exception { lifeCycle.bindJava("foo", "public class foo { @Command public void main( { } }"); assertInternalError("foo"); } public void testJavaInvalidCommandDescriptor() throws Exception { lifeCycle.bindJava("foo", "public class foo { @Command public void main(@Option(names = \"-h\") String opt) { } }"); assertInternalError("foo"); } public void testSimple() throws Exception { assertEquals("foo", assertOk("echo foo")); } public void testSession() throws Exception { assertEquals("null", assertOk("attribute foo")); lifeCycle.setAttribute("foo", "bar"); assertEquals("bar", assertOk("attribute foo")); lifeCycle.setAttribute("foo", null); assertEquals("null", assertOk("attribute foo")); } public void testInvokeNoRet() throws Exception { String foo = "class foo {\n" + "@Command\n" + "public String main() {\n" + "no_ret()\n" + "}\n" + "}"; lifeCycle.bindGroovy("foo", foo); lifeCycle.bindGroovy("no_ret", no_ret); // assertEquals("", assertOk("foo")); } public void testInvokeNoRetInScript() throws Exception { String foo = "no_ret()\n"; lifeCycle.bindGroovy("foo", foo); lifeCycle.bindGroovy("no_ret", no_ret); // assertEquals("", assertOk("foo")); } public void testInvoke() throws Exception { String foo = "class foo {\n" + "@Command\n" + "public String main() {\n" + "echo 'bar'\n" + "}\n" + "}"; lifeCycle.bindGroovy("foo", foo); // assertEquals("bar", assertOk("foo")); } public void testInvokeInScript() throws Exception { String foo = "echo 'bar'\n"; lifeCycle.bindGroovy("foo", foo); // assertEquals("bar", assertOk("foo")); } public void testFlush() { assertEquals("foobar", assertOk("echo -f 1 foo bar")); assertEquals("bar", evalOk("out << 'bar'; out.flush();")); } public void testResolveOut() { String resolve = "class resolve {\n" + "@Command\n" + "public org.crsh.command.Pipe<Object, Object> main() {\n" + "return new org.crsh.command.Pipe<Object, Object>() {\n" + "public void open() {\n" + "out << 'HELLO'\n" + "}\n" + "}\n" + "}\n" + "}"; lifeCycle.bindGroovy("resolve", resolve); // assertEquals("HELLO", assertOk("resolve")); } public void testContextLeftShift() { String foo = "class foo {\n" + "@Command\n" + "public void main() {\n" + "context << 'hello'\n" + "context << 3\n" + "}\n" + "}"; lifeCycle.bindGroovy("foo", foo); // assertEquals("hello3", assertOk("foo")); } public void testScriptContextLeftShift() { String foo = "context << 'hello'\n" + "context << 3\n" + "return null"; lifeCycle.bindGroovy("foo", foo); // assertEquals("hello3", assertOk("foo")); } public void testThrowScript() throws Exception { lifeCycle.bindGroovy("a", "public class a {\n" + "@Command\n" + "public void main() throws org.crsh.command.ScriptException {\n" + "throw new org.crsh.command.ScriptException()" + "}\n" + "}\n"); assertEvalError("a", ScriptException.class); } public void testThrowGroovyScript() throws Exception { lifeCycle.bindGroovy("a", "public class a {\n" + "@Command\n" + "public void main() throws groovy.util.ScriptException {\n" + "throw new groovy.util.ScriptException()" + "}\n" + "}\n"); assertEvalError("a", groovy.util.ScriptException.class); } public void testThrowCheckedException() throws Exception { lifeCycle.bindGroovy("a", "public class a {\n" + "@Command\n" + "public void main() throws javax.management.JMException {\n" + "throw new javax.management.JMException()" + "}\n" + "}\n"); assertEvalError("a", JMException.class); } public void testThrowRuntimeException() throws Exception { lifeCycle.bindGroovy("a", "public class a {\n" + "@Command\n" + "public void main() throws java.util.EmptyStackException {\n" + "throw new java.util.EmptyStackException()" + "}\n" + "}\n"); assertEvalError("a", EmptyStackException.class); } public void testThrowError() throws Exception { lifeCycle.bindGroovy("a", "public class a {\n" + "@Command\n" + "public void main() throws java.awt.AWTError {\n" + "throw new java.awt.AWTError()" + "}\n" + "}\n"); assertInternalError("a", AWTError.class); } public void testUndeclaredThrowScript() throws Exception { lifeCycle.bindGroovy("a", "public class a {\n" + "@Command\n" + "public void main() {\n" + "throw new org.crsh.command.ScriptException()" + "}\n" + "}\n"); assertEvalError("a", ScriptException.class); } public void testUndeclaredThrowGroovyScript() throws Exception { lifeCycle.bindGroovy("a", "public class a {\n" + "@Command\n" + "public void main() {\n" + "throw new groovy.util.ScriptException()" + "}\n" + "}\n"); assertEvalError("a", groovy.util.ScriptException.class); } public void testUndeclaredThrowCheckedException() throws Exception { lifeCycle.bindGroovy("a", "public class a {\n" + "@Command\n" + "public void main() {\n" + "throw new javax.management.JMException()" + "}\n" + "}\n"); assertEvalError("a", JMException.class); } public void testUndeclaredThrowRuntimeException() throws Exception { lifeCycle.bindGroovy("a", "public class a {\n" + "@Command\n" + "public void main() {\n" + "throw new java.util.EmptyStackException()" + "}\n" + "}\n"); assertEvalError("a", EmptyStackException.class); } public void testUndeclaredThrowError() throws Exception { lifeCycle.bindGroovy("a", "public class a {\n" + "@Command\n" + "public void main() {\n" + "throw new java.awt.AWTError()" + "}\n" + "}\n"); assertInternalError("a", AWTError.class); } public void testScriptThrowScript() throws Exception { lifeCycle.bindGroovy("a", "throw new org.crsh.command.ScriptException()"); assertEvalError("a", ScriptException.class); } public void testScriptThrowGroovyScript() throws Exception { lifeCycle.bindGroovy("a", "throw new groovy.util.ScriptException()"); assertEvalError("a", ScriptException.class); } public void testScriptThrowCheckedException() throws Exception { lifeCycle.bindGroovy("a", "throw new javax.management.JMException()"); assertEvalError("a", JMException.class); } public void testScriptThrowRuntimeException() throws Exception { lifeCycle.bindGroovy("a", "throw new java.util.EmptyStackException()"); assertEvalError("a", EmptyStackException.class); } public void testScriptThrowError() throws Exception { lifeCycle.bindGroovy("a", "throw new java.awt.AWTError()"); assertInternalError("a", AWTError.class); } }