...

Source file src/github.com/ory/x/urlx/parse_test.go

Documentation: github.com/ory/x/urlx

     1  package urlx
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/stretchr/testify/assert"
     7  )
     8  
     9  func TestParseURL(t *testing.T) {
    10  	type testData struct {
    11  		urlStr       string
    12  		expectedPath string
    13  		expectedStr  string
    14  	}
    15  	var testURLs = []testData{
    16  		{"File:///home/test/file1.txt", "/home/test/file1.txt", "file:///home/test/file1.txt"},
    17  		{"fIle:/home/test/file2.txt", "/home/test/file2.txt", "file:///home/test/file2.txt"},
    18  		{"fiLe:///../test/update/file3.txt", "/../test/update/file3.txt", "file:///../test/update/file3.txt"},
    19  		{"filE://../test/update/file4.txt", "../test/update/file4.txt", "../test/update/file4.txt"},
    20  		{"file://C:/users/test/file5.txt", "/C:/users/test/file5.txt", "file:///C:/users/test/file5.txt"},  // We expect a initial / in the path because this is a Windows absolute path
    21  		{"file:///C:/users/test/file6.txt", "/C:/users/test/file6.txt", "file:///C:/users/test/file6.txt"}, // --//--
    22  		{"file://file7.txt", "file7.txt", "file7.txt"},
    23  		{"file://path/file8.txt", "path/file8.txt", "path/file8.txt"},
    24  		{"file://C:\\Users\\RUNNER~1\\AppData\\Local\\Temp\\9ccf9f68-121c-451a-8a73-2aa360925b5a386398343/access-rules.json", "/C:\\Users\\RUNNER~1\\AppData\\Local\\Temp\\9ccf9f68-121c-451a-8a73-2aa360925b5a386398343/access-rules.json", "file:///C:%5CUsers%5CRUNNER~1%5CAppData%5CLocal%5CTemp%5C9ccf9f68-121c-451a-8a73-2aa360925b5a386398343/access-rules.json"},
    25  		{"file:///C:\\Users\\RUNNER~1\\AppData\\Local\\Temp\\9ccf9f68-121c-451a-8a73-2aa360925b5a386398343/access-rules.json", "/C:\\Users\\RUNNER~1\\AppData\\Local\\Temp\\9ccf9f68-121c-451a-8a73-2aa360925b5a386398343/access-rules.json", "file:///C:%5CUsers%5CRUNNER~1%5CAppData%5CLocal%5CTemp%5C9ccf9f68-121c-451a-8a73-2aa360925b5a386398343/access-rules.json"},
    26  		{"file://C:\\Users\\path with space\\file.txt", "/C:\\Users\\path with space\\file.txt", "file:///C:%5CUsers%5Cpath%20with%20space%5Cfile.txt"},
    27  		{"file8b.txt", "file8b.txt", "file8b.txt"},
    28  		{"../file9.txt", "../file9.txt", "../file9.txt"},
    29  		{"./file9b.txt", "./file9b.txt", "./file9b.txt"},
    30  		{"file://./file9c.txt", "./file9c.txt", "./file9c.txt"},
    31  		{"file://./folder/.././file9d.txt", "./folder/.././file9d.txt", "./folder/.././file9d.txt"},
    32  		{"..\\file10.txt", "..\\file10.txt", "..%5Cfile10.txt"},
    33  		{"C:\\file11.txt", "/C:\\file11.txt", "file:///C:%5Cfile11.txt"},
    34  		{"\\\\hostname\\share\\file12.txt", "/share/file12.txt", "file://hostname/share/file12.txt"},
    35  		{"\\\\", "/", "file:///"},
    36  		{"\\\\hostname", "/", "file://hostname/"},
    37  		{"\\\\hostname\\", "/", "file://hostname/"},
    38  		{"file:///home/test/file 13.txt", "/home/test/file 13.txt", "file:///home/test/file%2013.txt"},
    39  		{"file:///home/test/file%2014.txt", "/home/test/file 14.txt", "file:///home/test/file%2014.txt"},
    40  		{"http://server:80/test/file%2015.txt", "/test/file 15.txt", "http://server:80/test/file%2015.txt"},
    41  		{"file:///dir/file\\ with backslash", "/dir/file\\ with backslash", "file:///dir/file%5C%20with%20backslash"},
    42  		{"file://dir/file\\ with backslash", "dir/file\\ with backslash", "dir/file%5C%20with%20backslash"},
    43  		{"file:///dir/file with windows path forbidden chars \\<>:\"|%3F*", "/dir/file with windows path forbidden chars \\<>:\"|?*", "file:///dir/file%20with%20windows%20path%20forbidden%20chars%20%5C%3C%3E:%22%7C%3F%2A"},
    44  		{"file://dir/file with windows path forbidden chars \\<>:\"|%3F*", "dir/file with windows path forbidden chars \\<>:\"|?*", "dir/file%20with%20windows%20path%20forbidden%20chars%20%5C%3C%3E:%22%7C%3F%2A"},
    45  		{"file:///path/file?query=1", "/path/file", "file:///path/file?query=1"},
    46  		{"http://host:80/path/file?query=1", "/path/file", "http://host:80/path/file?query=1"},
    47  		{"file://////C:/file.txt", "////C:/file.txt", "file://////C:/file.txt"},
    48  		{"file://////C:\\file.txt", "////C:\\file.txt", "file://////C:%5Cfile.txt"},
    49  	}
    50  
    51  	for _, td := range testURLs {
    52  		u, err := Parse(td.urlStr)
    53  		assert.NoError(t, err)
    54  		if err != nil {
    55  			continue
    56  		}
    57  		assert.Equal(t, td.expectedPath, u.Path, "expected path for %s", td.urlStr)
    58  		assert.Equal(t, td.expectedStr, u.String(), "expected URL string for %s", td.urlStr)
    59  	}
    60  	_, err := Parse("://")
    61  	assert.Error(t, err)
    62  	_, err = Parse("://host:80/file")
    63  	assert.Error(t, err)
    64  	_, err = Parse(":///path/file")
    65  	assert.Error(t, err)
    66  }
    67  
    68  func TestTrimPrefixIC(t *testing.T) {
    69  	for _, td := range []struct {
    70  		s        string
    71  		prefix   string
    72  		expected string
    73  	}{
    74  		{"file://test", "file://", "test"},
    75  		{"FILE://test", "file://", "test"},
    76  		{"FiLe://test", "file://", "test"},
    77  		{"http://test", "file://", "http://test"},
    78  		{"files://test", "file://", "files://test"},
    79  	} {
    80  		assert.Equal(t, td.expected, trimPrefixIC(td.s, td.prefix))
    81  	}
    82  }
    83  

View as plain text