aigu 0.3.1 → 0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rubocop.yml +52 -0
- data/README.md +89 -5
- data/Rakefile +1 -1
- data/aigu.gemspec +7 -4
- data/bin/aigu +1 -1
- data/bin/phare +16 -0
- data/lib/aigu.rb +11 -0
- data/lib/aigu/android_exporter.rb +165 -0
- data/lib/aigu/android_importer.rb +130 -0
- data/lib/aigu/cli.rb +14 -9
- data/lib/aigu/core_exporter.rb +82 -0
- data/lib/aigu/core_importer.rb +82 -0
- data/lib/aigu/exporter.rb +1 -5
- data/lib/aigu/extensions/hash.rb +6 -0
- data/lib/aigu/importer.rb +1 -3
- data/lib/aigu/ios_exporter.rb +165 -0
- data/lib/aigu/ios_importer.rb +181 -0
- data/lib/aigu/mergeer.rb +51 -0
- data/lib/aigu/puller.rb +44 -0
- data/lib/aigu/pusher.rb +44 -0
- data/lib/aigu/unmergeer.rb +55 -0
- data/lib/aigu/version.rb +1 -1
- data/spec/aigu/android_exporter_spec.rb +40 -0
- data/spec/aigu/android_importer_spec.rb +131 -0
- data/spec/aigu/core_exporter_spec.rb +53 -0
- data/spec/aigu/core_importer_spec.rb +102 -0
- data/spec/aigu/exporter_spec.rb +2 -2
- data/spec/aigu/importer_spec.rb +2 -2
- data/spec/aigu/ios_exporter_spec.rb +115 -0
- data/spec/aigu/ios_importer_spec.rb +175 -0
- data/spec/spec_helper.rb +7 -1
- metadata +72 -4
data/lib/aigu/mergeer.rb
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
module Aigu
|
2
|
+
class Mergeer
|
3
|
+
def initialize(opts = {})
|
4
|
+
@output_file = opts[:'output-file']
|
5
|
+
@input_directory = opts[:'input-directory']
|
6
|
+
end
|
7
|
+
|
8
|
+
def process!
|
9
|
+
puts "Generating flat Accent JSON file `#{@output_file}` merging json files in `#{@input_directory}` directory"
|
10
|
+
|
11
|
+
puts '---'
|
12
|
+
|
13
|
+
build_output
|
14
|
+
write_json_file
|
15
|
+
|
16
|
+
puts '---'
|
17
|
+
puts 'Done'
|
18
|
+
end
|
19
|
+
|
20
|
+
protected
|
21
|
+
|
22
|
+
def build_output
|
23
|
+
@output = {}
|
24
|
+
|
25
|
+
pattern = File.join(@input_directory, '*.json')
|
26
|
+
Dir[pattern].each do |filepath|
|
27
|
+
puts "Processing #{filepath}"
|
28
|
+
|
29
|
+
file_name = filepath.rpartition(File::SEPARATOR).last.split('.', 2).first
|
30
|
+
prefix = file_name == 'default' ? '' : "@#{file_name.upcase}@__"
|
31
|
+
|
32
|
+
json = JSON.parse(File.read(filepath))
|
33
|
+
json.each_pair do |key, value|
|
34
|
+
@output[prefix + key] = value
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
@output
|
39
|
+
end
|
40
|
+
|
41
|
+
def write_json_file
|
42
|
+
file_path = @output_file
|
43
|
+
puts "Generating #{file_path}"
|
44
|
+
FileUtils.mkdir_p(File.dirname(file_path))
|
45
|
+
|
46
|
+
File.open(file_path, 'w+') do |file|
|
47
|
+
file << JSON.pretty_generate(JSON.parse(@output.to_json))
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
data/lib/aigu/puller.rb
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
module Aigu
|
2
|
+
class Puller
|
3
|
+
PULL_PATH = '/public_api/latest_revision?language=%s&render_format=json&render_filename=aigu.json'
|
4
|
+
|
5
|
+
def initialize(opts = {})
|
6
|
+
@output_file = opts[:'output-file']
|
7
|
+
@accent_api_key = opts[:'accent-api-key']
|
8
|
+
@accent_url = opts[:'accent-url']
|
9
|
+
@locale = opts[:'locale']
|
10
|
+
end
|
11
|
+
|
12
|
+
def process!
|
13
|
+
puts "Pulling JSON file `#{@output_file}` from Accent"
|
14
|
+
|
15
|
+
puts '---'
|
16
|
+
|
17
|
+
pull
|
18
|
+
|
19
|
+
puts '---'
|
20
|
+
puts 'Done'
|
21
|
+
end
|
22
|
+
|
23
|
+
protected
|
24
|
+
|
25
|
+
def pull
|
26
|
+
uri = URI(@accent_url + format(PULL_PATH, @locale))
|
27
|
+
|
28
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
29
|
+
uri.scheme == 'https' && http.use_ssl = true
|
30
|
+
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
31
|
+
request = Net::HTTP::Get.new(uri)
|
32
|
+
request.add_field('Authorization', @accent_api_key)
|
33
|
+
|
34
|
+
response = http.request(request)
|
35
|
+
puts 'Response code: ' + response.code
|
36
|
+
|
37
|
+
puts "Generating #{@output_file}"
|
38
|
+
|
39
|
+
File.open(@output_file, 'w+') do |file|
|
40
|
+
file << response.body
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
data/lib/aigu/pusher.rb
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
module Aigu
|
2
|
+
class Pusher
|
3
|
+
PUSH_PATH = '/public_api/revisions'
|
4
|
+
|
5
|
+
def initialize(opts = {})
|
6
|
+
@input_file = opts[:'input-file']
|
7
|
+
@accent_api_key = opts[:'accent-api-key']
|
8
|
+
@accent_url = opts[:'accent-url']
|
9
|
+
end
|
10
|
+
|
11
|
+
def process!
|
12
|
+
puts "Sending JSON file `#{@input_file}` to Accent"
|
13
|
+
|
14
|
+
puts '---'
|
15
|
+
|
16
|
+
send
|
17
|
+
|
18
|
+
puts '---'
|
19
|
+
puts 'Done'
|
20
|
+
end
|
21
|
+
|
22
|
+
protected
|
23
|
+
|
24
|
+
def send
|
25
|
+
payload = File.read(@input_file)
|
26
|
+
file_name = @input_file.rpartition(File::SEPARATOR).last
|
27
|
+
|
28
|
+
uri = URI(@accent_url + PUSH_PATH)
|
29
|
+
|
30
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
31
|
+
uri.scheme == 'https' && http.use_ssl = true
|
32
|
+
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
33
|
+
request = Net::HTTP::Post.new(uri)
|
34
|
+
request.add_field('Authorization', @accent_api_key)
|
35
|
+
request.add_field('Content-Type', 'application/json')
|
36
|
+
|
37
|
+
request.body = JSON.pretty_generate(JSON.parse({ revision: { file: payload, filename: file_name } }.to_json))
|
38
|
+
|
39
|
+
response = http.request(request)
|
40
|
+
|
41
|
+
puts 'Response: ' + response.code
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module Aigu
|
2
|
+
class Unmergeer
|
3
|
+
UNMERGE_REGEX = /^@(?<file_name>\w+)@__(?<key>.+)$/
|
4
|
+
|
5
|
+
def initialize(opts = {})
|
6
|
+
@output_directory = opts[:'output-directory']
|
7
|
+
@input_file = opts[:'input-file']
|
8
|
+
end
|
9
|
+
|
10
|
+
def process!
|
11
|
+
puts "Unmerging Accent json file `#{@input_file}` to `#{@output_directory}` directory"
|
12
|
+
|
13
|
+
puts '---'
|
14
|
+
|
15
|
+
parse_json
|
16
|
+
write_json_files
|
17
|
+
|
18
|
+
puts '---'
|
19
|
+
puts 'Done'
|
20
|
+
end
|
21
|
+
|
22
|
+
protected
|
23
|
+
|
24
|
+
def parse_json
|
25
|
+
@object = {}
|
26
|
+
|
27
|
+
json = JSON.parse(File.read(@input_file))
|
28
|
+
|
29
|
+
json.each_pair do |key, value|
|
30
|
+
match_data = key.match(UNMERGE_REGEX)
|
31
|
+
if match_data
|
32
|
+
@object[match_data[:file_name]] ||= {}
|
33
|
+
@object[match_data[:file_name]][match_data[:key]] = value
|
34
|
+
else
|
35
|
+
@object['DEFAULT'] ||= {}
|
36
|
+
@object['DEFAULT'][key] = value
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
@object
|
41
|
+
end
|
42
|
+
|
43
|
+
def write_json_files
|
44
|
+
@object.each_pair do |file_name, json|
|
45
|
+
file_path = File.join(@output_directory, "#{file_name.downcase}.json")
|
46
|
+
puts "Generating #{file_path}"
|
47
|
+
FileUtils.mkdir_p(File.dirname(file_path))
|
48
|
+
|
49
|
+
File.open(file_path, 'w+') do |file|
|
50
|
+
file << JSON.pretty_generate(JSON.parse(json.to_json))
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
data/lib/aigu/version.rb
CHANGED
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Aigu::AndroidExporter do
|
4
|
+
describe :parse_xml do
|
5
|
+
let(:exporter) { Aigu::AndroidExporter.new }
|
6
|
+
let(:parse_xml) { exporter.send(:parse_xml, content) }
|
7
|
+
|
8
|
+
let(:content) do
|
9
|
+
<<-EOS.unindent
|
10
|
+
<?xml version="1.0" encoding="utf-8"?>
|
11
|
+
<resources>
|
12
|
+
<string name="string1">value1</string>
|
13
|
+
<string name="string2">value2</string>
|
14
|
+
<string name="string3">value3 with special characters: & < > ' "</string>
|
15
|
+
|
16
|
+
<string-array name="pairing_step_three_custom_nickname_array">
|
17
|
+
<item>Custom</item>
|
18
|
+
<item>Living Room</item>
|
19
|
+
<item>Kitchen</item>
|
20
|
+
<item>Bedroom</item>
|
21
|
+
</string-array>
|
22
|
+
</resources>
|
23
|
+
EOS
|
24
|
+
end
|
25
|
+
|
26
|
+
let(:expected_content) do
|
27
|
+
{
|
28
|
+
'string1' => 'value1',
|
29
|
+
'string2' => 'value2',
|
30
|
+
'string3' => 'value3 with special characters: & < > \' "',
|
31
|
+
'pairing_step_three_custom_nickname_array__ARRAY_ITEM__#0' => 'Custom',
|
32
|
+
'pairing_step_three_custom_nickname_array__ARRAY_ITEM__#1' => 'Living Room',
|
33
|
+
'pairing_step_three_custom_nickname_array__ARRAY_ITEM__#2' => 'Kitchen',
|
34
|
+
'pairing_step_three_custom_nickname_array__ARRAY_ITEM__#3' => 'Bedroom'
|
35
|
+
}
|
36
|
+
end
|
37
|
+
|
38
|
+
it { expect(parse_xml).to eql expected_content }
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,131 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Aigu::AndroidImporter do
|
4
|
+
describe :expand_content_values do
|
5
|
+
let(:importer) { Aigu::AndroidImporter.new }
|
6
|
+
let(:expanded_content) { importer.send(:expand_content_values, content) }
|
7
|
+
|
8
|
+
let(:content) do
|
9
|
+
{
|
10
|
+
'string1' => 'value1',
|
11
|
+
'string2' => 'value2',
|
12
|
+
'string3' => 'value3 with special characters: & < > \' "',
|
13
|
+
'pairing_step_three_custom_nickname_array__ARRAY_ITEM__#0' => 'Custom',
|
14
|
+
'pairing_step_three_custom_nickname_array__ARRAY_ITEM__#1' => 'Living Room',
|
15
|
+
'pairing_step_three_custom_nickname_array__ARRAY_ITEM__#2' => 'Kitchen',
|
16
|
+
'pairing_step_three_custom_nickname_array__ARRAY_ITEM__#3' => 'Bedroom'
|
17
|
+
}
|
18
|
+
end
|
19
|
+
|
20
|
+
let(:expected_content) do
|
21
|
+
{
|
22
|
+
'string1' => 'value1',
|
23
|
+
'string2' => 'value2',
|
24
|
+
'string3' => 'value3 with special characters: & < > \' "',
|
25
|
+
'pairing_step_three_custom_nickname_array' => [
|
26
|
+
'Custom',
|
27
|
+
'Living Room',
|
28
|
+
'Kitchen',
|
29
|
+
'Bedroom'
|
30
|
+
]
|
31
|
+
}
|
32
|
+
end
|
33
|
+
|
34
|
+
it { expect(expanded_content).to eql expected_content }
|
35
|
+
end
|
36
|
+
|
37
|
+
describe :split_res_types do
|
38
|
+
let(:importer) { Aigu::AndroidImporter.new }
|
39
|
+
let(:splited_res_types) { importer.send(:split_res_types, content) }
|
40
|
+
|
41
|
+
let(:content) do
|
42
|
+
{
|
43
|
+
'string1' => 'value1',
|
44
|
+
'string2' => 'value2',
|
45
|
+
'string3' => 'value3 with special characters: & < > \' "',
|
46
|
+
'pairing_step_three_custom_nickname_array' => [
|
47
|
+
'Custom',
|
48
|
+
'Living Room',
|
49
|
+
'Kitchen',
|
50
|
+
'Bedroom'
|
51
|
+
],
|
52
|
+
'string1_t1__@TYPE_type1' => 'value1',
|
53
|
+
'string2_t1__@TYPE_type1' => 'value2',
|
54
|
+
'string3_t1__@TYPE_type1' => 'value3 with special characters: & < > \' "',
|
55
|
+
'pairing_step_three_custom_nickname_array_t1__@TYPE_type1' => [
|
56
|
+
'Custom',
|
57
|
+
'Living Room',
|
58
|
+
'Kitchen',
|
59
|
+
'Bedroom'
|
60
|
+
]
|
61
|
+
}
|
62
|
+
end
|
63
|
+
|
64
|
+
let(:expected_content) do
|
65
|
+
{
|
66
|
+
'' => {
|
67
|
+
'string1' => 'value1',
|
68
|
+
'string2' => 'value2',
|
69
|
+
'string3' => 'value3 with special characters: & < > \' "',
|
70
|
+
'pairing_step_three_custom_nickname_array' => [
|
71
|
+
'Custom',
|
72
|
+
'Living Room',
|
73
|
+
'Kitchen',
|
74
|
+
'Bedroom'
|
75
|
+
]
|
76
|
+
},
|
77
|
+
'type1' => {
|
78
|
+
'string1_t1' => 'value1',
|
79
|
+
'string2_t1' => 'value2',
|
80
|
+
'string3_t1' => 'value3 with special characters: & < > \' "',
|
81
|
+
'pairing_step_three_custom_nickname_array_t1' => [
|
82
|
+
'Custom',
|
83
|
+
'Living Room',
|
84
|
+
'Kitchen',
|
85
|
+
'Bedroom'
|
86
|
+
]
|
87
|
+
}
|
88
|
+
}
|
89
|
+
end
|
90
|
+
|
91
|
+
it { expect(splited_res_types).to eql expected_content }
|
92
|
+
end
|
93
|
+
|
94
|
+
describe :res_to_xml do
|
95
|
+
let(:importer) { Aigu::AndroidImporter.new }
|
96
|
+
let(:res_xml) { importer.send(:res_to_xml, content) }
|
97
|
+
|
98
|
+
let(:content) do
|
99
|
+
{
|
100
|
+
'string1' => 'value1',
|
101
|
+
'string2' => 'value2',
|
102
|
+
'string3' => 'value3 with special characters: & < > \' "',
|
103
|
+
'pairing_step_three_custom_nickname_array' => [
|
104
|
+
'Custom',
|
105
|
+
'Living Room',
|
106
|
+
'Kitchen',
|
107
|
+
'Bedroom'
|
108
|
+
]
|
109
|
+
}
|
110
|
+
end
|
111
|
+
|
112
|
+
let(:expected_content) do
|
113
|
+
<<-EOS.unindent
|
114
|
+
<?xml version="1.0" encoding="utf-8"?>
|
115
|
+
<resources>
|
116
|
+
<string name="string1">value1</string>
|
117
|
+
<string name="string2">value2</string>
|
118
|
+
<string name="string3">value3 with special characters: & < > \' "</string>
|
119
|
+
<string-array name="pairing_step_three_custom_nickname_array">
|
120
|
+
<item>Custom</item>
|
121
|
+
<item>Living Room</item>
|
122
|
+
<item>Kitchen</item>
|
123
|
+
<item>Bedroom</item>
|
124
|
+
</string-array>
|
125
|
+
</resources>
|
126
|
+
EOS
|
127
|
+
end
|
128
|
+
|
129
|
+
it { expect(res_xml).to eql expected_content }
|
130
|
+
end
|
131
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Aigu::CoreExporter do
|
4
|
+
describe :parse_java_file do
|
5
|
+
let(:exporter) { Aigu::CoreExporter.new }
|
6
|
+
let(:parse_java_file_en) { exporter.send(:parse_java_file, content) }
|
7
|
+
let(:parse_java_file_fr) { exporter.send(:parse_java_file, content, 'fr') }
|
8
|
+
|
9
|
+
let(:content) do
|
10
|
+
<<-EOS.unindent
|
11
|
+
package ca.bell.fiberemote.core;
|
12
|
+
|
13
|
+
public enum CoreLocalizedStrings {
|
14
|
+
|
15
|
+
/* !!LOCALIZED STRINGS!! --> */
|
16
|
+
STRING_1("Value of string #1 en", "Value of string #1 fr"),
|
17
|
+
STRING_2 ("Value of string #2 en", "Value of string #2 fr"),
|
18
|
+
STRING_3("Value with quotes \\" and \\nlinefeeds en", "Value with quotes \\" and \\nlinefeeds fr"),
|
19
|
+
STRING_4("Value with parentheses () en", "Value with parentheses () fr")
|
20
|
+
/* <-- !!LOCALIZED STRINGS!! */
|
21
|
+
;
|
22
|
+
|
23
|
+
private String textEn;
|
24
|
+
|
25
|
+
CoreLocalizedStrings(String textEn) {
|
26
|
+
this.textEn = textEn;
|
27
|
+
}
|
28
|
+
}
|
29
|
+
EOS
|
30
|
+
end
|
31
|
+
|
32
|
+
let(:expected_content_en) do
|
33
|
+
{
|
34
|
+
'STRING_1' => 'Value of string #1 en',
|
35
|
+
'STRING_2' => 'Value of string #2 en',
|
36
|
+
'STRING_3' => 'Value with quotes \" and \nlinefeeds en',
|
37
|
+
'STRING_4' => 'Value with parentheses () en'
|
38
|
+
}
|
39
|
+
end
|
40
|
+
|
41
|
+
let(:expected_content_fr) do
|
42
|
+
{
|
43
|
+
'STRING_1' => 'Value of string #1 fr',
|
44
|
+
'STRING_2' => 'Value of string #2 fr',
|
45
|
+
'STRING_3' => 'Value with quotes \" and \nlinefeeds fr',
|
46
|
+
'STRING_4' => 'Value with parentheses () fr'
|
47
|
+
}
|
48
|
+
end
|
49
|
+
|
50
|
+
it { expect(parse_java_file_en).to eql expected_content_en }
|
51
|
+
it { expect(parse_java_file_fr).to eql expected_content_fr }
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Aigu::CoreImporter do
|
4
|
+
describe :parse_java_file do
|
5
|
+
let(:importer) { Aigu::CoreImporter.new }
|
6
|
+
let(:update_in_memory_en) { importer.send(:update_in_memory, java_file_content, content_en, 'en') }
|
7
|
+
let(:update_in_memory_fr) { importer.send(:update_in_memory, java_file_content, content_fr, 'fr') }
|
8
|
+
|
9
|
+
let(:java_file_content) do
|
10
|
+
<<-EOS.unindent
|
11
|
+
package ca.bell.fiberemote.core;
|
12
|
+
|
13
|
+
public enum CoreLocalizedStrings {
|
14
|
+
|
15
|
+
/* !!LOCALIZED STRINGS!! --> */
|
16
|
+
STRING_1("Value of string #1 en", "Value of string #1 fr"),
|
17
|
+
STRING_2 ("Value of string #2 en","Value of string #2 fr"),
|
18
|
+
/* Comment */
|
19
|
+
STRING_3("Value with quotes \\" and \\nlinefeeds en", "Value with quotes \\" and \\nlinefeeds fr"),
|
20
|
+
STRING_4("Value with parentheses () en", "Value with parentheses () fr")
|
21
|
+
/* <-- !!LOCALIZED STRINGS!! */
|
22
|
+
;
|
23
|
+
|
24
|
+
private String textEn;
|
25
|
+
|
26
|
+
CoreLocalizedStrings(String textEn) {
|
27
|
+
this.textEn = textEn;
|
28
|
+
}
|
29
|
+
}
|
30
|
+
EOS
|
31
|
+
end
|
32
|
+
|
33
|
+
let(:content_en) do
|
34
|
+
{
|
35
|
+
'STRING_1' => 'New value of string #1 en',
|
36
|
+
'STRING_2' => 'New value of string #2 en',
|
37
|
+
'STRING_3' => 'New value with quotes \" and \nlinefeeds en',
|
38
|
+
'STRING_4' => 'New value with parentheses () en'
|
39
|
+
}
|
40
|
+
end
|
41
|
+
|
42
|
+
let(:content_fr) do
|
43
|
+
{
|
44
|
+
'STRING_1' => 'New value of string #1 fr',
|
45
|
+
'STRING_2' => 'New value of string #2 fr',
|
46
|
+
'STRING_3' => 'New value with quotes \" and \nlinefeeds fr',
|
47
|
+
'STRING_4' => 'New value with parentheses () fr'
|
48
|
+
}
|
49
|
+
end
|
50
|
+
|
51
|
+
let(:expected_content_en) do
|
52
|
+
<<-EOS.unindent
|
53
|
+
package ca.bell.fiberemote.core;
|
54
|
+
|
55
|
+
public enum CoreLocalizedStrings {
|
56
|
+
|
57
|
+
/* !!LOCALIZED STRINGS!! --> */
|
58
|
+
STRING_1("New value of string #1 en", "Value of string #1 fr"),
|
59
|
+
STRING_2("New value of string #2 en", "Value of string #2 fr"),
|
60
|
+
/* Comment */
|
61
|
+
STRING_3("New value with quotes \\" and \\nlinefeeds en", "Value with quotes \\" and \\nlinefeeds fr"),
|
62
|
+
STRING_4("New value with parentheses () en", "Value with parentheses () fr")
|
63
|
+
/* <-- !!LOCALIZED STRINGS!! */
|
64
|
+
;
|
65
|
+
|
66
|
+
private String textEn;
|
67
|
+
|
68
|
+
CoreLocalizedStrings(String textEn) {
|
69
|
+
this.textEn = textEn;
|
70
|
+
}
|
71
|
+
}
|
72
|
+
EOS
|
73
|
+
end
|
74
|
+
|
75
|
+
let(:expected_content_fr) do
|
76
|
+
<<-EOS.unindent
|
77
|
+
package ca.bell.fiberemote.core;
|
78
|
+
|
79
|
+
public enum CoreLocalizedStrings {
|
80
|
+
|
81
|
+
/* !!LOCALIZED STRINGS!! --> */
|
82
|
+
STRING_1("Value of string #1 en", "New value of string #1 fr"),
|
83
|
+
STRING_2("Value of string #2 en", "New value of string #2 fr"),
|
84
|
+
/* Comment */
|
85
|
+
STRING_3("Value with quotes \\" and \\nlinefeeds en", "New value with quotes \\" and \\nlinefeeds fr"),
|
86
|
+
STRING_4("Value with parentheses () en", "New value with parentheses () fr")
|
87
|
+
/* <-- !!LOCALIZED STRINGS!! */
|
88
|
+
;
|
89
|
+
|
90
|
+
private String textEn;
|
91
|
+
|
92
|
+
CoreLocalizedStrings(String textEn) {
|
93
|
+
this.textEn = textEn;
|
94
|
+
}
|
95
|
+
}
|
96
|
+
EOS
|
97
|
+
end
|
98
|
+
|
99
|
+
it { expect(update_in_memory_en).to eql expected_content_en }
|
100
|
+
it { expect(update_in_memory_fr).to eql expected_content_fr }
|
101
|
+
end
|
102
|
+
end
|