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