[rfta-svn] SF.net SVN: rfta: [45] rfta/trunk/test
Brought to you by:
blep
From: <rft...@li...> - 2007-08-24 15:54:55
|
Revision: 45 http://rfta.svn.sourceforge.net/rfta/?rev=45&view=rev Author: blep Date: 2007-08-24 08:54:43 -0700 (Fri, 24 Aug 2007) Log Message: ----------- - unit tests now compare results to an expected output. Expected output can be generated and diff are generated after testing. Modified Paths: -------------- rfta/trunk/test/rftaparser_unittest.py rfta/trunk/test/rftatest.py rfta/trunk/test/testresultbrowser.py Added Paths: ----------- rfta/trunk/testresult/parser_unittests/cxxparser_ut.expected Modified: rfta/trunk/test/rftaparser_unittest.py =================================================================== --- rfta/trunk/test/rftaparser_unittest.py 2007-08-24 13:45:53 UTC (rev 44) +++ rfta/trunk/test/rftaparser_unittest.py 2007-08-24 15:54:43 UTC (rev 45) @@ -19,11 +19,19 @@ PARSER_PATH = r'..\build\test_rftaparser_Debug\test_rftaparser.exe' if __name__ == '__main__': + import sys + generate_result = False + if len(sys.argv) == 2 and sys.argv[1] == 'generate' and raw_input( 'Confirm expected result regeneration ? (yes/no):' ) == 'yes': + generate_result = True + print 'The expected result will be regenerated' + class ParserTestRunner(rftatest.TestRunner): def __init__( self ): rftatest.TestRunner.__init__( self, PARSER_PATH ) self.output_file_suffix = '-parser.txt' ParserTestRunner().runFileSystemProject( RESULT_DIR, os.path.join( rftatest.TESTDATA_DIR, 'cxxparser_ut' ), - verbose_status = True ) + compare_to_expected = True, + dump_diff = True, + generate_expected = generate_result ) Modified: rfta/trunk/test/rftatest.py =================================================================== --- rfta/trunk/test/rftatest.py 2007-08-24 13:45:53 UTC (rev 44) +++ rfta/trunk/test/rftatest.py 2007-08-24 15:54:43 UTC (rev 45) @@ -56,6 +56,7 @@ if append_to_output: cmd += ('--output-append', ) cmd += extra_flags + status_header = '#SOURCESTATUS: %s' % source_path try: ## print 'Running', cmd return_code = 1 @@ -66,22 +67,22 @@ (process_stdout, process_stderr) = process.communicate( source ) return_code = process.wait() if return_code == 0: - print >> status_file, source_path, 'OK', '_' + print >> status_file, status_header, 'OK', '_' else: - print >> status_file, source_path, 'FAILED', return_code + print >> status_file, status_header, 'FAILED', return_code if process_stdout: appendToFile( log_path, process_stdout.replace('\r\n','\n') ) if process_stderr and process_stderr != process_stdout: appendToFile( log_path, process_stderr ) return True except IOError, e: - print >> status_file, source_path, 'FAILED', return_code + print >> status_file, status_header, 'FAILED', return_code appendToFile( log_path, 'TestRunner => failed to spawn process (IOError):' ) appendToFile( log_path, e ) print e return False except OSError, e: - print >> status_file, source_path, 'FAILED', return_code + print >> status_file, status_header, 'FAILED', return_code appendToFile( log_path, 'TestRunner => failed to spawn process:' ) appendToFile( log_path, e ) return False @@ -93,12 +94,17 @@ test_runner, exe_path, verbose_status = False, + compare_to_expected = False, + generate_expected = False, + dump_diff = False, **test_runner_kwargs ): out_basepath = os.path.join( result_dir, os.path.split( os.path.splitext(project_name)[0] )[1] ) status_path = out_basepath + '-status.txt' status_file = file( status_path, 'wt' ) log_path = out_basepath + '-log.txt' output_path = out_basepath + '-parser.txt' + expected_path = out_basepath + ".expected" + diff_path = out_basepath + '-diff.txt' eraseFile( log_path ) eraseFile( output_path ) linesep = "-" * 78 + "\n" @@ -108,9 +114,101 @@ appendToFile( output_path, linesep + "#SOURCEOUPUT: " + source_path ) test_runner( source, source_path, log_path, output_path, exe_path, status_file, **test_runner_kwargs ) status_file.close() + if generate_expected: + generateExpectedResults( status_path, log_path, output_path, expected_path ) + if compare_to_expected: + compareActualAndExpectedResults( status_path, log_path, output_path, expected_path, diff_path, dump_diff ) if verbose_status: print file(status_path,'rt').read() +def readResultData( path, repository ): + """Read the content of path and store result in repository map. + repository must be a map. Repository as the following structure: + repository = { 'source_path1' : { 'log' : ['#SOURCELOG: line1...','line2'], + 'status' : ['#SOURCESTATUS: line1...','line2'], + 'output' : ['#SOURCEOUPUT: line1...','line2'] }, + ... } + """ + kind = None + current_path = None + for line in file( path, 'rt' ): + change = True + if line.startswith('#SOURCELOG:'): + kind = 'log' + elif line.startswith('#SOURCESTATUS:'): + kind = 'status' + elif line.startswith('#SOURCEOUPUT:'): + kind = 'output' + else: + change = False + if change: + current_path = line.strip().split()[1] + if current_path not in repository: + repository[current_path] = { 'log' : [], 'status' : [], 'output' : [] } + if current_path and kind: + repository[current_path][kind].append( line ) + +def readActualResultData( status_path, log_path, output_path ): + actual_repository = {} + readResultData( status_path, actual_repository ) + readResultData( log_path, actual_repository ) + readResultData( output_path, actual_repository ) + return actual_repository + +def generateExpectedResults( status_path, log_path, output_path, expected_path ): + print 'Generating expected results to', expected_path + actual_repository = readActualResultData( status_path, log_path, output_path ) + source_paths = actual_repository.keys() + source_paths.sort() + fout = file( expected_path, 'wt' ) + for source_path in source_paths: + def dumpData( kind ): + if source_path in actual_repository and kind in actual_repository[source_path]: + fout.write( ''.join( actual_repository[source_path][kind] ) ) + dumpData( 'status' ) + dumpData( 'output' ) + dumpData( 'log' ) + fout.close() + +def compareActualAndExpectedResults( status_path, log_path, output_path, expected_path, diff_path, dump_diff ): + print 'Comparing actual and expected results with', expected_path + actual_repository = readActualResultData( status_path, log_path, output_path ) + expected_repository = {} + readResultData( expected_path, expected_repository ) + source_paths = actual_repository.keys() + source_paths.sort() + fdiff = file( diff_path, 'wt' ) + import difflib + diff_by_sources = {} + for source_path in source_paths: + def getData( kind, repository ): + if source_path in repository and kind in repository[source_path]: + return repository[source_path][kind] + return [] + def compareData( kind ): + actual_data = getData( kind, actual_repository ) + expected_data = getData( kind, expected_repository ) + if actual_data != expected_data: + fdiff.write( ''.join( difflib.Differ().compare( actual_data , expected_data ) ) ) + if source_path not in diff_by_sources: + diff_by_sources[source_path] = [] + diff_by_sources[source_path].append( kind ) + compareData( 'status' ) + compareData( 'output' ) + compareData( 'log' ) + fdiff.close() + if len(diff_by_sources) == 0: + print 'All tests have identical results! (%d tests)' % len(source_paths) + else: + if dump_diff: + print 'Diff report:' + print file( diff_path, 'rt' ).read() + nb_tests, nb_diff = len(source_paths), len(diff_by_sources) + for source_path, kinds in diff_by_sources.items(): + print 'Differences found:', source_path, ' !=> ',' '.join( kinds ) + print '%d/%d passed. %d have different results' % (nb_tests-nb_diff, nb_tests, nb_diff) + print 'See %s for differences detail.' % diff_path + class TestRunner: def __init__( self, exe_path, **runner_kwargs ): self.exe_path = exe_path @@ -131,19 +229,26 @@ SEM_NOGPFAULTERRORBOX = 0x0002 win32api.SetErrorMode( SEM_NOGPFAULTERRORBOX ) - def runProjectTests( self, project_name, source_provider, result_dir, verbose_status = False ): + def runProjectTests( self, project_name, source_provider, result_dir, verbose_status = False, + compare_to_expected = False, dump_diff = False, generate_expected = False ): return runProjectTests( project_name, source_provider, result_dir, self.test_runner, self.exe_path, verbose_status = verbose_status, + compare_to_expected = compare_to_expected, + dump_diff = dump_diff, generate_expected = generate_expected, **self.test_runner_kwargs ) - def runZippedProjects( self, result_dir, zip_dir = TESTDATA_PROJECTS_DIR, verbose_status = False ): + def runZippedProjects( self, result_dir, zip_dir = TESTDATA_PROJECTS_DIR, verbose_status = False, + compare_to_expected = False, dump_diff = False, generate_expected = False ): zip_files = glob.glob( os.path.join( zip_dir, '*.zip' ) ) for zip_path in zip_files: print 'Analysing', zip_path self.runProjectTests( zip_path, zipFileSourceProdiver( zip_path ), result_dir, - verbose_status = verbose_status ) + verbose_status = verbose_status, compare_to_expected = compare_to_expected, + generate_expected = generate_expected, dump_diff = dump_diff ) - def runFileSystemProject( self, result_dir, project_dir, verbose_status = False ): + def runFileSystemProject( self, result_dir, project_dir, verbose_status = False, + compare_to_expected = False, dump_diff = False, generate_expected = False ): print 'Processing', project_dir self.runProjectTests( project_dir, fileSystemSourceProvider( project_dir ), result_dir, - verbose_status = verbose_status ) + verbose_status = verbose_status, compare_to_expected = compare_to_expected, + generate_expected = generate_expected, dump_diff = dump_diff ) Modified: rfta/trunk/test/testresultbrowser.py =================================================================== --- rfta/trunk/test/testresultbrowser.py 2007-08-24 13:45:53 UTC (rev 44) +++ rfta/trunk/test/testresultbrowser.py 2007-08-24 15:54:43 UTC (rev 45) @@ -93,7 +93,7 @@ self.status = [] self.archive = None for line in file( base_path + '-status.txt', 'rt'): - source, status, offset = line.strip().rsplit(' ', 2) + dummy, source, status, offset = line.strip().rsplit(' ', 3) self.status.append( (source,status, offset) ) if status == 'OK': self.passed.append( (source,offset) ) Added: rfta/trunk/testresult/parser_unittests/cxxparser_ut.expected =================================================================== --- rfta/trunk/testresult/parser_unittests/cxxparser_ut.expected (rev 0) +++ rfta/trunk/testresult/parser_unittests/cxxparser_ut.expected 2007-08-24 15:54:43 UTC (rev 45) @@ -0,0 +1,822 @@ +#SOURCESTATUS: ../testdata\cxxparser_ut\t_array_001_static_init_class.cpp OK _ +#SOURCEOUPUT: ../testdata\cxxparser_ut\t_array_001_static_init_class.cpp +namespace: <GlobalNamespace> { + class: <anonymous> { + nested classes: { + } + members: { + symbol: string of type char + symbol: value of type signed int + } + } + class: <anonymous> + symbol: lookup of type ::<anonymous class> +} +------------------------------------------------------------------------------ +#SOURCELOG: ../testdata\cxxparser_ut\t_array_001_static_init_class.cpp +------------------------------------------------------------------------------ +#SOURCESTATUS: ../testdata\cxxparser_ut\t_class_001_empty.cpp OK _ +#SOURCEOUPUT: ../testdata\cxxparser_ut\t_class_001_empty.cpp +namespace: <GlobalNamespace> { + class: Union001 { + nested classes: { + } + members: { + symbol: a of type ::Class001 + symbol: b of type ::Struct001 + } + } + class: Struct001 { + nested classes: { + } + members: { + } + } + class: Class001 { + nested classes: { + } + members: { + } + } + class: Class001 + class: Struct001 + class: Union001 +} +------------------------------------------------------------------------------ +#SOURCELOG: ../testdata\cxxparser_ut\t_class_001_empty.cpp +------------------------------------------------------------------------------ +#SOURCESTATUS: ../testdata\cxxparser_ut\t_class_002_inheritance.cpp OK _ +#SOURCEOUPUT: ../testdata\cxxparser_ut\t_class_002_inheritance.cpp +namespace: <GlobalNamespace> { + class: Struct002D { + bases: { + type: ::Class002C + } + nested classes: { + } + members: { + } + } + class: Class002C { + bases: { + type: ::Class002A + type: ::Class002B + } + nested classes: { + } + members: { + } + } + class: Class002B { + nested classes: { + } + members: { + } + } + class: Class002A { + nested classes: { + } + members: { + } + } + class: Class002A + class: Class002B + class: Class002C + class: Struct002D +} +------------------------------------------------------------------------------ +#SOURCELOG: ../testdata\cxxparser_ut\t_class_002_inheritance.cpp +------------------------------------------------------------------------------ +#SOURCESTATUS: ../testdata\cxxparser_ut\t_class_003_data_members.cpp OK _ +#SOURCEOUPUT: ../testdata\cxxparser_ut\t_class_003_data_members.cpp +namespace: <GlobalNamespace> { + class: Class002 { + nested classes: { + } + members: { + symbol: x of type signed int + symbol: y of type signed int + symbol: z of type signed long int + } + } + class: Class002 +} +------------------------------------------------------------------------------ +#SOURCELOG: ../testdata\cxxparser_ut\t_class_003_data_members.cpp +------------------------------------------------------------------------------ +#SOURCESTATUS: ../testdata\cxxparser_ut\t_class_004_inheritance2.cpp OK _ +#SOURCEOUPUT: ../testdata\cxxparser_ut\t_class_004_inheritance2.cpp +namespace: <GlobalNamespace> { + class: Struct004D { + bases: { + type: ::C4B::C4BA::Class004C + } + nested classes: { + } + members: { + } + } + namespace: C4B { + namespace: C4BA { + class: Class004C { + bases: { + type: ::C4B::Class004B + } + nested classes: { + } + members: { + } + } + class: Class004C + } + class: Class004B { + bases: { + type: ::C4::Class004A + } + nested classes: { + } + members: { + } + } + class: Class004B + } + namespace: C4 { + class: Class004A { + nested classes: { + } + members: { + } + } + class: Class004A + } + class: Struct004D +} +------------------------------------------------------------------------------ +#SOURCELOG: ../testdata\cxxparser_ut\t_class_004_inheritance2.cpp +------------------------------------------------------------------------------ +#SOURCESTATUS: ../testdata\cxxparser_ut\t_class_005_inheritance_ns.cpp OK _ +#SOURCEOUPUT: ../testdata\cxxparser_ut\t_class_005_inheritance_ns.cpp +namespace: <GlobalNamespace> { + class: Class005B { + bases: { + type: ::C5::Class005A + } + nested classes: { + } + members: { + } + } + namespace: C5 { + class: Class005A { + nested classes: { + } + members: { + } + } + class: Class005A + } + class: Class005B +} +------------------------------------------------------------------------------ +#SOURCELOG: ../testdata\cxxparser_ut\t_class_005_inheritance_ns.cpp +------------------------------------------------------------------------------ +#SOURCESTATUS: ../testdata\cxxparser_ut\t_class_006_inheritance_ns.cpp OK _ +#SOURCEOUPUT: ../testdata\cxxparser_ut\t_class_006_inheritance_ns.cpp +namespace: <GlobalNamespace> { + namespace: C6B { + class: Class006B { + bases: { + type: ::C6A::C6AA::Class006A + } + nested classes: { + } + members: { + } + } + class: Class006B + } + namespace: C6A { + namespace: C6AA { + class: Class006A { + nested classes: { + } + members: { + } + } + class: Class006A + } + } +} +------------------------------------------------------------------------------ +#SOURCELOG: ../testdata\cxxparser_ut\t_class_006_inheritance_ns.cpp +------------------------------------------------------------------------------ +#SOURCESTATUS: ../testdata\cxxparser_ut\t_class_007_ctor.cpp OK _ +#SOURCEOUPUT: ../testdata\cxxparser_ut\t_class_007_ctor.cpp +namespace: <GlobalNamespace> { + class: Class007A { + nested classes: { + } + members: { + } + } + class: Class007A +} +------------------------------------------------------------------------------ +#SOURCELOG: ../testdata\cxxparser_ut\t_class_007_ctor.cpp +------------------------------------------------------------------------------ +#SOURCESTATUS: ../testdata\cxxparser_ut\t_class_008_self_pointer.cpp OK _ +#SOURCEOUPUT: ../testdata\cxxparser_ut\t_class_008_self_pointer.cpp +namespace: <GlobalNamespace> { + class: C0008 { + nested classes: { + } + members: { + symbol: self_ of type ::C0008 + } + } + class: C0008 +} +------------------------------------------------------------------------------ +#SOURCELOG: ../testdata\cxxparser_ut\t_class_008_self_pointer.cpp +------------------------------------------------------------------------------ +#SOURCESTATUS: ../testdata\cxxparser_ut\t_class_009_fn_throws.cpp OK _ +#SOURCEOUPUT: ../testdata\cxxparser_ut\t_class_009_fn_throws.cpp +namespace: <GlobalNamespace> { + class: C0009 { + nested classes: { + } + members: { + symbol: what of type char + symbol: whatThrowsMany of type char + } + } + class: C0009 +} +------------------------------------------------------------------------------ +#SOURCELOG: ../testdata\cxxparser_ut\t_class_009_fn_throws.cpp +------------------------------------------------------------------------------ +#SOURCESTATUS: ../testdata\cxxparser_ut\t_class_010_dtor.cpp OK _ +#SOURCEOUPUT: ../testdata\cxxparser_ut\t_class_010_dtor.cpp +namespace: <GlobalNamespace> { + class: C0010C { + nested classes: { + } + members: { + } + } + class: C0010B { + nested classes: { + } + members: { + } + } + class: C0010 { + nested classes: { + } + members: { + } + } + class: C0010 + class: C0010B + class: C0010C +} +------------------------------------------------------------------------------ +#SOURCELOG: ../testdata\cxxparser_ut\t_class_010_dtor.cpp +------------------------------------------------------------------------------ +#SOURCESTATUS: ../testdata\cxxparser_ut\t_class_011_ctor_member.cpp OK _ +#SOURCEOUPUT: ../testdata\cxxparser_ut\t_class_011_ctor_member.cpp +namespace: <GlobalNamespace> { + class: C0011B { + nested classes: { + } + members: { + symbol: x_ of type signed int + symbol: y_ of type signed int + } + } + class: C0011 { + nested classes: { + } + members: { + symbol: x_ of type signed int + } + } + class: C0011 + class: C0011B +} +------------------------------------------------------------------------------ +#SOURCELOG: ../testdata\cxxparser_ut\t_class_011_ctor_member.cpp +------------------------------------------------------------------------------ +#SOURCESTATUS: ../testdata\cxxparser_ut\t_class_012_ctor_base.cpp OK _ +#SOURCEOUPUT: ../testdata\cxxparser_ut\t_class_012_ctor_base.cpp +namespace: <GlobalNamespace> { + class: C0012C { + bases: { + type: ::C0012B + } + nested classes: { + } + members: { + } + } + class: C0012B { + bases: { + type: ::C0012A + } + nested classes: { + } + members: { + } + } + class: C0012A { + nested classes: { + } + members: { + symbol: x_ of type signed int + } + } + class: C0012A + class: C0012B + class: C0012C +} +------------------------------------------------------------------------------ +#SOURCELOG: ../testdata\cxxparser_ut\t_class_012_ctor_base.cpp +------------------------------------------------------------------------------ +#SOURCESTATUS: ../testdata\cxxparser_ut\t_class_013_error_recovery1.cpp FAILED 2 +#SOURCEOUPUT: ../testdata\cxxparser_ut\t_class_013_error_recovery1.cpp +namespace: <GlobalNamespace> { + class: C0012A { + nested classes: { + class: C0012A_MACRO { + nested classes: { + } + members: { + } + } + } + members: { + class: C0012A_MACRO + } + } + class: C0012A +} +------------------------------------------------------------------------------ +#SOURCELOG: ../testdata\cxxparser_ut\t_class_013_error_recovery1.cpp +#=> Error line 2 (offset 18): Error in declaration +"C0012A_MACRO()" +------------------------------------------------------------------------------ +#SOURCESTATUS: ../testdata\cxxparser_ut\t_class_014_inheritance_ns.cpp OK _ +#SOURCEOUPUT: ../testdata\cxxparser_ut\t_class_014_inheritance_ns.cpp +namespace: <GlobalNamespace> { + class: C14 { + nested classes: { + class: C14 { + nested classes: { + } + members: { + } + } + } + members: { + class: C14 + } + } + class: C0014 { + bases: { + type: ::C14::C14 + } + nested classes: { + } + members: { + } + } + class: C0014 + class: C14 +} +------------------------------------------------------------------------------ +#SOURCELOG: ../testdata\cxxparser_ut\t_class_014_inheritance_ns.cpp +------------------------------------------------------------------------------ +#SOURCESTATUS: ../testdata\cxxparser_ut\t_class_015_guess_fn.cpp OK _ +#SOURCEOUPUT: ../testdata\cxxparser_ut\t_class_015_guess_fn.cpp +namespace: <GlobalNamespace> { + class: C015 { + nested classes: { + class: MyException { + nested classes: { + } + members: { + symbol: what of type char + } + } + } + members: { + class: MyException + } + } + class: C015 +} +------------------------------------------------------------------------------ +#SOURCELOG: ../testdata\cxxparser_ut\t_class_015_guess_fn.cpp +------------------------------------------------------------------------------ +#SOURCESTATUS: ../testdata\cxxparser_ut\t_class_016_memberdef.cpp OK _ +#SOURCEOUPUT: ../testdata\cxxparser_ut\t_class_016_memberdef.cpp +namespace: <GlobalNamespace> { + class: C016 { + nested classes: { + } + members: { + symbol: initialize of type void + symbol: initialize of type void + } + } + class: C016 +} +------------------------------------------------------------------------------ +#SOURCELOG: ../testdata\cxxparser_ut\t_class_016_memberdef.cpp +------------------------------------------------------------------------------ +#SOURCESTATUS: ../testdata\cxxparser_ut\t_class_017_ctor_memberinit.cpp OK _ +#SOURCEOUPUT: ../testdata\cxxparser_ut\t_class_017_ctor_memberinit.cpp +namespace: <GlobalNamespace> { + class: C017 { + nested classes: { + } + members: { + symbol: x_ of type signed int + symbol: y_ of type signed int + symbol: z_ of type signed int + } + } + class: C017 +} +------------------------------------------------------------------------------ +#SOURCELOG: ../testdata\cxxparser_ut\t_class_017_ctor_memberinit.cpp +------------------------------------------------------------------------------ +#SOURCESTATUS: ../testdata\cxxparser_ut\t_class_018_purevirtual.cpp OK _ +#SOURCEOUPUT: ../testdata\cxxparser_ut\t_class_018_purevirtual.cpp +namespace: <GlobalNamespace> { + class: C0018B { + nested classes: { + } + members: { + } + } + class: C0018A { + nested classes: { + } + members: { + symbol: initialize of type void + symbol: walk of type void + } + } + class: C0018A + class: C0018B +} +------------------------------------------------------------------------------ +#SOURCELOG: ../testdata\cxxparser_ut\t_class_018_purevirtual.cpp +------------------------------------------------------------------------------ +#SOURCESTATUS: ../testdata\cxxparser_ut\t_decl_001_fundamental.cpp OK _ +#SOURCEOUPUT: ../testdata\cxxparser_ut\t_decl_001_fundamental.cpp +namespace: <GlobalNamespace> { + symbol: decl001_bool of type bool + symbol: decl001_float of type float + symbol: decl001_double of type double + symbol: decl001_void of type void + symbol: decl001_signed_int of type signed int + symbol: decl001_int of type signed int + symbol: decl001_unsigned_int of type unsigned int + symbol: decl001_char of type char + symbol: decl001_signed_char of type signed char + symbol: decl001_unsigned_char of type unsigned char + symbol: decl001_wchar_t of type wchar_t + symbol: decl001_signed_wchar_t of type signed wchar_t + symbol: decl001_unsigned_wchar_t of type unsigned wchar_t + symbol: decl001_signed_int of type signed long int + symbol: decl001_int of type signed long int + symbol: decl001_unsigned_int of type unsigned long int + symbol: decl001_signed_int of type signed short int + symbol: decl001_int of type signed short int + symbol: decl001_unsigned_int of type unsigned short int +} +------------------------------------------------------------------------------ +#SOURCELOG: ../testdata\cxxparser_ut\t_decl_001_fundamental.cpp +------------------------------------------------------------------------------ +#SOURCESTATUS: ../testdata\cxxparser_ut\t_decl_002_fundamental_init.cpp OK _ +#SOURCEOUPUT: ../testdata\cxxparser_ut\t_decl_002_fundamental_init.cpp +namespace: <GlobalNamespace> { + symbol: decl002_bool of type bool + symbol: decl002_float of type float + symbol: decl002_double of type double + symbol: decl002_void of type void + symbol: decl002_signed_int of type signed int + symbol: decl002_int of type signed int + symbol: decl002_unsigned_int of type unsigned int + symbol: decl002_char of type char + symbol: decl002_signed_char of type signed char + symbol: decl002_unsigned_char of type unsigned char + symbol: decl002_wchar_t of type wchar_t + symbol: decl002_signed_wchar_t of type signed wchar_t + symbol: decl002_unsigned_wchar_t of type unsigned wchar_t + symbol: decl002_signed_int of type signed long int + symbol: decl002_int of type signed long int + symbol: decl002_unsigned_int of type unsigned long int + symbol: decl002_signed_int of type signed short int + symbol: decl002_int of type signed short int + symbol: decl002_unsigned_int of type unsigned short int +} +------------------------------------------------------------------------------ +#SOURCELOG: ../testdata\cxxparser_ut\t_decl_002_fundamental_init.cpp +------------------------------------------------------------------------------ +#SOURCESTATUS: ../testdata\cxxparser_ut\t_decl_003_init_list.cpp OK _ +#SOURCEOUPUT: ../testdata\cxxparser_ut\t_decl_003_init_list.cpp +namespace: <GlobalNamespace> { + symbol: decl003a of type signed int + symbol: decl003b of type signed int +} +------------------------------------------------------------------------------ +#SOURCELOG: ../testdata\cxxparser_ut\t_decl_003_init_list.cpp +------------------------------------------------------------------------------ +#SOURCESTATUS: ../testdata\cxxparser_ut\t_decl_004_unknown_type.cpp OK _ +#SOURCEOUPUT: ../testdata\cxxparser_ut\t_decl_004_unknown_type.cpp +namespace: <GlobalNamespace> { + class: UInt8 { + nested classes: { + } + members: { + } + } + class: UInt8 + symbol: decl004 of type ::UInt8 +} +------------------------------------------------------------------------------ +#SOURCELOG: ../testdata\cxxparser_ut\t_decl_004_unknown_type.cpp +------------------------------------------------------------------------------ +#SOURCESTATUS: ../testdata\cxxparser_ut\t_decl_005_function.cpp OK _ +#SOURCEOUPUT: ../testdata\cxxparser_ut\t_decl_005_function.cpp +namespace: <GlobalNamespace> { + symbol: decl005a of type signed int +} +------------------------------------------------------------------------------ +#SOURCELOG: ../testdata\cxxparser_ut\t_decl_005_function.cpp +------------------------------------------------------------------------------ +#SOURCESTATUS: ../testdata\cxxparser_ut\t_decl_006_array.cpp OK _ +#SOURCEOUPUT: ../testdata\cxxparser_ut\t_decl_006_array.cpp +namespace: <GlobalNamespace> { + symbol: d006 of type signed int + symbol: d006b of type signed int + symbol: d006c of type signed int + symbol: d006d of type char +} +------------------------------------------------------------------------------ +#SOURCELOG: ../testdata\cxxparser_ut\t_decl_006_array.cpp +------------------------------------------------------------------------------ +#SOURCESTATUS: ../testdata\cxxparser_ut\t_decl_007_fwd_class.cpp OK _ +#SOURCEOUPUT: ../testdata\cxxparser_ut\t_decl_007_fwd_class.cpp +namespace: <GlobalNamespace> { + class: D007B { + nested classes: { + } + members: { + } + } + class: D007A { + nested classes: { + } + members: { + } + } + class: D007A + class: D007B +} +------------------------------------------------------------------------------ +#SOURCELOG: ../testdata\cxxparser_ut\t_decl_007_fwd_class.cpp +------------------------------------------------------------------------------ +#SOURCESTATUS: ../testdata\cxxparser_ut\t_enum_001_empty.cpp OK _ +#SOURCEOUPUT: ../testdata\cxxparser_ut\t_enum_001_empty.cpp +namespace: <GlobalNamespace> { + enum: t_enum_001_empty { + } +} +------------------------------------------------------------------------------ +#SOURCELOG: ../testdata\cxxparser_ut\t_enum_001_empty.cpp +------------------------------------------------------------------------------ +#SOURCESTATUS: ../testdata\cxxparser_ut\t_enum_002_empty_anonymous.cpp OK _ +#SOURCEOUPUT: ../testdata\cxxparser_ut\t_enum_002_empty_anonymous.cpp +namespace: <GlobalNamespace> { + enum: <anonymous> { + } +} +------------------------------------------------------------------------------ +#SOURCELOG: ../testdata\cxxparser_ut\t_enum_002_empty_anonymous.cpp +------------------------------------------------------------------------------ +#SOURCESTATUS: ../testdata\cxxparser_ut\t_enum_003.cpp OK _ +#SOURCEOUPUT: ../testdata\cxxparser_ut\t_enum_003.cpp +namespace: <GlobalNamespace> { + enum: t_enum_003_value1_assign { + value: assign_value1 + } + enum value: assign_value1 +} +------------------------------------------------------------------------------ +#SOURCELOG: ../testdata\cxxparser_ut\t_enum_003.cpp +------------------------------------------------------------------------------ +#SOURCESTATUS: ../testdata\cxxparser_ut\t_enum_004.cpp OK _ +#SOURCEOUPUT: ../testdata\cxxparser_ut\t_enum_004.cpp +namespace: <GlobalNamespace> { + enum: t_enum_003_empty { + } + enum: t_enum_003_value1 { + value: value1 + } + enum value: value1 + enum: t_enum_003_value1_assign { + value: assign_value1 + } + enum value: assign_value1 + enum: t_enum_003_valuen { + value: valuen_value1 + value: valuen_value2 + value: valuen_value3 + value: valuen_value4 + } + enum value: valuen_value1 + enum value: valuen_value2 + enum value: valuen_value3 + enum value: valuen_value4 + enum: <anonymous> { + } + enum: <anonymous> { + value: anonymous_value1_assign + } + enum value: anonymous_value1_assign + enum: <anonymous> { + value: anonymous_value1 + value: anonymous_value2 + value: anonymous_value3 + } + enum value: anonymous_value1 + enum value: anonymous_value2 + enum value: anonymous_value3 +} +------------------------------------------------------------------------------ +#SOURCELOG: ../testdata\cxxparser_ut\t_enum_004.cpp +------------------------------------------------------------------------------ +#SOURCESTATUS: ../testdata\cxxparser_ut\t_enum_005_trailing_comma.cpp OK _ +#SOURCEOUPUT: ../testdata\cxxparser_ut\t_enum_005_trailing_comma.cpp +namespace: <GlobalNamespace> { + enum: E005 { + value: v1 + value: v3 + } + enum value: v1 + enum value: v3 +} +------------------------------------------------------------------------------ +#SOURCELOG: ../testdata\cxxparser_ut\t_enum_005_trailing_comma.cpp +------------------------------------------------------------------------------ +#SOURCESTATUS: ../testdata\cxxparser_ut\t_function_001_skip_body.cpp OK _ +#SOURCEOUPUT: ../testdata\cxxparser_ut\t_function_001_skip_body.cpp +namespace: <GlobalNamespace> { + symbol: dummy of type void + symbol: getResult of type signed int + symbol: main of type signed int +} +------------------------------------------------------------------------------ +#SOURCELOG: ../testdata\cxxparser_ut\t_function_001_skip_body.cpp +------------------------------------------------------------------------------ +#SOURCESTATUS: ../testdata\cxxparser_ut\t_guess_001_inheritance.cpp OK _ +#SOURCEOUPUT: ../testdata\cxxparser_ut\t_guess_001_inheritance.cpp +namespace: <GlobalNamespace> { + class: std { + nested classes: { + class: exception { + nested classes: { + } + members: { + } + } + } + members: { + class: exception + } + } + class: Struct005 { + bases: { + type: ::std::exception + } + nested classes: { + } + members: { + } + } + class: Struct005 + class: std +} +------------------------------------------------------------------------------ +#SOURCELOG: ../testdata\cxxparser_ut\t_guess_001_inheritance.cpp +------------------------------------------------------------------------------ +#SOURCESTATUS: ../testdata\cxxparser_ut\t_macro_001.cpp FAILED 2 +#SOURCEOUPUT: ../testdata\cxxparser_ut\t_macro_001.cpp +namespace: <GlobalNamespace> { + class: CM001_DECLARE { + nested classes: { + } + members: { + } + } + class: CMacro001 { + nested classes: { + } + members: { + } + } + class: CMacro001 + class: CM001_DECLARE +} +------------------------------------------------------------------------------ +#SOURCELOG: ../testdata\cxxparser_ut\t_macro_001.cpp +#=> Error line 4 (offset 65): Error in declaration +"CM001_DECLARE(int, int);" +------------------------------------------------------------------------------ +#SOURCESTATUS: ../testdata\cxxparser_ut\t_ns_001_empty.cpp OK _ +#SOURCEOUPUT: ../testdata\cxxparser_ut\t_ns_001_empty.cpp +namespace: <GlobalNamespace> { + namespace: Test { + } +} +------------------------------------------------------------------------------ +#SOURCELOG: ../testdata\cxxparser_ut\t_ns_001_empty.cpp +------------------------------------------------------------------------------ +#SOURCESTATUS: ../testdata\cxxparser_ut\t_ns_002_nested.cpp OK _ +#SOURCEOUPUT: ../testdata\cxxparser_ut\t_ns_002_nested.cpp +namespace: <GlobalNamespace> { + namespace: Test { + namespace: Test2 { + } + } +} +------------------------------------------------------------------------------ +#SOURCELOG: ../testdata\cxxparser_ut\t_ns_002_nested.cpp +------------------------------------------------------------------------------ +#SOURCESTATUS: ../testdata\cxxparser_ut\t_ns_003_anonymous.cpp OK _ +#SOURCEOUPUT: ../testdata\cxxparser_ut\t_ns_003_anonymous.cpp +namespace: <GlobalNamespace> { +} +------------------------------------------------------------------------------ +#SOURCELOG: ../testdata\cxxparser_ut\t_ns_003_anonymous.cpp +------------------------------------------------------------------------------ +#SOURCESTATUS: ../testdata\cxxparser_ut\t_template_001_instantiation.cpp OK _ +#SOURCEOUPUT: ../testdata\cxxparser_ut\t_template_001_instantiation.cpp +namespace: <GlobalNamespace> { + class: T001 { + nested classes: { + } + members: { + symbol: values_ of type ::std::map<signed int, double> + } + } + class: std { + nested classes: { + } + members: { + template class: ::std::vector<class Arg1> + template class: ::std::map<class Arg1, class Arg2> + } + } + class: std + symbol: list of type ::std::vector<signed int> + class: T001 +} +------------------------------------------------------------------------------ +#SOURCELOG: ../testdata\cxxparser_ut\t_template_001_instantiation.cpp +------------------------------------------------------------------------------ +#SOURCESTATUS: ../testdata\cxxparser_ut\t_transunit_empty.cpp OK _ +#SOURCEOUPUT: ../testdata\cxxparser_ut\t_transunit_empty.cpp +namespace: <GlobalNamespace> { +} +------------------------------------------------------------------------------ +#SOURCELOG: ../testdata\cxxparser_ut\t_transunit_empty.cpp +------------------------------------------------------------------------------ +#SOURCESTATUS: ../testdata\cxxparser_ut\t_transunit_error.cpp FAILED 2 +#SOURCEOUPUT: ../testdata\cxxparser_ut\t_transunit_error.cpp +namespace: <GlobalNamespace> { +} +------------------------------------------------------------------------------ +#SOURCELOG: ../testdata\cxxparser_ut\t_transunit_error.cpp +#=> Error line 0 (offset 0): Error in declaration +"namespace\n +namespace namespace\n +namespace" +------------------------------------------------------------------------------ +#SOURCESTATUS: ../testdata\cxxparser_ut\t_transunit_error2.cpp OK _ +#SOURCEOUPUT: ../testdata\cxxparser_ut\t_transunit_error2.cpp +namespace: <GlobalNamespace> { +} +------------------------------------------------------------------------------ +#SOURCELOG: ../testdata\cxxparser_ut\t_transunit_error2.cpp +------------------------------------------------------------------------------ +#SOURCESTATUS: ../testdata\cxxparser_ut\t_typedef_001.cpp OK _ +#SOURCEOUPUT: ../testdata\cxxparser_ut\t_typedef_001.cpp +namespace: <GlobalNamespace> { + typedef: UInt of type unsigned int +} +#SOURCELOG: ../testdata\cxxparser_ut\t_typedef_001.cpp This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |