jsus 0.2.7 → 0.3.0

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.
Files changed (45) hide show
  1. data/.travis.yml +6 -0
  2. data/CHANGELOG +4 -1
  3. data/Gemfile +4 -1
  4. data/VERSION +1 -1
  5. data/bin/jsus +30 -9
  6. data/features/command-line/compression.feature +24 -0
  7. data/features/command-line/mooforge_compatibility_layer.feature +75 -0
  8. data/features/data/Compression/Source/Library/Color.js +17 -0
  9. data/features/data/Compression/Source/Widget/Input/Input.Color.js +21 -0
  10. data/features/data/Compression/package.yml +9 -0
  11. data/features/data/MooforgePlugin/Core/Source/Core.js +16 -0
  12. data/features/data/MooforgePlugin/Core/package.yml +8 -0
  13. data/features/data/MooforgePlugin/Plugin/Source/plugin-support.js +20 -0
  14. data/features/data/MooforgePlugin/Plugin/Source/plugin.js +21 -0
  15. data/features/data/MooforgePlugin/Plugin/package.yml +9 -0
  16. data/features/data/compression.min.js +1 -0
  17. data/jsus.gemspec +45 -22
  18. data/lib/jsus/middleware.rb +178 -0
  19. data/lib/jsus/package.rb +10 -10
  20. data/lib/jsus/source_file.rb +58 -30
  21. data/lib/jsus/tag.rb +18 -10
  22. data/lib/jsus/util/file_cache.rb +57 -0
  23. data/lib/jsus/util/inflection.rb +39 -0
  24. data/lib/jsus/util.rb +2 -0
  25. data/lib/jsus.rb +2 -0
  26. data/spec/data/ComplexDependencies/Mootools/Source/Core.js +16 -0
  27. data/spec/data/ComplexDependencies/Mootools/package.yml +8 -0
  28. data/spec/data/ComplexDependencies/Output/package.js +70 -0
  29. data/spec/data/ComplexDependencies/Output/scripts.json +14 -0
  30. data/spec/data/ComplexDependencies/Output/tree.json +33 -0
  31. data/spec/data/ComplexDependencies/Source/Library/Color.js +19 -0
  32. data/spec/data/ComplexDependencies/Source/Widget/Input/Input.Color.js +20 -0
  33. data/spec/data/ComplexDependencies/Source/Widget/Input.js +16 -0
  34. data/spec/data/ComplexDependencies/package.yml +10 -0
  35. data/spec/data/mooforge_quirky_source.js +20 -0
  36. data/spec/data/unicode_source.js +23 -0
  37. data/spec/data/unicode_source_with_bom.js +23 -0
  38. data/spec/jsus/middleware_spec.rb +216 -0
  39. data/spec/jsus/package_spec.rb +12 -6
  40. data/spec/jsus/source_file_spec.rb +42 -14
  41. data/spec/jsus/tag_spec.rb +8 -2
  42. data/spec/jsus/util/file_cache_spec.rb +67 -0
  43. data/spec/jsus/util/inflection_spec.rb +42 -0
  44. metadata +124 -62
  45. data/Gemfile.lock +0 -79
