public void generateControllerTest()
        {
            ShaderControllerGenerator generator = new ShaderControllerGenerator();
            Shader shader = Resources.Load <Shader>("TestShader");
            var    unit   = generator.generateGraphicController(shader, "Game");

            var Namespace = unit.Namespaces[0];

            Assert.AreEqual("Game", Namespace.Name);
            var Class = Namespace.Types[0];

            Assert.AreEqual(typeof(GraphMatPropCtrl).FullName, Class.BaseTypes[0].BaseType);
            Assert.AreEqual("TestShader" + "Controller", Class.Name);
            checkField(Class, typeof(int), "SHADER_ID", MemberAttributes.Public | MemberAttributes.Const, shader.GetInstanceID());
            checkField(Class, typeof(Color), "_Color");
            checkField(Class, typeof(float), "_Gray");
            var update = checkMethod(Class, MemberAttributes.Family | MemberAttributes.Override, typeof(void), "Update");

            checkCall(update, "SetColor", "_Color");
            checkCall(update, "SetFloat", "_Gray");
            var reset = checkMethod(Class, MemberAttributes.Family, typeof(void), "Reset");

            checkAssign(reset, "_Gray", "GetFloat", "_Gray");
            checkAssign(reset, "_Color", "GetColor", "_Color");
        }
	public static void GenerateShaderController(Shader shader, string outputPath)
	{
		//string shaderName = shader.name.Split('/').Last();

		ShaderControllerGenerator generator = new ShaderControllerGenerator();

		generator.Session = new Dictionary<string, object>();

		generator.Session["ControllerClassName"] = Path.GetFileNameWithoutExtension(outputPath);
		generator.Session["ShaderPathInternal"] = shader.name;

		generator.Session["Properties"] = GetShaderPropertyInfos(shader);

		generator.Initialize();

		string classDefinition = generator.TransformText();

		File.WriteAllText(outputPath, classDefinition);

		AssetDatabase.Refresh();
	}