1
2 '''
3 Created on 20-Dec-2012
4
5 @author: Raghav Kashyap(raghavkashyap@paxterrasolutions.com)
6 '''
7 import re
8 import inspect
9
10
12
14 self.default = ''
15 self.flag = 0
16 self.CurrentStep = 0
17 self.grtrOrLssr = 0
18
20 '''
21 This method will parse the openspeak file and will write to a python module with the equivalent translations.
22 It can accept OpenSpeak syntax in string or an OpenSpeak file as an input parameter.
23 Translated form can be written into python module if attribute "WRITETOFILE" is set to 1.
24 '''
25
26 args = self.parse_args(["OPENSPEAKFILE","TEXT","WRITETOFILE","FILEHANDLE"],**compileParameters)
27 resultString = ''
28 Test = "Mininet"
29 args["WRITETOFILE"] = args["WRITETOFILE"] if args["WRITETOFILE"] != None else 1
30 self.CurrentStep = 0
31 self.CurrentCase = ''
32
33
34 if args["OPENSPEAKFILE"] !=None and args["TEXT"] ==None and args["FILEHANDLE"] == None:
35 self.openspeakfile = args["OPENSPEAKFILE"]
36 openSpeakFile = open(args["OPENSPEAKFILE"],"r").readlines()
37
38 elif args["OPENSPEAKFILE"] ==None and args["TEXT"] and args["FILEHANDLE"] == None:
39 openSpeakFile = args["TEXT"].split("\n")
40 elif args["FILEHANDLE"] and args["OPENSPEAKFILE"] ==None and args["TEXT"] ==None:
41 openSpeakFile = args["FILEHANDLE"].readlines()
42
43 index = 0
44 outputFile = []
45 testName = re.search("\/(.*)\.ospk$",self.openspeakfile,0)
46 testName = testName.group(1)
47 testName = testName.split("/")
48 testName = testName[len(testName)-1]
49 outputFile.append("\nclass " + testName + " :" + "\n")
50 outputFile.append("\n" + " " * 4 + "def __init__(self) :")
51 outputFile.append("\n" + " " * 8 + "self.default = \'\'" + "\n")
52
53 while index < len(openSpeakFile):
54 ifelseMatch = re.match("\s+IF|\s+ELSE|\s+ELIF",openSpeakFile[index],flags=0)
55 line = openSpeakFile[index]
56 repeatMatch = re.match("\s*REPEAT", openSpeakFile[index], flags=0)
57 if ifelseMatch :
58 result = self.verify_and_translate(line)
59 initialSpaces = len(line) -len(line.lstrip())
60 self.outLoopSpace = initialSpaces
61 nextLine = openSpeakFile[index+1]
62 nextinitialSpaces = len(nextLine) -len(nextLine.lstrip())
63
64
65 while nextinitialSpaces > initialSpaces :
66 try :
67 elseMatch = re.match("\s*ELSE|\s*ELIF",nextLine,flags=0)
68 if elseMatch :
69 self.flag = self.flag -1
70 result = result + self.verify_and_translate(nextLine)
71 nextLine = openSpeakFile[index + 1]
72 nextinitialSpaces = len(nextLine) -len(nextLine.lstrip())
73 except IndexError:
74 pass
75 index = index + 1
76 self.flag = 0
77 elif repeatMatch:
78 self.flag = 0
79 result = self.verify_and_translate(line)
80 index = index + 1
81 endMatch = re.match("\s*END",openSpeakFile[index],flags=0)
82 while not endMatch :
83 try :
84
85 self.flag = self.flag + 1
86 result = result + self.verify_and_translate(openSpeakFile[index])
87 index = index + 1
88
89 except IndexError :
90 pass
91
92
93 else :
94 self.flag = 0
95 result = self.verify_and_translate(line)
96 index = index + 1
97 outputFile.append(result)
98
99 if args["WRITETOFILE"] == 1 :
100 testscript = re.sub("ospk","py",self.openspeakfile,0)
101 testScript = open(testscript,"w")
102 for lines in outputFile :
103 testScript.write(lines)
104 testScript.close()
105 return resultString
106
108 '''
109 It will accept the each line and calls the suitable API to conver into pyton equivalent syntax .
110 It will return the translated python syntax .
111 '''
112 lineSpace = re.match("^\s+",line,flags=0)
113 initialSpaces = len(line) -len(line.lstrip())
114 line = re.sub("^\s+","",line) if lineSpace else line
115
116
117 resultString = None
118 resultString = "\n" + " " * 4 if str(inspect.stack()[1][3]) == "compiler" else "\n"
119 indent = " " *(4 + 4 * self.flag) if self.flag > 0 else " " * 4
120 caseMatch = re.search("^CASE\s+(\d+)",line,flags=0)
121 nameMatch = re.match("^NAME\s+\"(.*)\"",line,flags=0)
122 commentMatch = re.match("^COMMENT\s+\"(.*)\"",line,flags=0)
123 stepMatch = re.match("^STEP\s+\"(.*)\"",line,flags=0)
124 connectMatch = re.match("^CONNECT\s+(\w+)\s+USING\s+(.*)",line,flags=0)
125 disconnectMatch = re.match("^DISCONNECT\s+(.*)",line,flags=0)
126 ondoMatch = re.match("^ON\s+(.*)\s+DO\s+(.*)",line,flags=0)
127
128 storeMatch = re.match("^STORE\s+(.*)\s+IN\s+(.*)",line,flags=0)
129 variableMatch = re.match("^(.*)\s+=\s+(.*)",line,flags=0)
130 assertMatch = re.match("^ASSERT\s+(\w+)\s+(.*)\s+(.*)\s+ONPASS\s+(.*)\s+ONFAIL\s+(.*)",line,flags=0)
131 logMatch = re.match("^(ERROR|INFO|DEBUG|CRITICAL|REPORT|EXACT|WARN)\s+(.*)",line,flags=0)
132 ifloop = re.match("IF\s+(\w+)\s*(..|\w+)\s*(.*)",line,flags=0)
133 elseloopMatch = re.match("ELSE\s*$",line,flags=0)
134 elifloop = re.match("ELSE\sIF\s+(\w+)\s*(..|\w+)\s*(.*)",line,flags=0)
135 forloopMatch = re.match("\s*REPEAT\s+(/d+)\s+TIMES",line,flags=0)
136 experimentalMatch = re.match("EXPERIMENTAL\s+MODE\s+(\w+)",line,flags=0)
137 repeatMatch = re.match("\s*REPEAT\s+(\d+)\s+TIMES", line, flags=0)
138
139
140 if caseMatch :
141 self.CurrentStep = 0
142 self.CurrentCase = "CASE" + caseMatch.group(1)
143 resultString = resultString + self.translate_case_block(casenumber=caseMatch.group(1))
144 elif repeatMatch:
145 resultString = resultString + indent + self.translate_repeat(repeat=repeatMatch.group(1))
146 elif nameMatch :
147 resultString = resultString + indent + self.translate_testcase_name(testname=nameMatch.group(1))
148 elif commentMatch :
149 resultString = resultString + indent + self.translate_comment(comment=commentMatch.group(1))
150 elif stepMatch :
151 self.CurrentStep = self.CurrentStep + 1
152 resultString = resultString + indent + self.translate_step(step=stepMatch.group(1))
153 elif connectMatch :
154 resultString = resultString + indent + self.translate_connect(component=connectMatch.group(1),
155 arguments=connectMatch.group(2) )
156 elif disconnectMatch :
157 resultString = resultString + indent + self.translate_disconnect(component=disconnectMatch.group(1))
158 elif ondoMatch :
159 resultString = resultString + indent + self.translate_onDOAs(component=ondoMatch.group(1),action=ondoMatch.group(2))
160 elif storeMatch :
161 resultString = resultString + indent + self.translate_store(variable=storeMatch.group(2),
162 value=storeMatch.group(1))
163 elif variableMatch :
164 resultString = resultString + indent + self.translate_store(variable=variableMatch.group(1),
165 value=variableMatch.group(2))
166 elif assertMatch :
167 resultString = resultString + indent + self.translate_assertion(leftvalue=assertMatch.group(1),
168 operator=assertMatch.group(2),
169 rightvalue=assertMatch.group(3),
170 onpass=assertMatch.group(4),
171 onfail=assertMatch.group(5))
172 elif logMatch :
173 resultString = resultString + indent + self.translate_logs(loglevel=logMatch.group(1),
174 message=logMatch.group(2))
175 elif ifloop :
176
177 self.initSpace = initialSpaces
178 operand = ifloop.group(1)
179 operator = ifloop.group(2)
180 value = ifloop.group(3)
181 resultString = resultString + indent + "if " + operand + self.translate_if_else_operator(conditionoperator=operator) + value + ":"
182 self.flag = self.flag + 1
183 elif experimentalMatch :
184 resultString = resultString + indent + self.translate_experimental_mode(mode=experimentalMatch.group(1))
185
186 elif elseloopMatch :
187 if initialSpaces == self.initSpace or initialSpaces == self.outLoopSpace:
188 resultString = resultString + indent + "else :"
189 self.flag = self.flag + 1
190 else :
191 indent = " " *(4 + 4 * (self.flag-1))
192 resultString = resultString + indent + "else :"
193 self.flag = self.flag + 1
194
195 elif elifloop :
196
197 operand = elifloop.group(1)
198 operator = elifloop.group(2)
199 value = elifloop.group(3)
200 if initialSpaces == self.initSpace or initialSpaces == self.outLoopSpace:
201 resultString = resultString + indent + "elif " + operand + self.translate_if_else_operator(conditionoperator=operator) + value + ":"
202 self.flag = self.flag + 1
203 else :
204 indent = " " *(4 + 4 * (self.flag-1))
205 resultString = resultString + indent + "elif " + operand + self.translate_if_else_operator(conditionoperator=operator) + value + ":"
206 self.flag = self.flag + 1
207
208
209
210 return resultString
211
213 '''
214 this will transalte the repeat statement into a python equivalen while loop
215 '''
216
217 args = self.parse_args(["REPEAT"],**repeatStatement)
218 resultString = ''
219
220 resultString = "i = 0"
221 resultString = resultString + "\n" + " " * 8 +"while i<" + args["REPEAT"] + " :"
222 return resultString
223
225 '''
226 This method will translate if-else loop block into its equivalent python code.
227 Whole loop block will be passed into loopBlock List.
228 It returns the transalted reuslt as a string.
229 '''
230 args = self.parse_args(["CONDITIONOPERATOR"],**loopBlock)
231 resultString = ''
232
233 equalsMatch = re.match("EQUALS$|==\s*$",args["CONDITIONOPERATOR"],flags=0)
234 greaterMatch = re.match("GREATER\s+THAN$|>\s*$",args["CONDITIONOPERATOR"],flags=0)
235 lesserMatch = re.match("LESSER\s+THAN$|<\s*$",args["CONDITIONOPERATOR"],flags=0)
236 greaterEqualMatch = re.match("GREATER\s+THAN\s+OR\s+EQUALS$|>=\s*$",args["CONDITIONOPERATOR"],flags=0)
237 lesserEqualMatch = re.match("LESSER\s+THAN\s+OR\s+EQUALS$|<=\s*$",args["CONDITIONOPERATOR"],flags=0)
238 if equalsMatch :
239 resultString = resultString + " == "
240 elif greaterMatch :
241 resultString = resultString + " > "
242 elif lesserMatch :
243 resultString = resultString + " < "
244 elif greaterEqualMatch:
245 resultString = resultString + " >= "
246 elif lesserEqualMatch :
247 resultString = resultString + " <= "
248 else :
249 print "\n Error: Given Operator is not listed "
250
251 return resultString
252
254 '''
255 This API will translate statment EXPERIMENTAL MODE ON/OFF into python equivalent.
256 It will return the transalted value.
257 '''
258 args = self.parse_args(["MODE"],**modeType)
259 resultString = ''
260 ONmatch = re.match("\s*ON",args["MODE"],flags=0)
261 OFFmatch = re.match("\sOFF",args["MODE"],flags=0)
262
263 if ONmatch :
264 resultString = "main.EXPERIMENTAL_MODE = main.TRUE"
265 elif OFFmatch :
266 resultString = "main.EXPERIMENTAL_MODE = main.FALSE"
267
268 return resultString
269
271 '''
272 This method will accept the OpenSpeak syntax into a string and will return
273 a python equivalent translations statement
274 '''
275
276 args = self.parse_args(["TEXT","WRITETOFILE"],**interpetParameters)
277 resultString = ''
278
279 resultString = self.verify_and_translate(args["TEXT"])
280 lineSpace = re.match("^\s+",resultString,flags=0)
281
282 resultString = re.sub("^\s+","",resultString) if lineSpace else resultString
283 return resultString
284
286 '''
287 This will translate the OpenSpeak log message statements into python equivalent
288 to resultString and returns resultString
289 '''
290 args = self.parse_args(["LOGLEVEL","MESSAGE"],**logStatement)
291 resultString = ''
292
293 message = self.translate_log_message(message=args["MESSAGE"])
294 if args["LOGLEVEL"] == "INFO" :
295 resultString = resultString + "main.log.info(" + message + ")"
296 elif args["LOGLEVEL"] == "ERROR" :
297 resultString = resultString + "main.log.error(" + message + ")"
298 elif args["LOGLEVEL"] == "DEBUG" :
299 resultString = resultString + "main.log.debug(" + message + ")"
300 elif args["LOGLEVEL"] == "REPORT" :
301 resultString = resultString + "main.log.report(" + message + ")"
302 elif args["LOGLEVEL"] == "CRITICAL" :
303 resultString = resultString + "main.log.critical(" + message + ")"
304 elif args["LOGLEVEL"] == "WARN" :
305 resultString = resultString + "main.log.warn(" + args["MESSAGE"] + ")"
306 elif args["LOGLEVEL"] == "EXACT" :
307 resultString = resultString + "main.log.exact(" + args["MESSAGE"] + ")"
308
309
310 return resultString
311
313 '''
314 This API will translate log messages if it is a string or Variable or combination
315 of string and variable.
316 It will return the analysed and translate message.
317 '''
318 args = self.parse_args(["MESSAGE"],**messageStatement)
319 resultString = ''
320
321 paramsMatch = re.match("PARAMS\[(.*)\]|STEP\[(.*)\]|TOPO\[(.*)\]|CASE\[(.*)\]|LAST_RESULT|LAST_RESPONSE",args["MESSAGE"],flags=0)
322 stringMatch = re.match("\s*\"(.*)\"\s*$",args["MESSAGE"],flags=0)
323 stringWidVariableMatch = re.match("\"(.*)\"\s+\+\s+(.*)",args["MESSAGE"],flags=0)
324 if paramsMatch :
325 resultString = resultString + self.translate_parameters(parameters=args["MESSAGE"])
326 elif stringMatch :
327 resultString = resultString + args["MESSAGE"]
328 elif stringWidVariableMatch:
329 quoteWord = stringWidVariableMatch.group(1)
330 variableRef = stringWidVariableMatch.group(2)
331 varMatch = re.search("PARAMS\[(.*)\]|STEP\[(.*)\]|TOPO\[(.*)\]|CASE\[(.*)\]",variableRef,flags=0)
332 varRefMatch = re.search("<(\w+)>",variableRef,flags=0)
333 if varMatch :
334 resultString = resultString + "\"" + quoteWord + "\"" + " + " + self.translate_parameters(parameters=variableRef)
335 elif varRefMatch :
336 resultString = resultString + "\"" + quoteWord + "\"" + " + " + varRefMatch.group(1)
337 else :
338 print "\nError : Syntax error , Not defined way to give log message" + args["MESSAGE"]
339
340 return resultString
341
343 '''
344 This will translate the ASSERT <value1> <COMPARISON OPERATOR> <value2> into python
345 equivalent to resultString and returns resultString
346 '''
347 args = self.parse_args(["LEFTVALUE","OPERATOR","RIGHTVALUE","ONPASS","ONFAIL"],**assertStatement)
348 resultString = ''
349
350 notOperatorMatch = re.search("NOT\s+(.*)",args["OPERATOR"],flags=0)
351 notOperatorSymbMatch = re.search("\!(.*)",args["OPERATOR"],flags=0)
352 operator = ''
353 lastresultMatch = re.match("LAST_RESULT",args["RIGHTVALUE"],flags=0)
354 lastresponseMatch = re.match("LAST_RESPONSE",args["RIGHTVALUE"],flags=0)
355 if lastresultMatch :
356 operator = "main.last_result"
357 elif lastresponseMatch :
358 operator = "main.last_response"
359 else :
360 operator = args["RIGHTVALUE"]
361
362 if args["OPERATOR"] == None or args["OPERATOR"] == "" :
363 print "\n Error : Operator has not been specified !!!"
364 elif notOperatorMatch or notOperatorSymbMatch:
365
366 operators = notOperatorMatch.group(1) if notOperatorMatch else notOperatorSymbMatch.group(1)
367 operators = self.translate_operator(operator=operators)
368 if self.grtrOrLssr == 0 :
369 resultString = resultString + "utilities.assert_not_" + operators + "(expect=" +\
370 self.translate_response_result(operator=args["RIGHTVALUE"]) + ",actual=" + self.translate_response_result(operator=args["LEFTVALUE"]) +\
371 ",onpass=" + self.translate_assertMessage(message=args["ONPASS"]) +\
372 ",onfail=" + self.translate_assertMessage(message=args["ONFAIL"]) + ")"
373 else :
374 resultString = resultString + "utilities.assert_not_" + operators + "(expect=" +\
375 self.translate_response_result(operator=args["LEFTVALUE"]) + ",actual=" + self.translate_response_result(operator=args["RIGHTVALUE"]) +\
376 ",onpass=" + self.translate_assertMessage(message=args["ONPASS"]) +\
377 ",onfail=" + self.translate_assertMessage(message=args["ONFAIL"]) + ")"
378
379 else :
380 operators = self.translate_operator(operator=args["OPERATOR"])
381 if self.grtrOrLssr == 0 :
382 resultString = resultString + "utilities.assert_" + operators + "(expect=" +\
383 self.translate_response_result(operator=args["RIGHTVALUE"]) +\
384 ",actual=" + self.translate_response_result(operator=args["LEFTVALUE"]) +\
385 ",onpass=" + self.translate_assertMessage(message=args["ONPASS"]) +\
386 ",onfail=" + self.translate_assertMessage(message=args["ONFAIL"]) + ")"
387 else :
388 resultString = resultString + "utilities.assert_" + operators + "(expect=" +\
389 self.translate_response_result(operator=args["LEFTVALUE"]) +\
390 ",actual=" + self.translate_response_result(operator=args["RIGHTVALUE"]) +\
391 ",onpass=" + self.translate_assertMessage(message=args["ONPASS"]) +\
392 ",onfail=" + self.translate_assertMessage(message=args["ONFAIL"]) + ")"
393
394
395 return resultString
396
398 '''
399 It will translate the LAST_RESPONSE or LAST_RESULT statement into its equivalent.
400 It returns the translate form in resulString.
401 '''
402 args = self.parse_args(["OPERATOR"],**operatorStatement)
403 resultString = ''
404 lastResultMatch = re.match("LAST_RESULT",args["OPERATOR"],flags=0)
405 lastResponseMatch = re.match("LAST_RESPONSE",args["OPERATOR"],flags=0)
406 if lastResultMatch :
407 resultString = resultString + "main.last_result"
408 elif lastResponseMatch:
409 resultString = resultString + "main.last_response"
410 else :
411 resultString = resultString + args["OPERATOR"]
412 return resultString
413
414
416 '''
417 This API will facilitate the translation of assert ONPASS or ONFAIL messages . The message can be
418 a string or calling another API in OpenSpeak syntax.
419 It will return the translated message
420 '''
421 args = self.parse_args(["MESSAGE"],**messageStatement)
422
423 connectMatch = re.search("CONNECT\s+(\w+)\s+USING\s+(.*)",args["MESSAGE"],flags=0)
424 disconnectMatch = re.search("DISCONNECT\s+(.*)",args["MESSAGE"],flags=0)
425 ondoMatch = re.search("ON\s+(.*)\s+DO\s+(.*)",args["MESSAGE"],flags=0)
426 paramsMatch = re.search("PARAMS\[(.*)\]|STEP\[(.*)\]|TOPO\[(.*)\]|CASE\[(.*)\]",args["MESSAGE"],flags=0)
427 stringMatch = re.search("\"(.*)\"|\'(.*)\'",args["MESSAGE"],flags=0)
428 variableMatch = re.search("\<(.*)\>",args["MESSAGE"],flags=0)
429
430 resultString = ''
431 if connectMatch :
432 resultString = resultString + self.translate_connect(component=connectMatch.group(1),
433 arguments=connectMatch.group(2) )
434 elif disconnectMatch :
435 resultString = resultString + self.translate_disconnect(component=disconnectMatch.group(1))
436 elif ondoMatch :
437 resultString = resultString + self.translate_onDOAs(component=ondoMatch.group(1),
438 action=ondoMatch.group(2))
439 elif paramsMatch :
440 resultString = resultString + self.translate_parameters(parameters=args["MESSAGE"])
441 elif stringMatch :
442 resultString = resultString + "\"" + stringMatch.group(1) + "\""
443 elif variableMatch :
444 resultString = resultString + variableMatch.group(1)
445 elif args["MESSAGE"] == None :
446 print "\n Error : Please pass a message or action for assertion "
447
448 return resultString
449
451 '''
452 It will translate the operator for assertion , by ensuring against given arguments.
453 It will return the translated assertion operator.
454 '''
455 args = self.parse_args(["OPERATOR"],**operatorStatement)
456
457 resultString = ''
458 equalsMatch = re.match("EQUALS$|==$",args["OPERATOR"],flags=0)
459 greaterMatch = re.match("GREATER\s+THAN$|>$",args["OPERATOR"],flags=0)
460 lesserMatch = re.match("LESSER\s+THAN$|<$",args["OPERATOR"],flags=0)
461 stringMatch = re.match("MATCHES|~$",args["OPERATOR"],flags=0)
462 greaterEqualMatch = re.match("GREATER\s+THAN\s+OR\s+EQUALS$|>=$",args["OPERATOR"],flags=0)
463 lesserEqualMatch = re.match("LESSER\s+THAN\s+OR\s+EQUALS$|<=$",args["OPERATOR"],flags=0)
464 if equalsMatch :
465
466 resultString = resultString + "equals"
467 elif greaterMatch :
468 self.grtrOrLssr = self.grtrOrLssr + 1
469 resultString = resultString + "greater"
470 elif lesserMatch :
471 self.grtrOrLssr = self.grtrOrLssr + 1
472 resultString = resultString + "lesser"
473 elif stringMatch :
474
475 resultString = resultString + "matches"
476 elif greaterEqualMatch:
477
478 resultString = resultString + "greater_equals"
479 elif lesserEqualMatch :
480
481 resultString = resultString + "lesser_equals"
482 else :
483 print "\n Error: Given Operator is not listed for assertion"
484 return resultString
485
487 '''
488 This will translate the STORE <variable> IN <value> or <variable> = <value>
489 into python equivalent to resultString and returns resultString
490 '''
491 args = self.parse_args(["VARIABLE","VALUE"],**storeStatement)
492 resultString = ''
493
494 ondoMatch = re.match("^\s*ON\s+(.*)\s+DO\s+(.*)",args["VALUE"],flags=0)
495 paramsMatch = re.match("^\s*PARAMS\[(.*)\]|STEP\[(.*)\]|TOPO\[(.*)\]|CASE\[(.*)\]|LAST_RESULT|LAST_RESPONSE",args["VALUE"],flags=0)
496 if paramsMatch :
497 argString = self.translate_parameters(parameters=args["VALUE"])
498 resultString = args["VARIABLE"] + " = " + argString
499 elif ondoMatch :
500 resultString = args["VARIABLE"] + " = " + self.translate_onDOAs(component=ondoMatch.group(1),action=ondoMatch.group(2))
501 else :
502 resultString = args["VARIABLE"] + " = " + args["VALUE"]
503
504
505 return resultString
506
508 '''
509 This will translate the DISCONNECT <component_name> into python
510 equivalent to resultString and returns resultString
511 '''
512 args = self.parse_args(["COMPONENT"],**disconnectStatement)
513 resultString = ''
514
515 resultString = "main." + args["COMPONENT"] + ".disconnect()"
516 return resultString
517
519 '''
520 This will translate the ON <component> DO <action> USING <arg1> AS <value1>,<arg2> AS <value2>
521 into python equivalent to resultString and returns resultString
522 '''
523 args = self.parse_args(["COMPONENT","ACTION","ARGUMENTS"],**onDoStatement)
524 subString = ''
525
526 usingMatch = re.match("\s*(.*)\s+USING\s+(.*)",args["ACTION"],flags=0)
527 action = ''
528 if usingMatch :
529 action = usingMatch.group(1)
530 arguments = usingMatch.group(2)
531 subString = self.translate_usingas(arguments=arguments)
532
533 else :
534 andCheck = re.search ("(.*)\s+AND\s+(.*)",args["ACTION"],flags=0)
535
536 action = action + "()"
537 if andCheck:
538 action = andCheck.group(1) + "()"
539 subString = subString + self.handle_conjuction(statement=andCheck.group(2))
540 else :
541 action = args["ACTION"]
542 action = action + "()"
543
544 resultString = "main." + args["COMPONENT"] + "." + action + subString
545 return resultString
546
547
549 '''
550 This will handle the conjuctions
551 '''
552
553 args = self.parse_args(["STATEMENT"],**conjuctStatement)
554 subSentence = ''
555
556 storeMatch = re.match("\s*STORE\s+(.*)\s+IN\s+(.*)",args["STATEMENT"],flags=0)
557 assertMatch = re.match("\s*ASSERT\s+(\w+)\s+(.*)\s+(.*)\s+ONPASS\s+(.*)\s+ONFAIL\s+(.*)",args["STATEMENT"],flags=0)
558 if storeMatch :
559 subSentence = "\n" + " " * 8 + self.translate_store(variable=storeMatch.group(2),
560 value=storeMatch.group(1))
561 elif assertMatch :
562 subSentence = "\n" + " " * 8 + self.translate_assertion(leftvalue=assertMatch.group(1),
563 operator=assertMatch.group(2),
564 rightvalue=assertMatch.group(3),
565 onpass=assertMatch.group(4),
566 onfail=assertMatch.group(5))
567 return subSentence
568
570 '''
571 This will tranlate USING argument AS value Statement into equivalent argument passing.
572 It will return translated form into resultString
573 '''
574 args = self.parse_args(["ARGUMENTS"],**argumentAS)
575 resultString = ''
576 argsList = []
577 subString = ''
578 subSentence = ''
579 line = ''
580 andCheck = re.search ("(.*)\s+AND\s+(.*)",args["ARGUMENTS"],flags=0)
581 if andCheck:
582 line = andCheck.group(1)
583 subSentence = self.handle_conjuction(statement=andCheck.group(2))
584 else :
585 line = args["ARGUMENTS"]
586
587
588
589 argsMatch = re.search("(.*),(.*)",line,flags=0)
590
591
592 if args["ARGUMENTS"] == None or args["ARGUMENTS"] == '' :
593 subString = ''
594 elif argsMatch :
595
596 argsList = line.split(",")
597 for index, arguments in enumerate(argsList):
598 argMatch = re.search("(.*)\s+AS\s+(.*)",arguments,flags=0)
599 if argMatch:
600 argsKey = argMatch.group(1)
601 argsValue = argMatch.group(2)
602 paramsMatch = re.search("PARAMS\[(.*)\]|STEP\[(.*)\]|TOPO\[(.*)\]|CASE\[(.*)\]|LAST_RESPONSE|LAST_RESULT",argsValue,flags=0)
603 if not paramsMatch :
604 if index == len(argsList) - 1 :
605 subString = subString + argsKey + "=" + argsValue
606 else :
607 subString = subString + argsKey + "=" + argsValue + ","
608 else :
609 argString = self.translate_parameters(parameters=argsValue)
610 if index == len(argsList) - 1 :
611 subString = subString + argsKey + "=" + argString
612 else :
613 subString = subString + argsKey + "=" + argString + ","
614 else :
615 if index == len(argsList) - 1 :
616 subString = subString + arguments
617 else :
618 subString = subString + arguments + ","
619 else :
620 argMatch = re.search("(.*)\s+AS\s+(.*)",args["ARGUMENTS"],flags=0)
621 if argMatch:
622 argsKey = argMatch.group(1)
623 argsValue = argMatch.group(2)
624 paramsMatch = re.search("PARAMS\[(.*)\]|STEP\[(.*)\]|TOPO\[(.*)\]|CASE\[(.*)\]|LAST_RESPONSE|LAST_RESULT",argsValue,flags=0)
625 if not paramsMatch :
626 subString = subString + argsKey + "=" + argsValue
627 else :
628 argString = self.translate_parameters(parameters=argsValue)
629 subString = subString + argsKey + "=" + argString
630 else :
631 paramsMatch = re.match("PARAMS\[(.*)\]|STEP\[(.*)\]|TOPO\[(.*)\]|CASE\[(.*)\]|LAST_RESPONSE|LAST_RESULT",line,flags=0)
632 if paramsMatch :
633 subString = subString + self.translate_parameters(parameters=line)
634 else :
635 subString = subString + line
636 resultString = "(" + subString + ")"+ subSentence
637 return resultString
638
639
641 '''
642 This will translate the CONNECT <component_name> USING1 <arg1> AS <value1>, <arg2> AS <value2>
643 into python equivalent to resultString and returns resultString
644 '''
645 args = self.parse_args(["COMPONENT","ARGUMENTS"],**connectStatement)
646 resultString = ''
647 subString = self.translate_usingas(arguments=args["ARGUMENTS"])
648
649 resultString = "main." + args["COMPONENT"] + ".connect(" + subString + ")"
650 return resultString
651
652
654 '''
655 This will translate the OpenSpeak Case and Params parameters into python equivalent
656 to resultString and returns resultString
657 '''
658 args = self.parse_args(["PARAMETERS"],**parameterStatement)
659 argument = args["PARAMETERS"]
660 resultString = ''
661
662 paramsMatch = re.search("PARAMS((\[(.*)\])*)",argument,flags=0)
663 stepsMatch = re.search("STEP((\[(.*)\])*)",argument,flags=0)
664 casesMatch = re.search("CASE((\[(.*)\])*)",argument,flags=0)
665 topoMatch = re.search("TOPO((\[(.*)\])*)",argument,flags=0)
666 lastResultMatch = re.match("LAST_RESULT",argument,flags=0)
667 lastResponseMatch = re.match("LAST_RESPONSE",argument,flags=0)
668
669 if paramsMatch :
670 params = paramsMatch.group(1)
671 resultString = resultString + "main.params" + self._argsCheck(checkvar=params)
672 elif stepsMatch :
673 resultString = resultString +"main.params[\'" + self.CurrentCase +\
674 "\'][\'STEP" + str(self.CurrentStep) + "\']" +\
675 self._argsCheck(checkvar=stepsMatch.group(1))
676 elif casesMatch :
677 resultString = resultString + "main.params[\'" + self.CurrentCase + "\']" +\
678 self._argsCheck(checkvar=casesMatch.group(1))
679 elif topoMatch :
680 resultString = resultString + "main.componentDictionary" +\
681 self._argsCheck(checkvar=topoMatch.group(1))
682 elif lastResultMatch :
683 resultString = resultString + "main.last_result"
684 elif lastResponseMatch :
685 resultString = resultString + "main.last_response"
686 return resultString
687
689 ''' This API will check if given argument is varibale reference or String and will translate accordingly.
690 It will return the tanslate form in resultString.
691 '''
692 args = self.parse_args(["CHECKVAR"],**args)
693 params = args["CHECKVAR"]
694 argsList = params.split("]")
695 resultString = ''
696 del argsList[len(argsList) - 1]
697 for index,paramArgs in enumerate(argsList) :
698 argsWidVariable = re.search("(\"|\')\s*(\w+)\s*(\'|\")",paramArgs,flags=0)
699 if argsWidVariable :
700 resultString = resultString + "[\'" + argsWidVariable.group(2) + "\']"
701 else :
702 resultString = resultString + paramArgs + "]"
703 return resultString
704
706 '''
707 This will translate the STEP "DO SOMETHING HERE" into python equivalent
708 to resultString and returns resultString
709 '''
710 args = self.parse_args(["STEP"],**stepStatement)
711 resultString = ''
712 resultString = "main.step(\"" + args["STEP"] + "\")"
713
714 return resultString
715
716
727
729 '''
730 This method will convert NAME "<Testcase_name>" into python equivalent statement
731 to resultString and returns resultString
732 '''
733 args = self.parse_args(["TESTNAME"],**nameStatement)
734
735 resultString = ''
736 resultString = "main.case(\"" + args["TESTNAME"] + "\")"
737
738 return resultString
739
740
742 '''
743 This method will translate the case block in test script .
744 It returns the translated equivalent python code for test script
745 '''
746 args = self.parse_args(["CASENUMBER"],**caseBlock)
747 resultString = ""
748 resultString = "def CASE" + str(args["CASENUMBER"]) + "(self,main) :\n"
749
750 return resultString
751
752
753
755 '''
756 This method will translate for loop block into its equivalent python code.
757 Whole loop block will be passed into loopBlock List.
758 It returns the transalted reuslt as a string.
759 '''
760 resultString = ''
761
762 return resultString
763
764
766 '''
767 This will translate the AND conjuction statements into python equivalent
768 to resultString and returns resultString
769 '''
770 resultString = ''
771
772 return resultString
773
774
776 '''
777 It will accept the (key,value) pair and will return the (key,value) pairs with keys in uppercase.
778 '''
779 newArgs = {}
780 for key,value in kwargs.iteritems():
781
782 if isinstance(args,list) and str.upper(key) in args:
783 for each in args:
784 if each==str.upper(key):
785 newArgs [str(each)] = value
786 elif each != str.upper(key) and (newArgs.has_key(str(each)) == False ):
787 newArgs[str(each)] = None
788
789
790
791 return newArgs
792