@@ -0,0 +1,70 @@
1
+ /*
2
+ ---
3
+
4
+ script: Input.js
5
+
6
+ description: Generic Input
7
+
8
+ license: MIT-style license
9
+
10
+ authors:
11
+ - Yaroslaff Fedin
12
+
13
+ provides: [Input]
14
+
15
+ ...
16
+ */
17
+ /*
18
+ ---
19
+
20
+ script: Core.js
21
+
22
+ description: Mootools fake core
23
+
24
+ license: MIT-style license
25
+
26
+ authors:
27
+ - Valerio Proietti
28
+
29
+ provides: [Core]
30
+
31
+ ...
32
+ */
33
+ /*
34
+ ---
35
+
36
+ script: Color.js
37
+
38
+ description: A library to work with colors
39
+
40
+ license: MIT-style license
41
+
42
+ authors:
43
+ - Valerio Proietti
44
+
45
+ requires:
46
+ - Mootools/Core
47
+
48
+ provides: [Color]
49
+
50
+ ...
51
+ */
52
+ /*
53
+ ---
54
+
55
+ script: Input.Color.js
56
+
57
+ description: Cool colorpicker for everyone to enjoy
58
+
59
+ license: MIT-style license
60
+
61
+ authors:
62
+ - Yaroslaff Fedin
63
+
64
+ requires:
65
+ - Color
66
+
67
+ provides: [Input.Color]
68
+
69
+ ...
70
+ */
@@ -0,0 +1,14 @@
1
+ {
2
+ "Package": {
3
+ "requires": [
4
+
5
+ ],
6
+ "desc": "Jsus package with external dependency",
7
+ "provides": [
8
+ "Input",
9
+ "Color",
10
+ "Input.Color",
11
+ "Mootools/Core"
12
+ ]
13
+ }
14
+ }
@@ -0,0 +1,33 @@
1
+ {
2
+ "Widget": {
3
+ "Input": {
4
+ "Input.Color": {
5
+ "provides": [
6
+ "Input.Color"
7
+ ],
8
+ "requires": [
9
+ "Color"
10
+ ],
11
+ "desc": "Cool colorpicker for everyone to enjoy"
12
+ },
13
+ "provides": [
14
+ "Input"
15
+ ],
16
+ "requires": [
17
+
18
+ ],
19
+ "desc": "Generic Input"
20
+ }
21
+ },
22
+ "Library": {
23
+ "Color": {
24
+ "provides": [
25
+ "Color"
26
+ ],
27
+ "requires": [
28
+ "Mootools/Core"
29
+ ],
30
+ "desc": "A library to work with colors"
31
+ }
32
+ }
33
+ }
@@ -0,0 +1,19 @@
1
+ /*
2
+ ---
3
+
4
+ script: Color.js
5
+
6
+ description: A library to work with colors
7
+
8
+ license: MIT-style license
9
+
10
+ authors:
11
+ - Valerio Proietti
12
+
13
+ requires:
14
+ - Mootools/Core
15
+
16
+ provides: [Color]
17
+
18
+ ...
19
+ */
@@ -0,0 +1,20 @@
1
+ /*
2
+ ---
3
+
4
+ script: Input.Color.js
5
+
6
+ description: Cool colorpicker for everyone to enjoy
7
+
8
+ license: MIT-style license
9
+
10
+ authors:
11
+ - Yaroslaff Fedin
12
+
13
+ requires:
14
+ - Color
15
+ - Input
16
+
17
+ provides: [Input.Color]
18
+
19
+ ...
20
+ */
@@ -0,0 +1,16 @@
1
+ /*
2
+ ---
3
+
4
+ script: Input.js
5
+
6
+ description: Generic Input
7
+
8
+ license: MIT-style license
9
+
10
+ authors:
11
+ - Yaroslaff Fedin
12
+
13
+ provides: [Input]
14
+
15
+ ...
16
+ */
@@ -0,0 +1,10 @@
1
+ name: Package
2
+ filename: package.js
3
+ web: http://github.com/markiz/jsus
4
+ description: Jsus package with external dependency
5
+ license: Public Domain, http://unlicense.org/UNLICENSE
6
+ authors: Mark Abramov (http://github.com/markiz)
7
+ sources:
8
+ - "Source/Library/Color.js"
9
+ - "Source/Widget/Input/Input.Color.js"
10
+ - "Source/Widget/Input.js"
@@ -0,0 +1,20 @@
1
+ /*
2
+ ---
3
+
4
+ script: mooforge_quirky_source.js
5
+
6
+ description: plugin support file
7
+
8
+ license: UNLICENSE
9
+
10
+ authors:
11
+ - Mark Abramov
12
+
13
+ provides:
14
+ - Support
15
+
16
+ requires:
17
+ - mootools_core/1.3.0: Core
18
+
19
+ ...
20
+ */
@@ -0,0 +1,23 @@
1
+ /*
2
+ ---
3
+
4
+ script: Array.Extras.js
5
+
6
+ name: Array.Extras
7
+
8
+ description: Extends the Array native object to include useful methods to work with arrays.
9
+
10
+ license: MIT-style license
11
+
12
+ authors:
13
+ - Christoph Pojer
14
+ - Sebastian Markbåge
15
+
16
+ requires:
17
+ - Core/Array
18
+ - MooTools.More
19
+
20
+ provides: [Array.Extras]
21
+
22
+ ...
23
+ */
@@ -0,0 +1,23 @@
1
+ /*
2
+ ---
3
+
4
+ script: Array.Extras.js
5
+
6
+ name: Array.Extras
7
+
8
+ description: Extends the Array native object to include useful methods to work with arrays.
9
+
10
+ license: MIT-style license
11
+
12
+ authors:
13
+ - Christoph Pojer
14
+ - Sebastian Markbåge
15
+
16
+ requires:
17
+ - Core/Array
18
+ - MooTools.More
19
+
20
+ provides: [Array.Extras]
21
+
22
+ ...
23
+ */
@@ -0,0 +1,216 @@
1
+ require 'spec_helper'
2
+ require 'sinatra/base'
3
+ require 'rack/test'
4
+
5
+ describe Jsus::Middleware do
6
+ include Rack::Test::Methods
7
+ def new_server
8
+ Sinatra.new do
9
+ use Jsus::Middleware
10
+ set :port, 4567
11
+ set :raise_errors, true
12
+ set :show_exceptions, false
13
+ get("/") { "Ping" }
14
+ end
15
+ end
16
+
17
+ def suppress_output
18
+ old_stdout, old_stderr = $stdout, $stderr
19
+ $stdout, $stderr = IO.new('/dev/null'), IO.new('/dev/null')
20
+ yield
21
+ $stdout, $stderr = old_stdout, old_stderr
22
+ end
23
+
24
+ before(:all) do
25
+ @server = new_server
26
+ @server_thread = Thread.new { suppress_output { @server.run! } }
27
+ end
28
+
29
+ after(:all) { @server_thread.kill }
30
+
31
+ let(:app) { Rack::Lint.new(@server) }
32
+
33
+ it "should not override non-jsus calls" do
34
+ get("/").body.should == "Ping"
35
+ end
36
+
37
+ describe "settings" do
38
+ it "should have some defaults" do
39
+ described_class.settings.should be_a(Hash)
40
+ end
41
+
42
+ it "should merge settings, instead of full overriding on .settings=" do
43
+ described_class.settings = {:hello => :world}
44
+ described_class.settings = {:people => :worthless}
45
+ described_class.settings.should include({:hello => :world, :people => :worthless})
46
+ end
47
+ end
48
+
49
+ context "for basic package with an external dependency" do
50
+ let(:packages_dir) { File.expand_path("spec/data/ComplexDependencies") }
51
+ before(:each) { described_class.settings = {:packages_dir => packages_dir} }
52
+
53
+ describe "/javascripts/jsus/require/Package.js" do
54
+ let(:path) { "/javascripts/jsus/require/Package.js" }
55
+
56
+ it "should be successful" do
57
+ get(path).should be_successful
58
+ end
59
+
60
+ it "should respond with type text/javascript" do
61
+ get(path).content_type.should == "text/javascript"
62
+ end
63
+
64
+ it "should respond with generated package content" do
65
+ get(path).body.should include("script: Input.js")
66
+ get(path).body.should include("script: Color.js")
67
+ get(path).body.should include("script: Input.Color.js")
68
+ end
69
+
70
+ it "should include dependencies by default" do
71
+ get(path).body.should include("script: Core.js")
72
+ end
73
+
74
+ it "should preserve correct order" do
75
+ body = get(path).body
76
+ body.index("script: Core.js").should < body.index("script: Color.js")
77
+ body.index("script: Color.js").should < body.index("script: Input.Color.js")
78
+ body.index("script: Input.js").should < body.index("script: Input.Color.js")
79
+ end
80
+ end
81
+
82
+ describe "using ~Tags" do
83
+ let(:path) { "/javascripts/jsus/require/Package~Package:Color.js" }
84
+
85
+ it "should be successful" do
86
+ get(path).should be_successful
87
+ end
88
+
89
+ it "should respond with type text/javascript" do
90
+ get(path).content_type.should == "text/javascript"
91
+ end
92
+
93
+ it "should respond with generated content" do
94
+ get(path).body.should include("script: Input.Color.js")
95
+ end
96
+
97
+ it "should not include dependencies mentioned in exclude directive" do
98
+ get(path).body.should_not include("script: Color.js")
99
+ get(path).body.should_not include("script: Core.js")
100
+ end
101
+
102
+ it "should not fail when used with non-existent tag" do
103
+ result = get("/javascripts/jsus/require/Package~Package:Colorful.js")
104
+ result.should be_successful
105
+ result.body.should include("script: Input.Color.js")
106
+ end
107
+
108
+ it "should be chainable" do
109
+ result = get("/javascripts/jsus/require/Package~Mootools:Core~Package:Input.js")
110
+ result.should be_successful
111
+ result.body.should include("script: Input.Color.js")
112
+ result.body.should include("script: Color.js")
113
+ result.body.should_not include("script: Input.js")
114
+ result.body.should_not include("script: Core.js")
115
+ end
116
+ end
117
+
118
+ describe "using +Tags" do
119
+ let(:path) { "/javascripts/jsus/require/Package:Color+Package:Input.js" }
120
+
121
+ it "should be successful" do
122
+ get(path).should be_successful
123
+ end
124
+
125
+ it "should respond with type text/javascript" do
126
+ get(path).content_type.should == "text/javascript"
127
+ end
128
+
129
+ it "should respond with generated content" do
130
+ get(path).body.should include("script: Color.js")
131
+ get(path).body.should include("script: Input.js")
132
+ end
133
+
134
+ it "should not include files not mentioned in include directive" do
135
+ get(path).body.should_not include("script: Input.Color.js")
136
+ end
137
+
138
+ it "should not fail when used with non-existent tag" do
139
+ result = get("/javascripts/jsus/require/Package:Color+Package:Colorful.js")
140
+ result.should be_successful
141
+ result.body.should include("script: Color.js")
142
+ end
143
+
144
+ it "should be chainable" do
145
+ result = get("/javascripts/jsus/require/Package:Color+Package:Input~Mootools:Core.js")
146
+ result.should be_successful
147
+ result.body.should include("script: Input.js")
148
+ result.body.should include("script: Color.js")
149
+ result.body.should_not include("script: Input.Color.js")
150
+ result.body.should_not include("script: Core.js")
151
+ end
152
+ end
153
+
154
+ describe "/javascripts/jsus/require/Package:Input.Color.js" do
155
+ let(:path) { "/javascripts/jsus/require/Package:Input.Color.js" }
156
+
157
+ it "should be successful" do
158
+ get(path).should be_successful
159
+ end
160
+
161
+ it "should respond with type text/javascript" do
162
+ get(path).content_type.should == "text/javascript"
163
+ end
164
+
165
+ it "should respond with generated content" do
166
+ get(path).body.should include("script: Input.Color.js")
167
+ end
168
+
169
+ it "should include dependencies by default" do
170
+ get(path).body.should include("script: Color.js")
171
+ get(path).body.should include("script: Core.js")
172
+ end
173
+
174
+ it "should preserve correct order" do
175
+ body = get(path).body
176
+ body.index("script: Color.js").should < body.index("script: Input.Color.js")
177
+ body.index("script: Color.js").should > body.index("script: Core.js")
178
+ end
179
+ end
180
+ end
181
+
182
+ describe "for invalid paths" do
183
+ describe "when package is non-existent" do
184
+ let(:path) { "/javascripts/jsus/require/randomshit.js" }
185
+ it "should return 404" do
186
+ get(path).should be_not_found
187
+ end
188
+ end
189
+
190
+ describe "when required file is non-existent" do
191
+ let(:path) { "/javascripts/jsus/require/nonexistent:randomshit.js" }
192
+ it "should return 404" do
193
+ get(path).should be_not_found
194
+ end
195
+ end
196
+
197
+ describe "when given random gibberish" do
198
+ let(:path) { "/javascripts/jsus/require/+++---asda~~:sda_s+__+-dr928213dasasda=d%20%32%13__=_-=--/asa/sd/.asd13/.js" }
199
+ it "should return 404" do
200
+ get(path).should be_not_found
201
+ end
202
+ end
203
+ end
204
+
205
+ describe "caching" do
206
+ let(:cache_path) { "spec/tmp" }
207
+ before(:each) { Jsus::Middleware.settings = {:cache => true, :cache_path => cache_path} }
208
+ after(:each) { FileUtils.rm_rf(cache_path) }
209
+ let(:path) { "/javascripts/jsus/require/Package.js" }
210
+ it "should save output of requests to files" do
211
+ result = get(path).body
212
+ File.exists?("#{cache_path}/Package.js").should be_true
213
+ File.read("#{cache_path}/Package.js").should == result
214
+ end
215
+ end
216
+ end
@@ -31,7 +31,7 @@ describe Jsus::Package do
31
31
  end
32
32
 
33
33
  it "should set up outside dependencies" do
34
- subject.dependencies_names.should == ['core/Class']
34
+ subject.dependencies_names.should == ['Core/Class']
35
35
  end
36
36
 
37
37
  it "should set directory field" do
@@ -61,12 +61,12 @@ describe Jsus::Package do
61
61
  required_files = Dir["#{input_dir}/**/*.js"].map {|f| IO.read(f) }
62
62
  required_files.each {|f| compiled_content.should include(f)}
63
63
  end
64
-
64
+
65
65
  context "when given nil" do
66
66
  it "should not raise errors" do
67
67
  lambda { subject.compile(nil) }.should_not raise_error
68
68
  end
69
-
69
+
70
70
  it "should return a string with compiled content" do
71
71
  compiled_content = subject.compile(nil)
72
72
  required_files = Dir["#{input_dir}/**/*.js"].map {|f| IO.read(f) }
@@ -84,7 +84,7 @@ describe Jsus::Package do
84
84
  info["provides"].should have_exactly(4).items
85
85
  info["provides"].should include("Color", "Widget", "Input", "Input.Color")
86
86
  end
87
-
87
+
88
88
  context "when external dependencies are included" do
89
89
  let(:lib_dir) { "spec/data/ChainDependencies/app/javascripts" }
90
90
  let(:pool) { Jsus::Pool.new(lib_dir) }
@@ -122,7 +122,7 @@ describe Jsus::Package do
122
122
  tree["Widget"]["Input"]["Input.Color"]["requires"].should include("Input", "Color")
123
123
  tree["Widget"]["Input"]["Input.Color"]["provides"].should == ["Input.Color"]
124
124
  end
125
-
125
+
126
126
  it "should allow different filenames" do
127
127
  subject.generate_tree(output_dir, "structure.json")
128
128
  File.exists?("#{output_dir}/structure.json").should be_true
@@ -130,7 +130,7 @@ describe Jsus::Package do
130
130
  tree["Library"]["Color"]["provides"].should == ["Color"]
131
131
  end
132
132
  end
133
-
133
+
134
134
  describe "#required_files" do
135
135
  it "should list required files in correct order" do
136
136
  required_files = subject.required_files
@@ -174,4 +174,10 @@ describe Jsus::Package do
174
174
  end
175
175
 
176
176
  end
177
+
178
+ describe "#filename" do
179
+ it "should convert package name to snake_case" do
180
+ subject.filename.should == "orwik.js"
181
+ end
182
+ end
177
183
  end
@@ -1,3 +1,4 @@
1
+ # encoding: utf-8
1
2
  require 'spec_helper'
2
3
 
3
4
  describe Jsus::SourceFile do
@@ -34,12 +35,12 @@ describe Jsus::SourceFile do
34
35
  lambda { Jsus::SourceFile.from_file('spec/data/non-existant-file.js') }.should raise_error
35
36
  end
36
37
  end
37
-
38
+
38
39
  context "when some error happens" do
39
40
  it "should raise error" do
40
41
  YAML.stub!(:load) { raise "Could not parse the file!" }
41
42
  lambda { subject }.should raise_error(RuntimeError, /spec\/data\/test_source_one\.js/)
42
- end
43
+ end
43
44
  end
44
45
  end
45
46
 
@@ -56,6 +57,28 @@ describe Jsus::SourceFile do
56
57
  source.header.should == subject.header
57
58
  end
58
59
 
60
+ it "should not break on unicode files" do
61
+ source = nil
62
+ lambda { source = Jsus::SourceFile.from_file("spec/data/unicode_source.js") }.should_not raise_error
63
+ source.header["authors"][1].should == "Sebastian Markbåge"
64
+ end
65
+
66
+ it "should recognize and ignore BOM marker" do
67
+ source = nil
68
+ lambda { source = Jsus::SourceFile.from_file("spec/data/unicode_source_with_bom.js") }.should_not raise_error
69
+ source.header["authors"][1].should == "Sebastian Markbåge"
70
+ end
71
+
72
+ if defined?(Encoding) && Encoding.respond_to?(:default_external)
73
+ it "should not break on unicode files even when external encoding is set to non-utf" do
74
+ old_external = Encoding.default_external
75
+ Encoding.default_external = 'us-ascii'
76
+ source = nil
77
+ lambda { source = Jsus::SourceFile.from_file("spec/data/unicode_source.js") }.should_not raise_error
78
+ source.header["authors"][1].should == "Sebastian Markbåge"
79
+ Encoding.default_external = old_external
80
+ end
81
+ end
59
82
  end
60
83
 
61
84
  context "when no package set, " do
@@ -79,13 +102,13 @@ describe Jsus::SourceFile do
79
102
  subject.dependencies_names(:short => true).should == ["Class"]
80
103
  end
81
104
  end
82
-
105
+
83
106
  describe "#external_dependencies" do
84
107
  it "should be empty" do
85
108
  subject.external_dependencies.should be_empty
86
109
  end
87
110
  end
88
-
111
+
89
112
  describe "#external_dependencies_names" do
90
113
  it "should be empty" do
91
114
  subject.external_dependencies_names.should be_empty
@@ -126,18 +149,18 @@ describe Jsus::SourceFile do
126
149
  subject.dependencies_names(:short => true).should include("Class", "Mash/Mash")
127
150
  end
128
151
  end
129
-
152
+
130
153
  describe "#external_dependencies" do
131
- it "should include external dependencies" do
154
+ it "should include external dependencies" do
132
155
  subject.should have_exactly(1).external_dependencies
133
156
  subject.external_dependencies.should include(Jsus::Tag["Mash/Mash"])
134
157
  end
135
-
158
+
136
159
  it "should not include internal dependencies" do
137
160
  subject.external_dependencies.should_not include(Jsus::Tag["Orwik/Class"])
138
161
  end
139
162
  end
140
-
163
+
141
164
  describe "#external_dependencies_names" do
142
165
  it "should include names of external dependencies" do
143
166
  subject.external_dependencies_names.should include("Mash/Mash")
@@ -147,7 +170,7 @@ describe Jsus::SourceFile do
147
170
  subject.external_dependencies_names.should_not include("Orwik/Class")
148
171
  end
149
172
  end
150
-
173
+
151
174
  end
152
175
 
153
176
  context "when pool is not set, " do
@@ -259,18 +282,23 @@ describe Jsus::SourceFile do
259
282
  end
260
283
  end
261
284
  end
262
-
285
+
286
+ it "should allow quirky mooforge dependencies syntax" do
287
+ subject = described_class.from_file("spec/data/mooforge_quirky_source.js")
288
+ subject.dependencies_names.should == ["MootoolsCore/Core"]
289
+ end
290
+
263
291
  describe "#==, eql, hash" do
264
292
  it "should return true for source files pointing to the same physical file" do
265
293
  subject.should == described_class.from_file(subject.filename)
266
294
  subject.should eql(described_class.from_file(subject.filename))
267
295
  subject.hash.should == described_class.from_file(subject.filename).hash
268
296
  end
269
-
297
+
270
298
  it "should return false for source files pointing to different physical files" do
271
299
  subject.should_not == described_class.from_file("spec/data/Extensions/app/javascripts/Orwik/Extensions/Class.js")
272
300
  subject.should_not eql(described_class.from_file("spec/data/Extensions/app/javascripts/Orwik/Extensions/Class.js"))
273
301
  subject.hash.should_not == described_class.from_file("spec/data/Extensions/app/javascripts/Orwik/Extensions/Class.js").hash
274
- end
275
- end
276
- end
302
+ end
303
+ end
304
+ end
@@ -3,7 +3,7 @@ require 'spec_helper'
3
3
  describe Jsus::Tag do
4
4
  subject { Jsus::Tag.new("Wtf") }
5
5
 
6
- context "initialization" do
6
+ context "initialization" do
7
7
  it "should set given name" do
8
8
  Jsus::Tag.new("Wtf").name.should == "Wtf"
9
9
  end
@@ -45,6 +45,12 @@ describe Jsus::Tag do
45
45
  it "should return a given tag if given a tag" do
46
46
  Jsus::Tag.new(subject).should == subject
47
47
  end
48
+
49
+ it "should translate mooforge styled names into jsus-styled names" do
50
+ Jsus::Tag.new("mootools_core/Wtf").should == Jsus::Tag.new("MootoolsCore/Wtf")
51
+ Jsus::Tag.new("Effects.Fx/Hello.World").should == Jsus::Tag.new("EffectsFx/Hello.World")
52
+ Jsus::Tag.new("effects.fx/Wtf").should == Jsus::Tag.new("EffectsFx/Wtf")
53
+ end
48
54
  end
49
55
 
50
56
  describe "#name" do
@@ -106,7 +112,7 @@ describe Jsus::Tag do
106
112
  it "should return true when tag is empty" do
107
113
  Jsus::Tag.new("").should be_empty
108
114
  end
109
-
115
+
110
116
  it "should return false when tag is not empty" do
111
117
  Jsus::Tag.new("Core/Mash").should_not be_empty
112
118
  end