svn commit: r697576 - in /activemq/camel/trunk/components/camel-script: ./ src/main/java/org/apache/camel/builder/script/ src/test/java/org/apache/camel/builder/script/ src/test/java/org/apache/camel/language/script/

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

svn commit: r697576 - in /activemq/camel/trunk/components/camel-script: ./ src/main/java/org/apache/camel/builder/script/ src/test/java/org/apache/camel/builder/script/ src/test/java/org/apache/camel/language/script/

davsclaus-2
Author: davsclaus
Date: Sun Sep 21 11:30:03 2008
New Revision: 697576

URL: http://svn.apache.org/viewvc?rev=697576&view=rev
Log:
CAMEL-926: beanShell added to script builder and fixed groovy unit test

Modified:
    activemq/camel/trunk/components/camel-script/pom.xml
    activemq/camel/trunk/components/camel-script/src/main/java/org/apache/camel/builder/script/ScriptBuilder.java
    activemq/camel/trunk/components/camel-script/src/test/java/org/apache/camel/builder/script/GroovyScriptRouteTest.java
    activemq/camel/trunk/components/camel-script/src/test/java/org/apache/camel/builder/script/JavaScriptExpressionTest.java
    activemq/camel/trunk/components/camel-script/src/test/java/org/apache/camel/builder/script/Jsr223Test.java
    activemq/camel/trunk/components/camel-script/src/test/java/org/apache/camel/builder/script/PythonExpressionTest.java
    activemq/camel/trunk/components/camel-script/src/test/java/org/apache/camel/builder/script/RubyExpressionTest.java
    activemq/camel/trunk/components/camel-script/src/test/java/org/apache/camel/language/script/JavaScriptLanguageTest.java
    activemq/camel/trunk/components/camel-script/src/test/java/org/apache/camel/language/script/PythonLanguageTest.java

Modified: activemq/camel/trunk/components/camel-script/pom.xml
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-script/pom.xml?rev=697576&r1=697575&r2=697576&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-script/pom.xml (original)
+++ activemq/camel/trunk/components/camel-script/pom.xml Sun Sep 21 11:30:03 2008
@@ -20,154 +20,173 @@
 <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0">
 
-  <modelVersion>4.0.0</modelVersion>
+    <modelVersion>4.0.0</modelVersion>
 
