OSDN Git Service

editlib: Add unit test project
authorTakashi Sawanaka <sdottaka@users.sourceforge.net>
Thu, 21 Mar 2019 12:47:38 +0000 (21:47 +0900)
committerTakashi Sawanaka <sdottaka@users.sourceforge.net>
Thu, 21 Mar 2019 12:47:38 +0000 (21:47 +0900)
Externals/crystaledit/editlib/lua.cpp
Externals/crystaledit/test/stdafx.cpp [new file with mode: 0644]
Externals/crystaledit/test/stdafx.h [new file with mode: 0644]
Externals/crystaledit/test/targetver.h [new file with mode: 0644]
Externals/crystaledit/test/test.vs2017.vcxproj [new file with mode: 0644]
Externals/crystaledit/test/test.vs2017.vcxproj.filters [new file with mode: 0644]
Externals/crystaledit/test/unittest1.cpp [new file with mode: 0644]

index 4371a7a..39bcd81 100644 (file)
@@ -199,6 +199,7 @@ out:
                          std::all_of(pszChars + I - nEqualsSignCount, pszChars + I, [](const auto c) { return c == '='; }))\r
             {\r
               dwCookie &= ~COOKIE_RAWSTRING;\r
+              COOKIE_SET_LUA_EQUALS_SIGN_COUNT(dwCookie, 0);\r
               bRedefineBlock = true;\r
             }\r
           continue;\r
@@ -212,6 +213,7 @@ out:
                          std::all_of(pszChars + I - nEqualsSignCount, pszChars + I, [](const auto c) { return c == '='; }))\r
             {\r
               dwCookie &= ~COOKIE_EXT_COMMENT;\r
+              COOKIE_SET_LUA_EQUALS_SIGN_COUNT(dwCookie, 0);\r
               bRedefineBlock = true;\r
             }\r
           continue;\r
