[PATCH 3/3] d3dxof: Add object separators tests for binary format.

Christian Costa titan.costa at gmail.com
Sun May 19 15:33:16 CDT 2013


---
 dlls/d3dxof/tests/d3dxof.c |  157 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 156 insertions(+), 1 deletion(-)

diff --git a/dlls/d3dxof/tests/d3dxof.c b/dlls/d3dxof/tests/d3dxof.c
index d03445c..356675e 100644
--- a/dlls/d3dxof/tests/d3dxof.c
+++ b/dlls/d3dxof/tests/d3dxof.c
@@ -1,7 +1,7 @@
 /*
  * Some unit tests for d3dxof
  *
- * Copyright (C) 2008 Christian Costa
+ * Copyright (C) 2008, 2013 Christian Costa
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -25,6 +25,19 @@
 #include "initguid.h"
 #include "dxfile.h"
 
+#define I2(x) x,0
+#define I4(x) x,0,0,0
+
+#define TOKEN_NAME         I2(1)
+#define TOKEN_INTEGER      I2(3)
+#define TOKEN_INTEGER_LIST I2(6)
+#define TOKEN_OBRACE       I2(10)
+#define TOKEN_CBRACE       I2(11)
+#define TOKEN_COMMA        I2(19)
+#define TOKEN_SEMICOLON    I2(20)
+
+#define SEMICOLON_5X TOKEN_SEMICOLON, TOKEN_SEMICOLON, TOKEN_SEMICOLON, TOKEN_SEMICOLON, TOKEN_SEMICOLON
+
 static inline void debugstr_guid( char* buf, CONST GUID *id )
 {
     sprintf(buf, "{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}",
@@ -127,6 +140,15 @@ static char object_syntax_semicolon_txt[] =
 "5;\n"
 "}\n";
 
+static char object_syntax_semicolon_bin[] = {
+'x','o','f',' ','0','3','0','2','b','i','n',' ','0','0','6','4',
+TOKEN_NAME, /* size */ I4(6), /* name */ 'B','u','f','f','e','r', TOKEN_OBRACE,
+TOKEN_INTEGER, I4(3), TOKEN_SEMICOLON,
+TOKEN_INTEGER, I4(0), TOKEN_SEMICOLON, TOKEN_INTEGER, I4(1), TOKEN_SEMICOLON, TOKEN_INTEGER, I4(2), TOKEN_SEMICOLON,
+TOKEN_INTEGER, I4(5), TOKEN_SEMICOLON,
+TOKEN_CBRACE
+};
+
 static char object_syntax_comma_txt[] =
 "xof 0302txt 0064\n"
 "Buffer\n"
@@ -136,6 +158,15 @@ static char object_syntax_comma_txt[] =
 "5,\n"
 "}\n";
 
+static char object_syntax_comma_bin[] = {
+'x','o','f',' ','0','3','0','2','b','i','n',' ','0','0','6','4',
+TOKEN_NAME, /* size */ I4(6), /* name */ 'B','u','f','f','e','r', TOKEN_OBRACE,
+TOKEN_INTEGER, I4(3), TOKEN_COMMA,
+TOKEN_INTEGER, I4(0), TOKEN_COMMA, TOKEN_INTEGER, I4(1), TOKEN_COMMA, TOKEN_INTEGER, I4(2), TOKEN_COMMA,
+TOKEN_INTEGER, I4(5), TOKEN_COMMA,
+TOKEN_CBRACE
+};
+
 static char object_syntax_multi_semicolons_txt[] =
 "xof 0302txt 0064\n"
 "Buffer\n"
@@ -145,6 +176,15 @@ static char object_syntax_multi_semicolons_txt[] =
 "5;;;;;\n"
 "}\n";
 
+static char object_syntax_multi_semicolons_bin[] = {
+'x','o','f',' ','0','3','0','2','b','i','n',' ','0','0','6','4',
+TOKEN_NAME, /* size */ I4(6), /* name */ 'B','u','f','f','e','r', TOKEN_OBRACE,
+TOKEN_INTEGER, I4(3), SEMICOLON_5X,
+TOKEN_INTEGER, I4(0), SEMICOLON_5X, TOKEN_INTEGER, I4(1), SEMICOLON_5X, TOKEN_INTEGER, I4(2), SEMICOLON_5X,
+TOKEN_INTEGER, I4(5), SEMICOLON_5X,
+TOKEN_CBRACE
+};
+
 static char object_syntax_multi_commas_txt[] =
 "xof 0302txt 0064\n"
 "Buffer\n"
@@ -154,6 +194,15 @@ static char object_syntax_multi_commas_txt[] =
 "5;\n"
 "}\n";
 
