File: test_uri_utils.rb

package info (click to toggle)
ruby-sprockets 4.2.1-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 2,964 kB
  • sloc: ruby: 13,014; javascript: 157; makefile: 4
file content (191 lines) | stat: -rw-r--r-- 9,146 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
# frozen_string_literal: true
require 'minitest/autorun'
require 'sprockets/uri_utils'

class TestURIUtils < Minitest::Test
  include Sprockets::URIUtils

  DOSISH = File::ALT_SEPARATOR != nil
  DOSISH_DRIVE_LETTER = File.dirname("A:") == "A:."
  DOSISH_UNC = File.dirname("//") == "//"

  def test_split_uri
    parts = split_uri("https://josh:Passw0rd1@github.com:433/sstephenson/sprockets/issues?author=josh#issue1")
    assert_equal ["https", "josh:Passw0rd1", "github.com", "433", nil, "/sstephenson/sprockets/issues", nil, "author=josh", "issue1"], parts
  end

  def test_join_uri
    assert_equal "https://josh:Passw0rd1@github.com:433/sstephenson/sprockets/issues?author=josh#issue1",
      join_uri("https", "josh:Passw0rd1", "github.com", "433", nil, "/sstephenson/sprockets/issues", nil, "author=josh", "issue1")
  end

  def test_inverse_uri_functions
    [
      "http://github.com",
      "http://github.com:8080",
      "https://github.com/",
      "https://github.com/home",
      "https://github.com#logo",
      "https://josh:Passw0rd1@github.com:433/sstephenson/sprockets/issues?author=josh#issue1",
      "urn:md5:68b329da9893e34099c7d8ad5cb9c940",
    ].each do |uri|
      assert parts = split_uri(uri)
      assert_equal uri, join_uri(*parts)
    end
  end

  def test_split_file_uri
    parts = split_file_uri("file://localhost/etc/fstab")
    assert_equal ['file', 'localhost', '/etc/fstab', nil], parts

    parts = split_file_uri("file:///etc/fstab")
    assert_equal ['file', '', '/etc/fstab', nil], parts

    parts = split_file_uri("file:///usr/local/bin/ruby%20on%20rails")
    assert_equal ['file', '', '/usr/local/bin/ruby on rails', nil], parts

    parts = split_file_uri("file:///usr/local/var/github/app/assets/javascripts/application.js")
    assert_equal ['file', '', '/usr/local/var/github/app/assets/javascripts/application.js', nil], parts

    if DOSISH
      parts = split_file_uri("file:///C:/Documents%20and%20Settings/davris/FileSchemeURIs.doc")
      assert_equal ['file', '', 'C:/Documents and Settings/davris/FileSchemeURIs.doc', nil], parts

      parts = split_file_uri("file:///D:/Program%20Files/Viewer/startup.htm")
      assert_equal ['file', '', 'D:/Program Files/Viewer/startup.htm', nil], parts

      parts = split_file_uri("file:///C:/Program%20Files/Music/Web%20Sys/main.html?REQUEST=RADIO")
      assert_equal ['file', '', 'C:/Program Files/Music/Web Sys/main.html', 'REQUEST=RADIO'], parts
    end
  end

  def test_join_uri_path
    assert_equal "file://localhost/etc/fstab",
      join_file_uri('file', 'localhost', '/etc/fstab', nil)

    assert_equal "file:///etc/fstab",
      join_file_uri('file', nil, '/etc/fstab', nil)

    assert_equal "file:///usr/local/bin/ruby%20on%20rails",
      join_file_uri('file', nil, '/usr/local/bin/ruby on rails', nil)
  end

  def test_inverse_file_uri_functions
    uris = [
      "file://localhost/etc/fstab",
      "file:///etc/fstab",
      "file:///usr/local/bin/ruby%20on%20rails",
      "file:///usr/local/var/github/app/assets/javascripts/application.js",
      "file:///usr/local/var/github/app/assets/javascripts/application.coffee?type=application/javascript"
    ]
    if DOSISH
      uris.concat([
          "file:///C:/Documents%20and%20Settings/davris/FileSchemeURIs.doc",
          "file:///D:/Program%20Files/Viewer/startup.htm"
        ])
    end
    uris.each do |uri|
      assert parts = split_file_uri(uri)
      assert_equal uri, join_file_uri(*parts)
    end
  end

  def test_validate
    assert valid_asset_uri?("file:///usr/local/var/github/app/assets/javascripts/application.js")
    if DOSISH
      assert valid_asset_uri?("file:///C:/Users/IEUser/Documents/github/app/assets/javascripts/application.js")
    end
    refute valid_asset_uri?("http:///usr/local/var/github/app/assets/javascripts/application.js")
    refute valid_asset_uri?("/usr/local/var/github/app/assets/javascripts/application.js")
  end

  def test_validate_with_invalid_uri_error
    refute valid_asset_uri?("file:///[]")
  end

  def test_parse_file_paths
    assert_equal ["/usr/local/var/github/app/assets/javascripts/application.js", {}],
      parse_asset_uri("file:///usr/local/var/github/app/assets/javascripts/application.js")
    assert_equal ["/usr/local/var/github/app/assets/javascripts/foo bar.js", {}],
      parse_asset_uri("file:///usr/local/var/github/app/assets/javascripts/foo%20bar.js")
    if DOSISH
      assert_equal ["C:/Users/IEUser/Documents/github/app/assets/javascripts/application.js", {}],
        parse_asset_uri("file:///C:/Users/IEUser/Documents/github/app/assets/javascripts/application.js")
    end
  end

  def test_parse_query_params
    assert_equal ["/usr/local/var/github/app/assets/javascripts/application.coffee", {type: 'application/javascript'}],
      parse_asset_uri("file:///usr/local/var/github/app/assets/javascripts/application.coffee?type=application/javascript")
    assert_equal ["/usr/local/var/github/app/assets/stylesheets/users.css", {type: 'text/css', flag: true}],
      parse_asset_uri("file:///usr/local/var/github/app/assets/stylesheets/users.css?type=text/css&flag")
    assert_equal ["/usr/local/var/github/app/assets/views/users.html", {type: 'text/html; charset=utf-8'}],
      parse_asset_uri("file:///usr/local/var/github/app/assets/views/users.html?type=text/html;%20charset=utf-8")
  end

  def test_asset_uri_raise_erorr_when_invalid_uri_scheme
    assert_raises URI::InvalidURIError do
      parse_asset_uri("http:///usr/local/var/github/app/assets/javascripts/application.js")
    end
  end

  def test_build_file_path
    assert_equal "file:///usr/local/var/github/app/assets/javascripts/application.js",
      build_asset_uri("/usr/local/var/github/app/assets/javascripts/application.js")
    assert_equal "file:///usr/local/var/github/app/assets/javascripts/foo%20bar.js",
      build_asset_uri("/usr/local/var/github/app/assets/javascripts/foo bar.js")
    if DOSISH
      assert_equal "file:///C:/Users/IEUser/Documents/github/app/assets/javascripts/application.js",
        build_asset_uri("C:/Users/IEUser/Documents/github/app/assets/javascripts/application.js")
    end
  end

  def test_build_query_params
    assert_equal "file:///usr/local/var/github/app/assets/javascripts/application.coffee?type=application/javascript",
      build_asset_uri("/usr/local/var/github/app/assets/javascripts/application.coffee", type: 'application/javascript')
    assert_equal "file:///usr/local/var/github/app/assets/images/logo.svg?type=image/svg+xml",
      build_asset_uri("/usr/local/var/github/app/assets/images/logo.svg", type: 'image/svg+xml')
    assert_equal "file:///usr/local/var/github/app/assets/stylesheets/users.css?type=text/css&flag",
      build_asset_uri("/usr/local/var/github/app/assets/stylesheets/users.css", type: 'text/css', flag: true)
    assert_equal "file:///usr/local/var/github/app/assets/stylesheets/users.css?type=text/css",
      build_asset_uri("/usr/local/var/github/app/assets/stylesheets/users.css", type: 'text/css', flag: false)
    assert_equal "file:///usr/local/var/github/app/assets/stylesheets/users.css?type=css",
      build_asset_uri("/usr/local/var/github/app/assets/stylesheets/users.css", type: :css)
    assert_equal "file:///usr/local/var/github/app/assets/views/users.html?type=text/html;%20charset=utf-8",
      build_asset_uri("/usr/local/var/github/app/assets/views/users.html", type: 'text/html; charset=utf-8')
  end

  def test_raise_error_when_invalid_param_value
    assert_raises TypeError do
      build_asset_uri("/usr/local/var/github/app/assets/images/logo.png", encodings: ['gzip', 'deflate'])
    end
  end

  def test_parse_file_digest_uri
    assert_equal "/usr/local/var/github/app/assets/javascripts/application.js",
      parse_file_digest_uri("file-digest:///usr/local/var/github/app/assets/javascripts/application.js")
    assert_equal "/usr/local/var/github/app/assets/javascripts/foo bar.js",
      parse_file_digest_uri("file-digest:///usr/local/var/github/app/assets/javascripts/foo%20bar.js")
    if DOSISH
      assert_equal "C:/Users/IEUser/Documents/github/app/assets/javascripts/application.js",
        parse_file_digest_uri("file-digest:///C:/Users/IEUser/Documents/github/app/assets/javascripts/application.js")
    end
  end

  def test_build_file_digest_uri
    assert_equal "file-digest:///usr/local/var/github/app/assets/javascripts/application.js",
      build_file_digest_uri("/usr/local/var/github/app/assets/javascripts/application.js")
    assert_equal "file-digest:///usr/local/var/github/app/assets/javascripts/foo%20bar.js",
      build_file_digest_uri("/usr/local/var/github/app/assets/javascripts/foo bar.js")
    if DOSISH
      assert_equal "file-digest:///C:/Users/IEUser/Documents/github/app/assets/javascripts/application.js",
        build_file_digest_uri("C:/Users/IEUser/Documents/github/app/assets/javascripts/application.js")
    end
  end

  def test_file_digest_raise_erorr_when_invalid_uri_scheme
    assert_raises URI::InvalidURIError do
      parse_file_digest_uri("http:///usr/local/var/github/app/assets/javascripts/application.js")
    end
  end
end