uitest/ui_logger_dsl/dsl_core.py |  142 +++++++++++++++++++++++++++++++++++++--
 1 file changed, 137 insertions(+), 5 deletions(-)

New commits:
commit f6ced6841462eeb302dd52424e01384f76283c65
Author:     Ahmed ElShreif <aelshre...@gmail.com>
AuthorDate: Mon Jul 1 17:42:53 2019 +0200
Commit:     Ahmed ElShreif <aelshre...@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()
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to