1
2
3
4
5
6
7
8
9
10
11
12
13 package com.eviware.soapui.support.scripting.groovy;
14
15 import com.eviware.soapui.SoapUI;
16 import com.eviware.soapui.model.ModelItem;
17 import com.eviware.soapui.model.propertyexpansion.PropertyExpansion;
18 import com.eviware.soapui.support.scripting.SoapUIScriptEngine;
19 import com.eviware.soapui.support.scripting.SoapUIScriptEngineFactory;
20 import com.eviware.soapui.support.scripting.SoapUIScriptGenerator;
21 import com.eviware.soapui.support.types.StringToStringMap;
22 import com.eviware.soapui.support.xml.XPathData;
23
24 /***
25 * Factory for creating Groovy ScriptEngines
26 *
27 * @author ole.matzura
28 */
29
30 public class GroovyScriptEngineFactory implements SoapUIScriptEngineFactory, SoapUIScriptGenerator
31 {
32 public static final String ID = "Groovy";
33
34 public SoapUIScriptEngine createScriptEngine( ModelItem modelItem )
35 {
36 return new SoapUIGroovyScriptEngine( SoapUI.getSoapUICore().getExtensionClassLoader() );
37 }
38
39 public SoapUIScriptGenerator createCodeGenerator( ModelItem modelItem )
40 {
41 return this;
42 }
43
44 public String createContextExpansion( String name, PropertyExpansion expansion )
45 {
46 String exp = expansion.toString();
47 StringBuffer buf = new StringBuffer();
48
49 for( int c = 0; c < exp.length(); c++ )
50 {
51 char ch = exp.charAt( c );
52
53 switch( ch )
54 {
55 case '\'' :
56 case '//' :
57 buf.append( '//' );
58 default :
59 buf.append( ch );
60 }
61 }
62
63 return "def " + name + " = context.expand( '" + buf.toString() + "' )\n";
64 }
65
66 public String createScriptAssertionForExists( XPathData xpathData )
67 {
68 String script = "import com.eviware.soapui.support.XmlHolder\n\n"
69 + "def holder = new XmlHolder( messageExchange.responseContentAsXml )\n";
70
71 StringToStringMap nsMap = xpathData.getNamespaceMap();
72 for( String ns : nsMap.keySet() )
73 {
74 script += "holder.namespaces[\"" + nsMap.get( ns ) + "\"] = \"" + ns + "\"\n";
75 }
76
77 script += "def node = holder.getDomNode( \"" + xpathData.getPath() + "\" )\n";
78 script += "\nassert node != null\n";
79
80 return script;
81 }
82 }