def testPatternMatching(self): n = GafferTest.StringInOutNode() self.assertHashesValid(n) d = Gaffer.DeleteContextVariablesComputeNode() d["in"] = Gaffer.StringPlug() d["out"] = Gaffer.StringPlug(direction=Gaffer.Plug.Direction.Out) d["in"].setInput(n["out"]) c = Gaffer.ContextVariablesComputeNode() c["in"] = Gaffer.StringPlug() c["out"] = Gaffer.StringPlug(direction=Gaffer.Plug.Direction.Out) c["in"].setInput(d["out"]) n["in"].setValue("$a1_$a2_$b1_$b2_$c1_$c2") self.assertEqual(c["out"].getValue(), "_____") c["variables"].addMember("a1", IECore.StringData("A1")) c["variables"].addMember("a2", IECore.StringData("A2")) c["variables"].addMember("b1", IECore.StringData("B1")) c["variables"].addMember("b2", IECore.StringData("B2")) c["variables"].addMember("c1", IECore.StringData("C1")) c["variables"].addMember("c2", IECore.StringData("C2")) self.assertEqual(c["out"].getValue(), "A1_A2_B1_B2_C1_C2") d["variables"].setValue("a* c*") self.assertEqual(c["out"].getValue(), "__B1_B2__")
def testExtraVariables(self): s = Gaffer.ScriptNode() s["n"] = GafferTest.StringInOutNode() s["c"] = Gaffer.ContextVariablesComputeNode() s["c"]["in"] = Gaffer.StringPlug(flags=Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic) s["c"]["out"] = Gaffer.StringPlug(direction=Gaffer.Plug.Direction.Out, flags=Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic) s["c"]["in"].setInput(s["n"]["out"]) s["n"]["in"].setValue("$a") self.assertEqual(s["c"]["out"].getValue(), "") dirtied = GafferTest.CapturingSlot(s["c"].plugDirtiedSignal()) s["c"]["extraVariables"].setValue(IECore.CompoundData({"a": "A"})) self.failUnless(s["c"]["out"] in {p[0] for p in dirtied}) self.assertEqual(s["c"]["out"].getValue(), "A") # Extra variables trump regular variables of the same name s["c"]["variables"].addMember("a", IECore.StringData("B")) self.assertEqual(s["c"]["out"].getValue(), "A") s2 = Gaffer.ScriptNode() s2.execute(s.serialise()) self.assertEqual(s2["c"]["out"].getValue(), "A")
def test( self ) : n = GafferTest.StringInOutNode() self.assertHashesValid( n ) c = Gaffer.ContextVariablesComputeNode() c["in"] = Gaffer.StringPlug() c["out"] = Gaffer.StringPlug( direction = Gaffer.Plug.Direction.Out ) c["in"].setInput( n["out"] ) n["in"].setValue( "$a" ) self.assertEqual( c["out"].getValue(), "" ) c["variables"].addMember( "a", IECore.StringData( "A" ) ) self.assertEqual( c["out"].getValue(), "A" )
def testExtraVariablesExpression(self): s = Gaffer.ScriptNode() s["n"] = GafferTest.StringInOutNode() s["c"] = Gaffer.ContextVariablesComputeNode() s["c"]["in"] = Gaffer.StringPlug(flags=Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic) s["c"]["out"] = Gaffer.StringPlug(direction=Gaffer.Plug.Direction.Out, flags=Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic) s["c"]["in"].setInput(s["n"]["out"]) s["n"]["in"].setValue("$a$b$c") self.assertEqual(s["c"]["out"].getValue(), "") s["e"] = Gaffer.Expression() s["e"].setExpression( inspect.cleandoc(""" result = IECore.CompoundData() if context.getFrame() > 1 : result["a"] = "A" if context.getFrame() > 2 : result["b"] = "B" if context.getFrame() > 3 : result["c"] = "C" parent["c"]["extraVariables"] = result """)) with Gaffer.Context() as c: self.assertEqual(s["c"]["out"].getValue(), "") c.setFrame(2) self.assertEqual(s["c"]["out"].getValue(), "A") c.setFrame(3) self.assertEqual(s["c"]["out"].getValue(), "AB") c.setFrame(4) self.assertEqual(s["c"]["out"].getValue(), "ABC")
def testSerialisation( self ) : s = Gaffer.ScriptNode() s["n"] = GafferTest.StringInOutNode() s["c"] = Gaffer.ContextVariablesComputeNode() s["c"]["in"] = Gaffer.StringPlug( flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic ) s["c"]["out"] = Gaffer.StringPlug( direction = Gaffer.Plug.Direction.Out, flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic ) s["c"]["in"].setInput( s["n"]["out"] ) s["n"]["in"].setValue( "$a" ) self.assertEqual( s["c"]["out"].getValue(), "" ) s["c"]["variables"].addMember( "a", IECore.StringData( "A" ) ) self.assertEqual( s["c"]["out"].getValue(), "A" ) s2 = Gaffer.ScriptNode() s2.execute( s.serialise() ) self.assertEqual( s2["c"].keys(), s["c"].keys() ) self.assertEqual( s2["c"]["out"].getValue(), "A" )
def testDirtyPropagation( self ) : n = GafferTest.StringInOutNode() c = Gaffer.ContextVariablesComputeNode() c["in"] = Gaffer.StringPlug() c["out"] = Gaffer.StringPlug( direction = Gaffer.Plug.Direction.Out ) c["in"].setInput( n["out"] ) # adding a variable should dirty the output: dirtied = GafferTest.CapturingSlot( c.plugDirtiedSignal() ) c["variables"].addMember( "a", IECore.StringData( "A" ) ) self.failUnless( c["out"] in [ p[0] for p in dirtied ] ) # modifying the variable should dirty the output: dirtied = GafferTest.CapturingSlot( c.plugDirtiedSignal() ) c["variables"]["member1"]["value"].setValue("b") self.failUnless( c["out"] in [ p[0] for p in dirtied ] ) # removing the variable should also dirty the output: dirtied = GafferTest.CapturingSlot( c.plugDirtiedSignal() ) c["variables"].removeChild(c["variables"]["member1"]) self.failUnless( c["out"] in [ p[0] for p in dirtied ] )