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
|
# frozen_string_literal: true
require_relative 'test_helper'
context 'Helpers' do
context 'URI Encoding' do
test 'should URI encode non-word characters generally' do
given = ' !*/%&?\\='
expect = '+%21%2A%2F%25%26%3F%5C%3D'
assert_equal expect, (Asciidoctor::Helpers.encode_uri_component given)
end
test 'should not URI encode select non-word characters' do
# NOTE Ruby 2.5 and up stopped encoding ~
given = '-.'
expect = given
assert_equal expect, (Asciidoctor::Helpers.encode_uri_component given)
end
end
context 'URIs and Paths' do
test 'rootname should return file name without extension' do
assert_equal 'main', Asciidoctor::Helpers.rootname('main.adoc')
assert_equal 'docs/main', Asciidoctor::Helpers.rootname('docs/main.adoc')
end
test 'rootname should file name if it has no extension' do
assert_equal 'main', Asciidoctor::Helpers.rootname('main')
assert_equal 'docs/main', Asciidoctor::Helpers.rootname('docs/main')
end
test 'rootname should ignore dot not in last segment' do
assert_equal 'include.d/main', Asciidoctor::Helpers.rootname('include.d/main')
assert_equal 'include.d/main', Asciidoctor::Helpers.rootname('include.d/main.adoc')
end
test 'extname? should return whether path contains an extname' do
assert Asciidoctor::Helpers.extname?('document.adoc')
assert Asciidoctor::Helpers.extname?('path/to/document.adoc')
assert_nil Asciidoctor::Helpers.extname?('basename')
refute Asciidoctor::Helpers.extname?('include.d/basename')
end
test 'UriSniffRx should detect URIs' do
assert Asciidoctor::UriSniffRx =~ 'http://example.com'
assert Asciidoctor::UriSniffRx =~ 'https://example.com'
assert Asciidoctor::UriSniffRx =~ 'data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs='
end
test 'UriSniffRx should not detect an absolute Windows path as a URI' do
assert Asciidoctor::UriSniffRx !~ 'c:/sample.adoc'
assert Asciidoctor::UriSniffRx !~ 'c:\\sample.adoc'
end
test 'uriish? should not detect a classloader path as a URI on JRuby' do
input = 'uri:classloader:/sample.png'
assert Asciidoctor::UriSniffRx =~ input
if jruby?
refute Asciidoctor::Helpers.uriish? input
else
assert Asciidoctor::Helpers.uriish? input
end
end
test 'UriSniffRx should not detect URI that does not start on first line' do
assert Asciidoctor::UriSniffRx !~ %(text\nhttps://example.org)
end
end
context 'Type Resolution' do
test 'should get class for top-level class name' do
clazz = Asciidoctor::Helpers.class_for_name 'String'
refute_nil clazz
assert_equal String, clazz
end
test 'should get class for class name in module' do
clazz = Asciidoctor::Helpers.class_for_name 'Asciidoctor::Document'
refute_nil clazz
assert_equal Asciidoctor::Document, clazz
end
test 'should get class for class name resolved from root' do
clazz = Asciidoctor::Helpers.class_for_name '::Asciidoctor::Document'
refute_nil clazz
assert_equal Asciidoctor::Document, clazz
end
test 'should raise exception if cannot find class for name' do
begin
Asciidoctor::Helpers.class_for_name 'InvalidModule::InvalidClass'
flunk 'Expecting RuntimeError to be raised'
rescue NameError => e
assert_match %r/^Could not resolve class for name: InvalidModule::InvalidClass$/, e.message
end
end
test 'should raise exception if constant name is invalid' do
begin
Asciidoctor::Helpers.class_for_name 'foobar'
flunk 'Expecting RuntimeError to be raised'
rescue NameError => e
assert_match %r/^Could not resolve class for name: foobar$/, e.message
end
end
test 'should raise exception if class not found in scope' do
begin
Asciidoctor::Helpers.class_for_name 'Asciidoctor::Extensions::String'
flunk 'Expecting RuntimeError to be raised'
rescue NameError => e
assert_match %r/^Could not resolve class for name: Asciidoctor::Extensions::String$/, e.message
end
end
test 'should raise exception if name resolves to module' do
begin
Asciidoctor::Helpers.class_for_name 'Asciidoctor::Extensions'
flunk 'Expecting RuntimeError to be raised'
rescue NameError => e
assert_match %r/^Could not resolve class for name: Asciidoctor::Extensions$/, e.message
end
end
test 'should resolve class if class is given' do
clazz = Asciidoctor::Helpers.resolve_class Asciidoctor::Document
refute_nil clazz
assert_equal Asciidoctor::Document, clazz
end
test 'should resolve class if class from string' do
clazz = Asciidoctor::Helpers.resolve_class 'Asciidoctor::Document'
refute_nil clazz
assert_equal Asciidoctor::Document, clazz
end
test 'should not resolve class if not in scope' do
begin
Asciidoctor::Helpers.resolve_class 'Asciidoctor::Extensions::String'
flunk 'Expecting RuntimeError to be raised'
rescue NameError => e
assert_match %r/^Could not resolve class for name: Asciidoctor::Extensions::String$/, e.message
end
end
end
end
|