-  <parent>
-    <groupId>org.apache.camel</groupId>
-    <artifactId>camel-parent</artifactId>
-    <version>1.5-SNAPSHOT</version>
-  </parent>
-
-  <artifactId>camel-script</artifactId>
-  <packaging>bundle</packaging>
-  <name>Camel :: Script</name>
-  <description>Camel Script support</description>
-
-  <properties>
- <camel.osgi.export.pkg>org.apache.camel.builder.script.*</camel.osgi.export.pkg>
-  </properties>
-
-  <repositories>
-    <!-- SMX Repository is more up to date than LogicBlaze repo -->
-    <repository>
-      <id>servicemix.apache.svn</id>
-      <name>ServiceMix Repository</name>
-      <url>http://svn.apache.org/repos/asf/servicemix/m2-repo</url>
-    </repository>
-    <repository>
-      <id>codehause.mule-deps</id>
-      <name>Codehause Mule Dependencies Repository</name>
-      <url>http://dist.codehaus.org/mule/dependencies/maven2</url>
-    </repository>
-  </repositories>
-
-  <dependencies>
-
-    <dependency>
-      <groupId>org.apache.camel</groupId>
-      <artifactId>camel-core</artifactId>
-    </dependency>
-
-    <dependency>
-      <groupId>org.springframework</groupId>
-      <artifactId>spring-core</artifactId>
-  <version>${spring-version}</version>
-    </dependency>
-
-    <!-- ServiceMix Repo Script Engines -->
-    <dependency>
-      <groupId>com.sun.script</groupId>
-      <artifactId>groovy-engine</artifactId>
-      <version>20080611</version>
-      <scope>test</scope>
-    </dependency>
-
-    <dependency>
-      <groupId>com.sun.script</groupId>
-      <artifactId>js-engine</artifactId>
-      <version>20080611</version>
-      <scope>test</scope>
-    </dependency>
-
-    <dependency>
-      <groupId>com.sun.script</groupId>
-      <artifactId>jython-engine</artifactId>
-      <version>20080611</version>
-      <scope>test</scope>
-    </dependency>
-
-    <dependency>
-      <groupId>com.sun.script</groupId>
-      <artifactId>jruby-engine</artifactId>
-      <version>20080611</version>
-      <scope>test</scope>
-    </dependency>
-
-    <!-- testing -->
-    <dependency>
-      <groupId>org.apache.camel</groupId>
-      <artifactId>camel-core</artifactId>
-      <type>test-jar</type>
-      <optional>true</optional>
-      <scope>test</scope>
-    </dependency>
-
-    <dependency>
-      <groupId>org.apache.camel</groupId>
-      <artifactId>camel-spring</artifactId>
-      <scope>test</scope>
-      <optional>true</optional>
-    </dependency>
-
-    <dependency>
-      <groupId>rhino</groupId>
-      <artifactId>js</artifactId>
-      <version>1.6R7</version>
-      <scope>test</scope>
-    </dependency>
-
-    <dependency>
-      <groupId>org.python</groupId>
-      <artifactId>jython</artifactId>
-      <version>2.2.1</version>
-      <scope>test</scope>
-    </dependency>
-
-    <dependency>
-      <groupId>org.codehaus.groovy</groupId>
-      <artifactId>groovy-all</artifactId>
-      <scope>test</scope>
-    </dependency>
-
-    <dependency>
-          <groupId>javax.script</groupId>
-          <artifactId>script-api</artifactId>
-          <version>1.0</version>
-    </dependency>
-
-    <dependency>
-      <groupId>org.jruby</groupId>
-      <artifactId>jruby</artifactId>
-      <version>1.1.4</version>
-      <scope>test</scope>
-    </dependency>
-
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>log4j</groupId>
-      <artifactId>log4j</artifactId>
-      <scope>test</scope>
-    </dependency>
-
-  </dependencies>
-
-  <build>
-    <plugins>
-      <plugin>
-        <artifactId>maven-surefire-plugin</artifactId>
-        <configuration>
-          <forkMode>pertest</forkMode>
-          <childDelegation>false</childDelegation>
-          <useFile>true</useFile>
-          <includes>
-            <include>**/*Test.*</include>
-          </includes>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
+    <parent>
+        <groupId>org.apache.camel</groupId>
+        <artifactId>camel-parent</artifactId>
+        <version>1.5-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>camel-script</artifactId>
+    <packaging>bundle</packaging>
+    <name>Camel :: Script</name>
+    <description>Camel Script support</description>
+
+    <properties>
+        <camel.osgi.export.pkg>org.apache.camel.builder.script.*</camel.osgi.export.pkg>
+    </properties>
+
+    <repositories>
+        <!-- SMX Repository is more up to date than LogicBlaze repo -->
+        <repository>
+            <id>servicemix.apache.svn</id>
+            <name>ServiceMix Repository</name>
+            <url>http://svn.apache.org/repos/asf/servicemix/m2-repo</url>
+        </repository>
+        <repository>
+            <id>codehause.mule-deps</id>
+            <name>Codehause Mule Dependencies Repository</name>
+            <url>http://dist.codehaus.org/mule/dependencies/maven2</url>
+        </repository>
+    </repositories>
+
+    <dependencies>
+
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-core</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-core</artifactId>
+            <version>${spring-version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>javax.script</groupId>
+            <artifactId>script-api</artifactId>
+            <version>1.0</version>
+        </dependency>
+
+        <dependency>
+            <groupId>javax.xml.bind</groupId>
+            <artifactId>jaxb-api</artifactId>
+        </dependency>
+
+        <!-- ServiceMix Repo Script Engines -->
+        <dependency>
+            <groupId>com.sun.script</groupId>
+            <artifactId>groovy-engine</artifactId>
+            <version>20080611</version>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>com.sun.script</groupId>
+            <artifactId>js-engine</artifactId>
+            <version>20080611</version>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>com.sun.script</groupId>
+            <artifactId>jython-engine</artifactId>
+            <version>20080611</version>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>com.sun.script</groupId>
+            <artifactId>jruby-engine</artifactId>
+            <version>20080611</version>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>com.sun.script</groupId>
+            <artifactId>bsh-engine</artifactId>
+            <version>20080611</version>
+            <scope>test</scope>
+        </dependency>
+
+        <!-- testing -->
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-core</artifactId>
+            <type>test-jar</type>
+            <optional>true</optional>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-spring</artifactId>
+            <scope>test</scope>
+            <optional>true</optional>
+        </dependency>
+
+        <dependency>
+            <groupId>rhino</groupId>
+            <artifactId>js</artifactId>
+            <version>1.6R7</version>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.python</groupId>
+            <artifactId>jython</artifactId>
+            <version>2.2.1</version>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.codehaus.groovy</groupId>
+            <artifactId>groovy-all</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.jruby</groupId>
+            <artifactId>jruby</artifactId>
+            <version>1.1.4</version>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.beanshell</groupId>
+            <artifactId>bsh</artifactId>
+            <version>2.0b4</version>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>log4j</groupId>
+            <artifactId>log4j</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <forkMode>pertest</forkMode>
+                    <childDelegation>false</childDelegation>
+                    <useFile>true</useFile>
+                    <includes>
+                        <include>**/*Test.*</include>
+                    </includes>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
 </project>

