Hi,

Please find attached a new version of a patch implementing UUID module
tests (corrected entries in ChangeLog, removed validity check of
pdf_uuid_generate parameter, improved the generate, string and equal
tests).

Albert

2011/5/19 Jose E. Marchesi <jema...@gnu.org>:
>
> Hi Albert.
>
>    Please find attached a new patch implementing UUID test cases. In
>    addition, the API and implementation of pdf_uuid_generate have been
>    changed, improving parameter filtering.
>
> Thanks for the patch.  Some comments.
>
>    +2011-05-17  Albert Meroño Peñuela <albert.mer...@est.fib.upc.edu>
>    +   torture: Unit tests for the UUID module.
>    +   * torture/unit/Makefile.am
>    +   * torture/unit/base/types/tsuite-types.c
>    +   * torture/unit/base/types/pdf-types-uuid-generate.c
>    +   * torture/unit/base/types/pdf-types-uuid-string.c
>    +   * torture/unit/base/types/pdf-types-uuid-equal-p.c
>    +
>    +   base/types: Fix UUID generation API.
>    +   * src/base/pdf-types-uuid.[h|c]
>    +
>
> When creating a ChangeLog entry please briefly describe what changed in
> each file.  It is ok to specify just "Likewise" when needed.
>
>    -pdf_uuid_t
>    -pdf_uuid_generate (enum pdf_uuid_type_e type)
>    +void
>    +pdf_uuid_generate (pdf_uuid_t * uuid, enum pdf_uuid_type_e type)
>
> I don't understand this change.  We are using an enumerated value to
> specify the type of UUID we want to generate precisely, so there is no
> way we can get an invalid value in 'type' without getting a complain
> from the compiler.  Unless I am missing something there is no need to
> check for the validity of the parameter.
>
> --
> Jose E. Marchesi    jema...@gnu.org
> GNU Project         http://www.gnu.org
>
# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: albert.mer...@est.fib.upc.edu-20110530100630-\
#   hf3ly54l3bft6v2i
# target_branch: bzr://bzr.sv.gnu.org/pdf/libgnupdf/trunk/
# testament_sha1: 903fd0afbcc664df68bbc1266ab6b1b906ba8db2
# timestamp: 2011-05-30 12:08:28 +0200
# base_revision_id: jema...@gnu.org-20110510184038-xs3mcx9v2dgb08wz
# 
# Begin patch
=== modified file 'ChangeLog'
--- ChangeLog	2011-05-10 18:40:38 +0000
+++ ChangeLog	2011-05-30 10:06:30 +0000
@@ -1,3 +1,11 @@
+2011-05-30  Albert Meroño Peñuela <albert.mer...@est.fib.upc.edu>
+	torture: Unit tests for the UUID module.
+	* torture/unit/Makefile.am: UUID tests inclusion
+	* torture/unit/base/types/tsuite-types.c: UUID test suite
+	* torture/unit/base/types/pdf-types-uuid-generate.c: UUID tests
+	* torture/unit/base/types/pdf-types-uuid-string.c: Likewise
+	* torture/unit/base/types/pdf-types-uuid-equal-p.c: Likewise
+
 2011-05-10  Jose E. Marchesi  <jema...@gnu.org>
 
 	lib: avoid name clash with PDF_OBJ_IS_NULL and provide a quick

=== modified file 'torture/unit/Makefile.am'
--- torture/unit/Makefile.am	2011-03-29 21:12:24 +0000
+++ torture/unit/Makefile.am	2011-05-30 10:06:30 +0000
@@ -163,7 +163,9 @@
 
 
 # Unit tests for the Types Module test suite
-TEST_SUITE_TYPES =
+TEST_SUITE_TYPES = base/types/pdf-types-uuid-generate.c \
+		   base/types/pdf-types-uuid-string.c \
+	           base/types/pdf-types-uuid-equal-p.c
 
 TEST_SUITE_TIME =  base/time/pdf-time-test-common.h \
                    base/time/pdf-time-testdata.c \

