yury-twine 0.9.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +2 -0
  3. data/LICENSE +30 -0
  4. data/README.md +230 -0
  5. data/bin/twine +7 -0
  6. data/lib/twine.rb +36 -0
  7. data/lib/twine/cli.rb +200 -0
  8. data/lib/twine/encoding.rb +22 -0
  9. data/lib/twine/formatters.rb +20 -0
  10. data/lib/twine/formatters/abstract.rb +187 -0
  11. data/lib/twine/formatters/android.rb +254 -0
  12. data/lib/twine/formatters/apple.rb +328 -0
  13. data/lib/twine/output_processor.rb +57 -0
  14. data/lib/twine/placeholders.rb +54 -0
  15. data/lib/twine/plugin.rb +62 -0
  16. data/lib/twine/runner.rb +332 -0
  17. data/lib/twine/twine_file.rb +266 -0
  18. data/lib/twine/version.rb +3 -0
  19. data/test/command_test.rb +14 -0
  20. data/test/fixtures/consume_loc_drop.zip +0 -0
  21. data/test/fixtures/enc_utf16be.dummy +0 -0
  22. data/test/fixtures/enc_utf16be_bom.dummy +0 -0
  23. data/test/fixtures/enc_utf16le.dummy +0 -0
  24. data/test/fixtures/enc_utf16le_bom.dummy +0 -0
  25. data/test/fixtures/enc_utf8.dummy +2 -0
  26. data/test/fixtures/formatter_android.xml +15 -0
  27. data/test/fixtures/formatter_apple.strings +20 -0
  28. data/test/fixtures/formatter_django.po +30 -0
  29. data/test/fixtures/formatter_flash.properties +15 -0
  30. data/test/fixtures/formatter_gettext.po +26 -0
  31. data/test/fixtures/formatter_jquery.json +7 -0
  32. data/test/fixtures/formatter_tizen.xml +15 -0
  33. data/test/fixtures/gettext_multiline.po +10 -0
  34. data/test/fixtures/twine_accent_values.txt +13 -0
  35. data/test/test_abstract_formatter.rb +165 -0
  36. data/test/test_cli.rb +304 -0
  37. data/test/test_consume_loc_drop.rb +27 -0
  38. data/test/test_consume_localization_file.rb +119 -0
  39. data/test/test_formatters.rb +363 -0
  40. data/test/test_generate_all_localization_files.rb +102 -0
  41. data/test/test_generate_loc_drop.rb +80 -0
  42. data/test/test_generate_localization_file.rb +91 -0
  43. data/test/test_output_processor.rb +85 -0
  44. data/test/test_placeholders.rb +84 -0
  45. data/test/test_twine_definition.rb +111 -0
  46. data/test/test_twine_file.rb +58 -0
  47. data/test/test_validate_twine_file.rb +61 -0
  48. data/test/twine_file_dsl.rb +46 -0
  49. data/test/twine_test.rb +48 -0
  50. metadata +179 -0