Modified: activemq/camel/trunk/components/camel-script/src/main/java/org/apache/camel/builder/script/ScriptBuilder.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-script/src/main/java/org/apache/camel/builder/script/ScriptBuilder.java?rev=697576&r1=697575&r2=697576&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-script/src/main/java/org/apache/camel/builder/script/ScriptBuilder.java (original)
+++ activemq/camel/trunk/components/camel-script/src/main/java/org/apache/camel/builder/script/ScriptBuilder.java Sun Sep 21 11:30:03 2008
@@ -156,6 +156,49 @@
         return new ScriptBuilder(language, new UrlResource(scriptURL));
     }
 
+    // Beanshell
+    // -------------------------------------------------------------------------
+
+    /**
+     * Creates a script builder for the BeanShell script contents
+     *
+     * @param scriptText the script text to be evaluted
+     * @return the builder
+     */
+    public static ScriptBuilder beanShell(String scriptText) {
+        return new ScriptBuilder("beanshell", scriptText);
+    }
+
+    /**
+     * Creates a script builder for the BeanShell script {@link Resource}
+     *
+     * @param scriptResource the resource used to load the script
+     * @return the builder
+     */
+    public static ScriptBuilder beanShell(Resource scriptResource) {
+        return new ScriptBuilder("beanshell", scriptResource);
+    }
+
+    /**
+     * Creates a script builder for the BeanShell script {@link File}
+     *
+     * @param scriptFile the file used to load the script
+     * @return the builder
+     */
+    public static ScriptBuilder beanShell(File scriptFile) {
+        return new ScriptBuilder("beanshell", new FileSystemResource(scriptFile));
+    }
+
+    /**
+     * Creates a script builder for the BeanShell script {@link URL}
+     *
+     * @param scriptURL the URL used to load the script
+     * @return the builder
+     */
+    public static ScriptBuilder beanShell(URL scriptURL) {
+        return new ScriptBuilder("beanshell", new UrlResource(scriptURL));
+    }
+
     // Groovy
     // -------------------------------------------------------------------------
 

