1
2
3
4
5
6
7
8
9
10
11
12
13 package com.eviware.soapui.impl.wsdl.teststeps.assertions;
14
15 import org.apache.xmlbeans.XmlObject;
16
17 import com.eviware.soapui.config.RequestAssertionConfig;
18 import com.eviware.soapui.impl.wsdl.submit.WsdlMessageExchange;
19 import com.eviware.soapui.impl.wsdl.submit.filters.PropertyExpansionRequestFilter;
20 import com.eviware.soapui.impl.wsdl.support.HelpUrls;
21 import com.eviware.soapui.impl.wsdl.support.assertions.Assertable;
22 import com.eviware.soapui.impl.wsdl.teststeps.WsdlMessageAssertion;
23 import com.eviware.soapui.model.iface.SubmitContext;
24 import com.eviware.soapui.support.UISupport;
25 import com.eviware.soapui.support.types.StringToStringMap;
26 import com.eviware.soapui.support.xml.XmlObjectConfigurationBuilder;
27 import com.eviware.soapui.support.xml.XmlObjectConfigurationReader;
28 import com.eviware.x.form.XForm;
29 import com.eviware.x.form.XFormDialog;
30 import com.eviware.x.form.XFormDialogBuilder;
31 import com.eviware.x.form.XFormFactory;
32
33 /***
34 * Assertion that checks for the non-existence of a specified text token in the associated
35 * WsdlTestRequests response message
36 *
37 * @author Ole.Matzura
38 */
39
40 public class SimpleNotContainsAssertion extends WsdlMessageAssertion implements RequestAssertion, ResponseAssertion
41 {
42 private String token;
43 private boolean ignoreCase;
44 private XFormDialog dialog;
45 private boolean useRegEx;
46 public static final String ID = "Simple NotContains";
47 private static final String CONTENT = "Content";
48 private static final String IGNORE_CASE = "Ignore Case";
49 private static final String USE_REGEX = "Regular Expression";
50
51 public SimpleNotContainsAssertion(RequestAssertionConfig assertionConfig, Assertable assertable)
52 {
53 super(assertionConfig, assertable, true, true, true);
54
55 XmlObjectConfigurationReader reader = new XmlObjectConfigurationReader( getConfiguration() );
56 token = reader.readString( "token", null );
57 ignoreCase = reader.readBoolean( "ignoreCase", false );
58 useRegEx = reader.readBoolean( "useRegEx", false );
59 }
60
61 public String internalAssertResponse(WsdlMessageExchange messageExchange, SubmitContext context) throws AssertionException
62 {
63 return assertContent( context, messageExchange.getResponseContent(), "Response" );
64 }
65
66 private String assertContent( SubmitContext context, String content, String type ) throws AssertionException
67 {
68 if( token == null ) token = "";
69
70 String replToken = PropertyExpansionRequestFilter.expandProperties( context, token );
71
72 if( replToken.length() > 0 )
73 {
74 int ix = -1;
75
76 if( useRegEx )
77 {
78 if( content.matches( replToken ))
79 ix = 0;
80 }
81 else
82 {
83 ix = ignoreCase ?
84 content.toUpperCase().indexOf( replToken.toUpperCase() ) : content.indexOf( replToken );
85 }
86
87 if( ix != -1 )
88 throw new AssertionException( new AssertionError( type + " contains token [" + replToken + "]") );
89 }
90
91 return type + " does not contain token [" + replToken + "]";
92 }
93
94 public boolean configure()
95 {
96 if( dialog == null )
97 buildDialog();
98
99 StringToStringMap values = new StringToStringMap();
100 values.put( CONTENT, token );
101 values.put( IGNORE_CASE, ignoreCase );
102 values.put( USE_REGEX, useRegEx );
103
104 values = dialog.show( values );
105 if( dialog.getReturnValue() == XFormDialog.OK_OPTION )
106 {
107 token = values.get( CONTENT );
108 ignoreCase = values.getBoolean( IGNORE_CASE );
109 useRegEx = values.getBoolean( USE_REGEX );
110 }
111
112 setConfiguration( createConfiguration() );
113 return true;
114 }
115
116 protected XmlObject createConfiguration()
117 {
118 XmlObjectConfigurationBuilder builder = new XmlObjectConfigurationBuilder();
119 builder.add( "token", token );
120 builder.add( "ignoreCase", ignoreCase );
121 builder.add( "useRegEx", useRegEx );
122 return builder.finish();
123 }
124
125 private void buildDialog()
126 {
127 XFormDialogBuilder builder = XFormFactory.createDialogBuilder("NotContains Assertion");
128 XForm mainForm = builder.createForm( "Basic" );
129
130 mainForm.addTextField( CONTENT, "Content to check for", XForm.FieldType.TEXT ).setWidth( 20 );
131 mainForm.addCheckBox( IGNORE_CASE, "Ignore case in comparison" );
132 mainForm.addCheckBox( USE_REGEX, "Use token as Regular Expression" );
133
134 dialog = builder.buildDialog( builder.buildOkCancelHelpActions( HelpUrls.SIMPLE_NOT_CONTAINS_HELP_URL ),
135 "Specify options", UISupport.OPTIONS_ICON );
136 }
137
138 protected String internalAssertRequest( WsdlMessageExchange messageExchange, SubmitContext context ) throws AssertionException
139 {
140 return assertContent( context, messageExchange.getRequestContent(), "Request" );
141 }
142
143 public boolean isIgnoreCase()
144 {
145 return ignoreCase;
146 }
147
148 public void setIgnoreCase( boolean ignoreCase )
149 {
150 this.ignoreCase = ignoreCase;
151 setConfiguration( createConfiguration() );
152 }
153
154 public String getToken()
155 {
156 return token;
157 }
158
159 public void setToken( String token )
160 {
161 this.token = token;
162 setConfiguration( createConfiguration() );
163 }
164 }