diff --git a/Externals/crystaledit/test/stdafx.cpp b/Externals/crystaledit/test/stdafx.cpp
new file mode 100644 (file)
index 0000000..96da927
--- /dev/null
@@ -0,0 +1,8 @@
+// stdafx.cpp : source file that includes just the standard includes\r
+// test.pch will be the pre-compiled header\r
+// stdafx.obj will contain the pre-compiled type information\r
+\r
+#include "stdafx.h"\r
+\r
+// TODO: reference any additional headers you need in STDAFX.H\r
+// and not in this file\r
diff --git a/Externals/crystaledit/test/stdafx.h b/Externals/crystaledit/test/stdafx.h
new file mode 100644 (file)
index 0000000..9864ae7
--- /dev/null
@@ -0,0 +1,16 @@
+// stdafx.h : include file for standard system include files,\r
+// or project specific include files that are used frequently, but\r
+// are changed infrequently\r
+//\r
+\r
+#pragma once\r
+\r
+#include "targetver.h"\r
+\r
+// Headers for CppUnitTest\r
+#include "CppUnitTest.h"\r
+\r
+// TODO: reference additional headers your program requires here\r
+#include <Windows.h>\r
+#include <tchar.h>\r
+#define ASSERT(x)\r
diff --git a/Externals/crystaledit/test/targetver.h b/Externals/crystaledit/test/targetver.h
new file mode 100644 (file)
index 0000000..90e767b
--- /dev/null
@@ -0,0 +1,8 @@
+#pragma once\r
+\r
+// Including SDKDDKVer.h defines the highest available Windows platform.\r
+\r
+// If you wish to build your application for a previous Windows platform, include WinSDKVer.h and\r
+// set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h.\r
+\r
+#include <SDKDDKVer.h>\r
diff --git a/Externals/crystaledit/test/test.vs2017.vcxproj b/Externals/crystaledit/test/test.vs2017.vcxproj
new file mode 100644 (file)
index 0000000..70cbe04
--- /dev/null
@@ -0,0 +1,181 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+  <ItemGroup Label="ProjectConfigurations">\r
+    <ProjectConfiguration Include="Debug|Win32">\r
+      <Configuration>Debug</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Release|Win32">\r
+      <Configuration>Release</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Debug|x64">\r
+      <Configuration>Debug</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Release|x64">\r
+      <Configuration>Release</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+  </ItemGroup>\r
+  <PropertyGroup Label="Globals">\r
+    <VCProjectVersion>15.0</VCProjectVersion>\r
+    <ProjectGuid>{D358EAE3-AE53-4292-9384-6DB97E8B8D40}</ProjectGuid>\r
+    <Keyword>Win32Proj</Keyword>\r
+    <RootNamespace>test</RootNamespace>\r
+    <WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion>\r
+    <ProjectSubType>NativeUnitTestProject</ProjectSubType>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
+    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
+    <UseDebugLibraries>true</UseDebugLibraries>\r
+    <PlatformToolset>v141</PlatformToolset>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+    <UseOfMfc>false</UseOfMfc>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
+    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
+    <UseDebugLibraries>false</UseDebugLibraries>\r
+    <PlatformToolset>v141</PlatformToolset>\r
+    <WholeProgramOptimization>true</WholeProgramOptimization>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+    <UseOfMfc>false</UseOfMfc>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
+    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
+    <UseDebugLibraries>true</UseDebugLibraries>\r
+    <PlatformToolset>v141</PlatformToolset>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+    <UseOfMfc>false</UseOfMfc>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
+    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
+    <UseDebugLibraries>false</UseDebugLibraries>\r
+    <PlatformToolset>v141</PlatformToolset>\r
+    <WholeProgramOptimization>true</WholeProgramOptimization>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+    <UseOfMfc>false</UseOfMfc>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
+  <ImportGroup Label="ExtensionSettings">\r
+  </ImportGroup>\r
+  <ImportGroup Label="Shared">\r
+  </ImportGroup>\r
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <PropertyGroup Label="UserMacros" />\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+    <LinkIncremental>true</LinkIncremental>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+    <LinkIncremental>true</LinkIncremental>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+    <LinkIncremental>true</LinkIncremental>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+    <LinkIncremental>true</LinkIncremental>\r
+  </PropertyGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+    <ClCompile>\r
+      <PrecompiledHeader>Use</PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>$(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>WIN32;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <UseFullPaths>true</UseFullPaths>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Windows</SubSystem>\r
+      <AdditionalLibraryDirectories>$(VCInstallDir)UnitTest\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
+    <ClCompile>\r
+      <PrecompiledHeader>Use</PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>$(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <UseFullPaths>true</UseFullPaths>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Windows</SubSystem>\r
+      <AdditionalLibraryDirectories>$(VCInstallDir)UnitTest\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+    <ClCompile>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <PrecompiledHeader>Use</PrecompiledHeader>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <IntrinsicFunctions>true</IntrinsicFunctions>\r
+      <AdditionalIncludeDirectories>$(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>WIN32;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <UseFullPaths>true</UseFullPaths>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Windows</SubSystem>\r
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
+      <OptimizeReferences>true</OptimizeReferences>\r
+      <AdditionalLibraryDirectories>$(VCInstallDir)UnitTest\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
+    <ClCompile>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <PrecompiledHeader>Use</PrecompiledHeader>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <IntrinsicFunctions>true</IntrinsicFunctions>\r
+      <AdditionalIncludeDirectories>$(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <UseFullPaths>true</UseFullPaths>\r
+    </ClCompile>\r
+    <Link>\r
+      <SubSystem>Windows</SubSystem>\r
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
+      <OptimizeReferences>true</OptimizeReferences>\r
+      <AdditionalLibraryDirectories>$(VCInstallDir)UnitTest\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemGroup>\r
+    <ClInclude Include="..\editlib\crystallineparser.h" />\r
+    <ClInclude Include="..\editlib\string_util.h" />\r
+    <ClInclude Include="..\editlib\SyntaxColors.h" />\r
+    <ClInclude Include="stdafx.h" />\r
+    <ClInclude Include="targetver.h" />\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClCompile Include="..\editlib\lua.cpp" />\r
+    <ClCompile Include="..\editlib\string_util.cpp">\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">NotUsing</PrecompiledHeader>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">NotUsing</PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="..\editlib\SyntaxColors.cpp" />\r
+    <ClCompile Include="stdafx.cpp">\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>\r
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>\r
+    </ClCompile>\r
+    <ClCompile Include="unittest1.cpp" />\r
+  </ItemGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
+  <ImportGroup Label="ExtensionTargets">\r
+  </ImportGroup>\r
+</Project>
\ No newline at end of file
diff --git a/Externals/crystaledit/test/test.vs2017.vcxproj.filters b/Externals/crystaledit/test/test.vs2017.vcxproj.filters
new file mode 100644 (file)
index 0000000..5a035a4
--- /dev/null
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+  <ItemGroup>\r
+    <Filter Include="Source Files">\r
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>\r
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>\r
+    </Filter>\r
+    <Filter Include="Header Files">\r
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>\r
+      <Extensions>h;hh;hpp;hxx;hm;inl;inc;ipp;xsd</Extensions>\r
+    </Filter>\r
+    <Filter Include="Resource Files">\r
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>\r
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>\r
+    </Filter>\r
+    <Filter Include="Source Files\editlib">\r
+      <UniqueIdentifier>{9f474218-4f7b-40d9-803e-d13e06cdee69}</UniqueIdentifier>\r
+    </Filter>\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClInclude Include="stdafx.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="targetver.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\editlib\string_util.h">\r
+      <Filter>Source Files\editlib</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\editlib\SyntaxColors.h">\r
+      <Filter>Source Files\editlib</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\editlib\crystallineparser.h">\r
+      <Filter>Source Files\editlib</Filter>\r
+    </ClInclude>\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClCompile Include="stdafx.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="unittest1.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\editlib\lua.cpp">\r
+      <Filter>Source Files\editlib</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\editlib\string_util.cpp">\r
+      <Filter>Source Files\editlib</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\editlib\SyntaxColors.cpp">\r
+      <Filter>Source Files\editlib</Filter>\r
+    </ClCompile>\r
+  </ItemGroup>\r
+</Project>
\ No newline at end of file
diff --git a/Externals/crystaledit/test/unittest1.cpp b/Externals/crystaledit/test/unittest1.cpp
new file mode 100644 (file)
index 0000000..3866529
--- /dev/null
@@ -0,0 +1,103 @@
+#include "stdafx.h"\r
+#include "CppUnitTest.h"\r
+#include "../editlib/crystallineparser.h"\r
+#include "../editlib/SyntaxColors.h"\r
+\r
+using namespace Microsoft::VisualStudio::CppUnitTestFramework;\r
+\r
+namespace test\r
+{              \r
+       TEST_CLASS(UnitTest1)\r
+       {\r
+       public:\r
+               TEST_METHOD(LuaSyntax)\r
+               {\r
+                       std::unique_ptr<CrystalLineParser::TEXTBLOCK[]> pblocks(new CrystalLineParser::TEXTBLOCK[256]);\r
+                       struct TestData {\r
+                               DWORD dwCookie;\r
+                               TCHAR *pszChars;\r
+                       } data[] = {\r
+                               //                                             1         2         3         4         5\r
+                               //                                   012345678901234567890123456789012345678901234657890123456\r
+                               {0,                             LR"!(a="\"abc";)!" },\r
+                               {0,                             LR"!(ab='\'abc';)!" },\r
+                               {0,                              _T("return")},\r
+                               {0,                              _T("--comment")},\r
+                               {0,                              _T("return abc(1)")},\r
+                               {0,                              _T("--[[comment]]--[=[]]]=]--[==[]==][[]][=[s]=][==[[[]]]==]a")},\r
+                               {0,                              _T("--[[a")},\r
+                               {COOKIE_EXT_COMMENT,             _T("]]--[=[") },\r
+                               {COOKIE_EXT_COMMENT | (1 << 28), _T("]=]--[==[") },\r
+                               {COOKIE_EXT_COMMENT | (2 << 28), _T("]==][[") },\r
+                               {COOKIE_RAWSTRING,               _T("]][=[") },\r
+                               {COOKIE_RAWSTRING | (1 << 28),   _T("]=][==[") },\r
+                               {COOKIE_RAWSTRING | (2 << 28),   _T("]==];") },\r
+                       };\r
+                       struct Expected {\r
+                               DWORD dwCookie;\r
+                               CrystalLineParser::TEXTBLOCK pblocks[10];\r
+                               size_t nblocks;\r
+                       } expected[] = {\r
+                               { 0, {\r
+                                       {0,  COLORINDEX_NORMALTEXT, COLORINDEX_BKGND},\r
+                                       {1,  COLORINDEX_OPERATOR,   COLORINDEX_BKGND},\r
+                                       {2,  COLORINDEX_STRING,     COLORINDEX_BKGND},\r
+                                       {9,  COLORINDEX_OPERATOR,   COLORINDEX_BKGND},\r
+                                       }, 4},\r
+                               { 0, {\r
+                                       {0,  COLORINDEX_NORMALTEXT, COLORINDEX_BKGND},\r
+                                       {2,  COLORINDEX_OPERATOR,   COLORINDEX_BKGND},\r
+                                       {3,  COLORINDEX_STRING,     COLORINDEX_BKGND},\r
+                                       {10, COLORINDEX_OPERATOR,   COLORINDEX_BKGND},\r
+                                       }, 4},\r
+                               { 0, {\r
+                                       {0,  COLORINDEX_KEYWORD,    COLORINDEX_BKGND},\r
+                                       }, 1},\r
+                               { 0, {\r
+                                       {0,  COLORINDEX_COMMENT,    COLORINDEX_BKGND},\r
+                                       }, 1},\r
+                               { 0, {\r
+                                       {0,  COLORINDEX_KEYWORD,    COLORINDEX_BKGND},\r
+                                       {6,  COLORINDEX_OPERATOR,   COLORINDEX_BKGND},\r
+                                       {7,  COLORINDEX_FUNCNAME,   COLORINDEX_BKGND},\r
+                                       {10, COLORINDEX_OPERATOR,   COLORINDEX_BKGND},\r
+                                       {11, COLORINDEX_NUMBER,    COLORINDEX_BKGND},\r
+                                       {12, COLORINDEX_OPERATOR,   COLORINDEX_BKGND},\r
+                                       }, 6},\r
+                               { 0, {\r
+                                       {0,  COLORINDEX_COMMENT,    COLORINDEX_BKGND},\r
+                                       {13, COLORINDEX_COMMENT,    COLORINDEX_BKGND},\r
+                                       {23, COLORINDEX_COMMENT,    COLORINDEX_BKGND},\r
+                                       {33, COLORINDEX_STRING,     COLORINDEX_BKGND},\r
+                                       {37, COLORINDEX_STRING,     COLORINDEX_BKGND},\r
+                                       {44, COLORINDEX_STRING,     COLORINDEX_BKGND},\r
+                                       {56, COLORINDEX_NORMALTEXT, COLORINDEX_BKGND},\r
+                                       }, 7},\r
+                               { COOKIE_EXT_COMMENT,             {{0, COLORINDEX_COMMENT, COLORINDEX_BKGND}}, 1 },\r
+                               { COOKIE_EXT_COMMENT | (1 << 28), {{0, COLORINDEX_COMMENT, COLORINDEX_BKGND}, {2, COLORINDEX_COMMENT, COLORINDEX_BKGND}}, 2 },\r
+                               { COOKIE_EXT_COMMENT | (2 << 28), {{0, COLORINDEX_COMMENT, COLORINDEX_BKGND}, {3, COLORINDEX_COMMENT, COLORINDEX_BKGND}}, 2 },\r
+                               { COOKIE_RAWSTRING,               {{0, COLORINDEX_COMMENT, COLORINDEX_BKGND}, {4, COLORINDEX_STRING,  COLORINDEX_BKGND}}, 2 },\r
+                               { COOKIE_RAWSTRING | (1 << 28),   {{0, COLORINDEX_STRING,  COLORINDEX_BKGND}, {2, COLORINDEX_STRING,  COLORINDEX_BKGND}}, 2 },\r
+                               { COOKIE_RAWSTRING | (2 << 28),   {{0, COLORINDEX_STRING,  COLORINDEX_BKGND}, {3, COLORINDEX_STRING,  COLORINDEX_BKGND}}, 2 },\r
+                               { 0,                              {{0, COLORINDEX_STRING,  COLORINDEX_BKGND}, {4, COLORINDEX_OPERATOR, COLORINDEX_BKGND}}, 2 },\r
+                       };\r
+                       for (size_t i = 0; i < std::size(expected); ++i)\r
+                       {\r
+                               int nActualItems = 0;\r
+                               std::wstring msg = L"index: " + std::to_wstring(i);\r
+                               Assert::AreEqual(\r
+                                       static_cast<DWORD>(expected[i].dwCookie),\r
+                                       CrystalLineParser::ParseLineLua(data[i].dwCookie, data[i].pszChars, _tcslen(data[i].pszChars), pblocks.get(), nActualItems), msg.c_str());\r
+                               Assert::AreEqual(static_cast<int>(expected[i].nblocks), nActualItems, msg.c_str());\r
+                               for (int j = 0; j < nActualItems; ++j)\r
+                               {\r
+                                       std::wstring msg = L"index: " + std::to_wstring(i) + L"," + std::to_wstring(j);\r
+                                       Assert::AreEqual(expected[i].pblocks[j].m_nCharPos, pblocks[j].m_nCharPos, msg.c_str());\r
+                                       Assert::AreEqual(expected[i].pblocks[j].m_nColorIndex, pblocks[j].m_nColorIndex, msg.c_str());\r
+                                       Assert::AreEqual(expected[i].pblocks[j].m_nBgColorIndex, pblocks[j].m_nBgColorIndex, msg.c_str());\r
+                               }\r
+                       }\r
+               }\r
+\r
+       };\r
+}
\ No newline at end of file