diff options
| author | Jörg Frings-Fürst <debian@jff-webhsoting.net> | 2018-09-09 08:50:22 +0200 | 
|---|---|---|
| committer | Jörg Frings-Fürst <debian@jff-webhsoting.net> | 2018-09-09 08:50:22 +0200 | 
| commit | cc175e2048d967ddb8f3e54587938072150bbc7c (patch) | |
| tree | cc3d2dfdcc29a1a46c6f3cd323edee805c90c437 /test | |
| parent | f10130df30ed342e6064aa60d2a56f5107385d6b (diff) | |
| parent | 88c5a2de8655da11adc5999be9b2dccc6632f07b (diff) | |
Merge branch 'release/debian/0.8.6-1'debian/0.8.6-1
Diffstat (limited to 'test')
| -rw-r--r-- | test/test.cpp | 166 | 
1 files changed, 162 insertions, 4 deletions
| diff --git a/test/test.cpp b/test/test.cpp index 0b1290c..41e3912 100644 --- a/test/test.cpp +++ b/test/test.cpp @@ -23,6 +23,7 @@  #include <cpptest.h>  #include <memory>  #include <stdio.h> +#include <stdlib.h>  #include <wchar.h>  #include "FourSuite.h" @@ -106,7 +107,9 @@ public:  		TEST_ADD(UriSuite::testFreeCrash_Bug20080827)  		TEST_ADD(UriSuite::testParseInvalid_Bug16)  		TEST_ADD(UriSuite::testRangeComparison) +		TEST_ADD(UriSuite::testRangeComparison_RemoveBaseUri_Issue19)  		TEST_ADD(UriSuite::testEquals) +		TEST_ADD(UriSuite::testHostTextTermination_Issue15)  	}  private: @@ -150,7 +153,7 @@ Rule                                | Example | hostSet | absPath | emptySeg  1) URI = scheme ":" hier-part ...   |         |         |         |     1) "//" authority path-abempty   | "s://"  | true    |   false |   false                                      | "s:///" | true    |   false | true -                                    | "s://a" | true    |   false | false +                                    | "s://a" | true    |   false |   false                                      | "s://a/"| true    |   false | true     2) path-absolute                 | "s:/"   |   false | true    |   false     3) path-rootless                 | "s:a"   |   false |   false |   false @@ -1506,8 +1509,12 @@ Rule                                | Example | hostSet | absPath | emptySeg  	}  	void testFilenameUriConversionHelper(const wchar_t * filename, -			const wchar_t * uriString, bool forUnix) { +			const wchar_t * uriString, bool forUnix, +			const wchar_t * expectedUriString = NULL) {  		const int prefixLen = forUnix ? 7 : 8; +		if (! expectedUriString) { +			expectedUriString = uriString; +		}  		// Filename to URI string  		const size_t uriBufferLen = prefixLen + 3 * wcslen(filename) + 1; @@ -1518,9 +1525,9 @@ Rule                                | Example | hostSet | absPath | emptySeg  			uriWindowsFilenameToUriStringW(filename, uriBuffer);  		}  #ifdef HAVE_WPRINTF -		// wprintf(L"1 [%s][%s]\n", uriBuffer, uriString); +		// wprintf(L"1 [%s][%s]\n", uriBuffer, expectedUriString);  #endif -		TEST_ASSERT(!wcscmp(uriBuffer, uriString)); +		TEST_ASSERT(!wcscmp(uriBuffer, expectedUriString));  		delete [] uriBuffer;  		// URI string to filename @@ -1542,9 +1549,12 @@ Rule                                | Example | hostSet | absPath | emptySeg  		const bool FOR_UNIX = true;  		const bool FOR_WINDOWS = false;  		testFilenameUriConversionHelper(L"/bin/bash", L"file:///bin/bash", FOR_UNIX); +		testFilenameUriConversionHelper(L"/bin/bash", L"file:/bin/bash", FOR_UNIX, L"file:///bin/bash");  		testFilenameUriConversionHelper(L"./configure", L"./configure", FOR_UNIX);  		testFilenameUriConversionHelper(L"E:\\Documents and Settings", L"file:///E:/Documents%20and%20Settings", FOR_WINDOWS); +		testFilenameUriConversionHelper(L"c:\\path\\to\\file.txt", L"file:c:/path/to/file.txt", FOR_WINDOWS, L"file:///c:/path/to/file.txt"); +  		testFilenameUriConversionHelper(L".\\Readme.txt", L"./Readme.txt", FOR_WINDOWS);  		testFilenameUriConversionHelper(L"index.htm", L"index.htm", FOR_WINDOWS); @@ -1810,6 +1820,79 @@ Rule                                | Example | hostSet | absPath | emptySeg  		testEqualsHelper("//host:123");  	} +	void testHostTextTermination_Issue15() { +		UriParserStateA state; +		UriUriA uri; +		state.uri = &uri; + +		// Empty host and port +		const char * const emptyHostWithPortUri = "//:123"; +		TEST_ASSERT(URI_SUCCESS == uriParseUriA(&state, emptyHostWithPortUri)); +		TEST_ASSERT(uri.hostText.first == emptyHostWithPortUri + strlen("//")); +		TEST_ASSERT(uri.hostText.afterLast == uri.hostText.first + 0); +		TEST_ASSERT(uri.portText.first == emptyHostWithPortUri +															+ strlen("//:")); +		TEST_ASSERT(uri.portText.afterLast == uri.portText.first +															+ strlen("123")); +		uriFreeUriMembersA(&uri); + +		// Non-empty host and port +		const char * const hostWithPortUri = "//h:123"; +		TEST_ASSERT(URI_SUCCESS == uriParseUriA(&state, hostWithPortUri)); +		TEST_ASSERT(uri.hostText.first == hostWithPortUri + strlen("//")); +		TEST_ASSERT(uri.hostText.afterLast == uri.hostText.first +															+ strlen("h")); +		TEST_ASSERT(uri.portText.first == hostWithPortUri + strlen("//h:")); +		TEST_ASSERT(uri.portText.afterLast == uri.portText.first +															+ strlen("123")); +		uriFreeUriMembersA(&uri); + +		// Empty host, empty user info +		const char * const emptyHostEmptyUserInfoUri = "//@"; +		TEST_ASSERT(URI_SUCCESS == uriParseUriA(&state, +												emptyHostEmptyUserInfoUri)); +		TEST_ASSERT(uri.userInfo.first == emptyHostEmptyUserInfoUri +															+ strlen("//")); +		TEST_ASSERT(uri.userInfo.afterLast == uri.userInfo.first + 0); +		TEST_ASSERT(uri.hostText.first == emptyHostEmptyUserInfoUri +															+ strlen("//@")); +		TEST_ASSERT(uri.hostText.afterLast == uri.hostText.first + 0); +		uriFreeUriMembersA(&uri); + +		// Non-empty host, empty user info +		const char * const hostEmptyUserInfoUri = "//@h"; +		TEST_ASSERT(URI_SUCCESS == uriParseUriA(&state, hostEmptyUserInfoUri)); +		TEST_ASSERT(uri.userInfo.first == hostEmptyUserInfoUri + strlen("//")); +		TEST_ASSERT(uri.userInfo.afterLast == uri.userInfo.first + 0); +		TEST_ASSERT(uri.hostText.first == hostEmptyUserInfoUri +															+ strlen("//@")); +		TEST_ASSERT(uri.hostText.afterLast == uri.hostText.first +															+ strlen("h")); +		uriFreeUriMembersA(&uri); + +		// Empty host, non-empty user info +		const char * const emptyHostWithUserInfoUri = "//:@"; +		TEST_ASSERT(URI_SUCCESS == uriParseUriA(&state, +												emptyHostWithUserInfoUri)); +		TEST_ASSERT(uri.userInfo.first == emptyHostWithUserInfoUri +															+ strlen("//")); +		TEST_ASSERT(uri.userInfo.afterLast == uri.userInfo.first + 1); +		TEST_ASSERT(uri.hostText.first == emptyHostWithUserInfoUri +															+ strlen("//:@")); +		TEST_ASSERT(uri.hostText.afterLast == uri.hostText.first + 0); +		uriFreeUriMembersA(&uri); + +		// Exact case from issue #15 +		const char * const issue15Uri = "//:%aa@"; +		TEST_ASSERT(URI_SUCCESS == uriParseUriA(&state, issue15Uri)); +		TEST_ASSERT(uri.userInfo.first == issue15Uri + strlen("//")); +		TEST_ASSERT(uri.userInfo.afterLast == uri.userInfo.first +															+ strlen(":%aa")); +		TEST_ASSERT(uri.hostText.first == issue15Uri + strlen("//:%aa@")); +		TEST_ASSERT(uri.hostText.afterLast == uri.hostText.first + 0); +		uriFreeUriMembersA(&uri); +	} +  	void testCompareRangeHelper(const char * a, const char * b, int expected, bool avoidNullRange = true) {  		UriTextRangeA ra;  		UriTextRangeA rb; @@ -1865,6 +1948,81 @@ Rule                                | Example | hostSet | absPath | emptySeg  		testCompareRangeHelper("", NULL, 1, AVOID_NULL_RANGE);  		testCompareRangeHelper("", NULL, 1, KEEP_NULL_RANGE);  	} + +	void testRemoveBaseUriHelper(const char * expected, +								const char * absSourceStr, +								const char * absBaseStr) { +		UriParserStateA state; +		UriUriA absSource; +		UriUriA absBase; +		UriUriA dest; + +		state.uri = &absSource; +		TEST_ASSERT(uriParseUriA(&state, absSourceStr) == URI_SUCCESS); + +		state.uri = &absBase; +		TEST_ASSERT(uriParseUriA(&state, absBaseStr) == URI_SUCCESS); + +		TEST_ASSERT(uriRemoveBaseUriA(&dest, &absSource, &absBase, URI_FALSE) +				== URI_SUCCESS); + +		int size = 0; +		TEST_ASSERT(uriToStringCharsRequiredA(&dest, &size) == URI_SUCCESS); +		char * const buffer = (char *)malloc(size + 1); +		TEST_ASSERT(buffer); +		TEST_ASSERT(uriToStringA(buffer, &dest, size + 1, &size) +															== URI_SUCCESS); +		if (strcmp(buffer, expected)) { +			printf("Expected \"%s\" but got \"%s\"\n", expected, buffer); +			TEST_ASSERT(0); +		} +		free(buffer); +	} + +	void testRangeComparison_RemoveBaseUri_Issue19() { +		// scheme +		testRemoveBaseUriHelper("scheme://host/source", +								"scheme://host/source", +								"schemelonger://host/base"); +		testRemoveBaseUriHelper("schemelonger://host/source", +								"schemelonger://host/source", +								"scheme://host/base"); + +		// hostText +		testRemoveBaseUriHelper("//host/source", +								"http://host/source", +								"http://hostlonger/base"); +		testRemoveBaseUriHelper("//hostlonger/source", +								"http://hostlonger/source", +								"http://host/base"); + +		// hostData.ipFuture +		testRemoveBaseUriHelper("//[v7.host]/source", +								"http://[v7.host]/source", +								"http://[v7.hostlonger]/base"); +		testRemoveBaseUriHelper("//[v7.hostlonger]/source", +								"http://[v7.hostlonger]/source", +								"http://host/base"); + +		// path +		testRemoveBaseUriHelper("path1", +								"http://host/path1", +								"http://host/path111"); +		testRemoveBaseUriHelper("../path1/path2", +								"http://host/path1/path2", +								"http://host/path111/path222"); +		testRemoveBaseUriHelper("path111", +								"http://host/path111", +								"http://host/path1"); +		testRemoveBaseUriHelper("../path111/path222", +								"http://host/path111/path222", +								"http://host/path1/path2"); + +		// Exact issue #19 +		testRemoveBaseUriHelper("//example/x/abc", +								"http://example/x/abc", +								"http://example2/x/y/z"); +	}  }; | 
