[PATCH 2/3] d3dxof: Add some syntax tests and remove some useless ref count checks.
Christian Costa
titan.costa at gmail.com
Sun May 19 15:33:07 CDT 2013
---
dlls/d3dxof/tests/d3dxof.c | 209 +++++++++++++++++++++++++++++++++++---------
1 file changed, 165 insertions(+), 44 deletions(-)
diff --git a/dlls/d3dxof/tests/d3dxof.c b/dlls/d3dxof/tests/d3dxof.c
index 8e380a8..d03445c 100644
--- a/dlls/d3dxof/tests/d3dxof.c
+++ b/dlls/d3dxof/tests/d3dxof.c
@@ -110,21 +110,84 @@ static char template_syntax_array_mixed[] =
"DWORD dummy;\n"
"}\n";
-static char object_syntax_empty_array_semicolon[] =
+static char object_syntax_empty_array[] =
"xof 0302txt 0064\n"
"Buffer\n"
"{\n"
"0;\n"
-";\n"
"1234;\n"
"}\n";
-static char object_syntax_empty_array_nosemicolon[] =
+static char object_syntax_semicolon_txt[] =
"xof 0302txt 0064\n"
"Buffer\n"
"{\n"
-"0;\n"
-"1234;\n"
+"3;\n"
+"0; 1; 2;\n"
+"5;\n"
+"}\n";
+
+static char object_syntax_comma_txt[] =
+"xof 0302txt 0064\n"
+"Buffer\n"
+"{\n"
+"3,\n"
+"0, 1, 2,\n"
+"5,\n"
+"}\n";
+
+static char object_syntax_multi_semicolons_txt[] =
+"xof 0302txt 0064\n"
+"Buffer\n"
+"{\n"
+"3;;;;;\n"
+"0;;;;; 1;;;;; 2;;;;;\n"
+"5;;;;;\n"
+"}\n";
+
+static char object_syntax_multi_commas_txt[] =
+"xof 0302txt 0064\n"
+"Buffer\n"
+"{\n"
+"3;\n"
+"0, 1,, 2;\n"
+"5;\n"
+"}\n";
+
+static char object_syntax_multi_semicolons_and_comma_txt[] =
+"xof 0302txt 0064\n"
+"Buffer\n"
+"{\n"
+"3;;;;;,\n"
+"0;;;;;, 1;;;;;, 2;;;;;,\n"
+"5;;;;;,\n"
+"}\n";
+
+static char object_syntax_comma_and_semicolon_txt[] =
+"xof 0302txt 0064\n"
+"Buffer\n"
+"{\n"
+"3;\n"
+"0, 1,; 2;\n"
+"5;\n"
+"}\n";
+
+static char object_syntax_no_ending_separator_txt[] =
+"xof 0302txt 0064\n"
+"Buffer\n"
+"{\n"
+"3;\n"
+"0, 1, 2;\n"
+"5\n"
+"}\n";
+
+static char object_syntax_array_no_separator_txt[] =
+"xof 0302txt 0064\n"
+"Buffer\n"
+"{\n"
+"3;\n"
+"0 1 2;\n"
+"5;\n"
"}\n";
static char template_syntax_string[] =
@@ -563,7 +626,6 @@ static void test_getname(void)
static void test_syntax(void)
{
HRESULT hr;
- ULONG ref;
LPDIRECTXFILE lpDirectXFile = NULL;
LPDIRECTXFILEENUMOBJECT lpdxfeo;
LPDIRECTXFILEDATA lpdxfd;
@@ -588,39 +650,21 @@ static void test_syntax(void)
hr = IDirectXFile_RegisterTemplates(lpDirectXFile, template_syntax_array_mixed, sizeof(template_syntax_array_mixed) - 1);
ok(hr == DXFILE_OK, "IDirectXFileImpl_RegisterTemplates: %x\n", hr);
- dxflm.lpMemory = &object_syntax_empty_array_semicolon;
- dxflm.dSize = sizeof(object_syntax_empty_array_semicolon) - 1;
+ /* Test empty array */
+ dxflm.lpMemory = &object_syntax_empty_array;
+ dxflm.dSize = sizeof(object_syntax_empty_array) - 1;
hr = IDirectXFile_CreateEnumObject(lpDirectXFile, &dxflm, DXFILELOAD_FROMMEMORY, &lpdxfeo);
ok(hr == DXFILE_OK, "IDirectXFile_CreateEnumObject: %x\n", hr);
hr = IDirectXFileEnumObject_GetNextDataObject(lpdxfeo, &lpdxfd);
ok(hr == DXFILE_OK, "IDirectXFileEnumObject_GetNextDataObject: %x\n", hr);
-
- ref = IDirectXFileEnumObject_Release(lpdxfeo);
- ok(ref == 0, "Got refcount %d, expected 0\n", ref);
if (hr == DXFILE_OK)
- {
- ref = IDirectXFileData_Release(lpdxfd);
- ok(ref == 0, "Got refcount %d, expected 0\n", ref);
- }
-
- dxflm.lpMemory = &object_syntax_empty_array_nosemicolon;
- dxflm.dSize = sizeof(object_syntax_empty_array_nosemicolon) - 1;
- hr = IDirectXFile_CreateEnumObject(lpDirectXFile, &dxflm, DXFILELOAD_FROMMEMORY, &lpdxfeo);
- ok(hr == DXFILE_OK, "IDirectXFile_CreateEnumObject: %x\n", hr);
- hr = IDirectXFileEnumObject_GetNextDataObject(lpdxfeo, &lpdxfd);
- ok(hr == DXFILE_OK, "IDirectXFileEnumObject_GetNextDataObject: %x\n", hr);
-
- ref = IDirectXFileEnumObject_Release(lpdxfeo);
- ok(ref == 0, "Got refcount %d, expected 0\n", ref);
- if (hr == DXFILE_OK)
- {
- ref = IDirectXFileData_Release(lpdxfd);
- ok(ref == 0, "Got refcount %d, expected 0\n", ref);
- }
+ IDirectXFileData_Release(lpdxfd);
+ IDirectXFileEnumObject_Release(lpdxfeo);
hr = IDirectXFile_RegisterTemplates(lpDirectXFile, template_syntax_string, sizeof(template_syntax_string) - 1);
ok(hr == DXFILE_OK, "IDirectXFileImpl_RegisterTemplates: %x\n", hr);
+ /* Test normal string */
dxflm.lpMemory = &object_syntax_string_normal;
dxflm.dSize = sizeof(object_syntax_string_normal) - 1;
hr = IDirectXFile_CreateEnumObject(lpDirectXFile, &dxflm, DXFILELOAD_FROMMEMORY, &lpdxfeo);
@@ -631,15 +675,11 @@ static void test_syntax(void)
ok(hr == DXFILE_OK, "IDirectXFileData_GetData: %x\n", hr);
ok(size == sizeof(char*), "Got wrong data size %d\n", size);
ok(!strcmp(*string, "foobar"), "Got string %s, expected foobar\n", *string);
-
- ref = IDirectXFileEnumObject_Release(lpdxfeo);
- ok(ref == 0, "Got refcount %d, expected 0\n", ref);
if (hr == DXFILE_OK)
- {
- ref = IDirectXFileData_Release(lpdxfd);
- ok(ref == 0, "Got refcount %d, expected 0\n", ref);
- }
+ IDirectXFileData_Release(lpdxfd);
+ IDirectXFileEnumObject_Release(lpdxfeo);
+ /* Test string containing separator character */
dxflm.lpMemory = &object_syntax_string_with_separator;
dxflm.dSize = sizeof(object_syntax_string_with_separator) - 1;
hr = IDirectXFile_CreateEnumObject(lpDirectXFile, &dxflm, DXFILELOAD_FROMMEMORY, &lpdxfeo);
@@ -650,17 +690,97 @@ static void test_syntax(void)
ok(hr == DXFILE_OK, "IDirectXFileData_GetData: %x\n", hr);
ok(size == sizeof(char*), "Got wrong data size %d\n", size);
ok(!strcmp(*string, "foo;bar"), "Got string %s, expected foo;bar\n", *string);
-
- ref = IDirectXFileEnumObject_Release(lpdxfeo);
- ok(ref == 0, "Got refcount %d, expected 0\n", ref);
if (hr == DXFILE_OK)
+ IDirectXFileData_Release(lpdxfd);
+ IDirectXFileEnumObject_Release(lpdxfeo);
+
+ IDirectXFile_Release(lpDirectXFile);
+}
+
+static HRESULT test_buffer_object(IDirectXFile *dxfile, char* object_data, DWORD object_size)
+{
+ HRESULT hr, ret;
+ IDirectXFileEnumObject *enum_object;
+ IDirectXFileData *file_data;
+ DXFILELOADMEMORY load_info;
+ DWORD size;
+ const DWORD values[] = { 3, 0, 1, 2, 5 };
+ DWORD* array;
+
+ load_info.lpMemory = object_data;
+ load_info.dSize = object_size;
+ hr = IDirectXFile_CreateEnumObject(dxfile, &load_info, DXFILELOAD_FROMMEMORY, &enum_object);
+ ok(hr == DXFILE_OK, "IDirectXFile_CreateEnumObject: %x\n", hr);
+ ret = IDirectXFileEnumObject_GetNextDataObject(enum_object, &file_data);
+ if (ret == DXFILE_OK)
{
- ref = IDirectXFileData_Release(lpdxfd);
- ok(ref == 0, "Got refcount %d, expected 0\n", ref);
+ hr = IDirectXFileData_GetData(file_data, NULL, &size, (void**)&array);
+ ok(hr == DXFILE_OK, "IDirectXFileData_GetData: %x\n", hr);
+ ok(size == sizeof(values), "Got wrong data size %d, expected %d\n", size, sizeof(values));
+ ok(!memcmp(array, values, sizeof(values)), "Got values [%u, %u, %u, %u, %u], expected [%u, %u, %u, %u, %u]\n",
+ array[0], array[1], array[2], array[3], array[4], values[0], values[1], values[2], values[3], values[4]);
+ IDirectXFileData_Release(file_data);
}
+ IDirectXFileEnumObject_Release(enum_object);
- ref = IDirectXFile_Release(lpDirectXFile);
- ok(ref == 0, "Got refcount %d, expected 0\n", ref);
+ return ret;
+}
+
+static void test_syntax_semicolon_comma(void)
+{
+ HRESULT ret;
+ IDirectXFile *dxfile = NULL;
+
+ if (!pDirectXFileCreate)
+ {
+ win_skip("DirectXFileCreate is not available\n");
+ return;
+ }
+
+ ret = pDirectXFileCreate(&dxfile);
+ ok(ret == DXFILE_OK, "DirectXFileCreate failed with %#x\n", ret);
+ if (!dxfile)
+ {
+ skip("Couldn't create DirectXFile interface\n");
+ return;
+ }
+
+ ret = IDirectXFile_RegisterTemplates(dxfile, template_syntax_array_mixed, sizeof(template_syntax_array_mixed) - 1);
+ ok(ret == DXFILE_OK, "IDirectXFileImpl_RegisterTemplates failed with %#x\n", ret);
+
+ /* Test semicolon separators in text mode */
+ ret = test_buffer_object(dxfile, object_syntax_semicolon_txt, sizeof(object_syntax_semicolon_txt) - 1);
+ todo_wine ok(ret == DXFILE_OK, "test_buffer_object failed with %#x\n", ret);
+
+ /* Test comma separators in text mode */
+ ret = test_buffer_object(dxfile, object_syntax_comma_txt, sizeof(object_syntax_comma_txt) - 1);
+ ok(ret == DXFILE_OK, "test_buffer_object failed with %#x\n", ret);
+
+ /* Test multi-semicolons separators in text mode */
+ ret = test_buffer_object(dxfile, object_syntax_multi_semicolons_txt, sizeof(object_syntax_multi_semicolons_txt) - 1);
+ todo_wine ok(ret == DXFILE_OK, "test_buffer_object failed with %#x\n", ret);
+
+ /* Test multi-commas separators in text mode */
+ ret = test_buffer_object(dxfile, object_syntax_multi_commas_txt, sizeof(object_syntax_multi_semicolons_txt) - 1);
+ ok(ret == DXFILEERR_PARSEERROR, "test_buffer_object returned %#x, expected %#x\n", ret, DXFILEERR_PARSEERROR);
+
+ /* Test multi-semicolons + single comma separators in text mode */
+ ret = test_buffer_object(dxfile, object_syntax_multi_semicolons_and_comma_txt, sizeof(object_syntax_multi_semicolons_and_comma_txt) - 1);
+ todo_wine ok(ret == DXFILE_OK, "test_buffer_object failed with %#x\n", ret);
+
+ /* Test comma + semicolon separators in text mode */
+ ret = test_buffer_object(dxfile, object_syntax_comma_and_semicolon_txt, sizeof(object_syntax_comma_and_semicolon_txt) - 1);
+ ok(ret == DXFILEERR_PARSEERROR, "test_buffer_object returned %#x, expected %#x\n", ret, DXFILEERR_PARSEERROR);
+
+ /* Test no ending separator in text mode */
+ ret = test_buffer_object(dxfile, object_syntax_no_ending_separator_txt, sizeof(object_syntax_no_ending_separator_txt) - 1);
+ todo_wine ok(ret == DXFILEERR_PARSEERROR, "test_buffer_object returned %#x, expected %#x\n", ret, DXFILEERR_PARSEERROR);
+
+ /* Test no array separator in text mode */
+ ret = test_buffer_object(dxfile, object_syntax_array_no_separator_txt, sizeof(object_syntax_array_no_separator_txt) - 1);
+ todo_wine ok(ret == DXFILEERR_PARSEERROR, "test_buffer_object returned %#x, expected %#x\n", ret, DXFILEERR_PARSEERROR);
+
+ IDirectXFile_Release(dxfile);
}
/* Set it to 1 to expand the string when dumping the object. This is useful when there is
@@ -846,6 +966,7 @@ START_TEST(d3dxof)
test_compressed_files();
test_getname();
test_syntax();
+ test_syntax_semicolon_comma();
test_dump();
FreeLibrary(hd3dxof);
More information about the wine-patches
mailing list