From d4ddc5b94d6abbd33a3001d27ff5d9698be3f820 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Sun, 17 Mar 2013 19:51:02 +0100 Subject: * test/libapt/assert.h, test/libapt/run-tests: - exit with status 1 on test failure --- test/libapt/assert.h | 2 ++ test/libapt/run-tests | 9 ++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) (limited to 'test/libapt') diff --git a/test/libapt/assert.h b/test/libapt/assert.h index fdf6740c6..113c057ed 100644 --- a/test/libapt/assert.h +++ b/test/libapt/assert.h @@ -1,4 +1,5 @@ #include +#include #define equals(x,y) assertEquals(y, x, __LINE__) #define equalsNot(x,y) assertEqualsNot(y, x, __LINE__) @@ -6,6 +7,7 @@ template < typename X, typename Y > void OutputAssertEqual(X expect, char const* compare, Y get, unsigned long const &line) { std::cerr << "Test FAILED: »" << expect << "« " << compare << " »" << get << "« at line " << line << std::endl; + std::exit(EXIT_FAILURE); } template < typename X, typename Y > diff --git a/test/libapt/run-tests b/test/libapt/run-tests index 45a3157f7..f18be6d2b 100755 --- a/test/libapt/run-tests +++ b/test/libapt/run-tests @@ -7,6 +7,7 @@ echo "Compiling the tests …" echo "Running all testcases …" LDPATH="$DIR/../../build/bin" EXT="_libapt_test" +EXIT_CODE=0 # detect if output is on a terminal (colorful) or better not if expr match "$(readlink -f /proc/$$/fd/1)" '/dev/pts/[0-9]\+' > /dev/null; then @@ -106,9 +107,15 @@ do fi echo -n "Testing with ${NAME} " - LD_LIBRARY_PATH=${LDPATH} ${testapp} ${tmppath} && echo "$TESTOKAY" || echo "$TESTFAIL" + if LD_LIBRARY_PATH=${LDPATH} ${testapp} ${tmppath} ; then + echo "$TESTOKAY" + else + echo "$TESTFAIL" + EXIT_CODE=1 + fi if [ -n "$tmppath" -a -d "$tmppath" ]; then rm -rf "$tmppath" fi done +exit $EXIT_CODE -- cgit v1.2.3-70-g09d2 From c8b860fb8d0f1531f99db4fad74f5892c6806f1b Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Mon, 18 Mar 2013 12:10:35 +0100 Subject: fix pkgTagSection::Exists() and add test --- apt-pkg/tagfile.cc | 9 ++++++- apt-pkg/tagfile.h | 4 ++-- test/libapt/makefile | 9 ++++++- test/libapt/tagfile_test.cc | 57 +++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 75 insertions(+), 4 deletions(-) create mode 100644 test/libapt/tagfile_test.cc (limited to 'test/libapt') diff --git a/apt-pkg/tagfile.cc b/apt-pkg/tagfile.cc index 79811899a..1c79ee74f 100644 --- a/apt-pkg/tagfile.cc +++ b/apt-pkg/tagfile.cc @@ -282,10 +282,17 @@ void pkgTagSection::Trim() for (; Stop > Section + 2 && (Stop[-2] == '\n' || Stop[-2] == '\r'); Stop--); } /*}}}*/ +// TagSection::Exists - return True if a tag exists /*{{{*/ +bool pkgTagSection::Exists(const char* const Tag) +{ + unsigned int tmp; + return Find(Tag, tmp); +} + /*}}}*/ // TagSection::Find - Locate a tag /*{{{*/ // --------------------------------------------------------------------- /* This searches the section for a tag that matches the given string. */ -bool pkgTagSection::Find(const char *Tag,unsigned &Pos) const +bool pkgTagSection::Find(const char *Tag,unsigned int &Pos) const { unsigned int Length = strlen(Tag); unsigned int I = AlphaIndexes[AlphaHash(Tag)]; diff --git a/apt-pkg/tagfile.h b/apt-pkg/tagfile.h index fd24471c1..4718f5101 100644 --- a/apt-pkg/tagfile.h +++ b/apt-pkg/tagfile.h @@ -59,7 +59,7 @@ class pkgTagSection inline bool operator !=(const pkgTagSection &rhs) {return Section != rhs.Section;}; bool Find(const char *Tag,const char *&Start, const char *&End) const; - bool Find(const char *Tag,unsigned &Pos) const; + bool Find(const char *Tag,unsigned int &Pos) const; std::string FindS(const char *Tag) const; signed int FindI(const char *Tag,signed long Default = 0) const ; unsigned long long FindULL(const char *Tag, unsigned long long const &Default = 0) const; @@ -73,7 +73,7 @@ class pkgTagSection virtual void TrimRecord(bool BeforeRecord, const char* &End); inline unsigned int Count() const {return TagCount;}; - inline bool Exists(const char* const Tag) {return AlphaIndexes[AlphaHash(Tag)] != 0;} + bool Exists(const char* const Tag); inline void Get(const char *&Start,const char *&Stop,unsigned int I) const {Start = Section + Indexes[I]; Stop = Section + Indexes[I+1];} diff --git a/test/libapt/makefile b/test/libapt/makefile index 5e225f240..953e455e0 100644 --- a/test/libapt/makefile +++ b/test/libapt/makefile @@ -93,8 +93,15 @@ SLIBS = -lapt-pkg SOURCE = cdromreducesourcelist_test.cc include $(PROGRAM_H) -# text IndexCopy::ConvertToSourceList +# test IndexCopy::ConvertToSourceList PROGRAM = IndexCopyToSourceList${BASENAME} SLIBS = -lapt-pkg SOURCE = indexcopytosourcelist_test.cc include $(PROGRAM_H) + +# test tagfile +PROGRAM = PkgTagFile${BASENAME} +SLIBS = -lapt-pkg +SOURCE = tagfile_test.cc +include $(PROGRAM_H) + diff --git a/test/libapt/tagfile_test.cc b/test/libapt/tagfile_test.cc new file mode 100644 index 000000000..2e2144f99 --- /dev/null +++ b/test/libapt/tagfile_test.cc @@ -0,0 +1,57 @@ +#include +#include + +#include "assert.h" +#include +#include + +char *tempfile = NULL; +int tempfile_fd = -1; + +void remove_tmpfile(void) +{ + if (tempfile_fd > 0) + close(tempfile_fd); + if (tempfile != NULL) { + unlink(tempfile); + free(tempfile); + } +} + +int main(int argc, char *argv[]) +{ + FileFd fd; + const char contents[] = "FieldA-12345678: the value of the field"; + atexit(remove_tmpfile); + tempfile = strdup("apt-test.XXXXXXXX"); + tempfile_fd = mkstemp(tempfile); + + /* (Re-)Open (as FileFd), write and seek to start of the temp file */ + equals(fd.OpenDescriptor(tempfile_fd, FileFd::ReadWrite), true); + equals(fd.Write(contents, strlen(contents)), true); + equals(fd.Seek(0), true); + + pkgTagFile tfile(&fd); + pkgTagSection section; + equals(tfile.Step(section), true); + + /* It has one field */ + equals(section.Count(), 1); + + /* ... and it is called FieldA-12345678 */ + equals(section.Exists("FieldA-12345678"), true); + + /* its value is correct */ + equals(section.FindS("FieldA-12345678"), std::string("the value of the field")); + /* A non-existent field has an empty string as value */ + equals(section.FindS("FieldB-12345678"), std::string()); + + /* ... and Exists does not lie about missing fields... */ + equalsNot(section.Exists("FieldB-12345678"), true); + + /* There is only one section in this tag file */ + equals(tfile.Step(section), false); + + /* clean up handled by atexit handler, so just return here */ + return 0; +} -- cgit v1.2.3-70-g09d2 From 0c98ee5ade6bb660bf23b09d759e0bb3c52068b9 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Mon, 18 Mar 2013 13:52:43 +0100 Subject: test/libapt/tagfile_test.cc: add missing "unistd.h" (thanks to Niels Thykier) --- test/libapt/tagfile_test.cc | 1 + 1 file changed, 1 insertion(+) (limited to 'test/libapt') diff --git a/test/libapt/tagfile_test.cc b/test/libapt/tagfile_test.cc index 2e2144f99..d12c74c95 100644 --- a/test/libapt/tagfile_test.cc +++ b/test/libapt/tagfile_test.cc @@ -4,6 +4,7 @@ #include "assert.h" #include #include +#include char *tempfile = NULL; int tempfile_fd = -1; -- cgit v1.2.3-70-g09d2