tracesrv/tracecompiler/internal/TraceCompiler_Test/TraceCompiler_Test.py
changeset 62 1c2bb2fc7c87
equal deleted inserted replaced
56:aa2539c91954 62:1c2bb2fc7c87
       
     1 #
       
     2 # Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
       
     3 # All rights reserved.
       
     4 # This component and the accompanying materials are made available
       
     5 # under the terms of "Eclipse Public License v1.0"
       
     6 # which accompanies this distribution, and is available
       
     7 # at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 #
       
     9 # Initial Contributors:
       
    10 # Nokia Corporation - initial contribution.
       
    11 #
       
    12 # Contributors:
       
    13 #
       
    14 # Description: 
       
    15 #
       
    16 #!/user/bin/python
       
    17 import os
       
    18 import sys
       
    19 import shutil
       
    20 import glob
       
    21 import stat
       
    22 
       
    23 print "TraceCompiler Test Bench version 1.1\n"
       
    24 
       
    25 # List of files to be generated. NOTE! Files must be in same order than reference files
       
    26 generated_files = []
       
    27 # TraceCompilerTester
       
    28 generated_files.append(r".\TraceCompilerTester\traces\BigNumbersTraces.h")
       
    29 generated_files.append(r".\TraceCompilerTester\traces\fixed_id.definitions")
       
    30 generated_files.append(r".\TraceCompilerTester\traces\TraceCompilerTesterBasicTraces.h")
       
    31 generated_files.append(r".\TraceCompilerTester\traces\TraceCompilerTesterCommon1Traces.h")
       
    32 generated_files.append(r".\TraceCompilerTester\traces\TraceCompilerTesterCommon2Traces.h")
       
    33 generated_files.append(r".\TraceCompilerTester\traces_TraceCompilerTesterAdvanced\BigNumbersTraces.h")
       
    34 generated_files.append(r".\TraceCompilerTester\traces_TraceCompilerTesterAdvanced\fixed_id.definitions")
       
    35 generated_files.append(r".\TraceCompilerTester\traces_TraceCompilerTesterAdvanced\TraceCompilerTesterAdvancedTraces.h")
       
    36 generated_files.append(r".\TraceCompilerTester\traces_TraceCompilerTesterAdvanced\TraceCompilerTesterCommon1Traces.h")
       
    37 generated_files.append(r".\TraceCompilerTester\traces_TraceCompilerTesterAdvanced\TraceCompilerTesterCommon2Traces.h")
       
    38 generated_files.append(r".\epoc32\ost_dictionaries\TraceCompilerTesterAdvanced_0x20011111_Dictionary.xml")
       
    39 generated_files.append(r".\epoc32\ost_dictionaries\TraceCompilerTesterBasic_0x20011112_Dictionary.xml")
       
    40 generated_files.append(r".\epoc32\include\platform\symbiantraces\autogen\TraceCompilerTesterAdvanced_0x20011111_TraceDefinitions.h")
       
    41 generated_files.append(r".\epoc32\include\platform\symbiantraces\autogen\TraceCompilerTesterBasic_0x20011112_TraceDefinitions.h")
       
    42 # HelloWorld
       
    43 generated_files.append(r".\HelloWorld\traces\fixed_id.definitions")
       
    44 generated_files.append(r".\HelloWorld\traces\HelloWorldTraces.h")
       
    45 generated_files.append(r".\epoc32\ost_dictionaries\HelloWorld_0xe9fbe6ee_Dictionary.xml")
       
    46 generated_files.append(r".\epoc32\include\platform\symbiantraces\autogen\HelloWorld_0xe9fbe6ee_TraceDefinitions.h")
       
    47 
       
    48 # List of reference files. NOTE! Files must be in same order than generated files
       
    49 reference_files = []
       
    50 # TraceCompilerTester
       
    51 reference_files.append(r".\TraceCompiler_reference_files\traces\BigNumbersTraces.h")
       
    52 reference_files.append(r".\TraceCompiler_reference_files\traces\fixed_id.definitions")
       
    53 reference_files.append(r".\TraceCompiler_reference_files\traces\TraceCompilerTesterBasicTraces.h")
       
    54 reference_files.append(r".\TraceCompiler_reference_files\traces\TraceCompilerTesterCommon1Traces.h")
       
    55 reference_files.append(r".\TraceCompiler_reference_files\traces\TraceCompilerTesterCommon2Traces.h")
       
    56 reference_files.append(r".\TraceCompiler_reference_files\traces_TraceCompilerTesterAdvanced\BigNumbersTraces.h")
       
    57 reference_files.append(r".\TraceCompiler_reference_files\traces_TraceCompilerTesterAdvanced\fixed_id.definitions")
       
    58 reference_files.append(r".\TraceCompiler_reference_files\traces_TraceCompilerTesterAdvanced\TraceCompilerTesterAdvancedTraces.h")
       
    59 reference_files.append(r".\TraceCompiler_reference_files\traces_TraceCompilerTesterAdvanced\TraceCompilerTesterCommon1Traces.h")
       
    60 reference_files.append(r".\TraceCompiler_reference_files\traces_TraceCompilerTesterAdvanced\TraceCompilerTesterCommon2Traces.h")
       
    61 reference_files.append(r".\TraceCompiler_reference_files\TraceCompilerTesterAdvanced_0x20011111_Dictionary.xml")
       
    62 reference_files.append(r".\TraceCompiler_reference_files\TraceCompilerTesterBasic_0x20011112_Dictionary.xml")
       
    63 reference_files.append(r".\TraceCompiler_reference_files\TraceCompilerTesterAdvanced_0x20011111_TraceDefinitions.h")
       
    64 reference_files.append(r".\TraceCompiler_reference_files\TraceCompilerTesterBasic_0x20011112_TraceDefinitions.h")
       
    65 # HelloWorld
       
    66 reference_files.append(r".\HelloWorld_reference_files\traces\fixed_id.definitions")
       
    67 reference_files.append(r".\HelloWorld_reference_files\traces\HelloWorldTraces.h")
       
    68 reference_files.append(r".\HelloWorld_reference_files\HelloWorld_0xe9fbe6ee_Dictionary.xml")
       
    69 reference_files.append(r".\HelloWorld_reference_files\HelloWorld_0xe9fbe6ee_TraceDefinitions.h")
       
    70 
       
    71 # Name of report file that include differences between generated files and reference files.
       
    72 report_file_name = "diff.txt"
       
    73 
       
    74 def print_instructions():
       
    75     print "Common usage : TraceCompiler_Test.py <drive> <location_of_TraceCompiler>"
       
    76     print "  where <drive> is a letter of virtual drive which you want to assign"
       
    77     print "     a path of the TraceCompiler Test Bench."
       
    78     print "  where <location_of_TraceCompiler> is a location of the TraceCompiler"
       
    79     print "     that wanted to be test. Location should be the location of"
       
    80     print "     ""tracecompiler"" folder."
       
    81     print "\nExamples:";
       
    82     print "  TraceCompiler_Test.py W: .";
       
    83     print "      The TraceCompiler Test Bench uses W:\\ as virtual drive and tests"
       
    84     print "      the TraceCompiler that has been copied to root of the test bench.";
       
    85     print "  TraceCompiler_Test.py Y X:\\epoc32\\tools";
       
    86     print "      The TraceCompiler Test Bench uses Y:\\ as virtual drive and tests"
       
    87     print "      the TraceCompiler that can be found from X:\\epoc32\\tools folder.";
       
    88 
       
    89 try:
       
    90     # Get drive name from command line arguments
       
    91     drive = sys.argv[1]
       
    92             
       
    93     # Check that drive name is in valid format
       
    94     if drive[0].isalpha() == False or len(drive) > 2 or (len(drive) == 2 and drive[1] != ":") :
       
    95         raise TypeError
       
    96     elif len(drive) <  2 :
       
    97         drive += ":"
       
    98         
       
    99     # Get location of the TraceCompiler to be tested from command line arguments
       
   100     location_of_tracecompiler = sys.argv[2]
       
   101     
       
   102     # Check if location of the TraceCompiler path valid
       
   103     tracecompiler_script = os.path.join(location_of_tracecompiler, r"tracecompiler.pl")
       
   104     if not os.path.exists(tracecompiler_script) :
       
   105         print "Error: TraceCompiler that should be tested does not exist in defined location"
       
   106         sys.exit()
       
   107                    
       
   108 except (IndexError, TypeError) :
       
   109     print_instructions()
       
   110     sys.exit()
       
   111     
       
   112 # Subst TraceCompiler Test Bench as specific drive
       
   113 print "##### Subst " + drive + " drive #####"
       
   114 os.system("subst " + drive + " .")
       
   115 
       
   116 # Go to substed drive
       
   117 os.chdir(drive)
       
   118 
       
   119 # Verify that substed drive includes TraceCompiler Test Bench. Check is needed in case that 
       
   120 # drive was already substed.
       
   121 filename = os.path.join(drive, r"\TraceCompiler_Test.py")
       
   122 if not os.path.exists(filename) :
       
   123     print "\nError: Substed drive does not include TraceCompiler test Bench"
       
   124     sys.exit()
       
   125 
       
   126 # Path to folder where TraceCompiler under test will be copied
       
   127 tracecompiler_under_test_path = os.path.abspath(r"\TraceCompiler_under_test")
       
   128 
       
   129 # Remove old TraceCompiler under test if that exist
       
   130 shutil.rmtree(tracecompiler_under_test_path, True)
       
   131 
       
   132 # Copy TraceCompiler that should be tested to TraceCompiler Test Bench
       
   133 os.mkdir(tracecompiler_under_test_path)
       
   134 shutil.copy(tracecompiler_script, os.path.abspath(r"\TraceCompiler_under_test\tracecompiler.pl"))
       
   135 shutil.copy(os.path.join(location_of_tracecompiler, r"tracecompiler.pm"), 
       
   136     os.path.abspath(r"\TraceCompiler_under_test\tracecompiler.pm"))
       
   137 shutil.copy(os.path.join(location_of_tracecompiler, r"tracecompiler_parse_mmp.pl"), 
       
   138     os.path.abspath(r"\TraceCompiler_under_test\tracecompiler_parse_mmp.pl"))
       
   139 shutil.copytree(os.path.join(location_of_tracecompiler, r"tracecompiler"),
       
   140     os.path.abspath(r"\TraceCompiler_under_test\tracecompiler"))
       
   141     
       
   142 # Just in case remove all read-only attributes
       
   143 for root, dirs, files in os.walk(tracecompiler_under_test_path, topdown=False):
       
   144     for fileName in files:
       
   145         os.chmod (os.path.join(root, fileName), stat.S_IWRITE)
       
   146     for dirName in dirs:
       
   147         os.chmod (os.path.join(root, dirName), stat.S_IWRITE)       
       
   148 
       
   149 # Delete generated files
       
   150 print "\n##### Delete all generated files #####"
       
   151 for generated_file in generated_files :
       
   152     try :
       
   153         os.remove(generated_file)
       
   154     except :
       
   155         pass
       
   156         
       
   157 # Delete diff.txt
       
   158 try :
       
   159     os.remove(report_file_name)
       
   160 except :
       
   161     pass
       
   162 
       
   163 # Run TraceCompiler to TraceCompilerTesterBasic component
       
   164 print "\n##### Run TraceCompiler to TraceCompilerTesterBasic component #####"
       
   165 os.chdir("TraceCompilerTester\group")
       
   166 os.system(r"java -classpath ../../TraceCompiler_under_test/tracecompiler com.nokia.tracecompiler.TraceCompiler 20011112 TraceCompilerTesterBasic ../../TraceCompilerTester/group/TraceCompilerTesterBasic.mmp ../../TraceCompilerTester/src/TraceCompilerTesterBasic.cpp ../../TraceCompilerTester/src/TraceCompilerTesterCommon1.cpp ../../TraceCompilerTester/src/TraceCompilerTesterCommon2.cpp")
       
   167 os.chdir("..\..")
       
   168 
       
   169 # Run TraceCompiler to TraceCompilerTesterAdvanced component
       
   170 print "\n##### Run TraceCompiler to TraceCompilerTesterAdvanced component #####"
       
   171 os.chdir("TraceCompilerTester\group")
       
   172 os.system(r"java -classpath ../../TraceCompiler_under_test/tracecompiler com.nokia.tracecompiler.TraceCompiler 20011111 TraceCompilerTesterAdvanced ../../TraceCompilerTester/group/TraceCompilerTesterAdvanced.mmp ../../TraceCompilerTester/src/TraceCompilerTesterAdvanced.cpp ../../TraceCompilerTester/src/TraceCompilerTesterCommon1.cpp ../../TraceCompilerTester/src/TraceCompilerTesterCommon2.cpp")
       
   173 os.chdir("..\..")
       
   174 
       
   175 # Run TraceCompiler to HelloWorld component
       
   176 print "\n##### Run TraceCompiler to HelloWorld component #####"
       
   177 os.chdir("HelloWorld\group")
       
   178 os.system(r"java -classpath ../../TraceCompiler_under_test/tracecompiler com.nokia.tracecompiler.TraceCompiler E9FBE6EE HelloWorld ../../HelloWorld/group/HelloWorld.mmp ../../HelloWorld/src/HelloWorld.cpp")
       
   179 os.chdir("..\..")
       
   180 
       
   181 # Compare generated files to reference files
       
   182 print "\n##### Compare generated files to reference files #####"
       
   183 changed_files = []
       
   184 changes = []
       
   185 file_index = 0
       
   186 for generated_file in generated_files :
       
   187     gfile = open(generated_file, "r")
       
   188     rfile = open(reference_files[file_index], "r")
       
   189     filename_added = False
       
   190 
       
   191     for gline in gfile :
       
   192         rline = rfile.readline()
       
   193         if gline != rline :
       
   194             if not "// Created by TraceCompiler" in gline :
       
   195                 valid = True
       
   196                 
       
   197                 # In case of dictionary file ignore differences in drive letters
       
   198                 if generated_file.endswith(".xml") and "<path val=" in gline :
       
   199                     if gline[gline.find(r"/"):] == rline[rline.find(r"/"):] :
       
   200                         valid = False
       
   201                 
       
   202                 if valid :
       
   203                     if not filename_added :
       
   204                         changed_files.append(generated_file)
       
   205                         changes.append(50 * "-")
       
   206                         changes.append("\n")
       
   207                         changes.append(generated_file)
       
   208                         changes.append("\n\n")
       
   209                         filename_added = True
       
   210                     changes.append(gline)
       
   211                     changes.append(" <---> ")
       
   212                     changes.append("\n")
       
   213                     changes.append(rline)
       
   214                     changes.append("\n")
       
   215                 
       
   216     file_index+=1
       
   217 
       
   218 # Print results
       
   219 print "\n##### TEST RESULTS #####"
       
   220 if len(changed_files) == 0 :
       
   221     print "\nNO DIFFERENCES\n"  
       
   222 else :
       
   223     print "\a"
       
   224     print "DIFFERENCES TO REFERENCE FILES NOTICED!\n"
       
   225     
       
   226     # Write changes to diff.txt
       
   227     report = open(report_file_name, "w")
       
   228     report.writelines(changes)
       
   229     
       
   230     print "There are differences in following files:"
       
   231     for changed_file in changed_files :
       
   232         print changed_file
       
   233     print "\nFor more information, please see the diff.txt."
       
   234     print "\nNOTE: If differences are ok, remember to update reference files."  
       
   235      
       
   236