=== added file 'torture/unit/base/types/pdf-types-uuid-equal-p.c'
--- torture/unit/base/types/pdf-types-uuid-equal-p.c	1970-01-01 00:00:00 +0000
+++ torture/unit/base/types/pdf-types-uuid-equal-p.c	2011-05-30 10:06:30 +0000
@@ -0,0 +1,91 @@
+/* -*- mode: C -*-
+ *
+ *       File:         pdf-types-uuid-equal-p.c
+ *       Date:         Tue May 17 11:49:23 2011
+ *
+ *       GNU PDF Library - Unit tests for pdf_uuid_equal_p
+ *
+ */
+
+/* Copyright (C) 2011 Free Software Foundation, Inc. */
+
+/* This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+
+#include <check.h>
+#include <pdf.h>
+#include <pdf-test-common.h>
+/*
+ * Test: pdf_uuid_equal_p_001
+ * Description: 
+ *   Checks if two time-based UUIDs are equal.
+ * Success condition:
+ *   Both time-based UUIDs are different.
+ */
+START_TEST (pdf_uuid_equal_p_001)
+{
+
+  pdf_uuid_t uuid1;
+  pdf_uuid_t uuid2;
+
+  /* Generate two time-based UUIDs */
+  uuid1 = pdf_uuid_generate (PDF_UUID_TIME);
+  uuid2 = pdf_uuid_generate (PDF_UUID_TIME);
+
+  fail_if(pdf_uuid_equal_p (uuid1, uuid2) == PDF_TRUE);
+
+}
+END_TEST
+
+/*
+ * Test: pdf_uuid_equal_p_002
+ * Description: 
+ *   Checks if two random-based UUIDs are equal.
+ * Success condition:
+ *   Both random-based UUIDs are different.
+ */
+START_TEST (pdf_uuid_equal_p_002)
+{
+
+  pdf_uuid_t uuid1;
+  pdf_uuid_t uuid2;
+
+  /* Generate two time-based UUIDs */
+  uuid1 = pdf_uuid_generate (PDF_UUID_RANDOM);
+  uuid2 = pdf_uuid_generate (PDF_UUID_RANDOM);
+
+  fail_if(pdf_uuid_equal_p (uuid1, uuid2) == PDF_TRUE);
+  
+}
+END_TEST
+
+/*
+ * Test case creation function
+ */
+TCase *
+test_pdf_uuid_equal_p (void)
+{
+  TCase *tc = tcase_create ("pdf_uuid_equal_p");
+
+  tcase_add_test(tc, pdf_uuid_equal_p_001);
+  tcase_add_test(tc, pdf_uuid_equal_p_002);
+
+  tcase_add_checked_fixture (tc,
+                             pdf_test_setup,
+                             pdf_test_teardown);
+
+  return tc;
+}

=== added file 'torture/unit/base/types/pdf-types-uuid-generate.c'
--- torture/unit/base/types/pdf-types-uuid-generate.c	1970-01-01 00:00:00 +0000
+++ torture/unit/base/types/pdf-types-uuid-generate.c	2011-05-30 10:06:30 +0000
@@ -0,0 +1,68 @@
+/* -*- mode: C -*-
+ *
+ *       File:         pdf-types-uuid-generate.c
+ *       Date:         Wed Apr 20 10:31:51 2011
+ *
+ *       GNU PDF Library - Unit tests for pdf_uuid_generate
+ *
+ */
+
+/* Copyright (C) 2011 Free Software Foundation, Inc. */
+
+/* This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+
+#include <check.h>
+#include <pdf.h>
+#include <pdf-test-common.h>
+/*
+ * Test: pdf_uuid_generate_001
+ * Description:
+ *   Generate some UUIDs of supported types.
+ * Success condition:
+ *   Generated UUIDs should be ok.
+ */
+START_TEST (pdf_uuid_generate_001)
+{
+
+  pdf_uuid_t uuid_time;
+  pdf_uuid_t uuid_random;
+
+  /* Create a time-based UUID */
+  uuid_time = pdf_uuid_generate (PDF_UUID_TIME);
+
+  /* Create a random-based UUID */
+  uuid_random = pdf_uuid_generate (PDF_UUID_RANDOM);
+
+}
+END_TEST
+
+/*
+ * Test case creation function
+ */
+TCase *
+test_pdf_uuid_generate (void)
+{
+  TCase *tc = tcase_create ("pdf_uuid_generate");
+
+  tcase_add_test(tc, pdf_uuid_generate_001);
+
+  tcase_add_checked_fixture (tc,
+                             pdf_test_setup,
+                             pdf_test_teardown);
+
+  return tc;
+}

