forked from fnando/i18n-js
-
Notifications
You must be signed in to change notification settings - Fork 0
/
i18n_js_spec.rb
122 lines (94 loc) · 3.58 KB
/
i18n_js_spec.rb
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
require "spec_helper"
describe I18n::JS do
context "exporting" do
before do
I18n::JS.stub :export_dir => temp_path
end
it "exports messages to default path when configuration file doesn't exist" do
I18n::JS.export
file_should_exist "translations.js"
end
it "exports messages using custom output path" do
set_config "custom_path.yml"
I18n::JS.should_receive(:save).with(translations, "tmp/i18n-js/all.js")
I18n::JS.export
end
it "sets default scope to * when not specified" do
set_config "no_scope.yml"
I18n::JS.should_receive(:save).with(translations, "tmp/i18n-js/no_scope.js")
I18n::JS.export
end
it "exports to multiple files" do
set_config "multiple_files.yml"
I18n::JS.export
file_should_exist "all.js"
file_should_exist "tudo.js"
end
it "ignores an empty config file" do
set_config "no_config.yml"
I18n::JS.export
file_should_exist "translations.js"
end
it "exports to a JS file per available locale" do
set_config "js_file_per_locale.yml"
I18n::JS.export
file_should_exist "en.js"
end
it "exports with multiple conditions" do
set_config "multiple_conditions.yml"
I18n::JS.export
file_should_exist "bitsnpieces.js"
end
end
context "filters" do
it "filters translations using scope *.date.formats" do
result = I18n::JS.filter(translations, "*.date.formats")
result[:en][:date].keys.should eql([:formats])
result[:fr][:date].keys.should eql([:formats])
end
it "filters translations using scope [*.date.formats, *.number.currency.format]" do
result = I18n::JS.scoped_translations(["*.date.formats", "*.number.currency.format"])
result[:en].keys.collect(&:to_s).sort.should eql(%w[ date number ])
result[:fr].keys.collect(&:to_s).sort.should eql(%w[ date number ])
end
it "filters translations using multi-star scope" do
result = I18n::JS.scoped_translations("*.*.formats")
result[:en].keys.collect(&:to_s).sort.should eql(%w[ date time ])
result[:fr].keys.collect(&:to_s).sort.should eql(%w[ date time ])
result[:en][:date].keys.should eql([:formats])
result[:en][:time].keys.should eql([:formats])
result[:fr][:date].keys.should eql([:formats])
result[:fr][:time].keys.should eql([:formats])
end
it "filters translations using alternated stars" do
result = I18n::JS.scoped_translations("*.admin.*.title")
result[:en][:admin].keys.collect(&:to_s).sort.should eql(%w[ edit show ])
result[:fr][:admin].keys.collect(&:to_s).sort.should eql(%w[ edit show ])
result[:en][:admin][:show][:title].should eql("Show")
result[:fr][:admin][:show][:title].should eql("Visualiser")
result[:en][:admin][:edit][:title].should eql("Edit")
result[:fr][:admin][:edit][:title].should eql("Editer")
end
end
context "general" do
it "sets export directory" do
I18n::JS.export_dir.should eql("public/javascripts")
end
it "sets empty hash as configuration when no file is found" do
I18n::JS.config?.should be_false
I18n::JS.config.should eql({})
end
end
context "hash merging" do
it "performs a deep merge" do
target = {:a => {:b => 1}}
result = I18n::JS.deep_merge(target, {:a => {:c => 2}})
result[:a].should eql({:b => 1, :c => 2})
end
it "performs a banged deep merge" do
target = {:a => {:b => 1}}
I18n::JS.deep_merge!(target, {:a => {:c => 2}})
target[:a].should eql({:b => 1, :c => 2})
end
end
end