+static char object_syntax_multi_commas_bin[] = {
+'x','o','f',' ','0','3','0','2','b','i','n',' ','0','0','6','4',
+TOKEN_NAME, /* size */ I4(6), /* name */ 'B','u','f','f','e','r', TOKEN_OBRACE,
+TOKEN_INTEGER, I4(3), TOKEN_SEMICOLON,
+TOKEN_INTEGER, I4(0), TOKEN_COMMA, TOKEN_INTEGER, I4(1), TOKEN_COMMA, TOKEN_COMMA, TOKEN_INTEGER, I4(2), TOKEN_SEMICOLON,
+TOKEN_INTEGER, I4(5), TOKEN_SEMICOLON,
+TOKEN_CBRACE
+};
+
 static char object_syntax_multi_semicolons_and_comma_txt[] =
 "xof 0302txt 0064\n"
 "Buffer\n"
@@ -163,6 +212,15 @@ static char object_syntax_multi_semicolons_and_comma_txt[] =
 "5;;;;;,\n"
 "}\n";
 
+static char object_syntax_multi_semicolons_and_comma_bin[] = {
+'x','o','f',' ','0','3','0','2','b','i','n',' ','0','0','6','4',
+TOKEN_NAME, /* size */ I4(6), /* name */ 'B','u','f','f','e','r', TOKEN_OBRACE,
+TOKEN_INTEGER, I4(3), SEMICOLON_5X, TOKEN_COMMA,
+TOKEN_INTEGER, I4(0), SEMICOLON_5X, TOKEN_COMMA, TOKEN_INTEGER, I4(1), SEMICOLON_5X, TOKEN_COMMA, TOKEN_INTEGER, I4(2), SEMICOLON_5X, TOKEN_COMMA,
+TOKEN_INTEGER, I4(5), SEMICOLON_5X, TOKEN_COMMA,
+TOKEN_CBRACE
+};
+
 static char object_syntax_comma_and_semicolon_txt[] =
 "xof 0302txt 0064\n"
 "Buffer\n"
@@ -172,6 +230,15 @@ static char object_syntax_comma_and_semicolon_txt[] =
 "5;\n"
 "}\n";
 
+static char object_syntax_comma_and_semicolon_bin[] = {
+'x','o','f',' ','0','3','0','2','b','i','n',' ','0','0','6','4',
+TOKEN_NAME, /* size */ I4(6), /* name */ 'B','u','f','f','e','r', TOKEN_OBRACE,
+TOKEN_INTEGER, I4(3), TOKEN_SEMICOLON,
+TOKEN_INTEGER, I4(0), TOKEN_COMMA, TOKEN_INTEGER, I4(1), TOKEN_COMMA, TOKEN_SEMICOLON, TOKEN_INTEGER, I4(2), TOKEN_SEMICOLON,
+TOKEN_INTEGER, I4(5), TOKEN_SEMICOLON,
+TOKEN_CBRACE
+};
+
 static char object_syntax_no_ending_separator_txt[] =
 "xof 0302txt 0064\n"
 "Buffer\n"
@@ -181,6 +248,15 @@ static char object_syntax_no_ending_separator_txt[] =
 "5\n"
 "}\n";
 
+static char object_syntax_no_ending_separator_bin[] = {
+'x','o','f',' ','0','3','0','2','b','i','n',' ','0','0','6','4',
+TOKEN_NAME, /* size */ I4(6), /* name */ 'B','u','f','f','e','r', TOKEN_OBRACE,
+TOKEN_INTEGER, I4(3), TOKEN_SEMICOLON,
+TOKEN_INTEGER, I4(0), TOKEN_COMMA, TOKEN_INTEGER, I4(1), TOKEN_COMMA, TOKEN_INTEGER, I4(2), TOKEN_SEMICOLON,
+TOKEN_INTEGER, I4(5),
+TOKEN_CBRACE
+};
+
 static char object_syntax_array_no_separator_txt[] =
 "xof 0302txt 0064\n"
 "Buffer\n"
@@ -190,6 +266,45 @@ static char object_syntax_array_no_separator_txt[] =
 "5;\n"
 "}\n";
 
