diff options
Diffstat (limited to 'test')
| -rw-r--r-- | test/VersionSuite.cpp | 48 | ||||
| -rw-r--r-- | test/VersionSuite.h | 46 | ||||
| -rw-r--r-- | test/config.h.in | 65 | ||||
| -rw-r--r-- | test/test.cpp | 91 | 
4 files changed, 248 insertions, 2 deletions
diff --git a/test/VersionSuite.cpp b/test/VersionSuite.cpp new file mode 100644 index 0000000..82deddc --- /dev/null +++ b/test/VersionSuite.cpp @@ -0,0 +1,48 @@ +/* + * uriparser - RFC 3986 URI parsing library + * + * Copyright (C) 2014, Sebastian Pipping <webmaster@hartwork.org> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA + */ + +#include "VersionSuite.h" + +#ifndef _GNU_SOURCE +# define _GNU_SOURCE  // for asprintf +#endif +#include <stdio.h> + + +#include <config.h>  // for PACKAGE_VERSION +#include <uriparser/UriBase.h> + + +void VersionSuite::ensure_version_defines_in_sync() { +	char * INSIDE_VERSION = NULL; +	const int bytes_printed = asprintf(&INSIDE_VERSION, "%d.%d.%d%s", +			URI_VER_MAJOR, URI_VER_MINOR, URI_VER_RELEASE, URI_VER_SUFFIX_ANSI); +	TEST_ASSERT(bytes_printed != -1); +	printf("bytes_printed: %d\n", bytes_printed); + +	const bool equal = !strcmp(INSIDE_VERSION, PACKAGE_VERSION); +	if (! equal) { +		printf("Inside/outside version mismatch detected:\n"); +		printf("  Tarball version:         <%s>\n", PACKAGE_VERSION); +		printf("  Header defines version:  <%s>\n", INSIDE_VERSION); +	} +	free(INSIDE_VERSION); +	TEST_ASSERT(equal); +} diff --git a/test/VersionSuite.h b/test/VersionSuite.h new file mode 100644 index 0000000..495d3fc --- /dev/null +++ b/test/VersionSuite.h @@ -0,0 +1,46 @@ +/* + * uriparser - RFC 3986 URI parsing library + * + * Copyright (C) 2014, Sebastian Pipping <webmaster@hartwork.org> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA + */ + +#ifndef TEST_VERSION_TEST_H +#define TEST_VERSION_TEST_H 1 + + + +#include <cpptest.h> + +using namespace Test; + + + +class VersionSuite : public Suite { + +public: +	VersionSuite() { +		TEST_ADD(VersionSuite::ensure_version_defines_in_sync) +	} + +private: +	void ensure_version_defines_in_sync(); + +}; + + + +#endif // TEST_VERSION_TEST_H diff --git a/test/config.h.in b/test/config.h.in new file mode 100644 index 0000000..1ffe789 --- /dev/null +++ b/test/config.h.in @@ -0,0 +1,65 @@ +/* test/config.h.in.  Generated from configure.ac by autoheader.  */ + +/* Define to 1 if you have the <dlfcn.h> header file. */ +#undef HAVE_DLFCN_H + +/* Define to 1 if you have the <inttypes.h> header file. */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if you have the <memory.h> header file. */ +#undef HAVE_MEMORY_H + +/* Define to 1 if you have the <stdint.h> header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the <stdlib.h> header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the <strings.h> header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the <string.h> header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the <sys/stat.h> header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the <sys/types.h> header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have the <unistd.h> header file. */ +#undef HAVE_UNISTD_H + +/* Define if your C runtime provides the wprintf function. */ +#undef HAVE_WPRINTF + +/* Define to the sub-directory in which libtool stores uninstalled libraries. +   */ +#undef LT_OBJDIR + +/* Name of package */ +#undef PACKAGE + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the home page for this package. */ +#undef PACKAGE_URL + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Version number of package */ +#undef VERSION diff --git a/test/test.cpp b/test/test.cpp index 8eef547..915532f 100644 --- a/test/test.cpp +++ b/test/test.cpp @@ -26,6 +26,7 @@  #include <wchar.h>  #include "FourSuite.h" +#include "VersionSuite.h"  using namespace Test;  using namespace std; @@ -35,6 +36,7 @@ using namespace std;  extern "C" {  UriBool uri_TESTING_ONLY_ParseIpSixA(const char * text);  UriBool uri_TESTING_ONLY_ParseIpFourA(const char * text); +int uriCompareRangeA(const UriTextRangeA * a, const UriTextRangeA * b);  } @@ -102,6 +104,8 @@ public:  		TEST_ADD(UriSuite::testQueryDissection_Bug3590761)  		TEST_ADD(UriSuite::testFreeCrash_Bug20080827)  		TEST_ADD(UriSuite::testParseInvalid_Bug16) +		TEST_ADD(UriSuite::testRangeComparison) +		TEST_ADD(UriSuite::testEquals)  	}  private: @@ -976,7 +980,7 @@ Rule                                | Example | hostSet | absPath | emptySeg  		TEST_ASSERT(testUnescapingHelper(L"%0a%0d%0a%0d", L"\x0a\x0d\x0a\x0d", PLUS_DONT_TOUCH, URI_BR_DONT_TOUCH));  	} -	bool testAddBaseHelper(const wchar_t * base, const wchar_t * rel, const wchar_t * expectedResult) { +	bool testAddBaseHelper(const wchar_t * base, const wchar_t * rel, const wchar_t * expectedResult, bool backward_compatibility = false) {  		UriParserStateW stateW;  		// Base @@ -1011,7 +1015,12 @@ Rule                                | Example | hostSet | absPath | emptySeg  		// Transform  		UriUriW transformedUri; -		res = uriAddBaseUriW(&transformedUri, &relUri, &baseUri); +		if (backward_compatibility) { +			res = uriAddBaseUriExW(&transformedUri, &relUri, &baseUri, URI_RESOLVE_IDENTICAL_SCHEME_COMPAT); +		} else { +			res = uriAddBaseUriW(&transformedUri, &relUri, &baseUri); +		} +  		if (res != 0) {  			uriFreeUriMembersW(&baseUri);  			uriFreeUriMembersW(&relUri); @@ -1101,6 +1110,12 @@ Rule                                | Example | hostSet | absPath | emptySeg  		TEST_ASSERT(testAddBaseHelper(L"http://a/b/c/d;p?q", L"g#s/../x", L"http://a/b/c/g#s/../x"));  		TEST_ASSERT(testAddBaseHelper(L"http://a/b/c/d;p?q", L"http:g", L"http:g")); +		// Backward compatibility (feature request #4, RFC3986 5.4.2) +		TEST_ASSERT(testAddBaseHelper(L"http://a/b/c/d;p?q", L"http:g", L"http:g", false)); +		TEST_ASSERT(testAddBaseHelper(L"http://a/b/c/d;p?q", L"http:g", L"http://a/b/c/g", true)); +		TEST_ASSERT(testAddBaseHelper(L"http://a/b/c/d;p?q", L"http:g?q#f", L"http://a/b/c/g?q#f", true)); +		TEST_ASSERT(testAddBaseHelper(L"http://a/b/c/d;p?q", L"other:g?q#f", L"other:g?q#f", true)); +  		// Bug related to absolutePath flag set despite presence of host  		TEST_ASSERT(testAddBaseHelper(L"http://a/b/c/d;p?q", L"/", L"http://a/"));  		TEST_ASSERT(testAddBaseHelper(L"http://a/b/c/d;p?q", L"/g/", L"http://a/g/")); @@ -1738,6 +1753,77 @@ Rule                                | Example | hostSet | absPath | emptySeg  		uriFreeUriMembersA(&uriA);  	} + +	void testEqualsHelper(const char * uri_to_test) { +		UriParserStateA state; +		UriUriA uriOne; +		UriUriA uriTwo; +		state.uri = &uriOne; +		TEST_ASSERT(URI_SUCCESS == uriParseUriA(&state, uri_to_test)); +		state.uri = &uriTwo; +		TEST_ASSERT(URI_SUCCESS == uriParseUriA(&state, uri_to_test)); +		TEST_ASSERT(URI_TRUE == uriEqualsUriA(&uriOne, &uriTwo)); +		uriFreeUriMembersA(&uriOne); +		uriFreeUriMembersA(&uriTwo); +	} + +	void testEquals() { +		testEqualsHelper("http://host"); +		testEqualsHelper("http://host:123"); +		testEqualsHelper("http://foo:bar@host:123"); +		testEqualsHelper("http://foo:bar@host:123/"); +		testEqualsHelper("http://foo:bar@host:123/path"); +		testEqualsHelper("http://foo:bar@host:123/path?query"); +		testEqualsHelper("http://foo:bar@host:123/path?query#fragment"); + +		testEqualsHelper("path"); +		testEqualsHelper("/path"); +		testEqualsHelper("/path/"); +		testEqualsHelper("//path/"); +		testEqualsHelper("//host"); +		testEqualsHelper("//host:123"); +	} + +	void testCompareRangeHelper(const char * a, const char * b, int expected) { +		UriTextRangeA ra; +		UriTextRangeA rb; + +		if (a) { +			ra.first = a; +			ra.afterLast = a + strlen(a); +		} +		if (b) { +			rb.first = b; +			rb.afterLast = b + strlen(b); +		} + +		const int received = uriCompareRangeA( +				(a == NULL) ? NULL : &ra, +				(b == NULL) ? NULL : &rb); +		if (received != expected) { +			printf("Comparing <%s> to <%s> yields %d, expected %d.\n", +					a, b, received, expected); +		} +		TEST_ASSERT(received == expected); +	} + +	void testRangeComparison() { +		testCompareRangeHelper("", "", 0); +		testCompareRangeHelper("a", "", 1); +		testCompareRangeHelper("", "a", -1); + +		testCompareRangeHelper("a", "a", 0); +		testCompareRangeHelper("a", "b", -1); +		testCompareRangeHelper("b", "a", 1); + +		testCompareRangeHelper("a", "aa", -1); +		testCompareRangeHelper("aa", "a", 1); + +		// Fixed with 0.8.1: +		testCompareRangeHelper(NULL, "a", -1); +		testCompareRangeHelper("a", NULL, 1); +		testCompareRangeHelper(NULL, NULL, 0); +	}  }; @@ -1746,6 +1832,7 @@ int main() {  	Suite suite;  	suite.add(auto_ptr<Suite>(new UriSuite()));  	suite.add(auto_ptr<Suite>(new FourSuite())); +	suite.add(auto_ptr<Suite>(new VersionSuite()));  	TextOutput output(TextOutput::Verbose);  	return suite.run(output, false) ? 0 : 1;  }  | 
