1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski package lib;
25*b1cdbd2cSJim Jagielski 
26*b1cdbd2cSJim Jagielski import java.util.Hashtable;
27*b1cdbd2cSJim Jagielski import util.PropertyName;
28*b1cdbd2cSJim Jagielski import com.sun.star.beans.XPropertySet;
29*b1cdbd2cSJim Jagielski import com.sun.star.uno.XComponentContext;
30*b1cdbd2cSJim Jagielski 
31*b1cdbd2cSJim Jagielski //import com.sun.star.lang.XMultiServiceFactory;
32*b1cdbd2cSJim Jagielski 
33*b1cdbd2cSJim Jagielski /**
34*b1cdbd2cSJim Jagielski  * TestParameters describes a parameters (in a form of pairs: name, value) to
35*b1cdbd2cSJim Jagielski  * be passed to tests and which may affect the test behaviour. That can be,
36*b1cdbd2cSJim Jagielski  * for example, standard paths, connection strings, etc. The TestParameters
37*b1cdbd2cSJim Jagielski  * also provides XMultiServiceFactory for the test (tests).
38*b1cdbd2cSJim Jagielski  */
39*b1cdbd2cSJim Jagielski public class TestParameters extends Hashtable {
40*b1cdbd2cSJim Jagielski 
41*b1cdbd2cSJim Jagielski     /**
42*b1cdbd2cSJim Jagielski      * The ConnectionString for Office Connection<br>
43*b1cdbd2cSJim Jagielski      * default is 'socket,host=localhost,port=8100'
44*b1cdbd2cSJim Jagielski      */
45*b1cdbd2cSJim Jagielski 
46*b1cdbd2cSJim Jagielski     public String ConnectionString="socket,host=localhost,port=8100";
47*b1cdbd2cSJim Jagielski 
48*b1cdbd2cSJim Jagielski     /**
49*b1cdbd2cSJim Jagielski      * The AppProvider contains the Application Provider<br>
50*b1cdbd2cSJim Jagielski      * to control the ServiceFactory.
51*b1cdbd2cSJim Jagielski      */
52*b1cdbd2cSJim Jagielski 
53*b1cdbd2cSJim Jagielski     public Object AppProvider=null;
54*b1cdbd2cSJim Jagielski 
55*b1cdbd2cSJim Jagielski     /**
56*b1cdbd2cSJim Jagielski      * The Process contains the Process handler<br>
57*b1cdbd2cSJim Jagielski      * to control the Application.
58*b1cdbd2cSJim Jagielski      */
59*b1cdbd2cSJim Jagielski 
60*b1cdbd2cSJim Jagielski     public Object ProcessHandler=null;
61*b1cdbd2cSJim Jagielski 
62*b1cdbd2cSJim Jagielski     /**
63*b1cdbd2cSJim Jagielski      * The AppExecutionCmd contains the full qualified<br>
64*b1cdbd2cSJim Jagielski      * command to an Application to be started.
65*b1cdbd2cSJim Jagielski      */
66*b1cdbd2cSJim Jagielski 
67*b1cdbd2cSJim Jagielski     public String AppExecutionCommand="";
68*b1cdbd2cSJim Jagielski 
69*b1cdbd2cSJim Jagielski     /**
70*b1cdbd2cSJim Jagielski      * If this parameter is <CODE>true</CODE> the <CODE>OfficeProvider</CODE> tries
71*b1cdbd2cSJim Jagielski      * to get the URL to the binary of the office and to fill the
72*b1cdbd2cSJim Jagielski      * <CODE>AppExecutionCommand</CODE> with usefull content if needet
73*b1cdbd2cSJim Jagielski      */
74*b1cdbd2cSJim Jagielski     public boolean AutoRestart = false;
75*b1cdbd2cSJim Jagielski 
76*b1cdbd2cSJim Jagielski     /**
77*b1cdbd2cSJim Jagielski      * Shoert wait time for the Office: default is 500 milliseconds
78*b1cdbd2cSJim Jagielski      */
79*b1cdbd2cSJim Jagielski     public int ShortWait = 500;
80*b1cdbd2cSJim Jagielski 
81*b1cdbd2cSJim Jagielski 
82*b1cdbd2cSJim Jagielski     /**
83*b1cdbd2cSJim Jagielski      * The OfficeProvider contains the full qualified
84*b1cdbd2cSJim Jagielski      * class that provides a connection to StarOffice<br>
85*b1cdbd2cSJim Jagielski      * default is helper.OfficeProvider
86*b1cdbd2cSJim Jagielski      */
87*b1cdbd2cSJim Jagielski 
88*b1cdbd2cSJim Jagielski     public String OfficeProvider = "helper.OfficeProvider";
89*b1cdbd2cSJim Jagielski 
90*b1cdbd2cSJim Jagielski     /**
91*b1cdbd2cSJim Jagielski      * The Testbase to be executed by the runner<br>
92*b1cdbd2cSJim Jagielski      * default is 'java_fat'
93*b1cdbd2cSJim Jagielski      */
94*b1cdbd2cSJim Jagielski 
95*b1cdbd2cSJim Jagielski     public String TestBase="java_fat";
96*b1cdbd2cSJim Jagielski 
97*b1cdbd2cSJim Jagielski     /**
98*b1cdbd2cSJim Jagielski      * The ServiceFactory to create instances
99*b1cdbd2cSJim Jagielski      */
100*b1cdbd2cSJim Jagielski 
101*b1cdbd2cSJim Jagielski     public Object ServiceFactory;
102*b1cdbd2cSJim Jagielski 
103*b1cdbd2cSJim Jagielski     /**
104*b1cdbd2cSJim Jagielski      * The Path to the component description
105*b1cdbd2cSJim Jagielski      */
106*b1cdbd2cSJim Jagielski 
107*b1cdbd2cSJim Jagielski     public String DescriptionPath;
108*b1cdbd2cSJim Jagielski 
109*b1cdbd2cSJim Jagielski     /**
110*b1cdbd2cSJim Jagielski      * The Path to the test documents that are loaded during the test <br>
111*b1cdbd2cSJim Jagielski      */
112*b1cdbd2cSJim Jagielski 
113*b1cdbd2cSJim Jagielski     public String TestDocumentPath="unknown";
114*b1cdbd2cSJim Jagielski 
115*b1cdbd2cSJim Jagielski     /**
116*b1cdbd2cSJim Jagielski      * 'true' is a log should be written, 'false' elsewhere <br>
117*b1cdbd2cSJim Jagielski      * these will be provided by the testcases<br>
118*b1cdbd2cSJim Jagielski      * default is true
119*b1cdbd2cSJim Jagielski      */
120*b1cdbd2cSJim Jagielski 
121*b1cdbd2cSJim Jagielski     public boolean LoggingIsActive=true;
122*b1cdbd2cSJim Jagielski 
123*b1cdbd2cSJim Jagielski     /**
124*b1cdbd2cSJim Jagielski      * 'true' is a debug information should be written, 'false' elsewhere
125*b1cdbd2cSJim Jagielski      * these will be provided by the framework.<br>
126*b1cdbd2cSJim Jagielski      * Debug information will always be written on standard out.<br>
127*b1cdbd2cSJim Jagielski      * default is true
128*b1cdbd2cSJim Jagielski      */
129*b1cdbd2cSJim Jagielski 
130*b1cdbd2cSJim Jagielski     public boolean DebugIsActive=false;
131*b1cdbd2cSJim Jagielski 
132*b1cdbd2cSJim Jagielski     /*
133*b1cdbd2cSJim Jagielski      * This parameter contains the testjob to be executed<br>
134*b1cdbd2cSJim Jagielski      * by the framework
135*b1cdbd2cSJim Jagielski      */
136*b1cdbd2cSJim Jagielski 
137*b1cdbd2cSJim Jagielski     public Object TestJob;
138*b1cdbd2cSJim Jagielski 
139*b1cdbd2cSJim Jagielski     /*
140*b1cdbd2cSJim Jagielski      * This parameter contains the class used<br>
141*b1cdbd2cSJim Jagielski      * for Logging
142*b1cdbd2cSJim Jagielski      */
143*b1cdbd2cSJim Jagielski 
144*b1cdbd2cSJim Jagielski     public String LogWriter="stats.SimpleLogWriter";
145*b1cdbd2cSJim Jagielski 
146*b1cdbd2cSJim Jagielski     /*
147*b1cdbd2cSJim Jagielski      * This parameter contains the class used<br>
148*b1cdbd2cSJim Jagielski      * for Logging
149*b1cdbd2cSJim Jagielski      */
150*b1cdbd2cSJim Jagielski 
151*b1cdbd2cSJim Jagielski     public String OutProducer="stats.SimpleOutProducer";
152*b1cdbd2cSJim Jagielski 
153*b1cdbd2cSJim Jagielski     /*
154*b1cdbd2cSJim Jagielski      * This parameter contains the timeout used<br>
155*b1cdbd2cSJim Jagielski      * by the watcher
156*b1cdbd2cSJim Jagielski      */
157*b1cdbd2cSJim Jagielski     public Integer TimeOut = new Integer(3000000);
158*b1cdbd2cSJim Jagielski 
159*b1cdbd2cSJim Jagielski     /*
160*b1cdbd2cSJim Jagielski      * This parameter contains the timeout used<br>
161*b1cdbd2cSJim Jagielski      * by the complex tests
162*b1cdbd2cSJim Jagielski      */
163*b1cdbd2cSJim Jagielski     public Integer ThreadTimeOut = new Integer(3000000);
164*b1cdbd2cSJim Jagielski 
165*b1cdbd2cSJim Jagielski     /*
166*b1cdbd2cSJim Jagielski      * This parameter contains the time which the office could use to close for
167*b1cdbd2cSJim Jagielski      * itself before its destroyed. Default is 15000 ms
168*b1cdbd2cSJim Jagielski      */
169*b1cdbd2cSJim Jagielski     public Integer OfficeCloseTimeOut = new Integer(15000);
170*b1cdbd2cSJim Jagielski 
171*b1cdbd2cSJim Jagielski     /**
172*b1cdbd2cSJim Jagielski      * Wraper around "get()" with some debug output
173*b1cdbd2cSJim Jagielski      * @param key A key of this table.
174*b1cdbd2cSJim Jagielski      * @return The value of this key.
175*b1cdbd2cSJim Jagielski      * @see java.util.Hashtable
176*b1cdbd2cSJim Jagielski      */
get(Object key)177*b1cdbd2cSJim Jagielski     public Object get(Object key) {
178*b1cdbd2cSJim Jagielski         Object val = super.get(key);
179*b1cdbd2cSJim Jagielski         if (val == null && DebugIsActive) {
180*b1cdbd2cSJim Jagielski             System.out.print("Have been asked for key \""+key.toString());
181*b1cdbd2cSJim Jagielski             System.out.println("\" which is not part of params.");
182*b1cdbd2cSJim Jagielski         }
183*b1cdbd2cSJim Jagielski         return val;
184*b1cdbd2cSJim Jagielski     }
185*b1cdbd2cSJim Jagielski 
186*b1cdbd2cSJim Jagielski     /**
187*b1cdbd2cSJim Jagielski      * Special get method for boolean values: for convenience.
188*b1cdbd2cSJim Jagielski      * Will return 'false' if the value is not of "Boolean" type.
189*b1cdbd2cSJim Jagielski      * @param key A key of this table.
190*b1cdbd2cSJim Jagielski      * @return The value of this key, castet to a boolean type.
191*b1cdbd2cSJim Jagielski      */
getBool(Object key)192*b1cdbd2cSJim Jagielski     public boolean getBool(Object key) {
193*b1cdbd2cSJim Jagielski         Object val = super.get(key);
194*b1cdbd2cSJim Jagielski         if (val != null) {
195*b1cdbd2cSJim Jagielski             if (val instanceof String) {
196*b1cdbd2cSJim Jagielski                 String sVal = (String)val;
197*b1cdbd2cSJim Jagielski                 if (sVal.equalsIgnoreCase("true") ||
198*b1cdbd2cSJim Jagielski                                                 sVal.equalsIgnoreCase("yes")) {
199*b1cdbd2cSJim Jagielski                     return true;
200*b1cdbd2cSJim Jagielski                 }
201*b1cdbd2cSJim Jagielski                 else if (sVal.equalsIgnoreCase("false") ||
202*b1cdbd2cSJim Jagielski                                                 sVal.equalsIgnoreCase("no")) {
203*b1cdbd2cSJim Jagielski                     return false;
204*b1cdbd2cSJim Jagielski                 }
205*b1cdbd2cSJim Jagielski             }
206*b1cdbd2cSJim Jagielski             if (val instanceof Boolean)
207*b1cdbd2cSJim Jagielski                 return ((Boolean)val).booleanValue();
208*b1cdbd2cSJim Jagielski         }
209*b1cdbd2cSJim Jagielski         return false;
210*b1cdbd2cSJim Jagielski     }
211*b1cdbd2cSJim Jagielski 
212*b1cdbd2cSJim Jagielski     /**
213*b1cdbd2cSJim Jagielski      * Special get method for integer values: for convenience.
214*b1cdbd2cSJim Jagielski      * Will return 0 if the value cannot be interpreted as Integer.
215*b1cdbd2cSJim Jagielski      * @param key A key of this table.
216*b1cdbd2cSJim Jagielski      * @return The value of this key, castet to an int type.
217*b1cdbd2cSJim Jagielski      */
getInt(Object key)218*b1cdbd2cSJim Jagielski     public int getInt(Object key) {
219*b1cdbd2cSJim Jagielski         Object val = super.get(key);
220*b1cdbd2cSJim Jagielski         if ( val != null ) {
221*b1cdbd2cSJim Jagielski             if (val instanceof Integer) {
222*b1cdbd2cSJim Jagielski                 return ((Integer)val).intValue();
223*b1cdbd2cSJim Jagielski             }
224*b1cdbd2cSJim Jagielski             else {
225*b1cdbd2cSJim Jagielski                 try {
226*b1cdbd2cSJim Jagielski                     if ( val instanceof String ) {
227*b1cdbd2cSJim Jagielski                         Integer nr = new Integer((String)val);
228*b1cdbd2cSJim Jagielski                         if (nr.intValue() > 0) return nr.intValue();
229*b1cdbd2cSJim Jagielski                     }
230*b1cdbd2cSJim Jagielski                 } catch ( java.lang.NumberFormatException nfe) {}
231*b1cdbd2cSJim Jagielski             }
232*b1cdbd2cSJim Jagielski         }
233*b1cdbd2cSJim Jagielski         return 0;
234*b1cdbd2cSJim Jagielski     }
235*b1cdbd2cSJim Jagielski 
236*b1cdbd2cSJim Jagielski 
237*b1cdbd2cSJim Jagielski     /**
238*b1cdbd2cSJim Jagielski      * Wraper around "put()"
239*b1cdbd2cSJim Jagielski      * @param key A key of this table.
240*b1cdbd2cSJim Jagielski      * @param val The value of the key.
241*b1cdbd2cSJim Jagielski      * @return The value of this key.
242*b1cdbd2cSJim Jagielski      * @see java.util.Hashtable
243*b1cdbd2cSJim Jagielski      */
put(Object key, Object val)244*b1cdbd2cSJim Jagielski     public Object put(Object key, Object val) {
245*b1cdbd2cSJim Jagielski         return super.put(key,val);
246*b1cdbd2cSJim Jagielski     }
247*b1cdbd2cSJim Jagielski 
248*b1cdbd2cSJim Jagielski     /**
249*b1cdbd2cSJim Jagielski      * Constructor, defaults for Parameters are set.
250*b1cdbd2cSJim Jagielski      */
TestParameters()251*b1cdbd2cSJim Jagielski     public TestParameters() {
252*b1cdbd2cSJim Jagielski         //fill the propertyset
253*b1cdbd2cSJim Jagielski         String user = System.getProperty("user.name");
254*b1cdbd2cSJim Jagielski         if ( user != null)
255*b1cdbd2cSJim Jagielski         {
256*b1cdbd2cSJim Jagielski             String PipeConnectionString = "pipe,name=" + user;
257*b1cdbd2cSJim Jagielski             put(PropertyName.PIPE_CONNECTION_STRING,PipeConnectionString);
258*b1cdbd2cSJim Jagielski             put(PropertyName.USE_PIPE_CONNECTION, Boolean.TRUE);
259*b1cdbd2cSJim Jagielski         }
260*b1cdbd2cSJim Jagielski         put(PropertyName.CONNECTION_STRING,ConnectionString);
261*b1cdbd2cSJim Jagielski         put(PropertyName.TEST_BASE,TestBase);
262*b1cdbd2cSJim Jagielski         put(PropertyName.TEST_DOCUMENT_PATH,TestDocumentPath);
263*b1cdbd2cSJim Jagielski         put(PropertyName.LOGGING_IS_ACTIVE,LoggingIsActive?Boolean.TRUE:Boolean.FALSE);
264*b1cdbd2cSJim Jagielski         put(PropertyName.DEBUG_IS_ACTIVE,DebugIsActive?Boolean.TRUE:Boolean.FALSE);
265*b1cdbd2cSJim Jagielski         put(PropertyName.OUT_PRODUCER,OutProducer);
266*b1cdbd2cSJim Jagielski         put(PropertyName.SHORT_WAIT,new Integer(ShortWait));
267*b1cdbd2cSJim Jagielski         put(PropertyName.OFFICE_PROVIDER,OfficeProvider);
268*b1cdbd2cSJim Jagielski         put(PropertyName.LOG_WRITER,LogWriter);
269*b1cdbd2cSJim Jagielski         put(PropertyName.APP_EXECUTION_COMMAND,AppExecutionCommand);
270*b1cdbd2cSJim Jagielski         put(PropertyName.TIME_OUT,TimeOut);
271*b1cdbd2cSJim Jagielski         put(PropertyName.THREAD_TIME_OUT,ThreadTimeOut);
272*b1cdbd2cSJim Jagielski         put(PropertyName.AUTO_RESTART,AutoRestart?Boolean.TRUE:Boolean.FALSE);
273*b1cdbd2cSJim Jagielski         put(PropertyName.OFFICE_CLOSE_TIME_OUT, OfficeCloseTimeOut);
274*b1cdbd2cSJim Jagielski 
275*b1cdbd2cSJim Jagielski         // get the operating system
276*b1cdbd2cSJim Jagielski         put(PropertyName.OPERATING_SYSTEM, getSOCompatibleOSName());
277*b1cdbd2cSJim Jagielski 
278*b1cdbd2cSJim Jagielski         //For compatibility Reasons
279*b1cdbd2cSJim Jagielski         put("CNCSTR",ConnectionString);
280*b1cdbd2cSJim Jagielski         put("DOCPTH",TestDocumentPath);
281*b1cdbd2cSJim Jagielski         System.setProperty("DOCPTH",TestDocumentPath);
282*b1cdbd2cSJim Jagielski     }
283*b1cdbd2cSJim Jagielski 
284*b1cdbd2cSJim Jagielski     /**
285*b1cdbd2cSJim Jagielski      * @return a XMultiServiceFactory to be used by a test (tests).
286*b1cdbd2cSJim Jagielski      */
getMSF()287*b1cdbd2cSJim Jagielski     public Object getMSF() {
288*b1cdbd2cSJim Jagielski         Object ret = null;
289*b1cdbd2cSJim Jagielski         ret = get("ServiceFactory");
290*b1cdbd2cSJim Jagielski         return ret;
291*b1cdbd2cSJim Jagielski     }
292*b1cdbd2cSJim Jagielski 
getComponentContext()293*b1cdbd2cSJim Jagielski     public XComponentContext getComponentContext() {
294*b1cdbd2cSJim Jagielski         Object context = get( "ComponentContext" );
295*b1cdbd2cSJim Jagielski         if ( context == null )
296*b1cdbd2cSJim Jagielski         {
297*b1cdbd2cSJim Jagielski             XPropertySet factoryProps = (XPropertySet)com.sun.star.uno.UnoRuntime.queryInterface(
298*b1cdbd2cSJim Jagielski                 XPropertySet.class, getMSF() );
299*b1cdbd2cSJim Jagielski             try
300*b1cdbd2cSJim Jagielski             {
301*b1cdbd2cSJim Jagielski                 context = com.sun.star.uno.UnoRuntime.queryInterface(
302*b1cdbd2cSJim Jagielski                     XComponentContext.class, factoryProps.getPropertyValue( "DefaultContext" ) );
303*b1cdbd2cSJim Jagielski                 put( "ComponentContext", context );
304*b1cdbd2cSJim Jagielski             }
305*b1cdbd2cSJim Jagielski             catch( com.sun.star.beans.UnknownPropertyException e ) { }
306*b1cdbd2cSJim Jagielski             catch( com.sun.star.lang.WrappedTargetException e ) { }
307*b1cdbd2cSJim Jagielski         }
308*b1cdbd2cSJim Jagielski         return (XComponentContext)context;
309*b1cdbd2cSJim Jagielski     }
310*b1cdbd2cSJim Jagielski 
311*b1cdbd2cSJim Jagielski     /**
312*b1cdbd2cSJim Jagielski      * Convert the system dependent operating system name to a name according
313*b1cdbd2cSJim Jagielski      * to OOo rules.
314*b1cdbd2cSJim Jagielski      * @return A valid OS name, or "" if the name is not known.
315*b1cdbd2cSJim Jagielski      */
getSOCompatibleOSName()316*b1cdbd2cSJim Jagielski     String getSOCompatibleOSName() {
317*b1cdbd2cSJim Jagielski         String osname = System.getProperty ("os.name").toLowerCase ();
318*b1cdbd2cSJim Jagielski         String osarch = System.getProperty ("os.arch");
319*b1cdbd2cSJim Jagielski         String operatingSystem = "";
320*b1cdbd2cSJim Jagielski         if (osname.indexOf ("windows")>-1) {
321*b1cdbd2cSJim Jagielski             operatingSystem = PropertyName.WNTMSCI;
322*b1cdbd2cSJim Jagielski         } else if (osname.indexOf ("linux")>-1) {
323*b1cdbd2cSJim Jagielski             operatingSystem = PropertyName.UNXLNGI;
324*b1cdbd2cSJim Jagielski         } else if (osname.indexOf ("sunos")>-1) {
325*b1cdbd2cSJim Jagielski             if (osarch.equals ("x86")) {
326*b1cdbd2cSJim Jagielski                 operatingSystem = PropertyName.UNXSOLI;
327*b1cdbd2cSJim Jagielski             } else {
328*b1cdbd2cSJim Jagielski                 operatingSystem = PropertyName.UNXSOLS;
329*b1cdbd2cSJim Jagielski             }
330*b1cdbd2cSJim Jagielski         } else if (osname.indexOf ("mac")>-1) {
331*b1cdbd2cSJim Jagielski             operatingSystem = PropertyName.UNXMACXI;
332*b1cdbd2cSJim Jagielski         } else {
333*b1cdbd2cSJim Jagielski             System.out.println("ERROR: not supported platform: " + osname);
334*b1cdbd2cSJim Jagielski             System.exit(1);
335*b1cdbd2cSJim Jagielski         }
336*b1cdbd2cSJim Jagielski         return operatingSystem;
337*b1cdbd2cSJim Jagielski     }
338*b1cdbd2cSJim Jagielski 
339*b1cdbd2cSJim Jagielski }// finish class TestParamenters
340