def _TestWithPaths(searchPaths): self.assertEqual( resolver.CreateContextFromString(os.pathsep.join(searchPaths)), Ar.ResolverContext(Ar.DefaultResolverContext(searchPaths))) self.assertEqual( resolver.CreateContextFromStrings( [("", os.pathsep.join(searchPaths))]), Ar.ResolverContext(Ar.DefaultResolverContext(searchPaths)))
def test_Repr(self): ctxObj = Ar.DefaultResolverContext(["/test"]) ctx = Ar.ResolverContext(ctxObj) expectedRepr = "Ar.ResolverContext({})".format(repr(ctxObj)) self.assertEqual(str(ctx), expectedRepr) self.assertEqual(repr(ctx), expectedRepr)
def HasResolverContextClass(): try: ctx = Ar.ResolverContext() return True except: pass return False
def test_CreateContextFromString(self): resolver = Ar.GetResolver() # Exercise the CreateContextFromString(s) API in Python. # Since the _TestURIResolverContext object isn't wrapped to # Python these tests are a bit limited, but more extensive # tests are in the C++ version of this test. # CreateContextFromString with an empty URI scheme should # be equivalent to CreateContextFromString with no URI scheme. searchPaths = os.pathsep.join(["/a", "/b"]) self.assertEqual( resolver.CreateContextFromString(searchPaths), resolver.CreateContextFromString("", searchPaths)) # CreateContextFromStrings should be equivalent to creating an # Ar.ResolverContext combining the results of CreateContextFromString. self.assertEqual( Ar.ResolverContext( (resolver.CreateContextFromString("test", "context str"), resolver.CreateContextFromString("", searchPaths))), resolver.CreateContextFromStrings([ ("", searchPaths), ("test", "context str") ]))
def test_ImplicitConversion(self): """Test implicit conversion of a Python-wrapped context object when passed to a C++ function that takes an ArResolverContext.""" # Passing in None or an empty tuple or list should implicitly # convert to an empty Ar.ResolverContext() self.assertEqual(Ar._TestImplicitConversion(None), Ar.ResolverContext()) self.assertEqual(Ar._TestImplicitConversion(()), Ar.ResolverContext()) self.assertEqual(Ar._TestImplicitConversion([]), Ar.ResolverContext()) # Passing in a Python-wrapped context object or tuple or list # containing such objects should implicitly convert to an # Ar.ResolverContext holding these objects. ctxObj = Ar.DefaultResolverContext(["/test"]) ctx = Ar.ResolverContext(ctxObj) self.assertEqual(Ar._TestImplicitConversion(ctxObj), ctx) self.assertEqual(Ar._TestImplicitConversion((ctxObj, )), ctx) self.assertEqual(Ar._TestImplicitConversion([ ctxObj, ]), ctx) # Passing in an object that hasn't been registered as a context object # should result in an error. with self.assertRaises(TypeError): ctx = Ar._TestImplicitConversion(1) with self.assertRaises(TypeError): ctx = Ar._TestImplicitConversion((1, )) with self.assertRaises(TypeError): ctx = Ar._TestImplicitConversion([ 1, ]) with self.assertRaises(TypeError): ctx = Ar._TestImplicitConversion((1, ctxObj)) with self.assertRaises(TypeError): ctx = Ar._TestImplicitConversion([1, ctxObj])
def test_ExplicitConstruction(self): # Passing in None or an empty tuple or list to Ar.ResolverContext # should all result in creating an empty Ar.ResolverContext. self.assertEqual(Ar.ResolverContext(None), Ar.ResolverContext()) self.assertEqual(Ar.ResolverContext(()), Ar.ResolverContext()) self.assertEqual(Ar.ResolverContext([]), Ar.ResolverContext()) # Passing in a Python-wrapped context object or tuple or list # containing such objects should create an Ar.ResolverContext holding # these objects. ctxObj = Ar.DefaultResolverContext(["/test"]) ctx = Ar.ResolverContext(ctxObj) self.assertEqual(Ar.ResolverContext(ctxObj), ctx) self.assertEqual(Ar.ResolverContext((ctxObj, )), ctx) self.assertEqual(Ar.ResolverContext([ ctxObj, ]), ctx) # Passing in an object that hasn't been registered as a context object # should result in an error. with self.assertRaises(TypeError): ctx = Ar.ResolverContext(1) with self.assertRaises(TypeError): ctx = Ar.ResolverContext((1, )) with self.assertRaises(TypeError): ctx = Ar.ResolverContext([ 1, ]) with self.assertRaises(TypeError): ctx = Ar.ResolverContext((1, ctxObj)) with self.assertRaises(TypeError): ctx = Ar.ResolverContext([1, ctxObj])
def test_Get(self): ctxObj = Ar.DefaultResolverContext(["/test"]) ctx = Ar.ResolverContext(ctxObj) self.assertEqual(ctx.Get(), [ctxObj])
parser = argparse.ArgumentParser() parser.add_argument("resolverName", type=str, help=("Name of ArResolver subclass to test")) args = parser.parse_args() SetupPlugins() Ar.SetPreferredResolver(args.resolverName) r = Ar.GetResolver() # Call each method to see whether the corresponding virtual method # on the resolver is called. # This context manager calls ArResolver::BindContext when entered # and ArResolver::UnbindContext on exit. with Ar.ResolverContextBinder(Ar.ResolverContext()): pass r.CreateDefaultContext() r.CreateDefaultContextForAsset('foo') r.CreateContextFromString('foo') r.RefreshContext(Ar.ResolverContext()) r.GetCurrentContext() r.IsContextDependentPath('foo') # This context manager calls ArResolver::BeginCacheScope when entered # and ArResolver::EndCacheScope on exit. with Ar.ResolverScopedCache(): pass