=== added file 'torture/unit/base/types/pdf-types-uuid-string.c'
--- torture/unit/base/types/pdf-types-uuid-string.c	1970-01-01 00:00:00 +0000
+++ torture/unit/base/types/pdf-types-uuid-string.c	2011-05-30 10:06:30 +0000
@@ -0,0 +1,221 @@
+/* -*- mode: C -*-
+ *
+ *       File:         pdf-types-uuid-string.c
+ *       Date:         Thu Apr 21 08:50:40 2011
+ *
+ *       GNU PDF Library - Unit tests for pdf_uuid_string
+ *
+ */
+
+/* Copyright (C) 2011 Free Software Foundation, Inc. */
+
+/* This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+
+#include <check.h>
+#include <string.h>
+#include <pdf.h>
+#include <pdf-test-common.h>
+/*
+ * Test: pdf_uuid_string_001
+ * Description:
+ *   Generate an UUID ascii representation in heap.
+ * Success condition:
+ *   Generated UUID ascii should be ok.
+ */
+START_TEST (pdf_uuid_string_001)
+{
+
+  pdf_uuid_t uuid;
+  pdf_char_t *buf;
+  pdf_char_t *ret_buf;
+  pdf_size_t buf_size;
+
+  /* Crate a dynamically allocated buffer */
+  buf_size = 46;
+  
+  buf = pdf_alloc (buf_size);
+  fail_if(buf == NULL);
+
+  /* Generate a new UUID */
+  uuid = pdf_uuid_generate (PDF_UUID_RANDOM);
+
+  /* Get ascii representation of uuid */
+  ret_buf = pdf_uuid_string (uuid, buf, buf_size);
+  fail_if(ret_buf == NULL);
+
+  /* Free resources */
+  pdf_dealloc (buf);
+
+}
+END_TEST
+
+/*
+ * Test: pdf_uuid_string_002
+ * Description:
+ *   Generate an UUID ascii representation in stack.
+ * Success condition:
+ *   Generated UUID ascii should be ok.
+ */
+START_TEST (pdf_uuid_string_002)
+{
+
+  pdf_uuid_t uuid;
+  pdf_char_t *ret_buf;
+  pdf_size_t buf_size;
+
+  /* Crate a statically allocated buffer */
+  buf_size = 46;
+
+  pdf_char_t buf[buf_size];
+
+  /* Generate a new UUID */
+  uuid = pdf_uuid_generate (PDF_UUID_RANDOM);
+
+  /* Get ascii representation of uuid */
+  ret_buf = pdf_uuid_string (uuid, buf, buf_size);
+  fail_if(ret_buf == NULL);
+
+}
+END_TEST
+
+/*
+ * Test: pdf_uuid_string_003
+ * Description:
+ *   Generate an UUID ascii representation, buffer size more than
+ *   required.
+ * Success conditions: The buffer to store the UUID string is long
+ *   enough. The conversion should pass.
+ */
+START_TEST (pdf_uuid_string_003)
+{
+
+  pdf_uuid_t uuid;
+  pdf_char_t *buf;
+  pdf_char_t *ret_buf;
+  pdf_size_t buf_size;
+
+  /* Crate the buffer */
+  buf_size = 1001;
+
+  buf = pdf_alloc (buf_size);
+  fail_if(buf == NULL);
+
+  /* Generate a new UUID */
+  uuid = pdf_uuid_generate (PDF_UUID_RANDOM);
+
+  /* Get ascii representation of uuid */
+  ret_buf = pdf_uuid_string (uuid, buf, buf_size);
+  fail_if(ret_buf == NULL);
+
+  /* Free resources */
+  pdf_dealloc (buf);
+
+}
+END_TEST
+
+/*
+ * Test: pdf_uuid_string_004
+ * Description:
+ *   Cheks for appropriate structure of UUID ascii.
+ * Success conditions: The ascii structure is 
+ *   00000000-0000-0000-0000-000000000000, where 0s match
+ *   hexadecimal digits.
+ */
+START_TEST (pdf_uuid_string_004)
+{
+
+  pdf_uuid_t uuid;
+  pdf_char_t *buf;
+  pdf_char_t *ret_buf;
+  pdf_size_t buf_size;
+  pdf_char_t *hex_digits = "\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x41\x42\x43\x44\x45\x46\x61\x62\x63\x64\x65\x66";
+  pdf_char_t *oc;
+  pdf_size_t chunk_size;
+
+  /* Crate the buffer */
+  buf_size = 46;
+
+  buf = pdf_alloc (buf_size);
+  fail_if(buf == NULL);
+
+  /* Generate a new UUID */
+  uuid = pdf_uuid_generate (PDF_UUID_RANDOM);
+
+  /* Get ascii representation of uuid */
+  ret_buf = pdf_uuid_string (uuid, buf, buf_size);
+  fail_if(ret_buf == NULL);
+
+  /* Check if characters are valid hex digits */
+  /* Check if hex chunks have correct size */
+  /* Check if scores are in correct positions */
+  
+  chunk_size = strspn(buf, hex_digits);
+  fail_if(chunk_size != 8);
+
+  oc = strchr(buf, '-');
+  fail_if(oc == NULL);
+  fail_if(oc-buf != 8);
+
+  chunk_size = strspn(oc+1, hex_digits);
+  fail_if(chunk_size != 4);
+
+  oc = strchr(oc+1, '-');
+  fail_if(oc == NULL);
+  fail_if(oc-buf != 13);
+
+  chunk_size = strspn(oc+1, hex_digits);
+  fail_if(chunk_size != 4);
+
+  oc = strchr(oc+1, '-');
+  fail_if(oc == NULL);
+  fail_if(oc-buf != 18);
+
+  chunk_size = strspn(oc+1, hex_digits);
+  fail_if(chunk_size != 4);
+
+  oc = strchr(oc+1, '-');
+  fail_if(oc == NULL);
+  fail_if(oc-buf != 23);
+
+  chunk_size = strspn(oc+1, hex_digits);
+  fail_if(chunk_size != 12);
+
+  /* Free resources */
+  pdf_dealloc (buf);
+
+}
+END_TEST
+
+/*
+ * Test case creation function
+ */
+TCase *
+test_pdf_uuid_string (void)
+{
+  TCase *tc = tcase_create ("pdf_uuid_string");
+
+  tcase_add_test(tc, pdf_uuid_string_001);
+  tcase_add_test(tc, pdf_uuid_string_002);
+  tcase_add_test(tc, pdf_uuid_string_003);
+  tcase_add_test(tc, pdf_uuid_string_004);
+
+  tcase_add_checked_fixture (tc,
+                             pdf_test_setup,
+                             pdf_test_teardown);
+
+  return tc;
+}

=== modified file 'torture/unit/base/types/tsuite-types.c'
--- torture/unit/base/types/tsuite-types.c	2011-02-24 22:52:23 +0000
+++ torture/unit/base/types/tsuite-types.c	2011-05-30 10:06:30 +0000
@@ -27,6 +27,10 @@
 
 #include <check.h>
 #include <pdf-test-common.h>
+extern TCase *test_pdf_uuid_generate (void);
+extern TCase *test_pdf_uuid_string (void);
+extern TCase *test_pdf_uuid_equal_p (void);
+
 Suite *
 tsuite_types ()
 {
@@ -34,6 +38,10 @@
 
   s = suite_create("types");
 
+  suite_add_tcase (s, test_pdf_uuid_generate ());
+  suite_add_tcase (s, test_pdf_uuid_string ());
+  suite_add_tcase (s, test_pdf_uuid_equal_p ());
+
   return s;
 }
 

# Begin bundle
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
1U1sIERmzVHmCf+DqKn/xdyRThQkO+x9iwA=

Reply via email to