diff --git a/modules/vstudio/tests/_tests.lua b/modules/vstudio/tests/_tests.lua
index 97ccf3cc..1d05e19b 100644
--- a/modules/vstudio/tests/_tests.lua
+++ b/modules/vstudio/tests/_tests.lua
@@ -84,6 +84,7 @@ return {
"vc2010/test_rule_targets.lua",
"vc2010/test_rule_vars.lua",
"vc2010/test_rule_xml.lua",
+ "vc2010/test_tokens.lua",
"vc2010/test_target_machine.lua",
"vc2010/test_user_file.lua",
"vc2010/test_vectorextensions.lua",
diff --git a/modules/vstudio/tests/vc2010/test_tokens.lua b/modules/vstudio/tests/vc2010/test_tokens.lua
new file mode 100644
index 00000000..22d4664e
--- /dev/null
+++ b/modules/vstudio/tests/vc2010/test_tokens.lua
@@ -0,0 +1,91 @@
+--
+-- test_tokens.lua
+-- Generate a NuGet packages.config file.
+-- Copyright (c) Jason Perkins and the Premake project
+--
+
+
+ local p = premake
+ local suite = test.declare("vstudio_vs2010_tokens")
+ local vc2010 = p.vstudio.vc2010
+
+
+--
+-- Setup
+--
+
+ local wks, prj
+
+ function suite.setup()
+ p.action.set("vs2010")
+
+ wks = test.createWorkspace()
+ end
+
+ local function prepare()
+ prj = test.getproject(wks, 1)
+ vc2010.files(prj)
+ end
+
+
+
+ function suite.customBuild_onBuildRuleMultipleBuildOutputs()
+ location "projects"
+ files { "hello.cg" }
+
+ filter "files:**.cg"
+ buildcommands { "cgc %{file.relpath}" }
+ buildoutputs { "%{file.basename}.a", "%{file.basename}.b" }
+ prepare()
+ test.capture [[
+
+
+ Document
+ cgc %(Identity)
+ ../%(Filename).a;../%(Filename).b
+
+
+ ]]
+ end
+
+ function suite.customBuild_onBuildRuleWithMessage()
+ location "projects"
+ files { "hello.cg" }
+ filter "files:**.cg"
+ buildmessage "Compiling shader %{file.relpath}"
+ buildcommands { "cgc %{file.relpath}" }
+ buildoutputs { "%{file.basename}.obj" }
+ prepare()
+ test.capture [[
+
+
+ Document
+ cgc %(Identity)
+ ../%(Filename).obj
+ Compiling shader %(Identity)
+
+
+ ]]
+ end
+
+ function suite.customBuild_onBuildRuleWithAdditionalInputs()
+ location "projects"
+ files { "hello.cg" }
+ filter "files:**.cg"
+ buildcommands { "cgc %{file.relpath}" }
+ buildoutputs { "%{file.basename}.obj" }
+ buildinputs { "common.cg.inc", "common.cg.inc2" }
+ prepare()
+ test.capture [[
+
+
+ Document
+ cgc %(Identity)
+ ../%(Filename).obj
+ ../common.cg.inc;../common.cg.inc2
+
+
+ ]]
+ end
+
+