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
|
# encoding: UTF-8
unless defined? ASCIIDOCTOR_PROJECT_DIR
$: << File.dirname(__FILE__); $:.uniq!
require 'test_helper'
end
require 'asciidoctor/cli/options'
context 'Options' do
test 'should return error code 0 when help flag is present' do
redirect_streams do |stdout, stderr|
exitval = Asciidoctor::Cli::Options.parse!(%w(-h))
assert_equal 0, exitval
assert_match(/^Usage:/, stdout.string)
end
end
test 'should return error code 1 when invalid option present' do
redirect_streams do |stdout, stderr|
exitval = Asciidoctor::Cli::Options.parse!(%w(--foobar))
assert_equal 1, exitval
assert_equal 'asciidoctor: invalid option: --foobar', stderr.string.chomp
end
end
test 'should return error code 1 when option has invalid argument' do
redirect_streams do |stdout, stderr|
exitval = Asciidoctor::Cli::Options.parse!(%w(-d chapter input.ad)) # had to change for #320
assert_equal 1, exitval
assert_equal 'asciidoctor: invalid argument: -d chapter', stderr.string.chomp
end
end
test 'should return error code 1 when option is missing required argument' do
redirect_streams do |stdout, stderr|
exitval = Asciidoctor::Cli::Options.parse!(%w(-b))
assert_equal 1, exitval
assert_equal 'asciidoctor: option missing argument: -b', stderr.string.chomp
end
end
test 'should emit warning when unparsed options remain' do
redirect_streams do |stdout, stderr|
options = Asciidoctor::Cli::Options.parse!(%w(-b docbook - -))
assert options.is_a? Hash
assert_match(/asciidoctor: WARNING: extra arguments .*/, stderr.string.chomp)
end
end
test 'basic argument assignment' do
options = Asciidoctor::Cli::Options.parse!(%w(-v -s -d book test/fixtures/sample.asciidoc))
assert_equal 2, options[:verbose]
assert_equal false, options[:header_footer]
assert_equal 'book', options[:attributes]['doctype']
assert_equal 1, options[:input_files].size
assert_equal 'test/fixtures/sample.asciidoc', options[:input_files][0]
end
test 'standard attribute assignment' do
options = Asciidoctor::Cli::Options.parse!(%w(-a imagesdir=images,icons test/fixtures/sample.asciidoc))
assert_equal 'images', options[:attributes]['imagesdir']
assert_equal '', options[:attributes]['icons']
end
test 'multiple attribute arguments' do
options = Asciidoctor::Cli::Options.parse!(%w(-a imagesdir=images -a icons test/fixtures/sample.asciidoc))
assert_equal 'images', options[:attributes]['imagesdir']
assert_equal '', options[:attributes]['icons']
end
test 'should only split attribute key/value pairs on first equal sign' do
options = Asciidoctor::Cli::Options.parse!(%w(-a name=value=value test/fixtures/sample.asciidoc))
assert_equal 'value=value', options[:attributes]['name']
end
test 'should allow any backend to be specified' do
options = Asciidoctor::Cli::Options.parse!(%w(-b my_custom_backend test/fixtures/sample.asciidoc))
assert_equal 'my_custom_backend', options[:attributes]['backend']
end
test 'article doctype assignment' do
options = Asciidoctor::Cli::Options.parse!(%w(-d article test/fixtures/sample.asciidoc))
assert_equal 'article', options[:attributes]['doctype']
end
test 'book doctype assignment' do
options = Asciidoctor::Cli::Options.parse!(%w(-d book test/fixtures/sample.asciidoc))
assert_equal 'book', options[:attributes]['doctype']
end
test 'inline doctype assignment' do
options = Asciidoctor::Cli::Options.parse!(%w(-d inline test/fixtures/sample.asciidoc))
assert_equal 'inline', options[:attributes]['doctype']
end
test 'template engine assignment' do
options = Asciidoctor::Cli::Options.parse!(%w(-E haml test/fixtures/sample.asciidoc))
assert_equal 'haml', options[:template_engine]
end
test 'template directory assignment' do
options = Asciidoctor::Cli::Options.parse!(%w(-T custom-backend test/fixtures/sample.asciidoc))
assert_equal ['custom-backend'], options[:template_dirs]
end
test 'multiple template directory assignments' do
options = Asciidoctor::Cli::Options.parse!(%w(-T custom-backend -T custom-backend-hacks test/fixtures/sample.asciidoc))
assert_equal ['custom-backend', 'custom-backend-hacks'], options[:template_dirs]
end
test '-r option requires specified libraries' do
options = Asciidoctor::Cli::Options.new
redirect_streams do |stdout, stderr|
exitval = options.parse! %w(-r foobar -r foobaz test/fixtures/sample.asciidoc)
assert_match(%(asciidoctor: FAILED: 'foobar' could not be loaded), stderr.string)
assert_equal 1, exitval
assert_equal ['foobar', 'foobaz'], options[:requires]
end
end
test '-I option appends directories to $LOAD_PATH' do
options = Asciidoctor::Cli::Options.new
old_load_path = $LOAD_PATH.dup
begin
exitval = options.parse! %w(-I foobar -I foobaz test/fixtures/sample.asciidoc)
assert_not_equal 1, exitval
assert_equal old_load_path.size + 2, $LOAD_PATH.size
assert_equal File.expand_path('foobar'), $LOAD_PATH[0]
assert_equal File.expand_path('foobaz'), $LOAD_PATH[1]
assert_equal ['foobar', 'foobaz'], options[:load_paths]
ensure
($LOAD_PATH.size - old_load_path.size).times { $LOAD_PATH.shift }
end
end
test 'should set verbose to 2 when -v flag is specified' do
options = Asciidoctor::Cli::Options.parse!(%w(-v test/fixtures/sample.asciidoc))
assert_equal 2, options[:verbose]
end
test 'should set verbose to 0 when -q flag is specified' do
options = Asciidoctor::Cli::Options.parse!(%w(-q test/fixtures/sample.asciidoc))
assert_equal 0, options[:verbose]
end
test 'should set verbose to 2 when -v flag is specified after -q flag' do
options = Asciidoctor::Cli::Options.parse!(%w(-q -v test/fixtures/sample.asciidoc))
assert_equal 2, options[:verbose]
end
test 'should set verbose to 0 when -q flag is specified after -v flag' do
options = Asciidoctor::Cli::Options.parse!(%w(-v -q test/fixtures/sample.asciidoc))
assert_equal 0, options[:verbose]
end
end
|