def Test(): __pychecker__ = 'unusednames=args' global check_release global check_range ParseOptions(['--testgen_opt=so_long,MyOpt=XYZ,goodbye']) if Generator.Run('AST') != 0: print 'Generate release: Failed.\n' return -1 if check_release != 1 or check_range != 0: print 'Gererate release: Failed to run.\n' return -1 check_release = 0 ParseOptions(['--testgen_opt="HELLO"', '--range=M14,M16']) if Generator.Run('AST') != 0: print 'Generate range: Failed.\n' return -1 if check_release != 0 or check_range != 1: print 'Gererate range: Failed to run.\n' return -1 print 'Generator test: Pass' return 0
def Main(args): # If no arguments are provided, assume we are trying to rebuild the # C headers with warnings off. try: if not args: args = [ '--wnone', '--cgen', '--range=start,end', '--pnacl', '--pnaclshim', '../native_client/src/untrusted/pnacl_irt_shim/pnacl_shim.c', '--tgen', ] current_dir = os.path.abspath(os.getcwd()) script_dir = os.path.abspath(os.path.dirname(__file__)) if current_dir != script_dir: print '\nIncorrect CWD, default run skipped.' print 'When running with no arguments set CWD to the scripts directory:' print '\t' + script_dir + '\n' print 'This ensures correct default paths and behavior.\n' return 1 filenames = ParseOptions(args) ast = ParseFiles(filenames) if ast.errors: print 'Found %d errors. Aborting build.\n' % ast.errors return 1 return Generator.Run(ast) except SystemExit, ec: print 'Exiting with %d' % ec.code sys.exit(ec.code)
def main(args): # Default invocation will verify the golden files are unchanged. failed = 0 if not args: args = ['--wnone', '--diff', '--test', '--dstroot=.'] ParseOptions(args) idldir = os.path.split(sys.argv[0])[0] idldir = os.path.join(idldir, 'test_cgen', '*.idl') filenames = glob.glob(idldir) ast = ParseFiles(filenames) if hgen.GenerateRelease(ast, 'M14', {}): print "Golden file for M14 failed." failed = 1 else: print "Golden file for M14 passed." idldir = os.path.split(sys.argv[0])[0] idldir = os.path.join(idldir, 'test_cgen_range', '*.idl') filenames = glob.glob(idldir) ast = ParseFiles(filenames) if hgen.GenerateRange(ast, ['M13', 'M14', 'M15'], {}): print "Golden file for M13-M15 failed." failed = 1 else: print "Golden file for M13-M15 passed." return failed
def Main(args): if not args: return Test() filenames = ParseOptions(args) ast = ParseFiles(filenames) return Generator.Run(ast)
def Main(): args = sys.argv[1:] # If no arguments are provided, assume we are trying to rebuild the # C headers with warnings off. if not args: args = [ '--wnone', '--cgen', '--range=start,end', '--pnacl', '--pnaclshim', '../native_client/src/untrusted/pnacl_irt_shim/pnacl_shim.c', ] current_dir = os.path.abspath(os.getcwd()) script_dir = os.path.abspath(os.path.dirname(__file__)) if current_dir != script_dir: print '\nIncorrect CWD, default run skipped.' print 'When running with no arguments set CWD to the scripts directory:' print '\t' + script_dir + '\n' print 'This ensures correct default paths and behavior.\n' return 1 filenames = ParseOptions(args) ast = ParseFiles(filenames) return Generator.Run(ast)
def Main(args): filenames = ParseOptions(args) if GetOption('test'): return TestFiles(filenames) ast = ParseFiles(filenames) for f in ast.GetListOf('File'): if f.GetProperty('ERRORS') > 0: print 'Skipping %s' % f.GetName() continue print DefineDepends(node) for node in f.GetChildren()[2:]: print Define(node, comment=True, prefix='tst_')
def main(args): filenames = ParseOptions(args) if GetOption('test'): return TestFiles(filenames) ast = ParseFiles(filenames) cgen = CSGen() for f in ast.GetListOf('File'): if f.GetProperty('ERRORS') > 0: print 'Skipping %s' % f.GetName() continue for node in f.GetChildren()[2:]: print cgen.Define(node, ast.releases, comment=True, prefix='tst_')
def Main(args): filenames = ParseOptions(args) test_releases = ['M13', 'M14', 'M15'] if not filenames: idldir = os.path.split(sys.argv[0])[0] idldir = os.path.join(idldir, 'test_gen_pnacl', '*.idl') filenames = glob.glob(idldir) filenames = sorted(filenames) if GetOption('test'): # Run the tests. return TestFiles(filenames, test_releases) # Otherwise, generate the output file (for potential use as golden file). ast = ParseFiles(filenames) return pnaclgen.GenerateRange(ast, test_releases, filenames)
def main(args): filenames = ParseOptions(args) ast = ParseFiles(filenames) rpcgen = RPCGen() files = ast.GetListOf('File') outname = GetOption('out') if outname == '': outname = 'out.cc' outfile = IDLOutFile(outname) emitted = set() for f in files: if f.GetName() == 'pp_macros.idl': GenerateDep(outfile, emitted, f, ast.releases) for f in files: GenerateDep(outfile, emitted, f, ast.releases) out = '' out += '#include "host/rpc.h"\n' out += '#include "json/json.cpp"\n' out += 'using namespace std;\n' out += 'using namespace JSON;\n' for declareOnly in [True, False]: for f in files: if f.GetProperty('ERRORS') > 0: print 'Skipping %s' % f.GetName() continue for node in f.GetChildren()[2:]: out += rpcgen.Define(node, ast.releases, declareOnly) out += 'static map<string, void*> gInterfaces;\n' out += '\n' out += 'typedef char* (*InterfaceMemberCallFunc)(const void*, JSONIterator&);\n' out += 'static map<string, InterfaceMemberCallFunc> gInterfaceMemberCallers;\n' out += '\n' out += 'void InitializeInterfaceList() {\n' for (interfaceString, interfaceStruct) in rpcgen.interfaceStructs: if interfaceString == "PPB_Flash_File_FileRef;2.0": interfaceString = "PPB_Flash_File_FileRef;2" elif interfaceString == "PPB_Flash_File_ModuleLocal;3.0": interfaceString = "PPB_Flash_File_ModuleLocal;3" elif interfaceString == "PPB_PDF;0.1": interfaceString = "PPB_PDF;1" out += ' gInterfaces.insert(pair<string, void*>("' + interfaceString + '", &' + interfaceStruct + '));\n' for (interfaceString, caller) in rpcgen.pppInterfaceGetters: out += ' gInterfaceMemberCallers.insert(pair<string, InterfaceMemberCallFunc>("' + interfaceString + '", ' + caller + '));\n' out += '};\n' out += '\n' outfile.Write(out) outfile.Close()
def Main(args): filenames = ParseOptions(args) try: tokens = FilesToTokens(filenames, GetOption('verbose')) values = [tok.value for tok in tokens] if GetOption('output'): sys.stdout.write(' <> '.join(values) + '\n') if GetOption('test'): if TestSame(values): return -1 if TestExpect(tokens): return -1 return 0 except lex.LexError as le: sys.stderr.write('%s\n' % str(le)) return -1
def Main(args): filenames = ParseOptions(args) if not filenames: gendir = os.path.join(GetOption('gen'), '*.h') filenames = sorted(glob.glob(gendir)) srcdir = os.path.join(GetOption('src'), '*.h') srcs = sorted(glob.glob(srcdir)) for name in srcs: name = os.path.split(name)[1] name = os.path.join(GetOption('gen'), name) if name not in filenames: print 'Missing: %s' % name for filename in filenames: gen = filename filename = filename[len(GetOption('gen')) + 1:] src = os.path.join(GetOption('src'), filename) diff = os.path.join(GetOption('diff'), filename) p = subprocess.Popen(['diff', src, gen], stdout=subprocess.PIPE) output, errors = p.communicate() try: input = open(diff, 'rt').read() except: input = '' if input != output: changes = GetChanges(output) else: changes = [] if changes: print "\n\nDelta between:\n src=%s\n gen=%s\n" % (src, gen) for change in changes: change.Dump() print 'Done with %s\n\n' % src if GetOption('ok'): open(diff, 'wt').write(output) if GetOption('halt'): return 1 else: print "\nSAME:\n src=%s\n gen=%s" % (src, gen) if input: print ' ** Matched expected diff. **' print '\n'
def Main(args): filenames = ParseOptions(args) # If testing... if GetOption('test'): errs = TestErrorFiles(filenames) errs = TestNamespaceFiles(filenames) if errs: ErrOut.Log("Parser failed with %d errors." % errs) return -1 return 0 # Otherwise, build the AST ast = ParseFiles(filenames) errs = ast.GetProperty('ERRORS') if errs: ErrOut.Log('Found %d error(s).' % errs) InfoOut.Log("%d files processed." % len(filenames)) return errs
def Main(args): global errors ParseOptions(args) InfoOut.SetConsole(True) namespace = IDLNamespace(None) FooXX = MockNode('foo', None, None) Foo1X = MockNode('foo', 1.0, None) Foo2X = MockNode('foo', 2.0, None) Foo3X = MockNode('foo', 3.0, None) # Verify we succeed with undeprecated adds AddOkay(namespace, FooXX) AddOkay(namespace, Foo1X) AddOkay(namespace, Foo3X) # Verify we fail to add a node between undeprecated releases AddError(namespace, Foo2X, 'Overlap in releases: 3.0 vs 2.0 when adding foo (2.0 : None)') BarXX = MockNode('bar', None, None) Bar12 = MockNode('bar', 1.0, 2.0) Bar23 = MockNode('bar', 2.0, 3.0) Bar34 = MockNode('bar', 3.0, 4.0) # Verify we succeed with fully qualified releases namespace = IDLNamespace(namespace) AddOkay(namespace, BarXX) AddOkay(namespace, Bar12) # Verify we warn when detecting a gap AddWarn(namespace, Bar34, 'Gap in release numbers.') # Verify we fail when inserting into this gap # (NOTE: while this could be legal, it is sloppy so we disallow it) AddError(namespace, Bar23, 'Declarations out of order.') # Verify local namespace VerifyFindOne(namespace, 'bar', 0.0, BarXX) VerifyFindAll(namespace, 'bar', 0.5, 1.5, [BarXX, Bar12]) # Verify the correct release of the object is found recursively VerifyFindOne(namespace, 'foo', 0.0, FooXX) VerifyFindOne(namespace, 'foo', 0.5, FooXX) VerifyFindOne(namespace, 'foo', 1.0, Foo1X) VerifyFindOne(namespace, 'foo', 1.5, Foo1X) VerifyFindOne(namespace, 'foo', 3.0, Foo3X) VerifyFindOne(namespace, 'foo', 100.0, Foo3X) # Verify the correct range of objects is found VerifyFindAll(namespace, 'foo', 0.0, 1.0, [FooXX]) VerifyFindAll(namespace, 'foo', 0.5, 1.0, [FooXX]) VerifyFindAll(namespace, 'foo', 1.0, 1.1, [Foo1X]) VerifyFindAll(namespace, 'foo', 0.5, 1.5, [FooXX, Foo1X]) VerifyFindAll(namespace, 'foo', 0.0, 3.0, [FooXX, Foo1X]) VerifyFindAll(namespace, 'foo', 3.0, 100.0, [Foo3X]) FooBar = MockNode('foobar', 1.0, 2.0) namespace = IDLNamespace(namespace) AddOkay(namespace, FooBar) if errors: print 'Test failed with %d errors.' % errors else: print 'Passed.' return errors
def Main(args): filenames = ParseOptions(args) ast = ParseFiles(filenames) return Generator.Run(ast)