Browse Source

Simpilify unit test framework for win32/linux

LouYihua 7 years ago
parent
commit
cf81b91075

+ 1 - 0
.gitignore

@@ -23,6 +23,7 @@ bld/
 [Oo]bj/
 Generated Files/
 BundleArtifacts/
+[Tt]est/
 *.o
 *.bc
 *.data

+ 1 - 1
3rd/googletest

@@ -1 +1 @@
-Subproject commit 51143d5b62521f71020ada4ba1b6b44f3a6749bb
+Subproject commit aa148eb2b7f70ede0eb10de34b6254826bfb34f4

+ 7 - 3
main.c

@@ -483,7 +483,6 @@ PAL_SplashScreen(
    PAL_FadeOut(1);
 }
 
-#ifndef UNIT_TEST
 int
 main(
    int      argc,
@@ -542,11 +541,14 @@ main(
    if (gConfig.fLaunchSetting)
 	   return 0;
 
+#if !defined(UNIT_TEST) || defined(UNIT_TEST_GAME_INIT)
    //
    // Initialize everything
    //
    PAL_Init();
+#endif
 
+#if !defined(UNIT_TEST)
    //
    // Show the trademark screen and splash screen
    //
@@ -563,6 +565,8 @@ main(
    //
    assert(FALSE);
    return 255;
+#else
+   extern int testmain(int argc, char *argv[]);
+   return testmain(argc, argv);
+#endif
 }
-#endif //UNIT_TEST
-

+ 8 - 0
tests/test_main.cpp

@@ -0,0 +1,8 @@
+
+#include <gtest/gtest.h>
+
+extern "C"
+int testmain(int argc, char *argv[]) {
+    testing::InitGoogleTest(&argc, argv);
+    return RUN_ALL_TESTS();
+}

+ 6 - 11
tests/test_swprintf.cpp

@@ -5,22 +5,17 @@ extern "C"{
     #include "text.h"
 }
 
-#define swprintf_wrapper( buffer, count, format, ...) ( \
-PAL_swprintf( buffer, count, format, ##__VA_ARGS__ ), \
-buffer \
-)
-
-TEST(sdlpal, PAL_swprintf) {
+TEST(sdlpal, PALswprintf) {
     WCHAR test_buf[256];
-    EXPECT_EQ(0, wcsncmp( L"测试",    swprintf_wrapper( test_buf, sizeof(test_buf)/sizeof(WCHAR), L"%ls%ls", L"测", L"试"), wcslen(L"测试")));
+    EXPECT_EQ(0, wcsncmp( L"测试",    test_buf, PAL_swprintf(test_buf, sizeof(test_buf)/sizeof(WCHAR), L"%ls%ls", L"测", L"试")));
 }
 
-TEST(sdlpal, PAL_swprintf2) {
+TEST(sdlpal, PALswprintf2) {
     WCHAR test_buf[256];
-    EXPECT_EQ(0, wcsncmp( L"测试 2",  swprintf_wrapper( test_buf, sizeof(test_buf)/sizeof(WCHAR), L"%ls%ls %d", L"测", L"试", 2), wcslen(L"测试 2")));
+    EXPECT_EQ(0, wcsncmp( L"测试 2",  test_buf, PAL_swprintf(test_buf, sizeof(test_buf)/sizeof(WCHAR), L"%ls%ls %d", L"测", L"试", 2)));
 }
 
-TEST(sdlpal, PAL_swprintf3) {
+TEST(sdlpal, PALswprintf3) {
     WCHAR test_buf[256];
-    EXPECT_EQ(0, wcsncmp( L"测试 3",  swprintf_wrapper( test_buf, sizeof(test_buf)/sizeof(WCHAR), L"%ls%ls %c", L"测", L"试", '3'), wcslen(L"测试 3")));
+    EXPECT_EQ(0, wcsncmp( L"测试 3",  test_buf, PAL_swprintf(test_buf, sizeof(test_buf)/sizeof(WCHAR), L"%ls%ls %c", L"测", L"试", '3')));
 }

+ 0 - 15
tests/testmain.cpp

@@ -1,15 +0,0 @@
-#include <gtest/gtest.h>
-
-int main(int argc, char *argv[]) {
-    testing::InitGoogleTest(&argc, argv);
-    return RUN_ALL_TESTS();
-}
-
-#ifdef __MINGW32__
-#include <windows.h>
-INT WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
-    PSTR lpCmdLine, INT nCmdShow)
-{
-    return main(__argc, __argv);
-}
-#endif

+ 17 - 25
unix/Makefile

@@ -4,40 +4,31 @@ TARGET = sdlpal
 TEST_TARGET = ./sdlpal-tests
 
 HOST =
+TEST_CCFLAGS =
+
+GTEST_DIR = ../3rd/googletest/googletest
 
 CFILES = $(wildcard ../adplug/*.c) $(wildcard ../libmad/*.c) $(wildcard ../liboggvorbis/src/*.c) $(wildcard ../*.c)
-CFILES := $(filter-out ../main.c, $(CFILES))
 CPPFILES = $(wildcard ../adplug/*.cpp) $(wildcard ../*.cpp) $(wildcard ./*.cpp)
 OBJFILES = $(CFILES:.c=.o) $(CPPFILES:.cpp=.o)
-
 TEST_CPPFILES = $(wildcard ../tests/*.cpp)
 TEST_OBJFILES = $(TEST_CPPFILES:.cpp=.o)
 
-GTEST_DIR = ../3rd/googletest/googletest
-GTEST_HEADERS = $(GTEST_DIR)/include/gtest/*.h \
-                $(GTEST_DIR)/include/gtest/internal/*.h
-
-GTEST_SRCS_ = $(GTEST_DIR)/src/*.cc $(GTEST_DIR)/src/*.h $(GTEST_HEADERS)
-
-TEST_CPPFLAGS += -isystem $(GTEST_DIR)/include
-TEST_CXXFLAGS += -g -Wall -Wextra -pthread
-
-CCFLAGS = `sdl2-config --cflags` -g -Wall -O2 -fno-strict-aliasing -I. -I../ -I../liboggvorbis/include -I../liboggvorbis/src -DPAL_HAS_PLATFORM_SPECIFIC_UTILS -I$(GTEST_DIR)
-CXXFLAGS = $(CCFLAGS) -std=c++11 `fltk-config --cxxflags` $(TEST_CPPFLAGS) $(TEST_CXXFLAGS)
+CCFLAGS = `sdl2-config --cflags` -g -Wall -O2 -fno-strict-aliasing -I. -I../ -I../liboggvorbis/include -I../liboggvorbis/src -DPAL_HAS_PLATFORM_SPECIFIC_UTILS $(TEST_CCFLAGS)
+CXXFLAGS = $(CCFLAGS) -std=c++11 `fltk-config --cxxflags`
 CFLAGS = $(CCFLAGS) -std=gnu99 `fltk-config --cflags`
-LDFLAGS = `sdl2-config --libs` `fltk-config --ldflags` -lstdc++ -lm $(TEST_CXXFLAGS)
+LDFLAGS = `sdl2-config --libs` `fltk-config --ldflags` -lstdc++ -lm
+TEST_CXXFLAGS += -isystem $(GTEST_DIR)/include -I $(GTEST_DIR) -g -Wall -Wextra -pthread
 
-all: $(TARGET)
+.PHONY : all clean check
 
-gtest-all.o : $(GTEST_SRCS_)
-	$(CXX) $(CXXFLAGS) -c \
-            $(GTEST_DIR)/src/gtest-all.cc
+all: $(TARGET)
 
-$(TARGET): $(OBJFILES) ../main.o
-	$(HOST)g++ $^ -o $@ $(LDFLAGS)
+$(TARGET): $(OBJFILES)
+	$(HOST)gcc $^ -o $@ $(LDFLAGS)
 
-$(TEST_TARGET): $(OBJFILES) $(TEST_OBJFILES) main-test.o gtest-all.o
-	$(HOST)g++ $^ -o $@ $(LDFLAGS)
+gtest-all.o : $(GTEST_DIR)/src/gtest-all.cc
+	$(HOST)g++ $(TEST_CXXFLAGS) -c $< -o $@
 
 %.o: %.c
 	$(HOST)gcc $(CFLAGS) -c $< -o $@
@@ -45,12 +36,13 @@ $(TEST_TARGET): $(OBJFILES) $(TEST_OBJFILES) main-test.o gtest-all.o
 %.o: %.cpp
 	$(HOST)g++ $(CXXFLAGS) -c $< -o $@
 
-main-test.o: ../main.c
-	$(HOST)gcc $(CFLAGS) -DUNIT_TEST=1 -c $< -o $@
+$(TEST_TARGET): $(OBJFILES) $(TEST_OBJFILES) gtest-all.o
+	$(HOST)g++ $^ -o $@ $(LDFLAGS) -lpthread
 
 clean:
-	-rm -f $(TARGET) $(TEST_TARGET) *.o ../*.o ../adplug/*.o ../libmad/*.o ../liboggvorbis/src/*.o
+	-rm -f $(TARGET) $(TEST_TARGET) *.o ../*.o ../adplug/*.o ../libmad/*.o ../liboggvorbis/src/*.o ../tests/*.o
 
+check: TEST_CCFLAGS = -DUNIT_TEST=1 -isystem $(GTEST_DIR)/include
 check: $(TEST_TARGET)
 	chmod +x $(TEST_TARGET)
 	exec $(TEST_TARGET)

+ 1 - 1
unix/unix.cpp

@@ -244,7 +244,7 @@ UTIL_Platform_Init(
    char* argv[]
 )
 {
-#ifndef PAL_NO_LAUNCH_UI
+#if !defined(UNIT_TEST) && !defined(PAL_NO_LAUNCH_UI)
    if (gConfig.fLaunchSetting)
    {
       Fl_Window *window = InitWindow();

+ 19 - 27
win32/Makefile

@@ -4,57 +4,49 @@ TARGET = sdlpal.exe
 TEST_TARGET = ./sdlpal-tests
 
 HOST =
+TEST_CCFLAGS =
+
+GTEST_DIR = ../3rd/googletest/googletest
 
 CFILES = $(wildcard ../adplug/*.c) $(wildcard ../libmad/*.c) $(wildcard ../liboggvorbis/src/*.c) $(wildcard ../*.c) ../native_midi/native_midi_win32.c ../native_midi/native_midi_common.c
-CFILES := $(filter-out ../main.c, $(CFILES))
 CPPFILES = $(wildcard ../adplug/*.cpp) $(wildcard ../*.cpp) $(wildcard ./*.cpp)
-OBJFILES = $(CFILES:.c=.o) $(CPPFILES:.cpp=.o) sdlpal.o
-
+RCFILES = $(wildcard ./*.rc)
+OBJFILES = $(CFILES:.c=.o) $(CPPFILES:.cpp=.o) $(RCFILES:.rc=.o)
 TEST_CPPFILES = $(wildcard ../tests/*.cpp)
 TEST_OBJFILES = $(TEST_CPPFILES:.cpp=.o)
 
-GTEST_DIR = ../3rd/googletest/googletest
-GTEST_HEADERS = $(GTEST_DIR)/include/gtest/*.h \
-                $(GTEST_DIR)/include/gtest/internal/*.h
-
-GTEST_SRCS_ = $(GTEST_DIR)/src/*.cc $(GTEST_DIR)/src/*.h $(GTEST_HEADERS)
-
-TEST_CPPFLAGS += -isystem $(GTEST_DIR)/include
-TEST_CXXFLAGS += -g -Wall -Wextra -pthread
-
-override CCFLAGS += `sdl2-config --cflags` -msse -Wall -O2 -fno-strict-aliasing -I. -I../ -I../liboggvorbis/include -I../liboggvorbis/src -DPAL_HAS_PLATFORM_SPECIFIC_UTILS -I$(GTEST_DIR)
-CXXFLAGS = $(CCFLAGS) -std=c++11 $(TEST_CPPFLAGS) $(TEST_CXXFLAGS)
+override CCFLAGS = `sdl2-config --cflags` -g -msse -Wall -O2 -fno-strict-aliasing -I. -I../ -I../liboggvorbis/include -I../liboggvorbis/src -DPAL_HAS_PLATFORM_SPECIFIC_UTILS $(TEST_CCFLAGS)
+CXXFLAGS = $(CCFLAGS) -std=c++11 
 CFLAGS = $(CCFLAGS) -std=gnu99
 LDFLAGS = `sdl2-config --libs` -lm -lwinmm -lole32 -loleaut32 -limm32 -lcomctl32 -luuid -ldxguid -lversion -static -static-libgcc -static-libstdc++
-TEST_LDFLAGS = -L/mingw32/lib -lSDL2 -mconsole -lm -lgdi32 -lwinmm -lole32 -loleaut32 -limm32 -lcomctl32 -luuid -ldxguid -lversion -static -static-libgcc -static-libstdc++
+TEST_CXXFLAGS += -isystem $(GTEST_DIR)/include -I $(GTEST_DIR) -g -Wall -Wextra -pthread
 
-all: $(TARGET)
+.PHONY : all clean check
 
-gtest-all.o : $(GTEST_SRCS_)
-	$(CXX) $(CXXFLAGS) -c \
-            $(GTEST_DIR)/src/gtest-all.cc
+all: $(TARGET)
 
-$(TARGET): $(OBJFILES) ../main.o
-	$(HOST)g++ $^ -o $@ $(LDFLAGS)
+$(TARGET): $(OBJFILES)
+	$(HOST)gcc $^ -o $@ $(LDFLAGS)
 
-$(TEST_TARGET): $(OBJFILES) $(TEST_OBJFILES) main-test.o gtest-all.o
-	$(HOST)g++ $^ -o $@ $(TEST_LDFLAGS)
+gtest-all.o : $(GTEST_DIR)/src/gtest-all.cc
+	$(HOST)g++ $(TEST_CXXFLAGS) -c $< -o $@
 
 %.o: %.c
 	$(HOST)gcc $(CFLAGS) -c $< -o $@
 
 %.o: %.cpp
 	$(HOST)g++ $(CXXFLAGS) -c $< -o $@
-	
-main-test.o: ../main.c
-	$(HOST)gcc $(CFLAGS) -DUNIT_TEST=1 -c $< -o $@
 
 %.o: %.rc
 	windres -i $< -o $@
 
+$(TEST_TARGET): $(OBJFILES) $(TEST_OBJFILES) gtest-all.o
+	$(HOST)g++ $^ -o $@ $(LDFLAGS) -lpthread
+
 clean:
-	-rm -f $(TARGET) $(TEST_TARGET) *.o ../*.o ../adplug/*.o ../libmad/*.o ../liboggvorbis/src/*.o
+	-rm -f $(TARGET) $(TEST_TARGET) *.o ../*.o ../adplug/*.o ../libmad/*.o ../liboggvorbis/src/*.o ../tests/*.o ../native_midi/*.o
 
+check: TEST_CCFLAGS = -DUNIT_TEST=1 -isystem $(GTEST_DIR)/include
 check: $(TEST_TARGET)
 	chmod +x $(TEST_TARGET)
 	exec $(TEST_TARGET)

+ 19 - 388
win32/sdlpal-test.vcxproj

@@ -1,20 +1,12 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
+    <ProjectConfiguration Include="Test|Win32">
+      <Configuration>Test</Configuration>
       <Platform>Win32</Platform>
     </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|x64">
-      <Configuration>Debug</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|x64">
-      <Configuration>Release</Configuration>
+    <ProjectConfiguration Include="Test|x64">
+      <Configuration>Test</Configuration>
       <Platform>x64</Platform>
     </ProjectConfiguration>
   </ItemGroup>
@@ -24,422 +16,61 @@
     <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-    <PlatformToolset>v140_xp</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-    <PlatformToolset>v120_xp</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Test|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
     <UseOfMfc>false</UseOfMfc>
     <PlatformToolset>v120_xp</PlatformToolset>
   </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Test|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
     <UseOfMfc>false</UseOfMfc>
     <PlatformToolset>v120_xp</PlatformToolset>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
   <ImportGroup Label="ExtensionSettings">
   </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Test|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
     <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props" />
   </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Test|x64'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
     <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props" />
   </ImportGroup>
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup>
     <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <IncludePath>..\SDL2\include;$(IncludePath)</IncludePath>
-    <LibraryPath>..\SDL2\VisualC\$(Platform)\$(Configuration)\;..\SDL2\lib\x86;$(LibraryPath)</LibraryPath>
-    <TargetName>$(ProjectName)_gta</TargetName>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <IncludePath>..\SDL2\include;$(IncludePath)</IncludePath>
-    <LibraryPath>..\SDL2\VisualC\$(Platform)\$(Configuration)\;..\SDL2\lib\x64;$(LibraryPath)</LibraryPath>
-    <TargetName>$(ProjectName)_gta</TargetName>
   </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Test|Win32'">
     <IncludePath>..\SDL2\include;$(IncludePath)</IncludePath>
-    <LibraryPath>..\SDL2\VisualC\$(Platform)\$(Configuration)\;..\SDL2\lib\x86;$(LibraryPath)</LibraryPath>
   </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Test|x64'">
     <IncludePath>..\SDL2\include;$(IncludePath)</IncludePath>
-    <LibraryPath>..\SDL2\VisualC\$(Platform)\$(Configuration)\;..\SDL2\lib\x64;$(LibraryPath)</LibraryPath>
   </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/sdlpal-test_sdl2.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <AdditionalIncludeDirectories>.\;..\liboggvorbis\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>PAL_HAS_PLATFORM_SPECIFIC_UTILS;WIN32;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <StringPooling>true</StringPooling>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <WarningLevel>Level3</WarningLevel>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0804</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>winmm.lib;sdl2.lib;sdl2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <SubSystem>Windows</SubSystem>
-      <TargetMachine>MachineX86</TargetMachine>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-    </Link>
-    <Bscmake />
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TypeLibraryName>.\Release/sdlpal-test_sdl2.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <AdditionalIncludeDirectories>.\;..\liboggvorbis\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>PAL_HAS_PLATFORM_SPECIFIC_UTILS;WIN32;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <StringPooling>true</StringPooling>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <WarningLevel>Level3</WarningLevel>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0804</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>winmm.lib;sdl2.lib;sdl2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <SubSystem>Windows</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-    </Link>
-    <Bscmake />
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Debug/sdlpal-test_sdl2.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Test|Win32'">
     <ClCompile>
-      <AdditionalIncludeDirectories>.\;..\3rd\googletest\googletest;..\3rd\googletest\googletest\include;.\packages\sdl2.2.0.5\build\native\include;..\;..\liboggvorbis\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>UNIT_TEST;PAL_HAS_PLATFORM_SPECIFIC_UTILS;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MinimalRebuild>true</MinimalRebuild>
+      <AdditionalIncludeDirectories>.\;..\;..\3rd\googletest\googletest;..\3rd\googletest\googletest\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>PAL_HAS_PLATFORM_SPECIFIC_UTILS;WIN32;_WINDOWS;_DEBUG;UNIT_TEST;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
       <WarningLevel>Level3</WarningLevel>
       <Optimization>Disabled</Optimization>
     </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0804</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>winmm.lib;sdl2.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <TargetMachine>MachineX86</TargetMachine>
-      <AdditionalLibraryDirectories>.\packages\sdl2.2.0.5\build\native\lib\Win32\dynamic;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-    </Link>
-    <Bscmake />
   </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TypeLibraryName>.\Debug/sdlpal-test_sdl2.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Test|x64'">
     <ClCompile>
-      <AdditionalIncludeDirectories>.\;..\3rd\googletest\googletest;..\3rd\googletest\googletest\include;.\packages\sdl2.2.0.5\build\native\include;..\;..\liboggvorbis\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>PAL_HAS_PLATFORM_SPECIFIC_UTILS;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>.\;..\;..\3rd\googletest\googletest;..\3rd\googletest\googletest\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>PAL_HAS_PLATFORM_SPECIFIC_UTILS;WIN32;_WINDOWS;_DEBUG;UNIT_TEST;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
       <WarningLevel>Level3</WarningLevel>
       <Optimization>Disabled</Optimization>
     </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0804</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>winmm.lib;sdl2.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Console</SubSystem>
-      <AdditionalLibraryDirectories>.\packages\sdl2.2.0.5\build\native\lib\x64\dynamic;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-    </Link>
-    <Bscmake />
   </ItemDefinitionGroup>
   <ItemGroup>
     <ClCompile Include="..\3rd\googletest\googletest\src\gtest-all.cc" />
-    <ClCompile Include="..\adplug\adlibemu.c" />
-    <ClCompile Include="..\adplug\dbemuopl.cpp" />
-    <ClCompile Include="..\adplug\dbopl.cpp">
-      <InlineFunctionExpansion Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AnySuitable</InlineFunctionExpansion>
-      <InlineFunctionExpansion Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AnySuitable</InlineFunctionExpansion>
-      <IntrinsicFunctions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</IntrinsicFunctions>
-      <IntrinsicFunctions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</IntrinsicFunctions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Speed</FavorSizeOrSpeed>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Speed</FavorSizeOrSpeed>
-      <OmitFramePointers Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</OmitFramePointers>
-      <OmitFramePointers Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</OmitFramePointers>
-    </ClCompile>
-    <ClCompile Include="..\adplug\demuopl.cpp" />
-    <ClCompile Include="..\audio.c" />
-    <ClCompile Include="..\battle.c" />
-    <ClCompile Include="..\ending.c" />
-    <ClCompile Include="..\fight.c" />
-    <ClCompile Include="..\font.c" />
-    <ClCompile Include="..\game.c" />
-    <ClCompile Include="..\global.c" />
-    <ClCompile Include="..\input.c" />
-    <ClCompile Include="..\itemmenu.c" />
-    <ClCompile Include="..\liboggvorbis\src\analysis.c" />
-    <ClCompile Include="..\liboggvorbis\src\bitrate.c" />
-    <ClCompile Include="..\liboggvorbis\src\bitwise.c" />
-    <ClCompile Include="..\liboggvorbis\src\block.c" />
-    <ClCompile Include="..\liboggvorbis\src\codebook.c" />
-    <ClCompile Include="..\liboggvorbis\src\envelope.c" />
-    <ClCompile Include="..\liboggvorbis\src\floor0.c" />
-    <ClCompile Include="..\liboggvorbis\src\floor1.c" />
-    <ClCompile Include="..\liboggvorbis\src\framing.c" />
-    <ClCompile Include="..\liboggvorbis\src\info.c" />
-    <ClCompile Include="..\liboggvorbis\src\lookup.c" />
-    <ClCompile Include="..\liboggvorbis\src\lpc.c" />
-    <ClCompile Include="..\liboggvorbis\src\lsp.c" />
-    <ClCompile Include="..\liboggvorbis\src\mapping0.c" />
-    <ClCompile Include="..\liboggvorbis\src\mdct.c" />
-    <ClCompile Include="..\liboggvorbis\src\psy.c" />
-    <ClCompile Include="..\liboggvorbis\src\registry.c" />
-    <ClCompile Include="..\liboggvorbis\src\res0.c" />
-    <ClCompile Include="..\liboggvorbis\src\sharedbook.c" />
-    <ClCompile Include="..\liboggvorbis\src\smallft.c" />
-    <ClCompile Include="..\liboggvorbis\src\synthesis.c" />
-    <ClCompile Include="..\liboggvorbis\src\vorbisenc.c" />
-    <ClCompile Include="..\liboggvorbis\src\vorbisfile.c" />
-    <ClCompile Include="..\liboggvorbis\src\window.c" />
-    <ClCompile Include="..\magicmenu.c" />
-    <ClCompile Include="..\main.c" />
-    <ClCompile Include="..\map.c" />
-    <ClCompile Include="..\midi.c" />
-    <ClCompile Include="..\mp3play.c" />
-    <ClCompile Include="..\oggplay.c" />
-    <ClCompile Include="..\overlay.c" />
-    <ClCompile Include="..\palcfg.c" />
-    <ClCompile Include="..\palcommon.c" />
-    <ClCompile Include="..\palette.c" />
-    <ClCompile Include="..\play.c" />
-    <ClCompile Include="..\res.c" />
-    <ClCompile Include="..\resampler.c" />
-    <ClCompile Include="..\rixplay.cpp" />
-    <ClCompile Include="..\rngplay.c" />
-    <ClCompile Include="..\scene.c" />
-    <ClCompile Include="..\script.c" />
-    <ClCompile Include="..\sound.c" />
-    <ClCompile Include="..\tests\testmain.cpp" />
+    <ClCompile Include="..\tests\test_main.cpp" />
     <ClCompile Include="..\tests\test_swprintf.cpp" />
-    <ClCompile Include="..\text.c" />
-    <ClCompile Include="..\ui.c" />
-    <ClCompile Include="..\uibattle.c" />
-    <ClCompile Include="..\uigame.c" />
-    <ClCompile Include="..\util.c" />
-    <ClCompile Include="..\video.c" />
-    <ClCompile Include="..\yj1.c" />
-    <ClCompile Include="..\adplug\binfile.cpp" />
-    <ClCompile Include="..\adplug\binio.cpp" />
-    <ClCompile Include="..\adplug\dosbox_opl.cpp" />
-    <ClCompile Include="..\adplug\emuopl.cpp" />
-    <ClCompile Include="..\adplug\fmopl.c" />
-    <ClCompile Include="..\adplug\fprovide.cpp" />
-    <ClCompile Include="..\adplug\player.cpp" />
-    <ClCompile Include="..\adplug\rix.cpp" />
-    <ClCompile Include="..\adplug\surroundopl.cpp" />
-    <ClCompile Include="..\native_midi\native_midi_common.c" />
-    <ClCompile Include="..\native_midi\native_midi_win32.c" />
-    <ClCompile Include="..\libmad\bit.c" />
-    <ClCompile Include="..\libmad\decoder.c" />
-    <ClCompile Include="..\libmad\fixed.c" />
-    <ClCompile Include="..\libmad\frame.c" />
-    <ClCompile Include="..\libmad\huffman.c" />
-    <ClCompile Include="..\libmad\layer12.c" />
-    <ClCompile Include="..\libmad\layer3.c" />
-    <ClCompile Include="..\libmad\music_mad.c" />
-    <ClCompile Include="..\libmad\stream.c" />
-    <ClCompile Include="..\libmad\synth.c" />
-    <ClCompile Include="..\libmad\timer.c" />
-    <ClCompile Include="win32.cpp" />
-  </ItemGroup>
-  <ItemGroup>
-    <ClInclude Include="..\adplug\adlibemu.h" />
-    <ClInclude Include="..\adplug\dbemuopl.h" />
-    <ClInclude Include="..\adplug\dbopl.h" />
-    <ClInclude Include="..\adplug\kemuopl.h" />
-    <ClInclude Include="..\ascii.h" />
-    <ClInclude Include="..\battle.h" />
-    <ClInclude Include="..\codepage.h" />
-    <ClInclude Include="..\common.h" />
-    <ClInclude Include="..\liboggvorbis\include\ogg\config_types.h" />
-    <ClInclude Include="..\ending.h" />
-    <ClInclude Include="..\fight.h" />
-    <ClInclude Include="..\font.h" />
-    <ClInclude Include="..\fontglyph.h" />
-    <ClInclude Include="..\game.h" />
-    <ClInclude Include="..\global.h" />
-    <ClInclude Include="..\input.h" />
-    <ClInclude Include="..\itemmenu.h" />
-    <ClInclude Include="..\liboggvorbis\include\ogg\ogg.h" />
-    <ClInclude Include="..\liboggvorbis\include\ogg\os_types.h" />
-    <ClInclude Include="..\liboggvorbis\include\vorbis\codec.h" />
-    <ClInclude Include="..\liboggvorbis\include\vorbis\vorbisenc.h" />
-    <ClInclude Include="..\liboggvorbis\include\vorbis\vorbisfile.h" />
-    <ClInclude Include="..\liboggvorbis\src\backends.h" />
-    <ClInclude Include="..\liboggvorbis\src\bitrate.h" />
-    <ClInclude Include="..\liboggvorbis\src\books\coupled\res_books_51.h" />
-    <ClInclude Include="..\liboggvorbis\src\books\coupled\res_books_stereo.h" />
-    <ClInclude Include="..\liboggvorbis\src\books\floor\floor_books.h" />
-    <ClInclude Include="..\liboggvorbis\src\books\uncoupled\res_books_uncoupled.h" />
-    <ClInclude Include="..\liboggvorbis\src\codebook.h" />
-    <ClInclude Include="..\liboggvorbis\src\codec_internal.h" />
-    <ClInclude Include="..\liboggvorbis\src\envelope.h" />
-    <ClInclude Include="..\liboggvorbis\src\highlevel.h" />
-    <ClInclude Include="..\liboggvorbis\src\lookup.h" />
-    <ClInclude Include="..\liboggvorbis\src\lookup_data.h" />
-    <ClInclude Include="..\liboggvorbis\src\lpc.h" />
-    <ClInclude Include="..\liboggvorbis\src\lsp.h" />
-    <ClInclude Include="..\liboggvorbis\src\masking.h" />
-    <ClInclude Include="..\liboggvorbis\src\mdct.h" />
-    <ClInclude Include="..\liboggvorbis\src\misc.h" />
-    <ClInclude Include="..\liboggvorbis\src\modes\floor_all.h" />
-    <ClInclude Include="..\liboggvorbis\src\modes\psych_11.h" />
-    <ClInclude Include="..\liboggvorbis\src\modes\psych_16.h" />
-    <ClInclude Include="..\liboggvorbis\src\modes\psych_44.h" />
-    <ClInclude Include="..\liboggvorbis\src\modes\psych_8.h" />
-    <ClInclude Include="..\liboggvorbis\src\modes\residue_16.h" />
-    <ClInclude Include="..\liboggvorbis\src\modes\residue_44.h" />
-    <ClInclude Include="..\liboggvorbis\src\modes\residue_44p51.h" />
-    <ClInclude Include="..\liboggvorbis\src\modes\residue_44u.h" />
-    <ClInclude Include="..\liboggvorbis\src\modes\residue_8.h" />
-    <ClInclude Include="..\liboggvorbis\src\modes\setup_11.h" />
-    <ClInclude Include="..\liboggvorbis\src\modes\setup_16.h" />
-    <ClInclude Include="..\liboggvorbis\src\modes\setup_22.h" />
-    <ClInclude Include="..\liboggvorbis\src\modes\setup_32.h" />
-    <ClInclude Include="..\liboggvorbis\src\modes\setup_44.h" />
-    <ClInclude Include="..\liboggvorbis\src\modes\setup_44p51.h" />
-    <ClInclude Include="..\liboggvorbis\src\modes\setup_44u.h" />
-    <ClInclude Include="..\liboggvorbis\src\modes\setup_8.h" />
-    <ClInclude Include="..\liboggvorbis\src\modes\setup_X.h" />
-    <ClInclude Include="..\liboggvorbis\src\os.h" />
-    <ClInclude Include="..\liboggvorbis\src\psy.h" />
-    <ClInclude Include="..\liboggvorbis\src\registry.h" />
-    <ClInclude Include="..\liboggvorbis\src\scales.h" />
-    <ClInclude Include="..\liboggvorbis\src\smallft.h" />
-    <ClInclude Include="..\liboggvorbis\src\window.h" />
-    <ClInclude Include="..\magicmenu.h" />
-    <ClInclude Include="..\main.h" />
-    <ClInclude Include="..\map.h" />
-    <ClInclude Include="..\midi.h" />
-    <ClInclude Include="..\palcfg.h" />
-    <ClInclude Include="..\palcommon.h" />
-    <ClInclude Include="..\palette.h" />
-    <ClInclude Include="..\play.h" />
-    <ClInclude Include="..\res.h" />
-    <ClInclude Include="..\resampler.h" />
-    <ClInclude Include="..\players.h" />
-    <ClInclude Include="..\rngplay.h" />
-    <ClInclude Include="..\scene.h" />
-    <ClInclude Include="..\script.h" />
-    <ClInclude Include="..\audio.h" />
-    <ClInclude Include="..\text.h" />
-    <ClInclude Include="..\ui.h" />
-    <ClInclude Include="..\uibattle.h" />
-    <ClInclude Include="..\uigame.h" />
-    <ClInclude Include="..\util.h" />
-    <ClInclude Include="..\video.h" />
-    <ClInclude Include="..\adplug\binfile.h" />
-    <ClInclude Include="..\adplug\binio.h" />
-    <ClInclude Include="..\adplug\demuopl.h" />
-    <ClInclude Include="..\adplug\dosbox_opl.h" />
-    <ClInclude Include="..\adplug\emuopl.h" />
-    <ClInclude Include="..\adplug\fmopl.h" />
-    <ClInclude Include="..\adplug\fprovide.h" />
-    <ClInclude Include="..\adplug\opl.h" />
-    <ClInclude Include="..\adplug\player.h" />
-    <ClInclude Include="..\adplug\rix.h" />
-    <ClInclude Include="..\adplug\surroundopl.h" />
-    <ClInclude Include="..\native_midi\native_midi.h" />
-    <ClInclude Include="..\native_midi\native_midi_common.h" />
-    <ClInclude Include="..\libmad\bit.h" />
-    <ClInclude Include="..\libmad\decoder.h" />
-    <ClInclude Include="..\libmad\fixed.h" />
-    <ClInclude Include="..\libmad\frame.h" />
-    <ClInclude Include="..\libmad\huffman.h" />
-    <ClInclude Include="..\libmad\layer12.h" />
-    <ClInclude Include="..\libmad\layer3.h" />
-    <ClInclude Include="..\libmad\libmad_config.h" />
-    <ClInclude Include="..\libmad\libmad_global.h" />
-    <ClInclude Include="..\libmad\mad.h" />
-    <ClInclude Include="..\libmad\music_mad.h" />
-    <ClInclude Include="..\libmad\stream.h" />
-    <ClInclude Include="..\libmad\synth.h" />
-    <ClInclude Include="..\libmad\timer.h" />
-    <ClInclude Include="pal_config.h" />
-    <ClInclude Include="resource.h" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="..\sdlpal.cfg.example" />
-    <None Include="..\sdlpal.ico" />
-    <None Include="..\libmad\D.dat" />
-    <None Include="..\libmad\imdct_s.dat" />
-    <None Include="..\libmad\qc_table.dat" />
-    <None Include="..\libmad\rq_table.dat" />
-    <None Include="..\libmad\sf_table.dat" />
-  </ItemGroup>
-  <ItemGroup>
-    <ResourceCompile Include="sdlpal.rc" />
-  </ItemGroup>
-  <ItemGroup>
-    <Text Include="..\AUTHORS.txt" />
-    <Text Include="..\README.txt" />
   </ItemGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
   <ImportGroup Label="ExtensionTargets">

+ 6 - 226
win32/sdlpal-test.vcxproj.filters

@@ -1,242 +1,22 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <ItemGroup>
-    <ClCompile Include="..\adplug\adlibemu.c" />
-    <ClCompile Include="..\adplug\dbemuopl.cpp" />
-    <ClCompile Include="..\adplug\dbopl.cpp" />
-    <ClCompile Include="..\adplug\demuopl.cpp" />
-    <ClCompile Include="..\audio.c" />
-    <ClCompile Include="..\battle.c" />
-    <ClCompile Include="..\ending.c" />
-    <ClCompile Include="..\fight.c" />
-    <ClCompile Include="..\font.c" />
-    <ClCompile Include="..\game.c" />
-    <ClCompile Include="..\global.c" />
-    <ClCompile Include="..\input.c" />
-    <ClCompile Include="..\itemmenu.c" />
-    <ClCompile Include="..\liboggvorbis\src\analysis.c" />
-    <ClCompile Include="..\liboggvorbis\src\bitrate.c" />
-    <ClCompile Include="..\liboggvorbis\src\bitwise.c" />
-    <ClCompile Include="..\liboggvorbis\src\block.c" />
-    <ClCompile Include="..\liboggvorbis\src\codebook.c" />
-    <ClCompile Include="..\liboggvorbis\src\envelope.c" />
-    <ClCompile Include="..\liboggvorbis\src\floor0.c" />
-    <ClCompile Include="..\liboggvorbis\src\floor1.c" />
-    <ClCompile Include="..\liboggvorbis\src\framing.c" />
-    <ClCompile Include="..\liboggvorbis\src\info.c" />
-    <ClCompile Include="..\liboggvorbis\src\lookup.c" />
-    <ClCompile Include="..\liboggvorbis\src\lpc.c" />
-    <ClCompile Include="..\liboggvorbis\src\lsp.c" />
-    <ClCompile Include="..\liboggvorbis\src\mapping0.c" />
-    <ClCompile Include="..\liboggvorbis\src\mdct.c" />
-    <ClCompile Include="..\liboggvorbis\src\psy.c" />
-    <ClCompile Include="..\liboggvorbis\src\registry.c" />
-    <ClCompile Include="..\liboggvorbis\src\res0.c" />
-    <ClCompile Include="..\liboggvorbis\src\sharedbook.c" />
-    <ClCompile Include="..\liboggvorbis\src\smallft.c" />
-    <ClCompile Include="..\liboggvorbis\src\synthesis.c" />
-    <ClCompile Include="..\liboggvorbis\src\vorbisenc.c" />
-    <ClCompile Include="..\liboggvorbis\src\vorbisfile.c" />
-    <ClCompile Include="..\liboggvorbis\src\window.c" />
-    <ClCompile Include="..\magicmenu.c" />
-    <ClCompile Include="..\main.c" />
-    <ClCompile Include="..\map.c" />
-    <ClCompile Include="..\midi.c" />
-    <ClCompile Include="..\mp3play.c" />
-    <ClCompile Include="..\oggplay.c" />
-    <ClCompile Include="..\overlay.c" />
-    <ClCompile Include="..\palcfg.c" />
-    <ClCompile Include="..\palcommon.c" />
-    <ClCompile Include="..\palette.c" />
-    <ClCompile Include="..\play.c" />
-    <ClCompile Include="..\res.c" />
-    <ClCompile Include="..\resampler.c" />
-    <ClCompile Include="..\rixplay.cpp" />
-    <ClCompile Include="..\rngplay.c" />
-    <ClCompile Include="..\scene.c" />
-    <ClCompile Include="..\script.c" />
-    <ClCompile Include="..\sound.c" />
-    <ClCompile Include="..\text.c" />
-    <ClCompile Include="..\ui.c" />
-    <ClCompile Include="..\uibattle.c" />
-    <ClCompile Include="..\uigame.c" />
-    <ClCompile Include="..\util.c" />
-    <ClCompile Include="..\video.c" />
-    <ClCompile Include="..\yj1.c" />
-    <ClCompile Include="..\adplug\binfile.cpp" />
-    <ClCompile Include="..\adplug\binio.cpp" />
-    <ClCompile Include="..\adplug\dosbox_opl.cpp" />
-    <ClCompile Include="..\adplug\emuopl.cpp" />
-    <ClCompile Include="..\adplug\fmopl.c" />
-    <ClCompile Include="..\adplug\fprovide.cpp" />
-    <ClCompile Include="..\adplug\player.cpp" />
-    <ClCompile Include="..\adplug\rix.cpp" />
-    <ClCompile Include="..\adplug\surroundopl.cpp" />
-    <ClCompile Include="..\native_midi\native_midi_common.c" />
-    <ClCompile Include="..\native_midi\native_midi_win32.c" />
-    <ClCompile Include="..\libmad\bit.c" />
-    <ClCompile Include="..\libmad\decoder.c" />
-    <ClCompile Include="..\libmad\fixed.c" />
-    <ClCompile Include="..\libmad\frame.c" />
-    <ClCompile Include="..\libmad\huffman.c" />
-    <ClCompile Include="..\libmad\layer12.c" />
-    <ClCompile Include="..\libmad\layer3.c" />
-    <ClCompile Include="..\libmad\music_mad.c" />
-    <ClCompile Include="..\libmad\stream.c" />
-    <ClCompile Include="..\libmad\synth.c" />
-    <ClCompile Include="..\libmad\timer.c" />
-    <ClCompile Include="win32.cpp" />
-    <ClCompile Include="..\tests\test_swprintf.cpp">
-      <Filter>tests</Filter>
+    <ClCompile Include="..\3rd\googletest\googletest\src\gtest-all.cc">
+      <Filter>dep</Filter>
     </ClCompile>
-    <ClCompile Include="..\tests\testmain.cpp">
+    <ClCompile Include="..\tests\test_swprintf.cpp">
       <Filter>tests</Filter>
     </ClCompile>
-    <ClCompile Include="..\3rd\googletest\googletest\src\gtest-all.cc">
+    <ClCompile Include="..\tests\test_main.cpp">
       <Filter>dep</Filter>
     </ClCompile>
   </ItemGroup>
   <ItemGroup>
-    <ClInclude Include="..\adplug\adlibemu.h" />
-    <ClInclude Include="..\adplug\dbemuopl.h" />
-    <ClInclude Include="..\adplug\dbopl.h" />
-    <ClInclude Include="..\adplug\kemuopl.h" />
-    <ClInclude Include="..\ascii.h" />
-    <ClInclude Include="..\battle.h" />
-    <ClInclude Include="..\codepage.h" />
-    <ClInclude Include="..\common.h" />
-    <ClInclude Include="..\liboggvorbis\include\ogg\config_types.h" />
-    <ClInclude Include="..\ending.h" />
-    <ClInclude Include="..\fight.h" />
-    <ClInclude Include="..\font.h" />
-    <ClInclude Include="..\fontglyph.h" />
-    <ClInclude Include="..\game.h" />
-    <ClInclude Include="..\global.h" />
-    <ClInclude Include="..\input.h" />
-    <ClInclude Include="..\itemmenu.h" />
-    <ClInclude Include="..\liboggvorbis\include\ogg\ogg.h" />
-    <ClInclude Include="..\liboggvorbis\include\ogg\os_types.h" />
-    <ClInclude Include="..\liboggvorbis\include\vorbis\codec.h" />
-    <ClInclude Include="..\liboggvorbis\include\vorbis\vorbisenc.h" />
-    <ClInclude Include="..\liboggvorbis\include\vorbis\vorbisfile.h" />
-    <ClInclude Include="..\liboggvorbis\src\backends.h" />
-    <ClInclude Include="..\liboggvorbis\src\bitrate.h" />
-    <ClInclude Include="..\liboggvorbis\src\books\coupled\res_books_51.h" />
-    <ClInclude Include="..\liboggvorbis\src\books\coupled\res_books_stereo.h" />
-    <ClInclude Include="..\liboggvorbis\src\books\floor\floor_books.h" />
-    <ClInclude Include="..\liboggvorbis\src\books\uncoupled\res_books_uncoupled.h" />
-    <ClInclude Include="..\liboggvorbis\src\codebook.h" />
-    <ClInclude Include="..\liboggvorbis\src\codec_internal.h" />
-    <ClInclude Include="..\liboggvorbis\src\envelope.h" />
-    <ClInclude Include="..\liboggvorbis\src\highlevel.h" />
-    <ClInclude Include="..\liboggvorbis\src\lookup.h" />
-    <ClInclude Include="..\liboggvorbis\src\lookup_data.h" />
-    <ClInclude Include="..\liboggvorbis\src\lpc.h" />
-    <ClInclude Include="..\liboggvorbis\src\lsp.h" />
-    <ClInclude Include="..\liboggvorbis\src\masking.h" />
-    <ClInclude Include="..\liboggvorbis\src\mdct.h" />
-    <ClInclude Include="..\liboggvorbis\src\misc.h" />
-    <ClInclude Include="..\liboggvorbis\src\modes\floor_all.h" />
-    <ClInclude Include="..\liboggvorbis\src\modes\psych_11.h" />
-    <ClInclude Include="..\liboggvorbis\src\modes\psych_16.h" />
-    <ClInclude Include="..\liboggvorbis\src\modes\psych_44.h" />
-    <ClInclude Include="..\liboggvorbis\src\modes\psych_8.h" />
-    <ClInclude Include="..\liboggvorbis\src\modes\residue_16.h" />
-    <ClInclude Include="..\liboggvorbis\src\modes\residue_44.h" />
-    <ClInclude Include="..\liboggvorbis\src\modes\residue_44p51.h" />
-    <ClInclude Include="..\liboggvorbis\src\modes\residue_44u.h" />
-    <ClInclude Include="..\liboggvorbis\src\modes\residue_8.h" />
-    <ClInclude Include="..\liboggvorbis\src\modes\setup_11.h" />
-    <ClInclude Include="..\liboggvorbis\src\modes\setup_16.h" />
-    <ClInclude Include="..\liboggvorbis\src\modes\setup_22.h" />
-    <ClInclude Include="..\liboggvorbis\src\modes\setup_32.h" />
-    <ClInclude Include="..\liboggvorbis\src\modes\setup_44.h" />
-    <ClInclude Include="..\liboggvorbis\src\modes\setup_44p51.h" />
-    <ClInclude Include="..\liboggvorbis\src\modes\setup_44u.h" />
-    <ClInclude Include="..\liboggvorbis\src\modes\setup_8.h" />
-    <ClInclude Include="..\liboggvorbis\src\modes\setup_X.h" />
-    <ClInclude Include="..\liboggvorbis\src\os.h" />
-    <ClInclude Include="..\liboggvorbis\src\psy.h" />
-    <ClInclude Include="..\liboggvorbis\src\registry.h" />
-    <ClInclude Include="..\liboggvorbis\src\scales.h" />
-    <ClInclude Include="..\liboggvorbis\src\smallft.h" />
-    <ClInclude Include="..\liboggvorbis\src\window.h" />
-    <ClInclude Include="..\magicmenu.h" />
-    <ClInclude Include="..\main.h" />
-    <ClInclude Include="..\map.h" />
-    <ClInclude Include="..\midi.h" />
-    <ClInclude Include="..\palcfg.h" />
-    <ClInclude Include="..\palcommon.h" />
-    <ClInclude Include="..\palette.h" />
-    <ClInclude Include="..\play.h" />
-    <ClInclude Include="..\res.h" />
-    <ClInclude Include="..\resampler.h" />
-    <ClInclude Include="..\players.h" />
-    <ClInclude Include="..\rngplay.h" />
-    <ClInclude Include="..\scene.h" />
-    <ClInclude Include="..\script.h" />
-    <ClInclude Include="..\audio.h" />
-    <ClInclude Include="..\text.h" />
-    <ClInclude Include="..\ui.h" />
-    <ClInclude Include="..\uibattle.h" />
-    <ClInclude Include="..\uigame.h" />
-    <ClInclude Include="..\util.h" />
-    <ClInclude Include="..\video.h" />
-    <ClInclude Include="..\adplug\binfile.h" />
-    <ClInclude Include="..\adplug\binio.h" />
-    <ClInclude Include="..\adplug\demuopl.h" />
-    <ClInclude Include="..\adplug\dosbox_opl.h" />
-    <ClInclude Include="..\adplug\emuopl.h" />
-    <ClInclude Include="..\adplug\fmopl.h" />
-    <ClInclude Include="..\adplug\fprovide.h" />
-    <ClInclude Include="..\adplug\opl.h" />
-    <ClInclude Include="..\adplug\player.h" />
-    <ClInclude Include="..\adplug\rix.h" />
-    <ClInclude Include="..\adplug\surroundopl.h" />
-    <ClInclude Include="..\native_midi\native_midi.h" />
-    <ClInclude Include="..\native_midi\native_midi_common.h" />
-    <ClInclude Include="..\libmad\bit.h" />
-    <ClInclude Include="..\libmad\decoder.h" />
-    <ClInclude Include="..\libmad\fixed.h" />
-    <ClInclude Include="..\libmad\frame.h" />
-    <ClInclude Include="..\libmad\huffman.h" />
-    <ClInclude Include="..\libmad\layer12.h" />
-    <ClInclude Include="..\libmad\layer3.h" />
-    <ClInclude Include="..\libmad\libmad_config.h" />
-    <ClInclude Include="..\libmad\libmad_global.h" />
-    <ClInclude Include="..\libmad\mad.h" />
-    <ClInclude Include="..\libmad\music_mad.h" />
-    <ClInclude Include="..\libmad\stream.h" />
-    <ClInclude Include="..\libmad\synth.h" />
-    <ClInclude Include="..\libmad\timer.h" />
-    <ClInclude Include="pal_config.h" />
-    <ClInclude Include="resource.h" />
-  </ItemGroup>
-  <ItemGroup>
-    <ResourceCompile Include="sdlpal.rc" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="..\libmad\D.dat" />
-    <None Include="..\libmad\imdct_s.dat" />
-    <None Include="..\libmad\qc_table.dat" />
-    <None Include="..\libmad\rq_table.dat" />
-    <None Include="..\libmad\sf_table.dat" />
-    <None Include="..\sdlpal.cfg.example" />
-    <None Include="..\sdlpal.ico" />
-  </ItemGroup>
-  <ItemGroup>
-    <Text Include="..\AUTHORS.txt" />
-    <Text Include="..\README.txt" />
-  </ItemGroup>
-  <ItemGroup>
-    <Filter Include="tests">
-      <UniqueIdentifier>{f38de1a7-1c02-4f23-90b8-cd74df075cab}</UniqueIdentifier>
-    </Filter>
     <Filter Include="dep">
       <UniqueIdentifier>{7d80fa68-7d55-4187-bdc9-be9ab8f941e3}</UniqueIdentifier>
     </Filter>
-    <Filter Include="etc">
-      <UniqueIdentifier>{1048a88c-c23f-4c69-923a-6f938c2010af}</UniqueIdentifier>
+    <Filter Include="tests">
+      <UniqueIdentifier>{2bd5101c-cb55-4f17-9797-37157f577308}</UniqueIdentifier>
     </Filter>
   </ItemGroup>
 </Project>

+ 8 - 17
win32/sdlpal.sln

@@ -1,23 +1,18 @@
 
 Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 15
-VisualStudioVersion = 15.0.26206.0
+# Visual Studio 14
+VisualStudioVersion = 14.0.25420.1
 MinimumVisualStudioVersion = 10.0.40219.1
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sdlpal", "sdlpal.vcxproj", "{837BDF47-9375-4C30-866B-07E262E94A01}"
 EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sdlpal-test", "sdlpal-test.vcxproj", "{FF96772A-FC17-4B67-B770-F4E09DECC15A}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{B521C9E7-57F0-46B4-B6AC-34A898C79E1E}"
-	ProjectSection(SolutionItems) = preProject
-		sdlpal.gta.runsettings = sdlpal.gta.runsettings
-	EndProjectSection
-EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Win32 = Debug|Win32
 		Debug|x64 = Debug|x64
 		Release|Win32 = Release|Win32
 		Release|x64 = Release|x64
+		Test|Win32 = Test|Win32
+		Test|x64 = Test|x64
 	EndGlobalSection
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
 		{837BDF47-9375-4C30-866B-07E262E94A01}.Debug|Win32.ActiveCfg = Debug|Win32
@@ -28,14 +23,10 @@ Global
 		{837BDF47-9375-4C30-866B-07E262E94A01}.Release|Win32.Build.0 = Release|Win32
 		{837BDF47-9375-4C30-866B-07E262E94A01}.Release|x64.ActiveCfg = Release|x64
 		{837BDF47-9375-4C30-866B-07E262E94A01}.Release|x64.Build.0 = Release|x64
-		{FF96772A-FC17-4B67-B770-F4E09DECC15A}.Debug|Win32.ActiveCfg = Debug|Win32
-		{FF96772A-FC17-4B67-B770-F4E09DECC15A}.Debug|Win32.Build.0 = Debug|Win32
-		{FF96772A-FC17-4B67-B770-F4E09DECC15A}.Debug|x64.ActiveCfg = Debug|x64
-		{FF96772A-FC17-4B67-B770-F4E09DECC15A}.Debug|x64.Build.0 = Debug|x64
-		{FF96772A-FC17-4B67-B770-F4E09DECC15A}.Release|Win32.ActiveCfg = Release|Win32
-		{FF96772A-FC17-4B67-B770-F4E09DECC15A}.Release|Win32.Build.0 = Release|Win32
-		{FF96772A-FC17-4B67-B770-F4E09DECC15A}.Release|x64.ActiveCfg = Release|x64
-		{FF96772A-FC17-4B67-B770-F4E09DECC15A}.Release|x64.Build.0 = Release|x64
+		{837BDF47-9375-4C30-866B-07E262E94A01}.Test|Win32.ActiveCfg = Test|Win32
+		{837BDF47-9375-4C30-866B-07E262E94A01}.Test|Win32.Build.0 = Test|Win32
+		{837BDF47-9375-4C30-866B-07E262E94A01}.Test|x64.ActiveCfg = Test|x64
+		{837BDF47-9375-4C30-866B-07E262E94A01}.Test|x64.Build.0 = Test|x64
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE

+ 127 - 8
win32/sdlpal.vcxproj

@@ -17,23 +17,40 @@
       <Configuration>Release</Configuration>
       <Platform>x64</Platform>
     </ProjectConfiguration>
+    <ProjectConfiguration Include="Test|Win32">
+      <Configuration>Test</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Test|x64">
+      <Configuration>Test</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
   </ItemGroup>
   <PropertyGroup Label="Globals">
     <ProjectGuid>{837BDF47-9375-4C30-866B-07E262E94A01}</ProjectGuid>
     <RootNamespace>sdlpal</RootNamespace>
-    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <UseOfMfc>false</UseOfMfc>
-    <PlatformToolset>v140_xp</PlatformToolset>
+    <PlatformToolset>v120_xp</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Test|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseOfMfc>false</UseOfMfc>
+    <PlatformToolset>v120_xp</PlatformToolset>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <UseOfMfc>false</UseOfMfc>
     <PlatformToolset>v120_xp</PlatformToolset>
   </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Test|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseOfMfc>false</UseOfMfc>
+    <PlatformToolset>v120_xp</PlatformToolset>
+  </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <UseOfMfc>false</UseOfMfc>
@@ -51,10 +68,18 @@
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
     <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props" />
   </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Test|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props" />
+  </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
     <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props" />
   </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Test|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props" />
+  </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
     <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props" />
@@ -69,16 +94,26 @@
     <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
     <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
     <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Test|Win32'">true</LinkIncremental>
     <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Test|x64'">true</LinkIncremental>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <IncludePath>..\SDL2\include;$(IncludePath)</IncludePath>
     <LibraryPath>..\SDL2\VisualC\$(Platform)\$(Configuration)\;..\SDL2\lib\x86;$(LibraryPath)</LibraryPath>
   </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Test|Win32'">
+    <IncludePath>..\SDL2\include;..\3rd\googletest\googletest\include;$(IncludePath)</IncludePath>
+    <LibraryPath>..\SDL2\VisualC\$(Platform)\Debug\;..\SDL2\lib\x86;$(LibraryPath)</LibraryPath>
+  </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
     <IncludePath>..\SDL2\include;$(IncludePath)</IncludePath>
     <LibraryPath>..\SDL2\VisualC\$(Platform)\$(Configuration)\;..\SDL2\lib\x64;$(LibraryPath)</LibraryPath>
   </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Test|x64'">
+    <IncludePath>..\SDL2\include;..\3rd\googletest\googletest\include;$(IncludePath)</IncludePath>
+    <LibraryPath>..\SDL2\VisualC\$(Platform)\Debug\;..\SDL2\lib\x64;$(LibraryPath)</LibraryPath>
+  </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <IncludePath>..\SDL2\include;$(IncludePath)</IncludePath>
     <LibraryPath>..\SDL2\VisualC\$(Platform)\$(Configuration)\;..\SDL2\lib\x86;$(LibraryPath)</LibraryPath>
@@ -98,7 +133,7 @@
       </HeaderFileName>
     </Midl>
     <ClCompile>
-      <AdditionalIncludeDirectories>.\;..\liboggvorbis\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>..\;.\;..\liboggvorbis\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>PAL_HAS_PLATFORM_SPECIFIC_UTILS;WIN32;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <StringPooling>true</StringPooling>
       <FunctionLevelLinking>true</FunctionLevelLinking>
@@ -127,7 +162,7 @@
       </HeaderFileName>
     </Midl>
     <ClCompile>
-      <AdditionalIncludeDirectories>.\;..\liboggvorbis\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>..\;.\;..\liboggvorbis\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>PAL_HAS_PLATFORM_SPECIFIC_UTILS;WIN32;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <StringPooling>true</StringPooling>
       <FunctionLevelLinking>true</FunctionLevelLinking>
@@ -156,8 +191,8 @@
       </HeaderFileName>
     </Midl>
     <ClCompile>
-      <AdditionalIncludeDirectories>.\;..\liboggvorbis\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>PAL_HAS_PLATFORM_SPECIFIC_UTILS;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>..\;.\;..\liboggvorbis\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>PAL_HAS_PLATFORM_SPECIFIC_UTILS;WIN32;_WINDOWS;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <MinimalRebuild>true</MinimalRebuild>
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
@@ -177,6 +212,39 @@
     </Link>
     <Bscmake />
   </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Test|Win32'">
+    <Midl>
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MkTypLibCompatible>true</MkTypLibCompatible>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <TargetEnvironment>Win32</TargetEnvironment>
+      <TypeLibraryName>.\Debug/sdlpal_sdl2.tlb</TypeLibraryName>
+      <HeaderFileName>
+      </HeaderFileName>
+    </Midl>
+    <ClCompile>
+      <AdditionalIncludeDirectories>..\;.\;..\liboggvorbis\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>PAL_HAS_PLATFORM_SPECIFIC_UTILS;WIN32;_WINDOWS;_DEBUG;UNIT_TEST;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>true</MinimalRebuild>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+    </ClCompile>
+    <ResourceCompile>
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <Culture>0x0804</Culture>
+    </ResourceCompile>
+    <Link>
+      <AdditionalDependencies>winmm.lib;sdl2.lib;sdl2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>
+      </AdditionalLibraryDirectories>
+      <SubSystem>Console</SubSystem>
+    </Link>
+    <Bscmake />
+  </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
     <Midl>
       <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@@ -187,8 +255,8 @@
       </HeaderFileName>
     </Midl>
     <ClCompile>
-      <AdditionalIncludeDirectories>.\;..\liboggvorbis\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>PAL_HAS_PLATFORM_SPECIFIC_UTILS;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>..\;.\;..\liboggvorbis\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>PAL_HAS_PLATFORM_SPECIFIC_UTILS;WIN32;_WINDOWS;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
       <WarningLevel>Level3</WarningLevel>
@@ -206,7 +274,46 @@
     </Link>
     <Bscmake />
   </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Test|x64'">
+    <Midl>
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MkTypLibCompatible>true</MkTypLibCompatible>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <TypeLibraryName>.\Debug/sdlpal_sdl2.tlb</TypeLibraryName>
+      <HeaderFileName>
+      </HeaderFileName>
+    </Midl>
+    <ClCompile>
+      <AdditionalIncludeDirectories>..\;.\;..\liboggvorbis\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>PAL_HAS_PLATFORM_SPECIFIC_UTILS;WIN32;_WINDOWS;_DEBUG;UNIT_TEST;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+    </ClCompile>
+    <ResourceCompile>
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <Culture>0x0804</Culture>
+    </ResourceCompile>
+    <Link>
+      <AdditionalDependencies>winmm.lib;sdl2.lib;sdl2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <SubSystem>Console</SubSystem>
+      <AdditionalLibraryDirectories>
+      </AdditionalLibraryDirectories>
+    </Link>
+    <Bscmake />
+  </ItemDefinitionGroup>
   <ItemGroup>
+    <ClCompile Include="..\3rd\googletest\googletest\src\gtest-all.cc">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Test|Win32'">..\3rd\googletest\googletest;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Test|x64'">..\3rd\googletest\googletest;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+    </ClCompile>
     <ClCompile Include="..\adplug\adlibemu.c" />
     <ClCompile Include="..\adplug\dbemuopl.cpp" />
     <ClCompile Include="..\adplug\dbopl.cpp">
@@ -271,6 +378,18 @@
     <ClCompile Include="..\scene.c" />
     <ClCompile Include="..\script.c" />
     <ClCompile Include="..\sound.c" />
+    <ClCompile Include="..\tests\test_main.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\tests\test_swprintf.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+    </ClCompile>
     <ClCompile Include="..\text.c" />
     <ClCompile Include="..\ui.c" />
     <ClCompile Include="..\uibattle.c" />

+ 15 - 0
win32/sdlpal.vcxproj.filters

@@ -54,6 +54,12 @@
     <Filter Include="platform">
       <UniqueIdentifier>{06f44698-1e02-440e-bc40-9858a46c2d8f}</UniqueIdentifier>
     </Filter>
+    <Filter Include="Test Files">
+      <UniqueIdentifier>{c04132fc-026a-4e64-892d-76834bbdaef8}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Test Files\deps">
+      <UniqueIdentifier>{5f2a83a2-9824-4e9e-a352-8dc90c92fbde}</UniqueIdentifier>
+    </Filter>
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="..\battle.c">
@@ -311,6 +317,15 @@
     <ClCompile Include="..\audio.c">
       <Filter>Source Files</Filter>
     </ClCompile>
+    <ClCompile Include="..\3rd\googletest\googletest\src\gtest-all.cc">
+      <Filter>Test Files\deps</Filter>
+    </ClCompile>
+    <ClCompile Include="..\tests\test_main.cpp">
+      <Filter>Test Files\deps</Filter>
+    </ClCompile>
+    <ClCompile Include="..\tests\test_swprintf.cpp">
+      <Filter>Test Files</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="..\ascii.h">