diff --git a/Aegisub.sln b/Aegisub.sln
index ba818c3c6..2ea0375bb 100644
--- a/Aegisub.sln
+++ b/Aegisub.sln
@@ -74,12 +74,16 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "icu", "aegisub\build\icu\ic
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "googletest", "aegisub\build\googletest\googletest.vcxproj", "{FBE51B37-8B12-41E8-B5E0-F00A06B4BCD2}"
EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tests", "aegisub\build\tests\tests.vcxproj", "{49766286-2B5D-4177-A860-BD7CE1846EEF}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
Debug|x64 = Debug|x64
Debug-MinDep|Win32 = Debug-MinDep|Win32
Debug-MinDep|x64 = Debug-MinDep|x64
+ Debug-Tests|Win32 = Debug-Tests|Win32
+ Debug-Tests|x64 = Debug-Tests|x64
Release|Win32 = Release|Win32
Release|x64 = Release|x64
EndGlobalSection
@@ -92,6 +96,9 @@ Global
{9DDDB9E5-E4A1-423D-A224-F6D4E5AAC06A}.Debug-MinDep|Win32.Build.0 = Debug|Win32
{9DDDB9E5-E4A1-423D-A224-F6D4E5AAC06A}.Debug-MinDep|x64.ActiveCfg = Debug|x64
{9DDDB9E5-E4A1-423D-A224-F6D4E5AAC06A}.Debug-MinDep|x64.Build.0 = Debug|x64
+ {9DDDB9E5-E4A1-423D-A224-F6D4E5AAC06A}.Debug-Tests|Win32.ActiveCfg = Debug|Win32
+ {9DDDB9E5-E4A1-423D-A224-F6D4E5AAC06A}.Debug-Tests|x64.ActiveCfg = Debug|x64
+ {9DDDB9E5-E4A1-423D-A224-F6D4E5AAC06A}.Debug-Tests|x64.Build.0 = Debug|x64
{9DDDB9E5-E4A1-423D-A224-F6D4E5AAC06A}.Release|Win32.ActiveCfg = Release|Win32
{9DDDB9E5-E4A1-423D-A224-F6D4E5AAC06A}.Release|Win32.Build.0 = Release|Win32
{9DDDB9E5-E4A1-423D-A224-F6D4E5AAC06A}.Release|x64.ActiveCfg = Release|x64
@@ -102,6 +109,8 @@ Global
{C832EAF3-860D-4373-A02C-933626B47A5E}.Debug|x64.Build.0 = Debug|x64
{C832EAF3-860D-4373-A02C-933626B47A5E}.Debug-MinDep|Win32.ActiveCfg = Debug|Win32
{C832EAF3-860D-4373-A02C-933626B47A5E}.Debug-MinDep|x64.ActiveCfg = Debug|x64
+ {C832EAF3-860D-4373-A02C-933626B47A5E}.Debug-Tests|Win32.ActiveCfg = Debug|Win32
+ {C832EAF3-860D-4373-A02C-933626B47A5E}.Debug-Tests|x64.ActiveCfg = Debug|x64
{C832EAF3-860D-4373-A02C-933626B47A5E}.Release|Win32.ActiveCfg = Release|Win32
{C832EAF3-860D-4373-A02C-933626B47A5E}.Release|Win32.Build.0 = Release|Win32
{C832EAF3-860D-4373-A02C-933626B47A5E}.Release|x64.ActiveCfg = Release|x64
@@ -112,6 +121,8 @@ Global
{CC791693-6B28-40AC-879D-64A6C16468E3}.Debug|x64.Build.0 = Debug|x64
{CC791693-6B28-40AC-879D-64A6C16468E3}.Debug-MinDep|Win32.ActiveCfg = Debug|Win32
{CC791693-6B28-40AC-879D-64A6C16468E3}.Debug-MinDep|x64.ActiveCfg = Debug|x64
+ {CC791693-6B28-40AC-879D-64A6C16468E3}.Debug-Tests|Win32.ActiveCfg = Debug|Win32
+ {CC791693-6B28-40AC-879D-64A6C16468E3}.Debug-Tests|x64.ActiveCfg = Debug|x64
{CC791693-6B28-40AC-879D-64A6C16468E3}.Release|Win32.ActiveCfg = Release|Win32
{CC791693-6B28-40AC-879D-64A6C16468E3}.Release|Win32.Build.0 = Release|Win32
{CC791693-6B28-40AC-879D-64A6C16468E3}.Release|x64.ActiveCfg = Release|x64
@@ -124,6 +135,10 @@ Global
{BB3FED86-DB7A-4DC7-964A-260FB86CDE61}.Debug-MinDep|Win32.Build.0 = Debug|Win32
{BB3FED86-DB7A-4DC7-964A-260FB86CDE61}.Debug-MinDep|x64.ActiveCfg = Debug|x64
{BB3FED86-DB7A-4DC7-964A-260FB86CDE61}.Debug-MinDep|x64.Build.0 = Debug|x64
+ {BB3FED86-DB7A-4DC7-964A-260FB86CDE61}.Debug-Tests|Win32.ActiveCfg = Debug|Win32
+ {BB3FED86-DB7A-4DC7-964A-260FB86CDE61}.Debug-Tests|Win32.Build.0 = Debug|Win32
+ {BB3FED86-DB7A-4DC7-964A-260FB86CDE61}.Debug-Tests|x64.ActiveCfg = Debug|x64
+ {BB3FED86-DB7A-4DC7-964A-260FB86CDE61}.Debug-Tests|x64.Build.0 = Debug|x64
{BB3FED86-DB7A-4DC7-964A-260FB86CDE61}.Release|Win32.ActiveCfg = Release|Win32
{BB3FED86-DB7A-4DC7-964A-260FB86CDE61}.Release|Win32.Build.0 = Release|Win32
{BB3FED86-DB7A-4DC7-964A-260FB86CDE61}.Release|x64.ActiveCfg = Release|x64
@@ -134,6 +149,8 @@ Global
{965054D2-44F2-4EB2-9879-051CC3D7EF08}.Debug|x64.Build.0 = Debug|x64
{965054D2-44F2-4EB2-9879-051CC3D7EF08}.Debug-MinDep|Win32.ActiveCfg = Debug|Win32
{965054D2-44F2-4EB2-9879-051CC3D7EF08}.Debug-MinDep|x64.ActiveCfg = Debug|x64
+ {965054D2-44F2-4EB2-9879-051CC3D7EF08}.Debug-Tests|Win32.ActiveCfg = Debug|Win32
+ {965054D2-44F2-4EB2-9879-051CC3D7EF08}.Debug-Tests|x64.ActiveCfg = Debug|x64
{965054D2-44F2-4EB2-9879-051CC3D7EF08}.Release|Win32.ActiveCfg = Release|Win32
{965054D2-44F2-4EB2-9879-051CC3D7EF08}.Release|Win32.Build.0 = Release|Win32
{965054D2-44F2-4EB2-9879-051CC3D7EF08}.Release|x64.ActiveCfg = Release|x64
@@ -144,6 +161,8 @@ Global
{BD00D65F-24DA-4784-8860-3B972EA125FC}.Debug|x64.Build.0 = Debug|x64
{BD00D65F-24DA-4784-8860-3B972EA125FC}.Debug-MinDep|Win32.ActiveCfg = Debug|Win32
{BD00D65F-24DA-4784-8860-3B972EA125FC}.Debug-MinDep|x64.ActiveCfg = Debug|x64
+ {BD00D65F-24DA-4784-8860-3B972EA125FC}.Debug-Tests|Win32.ActiveCfg = Debug|Win32
+ {BD00D65F-24DA-4784-8860-3B972EA125FC}.Debug-Tests|x64.ActiveCfg = Debug|x64
{BD00D65F-24DA-4784-8860-3B972EA125FC}.Release|Win32.ActiveCfg = Release|Win32
{BD00D65F-24DA-4784-8860-3B972EA125FC}.Release|Win32.Build.0 = Release|Win32
{BD00D65F-24DA-4784-8860-3B972EA125FC}.Release|x64.ActiveCfg = Release|x64
@@ -154,26 +173,32 @@ Global
{5391A8B1-9C70-4DC4-92AD-D3E34C6B803F}.Debug|x64.Build.0 = Debug|x64
{5391A8B1-9C70-4DC4-92AD-D3E34C6B803F}.Debug-MinDep|Win32.ActiveCfg = Debug|Win32
{5391A8B1-9C70-4DC4-92AD-D3E34C6B803F}.Debug-MinDep|x64.ActiveCfg = Debug|x64
+ {5391A8B1-9C70-4DC4-92AD-D3E34C6B803F}.Debug-Tests|Win32.ActiveCfg = Debug|Win32
+ {5391A8B1-9C70-4DC4-92AD-D3E34C6B803F}.Debug-Tests|x64.ActiveCfg = Debug|x64
{5391A8B1-9C70-4DC4-92AD-D3E34C6B803F}.Release|Win32.ActiveCfg = Release|Win32
{5391A8B1-9C70-4DC4-92AD-D3E34C6B803F}.Release|Win32.Build.0 = Release|Win32
{5391A8B1-9C70-4DC4-92AD-D3E34C6B803F}.Release|x64.ActiveCfg = Release|x64
{5391A8B1-9C70-4DC4-92AD-D3E34C6B803F}.Release|x64.Build.0 = Release|x64
{08AF2BCC-FCDD-4F0E-8B41-59A6E634F2E8}.Debug|Win32.ActiveCfg = Debug|Win32
{08AF2BCC-FCDD-4F0E-8B41-59A6E634F2E8}.Debug|Win32.Build.0 = Debug|Win32
- {08AF2BCC-FCDD-4F0E-8B41-59A6E634F2E8}.Debug|x64.ActiveCfg = Debug|Win32
- {08AF2BCC-FCDD-4F0E-8B41-59A6E634F2E8}.Debug|x64.Build.0 = Debug|Win32
+ {08AF2BCC-FCDD-4F0E-8B41-59A6E634F2E8}.Debug|x64.ActiveCfg = Debug|x64
+ {08AF2BCC-FCDD-4F0E-8B41-59A6E634F2E8}.Debug|x64.Build.0 = Debug|x64
{08AF2BCC-FCDD-4F0E-8B41-59A6E634F2E8}.Debug-MinDep|Win32.ActiveCfg = Debug|Win32
{08AF2BCC-FCDD-4F0E-8B41-59A6E634F2E8}.Debug-MinDep|x64.ActiveCfg = Debug|Win32
+ {08AF2BCC-FCDD-4F0E-8B41-59A6E634F2E8}.Debug-Tests|Win32.ActiveCfg = Debug|Win32
+ {08AF2BCC-FCDD-4F0E-8B41-59A6E634F2E8}.Debug-Tests|x64.ActiveCfg = Debug|x64
{08AF2BCC-FCDD-4F0E-8B41-59A6E634F2E8}.Release|Win32.ActiveCfg = Release|Win32
{08AF2BCC-FCDD-4F0E-8B41-59A6E634F2E8}.Release|Win32.Build.0 = Release|Win32
- {08AF2BCC-FCDD-4F0E-8B41-59A6E634F2E8}.Release|x64.ActiveCfg = Release|Win32
- {08AF2BCC-FCDD-4F0E-8B41-59A6E634F2E8}.Release|x64.Build.0 = Release|Win32
+ {08AF2BCC-FCDD-4F0E-8B41-59A6E634F2E8}.Release|x64.ActiveCfg = Release|x64
+ {08AF2BCC-FCDD-4F0E-8B41-59A6E634F2E8}.Release|x64.Build.0 = Release|x64
{7B56955D-5162-4698-AA5B-47484EDC8783}.Debug|Win32.ActiveCfg = Debug|Win32
{7B56955D-5162-4698-AA5B-47484EDC8783}.Debug|Win32.Build.0 = Debug|Win32
{7B56955D-5162-4698-AA5B-47484EDC8783}.Debug|x64.ActiveCfg = Debug|x64
{7B56955D-5162-4698-AA5B-47484EDC8783}.Debug|x64.Build.0 = Debug|x64
{7B56955D-5162-4698-AA5B-47484EDC8783}.Debug-MinDep|Win32.ActiveCfg = Debug|Win32
{7B56955D-5162-4698-AA5B-47484EDC8783}.Debug-MinDep|x64.ActiveCfg = Debug|x64
+ {7B56955D-5162-4698-AA5B-47484EDC8783}.Debug-Tests|Win32.ActiveCfg = Debug|Win32
+ {7B56955D-5162-4698-AA5B-47484EDC8783}.Debug-Tests|x64.ActiveCfg = Debug|x64
{7B56955D-5162-4698-AA5B-47484EDC8783}.Release|Win32.ActiveCfg = Release|Win32
{7B56955D-5162-4698-AA5B-47484EDC8783}.Release|Win32.Build.0 = Release|Win32
{7B56955D-5162-4698-AA5B-47484EDC8783}.Release|x64.ActiveCfg = Release|x64
@@ -184,6 +209,8 @@ Global
{EA3DCC95-2423-4EA0-A508-7A427B4C0594}.Debug|x64.Build.0 = Debug|x64
{EA3DCC95-2423-4EA0-A508-7A427B4C0594}.Debug-MinDep|Win32.ActiveCfg = Debug|Win32
{EA3DCC95-2423-4EA0-A508-7A427B4C0594}.Debug-MinDep|x64.ActiveCfg = Debug|x64
+ {EA3DCC95-2423-4EA0-A508-7A427B4C0594}.Debug-Tests|Win32.ActiveCfg = Debug|Win32
+ {EA3DCC95-2423-4EA0-A508-7A427B4C0594}.Debug-Tests|x64.ActiveCfg = Debug|x64
{EA3DCC95-2423-4EA0-A508-7A427B4C0594}.Release|Win32.ActiveCfg = Release|Win32
{EA3DCC95-2423-4EA0-A508-7A427B4C0594}.Release|Win32.Build.0 = Release|Win32
{EA3DCC95-2423-4EA0-A508-7A427B4C0594}.Release|x64.ActiveCfg = Release|x64
@@ -194,6 +221,8 @@ Global
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug|x64.Build.0 = Debug|x64
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug-MinDep|Win32.ActiveCfg = Debug|Win32
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug-MinDep|x64.ActiveCfg = Debug|x64
+ {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug-Tests|Win32.ActiveCfg = Debug|Win32
+ {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug-Tests|x64.ActiveCfg = Debug|x64
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release|Win32.ActiveCfg = Release|Win32
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release|Win32.Build.0 = Release|Win32
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release|x64.ActiveCfg = Release|x64
@@ -204,6 +233,8 @@ Global
{AD56899E-961B-47B7-BD0F-14D0DA50D141}.Debug|x64.Build.0 = Debug|x64
{AD56899E-961B-47B7-BD0F-14D0DA50D141}.Debug-MinDep|Win32.ActiveCfg = Debug|Win32
{AD56899E-961B-47B7-BD0F-14D0DA50D141}.Debug-MinDep|x64.ActiveCfg = Debug|x64
+ {AD56899E-961B-47B7-BD0F-14D0DA50D141}.Debug-Tests|Win32.ActiveCfg = Debug|Win32
+ {AD56899E-961B-47B7-BD0F-14D0DA50D141}.Debug-Tests|x64.ActiveCfg = Debug|x64
{AD56899E-961B-47B7-BD0F-14D0DA50D141}.Release|Win32.ActiveCfg = Release|Win32
{AD56899E-961B-47B7-BD0F-14D0DA50D141}.Release|Win32.Build.0 = Release|Win32
{AD56899E-961B-47B7-BD0F-14D0DA50D141}.Release|x64.ActiveCfg = Release|x64
@@ -214,6 +245,8 @@ Global
{15C79E75-F5F6-451D-B870-94ED02AF257E}.Debug|x64.Build.0 = Debug|Any CPU
{15C79E75-F5F6-451D-B870-94ED02AF257E}.Debug-MinDep|Win32.ActiveCfg = Debug|Any CPU
{15C79E75-F5F6-451D-B870-94ED02AF257E}.Debug-MinDep|x64.ActiveCfg = Debug|Any CPU
+ {15C79E75-F5F6-451D-B870-94ED02AF257E}.Debug-Tests|Win32.ActiveCfg = Debug|Any CPU
+ {15C79E75-F5F6-451D-B870-94ED02AF257E}.Debug-Tests|x64.ActiveCfg = Debug|Any CPU
{15C79E75-F5F6-451D-B870-94ED02AF257E}.Release|Win32.ActiveCfg = Release|Any CPU
{15C79E75-F5F6-451D-B870-94ED02AF257E}.Release|Win32.Build.0 = Release|Any CPU
{15C79E75-F5F6-451D-B870-94ED02AF257E}.Release|x64.ActiveCfg = Release|Any CPU
@@ -224,6 +257,8 @@ Global
{FB8E8D19-A4D6-4181-943C-282075F49B41}.Debug|x64.Build.0 = Debug|x64
{FB8E8D19-A4D6-4181-943C-282075F49B41}.Debug-MinDep|Win32.ActiveCfg = Debug|Win32
{FB8E8D19-A4D6-4181-943C-282075F49B41}.Debug-MinDep|x64.ActiveCfg = Debug|x64
+ {FB8E8D19-A4D6-4181-943C-282075F49B41}.Debug-Tests|Win32.ActiveCfg = Debug|Win32
+ {FB8E8D19-A4D6-4181-943C-282075F49B41}.Debug-Tests|x64.ActiveCfg = Debug|x64
{FB8E8D19-A4D6-4181-943C-282075F49B41}.Release|Win32.ActiveCfg = Release|Win32
{FB8E8D19-A4D6-4181-943C-282075F49B41}.Release|Win32.Build.0 = Release|Win32
{FB8E8D19-A4D6-4181-943C-282075F49B41}.Release|x64.ActiveCfg = Release|x64
@@ -234,6 +269,8 @@ Global
{AA137613-96A1-4388-8905-71345B4F8F87}.Debug|x64.Build.0 = Debug|x64
{AA137613-96A1-4388-8905-71345B4F8F87}.Debug-MinDep|Win32.ActiveCfg = Debug|Win32
{AA137613-96A1-4388-8905-71345B4F8F87}.Debug-MinDep|x64.ActiveCfg = Debug|x64
+ {AA137613-96A1-4388-8905-71345B4F8F87}.Debug-Tests|Win32.ActiveCfg = Debug|Win32
+ {AA137613-96A1-4388-8905-71345B4F8F87}.Debug-Tests|x64.ActiveCfg = Debug|x64
{AA137613-96A1-4388-8905-71345B4F8F87}.Release|Win32.ActiveCfg = Release|Win32
{AA137613-96A1-4388-8905-71345B4F8F87}.Release|Win32.Build.0 = Release|Win32
{AA137613-96A1-4388-8905-71345B4F8F87}.Release|x64.ActiveCfg = Release|x64
@@ -244,6 +281,8 @@ Global
{F934AB7B-186B-4E96-B20C-A58C38C1B819}.Debug|x64.Build.0 = Debug|x64
{F934AB7B-186B-4E96-B20C-A58C38C1B819}.Debug-MinDep|Win32.ActiveCfg = Debug|Win32
{F934AB7B-186B-4E96-B20C-A58C38C1B819}.Debug-MinDep|x64.ActiveCfg = Debug|x64
+ {F934AB7B-186B-4E96-B20C-A58C38C1B819}.Debug-Tests|Win32.ActiveCfg = Debug|Win32
+ {F934AB7B-186B-4E96-B20C-A58C38C1B819}.Debug-Tests|x64.ActiveCfg = Debug|x64
{F934AB7B-186B-4E96-B20C-A58C38C1B819}.Release|Win32.ActiveCfg = Release|Win32
{F934AB7B-186B-4E96-B20C-A58C38C1B819}.Release|Win32.Build.0 = Release|Win32
{F934AB7B-186B-4E96-B20C-A58C38C1B819}.Release|x64.ActiveCfg = Release|x64
@@ -254,22 +293,28 @@ Global
{10F22A5A-DD9E-44A1-BA2E-2A9A7C78B0EE}.Debug|x64.Build.0 = Debug|x64
{10F22A5A-DD9E-44A1-BA2E-2A9A7C78B0EE}.Debug-MinDep|Win32.ActiveCfg = Debug|Win32
{10F22A5A-DD9E-44A1-BA2E-2A9A7C78B0EE}.Debug-MinDep|x64.ActiveCfg = Debug|x64
+ {10F22A5A-DD9E-44A1-BA2E-2A9A7C78B0EE}.Debug-Tests|Win32.ActiveCfg = Debug|Win32
+ {10F22A5A-DD9E-44A1-BA2E-2A9A7C78B0EE}.Debug-Tests|x64.ActiveCfg = Debug|x64
{10F22A5A-DD9E-44A1-BA2E-2A9A7C78B0EE}.Release|Win32.ActiveCfg = Release|Win32
{10F22A5A-DD9E-44A1-BA2E-2A9A7C78B0EE}.Release|Win32.Build.0 = Release|Win32
{10F22A5A-DD9E-44A1-BA2E-2A9A7C78B0EE}.Release|x64.ActiveCfg = Release|x64
{10F22A5A-DD9E-44A1-BA2E-2A9A7C78B0EE}.Release|x64.Build.0 = Release|x64
{472212DF-99E8-4B73-9736-8500616D8A80}.Debug|Win32.ActiveCfg = Debug|Win32
- {472212DF-99E8-4B73-9736-8500616D8A80}.Debug|x64.ActiveCfg = Debug|Win32
+ {472212DF-99E8-4B73-9736-8500616D8A80}.Debug|x64.ActiveCfg = Debug|x64
{472212DF-99E8-4B73-9736-8500616D8A80}.Debug-MinDep|Win32.ActiveCfg = Debug|Win32
{472212DF-99E8-4B73-9736-8500616D8A80}.Debug-MinDep|x64.ActiveCfg = Debug|Win32
+ {472212DF-99E8-4B73-9736-8500616D8A80}.Debug-Tests|Win32.ActiveCfg = Debug|Win32
+ {472212DF-99E8-4B73-9736-8500616D8A80}.Debug-Tests|x64.ActiveCfg = Debug|x64
{472212DF-99E8-4B73-9736-8500616D8A80}.Release|Win32.ActiveCfg = Debug|Win32
- {472212DF-99E8-4B73-9736-8500616D8A80}.Release|x64.ActiveCfg = Debug|Win32
+ {472212DF-99E8-4B73-9736-8500616D8A80}.Release|x64.ActiveCfg = Debug|x64
{0518D6C0-7BF6-4FD1-91FB-191BD10DB2AC}.Debug|Win32.ActiveCfg = Debug|Win32
{0518D6C0-7BF6-4FD1-91FB-191BD10DB2AC}.Debug|Win32.Build.0 = Debug|Win32
{0518D6C0-7BF6-4FD1-91FB-191BD10DB2AC}.Debug|x64.ActiveCfg = Debug|x64
{0518D6C0-7BF6-4FD1-91FB-191BD10DB2AC}.Debug|x64.Build.0 = Debug|x64
{0518D6C0-7BF6-4FD1-91FB-191BD10DB2AC}.Debug-MinDep|Win32.ActiveCfg = Debug|Win32
{0518D6C0-7BF6-4FD1-91FB-191BD10DB2AC}.Debug-MinDep|x64.ActiveCfg = Debug|x64
+ {0518D6C0-7BF6-4FD1-91FB-191BD10DB2AC}.Debug-Tests|Win32.ActiveCfg = Debug|Win32
+ {0518D6C0-7BF6-4FD1-91FB-191BD10DB2AC}.Debug-Tests|x64.ActiveCfg = Debug|x64
{0518D6C0-7BF6-4FD1-91FB-191BD10DB2AC}.Release|Win32.ActiveCfg = Release|Win32
{0518D6C0-7BF6-4FD1-91FB-191BD10DB2AC}.Release|Win32.Build.0 = Release|Win32
{0518D6C0-7BF6-4FD1-91FB-191BD10DB2AC}.Release|x64.ActiveCfg = Release|x64
@@ -280,6 +325,8 @@ Global
{8804F253-DA67-4CC4-926B-0CD2AEE5778D}.Debug|x64.Build.0 = Debug|x64
{8804F253-DA67-4CC4-926B-0CD2AEE5778D}.Debug-MinDep|Win32.ActiveCfg = Debug|Win32
{8804F253-DA67-4CC4-926B-0CD2AEE5778D}.Debug-MinDep|x64.ActiveCfg = Debug|x64
+ {8804F253-DA67-4CC4-926B-0CD2AEE5778D}.Debug-Tests|Win32.ActiveCfg = Debug|Win32
+ {8804F253-DA67-4CC4-926B-0CD2AEE5778D}.Debug-Tests|x64.ActiveCfg = Debug|x64
{8804F253-DA67-4CC4-926B-0CD2AEE5778D}.Release|Win32.ActiveCfg = Release|Win32
{8804F253-DA67-4CC4-926B-0CD2AEE5778D}.Release|Win32.Build.0 = Release|Win32
{8804F253-DA67-4CC4-926B-0CD2AEE5778D}.Release|x64.ActiveCfg = Release|x64
@@ -288,16 +335,22 @@ Global
{5B0E9978-E76F-4BBC-8194-228323F59B53}.Debug|x64.ActiveCfg = Debug|x64
{5B0E9978-E76F-4BBC-8194-228323F59B53}.Debug-MinDep|Win32.ActiveCfg = Debug|Win32
{5B0E9978-E76F-4BBC-8194-228323F59B53}.Debug-MinDep|x64.ActiveCfg = Debug|x64
+ {5B0E9978-E76F-4BBC-8194-228323F59B53}.Debug-Tests|Win32.ActiveCfg = Debug|Win32
+ {5B0E9978-E76F-4BBC-8194-228323F59B53}.Debug-Tests|x64.ActiveCfg = Debug|x64
{5B0E9978-E76F-4BBC-8194-228323F59B53}.Release|Win32.ActiveCfg = Release|Win32
{5B0E9978-E76F-4BBC-8194-228323F59B53}.Release|x64.ActiveCfg = Release|x64
{A649D828-A399-4D81-ADEF-94CFDBA7847F}.Debug|Win32.ActiveCfg = Debug|Win32
{A649D828-A399-4D81-ADEF-94CFDBA7847F}.Debug|Win32.Build.0 = Debug|Win32
- {A649D828-A399-4D81-ADEF-94CFDBA7847F}.Debug|x64.ActiveCfg = Debug|Win32
+ {A649D828-A399-4D81-ADEF-94CFDBA7847F}.Debug|x64.ActiveCfg = Debug|x64
+ {A649D828-A399-4D81-ADEF-94CFDBA7847F}.Debug|x64.Build.0 = Debug|x64
{A649D828-A399-4D81-ADEF-94CFDBA7847F}.Debug-MinDep|Win32.ActiveCfg = Debug|Win32
{A649D828-A399-4D81-ADEF-94CFDBA7847F}.Debug-MinDep|x64.ActiveCfg = Debug|Win32
+ {A649D828-A399-4D81-ADEF-94CFDBA7847F}.Debug-Tests|Win32.ActiveCfg = Debug|Win32
+ {A649D828-A399-4D81-ADEF-94CFDBA7847F}.Debug-Tests|x64.ActiveCfg = Debug|x64
{A649D828-A399-4D81-ADEF-94CFDBA7847F}.Release|Win32.ActiveCfg = Release|Win32
{A649D828-A399-4D81-ADEF-94CFDBA7847F}.Release|Win32.Build.0 = Release|Win32
- {A649D828-A399-4D81-ADEF-94CFDBA7847F}.Release|x64.ActiveCfg = Release|Win32
+ {A649D828-A399-4D81-ADEF-94CFDBA7847F}.Release|x64.ActiveCfg = Release|x64
+ {A649D828-A399-4D81-ADEF-94CFDBA7847F}.Release|x64.Build.0 = Release|x64
{F934AB7B-186B-4E96-B20C-A58C38C1B818}.Debug|Win32.ActiveCfg = Debug|Win32
{F934AB7B-186B-4E96-B20C-A58C38C1B818}.Debug|Win32.Build.0 = Debug|Win32
{F934AB7B-186B-4E96-B20C-A58C38C1B818}.Debug|x64.ActiveCfg = Debug|x64
@@ -305,18 +358,38 @@ Global
{F934AB7B-186B-4E96-B20C-A58C38C1B818}.Debug-MinDep|Win32.ActiveCfg = Debug|Win32
{F934AB7B-186B-4E96-B20C-A58C38C1B818}.Debug-MinDep|x64.ActiveCfg = Debug|x64
{F934AB7B-186B-4E96-B20C-A58C38C1B818}.Debug-MinDep|x64.Build.0 = Debug|x64
+ {F934AB7B-186B-4E96-B20C-A58C38C1B818}.Debug-Tests|Win32.ActiveCfg = Debug|Win32
+ {F934AB7B-186B-4E96-B20C-A58C38C1B818}.Debug-Tests|x64.ActiveCfg = Debug|x64
+ {F934AB7B-186B-4E96-B20C-A58C38C1B818}.Debug-Tests|x64.Build.0 = Debug|x64
{F934AB7B-186B-4E96-B20C-A58C38C1B818}.Release|Win32.ActiveCfg = Release|Win32
{F934AB7B-186B-4E96-B20C-A58C38C1B818}.Release|Win32.Build.0 = Release|Win32
{F934AB7B-186B-4E96-B20C-A58C38C1B818}.Release|x64.ActiveCfg = Release|x64
{F934AB7B-186B-4E96-B20C-A58C38C1B818}.Release|x64.Build.0 = Release|x64
{FBE51B37-8B12-41E8-B5E0-F00A06B4BCD2}.Debug|Win32.ActiveCfg = Debug|Win32
{FBE51B37-8B12-41E8-B5E0-F00A06B4BCD2}.Debug|Win32.Build.0 = Debug|Win32
- {FBE51B37-8B12-41E8-B5E0-F00A06B4BCD2}.Debug|x64.ActiveCfg = Debug|Win32
+ {FBE51B37-8B12-41E8-B5E0-F00A06B4BCD2}.Debug|x64.ActiveCfg = Debug|x64
+ {FBE51B37-8B12-41E8-B5E0-F00A06B4BCD2}.Debug|x64.Build.0 = Debug|x64
{FBE51B37-8B12-41E8-B5E0-F00A06B4BCD2}.Debug-MinDep|Win32.ActiveCfg = Debug|Win32
{FBE51B37-8B12-41E8-B5E0-F00A06B4BCD2}.Debug-MinDep|x64.ActiveCfg = Debug|Win32
+ {FBE51B37-8B12-41E8-B5E0-F00A06B4BCD2}.Debug-Tests|Win32.ActiveCfg = Debug|Win32
+ {FBE51B37-8B12-41E8-B5E0-F00A06B4BCD2}.Debug-Tests|x64.ActiveCfg = Debug|x64
{FBE51B37-8B12-41E8-B5E0-F00A06B4BCD2}.Release|Win32.ActiveCfg = Release|Win32
{FBE51B37-8B12-41E8-B5E0-F00A06B4BCD2}.Release|Win32.Build.0 = Release|Win32
- {FBE51B37-8B12-41E8-B5E0-F00A06B4BCD2}.Release|x64.ActiveCfg = Release|Win32
+ {FBE51B37-8B12-41E8-B5E0-F00A06B4BCD2}.Release|x64.ActiveCfg = Release|x64
+ {FBE51B37-8B12-41E8-B5E0-F00A06B4BCD2}.Release|x64.Build.0 = Release|x64
+ {49766286-2B5D-4177-A860-BD7CE1846EEF}.Debug|Win32.ActiveCfg = Debug|Win32
+ {49766286-2B5D-4177-A860-BD7CE1846EEF}.Debug|Win32.Build.0 = Debug|Win32
+ {49766286-2B5D-4177-A860-BD7CE1846EEF}.Debug|x64.ActiveCfg = Debug|x64
+ {49766286-2B5D-4177-A860-BD7CE1846EEF}.Debug|x64.Build.0 = Debug|x64
+ {49766286-2B5D-4177-A860-BD7CE1846EEF}.Debug-MinDep|Win32.ActiveCfg = Debug|Win32
+ {49766286-2B5D-4177-A860-BD7CE1846EEF}.Debug-MinDep|x64.ActiveCfg = Debug|Win32
+ {49766286-2B5D-4177-A860-BD7CE1846EEF}.Debug-Tests|Win32.ActiveCfg = Debug|Win32
+ {49766286-2B5D-4177-A860-BD7CE1846EEF}.Debug-Tests|Win32.Build.0 = Debug|Win32
+ {49766286-2B5D-4177-A860-BD7CE1846EEF}.Debug-Tests|x64.ActiveCfg = Debug|x64
+ {49766286-2B5D-4177-A860-BD7CE1846EEF}.Release|Win32.ActiveCfg = Release|Win32
+ {49766286-2B5D-4177-A860-BD7CE1846EEF}.Release|Win32.Build.0 = Release|Win32
+ {49766286-2B5D-4177-A860-BD7CE1846EEF}.Release|x64.ActiveCfg = Release|x64
+ {49766286-2B5D-4177-A860-BD7CE1846EEF}.Release|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/aegisub/build/tests/tests.vcxproj b/aegisub/build/tests/tests.vcxproj
new file mode 100644
index 000000000..218823a87
--- /dev/null
+++ b/aegisub/build/tests/tests.vcxproj
@@ -0,0 +1,93 @@
+
+
+
+ {49766286-2B5D-4177-A860-BD7CE1846EEF}
+ tests
+
+
+
+
+ exe
+ ..\..\tests\
+
+
+
+
+
+
+
+
+
+ GTEST_HAS_TR1_TUPLE=0;
+ %(PreprocessorDefinitions)
+
+
+ $(AegisubSourceBase)libaegisub\include;
+ %(AdditionalIncludeDirectories)
+
+
+
+ $(AegisubLibraryDir);%(AdditionalLibraryDirectories)
+ Console
+
+
+ $(SrcDir)setup.bat "$(AegisubBinaryDir)"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {a649d828-a399-4d81-adef-94cfdba7847f}
+
+
+ {fbe51b37-8b12-41e8-b5e0-f00a06b4bcd2}
+
+
+ {f934ab7b-186b-4e96-b20c-a58c38c1b818}
+
+
+ {bb3fed86-db7a-4dc7-964a-260fb86cde61}
+
+
+ {965054d2-44f2-4eb2-9879-051cc3d7ef08}
+
+
+ {7b56955d-5162-4698-aa5b-47484edc8783}
+
+
+
diff --git a/aegisub/build/tests/tests.vcxproj.filters b/aegisub/build/tests/tests.vcxproj.filters
new file mode 100644
index 000000000..3a6297a12
--- /dev/null
+++ b/aegisub/build/tests/tests.vcxproj.filters
@@ -0,0 +1,91 @@
+
+
+
+
+ {93995380-89BD-4b04-88EB-625FBE52EBFB}
+ h;hpp;hxx;hm;inl;inc;xsd
+
+
+ {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
+ cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx
+
+
+
+
+ Support
+
+
+ Support
+
+
+ Tests
+
+
+ Tests
+
+
+ Tests
+
+
+ Tests
+
+
+ Tests
+
+
+ Tests
+
+
+ Tests
+
+
+ Tests
+
+
+ Tests
+
+
+ Tests
+
+
+ Tests
+
+
+ Tests
+
+
+ Tests
+
+
+ Tests
+
+
+ Tests
+
+
+ Tests
+
+
+ Tests
+
+
+ Tests
+
+
+
+
+ Support
+
+
+ Support
+
+
+
+
+ Support
+
+
+ Support
+
+
+
diff --git a/aegisub/tests/setup.bat b/aegisub/tests/setup.bat
old mode 100755
new mode 100644
index d1f8ebd93..6e242c7fe
--- a/aegisub/tests/setup.bat
+++ b/aegisub/tests/setup.bat
@@ -1,3 +1,5 @@
+cd %1
+
icacls data /grant:r %USERNAME%:F /T
rd /s /q data
mkdir data