@@ -0,0 +1,3 @@
1
+ module Twine
2
+ VERSION = '0.9.1'
3
+ end
@@ -0,0 +1,14 @@
1
+ require 'twine_test'
2
+
3
+ class CommandTest < TwineTest
4
+ def prepare_mock_formatter(formatter_class)
5
+ twine_file = Twine::TwineFile.new
6
+ twine_file.language_codes.concat KNOWN_LANGUAGES
7
+
8
+ formatter = formatter_class.new
9
+ formatter.twine_file = twine_file
10
+ Twine::Formatters.formatters.clear
11
+ Twine::Formatters.formatters << formatter
12
+ formatter
13
+ end
14
+ end
@@ -0,0 +1,2 @@
1
+ Üß`
2
+ da
@@ -0,0 +1,15 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Android Strings File -->
3
+ <!-- Generated by Twine <%= Twine::VERSION %> -->
4
+ <!-- Language: en -->
5
+ <resources>
6
+ <!-- SECTION: Section 1 -->
7
+ <!-- comment key1 -->
8
+ <string name="key1">value1-english</string>
9
+ <string name="key2">value2-english</string>
10
+
11
+ <!-- SECTION: Section 2 -->
12
+ <string name="key3">value3-english</string>
13
+ <!-- comment key4 -->
14
+ <string name="key4">value4-english</string>
15
+ </resources>
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Apple Strings File
3
+ * Generated by Twine <%= Twine::VERSION %>
4
+ * Language: en
5
+ */
6
+
7
+ /********** Section 1 **********/
8
+
9
+ /* comment key1 */
10
+ "key1" = "value1-english";
11
+
12
+ "key2" = "value2-english";
13
+
14
+
15
+ /********** Section 2 **********/
16
+
17
+ "key3" = "value3-english";
18
+
19
+ /* comment key4 */
20
+ "key4" = "value4-english";
@@ -0,0 +1,30 @@
1
+ ##
2
+ # Django Strings File
3
+ # Generated by Twine <%= Twine::VERSION %>
4
+ # Language: en
5
+ msgid ""
6
+ msgstr ""
7
+ "Content-Type: text/plain; charset=UTF-8\n"
8
+
9
+ #--------- Section 1 ---------#
10
+
11
+ #. comment key1
12
+ # base translation: "value1-english"
13
+ msgid "key1"
14
+ msgstr "value1-english"
15
+
16
+ # base translation: "value2-english"
17
+ msgid "key2"
18
+ msgstr "value2-english"
19
+
20
+
21
+ #--------- Section 2 ---------#
22
+
23
+ # base translation: "value3-english"
24
+ msgid "key3"
25
+ msgstr "value3-english"
26
+
27
+ #. comment key4
28
+ # base translation: "value4-english"
29
+ msgid "key4"
30
+ msgstr "value4-english"
@@ -0,0 +1,15 @@
1
+ ## Flash Strings File
2
+ ## Generated by Twine <%= Twine::VERSION %>
3
+ ## Language: en
4
+
5
+ ## Section 1 ##
6
+
7
+ # comment key1
8
+ key1=value1-english
9
+ key2=value2-english
10
+
11
+ ## Section 2 ##
12
+
13
+ key3=value3-english
14
+ # comment key4
15
+ key4=value4-english
@@ -0,0 +1,26 @@
1
+ msgid ""
2
+ msgstr ""
3
+ "Language: en\n"
4
+ "X-Generator: Twine <%= Twine::VERSION %>\n"
5
+
6
+
7
+ # SECTION: Section 1
8
+ #. "comment key1"
9
+ msgctxt "key1"
10
+ msgid "value1-english"
11
+ msgstr "value1-english"
12
+
13
+ msgctxt "key2"
14
+ msgid "value2-english"
15
+ msgstr "value2-english"
16
+
17
+
18
+ # SECTION: Section 2
19
+ msgctxt "key3"
20
+ msgid "value3-english"
21
+ msgstr "value3-english"
22
+
23
+ #. "comment key4"
24
+ msgctxt "key4"
25
+ msgid "value4-english"
26
+ msgstr "value4-english"
@@ -0,0 +1,7 @@
1
+ {
2
+ "key1":"value1-english",
3
+ "key2":"value2-english",
4
+
5
+ "key3":"value3-english",
6
+ "key4":"value4-english"
7
+ }
@@ -0,0 +1,15 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Tizen Strings File -->
3
+ <!-- Generated by Twine <%= Twine::VERSION %> -->
4
+ <!-- Language: en -->
5
+ <string_table Bversion="2.0.0.201311071819" Dversion="20120315">
6
+ <!-- SECTION: Section 1 -->
7
+ <!-- comment key1 -->
8
+ <text id="IDS_KEY1">value1-english</text>
9
+ <text id="IDS_KEY2">value2-english</text>
10
+
11
+ <!-- SECTION: Section 2 -->
12
+ <text id="IDS_KEY3">value3-english</text>
13
+ <!-- comment key4 -->
14
+ <text id="IDS_KEY4">value4-english</text>
15
+ </string_table>
@@ -0,0 +1,10 @@
1
+ msgid ""
2
+ msgstr ""
3
+ "Language: en\n"
4
+ "X-Generator: Twine\n"
5
+
6
+ msgctxt "key1"
7
+ msgid "key1"
8
+ msgstr "multi"
9
+ "line\n"
10
+ "string"
@@ -0,0 +1,13 @@
1
+ [[Section]]
2
+ [value_with_leading_accent]
3
+ en = `value
4
+ [value_with_trailing_accent]
5
+ en = value`
6
+ [value_with_leading_space]
7
+ en = ` value`
8
+ [value_with_trailing_space]
9
+ en = `value `
10
+ [value_wrapped_by_spaces]
11
+ en = ` value `
12
+ [value_wrapped_by_accents]
13
+ en = ``value``
@@ -0,0 +1,165 @@
1
+ require 'twine_test'
2
+
3
+ class TestAbstractFormatter < TwineTest
4
+ class SetTranslation < TwineTest
5
+ def setup
6
+ super
7
+
8
+ @twine_file = build_twine_file 'en', 'fr' do
9
+ add_section 'Section' do
10
+ add_definition key1: 'value1-english'
11
+ add_definition key2: { en: 'value2-english', fr: 'value2-french' }
12
+ end
13
+ end
14
+
15
+ @formatter = Twine::Formatters::Abstract.new
16
+ @formatter.twine_file = @twine_file
17
+ end
18
+
19
+ def test_set_translation_updates_existing_value
20
+ @formatter.set_translation_for_key 'key1', 'en', 'value1-english-updated'
21
+
22
+ assert_equal 'value1-english-updated', @twine_file.definitions_by_key['key1'].translations['en']
23
+ end
24
+
25
+ def test_set_translation_does_not_alter_other_language
26
+ @formatter.set_translation_for_key 'key2', 'en', 'value2-english-updated'
27
+
28
+ assert_equal 'value2-french', @twine_file.definitions_by_key['key2'].translations['fr']
29
+ end
30
+
31
+ def test_set_translation_escapes_newlines
32
+ @formatter.set_translation_for_key 'key1', 'en', "new\nline"
33
+
34
+ assert_equal 'new\nline', @twine_file.definitions_by_key['key1'].translations['en']
35
+ end
36
+
37
+ def test_set_translation_adds_translation_to_existing_key
38
+ @formatter.set_translation_for_key 'key1', 'fr', 'value1-french'
39
+
40
+ assert_equal 'value1-french', @twine_file.definitions_by_key['key1'].translations['fr']
41
+ end
42
+
43
+ def test_set_translation_does_not_add_new_key
44
+ @formatter.set_translation_for_key 'new-key', 'en', 'new-key-english'
45
+
46
+ assert_nil @twine_file.definitions_by_key['new-key']
47
+ end
48
+
49
+ def test_set_translation_consume_all_adds_new_key
50
+ formatter = Twine::Formatters::Abstract.new
51
+ formatter.twine_file = @twine_file
52
+ formatter.options = { consume_all: true }
53
+ formatter.set_translation_for_key 'new-key', 'en', 'new-key-english'
54
+
55
+ assert_equal 'new-key-english', @twine_file.definitions_by_key['new-key'].translations['en']
56
+ end
57
+
58
+ def test_set_translation_consume_all_adds_tags
59
+ random_tag = SecureRandom.uuid
60
+ formatter = Twine::Formatters::Abstract.new
61
+ formatter.twine_file = @twine_file
62
+ formatter.options = { consume_all: true, tags: [random_tag] }
63
+ formatter.set_translation_for_key 'new-key', 'en', 'new-key-english'
64
+
65
+ assert_equal [random_tag], @twine_file.definitions_by_key['new-key'].tags
66
+ end
67
+
68
+ def test_set_translation_adds_new_keys_to_category_uncategoriezed
69
+ formatter = Twine::Formatters::Abstract.new
70
+ formatter.twine_file = @twine_file
71
+ formatter.options = { consume_all: true }
72
+ formatter.set_translation_for_key 'new-key', 'en', 'new-key-english'
73
+
74
+ assert_equal 'Uncategorized', @twine_file.sections[0].name
75
+ assert_equal 'new-key', @twine_file.sections[0].definitions[0].key
76
+ end
77
+ end
78
+
79
+ class ValueReference < TwineTest
80
+ def setup
81
+ super
82
+
83
+ @twine_file = build_twine_file 'en', 'fr' do
84
+ add_section 'Section' do
85
+ add_definition refkey: 'ref-value'
86
+ add_definition key: :refkey
87
+ end
88
+ end
89
+
90
+ @formatter = Twine::Formatters::Abstract.new
91
+ @formatter.twine_file = @twine_file
92
+ end
93
+
94
+ def test_set_translation_does_not_add_unchanged_translation
95
+ @formatter.set_translation_for_key 'key', 'en', 'ref-value'
96
+
97
+ assert_nil @twine_file.definitions_by_key['key'].translations['en']
98
+ end
99
+
100
+ def test_set_translation_adds_changed_translation
101
+ @formatter.set_translation_for_key 'key', 'en', 'changed value'
102
+
103
+ assert_equal 'changed value', @twine_file.definitions_by_key['key'].translations['en']
104
+ end
105
+ end
106
+
107
+ class SetComment < TwineTest
108
+ def setup
109
+ super
110
+
111
+ @twine_file = build_twine_file 'en' do
112
+ add_section 'Section' do
113
+ add_definition key: 'value'
114
+ end
115
+ end
116
+ end
117
+
118
+ def test_set_comment_for_key_does_not_update_comment
119
+ formatter = Twine::Formatters::Abstract.new
120
+ formatter.twine_file = @twine_file
121
+ formatter.set_comment_for_key('key', 'comment')
122
+
123
+ assert_nil formatter.twine_file.definitions_by_key['key'].comment
124
+ end
125
+
126
+ def test_set_comment_for_key_updates_comment_with_update_comments
127
+ formatter = Twine::Formatters::Abstract.new
128
+ formatter.twine_file = @twine_file
129
+ formatter.options = { consume_comments: true }
130
+ formatter.set_comment_for_key('key', 'comment')
131
+
132
+ assert_equal 'comment', formatter.twine_file.definitions_by_key['key'].comment
133
+ end
134
+ end
135
+
136
+ class CommentReference < TwineTest
137
+ def setup
138
+ super
139
+
140
+ @twine_file = build_twine_file 'en' do
141
+ add_section 'Section' do
142
+ add_definition refkey: 'ref-value', comment: 'reference comment'
143
+ add_definition key: 'value', ref: :refkey
144
+ end
145
+ end
146
+
147
+ @formatter = Twine::Formatters::Abstract.new
148
+ @formatter.twine_file = @twine_file
149
+ @formatter.options = { consume_comments: true }
150
+ end
151
+
152
+ def test_set_comment_does_not_add_unchanged_comment
153
+ @formatter.set_comment_for_key 'key', 'reference comment'
154
+
155
+ assert_nil @twine_file.definitions_by_key['key'].raw_comment
156
+ end
157
+
158
+ def test_set_comment_adds_changed_comment
159
+ @formatter.set_comment_for_key 'key', 'changed comment'
160
+
161
+ assert_equal 'changed comment', @twine_file.definitions_by_key['key'].raw_comment
162
+ end
163
+ end
164
+
165
+ end
@@ -0,0 +1,304 @@
1
+ require 'twine_test'
2
+
3
+ class CLITest < TwineTest
4
+ def setup
5
+ super
6
+
7
+ @twine_file_path = File.join @output_dir, SecureRandom.uuid
8
+ @input_path = File.join @output_dir, SecureRandom.uuid
9
+ @input_dir = @output_dir
10
+ end
11
+
12
+ def parse(command)
13
+ @options = Twine::CLI::parse command.split
14
+ end
15
+
16
+ class TestValidateTwineFile < CLITest
17
+ def test_command
18
+ parse "validate-twine-file #{@twine_file_path}"
19
+
20
+ assert_equal 'validate-twine-file', @options[:command]
21
+ assert_equal @twine_file_path, @options[:twine_file]
22
+ end
23
+
24
+ def test_pedantic
25
+ parse "validate-twine-file #{@twine_file_path} --pedantic"
26
+ assert @options[:pedantic]
27
+ end
28
+
29
+ def test_missing_parameter
30
+ assert_raises Twine::Error do
31
+ parse 'validate-twine-file'
32
+ end
33
+ end
34
+
35
+ def test_extra_parameter
36
+ assert_raises Twine::Error do
37
+ parse 'validate-twine-file twine_file extra'
38
+ end
39
+ end
40
+ end
41
+
42
+ class TestGenerateLocalizationFile < CLITest
43
+ def test_command
44
+ parse "generate-localization-file #{@twine_file_path} #{@output_path}"
45
+
46
+ assert_equal 'generate-localization-file', @options[:command]
47
+ assert_equal @twine_file_path, @options[:twine_file]
48
+ assert_equal @output_path, @options[:output_path]
49
+ end
50
+
51
+ def test_missing_parameter
52
+ assert_raises Twine::Error do
53
+ parse 'generate-localization-file twine_file'
54
+ end
55
+ end
56
+
57
+ def test_validate
58
+ parse "generate-localization-file #{@twine_file_path} #{@output_path} --validate"
59
+ assert @options[:validate]
60
+ end
61
+
62
+ def test_extra_parameter
63
+ assert_raises Twine::Error do
64
+ parse 'generate-localization-file twine_file output extra'
65
+ end
66
+ end
67
+
68
+ def test_only_allows_one_language
69
+ assert_raises Twine::Error do
70
+ parse "generate-localization-file twine_file output --lang en,fr"
71
+ end
72
+ end
73
+ end
74
+
75
+ class TestGenerateAllLocalizationFiles < CLITest
76
+ def test_command
77
+ parse "generate-all-localization-files #{@twine_file_path} #{@output_dir}"
78
+
79
+ assert_equal 'generate-all-localization-files', @options[:command]
80
+ assert_equal @twine_file_path, @options[:twine_file]
81
+ assert_equal @output_dir, @options[:output_path]
82
+ end
83
+
84
+ def test_missing_parameter
85
+ assert_raises Twine::Error do
86
+ parse "generate-all-localization-files twine_file"
87
+ end
88
+ end
89
+
90
+ def test_validate
91
+ parse "generate-all-localization-files #{@twine_file_path} #{@output_dir} --validate"
92
+ assert @options[:validate]
93
+ end
94
+
95
+ def test_extra_parameter
96
+ assert_raises Twine::Error do
97
+ parse "generate-all-localization-files twine_file output extra"
98
+ end
99
+ end
100
+ end
101
+
102
+ class TestConsumeLocalizationFile < CLITest
103
+ def test_command
104
+ parse "consume-localization-file #{@twine_file_path} #{@input_path}"
105
+
106
+ assert_equal 'consume-localization-file', @options[:command]
107
+ assert_equal @twine_file_path, @options[:twine_file]
108
+ assert_equal @input_path, @options[:input_path]
109
+ end
110
+
111
+ def test_missing_parameter
112
+ assert_raises Twine::Error do
113
+ parse "consume-localization-file twine_file"
114
+ end
115
+ end
116
+
117
+ def test_extra_parameter
118
+ assert_raises Twine::Error do
119
+ parse "consume-localization-file twine_file output extra"
120
+ end
121
+ end
122
+
123
+ def test_only_allows_one_language
124
+ assert_raises Twine::Error do
125
+ parse "consume-localization-file twine_file output --lang en,fr"
126
+ end
127
+ end
128
+ end
129
+
130
+ class TestConsumeAllLocalizationFiles < CLITest
131
+ def test_command
132
+ parse "consume-all-localization-files #{@twine_file_path} #{@input_dir}"
133
+
134
+ assert_equal 'consume-all-localization-files', @options[:command]
135
+ assert_equal @twine_file_path, @options[:twine_file]
136
+ assert_equal @input_dir, @options[:input_path]
137
+ end
138
+
139
+ def test_missing_parameter
140
+ assert_raises Twine::Error do
141
+ parse "consume-all-localization-files twine_file"
142
+ end
143
+ end
144
+
145
+ def test_extra_parameter
146
+ assert_raises Twine::Error do
147
+ parse "consume-all-localization-files twine_file output extra"
148
+ end
149
+ end
150
+ end
151
+
152
+ class TestGenerateLocDrop < CLITest
153
+ def test_command
154
+ parse "generate-loc-drop #{@twine_file_path} #{@output_path} --format apple"
155
+
156
+ assert_equal 'generate-loc-drop', @options[:command]
157
+ assert_equal @twine_file_path, @options[:twine_file]
158
+ assert_equal @output_path, @options[:output_path]
159
+ end
160
+
161
+ def test_missing_parameter
162
+ assert_raises Twine::Error do
163
+ parse "generate-loc-drop twine_file --format apple"
164
+ end
165
+ end
166
+
167
+ def test_validate
168
+ parse "generate-loc-drop #{@twine_file_path} #{@output_path} --format apple --validate"
169
+ assert @options[:validate]
170
+ end
171
+
172
+ def test_extra_parameter
173
+ assert_raises Twine::Error do
174
+ parse "generate-loc-drop twine_file output extra --format apple"
175
+ end
176
+ end
177
+
178
+ def test_format_needed
179
+ assert_raises Twine::Error do
180
+ parse "generate-loc-drop twine_file output"
181
+ end
182
+ end
183
+ end
184
+
185
+ class TestConsumeLocDrop < CLITest
186
+ def test_command
187
+ parse "consume-loc-drop #{@twine_file_path} #{@input_path}"
188
+
189
+ assert_equal 'consume-loc-drop', @options[:command]
190
+ assert_equal @twine_file_path, @options[:twine_file]
191
+ assert_equal @input_path, @options[:input_path]
192
+ end
193
+
194
+ def test_missing_parameter
195
+ assert_raises Twine::Error do
196
+ parse "consume-loc-drop twine_file"
197
+ end
198
+ end
199
+
200
+ def test_extra_parameter
201
+ assert_raises Twine::Error do
202
+ parse "consume-loc-drop twine_file input extra"
203
+ end
204
+ end
205
+ end
206
+
207
+ class TestParameters < CLITest
208
+ def parse_with(parameter)
209
+ parse 'validate-twine-file input.txt ' + parameter
210
+ end
211
+
212
+ def test_default_options
213
+ parse_with ''
214
+ expected = {command: 'validate-twine-file', twine_file: 'input.txt', include: :all}
215
+ assert_equal expected, @options
216
+ end
217
+
218
+ def test_create_folders
219
+ parse_with '--create-folders'
220
+ assert @options[:create_folders]
221
+ end
222
+
223
+ def test_consume_all
224
+ parse_with '--consume-all'
225
+ assert @options[:consume_all]
226
+ end
227
+
228
+ def test_consume_comments
229
+ parse_with '--consume-comments'
230
+ assert @options[:consume_comments]
231
+ end
232
+
233
+ def test_untagged
234
+ parse_with '--untagged'
235
+ assert @options[:untagged]
236
+ end
237
+
238
+ def test_developer_language
239
+ random_language = KNOWN_LANGUAGES.sample
240
+ parse_with "--developer-lang #{random_language}"
241
+ assert_equal random_language, @options[:developer_language]
242
+ end
243
+
244
+ def test_single_language
245
+ random_language = KNOWN_LANGUAGES.sample
246
+ parse_with "--lang #{random_language}"
247
+ assert_equal [random_language], @options[:languages]
248
+ end
249
+
250
+ def test_multiple_languages
251
+ random_languages = KNOWN_LANGUAGES.shuffle[0, 3]
252
+ parse_with "--lang #{random_languages.join(',')}"
253
+ assert_equal random_languages.sort, @options[:languages].sort
254
+ end
255
+
256
+ def test_single_tag
257
+ random_tag = "tag#{rand(100)}"
258
+ parse_with "--tags #{random_tag}"
259
+ assert_equal [[random_tag]], @options[:tags]
260
+ end
261
+
262
+ def test_multiple_OR_tags
263
+ random_tags = ["tag#{rand(100)}", "tag#{rand(100)}", "tag#{rand(100)}"]
264
+ parse_with "--tags #{random_tags.join(',')}"
265
+ sorted_tags = @options[:tags].map { |tags| tags.sort }
266
+ assert_equal [random_tags.sort], sorted_tags
267
+ end
268
+
269
+ def test_multiple_AND_tags
270
+ random_tag_1 = "tag#{rand(100)}"
271
+ random_tag_2 = "tag#{rand(100)}"
272
+ parse_with "--tags #{random_tag_1} --tags #{random_tag_2}"
273
+ assert_equal [[random_tag_1], [random_tag_2]], @options[:tags]
274
+ end
275
+
276
+ def test_format
277
+ random_format = Twine::Formatters.formatters.sample.format_name.downcase
278
+ parse_with "--format #{random_format}"
279
+ assert_equal random_format, @options[:format]
280
+ end
281
+
282
+ def test_include
283
+ random_set = [:all, :translated, :untranslated].sample
284
+ parse_with "--include #{random_set}"
285
+ assert_equal random_set, @options[:include]
286
+ end
287
+
288
+ def test_output_path
289
+ parse_with "--output-file #{@output_path}"
290
+ assert_equal @output_path, @options[:output_path]
291
+ end
292
+
293
+ def test_file_name
294
+ random_filename = "#{rand(10000)}"
295
+ parse_with "--file-name #{random_filename}"
296
+ assert_equal random_filename, @options[:file_name]
297
+ end
298
+
299
+ def test_encoding
300
+ parse_with '--encoding UTF16'
301
+ assert_equal 'UTF16', @options[:output_encoding]
302
+ end
303
+ end
304
+ end