def test(self):

        # Make a few input scenes

        script = Gaffer.ScriptNode()

        script["Cube"] = GafferScene.Cube("Cube")
        script["PathFilter"] = GafferScene.PathFilter("PathFilter")
        script["PathFilter"]["paths"].setValue(
            IECore.StringVectorData(['/cube']))
        script["Transform"] = GafferScene.Transform("Transform")
        script["Transform"]["in"].setInput(script["Cube"]["out"])
        script["Transform"]["filter"].setInput(script["PathFilter"]["out"])
        script["FreezeTransform"] = GafferScene.FreezeTransform(
            "FreezeTransform")
        script["FreezeTransform"]["in"].setInput(script["Transform"]["out"])
        script["FreezeTransform"]["filter"].setInput(
            script["PathFilter"]["out"])
        script["PrimitiveVariables"] = GafferScene.PrimitiveVariables(
            "PrimitiveVariables")
        script["PrimitiveVariables"]["primitiveVariables"].addChild(
            Gaffer.CompoundDataPlug.MemberPlug("member1"))
        script["PrimitiveVariables"]["primitiveVariables"]["member1"].addChild(
            Gaffer.StringPlug("name"))
        script["PrimitiveVariables"]["primitiveVariables"]["member1"].addChild(
            Gaffer.Color3fPlug("value"))
        script["PrimitiveVariables"]["primitiveVariables"]["member1"].addChild(
            Gaffer.BoolPlug("enabled", defaultValue=True))
        script["PrimitiveVariables"]["in"].setInput(
            script["FreezeTransform"]["out"])
        script["PrimitiveVariables"]["filter"].setInput(
            script["PathFilter"]["out"])
        script["PrimitiveVariables"]["primitiveVariables"]["member1"][
            "name"].setValue('Cs')
        script[
            "CollectPrimitiveVariables"] = GafferScene.CollectPrimitiveVariables(
                "CollectPrimitiveVariables")
        script["CollectPrimitiveVariables"]["in"].setInput(
            script["PrimitiveVariables"]["out"])
        script["CollectPrimitiveVariables"]["filter"].setInput(
            script["PathFilter"]["out"])
        script["Expression1"] = Gaffer.Expression("Expression1")
        script["Expression1"].setExpression(
            """
s =  context.get( "collect:primitiveVariableSuffix", "_suffix0" )
i = int( s[7] )
parent["Transform"]["transform"]["translate"] = imath.V3f( i )
parent["PrimitiveVariables"]["primitiveVariables"]["member1"]["value"] = imath.V3f( i )""",
            "python")

        defaultCube = IECoreScene.MeshPrimitive.createBox(
            imath.Box3f(imath.V3f(-0.5), imath.V3f(0.5)))
        defaultCubeOff1 = IECoreScene.MeshPrimitive.createBox(
            imath.Box3f(imath.V3f(0.5), imath.V3f(1.5)))
        defaultCubeOff2 = IECoreScene.MeshPrimitive.createBox(
            imath.Box3f(imath.V3f(1.5), imath.V3f(2.5)))

        self.assertEqual(
            set(script["CollectPrimitiveVariables"]["out"].object(
                "/cube").keys()), set(["P", "N", "uv", "Cs"]))
        self.assertEqual(
            script["CollectPrimitiveVariables"]["out"].object("/cube")["P"],
            defaultCube["P"])
        self.assertEqual(
            script["CollectPrimitiveVariables"]["out"].object("/cube")["N"],
            defaultCube["N"])
        self.assertEqual(
            script["CollectPrimitiveVariables"]["out"].object("/cube")["uv"],
            defaultCube["uv"])
        self.assertEqual(
            script["CollectPrimitiveVariables"]["out"].object("/cube")
            ["Cs"].data.value, imath.Color3f(0))

        script["CollectPrimitiveVariables"]["suffixes"].setValue(
            IECore.StringVectorData(['_suffix1', '_suffix2']))

        self.assertEqual(
            set(script["CollectPrimitiveVariables"]["out"].object(
                "/cube").keys()),
            set(["P", "N", "uv", "P_suffix1", "P_suffix2", "Cs"]))
        self.assertEqual(
            script["CollectPrimitiveVariables"]["out"].object("/cube")["P"],
            defaultCube["P"])
        self.assertEqual(
            script["CollectPrimitiveVariables"]["out"].object("/cube")
            ["P_suffix1"], defaultCubeOff1["P"])
        self.assertEqual(
            script["CollectPrimitiveVariables"]["out"].object("/cube")
            ["P_suffix2"], defaultCubeOff2["P"])
        self.assertEqual(
            script["CollectPrimitiveVariables"]["out"].object("/cube")
            ["Cs"].data.value, imath.Color3f(0))

        script["CollectPrimitiveVariables"]["primitiveVariables"].setValue(
            "P Cs")

        self.assertEqual(
            set(script["CollectPrimitiveVariables"]["out"].object(
                "/cube").keys()),
            set([
                "P", "N", "uv", "P_suffix1", "P_suffix2", "Cs", "Cs_suffix1",
                "Cs_suffix2"
            ]))
        self.assertEqual(
            script["CollectPrimitiveVariables"]["out"].object("/cube")["P"],
            defaultCube["P"])
        self.assertEqual(
            script["CollectPrimitiveVariables"]["out"].object("/cube")
            ["P_suffix1"], defaultCubeOff1["P"])
        self.assertEqual(
            script["CollectPrimitiveVariables"]["out"].object("/cube")
            ["P_suffix2"], defaultCubeOff2["P"])
        self.assertEqual(
            script["CollectPrimitiveVariables"]["out"].object("/cube")
            ["Cs"].data.value, imath.Color3f(0))
        self.assertEqual(
            script["CollectPrimitiveVariables"]["out"].object("/cube")
            ["Cs_suffix1"].data.value, imath.Color3f(1))
        self.assertEqual(
            script["CollectPrimitiveVariables"]["out"].object("/cube")
            ["Cs_suffix2"].data.value, imath.Color3f(2))

        script["CollectPrimitiveVariables"]["primitiveVariables"].setValue(
            "Cs")

        self.assertEqual(
            set(script["CollectPrimitiveVariables"]["out"].object(
                "/cube").keys()),
            set(["P", "N", "uv", "Cs", "Cs_suffix1", "Cs_suffix2"]))
        self.assertEqual(
            script["CollectPrimitiveVariables"]["out"].object("/cube")["P"],
            defaultCube["P"])
        self.assertEqual(
            script["CollectPrimitiveVariables"]["out"].object("/cube")
            ["Cs"].data.value, imath.Color3f(0))
        self.assertEqual(
            script["CollectPrimitiveVariables"]["out"].object("/cube")
            ["Cs_suffix1"].data.value, imath.Color3f(1))
        self.assertEqual(
            script["CollectPrimitiveVariables"]["out"].object("/cube")
            ["Cs_suffix2"].data.value, imath.Color3f(2))

        script["CollectPrimitiveVariables"]["suffixContextVariable"].setValue(
            "collect:customVar")

        self.assertEqual(
            set(script["CollectPrimitiveVariables"]["out"].object(
                "/cube").keys()),
            set(["P", "N", "uv", "Cs", "Cs_suffix1", "Cs_suffix2"]))
        self.assertEqual(
            script["CollectPrimitiveVariables"]["out"].object("/cube")["P"],
            defaultCube["P"])
        self.assertEqual(
            script["CollectPrimitiveVariables"]["out"].object("/cube")
            ["Cs"].data.value, imath.Color3f(0))
        self.assertEqual(
            script["CollectPrimitiveVariables"]["out"].object("/cube")
            ["Cs_suffix1"].data.value, imath.Color3f(0))
        self.assertEqual(
            script["CollectPrimitiveVariables"]["out"].object("/cube")
            ["Cs_suffix2"].data.value, imath.Color3f(0))

        script["CollectPrimitiveVariables"]["requireVariation"].setValue(True)

        self.assertEqual(
            set(script["CollectPrimitiveVariables"]["out"].object(
                "/cube").keys()), set(["P", "N", "uv", "Cs"]))
        self.assertEqual(
            script["CollectPrimitiveVariables"]["out"].object("/cube")["P"],
            defaultCube["P"])
        self.assertEqual(
            script["CollectPrimitiveVariables"]["out"].object("/cube")
            ["Cs"].data.value, imath.Color3f(0))

        self.assertEqual(
            script["CollectPrimitiveVariables"]["out"].objectHash("/cube"),
            script["PrimitiveVariables"]["out"].objectHash("/cube"))

        script["Expression1"].setExpression(
            """
s =  context.get( "collect:customVar", "_suffix0" )
i = int( s[7] )
parent["Transform"]["transform"]["translate"] = imath.V3f( i )
parent["PrimitiveVariables"]["primitiveVariables"]["member1"]["value"] = imath.V3f( i )""",
            "python")

        self.assertEqual(
            set(script["CollectPrimitiveVariables"]["out"].object(
                "/cube").keys()),
            set(["P", "N", "uv", "Cs", "Cs_suffix1", "Cs_suffix2"]))
        self.assertEqual(
            script["CollectPrimitiveVariables"]["out"].object("/cube")["P"],
            defaultCube["P"])
        self.assertEqual(
            script["CollectPrimitiveVariables"]["out"].object("/cube")
            ["Cs"].data.value, imath.Color3f(0))
        self.assertEqual(
            script["CollectPrimitiveVariables"]["out"].object("/cube")
            ["Cs_suffix1"].data.value, imath.Color3f(1))
        self.assertEqual(
            script["CollectPrimitiveVariables"]["out"].object("/cube")
            ["Cs_suffix2"].data.value, imath.Color3f(2))