[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[pdf-devel] Patch for FS#98, file-based stm tests
From: |
gerel |
Subject: |
[pdf-devel] Patch for FS#98, file-based stm tests |
Date: |
Fri, 15 May 2009 16:46:58 -0300 |
Here is a patch for the tests plus minor fixes on the Fsys API.
BTW, there is no function in the Fsys API for removing a file yet.
##
# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: address@hidden
# target_branch: file:///home/gerel/PROJECTS/libgnupdf/trunk/
# testament_sha1: 7e944c5db18b74aed7f7819e622262e7589762bc
# timestamp: 2009-05-15 16:37:50 -0300
# base_revision_id: address@hidden
#
# Begin patch
=== modified file 'ChangeLog'
--- ChangeLog 2009-05-15 13:31:34 +0000
+++ ChangeLog 2009-05-15 18:05:38 +0000
@@ -1,3 +1,17 @@
+2009-05-15 Gerardo E. Gidoni <address@hidden>
+
+ * doc/gnupdf.texi: changed pdf_fsys_file_read/write to be like
pdf_stm_read/write.
+
+ * src/base/pdf-fsys-disk.c: likewise.
+
+ * src/base/pdf-fsys-disk.h:likewise.
+
+ * src/base/pdf-fsys.c:likewise.
+
+ * src/base/pdf-fsys.h: likewise.
+
+ * src/base/pdf-stm-be.c: likewise.
+
2009-05-15 Jose E. Marchesi <address@hidden>
* doc/gnupdf-hg.texi (Tasks workflow): Added a note about the
@@ -7,6 +21,26 @@
* doc/Makefile.am: Support for generation of manuals using the
gendocs.sh script from gnulib.
+
+2009-05-14 Gerardo E. Gidoni <address@hidden>
+
+ * torture/unit/Makefile.am: added file stm new test case.
+
+ * torture/unit/base/stm/pdf-stm-file-new.c: likewise.
+
+ * torture/unit/base/stm/pdf-stm-peek-char.c: added file stm tests.
+
+ * torture/unit/base/stm/pdf-stm-read-char.c: likewise.
+
+ * torture/unit/base/stm/pdf-stm-read.c: likewise.
+
+ * torture/unit/base/stm/pdf-stm-seek.c: likewise.
+
+ * torture/unit/base/stm/pdf-stm-tell.c: likewise.
+
+ * torture/unit/base/stm/pdf-stm-write.c: likewise.
+
+ * torture/unit/base/stm/tsuite-stm.c: likewise.
2009-05-11 David Vazquez <address@hidden>
=== modified file 'doc/gnupdf.texi'
--- doc/gnupdf.texi 2009-05-13 11:33:35 +0000
+++ doc/gnupdf.texi 2009-05-15 17:55:40 +0000
@@ -9145,7 +9145,8 @@
The following functions provides synchronous input/output for open
files.
address@hidden pdf_size_t pdf_fsys_file_read (pdf_fsys_file_t @var{file}, const
pdf_size_t @var{elem_size}, const pdf_size_t @var{elem_count}, void
address@hidden)
+
address@hidden pdf_status_t pdf_fsys_file_read (pdf_fsys_file_t @var{file},
pdf_char_t address@hidden, pdf_size_t @var{bytes}, pdf_size_t address@hidden)
Synchronously read data from an open file item.
@@ -9153,17 +9154,26 @@
@item Parameters
@table @var
@item file
-An open file variable.
address@hidden elem_size
-The size of the data chunks to read from the file.
address@hidden elem_count
-The number of data chunks to read from the file.
address@hidden data
-A pointer to memory used to store the readed elements.
+An open file.
address@hidden buf
+The buffer to hold the read data.
address@hidden bytes
+The number of octects to read.
address@hidden read_bytes
+The number of octects actually read.
@end table
@item Returns
-A PDF size value indicating the number of readed octects or @code{0} if there
-was an error.
+A PDF status value:
address@hidden @code
address@hidden PDF_OK
+All the requested bytes were successfully read into @var{buf}.
address@hidden PDF_EBADDATA
+The file element or a given pointer is invalid.
address@hidden PDF_EEOF
+An end of file condition occurred.
address@hidden PDF_ERROR
+An error prevented to read the bytes.
address@hidden table
@item Usage example
@example
XXX
@@ -9171,7 +9181,8 @@
@end table
@end deftypefun
address@hidden pdf_size_t pdf_fsys_file_write (pdf_fsys_file_t @var{file},
const pdf_size_t @var{elem_size}, const pdf_size_t @var{elem_count}, void
address@hidden)
+
address@hidden pdf_status_t pdf_fsys_file_write (pdf_fsys_file_t @var{file},
pdf_char_t address@hidden, pdf_size_t @var{bytes}, pdf_size_t address@hidden)
Synchronously write data to an open file item.
@@ -9179,17 +9190,26 @@
@item Parameters
@table @var
@item file
-An open file variable.
address@hidden elem_size
-The size of the data chunks to write into the file.
address@hidden elem_count
-The number of data chunks to be write into the file.
address@hidden data
+An open file.
address@hidden buf
A pointer to memory containing the data to write into the file.
address@hidden bytes
+The number of octects to write.
address@hidden written_bytes
+The number of octects actually written.
@end table
@item Returns
-A PDF size value indicating the number of octects written into the
-file or @code{0} if there was an error.
+A PDF status value:
address@hidden @code
address@hidden PDF_OK
+All the requested bytes were successfully written to @var{file}.
address@hidden PDF_EBADDATA
+The file element or a given pointer is invalid.
address@hidden PDF_ENOMEM
+A disk full condition ocurred.
address@hidden PDF_ERROR
+An error prevented to write the bytes.
address@hidden table
@item Usage example
@example
XXX
@@ -9197,6 +9217,7 @@
@end table
@end deftypefun
+
@deftypefun pdf_status_t pdf_fsys_file_flush (pdf_fsys_file_t @var{file})
Flush all the written data for the specified file.
@@ -9478,7 +9499,8 @@
The following callbacks are defined to provide synchronous
input/output in open files.
address@hidden {Data Type} {pdf_size_t (*pdf_fsys_file_read_fn_t)
(pdf_fsys_file_t @var{file}, pdf_size_t @var{elem_size}, pdf_size_t
@var{elem_count}, void address@hidden)}
+
address@hidden {Data Type} {pdf_status_t (*pdf_fsys_file_read_fn_t)
(pdf_fsys_file_t @var{file}, address@hidden, pdf_size_t @var{bytes},
address@hidden)}
Filesystem callback used to synchronously read data from an open file
item.
@@ -9487,8 +9509,7 @@
interface function.
@end deftp
address@hidden {Data Type} {pdf_size_t (*pdf_fsys_file_write_fn_t)
(pdf_fsys_file_t @var{file}, pdf_size_t @var{elem_size}, pdf_size_t
@var{elem_count}, void address@hidden)}
-
address@hidden {Data Type} {pdf_status_t (*pdf_fsys_file_write_fn_t)
(pdf_fsys_file_t @var{file}, address@hidden, pdf_size_t @var{bytes},
address@hidden)}
Filesystem callback used to synchronously write data to an open file
item.
=== modified file 'src/base/pdf-fsys-disk.c'
--- src/base/pdf-fsys-disk.c 2009-05-03 17:18:39 +0000
+++ src/base/pdf-fsys-disk.c 2009-05-15 17:55:40 +0000
@@ -1,4 +1,4 @@
-/* -*- mode: C -*- Time-stamp: "2009-05-03 19:03:49 aleksander"
+/* -*- mode: C -*- Time-stamp: "2009-05-15 13:07:46 gerel"
*
* File: pdf-fsys-disk.c
* Date: Thu May 22 18:27:35 2008
@@ -1017,17 +1017,14 @@
return PDF_OK;
}
-pdf_size_t
-pdf_fsys_disk_file_read (pdf_fsys_file_t file,
- const pdf_size_t elem_size,
- const pdf_size_t elem_count,
- void *data)
+
+pdf_status_t
+pdf_fsys_disk_file_read (pdf_fsys_file_t file, pdf_char_t *buf,
+ pdf_size_t bytes, pdf_size_t *read_bytes)
{
- pdf_size_t read_bytes = 0;
+ pdf_status_t ret = PDF_EBADDATA;
if((file != NULL) && \
- (data != NULL) && \
- (elem_size > 0) && \
- (elem_count > 0))
+ (buf != NULL))
{
pdf_fsys_disk_file_t file_data = NULL;
file_data = (pdf_fsys_disk_file_t)(file->data);
@@ -1039,31 +1036,40 @@
}
else
{
- read_bytes = fread(data,
- (size_t)elem_size,
- (size_t)elem_count,
- file_data->file_descriptor);
+ *read_bytes = fread(buf,
+ 1,
+ bytes,
+ file_data->file_descriptor);
+ if (feof(file_data->file_descriptor))
+ {
+ ret = PDF_EEOF;
+ }
+ else if (ferror(file_data->file_descriptor))
+ {
+ ret = PDF_ERROR;
+ }
+ else
+ {
+ ret = PDF_OK;
+ }
}
}
else
{
- PDF_DEBUG_BASE("Invalid inputs to file_read! (file:%p, data:%p, size:%u,
count: %u)",
- file,data,elem_size,elem_count);
+ PDF_DEBUG_BASE("Invalid inputs to file_read! (file:%p, buf:%p, size:%u)",
+ file,buf,bytes);
}
- return read_bytes;
+ return ret;
}
-pdf_size_t
-pdf_fsys_disk_file_write (pdf_fsys_file_t file,
- const pdf_size_t elem_size,
- const pdf_size_t elem_count,
- void *data)
+
+pdf_status_t
+pdf_fsys_disk_file_write (pdf_fsys_file_t file, pdf_char_t *buf,
+ pdf_size_t bytes, pdf_size_t *written_bytes)
{
- pdf_size_t written_bytes = 0;
+ pdf_status_t ret = PDF_EBADDATA;
if((file != NULL) && \
- (data != NULL) && \
- (elem_size > 0) && \
- (elem_count > 0))
+ (buf != NULL))
{
pdf_fsys_disk_file_t file_data = NULL;
file_data = (pdf_fsys_disk_file_t)(file->data);
@@ -1075,18 +1081,34 @@
}
else
{
- written_bytes = fwrite(data,
- (size_t)elem_size,
- (size_t)elem_count,
- file_data->file_descriptor);
+ *written_bytes = fwrite(buf,
+ 1,
+ bytes,
+ file_data->file_descriptor);
+ if (ferror(file_data->file_descriptor))
+ {
+ if (errno == ENOSPC)
+ {
+ ret = PDF_ENOMEM;
+ }
+ else
+ {
+ ret = PDF_ERROR;
+ }
+ }
+ else
+ {
+ ret = PDF_OK;
+ }
}
}
else
{
- PDF_DEBUG_BASE("Invalid inputs to file_read! (file:%p, data:%p, size:%u,
count: %u)",
- file,data,elem_size,elem_count);
+ PDF_DEBUG_BASE("Invalid inputs to file_write! (file:%p, buf:%p,
size:%u)",
+ file,buf,bytes);
}
- return written_bytes;
+ return ret;
+
}
=== modified file 'src/base/pdf-fsys-disk.h'
--- src/base/pdf-fsys-disk.h 2008-12-22 21:25:09 +0000
+++ src/base/pdf-fsys-disk.h 2009-05-15 17:55:40 +0000
@@ -1,4 +1,4 @@
-/* -*- mode: C -*- Time-stamp: "2008-11-29 17:42:34 aleksander"
+/* -*- mode: C -*- Time-stamp: "2009-05-15 12:18:32 gerel"
*
* File: pdf-fsys-disk.h
* Date: Thu May 22 18:22:59 2008
@@ -135,15 +135,13 @@
pdf_status_t pdf_fsys_disk_file_set_size (pdf_fsys_file_t file,
pdf_size_t size);
-pdf_size_t pdf_fsys_disk_file_read (pdf_fsys_file_t file,
- const pdf_size_t elem_size,
- const pdf_size_t elem_count,
- void *data);
+pdf_status_t
+pdf_fsys_disk_file_write (pdf_fsys_file_t file, pdf_char_t *buf,
+ pdf_size_t bytes, pdf_size_t *written_bytes);
-pdf_size_t pdf_fsys_disk_file_write (pdf_fsys_file_t file,
- const pdf_size_t elem_size,
- const pdf_size_t elem_count,
- void *data);
+pdf_status_t
+pdf_fsys_disk_file_read (pdf_fsys_file_t file, pdf_char_t *buf,
+ pdf_size_t bytes, pdf_size_t *read_bytes);
pdf_status_t pdf_fsys_disk_file_flush (pdf_fsys_file_t file);
=== modified file 'src/base/pdf-fsys.c'
--- src/base/pdf-fsys.c 2008-12-31 18:34:04 +0000
+++ src/base/pdf-fsys.c 2009-05-15 17:55:40 +0000
@@ -1,5 +1,5 @@
-/* -*- mode: C -*- Time-stamp: "2008-12-31 19:31:45 aleksander"
+/* -*- mode: C -*- Time-stamp: "2009-05-15 12:36:35 gerel"
*
* File: pdf-fsys.c
* Date: Thu May 22 15:51:13 2008
@@ -506,51 +506,48 @@
}
}
-pdf_size_t
-pdf_fsys_file_read (pdf_fsys_file_t file,
- const pdf_size_t elem_size,
- const pdf_size_t elem_count,
- void *data)
+
+pdf_status_t
+pdf_fsys_file_read (pdf_fsys_file_t file, pdf_char_t *buf,
+ pdf_size_t bytes, pdf_size_t *read_bytes)
{
if(file == NULL)
- return 0;
+ return PDF_EBADDATA;
if (file->fs == NULL)
{
/* Use the default filesystem */
- return pdf_fsys_def_file_read(file, elem_size, elem_count, data);
+ return pdf_fsys_def_file_read(file, buf, bytes, read_bytes);
}
else
{
return
(file->fs->implementation->file_read_fn) (file,
- elem_size,
- elem_count,
- data);
+ buf,
+ bytes,
+ read_bytes);
}
}
-pdf_size_t
-pdf_fsys_file_write (pdf_fsys_file_t file,
- const pdf_size_t elem_size,
- const pdf_size_t elem_count,
- void *data)
+pdf_status_t
+pdf_fsys_file_write (pdf_fsys_file_t file, pdf_char_t *buf,
+ pdf_size_t bytes, pdf_size_t *written_bytes)
{
if(file == NULL)
- return 0;
+ return PDF_EBADDATA;
if (file->fs == NULL)
{
/* Use the default filesystem */
- return pdf_fsys_def_file_write(file, elem_size, elem_count, data);
+ return pdf_fsys_def_file_write(file, buf, bytes, written_bytes);
}
else
{
return
(file->fs->implementation->file_write_fn) (file,
- elem_size,
- elem_count,
- data);
+ buf,
+ bytes,
+ written_bytes);
}
}
=== modified file 'src/base/pdf-fsys.h'
--- src/base/pdf-fsys.h 2008-12-22 21:25:09 +0000
+++ src/base/pdf-fsys.h 2009-05-15 17:55:40 +0000
@@ -1,4 +1,4 @@
-/* -*- mode: C -*- Time-stamp: "2008-11-29 17:48:43 aleksander"
+/* -*- mode: C -*- Time-stamp: "2009-05-15 12:13:58 gerel"
*
* File: pdf-fsys.h
* Date: Thu May 22 15:49:59 2008
@@ -103,14 +103,15 @@
typedef pdf_status_t (*pdf_fsys_get_parent_fn_t) (pdf_text_t path_name,
pdf_text_t parent_path);
typedef pdf_status_t (*pdf_fsys_remove_folder_fn_t) (pdf_text_t path_name);
-typedef pdf_size_t (*pdf_fsys_file_read_fn_t) (pdf_fsys_file_t file,
- pdf_size_t elem_size,
- pdf_size_t elem_count,
- void *data);
-typedef pdf_size_t (*pdf_fsys_file_write_fn_t) (pdf_fsys_file_t file,
- pdf_size_t elem_size,
- pdf_size_t elem_count,
- void *data);
+
+typedef pdf_status_t
+(*pdf_fsys_file_read_fn_t) (pdf_fsys_file_t file, pdf_char_t *buf,
+ pdf_size_t bytes, pdf_size_t *read_bytes);
+
+typedef pdf_status_t
+(*pdf_fsys_file_write_fn_t) (pdf_fsys_file_t file, pdf_char_t *buf,
+ pdf_size_t bytes, pdf_size_t *written_bytes);
+
typedef pdf_status_t (*pdf_fsys_file_flush_fn_t) (pdf_fsys_file_t file);
typedef pdf_status_t (*pdf_fsys_get_item_props_fn_t) (pdf_text_t path_name,
struct
pdf_fsys_item_props_s *props);
@@ -223,7 +224,7 @@
enum pdf_fsys_file_mode_e pdf_fsys_file_get_mode (pdf_fsys_file_t file);
pdf_text_t pdf_fsys_file_get_url (pdf_fsys_file_t file);
pdf_status_t pdf_fsys_file_set_mode (pdf_fsys_file_t file,
- enum pdf_fsys_file_mode_e
new_mode);
+ enum pdf_fsys_file_mode_e new_mode);
pdf_bool_t pdf_fsys_file_same_p (pdf_fsys_file_t file,
pdf_text_t path);
pdf_status_t pdf_fsys_file_get_pos (pdf_fsys_file_t file,
@@ -235,14 +236,13 @@
pdf_size_t pdf_fsys_file_get_size (pdf_fsys_file_t file);
pdf_status_t pdf_fsys_file_set_size (pdf_fsys_file_t file,
pdf_size_t size);
-pdf_size_t pdf_fsys_file_read (pdf_fsys_file_t file,
- const pdf_size_t elem_size,
- const pdf_size_t elem_count,
- void *data);
-pdf_size_t pdf_fsys_file_write (pdf_fsys_file_t file,
- const pdf_size_t elem_size,
- const pdf_size_t elem_count,
- void *data);
+
+pdf_status_t pdf_fsys_file_read (pdf_fsys_file_t file, pdf_char_t *buf,
+ pdf_size_t bytes, pdf_size_t *read_bytes);
+
+pdf_status_t pdf_fsys_file_write (pdf_fsys_file_t file, pdf_char_t *buf,
+ pdf_size_t bytes, pdf_size_t *written_bytes);
+
pdf_status_t pdf_fsys_file_flush (pdf_fsys_file_t file);
pdf_status_t pdf_fsys_file_request_ria (pdf_fsys_file_t file,
pdf_size_t offset,
=== modified file 'src/base/pdf-stm-be.c'
--- src/base/pdf-stm-be.c 2008-10-04 16:34:37 +0000
+++ src/base/pdf-stm-be.c 2009-05-15 17:55:40 +0000
@@ -1,4 +1,4 @@
-/* -*- mode: C -*- Time-stamp: "2008-09-24 18:45:45 gerel"
+/* -*- mode: C -*- Time-stamp: "2009-05-15 13:44:30 gerel"
*
* File: pdf-stm-be.c
* Date: Wed Jun 18 21:15:16 2008
@@ -348,6 +348,7 @@
{
pdf_size_t readed_bytes;
pdf_size_t current_pos;
+ pdf_status_t ret;
/* Seek in the file */
pdf_fsys_file_get_pos (be->data.file.file,
@@ -360,9 +361,10 @@
}
/* Read the requested number of bytes */
- readed_bytes = pdf_fsys_file_read (be->data.file.file,
- 1, bytes,
- (void *) buffer);
+ ret = pdf_fsys_file_read (be->data.file.file,
+ buffer,
+ bytes,
+ &readed_bytes);
/* Restore the file position and update the position of the
stream */
@@ -384,6 +386,7 @@
{
pdf_size_t written_bytes;
pdf_size_t current_pos;
+ pdf_status_t ret;
/* Seek in the file */
pdf_fsys_file_get_pos (be->data.file.file,
@@ -396,9 +399,10 @@
}
/* Write the requested number of bytes */
- written_bytes = pdf_fsys_file_write (be->data.file.file,
- 1, bytes,
- buffer);
+ ret = pdf_fsys_file_write (be->data.file.file,
+ buffer,
+ bytes,
+ &written_bytes);
/* Restore the file position and update the position of the
stream */
=== modified file 'torture/unit/Makefile.am'
--- torture/unit/Makefile.am 2009-04-16 22:13:38 +0000
+++ torture/unit/Makefile.am 2009-05-13 16:30:24 +0000
@@ -63,6 +63,7 @@
# Unit tests for the Stream Module test suite
TEST_SUITE_STM = base/stm/pdf-stm-mem-new.c \
+ base/stm/pdf-stm-file-new.c \
base/stm/pdf-stm-read.c \
base/stm/pdf-stm-read-char.c \
base/stm/pdf-stm-peek-char.c \
@@ -179,13 +180,13 @@
base/time/pdf-time-span-dup.c \
base/time/pdf-time-span-destroy.c \
base/time/pdf-time-span-set.c \
- base/time/pdf-time-span-set-from-i32.c \
- base/time/pdf-time-span-negate.c \
- base/time/pdf-time-span-add.c \
- base/time/pdf-time-span-cmp.c \
- base/time/pdf-time-span-copy.c \
- base/time/pdf-time-span-diff.c \
- base/time/pdf-time-span-to-secs.c \
+ base/time/pdf-time-span-set-from-i32.c \
+ base/time/pdf-time-span-negate.c \
+ base/time/pdf-time-span-add.c \
+ base/time/pdf-time-span-cmp.c \
+ base/time/pdf-time-span-copy.c \
+ base/time/pdf-time-span-diff.c \
+ base/time/pdf-time-span-to-secs.c \
base/time/pdf-time-testdata.c \
base/time/pdf-time-test-common.c
=== added file 'torture/unit/base/stm/pdf-stm-file-new.c'
--- torture/unit/base/stm/pdf-stm-file-new.c 1970-01-01 00:00:00 +0000
+++ torture/unit/base/stm/pdf-stm-file-new.c 2009-05-13 16:30:24 +0000
@@ -0,0 +1,85 @@
+/* -*- mode: C -*- Time-stamp: "2009-05-13 13:21:10 gerel"
+ *
+ * File: pdf-stm-file-new.c
+ * Date: Sat Sep 20 14:37:26 2008
+ *
+ * GNU PDF Library - Unit tests for pdf_stm_file_new
+ *
+ */
+
+/* Copyright (C) 2008 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>
+
+/*
+ * Test: pdf_stm_file_new_001
+ * Description:
+ * Create a new file-based reading stream.
+ * Success condition:
+ * The call to pdf_stm_file_new should return success.
+ */
+START_TEST (pdf_stm_file_new_001)
+{
+ pdf_status_t ret;
+ pdf_stm_t stm;
+ pdf_fsys_file_t file;
+ pdf_text_t path;
+ pdf_char_t * remain;
+ pdf_size_t remain_length;
+
+ /* Create the file path */
+ pdf_text_init ();
+ ret = pdf_text_new_from_pdf_string ("tmp.test", 8, &remain, &remain_length,
&path);
+ fail_if (ret != PDF_OK);
+
+ /* Open new file */
+ ret = pdf_fsys_file_open (NULL, path, PDF_FSYS_OPEN_MODE_WRITE, &file);
+ fail_if (ret != PDF_OK);
+
+ /* Create the stream */
+ ret = pdf_stm_file_new (file,
+ 0,
+ 0, /* Use the default cache size */
+ PDF_STM_WRITE,
+ &stm);
+ fail_if(ret != PDF_OK);
+
+ /* Free all resources */
+ pdf_stm_destroy (stm);
+ pdf_fsys_file_close (file);
+ pdf_text_destroy (path);
+
+}
+END_TEST
+
+/*
+ * Test case creation function
+ */
+TCase *
+test_pdf_stm_file_new (void)
+{
+ TCase *tc = tcase_create ("pdf_stm_file_new");
+
+ tcase_add_test(tc, pdf_stm_file_new_001);
+
+ return tc;
+}
+
+/* End of pdf-stm-file-new.c */
=== modified file 'torture/unit/base/stm/pdf-stm-peek-char.c'
--- torture/unit/base/stm/pdf-stm-peek-char.c 2009-01-13 21:56:12 +0000
+++ torture/unit/base/stm/pdf-stm-peek-char.c 2009-05-15 17:55:40 +0000
@@ -1,4 +1,4 @@
-/* -*- mode: C -*- Time-stamp: "09/01/13 22:10:30 jemarch"
+/* -*- mode: C -*- Time-stamp: "2009-05-15 13:46:31 gerel"
*
* File: pdf-stm-peek-char.c
* Date: Sat Sep 20 18:07:45 2008
@@ -115,6 +115,62 @@
/*
+ * Test: pdf_stm_peek_char_003
+ * Description:
+ * Peek a character from a file stream.
+ * Success condition:
+ * The peek character should be ok.
+ */
+START_TEST (pdf_stm_peek_char_003)
+{
+ pdf_status_t ret;
+ pdf_stm_t stm;
+ pdf_char_t ret_char;
+ pdf_size_t written;
+
+ pdf_fsys_file_t file;
+ pdf_text_t path;
+ pdf_char_t * remain;
+ pdf_size_t remain_length;
+
+ /* Create the file path */
+ pdf_text_init ();
+ ret = pdf_text_new_from_pdf_string ("tmp.test", 8, &remain, &remain_length,
&path);
+ fail_if (ret != PDF_OK);
+
+ /* Open new file */
+ ret = pdf_fsys_file_open (NULL, path, PDF_FSYS_OPEN_MODE_WRITE, &file);
+ fail_if (ret != PDF_OK);
+
+ ret = pdf_fsys_file_write (file, "GNU", 3, &written);
+ fail_if (ret != PDF_OK);
+ fail_if (written != 3);
+ pdf_fsys_file_close (file);
+
+ ret = pdf_fsys_file_open (NULL, path, PDF_FSYS_OPEN_MODE_READ, &file);
+ fail_if (ret != PDF_OK);
+ /* Create the stream */
+ ret = pdf_stm_file_new (file,
+ 0,
+ 0, /* Use the default cache size */
+ PDF_STM_READ,
+ &stm);
+ fail_if(ret != PDF_OK);
+
+ /* Peek a character from the stream */
+ ret = pdf_stm_peek_char (stm, &ret_char);
+ fail_if(ret != PDF_OK);
+ fail_if(ret_char != 'G');
+
+ /* Destroy data */
+ pdf_stm_destroy (stm);
+ pdf_fsys_file_close (file);
+ pdf_text_destroy (path);
+}
+END_TEST
+
+
+/*
* Test case creation function
*/
TCase *
@@ -124,6 +180,7 @@
tcase_add_test(tc, pdf_stm_peek_char_001);
tcase_add_test(tc, pdf_stm_peek_char_002);
+ tcase_add_test(tc, pdf_stm_peek_char_003);
return tc;
}
=== modified file 'torture/unit/base/stm/pdf-stm-read-char.c'
--- torture/unit/base/stm/pdf-stm-read-char.c 2009-01-13 21:56:12 +0000
+++ torture/unit/base/stm/pdf-stm-read-char.c 2009-05-15 17:55:40 +0000
@@ -1,4 +1,4 @@
-/* -*- mode: C -*- Time-stamp: "09/01/13 22:12:30 jemarch"
+/* -*- mode: C -*- Time-stamp: "2009-05-15 13:47:06 gerel"
*
* File: pdf-stm-read-char.c
* Date: Sat Sep 20 16:59:27 2008
@@ -119,6 +119,63 @@
}
END_TEST
+
+/*
+ * Test: pdf_stm_read_char_003
+ * Description:
+ * Read a character from a file stream.
+ * Success condition:
+ * The read character should be ok.
+ */
+START_TEST (pdf_stm_read_char_003)
+{
+ pdf_status_t ret;
+ pdf_stm_t stm;
+ pdf_char_t ret_char;
+ pdf_size_t written;
+
+ pdf_fsys_file_t file;
+ pdf_text_t path;
+ pdf_char_t * remain;
+ pdf_size_t remain_length;
+
+ /* Create the file path */
+ pdf_text_init ();
+ ret = pdf_text_new_from_pdf_string ("tmp.test", 8, &remain, &remain_length,
&path);
+ fail_if (ret != PDF_OK);
+
+ /* Open new file */
+ ret = pdf_fsys_file_open (NULL, path, PDF_FSYS_OPEN_MODE_WRITE, &file);
+ fail_if (ret != PDF_OK);
+
+ ret = pdf_fsys_file_write (file, "GNU", 3, &written);
+ fail_if (ret != PDF_OK);
+ fail_if (written != 3);
+ pdf_fsys_file_close (file);
+
+ ret = pdf_fsys_file_open (NULL, path, PDF_FSYS_OPEN_MODE_READ, &file);
+ fail_if (ret != PDF_OK);
+ /* Create the stream */
+ ret = pdf_stm_file_new (file,
+ 0,
+ 0, /* Use the default cache size */
+ PDF_STM_READ,
+ &stm);
+ fail_if(ret != PDF_OK);
+
+ /* Peek a character from the stream */
+ ret = pdf_stm_read_char (stm, &ret_char);
+ fail_if(ret != PDF_OK);
+ fail_if(ret_char != 'G');
+
+ /* Destroy data */
+ pdf_stm_destroy (stm);
+ pdf_fsys_file_close (file);
+ pdf_text_destroy (path);
+}
+END_TEST
+
+
/*
* Test case creation function
*/
@@ -129,6 +186,7 @@
tcase_add_test(tc, pdf_stm_read_char_001);
tcase_add_test(tc, pdf_stm_read_char_002);
+ tcase_add_test(tc, pdf_stm_read_char_003);
return tc;
}
=== modified file 'torture/unit/base/stm/pdf-stm-read.c'
--- torture/unit/base/stm/pdf-stm-read.c 2009-01-14 20:39:58 +0000
+++ torture/unit/base/stm/pdf-stm-read.c 2009-05-15 17:55:40 +0000
@@ -1,4 +1,4 @@
-/* -*- mode: C -*- Time-stamp: "09/01/13 22:46:02 jemarch"
+/* -*- mode: C -*- Time-stamp: "2009-05-15 13:48:43 gerel"
*
* File: pdf-stm-read.c
* Date: Sat Sep 20 15:20:17 2008
@@ -761,6 +761,137 @@
/*
+ * Test: pdf_stm_read_013
+ * Description:
+ * Read some bytes from a read file stream.
+ * Success condition:
+ * The read data should be consistent.
+ */
+START_TEST (pdf_stm_read_013)
+{
+ pdf_status_t ret;
+ pdf_stm_t stm;
+ pdf_size_t written,read_bytes;
+
+ pdf_fsys_file_t file;
+ char data[4];
+ pdf_text_t path;
+ pdf_char_t * remain;
+ pdf_size_t remain_length;
+
+ /* Create the file path */
+ pdf_text_init ();
+ ret = pdf_text_new_from_pdf_string ("tmp.test", 8, &remain, &remain_length,
&path);
+ fail_if (ret != PDF_OK);
+
+ /* Open new file */
+ ret = pdf_fsys_file_open (NULL, path, PDF_FSYS_OPEN_MODE_WRITE, &file);
+ fail_if (ret != PDF_OK);
+
+ ret = pdf_fsys_file_write (file, "GNU", 3, &written);
+ fail_if (ret != PDF_OK);
+ fail_if (written != 3);
+ pdf_fsys_file_close (file);
+
+ ret = pdf_fsys_file_open (NULL, path, PDF_FSYS_OPEN_MODE_READ, &file);
+ fail_if (ret != PDF_OK);
+ /* Create the stream */
+ ret = pdf_stm_file_new (file,
+ 0,
+ 0, /* Use the default cache size */
+ PDF_STM_READ,
+ &stm);
+ fail_if(ret != PDF_OK);
+
+ ret = pdf_stm_read (stm,
+ data,
+ 3,
+ &read_bytes);
+ fail_if(ret != PDF_OK);
+ fail_if(read_bytes != 3);
+ data[3] = '\0';
+
+ fail_if (strcmp (data, "GNU") != 0);
+
+ /* Free resources */
+ pdf_stm_destroy (stm);
+ pdf_fsys_file_close (file);
+ pdf_text_destroy (path);
+}
+END_TEST
+
+
+/*
+ * Test: pdf_stm_read_014
+ * Description:
+ * Read some bytes from a read file stream with null filter.
+ * Success condition:
+ * The read data should be consistent.
+ */
+START_TEST (pdf_stm_read_014)
+{
+ pdf_status_t ret;
+ pdf_stm_t stm;
+ pdf_size_t written,read_bytes;
+
+ pdf_fsys_file_t file;
+ char data[4];
+ pdf_text_t path;
+ pdf_char_t * remain;
+ pdf_size_t remain_length;
+ pdf_hash_t null_filter_params;
+
+ /* Create the file path */
+ pdf_text_init ();
+ ret = pdf_text_new_from_pdf_string ("tmp.test", 8, &remain, &remain_length,
&path);
+ fail_if (ret != PDF_OK);
+
+ /* Open new file */
+ ret = pdf_fsys_file_open (NULL, path, PDF_FSYS_OPEN_MODE_WRITE, &file);
+ fail_if (ret != PDF_OK);
+
+ ret = pdf_fsys_file_write (file, "GNU", 3, &written);
+ fail_if (ret != PDF_OK);
+ fail_if (written != 3);
+ pdf_fsys_file_close (file);
+
+ ret = pdf_fsys_file_open (NULL, path, PDF_FSYS_OPEN_MODE_READ, &file);
+ fail_if (ret != PDF_OK);
+ /* Create the stream */
+ ret = pdf_stm_file_new (file,
+ 0,
+ 0, /* Use the default cache size */
+ PDF_STM_READ,
+ &stm);
+ fail_if(ret != PDF_OK);
+
+
+ /* Install a new filter in the chain */
+ pdf_hash_new (NULL, &null_filter_params);
+ fail_if(pdf_stm_install_filter (stm,
+ PDF_STM_FILTER_NULL,
+ null_filter_params) != PDF_OK);
+
+ ret = pdf_stm_read (stm,
+ data,
+ 3,
+ &read_bytes);
+ fail_if(ret != PDF_OK);
+ fail_if(read_bytes != 3);
+ data[3] = '\0';
+
+ fail_if (strcmp (data, "GNU") != 0);
+
+ /* Free resources */
+ pdf_stm_destroy (stm);
+ pdf_fsys_file_close (file);
+ pdf_text_destroy (path);
+}
+END_TEST
+
+
+
+/*
* Test case creation function
*/
TCase *
@@ -782,6 +913,8 @@
#endif
tcase_add_test(tc, pdf_stm_read_011);
tcase_add_test(tc, pdf_stm_read_012);
+ tcase_add_test(tc, pdf_stm_read_013);
+ tcase_add_test(tc, pdf_stm_read_014);
return tc;
}
=== modified file 'torture/unit/base/stm/pdf-stm-seek.c'
--- torture/unit/base/stm/pdf-stm-seek.c 2009-01-13 21:56:12 +0000
+++ torture/unit/base/stm/pdf-stm-seek.c 2009-05-15 17:55:40 +0000
@@ -1,4 +1,4 @@
-/* -*- mode: C -*- Time-stamp: "09/01/13 22:33:25 jemarch"
+/* -*- mode: C -*- Time-stamp: "2009-05-15 13:49:49 gerel"
*
* File: pdf-stm-seek.c
* Date: Sat Sep 20 18:50:33 2008
@@ -131,6 +131,143 @@
}
END_TEST
+
+/*
+ * Test: pdf_stm_seek_003
+ * Description:
+ * Seek into a file read stream.
+ * Success condition:
+ * The seek operation should success.
+ */
+START_TEST (pdf_stm_seek_003)
+{
+ pdf_status_t ret;
+ pdf_stm_t stm;
+ pdf_char_t ret_char;
+ pdf_off_t pos;
+
+ pdf_fsys_file_t file;
+ pdf_text_t path;
+ pdf_char_t * remain;
+ pdf_size_t remain_length,written;
+
+ /* Create the file path */
+ pdf_text_init ();
+ ret = pdf_text_new_from_pdf_string ("tmp.test", 8, &remain, &remain_length,
+ &path);
+ fail_if (ret != PDF_OK);
+
+ /* Open new file */
+ ret = pdf_fsys_file_open (NULL, path, PDF_FSYS_OPEN_MODE_WRITE, &file);
+ fail_if (ret != PDF_OK);
+
+ ret = pdf_fsys_file_write (file, "0123456789", 10, &written);
+ fail_if (ret != PDF_OK);
+ fail_if (written != 10);
+ pdf_fsys_file_close (file);
+
+ ret = pdf_fsys_file_open (NULL, path, PDF_FSYS_OPEN_MODE_READ, &file);
+ fail_if (ret != PDF_OK);
+ /* Create the stream */
+ ret = pdf_stm_file_new (file,
+ 0,
+ 0, /* Use the default cache size */
+ PDF_STM_READ,
+ &stm);
+ fail_if(ret != PDF_OK);
+
+ /* Seek into the stream */
+ pos = pdf_stm_seek (stm, 3);
+ fail_if(pos != 3);
+
+ /* Read a character */
+ ret = pdf_stm_read_char (stm, &ret_char);
+ fail_if(ret != PDF_OK);
+ fail_if(ret_char != '3');
+
+ /* Seek into the stream */
+ pos = pdf_stm_seek (stm, 8);
+ fail_if(pos != 8);
+
+ /* Read a character */
+ ret = pdf_stm_read_char (stm, &ret_char);
+ fail_if(ret != PDF_OK);
+ fail_if(ret_char != '8');
+
+ /* Destroy data */
+ pdf_stm_destroy (stm);
+ pdf_fsys_file_close (file);
+ pdf_text_destroy (path);
+}
+END_TEST
+
+
+/*
+ * Test: pdf_stm_seek_004
+ * Description:
+ * Seek to a position beyond the size of the stream
+ * into a file read stream.
+ * Success condition:
+ * The seek operation should success and the seek
+ * position should be to the last valid position
+ * in the stream.
+ */
+START_TEST (pdf_stm_seek_004)
+{
+ pdf_status_t ret;
+ pdf_stm_t stm;
+ pdf_char_t ret_char;
+ pdf_off_t pos;
+
+ pdf_fsys_file_t file;
+ pdf_text_t path;
+ pdf_char_t * remain;
+ pdf_size_t remain_length,written;
+
+ /* Create the file path */
+ pdf_text_init ();
+ ret = pdf_text_new_from_pdf_string ("tmp.test", 8, &remain, &remain_length,
+ &path);
+ fail_if (ret != PDF_OK);
+
+ /* Open new file */
+ ret = pdf_fsys_file_open (NULL, path, PDF_FSYS_OPEN_MODE_WRITE, &file);
+ fail_if (ret != PDF_OK);
+
+ ret = pdf_fsys_file_write (file, "0123456789", 10, &written);
+ fail_if (ret != PDF_OK);
+ fail_if (written != 10);
+ pdf_fsys_file_close (file);
+
+
+ ret = pdf_fsys_file_open (NULL, path, PDF_FSYS_OPEN_MODE_READ, &file);
+ fail_if (ret != PDF_OK);
+ /* Create the stream */
+ ret = pdf_stm_file_new (file,
+ 0,
+ 0, /* Use the default cache size */
+ PDF_STM_READ,
+ &stm);
+ fail_if(ret != PDF_OK);
+
+ /* Seek into the stream */
+ pos = pdf_stm_seek (stm, 300);
+ fail_if(pos != 9);
+
+ /* Read a character */
+ ret = pdf_stm_read_char (stm, &ret_char);
+ fail_if(ret != PDF_OK);
+ fail_if(ret_char != '9');
+
+ /* Destroy data */
+ pdf_stm_destroy (stm);
+ pdf_fsys_file_close (file);
+ pdf_text_destroy (path);
+}
+END_TEST
+
+
+
/*
* Test case creation function
*/
@@ -141,6 +278,8 @@
tcase_add_test(tc, pdf_stm_seek_001);
tcase_add_test(tc, pdf_stm_seek_002);
+ tcase_add_test(tc, pdf_stm_seek_003);
+ tcase_add_test(tc, pdf_stm_seek_004);
return tc;
}
=== modified file 'torture/unit/base/stm/pdf-stm-tell.c'
--- torture/unit/base/stm/pdf-stm-tell.c 2008-09-20 17:24:13 +0000
+++ torture/unit/base/stm/pdf-stm-tell.c 2009-05-15 17:55:40 +0000
@@ -1,4 +1,4 @@
-/* -*- mode: C -*- Time-stamp: "08/09/20 19:19:22 jemarch"
+/* -*- mode: C -*- Time-stamp: "2009-05-15 13:50:03 gerel"
*
* File: pdf-stm-tell.c
* Date: Sat Sep 20 19:16:41 2008
@@ -71,6 +71,65 @@
/*
+ * Test: pdf_stm_tell_002
+ * Description:
+ * Tell an initialized reading file stream.
+ * Success condition:
+ * The tell operation should report the first position
+ * in the stream (0).
+ */
+START_TEST (pdf_stm_tell_002)
+{
+ pdf_status_t ret;
+ pdf_stm_t stm;
+ pdf_char_t ret_char;
+ pdf_off_t pos;
+
+ pdf_fsys_file_t file;
+ pdf_text_t path;
+ pdf_char_t * remain;
+ pdf_size_t remain_length,written;
+
+ /* Create the file path */
+ pdf_text_init ();
+ ret = pdf_text_new_from_pdf_string ("tmp.test", 8, &remain, &remain_length,
+ &path);
+ fail_if (ret != PDF_OK);
+
+ /* Open new file */
+ ret = pdf_fsys_file_open (NULL, path, PDF_FSYS_OPEN_MODE_WRITE, &file);
+ fail_if (ret != PDF_OK);
+
+ ret = pdf_fsys_file_write (file, "0123456789", 10, &written);
+ fail_if (ret != PDF_OK);
+ fail_if (written != 10);
+ pdf_fsys_file_close (file);
+
+ ret = pdf_fsys_file_open (NULL, path, PDF_FSYS_OPEN_MODE_READ, &file);
+ fail_if (ret != PDF_OK);
+ /* Create the stream */
+ ret = pdf_stm_file_new (file,
+ 0,
+ 0, /* Use the default cache size */
+ PDF_STM_READ,
+ &stm);
+ fail_if(ret != PDF_OK);
+
+ /* Tell the stream */
+ pos = pdf_stm_tell (stm);
+ fail_if(pos != 0);
+
+ /* Destroy data */
+ pdf_stm_destroy (stm);
+ pdf_fsys_file_close (file);
+ pdf_text_destroy (path);
+}
+END_TEST
+
+
+
+
+/*
* Test case creation function
*/
TCase *
@@ -79,6 +138,7 @@
TCase *tc = tcase_create ("pdf_stm_tell");
tcase_add_test(tc, pdf_stm_tell_001);
+ tcase_add_test(tc, pdf_stm_tell_002);
return tc;
}
=== modified file 'torture/unit/base/stm/pdf-stm-write.c'
--- torture/unit/base/stm/pdf-stm-write.c 2009-01-27 20:59:40 +0000
+++ torture/unit/base/stm/pdf-stm-write.c 2009-05-15 17:55:40 +0000
@@ -1,4 +1,4 @@
-/* -*- mode: C -*- Time-stamp: "09/01/27 21:41:44 jemarch"
+/* -*- mode: C -*- Time-stamp: "2009-05-15 13:53:39 gerel"
*
* File: pdf-stm-write.c
* Date: Sun Sep 21 16:37:27 2008
@@ -729,6 +729,149 @@
/*
+ * Test: pdf_stm_write_013
+ * Description:
+ * Write some bytes to a write file stream.
+ * Success condition:
+ * The written data should be consistent.
+ */
+START_TEST (pdf_stm_write_013)
+{
+ pdf_status_t ret;
+ pdf_stm_t stm;
+ pdf_size_t read,written_bytes;
+
+ pdf_fsys_file_t file;
+ char data[4];
+ pdf_text_t path;
+ pdf_char_t * remain;
+ pdf_size_t remain_length;
+
+ /* Create the file path */
+ pdf_text_init ();
+ ret = pdf_text_new_from_pdf_string ("tmp.test", 8, &remain, &remain_length,
&path);
+ fail_if (ret != PDF_OK);
+
+ /* Open new file */
+ ret = pdf_fsys_file_open (NULL, path, PDF_FSYS_OPEN_MODE_WRITE, &file);
+ fail_if (ret != PDF_OK);
+
+ /* Create the stream */
+ ret = pdf_stm_file_new (file,
+ 0,
+ 0, /* Use the default cache size */
+ PDF_STM_WRITE,
+ &stm);
+ fail_if(ret != PDF_OK);
+
+ /* Write some data into the stream */
+ ret = pdf_stm_write (stm,
+ "GNU",
+ 3,
+ &written_bytes);
+ fail_if(ret != PDF_OK);
+ fail_if(written_bytes != 3);
+
+ /* Destroy data */
+ pdf_stm_destroy (stm);
+ pdf_fsys_file_close (file);
+
+ /* Read file data and compare */
+ ret = pdf_fsys_file_open (NULL, path, PDF_FSYS_OPEN_MODE_READ, &file);
+ fail_if (ret != PDF_OK);
+
+ ret = pdf_fsys_file_read (file, data, 3, &read);
+ fail_if (ret != PDF_OK);
+ data[3] = '\0';
+
+ fail_if(read != 3);
+ fail_if (strcmp (data, "GNU") != 0);
+
+ /* Free resources */
+ pdf_fsys_file_close (file);
+ pdf_text_destroy (path);
+}
+END_TEST
+
+
+
+/*
+ * Test: pdf_stm_write_014
+ * Description:
+ * Write some bytes to a write file stream with
+ * a null filter installed.
+ * Success condition:
+ * The written data should be consistent.
+ */
+START_TEST (pdf_stm_write_014)
+{
+ pdf_status_t ret;
+ pdf_stm_t stm;
+ pdf_size_t read,written_bytes;
+ pdf_hash_t null_filter_params;
+
+ pdf_fsys_file_t file;
+ char data[4];
+ pdf_text_t path;
+ pdf_char_t * remain;
+ pdf_size_t remain_length;
+
+ /* Create the file path */
+ pdf_text_init ();
+ ret = pdf_text_new_from_pdf_string ("tmp.test", 8, &remain, &remain_length,
&path);
+ fail_if (ret != PDF_OK);
+
+ /* Open new file */
+ ret = pdf_fsys_file_open (NULL, path, PDF_FSYS_OPEN_MODE_WRITE, &file);
+ fail_if (ret != PDF_OK);
+
+ /* Create the stream */
+ ret = pdf_stm_file_new (file,
+ 0,
+ 0, /* Use the default cache size */
+ PDF_STM_WRITE,
+ &stm);
+ fail_if(ret != PDF_OK);
+
+
+ /* Install a new filter in the chain */
+ pdf_hash_new (NULL, &null_filter_params);
+ fail_if(pdf_stm_install_filter (stm,
+ PDF_STM_FILTER_NULL,
+ null_filter_params) != PDF_OK);
+
+ /* Write some data into the stream */
+ ret = pdf_stm_write (stm,
+ "GNU",
+ 3,
+ &written_bytes);
+ fail_if(ret != PDF_OK);
+ fail_if(written_bytes != 3);
+
+ /* Destroy data */
+ pdf_hash_destroy (null_filter_params);
+ pdf_stm_destroy (stm);
+ pdf_fsys_file_close (file);
+
+ /* Read file data and compare */
+ ret = pdf_fsys_file_open (NULL, path, PDF_FSYS_OPEN_MODE_READ, &file);
+ fail_if (ret != PDF_OK);
+
+ ret = pdf_fsys_file_read (file, data, 3, &read);
+ fail_if (ret != PDF_OK);
+ data[3] = '\0';
+
+ fail_if(read != 3);
+ fail_if (strcmp (data, "GNU") != 0);
+
+ /* Free resources */
+ pdf_fsys_file_close (file);
+ pdf_text_destroy (path);
+}
+END_TEST
+
+
+/*
* Test case creation function
*/
TCase *
@@ -751,6 +894,8 @@
tcase_add_test(tc, pdf_stm_write_010);
tcase_add_test(tc, pdf_stm_write_011);
tcase_add_test(tc, pdf_stm_write_012);
+ tcase_add_test(tc, pdf_stm_write_013);
+ tcase_add_test(tc, pdf_stm_write_014);
return tc;
}
=== modified file 'torture/unit/base/stm/tsuite-stm.c'
--- torture/unit/base/stm/tsuite-stm.c 2008-09-21 14:55:24 +0000
+++ torture/unit/base/stm/tsuite-stm.c 2009-05-13 16:30:24 +0000
@@ -1,4 +1,4 @@
-/* -*- mode: C -*- Time-stamp: "08/09/21 16:43:20 jemarch"
+/* -*- mode: C -*- Time-stamp: "2009-05-13 13:13:15 gerel"
*
* File: tsuit-stm.c
* Date: Sat Feb 23 21:35:11 2008
@@ -26,6 +26,7 @@
#include <check.h>
extern TCase *test_pdf_stm_mem_new (void);
+extern TCase *test_pdf_stm_file_new (void);
extern TCase *test_pdf_stm_read (void);
extern TCase *test_pdf_stm_read_char (void);
extern TCase *test_pdf_stm_peek_char (void);
@@ -41,6 +42,7 @@
s = suite_create("stm");
suite_add_tcase (s, test_pdf_stm_mem_new ());
+ suite_add_tcase (s, test_pdf_stm_file_new ());
suite_add_tcase (s, test_pdf_stm_read ());
suite_add_tcase (s, test_pdf_stm_read_char ());
suite_add_tcase (s, test_pdf_stm_peek_char ());
# Begin bundle
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
###
-gerel
- [pdf-devel] Patch for FS#98, file-based stm tests,
gerel <=