Modified: activemq/camel/trunk/components/camel-script/src/test/java/org/apache/camel/builder/script/GroovyScriptRouteTest.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-script/src/test/java/org/apache/camel/builder/script/GroovyScriptRouteTest.java?rev=697576&r1=697575&r2=697576&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-script/src/test/java/org/apache/camel/builder/script/GroovyScriptRouteTest.java (original)
+++ activemq/camel/trunk/components/camel-script/src/test/java/org/apache/camel/builder/script/GroovyScriptRouteTest.java Sun Sep 21 11:30:03 2008
@@ -18,7 +18,7 @@
 
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.builder.RouteBuilder;
-import static org.apache.camel.builder.script.ScriptBuilder.groovy;
+import org.apache.camel.component.mock.MockEndpoint;
 
 /**
  * Unit test for a Groovy script based on end-user question.
@@ -26,19 +26,19 @@
 public class GroovyScriptRouteTest extends ContextTestSupport {
 
     public void testGroovyScript() throws Exception {
-        //TODO: fix me
-        //MockEndpoint mock = getMockEndpoint("mock:result");
-        //mock.expectedHeaderReceived("foo", "Hello World");
+        MockEndpoint mock = getMockEndpoint("mock:result");
+        mock.expectedBodiesReceived("Hello World");
+        mock.expectedHeaderReceived("foo", "Hello World");
 
-        //template.sendBodyAndHeader("seda:a", "Hello World", "foo", "London");
+        template.sendBodyAndHeader("seda:a", "Hello World", "foo", "London");
 
-        //mock.assertIsSatisfied();
+        mock.assertIsSatisfied();
     }
 
     protected RouteBuilder createRouteBuilder() throws Exception {
         return new RouteBuilder() {
             public void configure() throws Exception {
-                from("seda:a").setHeader("foo", groovy("request.body")).to("mock:result");
+                from("seda:a").setHeader("foo").groovy("request.body").to("mock:result");
             }
         };
     }

Modified: activemq/camel/trunk/components/camel-script/src/test/java/org/apache/camel/builder/script/JavaScriptExpressionTest.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-script/src/test/java/org/apache/camel/builder/script/JavaScriptExpressionTest.java?rev=697576&r1=697575&r2=697576&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-script/src/test/java/org/apache/camel/builder/script/JavaScriptExpressionTest.java (original)
+++ activemq/camel/trunk/components/camel-script/src/test/java/org/apache/camel/builder/script/JavaScriptExpressionTest.java Sun Sep 21 11:30:03 2008
@@ -20,7 +20,6 @@
 import java.util.Map;
 
 import org.apache.camel.ContextTestSupport;
-import org.apache.camel.Endpoint;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 
@@ -28,8 +27,9 @@
  * Tests a routing expression using JavaScript
  */
 public class JavaScriptExpressionTest extends ContextTestSupport {
+    
     public void testSendMatchingMessage() throws Exception {
-        // Currently, this test fails because the JavaScript expression in createRouteBuilder
+        // TODO Currently, this test fails because the JavaScript expression in createRouteBuilder
         // below returns false
         // To fix that, we need to figure out how to get the expression to return the right value
         MockEndpoint mock = getMockEndpoint("mock:result");
@@ -42,7 +42,7 @@
         sendBody("direct:start", "hello", headers);
 
         assertEquals("Should get the message header here", mock.getExchanges().get(0).getIn().getHeader("foo"), "bar");
-        assertMockEndpointsSatisifed();
+        assertMockEndpointsSatisfied();
     }
 
     public void testSendNonMatchingMessage() throws Exception {
@@ -53,7 +53,7 @@
         headers.put("foo", "foo");
         sendBody("direct:start", "hello", headers);
 
-        assertMockEndpointsSatisifed();
+        assertMockEndpointsSatisfied();
     }
 
     protected RouteBuilder createRouteBuilder() throws Exception {

Modified: activemq/camel/trunk/components/camel-script/src/test/java/org/apache/camel/builder/script/Jsr223Test.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-script/src/test/java/org/apache/camel/builder/script/Jsr223Test.java?rev=697576&r1=697575&r2=697576&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-script/src/test/java/org/apache/camel/builder/script/Jsr223Test.java (original)
+++ activemq/camel/trunk/components/camel-script/src/test/java/org/apache/camel/builder/script/Jsr223Test.java Sun Sep 21 11:30:03 2008
@@ -17,7 +17,6 @@
 package org.apache.camel.builder.script;
 
 import javax.script.ScriptEngine;
-import javax.script.ScriptEngineFactory;
 import javax.script.ScriptEngineManager;
 
 import junit.framework.TestCase;
@@ -26,7 +25,8 @@
  * @version $Revision$
  */
 public class Jsr223Test extends TestCase {
-    private static String [] scriptNames = {"groovy", "js", "python", "ruby", "javascript"};
+    private static String [] scriptNames = {"beanshell", "groovy", "js", "python", "ruby", "javascript"};
+
     public void testLanguageNames() throws Exception {
         ScriptEngineManager manager = new ScriptEngineManager();
         for (String scriptName : scriptNames) {

Modified: activemq/camel/trunk/components/camel-script/src/test/java/org/apache/camel/builder/script/PythonExpressionTest.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-script/src/test/java/org/apache/camel/builder/script/PythonExpressionTest.java?rev=697576&r1=697575&r2=697576&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-script/src/test/java/org/apache/camel/builder/script/PythonExpressionTest.java (original)
+++ activemq/camel/trunk/components/camel-script/src/test/java/org/apache/camel/builder/script/PythonExpressionTest.java Sun Sep 21 11:30:03 2008
@@ -26,6 +26,7 @@
  * Tests a routing expression using Python
  */
 public class PythonExpressionTest extends ContextTestSupport {
+    
     public void testSendMatchingMessage() throws Exception {
         getMockEndpoint("mock:result").expectedMessageCount(1);
         getMockEndpoint("mock:unmatched").expectedMessageCount(0);
@@ -34,7 +35,7 @@
         headers.put("foo", "bar");
         sendBody("direct:start", "hello", headers);
 
-        assertMockEndpointsSatisifed();
+        assertMockEndpointsSatisfied();
     }
 
     public void testSendNonMatchingMessage() throws Exception {
@@ -45,7 +46,7 @@
         headers.put("foo", "foo");
         sendBody("direct:start", "hello", headers);
 
-        assertMockEndpointsSatisifed();
+        assertMockEndpointsSatisfied();
     }
 
     protected RouteBuilder createRouteBuilder() throws Exception {

Modified: activemq/camel/trunk/components/camel-script/src/test/java/org/apache/camel/builder/script/RubyExpressionTest.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-script/src/test/java/org/apache/camel/builder/script/RubyExpressionTest.java?rev=697576&r1=697575&r2=697576&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-script/src/test/java/org/apache/camel/builder/script/RubyExpressionTest.java (original)
+++ activemq/camel/trunk/components/camel-script/src/test/java/org/apache/camel/builder/script/RubyExpressionTest.java Sun Sep 21 11:30:03 2008
@@ -26,6 +26,7 @@
  * Tests a routing expression using Ruby
  */
 public class RubyExpressionTest extends ContextTestSupport {
+
     public void testSendMatchingMessage() throws Exception {
         getMockEndpoint("mock:result").expectedMessageCount(1);
         getMockEndpoint("mock:unmatched").expectedMessageCount(0);
@@ -34,7 +35,7 @@
         headers.put("foo", "bar");
         sendBody("direct:start", "hello", headers);
 
-        assertMockEndpointsSatisifed();
+        assertMockEndpointsSatisfied();
     }
 
     public void testSendNonMatchingMessage() throws Exception {
@@ -45,7 +46,7 @@
         headers.put("foo", "foo");
         sendBody("direct:start", "hello", headers);
 
-        assertMockEndpointsSatisifed();
+        assertMockEndpointsSatisfied();
     }
 
     protected RouteBuilder createRouteBuilder() throws Exception {

Modified: activemq/camel/trunk/components/camel-script/src/test/java/org/apache/camel/language/script/JavaScriptLanguageTest.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-script/src/test/java/org/apache/camel/language/script/JavaScriptLanguageTest.java?rev=697576&r1=697575&r2=697576&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-script/src/test/java/org/apache/camel/language/script/JavaScriptLanguageTest.java (original)
+++ activemq/camel/trunk/components/camel-script/src/test/java/org/apache/camel/language/script/JavaScriptLanguageTest.java Sun Sep 21 11:30:03 2008
@@ -22,11 +22,11 @@
  * @version $Revision$
  */
 public class JavaScriptLanguageTest extends LanguageTestSupport {
+    
     public void testLanguageExpressions() throws Exception {
         assertExpression("exchange.getIn()", "Message: <hello id='m123'>world!</hello>");
         assertExpression("exchange.getIn().body", "<hello id='m123'>world!</hello>");
         assertExpression("request.headers.get('foo')", "abc");
-
     }
 
     protected String getLanguageName() {

Modified: activemq/camel/trunk/components/camel-script/src/test/java/org/apache/camel/language/script/PythonLanguageTest.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-script/src/test/java/org/apache/camel/language/script/PythonLanguageTest.java?rev=697576&r1=697575&r2=697576&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-script/src/test/java/org/apache/camel/language/script/PythonLanguageTest.java (original)
+++ activemq/camel/trunk/components/camel-script/src/test/java/org/apache/camel/language/script/PythonLanguageTest.java Sun Sep 21 11:30:03 2008
@@ -22,6 +22,7 @@
  * @version $Revision$
  */
 public class PythonLanguageTest extends LanguageTestSupport {
+    
     public void testLanguageExpressions() throws Exception {
         assertExpression("exchange.in.headers", "{foo=abc, bar=123}");
         assertExpression("exchange.in", "Message: <hello id='m123'>world!</hello>");