[Libreoffice-commits] core.git: Branch 'private/EL-SHREIF/ui_logger' - uitest/ui_logger_dsl
Ahmed ElShreif (via logerrit)
logerrit at kemper.freedesktop.org
Mon Jul 1 15:43:46 UTC 2019
uitest/ui_logger_dsl/dsl_core.py | 142 +++++++++++++++++++++++++++++++++++++--
1 file changed, 137 insertions(+), 5 deletions(-)
New commits:
commit f6ced6841462eeb302dd52424e01384f76283c65
Author: Ahmed ElShreif <aelshreif7 at gmail.com>
AuthorDate: Mon Jul 1 17:42:53 2019 +0200
Commit: Ahmed ElShreif <aelshreif7 at gmail.com>
CommitDate: Mon Jul 1 17:42:53 2019 +0200
Start the Implementation of the new dsl Compiler by:
1) finish the functions that will parse inputs
2) add function to initialize the UI test Case
3) add function to print the ui new test case
4) add the UNO caommands handler
5) add the Dialog commands handler
6) add the Starter commands handler
Change-Id: Ided1c050023c5284457f62c4b8d5ea1cfa38c043
diff --git a/uitest/ui_logger_dsl/dsl_core.py b/uitest/ui_logger_dsl/dsl_core.py
index 7c324083e2b7..94dc4c8b716e 100644
--- a/uitest/ui_logger_dsl/dsl_core.py
+++ b/uitest/ui_logger_dsl/dsl_core.py
@@ -1,10 +1,142 @@
+#!/usr/bin/env python3
+# This file is part of the LibreOffice UI_logger project.
+#
+# This file contain the implementation of the Compiler
+# for the new logger grammar
+#
+# ul stands for Ui_Logger
+
+import os
+import sys
+import argparse
from textx.metamodel import metamodel_from_file
-ui_dsl_mm = metamodel_from_file('ui_logger_dsl_grammar.tx')
+def parse_args():
+ """
+ This function parses the command-line arguments
+ to get the input and output file details
+ """
+ parser = argparse.ArgumentParser(description = "Generate a UI test file from log")
+ parser.add_argument("input_address", type = str, help = "The log file address")
+ parser.add_argument("output_address", type = str, help = "The test file address")
+ args = parser.parse_args()
+ return args
+
+class ul_Compiler:
+ variables=[]
+ def __init__(self , input_address , output_address):
+ self.ui_dsl_mm = metamodel_from_file('ui_logger_dsl_grammar.tx')
+ self.output_stream=self.initiate_test_generation(output_address)
+ self.input_address=input_address
+
+ def get_log_file(self , input_address):
+ try:
+ # load the program
+ content = self.ui_dsl_mm.model_from_file(input_address)
+ except IOError as err:
+ print("IO error: {0}".format(err))
+ print("Use " + os.path.basename(sys.argv[0]) + " -h to get usage instructions")
+ sys.exit(1)
+
+ return content
+
+ def initiate_test_generation(self,output_address):
+ try:
+ f = open(output_address,"w")
+ except IOError as err:
+ print("IO error: {0}".format(err))
+ print("Use " + os.path.basename(sys.argv[0]) + " -h to get usage instructions")
+ sys.exit(1)
+ line="# -*- tab-width: 4; indent-tabs-mode: nil; py-indent-offset: 4 -*-\n\n" + \
+ "from uitest.framework import UITestCase\n" + \
+ "from libreoffice.uno.propertyvalue import mkPropertyValues\n" + \
+ "import importlib\n\n" + \
+ "class TestClass(UITestCase):\n" + \
+ "\tdef test_function(self):\n"
+
+ self.variables.append(line)
+
+ return f
+
+ def compile(self):
+ self.ui_dsl_mm.register_obj_processors({
+ 'UNOCommand': self.handle_uno,
+ 'StarterCommand': self.handle_start,
+ 'CloseDialog': self.handle_Dialog,
+ 'OpenModelessDialog': self.handle_Dialog,
+ 'OpenModalDialog':self.handle_Dialog,
+ })
+
+ self.log_lines=self.get_log_file(self.input_address)
+
+ def handle_uno(self, UNOCommand):
+ if(UNOCommand.prameters==None):
+ line = "\t\tself.xUITest.executeCommand(\"" + \
+ UNOCommand.uno_command_name +"\")\n"
+ else:
+ paramaters=""
+ for p in UNOCommand.prameters.parameter_data :
+ paramaters = paramaters + "\"" + p.key + "\" : " + str(p.value) + " ,"
+ paramaters = paramaters[:-1]
+
+ line = "\t\tself.xUITest.executeCommandWithParameters(\"" + \
+ UNOCommand.uno_command_name +"\", mkPropertyValues({"+ paramaters +"}) )\n"
+
+ self.variables.append(line)
+
+ def handle_start(self, StarterCommand):
+ line="\t\tMainDoc = self.ui_test.create_doc_in_start_center(\""+\
+ StarterCommand.program_name+"\")\n"
+ self.variables.append(line)
+
+ line="\t\tMainWindow = self.xUITest.getTopFocusWindow()\n"
+ self.variables.append(line)
+
+ def handle_Dialog(self, DialogCommand):
+
+ if (DialogCommand.__class__.__name__ == "OpenModalDialog"):
+ old_line = self.variables.pop()
+
+ key_word=old_line[-9:-3]
+ if ( key_word == "Dialog"):
+ old_line="\t\tself.ui_test.execute_dialog_through_command(\""+\
+ old_line[31:-3]+"\")\n"
+ self.variables.append(old_line)
+ line = "\t\t" + DialogCommand.dialog_name + " = self.xUITest.getTopFocusWindow()\n"
+
+ elif (DialogCommand.__class__.__name__ == "OpenModelessDialog"):
+ old_line = self.variables.pop()
+
+ key_word=old_line[-9:-3]
+ if ( key_word == "Dialog"):
+ old_line="\t\tself.ui_test.execute_modeless_dialog_through_command(\""+\
+ old_line[31:-3]+"\")\n"
+ self.variables.append(old_line)
+ line = "\t\t" + DialogCommand.dialog_name + " = self.xUITest.getTopFocusWindow()\n"
+
+ elif (DialogCommand.__class__.__name__ == "CloseDialog"):
+ line="\t\tto be implemented after ui Objects\n"
+
+ self.variables.append(line)
+
+ def Generate_UI_test(self):
+ line="\t\tself.ui_test.close_doc()"
+ self.variables.append(line)
+
+ for line in self.variables:
+ self.output_stream.write(str(line))
-# Load the program:
-actions = ui_dsl_mm.model_from_file('example.ul')
+ def __del__(self):
+ self.output_stream.close()
-for statement in actions.commands:
+def main():
+ args = parse_args()
+ ui_logger = ul_Compiler(args.input_address,args.output_address)
+ ui_logger.compile()
+ for statement in (ui_logger.log_lines.commands):
+ print(statement)
+ ui_logger.Generate_UI_test()
+ del ui_logger
- print(statement)
+if __name__ == '__main__':
+ main()
More information about the Libreoffice-commits
mailing list