+static char object_syntax_array_no_separator_bin[] = {
+'x','o','f',' ','0','3','0','2','b','i','n',' ','0','0','6','4',
+TOKEN_NAME, /* size */ I4(6), /* name */ 'B','u','f','f','e','r', TOKEN_OBRACE,
+TOKEN_INTEGER, I4(3), TOKEN_SEMICOLON,
+TOKEN_INTEGER, I4(0), TOKEN_INTEGER, I4(1), TOKEN_INTEGER, I4(2), TOKEN_SEMICOLON,
+TOKEN_INTEGER, I4(5), TOKEN_SEMICOLON,
+TOKEN_CBRACE
+};
+
+static char object_syntax_full_integer_list_bin[] = {
+'x','o','f',' ','0','3','0','2','b','i','n',' ','0','0','6','4',
+TOKEN_NAME, /* size */ I4(6), /* name */ 'B','u','f','f','e','r', TOKEN_OBRACE,
+TOKEN_INTEGER, I4(3), TOKEN_SEMICOLON,
+TOKEN_INTEGER_LIST, I4(3), I4(0), I4(1), I4(2),
+TOKEN_INTEGER, I4(5), TOKEN_SEMICOLON,
+TOKEN_CBRACE
+};
+
+static char object_syntax_mixed_integer_list_bin[] = {
+'x','o','f',' ','0','3','0','2','b','i','n',' ','0','0','6','4',
+TOKEN_NAME, /* size */ I4(6), /* name */ 'B','u','f','f','e','r', TOKEN_OBRACE,
+TOKEN_INTEGER_LIST, I4(5), I4(3), I4(0), I4(1), I4(2), I4(5),
+TOKEN_CBRACE
+};
+
+static char object_syntax_integer_list_semicolon_bin[] = {
+'x','o','f',' ','0','3','0','2','b','i','n',' ','0','0','6','4',
+TOKEN_NAME, /* size */ I4(6), /* name */ 'B','u','f','f','e','r', TOKEN_OBRACE,
+TOKEN_INTEGER_LIST, I4(5), I4(3), I4(0), I4(1), I4(2), I4(5), TOKEN_SEMICOLON,
+TOKEN_CBRACE
+};
+
+static char object_syntax_integer_list_comma_bin[] = {
+'x','o','f',' ','0','3','0','2','b','i','n',' ','0','0','6','4',
+TOKEN_NAME, /* size */ I4(6), /* name */ 'B','u','f','f','e','r', TOKEN_OBRACE,
+TOKEN_INTEGER_LIST, I4(5), I4(3), I4(0), I4(1), I4(2), I4(5), TOKEN_COMMA,
+TOKEN_CBRACE
+};
+
 static char template_syntax_string[] =
 "xof 0302txt 0064\n"
 "template Filename\n"
@@ -751,34 +866,74 @@ static void test_syntax_semicolon_comma(void)
     /* 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 semicolon separators in binary mode */
+    ret = test_buffer_object(dxfile, object_syntax_semicolon_bin, sizeof(object_syntax_semicolon_bin));
+    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 comma separators in binary mode */
+    ret = test_buffer_object(dxfile, object_syntax_comma_bin, sizeof(object_syntax_comma_bin));
+    todo_wine 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-semicolons separators in binary mode */
+    ret = test_buffer_object(dxfile, object_syntax_multi_semicolons_bin, sizeof(object_syntax_multi_semicolons_bin));
+    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-commas separators in binary mode */
+    ret = test_buffer_object(dxfile, object_syntax_multi_commas_bin, sizeof(object_syntax_multi_semicolons_bin));
+    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 multi-semicolons + single comma separators in binary mode */
+    ret = test_buffer_object(dxfile, object_syntax_multi_semicolons_and_comma_bin, sizeof(object_syntax_multi_semicolons_and_comma_bin));
+    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 comma + semicolon separators in binary mode */
+    ret = test_buffer_object(dxfile, object_syntax_comma_and_semicolon_bin, sizeof(object_syntax_comma_and_semicolon_bin));
+    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 ending separator in binary mode */
+    ret = test_buffer_object(dxfile, object_syntax_no_ending_separator_bin, sizeof(object_syntax_no_ending_separator_bin));
+    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);
+    /* Test no array separator in binary mode */
+    ret = test_buffer_object(dxfile, object_syntax_array_no_separator_bin, sizeof(object_syntax_array_no_separator_bin));
+    ok(ret == DXFILEERR_PARSEERROR, "test_buffer_object returned %#x, expected %#x\n", ret, DXFILEERR_PARSEERROR);
+
+    /* Test object with a single integer list in binary mode */
+    ret = test_buffer_object(dxfile, object_syntax_full_integer_list_bin, sizeof(object_syntax_full_integer_list_bin));
+    todo_wine ok(ret == DXFILE_OK, "test_buffer_object failed with %#x\n", ret);
+
+    /* Test object with mixed integer list and integers + single comma separators in binary mode */
+    ret = test_buffer_object(dxfile, object_syntax_mixed_integer_list_bin, sizeof(object_syntax_mixed_integer_list_bin));
+    ok(ret == DXFILE_OK, "test_buffer_object failed with %#x\n", ret);
+
+    /* Test integer list followed by a semicolon in binary mode */
+    ret = test_buffer_object(dxfile, object_syntax_integer_list_semicolon_bin, sizeof(object_syntax_integer_list_semicolon_bin));
+    todo_wine ok(ret == DXFILEERR_PARSEERROR, "test_buffer_object returned %#x, expected %#x\n", ret, DXFILEERR_PARSEERROR);
+
+    /* Test integer list followed by a comma in binary mode */
+    ret = test_buffer_object(dxfile, object_syntax_integer_list_comma_bin, sizeof(object_syntax_integer_list_comma_bin));
+    ok(ret == DXFILEERR_PARSEERROR, "test_buffer_object returned %#x, expected %#x\n", ret, DXFILEERR_PARSEERROR);
 
     IDirectXFile_Release(dxfile);
 }




More information about the wine-patches mailing list