jsus 0.3.6 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) hide show
  1. data/.travis.yml +2 -0
  2. data/CHANGELOG +5 -0
  3. data/Gemfile +7 -4
  4. data/VERSION +1 -1
  5. data/bin/jsus +1 -5
  6. data/cucumber.yml +1 -1
  7. data/features/command-line/external_dependency_resolution.feature +4 -4
  8. data/features/command-line/generate_includes.feature +34 -0
  9. data/features/command-line/mooforge_compatibility_layer.feature +1 -1
  10. data/features/command-line/postproc.feature +12 -3
  11. data/features/command-line/structure_json.feature +5 -40
  12. data/features/data/ExternalDependencyWithExternalDependency/Leonardo/Source/Core.js +2 -2
  13. data/features/step_definitions/cli_steps.rb +15 -9
  14. data/features/support/env.rb +1 -1
  15. data/jsus.gemspec +25 -7
  16. data/lib/extensions/rgl.rb +2 -1
  17. data/lib/jsus/cli.rb +43 -27
  18. data/lib/jsus/container.rb +71 -51
  19. data/lib/jsus/middleware.rb +2 -3
  20. data/lib/jsus/package.rb +27 -129
  21. data/lib/jsus/packager.rb +10 -6
  22. data/lib/jsus/pool.rb +48 -20
  23. data/lib/jsus/source_file.rb +119 -198
  24. data/lib/jsus/tag.rb +72 -106
  25. data/lib/jsus/util.rb +14 -4
  26. data/lib/jsus/util/compressor.rb +1 -1
  27. data/lib/jsus/util/documenter.rb +1 -1
  28. data/lib/jsus/util/mixins.rb +7 -0
  29. data/lib/jsus/util/mixins/operates_on_sources.rb +29 -0
  30. data/lib/jsus/util/post_processor.rb +35 -0
  31. data/lib/jsus/util/post_processor/base.rb +32 -0
  32. data/lib/jsus/util/post_processor/moocompat12.rb +19 -0
  33. data/lib/jsus/util/post_processor/mooltie8.rb +19 -0
  34. data/lib/jsus/util/post_processor/semicolon.rb +18 -0
  35. data/lib/jsus/util/validator/base.rb +3 -23
  36. data/lib/jsus/util/watcher.rb +8 -6
  37. data/spec/data/Extensions/app/javascripts/Core/Source/Hash.js +13 -0
  38. data/spec/data/Extensions/app/javascripts/Core/Source/Mash.js +13 -0
  39. data/spec/data/Extensions/app/javascripts/Core/package.yml +3 -1
  40. data/spec/data/Extensions/app/javascripts/Orwik/Extensions/Mash.js +16 -0
  41. data/spec/data/Extensions/app/javascripts/Orwik/package.yml +2 -1
  42. data/spec/data/OutsideDependencies/app/javascripts/Orwik/package.yml +3 -3
  43. data/spec/data/SimpleSources/dependent_source_one.js +15 -0
  44. data/spec/data/SimpleSources/replacement_source_one.js +13 -0
  45. data/spec/data/SimpleSources/simple_source_one.js +13 -0
  46. data/spec/data/SimpleSources/simple_source_two.js +13 -0
  47. data/spec/data/extension_1.js +15 -0
  48. data/spec/data/extension_2.js +15 -0
  49. data/spec/data/replacement.js +15 -0
  50. data/spec/jsus/container_spec.rb +72 -14
  51. data/spec/jsus/package_spec.rb +10 -128
  52. data/spec/jsus/packager_spec.rb +11 -11
  53. data/spec/jsus/pool_spec.rb +13 -22
  54. data/spec/jsus/source_file_spec.rb +66 -215
  55. data/spec/jsus/tag_spec.rb +24 -69
  56. data/spec/jsus/util/documenter_spec.rb +1 -1
  57. data/spec/jsus/util/post_processor/moocompat12_spec.rb +23 -0
  58. data/spec/jsus/util/post_processor/mooltie8_spec.rb +23 -0
  59. data/spec/jsus/util/post_processor/semicolon_spec.rb +21 -0
  60. data/spec/jsus/util/post_processors/base_spec.rb +6 -0
  61. data/spec/jsus/util/tree_spec.rb +3 -3
  62. data/spec/jsus/util/validator/base_spec.rb +4 -2
  63. data/spec/jsus/util/watcher_spec.rb +12 -2
  64. data/spec/shared/mixins_segs.rb +38 -0
  65. data/spec/spec_helper.rb +6 -0
  66. metadata +28 -10
  67. data/features/data/tmp2/package.js +0 -35
  68. data/features/data/tmp2/scripts.json +0 -13
  69. data/features/data/tmp2/tree.json +0 -26
  70. data/lib/jsus/compiler.rb +0 -28
  71. data/spec/shared/class_stubs.rb +0 -31
@@ -1,13 +1,13 @@
1
1
  require 'spec_helper'
2
2
 
3
3
 
4
- describe Jsus::Packager do
5
- let(:simple_source) { Source.new(:provides => [0], :dependencies => [], :content => "// simple") }
6
- let(:another_simple_source) { Source.new(:provides => [1], :dependencies => [], :content => "// simple 2") }
7
- let(:dependant_source) { Source.new(:provides => [3], :dependencies => [0], :content => "// simple 3") }
4
+ describe Jsus::Packager do
5
+ let(:simple_source) { Jsus::SourceFile.from_file("spec/data/SimpleSources/simple_source_one.js", :namespace => "Test") }
6
+ let(:another_simple_source) { Jsus::SourceFile.from_file("spec/data/SimpleSources/simple_source_two.js", :namespace => "Test") }
7
+ let(:dependant_source) { Jsus::SourceFile.from_file("spec/data/SimpleSources/dependent_source_one.js", :namespace => "Test") }
8
8
 
9
- let(:simple_package) { Jsus::Packager.new(simple_source, another_simple_source) }
10
- let(:package_with_dependency) { Jsus::Packager.new(dependant_source, simple_source) }
9
+ let(:simple_package) { Jsus::Packager.new([simple_source, another_simple_source]) }
10
+ let(:package_with_dependency) { Jsus::Packager.new([dependant_source, simple_source]) }
11
11
 
12
12
  before(:each) { cleanup }
13
13
  after(:each) { cleanup }
@@ -20,18 +20,18 @@ describe Jsus::Packager do
20
20
  end
21
21
 
22
22
  describe "#pack" do
23
- subject { Jsus::Packager.new(simple_source) }
23
+ subject { Jsus::Packager.new(simple_source) }
24
24
  it "should concatenate source files" do
25
- simple_package.pack.should include(simple_source.content, another_simple_source.content)
25
+ simple_package.pack.should include(simple_source.source, another_simple_source.source)
26
26
  end
27
27
 
28
28
  it "should output to file if given a filename" do
29
29
  simple_package.pack("spec/tmp/test.js")
30
- IO.read("spec/tmp/test.js").should include(simple_source.content, another_simple_source.content)
30
+ IO.read("spec/tmp/test.js").should include(simple_source.source, another_simple_source.source)
31
31
  end
32
32
 
33
33
  it "should resolve dependencies" do
34
- package_with_dependency.pack.should == "#{simple_source.content}\n#{dependant_source.content}"
34
+ package_with_dependency.pack.should == "#{simple_source.source}\n#{dependant_source.source}"
35
35
  end
36
36
  end
37
- end
37
+ end
@@ -3,9 +3,9 @@ describe Jsus::Pool do
3
3
  let(:input_dir) { "spec/data/ChainDependencies/app/javascripts" }
4
4
  let(:packages) {
5
5
  [
6
- Jsus::Package.new("#{input_dir}/Mash", :pool => subject),
7
- Jsus::Package.new("#{input_dir}/Class", :pool => subject),
8
- Jsus::Package.new("#{input_dir}/Hash", :pool => subject)
6
+ Jsus::Package.new("#{input_dir}/Mash"),
7
+ Jsus::Package.new("#{input_dir}/Class"),
8
+ Jsus::Package.new("#{input_dir}/Hash")
9
9
  ]
10
10
  }
11
11
 
@@ -34,7 +34,7 @@ describe Jsus::Pool do
34
34
 
35
35
  it "should add all the source files to pool" do
36
36
  subject.should have_exactly(3).sources
37
- subject.sources.map {|s| s.provides_names }.flatten.should include("Mash/Mash", "Hash/Hash", "Class/Class")
37
+ subject.sources.map {|s| s.provides.map {|tag| tag.to_s } }.flatten.should include("Mash/Mash", "Hash/Hash", "Class/Class")
38
38
  end
39
39
 
40
40
  it "should keep track of extensions" do
@@ -56,9 +56,7 @@ describe Jsus::Pool do
56
56
 
57
57
 
58
58
  describe "#lookup" do
59
- before(:each) do
60
- packages.each {|package| subject << package.source_files }
61
- end
59
+ before(:each) { packages.each {|package| subject << package} }
62
60
 
63
61
  it "should find a source file providing given full name" do
64
62
  subject.lookup("Class/Class").should == sources[1]
@@ -71,13 +69,6 @@ describe Jsus::Pool do
71
69
  it "should allow tags" do
72
70
  subject.lookup(Jsus::Tag["Class/Class"]).should == sources[1]
73
71
  end
74
-
75
- it "should return replacements whenever possible" do
76
- pkg = Jsus::Package.new("spec/data/ClassReplacement", :pool => subject)
77
- subject << pkg.source_files
78
- subject.lookup("Class/Class").should == pkg.source_files[0]
79
- subject.lookup(Jsus::Tag["Class/Class"]).should == pkg.source_files[0]
80
- end
81
72
  end
82
73
 
83
74
  describe "#lookup_direct_dependencies" do
@@ -104,8 +95,8 @@ describe Jsus::Pool do
104
95
  end
105
96
 
106
97
  it "should return a container with files and dependencies" do
107
- subject.lookup_dependencies("Mash/Mash").should == [sources[1], sources[2]]
108
- subject.lookup_dependencies(Jsus::Tag["Mash/Mash"]).should == [sources[1], sources[2]]
98
+ subject.lookup_dependencies("Mash/Mash").should =~ [sources[1], sources[2]]
99
+ subject.lookup_dependencies(Jsus::Tag["Mash/Mash"]).should =~ [sources[1], sources[2]]
109
100
  end
110
101
 
111
102
  it "should return empty array if pool doesn't contain given source" do
@@ -117,7 +108,7 @@ describe Jsus::Pool do
117
108
  let(:input_dir) { "spec/data/DependenciesWildcards/app/javascripts" }
118
109
 
119
110
  it "should support wildcards" do
120
- subject.lookup_dependencies("Mash/Mash").should == [sources[1], sources[2]]
111
+ subject.lookup_dependencies("Mash/Mash").should =~ [sources[1], sources[2]]
121
112
  end
122
113
  end
123
114
  end
@@ -136,14 +127,14 @@ describe Jsus::Pool do
136
127
  let(:input_dir) { "spec/data/Extensions/app/javascripts" }
137
128
  subject { Jsus::Pool.new(input_dir) }
138
129
 
139
- it "should return empty array if there's not a single extension for given tag" do
140
- subject.lookup_extensions("Core/WTF").should be_empty
141
- subject.lookup_extensions(Jsus::Tag["Core/WTF"]).should be_empty
130
+ it "should return empty array if there's not a single extension for given file" do
131
+ source = Jsus::SourceFile.from_file("spec/data/test_source_one.js", :namespace => "Test")
132
+ subject.lookup_extensions(source).should be_empty
142
133
  end
143
134
 
144
135
  it "should return an array with extensions if there are extensions for given tag" do
145
- subject.lookup_extensions("Core/Class").should have_exactly(1).item
146
- subject.lookup_extensions(Jsus::Tag["Core/Class"]).should have_exactly(1).item
136
+ source = subject.lookup("Core/Class")
137
+ subject.lookup_extensions(source).should_not be_empty
147
138
  end
148
139
  end
149
140
 
@@ -4,57 +4,49 @@ require 'spec_helper'
4
4
  describe Jsus::SourceFile do
5
5
  before(:each) { cleanup }
6
6
  after(:all) { cleanup }
7
- let(:package) { Package.new(:name => "Core") }
8
- subject { Jsus::SourceFile.from_file("spec/data/OutsideDependencies/app/javascripts/Core/Source/Class/Class.Extras.js", :package => package) }
7
+ let(:filename) { "spec/data/OutsideDependencies/app/javascripts/Core/Source/Class/Class.Extras.js" }
8
+ subject { Jsus::SourceFile.from_file(filename) }
9
9
  context "initialization" do
10
10
  context "from file" do
11
11
  subject { Jsus::SourceFile.from_file('spec/data/test_source_one.js') }
12
- it "should parse json header" do
13
- subject.dependencies_names.should == ["Class"]
14
- subject.provides_names.should == ["Color"]
15
- subject.description.should == "A library to work with colors"
16
- end
17
12
 
18
13
  it "should set filename field to expanded file name" do
19
14
  subject.filename.should == File.expand_path("spec/data/test_source_one.js")
20
15
  end
21
16
 
22
- it "should set original_content to file content" do
23
- subject.original_content.should == File.read(subject.filename)
17
+ it "should set original_source to file content" do
18
+ subject.original_source.should == File.read(subject.filename)
24
19
  end
25
20
 
26
- context "when format is invalid" do
27
- it "should raise error" do
28
- lambda { Jsus::SourceFile.from_file('spec/data/bad_test_source_one.js') }.should raise_error
29
- lambda { Jsus::SourceFile.from_file('spec/data/bad_test_source_two.js') }.should raise_error
30
- end
21
+ it "should parse the header" do
22
+ subject.header["license"].should == "MIT-style license"
23
+ subject.header["description"].should == "A library to work with colors"
31
24
  end
32
25
 
33
- context "when file does not exist" do
34
- it "should raise error" do
35
- lambda { Jsus::SourceFile.from_file('spec/data/non-existant-file.js') }.should raise_error
26
+ context "when that file is problematic" do
27
+ before(:each) { Jsus.logger.level = Logger::FATAL }
28
+ after(:each) { Jsus.logger.level = Logger::WARN }
29
+ context "when format is invalid" do
30
+ it "should raise error" do
31
+ lambda { Jsus::SourceFile.from_file('spec/data/bad_test_source_one.js') }.should raise_error
32
+ lambda { Jsus::SourceFile.from_file('spec/data/bad_test_source_two.js') }.should raise_error
33
+ end
36
34
  end
37
- end
38
35
 
39
- context "when some error happens" do
40
- it "should raise error" do
41
- YAML.stub!(:load) { raise "Could not parse the file!" }
42
- lambda { subject }.should raise_error(RuntimeError, /spec\/data\/test_source_one\.js/)
36
+ context "when file does not exist" do
37
+ it "should raise error" do
38
+ lambda { Jsus::SourceFile.from_file('spec/data/non-existant-file.js') }.should raise_error
39
+ end
40
+ end
41
+
42
+ context "when some error happens" do
43
+ it "should raise error and mention filename" do
44
+ YAML.stub!(:load) { raise "Could not parse the file!" }
45
+ lambda { subject }.should raise_error(RuntimeError, %r{spec/data/test_source_one\.js})
46
+ end
43
47
  end
44
- end
45
- end
46
48
 
47
- it "should set all available fields from constructor" do
48
- source = Jsus::SourceFile.new(:package => package,
49
- :content => subject.content,
50
- :filename => subject.filename,
51
- :relative_filename => subject.relative_filename,
52
- :header => subject.header)
53
- source.package.should == package
54
- source.content.should == subject.content
55
- source.filename.should == subject.filename
56
- source.relative_filename.should == subject.relative_filename
57
- source.header.should == subject.header
49
+ end
58
50
  end
59
51
 
60
52
  it "should not break on unicode files" do
@@ -69,6 +61,24 @@ describe Jsus::SourceFile do
69
61
  source.header["authors"][1].should == "Sebastian Markbåge"
70
62
  end
71
63
 
64
+ it "should parse 'requires', 'provides', 'extends' and 'replaces' fields of the header" do
65
+ subject.requires.should == [Jsus::Tag["Class"]]
66
+ subject.provides.should =~ [Jsus::Tag["Chain"], Jsus::Tag["Events"], Jsus::Tag["Options"]]
67
+ subject.replaces.should be_nil
68
+ subject.extends.should be_nil
69
+ end
70
+
71
+ it "should use assigned namespace for internal dependencies" do
72
+ subject = described_class.from_file(filename, :namespace => "Core")
73
+ subject.requires.should == [Jsus::Tag["Core/Class"]]
74
+ subject.provides.should == [Jsus::Tag["Core/Chain"], Jsus::Tag["Core/Events"], Jsus::Tag["Core/Options"]]
75
+ end
76
+
77
+ it "should accept namespace in options" do
78
+ described_class.from_file("spec/data/test_source_one.js").namespace.should == nil
79
+ described_class.from_file("spec/data/test_source_one.js", :namespace => "Core").namespace.should == "Core"
80
+ end
81
+
72
82
  if defined?(Encoding) && Encoding.respond_to?(:default_external)
73
83
  it "should not break on unicode files even when external encoding is set to non-utf" do
74
84
  old_external = Encoding.default_external
@@ -81,146 +91,6 @@ describe Jsus::SourceFile do
81
91
  end
82
92
  end
83
93
 
84
- context "when no package set, " do
85
- subject { Jsus::SourceFile.from_file("spec/data/test_source_one.js") }
86
- describe "#package" do
87
- it "should return nil" do
88
- subject.package.should be_nil
89
- end
90
- end
91
-
92
- describe "#provides_names" do
93
- it "should return names without leading slash in both forms" do
94
- subject.provides_names.should == ["Color"]
95
- subject.provides_names(:short => true).should == ["Color"]
96
- end
97
- end
98
-
99
- describe "#dependencies_names" do
100
- it "should return names without leading slash in both forms" do
101
- subject.dependencies_names.should == ["Class"]
102
- subject.dependencies_names(:short => true).should == ["Class"]
103
- end
104
- end
105
-
106
- describe "#external_dependencies" do
107
- it "should be empty" do
108
- subject.external_dependencies.should be_empty
109
- end
110
- end
111
-
112
- describe "#external_dependencies_names" do
113
- it "should be empty" do
114
- subject.external_dependencies_names.should be_empty
115
- end
116
- end
117
- end
118
-
119
- context "when it is in package, " do
120
- let(:package) { Jsus::Package.new("spec/data/ExternalDependencies/app/javascripts/Orwik") }
121
- subject { package.source_files[0] }
122
- describe "#package" do
123
- it "should return the package" do
124
- subject.package.should == package
125
- end
126
- end
127
-
128
- describe "#provides_names" do
129
- it "should prepend package name by default and when explicitly asked for long form" do
130
- subject.provides_names.should == ["Orwik/Test"]
131
- subject.provides_names(:short => false).should == ["Orwik/Test"]
132
- end
133
-
134
- it "shouldn't prepend package name in short form" do
135
- subject.provides_names(:short => true).should == ["Test"]
136
- end
137
- end
138
-
139
- describe "#dependencies_names" do
140
- it "should prepend package names to inner dependencies by default and when explicitly asked for long form" do
141
- subject.should have_exactly(2).dependencies_names
142
- subject.dependencies_names.should include("Orwik/Class", "Mash/Mash")
143
- subject.should have_exactly(2).dependencies_names(:short => false)
144
- subject.dependencies_names(:short => false).should include("Orwik/Class", "Mash/Mash")
145
- end
146
-
147
- it "should not prepend package names to inner dependencies in short form" do
148
- subject.should have_exactly(2).dependencies_names(:short => true)
149
- subject.dependencies_names(:short => true).should include("Class", "Mash/Mash")
150
- end
151
- end
152
-
153
- describe "#external_dependencies" do
154
- it "should include external dependencies" do
155
- subject.should have_exactly(1).external_dependencies
156
- subject.external_dependencies.should include(Jsus::Tag["Mash/Mash"])
157
- end
158
-
159
- it "should not include internal dependencies" do
160
- subject.external_dependencies.should_not include(Jsus::Tag["Orwik/Class"])
161
- end
162
- end
163
-
164
- describe "#external_dependencies_names" do
165
- it "should include names of external dependencies" do
166
- subject.external_dependencies_names.should include("Mash/Mash")
167
- end
168
-
169
- it "should not include names of internal dependencies" do
170
- subject.external_dependencies_names.should_not include("Orwik/Class")
171
- end
172
- end
173
-
174
- end
175
-
176
- context "when pool is not set, " do
177
- subject { Jsus::SourceFile.from_file("spec/data/Extensions/app/javascripts/Core/Source/Class.js", :package => Package.new(:name => "Core")) }
178
- describe "#pool" do
179
- it "should return nil" do
180
- subject.pool.should be_nil
181
- end
182
- end
183
-
184
- describe "#include_extensions!" do
185
- it "should do nothing" do
186
- lambda {
187
- subject.include_extensions!
188
- }.should_not change(subject, :extensions)
189
- end
190
- end
191
- end
192
-
193
- context "when pool is set, " do
194
- let(:pool) { Jsus::Pool.new("spec/data/Extensions/app/javascripts") }
195
- subject { Jsus::SourceFile.from_file("spec/data/Extensions/app/javascripts/Core/Source/Class.js", :pool => pool, :package => Package.new(:name => "Core")) }
196
- describe "#pool" do
197
- it "should return the pool" do
198
- subject.pool.should == pool
199
- end
200
- end
201
-
202
- context "and there are extensions for subject in its pool, " do
203
- describe "#include_extensions!" do
204
- it "should add all extensions to @extensions" do
205
- subject.extensions.should be_empty
206
- subject.include_extensions!
207
- subject.extensions.should have_exactly(1).item
208
- end
209
- end
210
- end
211
-
212
- context "and there are no extensions for subject in its pool, " do
213
- let(:pool) { Jsus::Pool.new }
214
- describe "#include_extensions!" do
215
- it "should add all extensions to @extensions" do
216
- lambda {
217
- subject.include_extensions!
218
- }.should_not change(subject, :extensions)
219
- end
220
- end
221
- end
222
- end
223
-
224
94
  context "when it is not an extension, " do
225
95
  subject { Jsus::SourceFile.from_file("spec/data/Extensions/app/javascripts/Core/Source/Class.js") }
226
96
 
@@ -241,51 +111,16 @@ describe Jsus::SourceFile do
241
111
  end
242
112
  end
243
113
 
244
- context "when there are no extensions, " do
245
- let(:input_dir) { "spec/data/Extensions/app/javascripts" }
246
- subject { Jsus::SourceFile.from_file("#{input_dir}/Core/Source/Class.js")}
247
-
248
- describe "#required_files" do
249
- it "should have only the filename itself" do
250
- subject.required_files.should == [subject.filename]
251
- end
252
- end
253
- end
254
-
255
- context "when there are extensions, " do
256
- let(:input_dir) { "spec/data/Extensions/app/javascripts" }
257
- let(:extension) { Jsus::SourceFile.from_file("#{input_dir}/Orwik/Extensions/Class.js") }
258
- subject { Jsus::SourceFile.from_file("#{input_dir}/Core/Source/Class.js")}
259
- let(:initial_content) { subject.content }
260
- before(:each) { initial_content; subject.extensions << extension }
261
-
262
- describe "#required_files" do
263
- it "should include source_file filename itself" do
264
- subject.required_files.should include(subject.filename)
265
- end
266
-
267
- it "should include extensions filenames" do
268
- subject.required_files.should include(extension.filename)
269
- end
270
-
271
- it "should put the subject's filename first" do
272
- subject.required_files[0].should == subject.filename
273
- end
274
- end
275
-
276
- describe "#content" do
277
- it "should have extensions applied to the initial file content" do
278
- subject.content.should_not == initial_content
279
- subject.content.index(initial_content).should_not be_nil
280
- subject.content.index(extension.content).should_not be_nil
281
- subject.content.index(initial_content).should < subject.content.index(extension.content)
282
- end
114
+ describe "#required_files" do
115
+ it "should include original source" do
116
+ subject = described_class.from_file(filename)
117
+ subject.required_files.should == [File.expand_path(filename)]
283
118
  end
284
119
  end
285
120
 
286
121
  it "should allow quirky mooforge dependencies syntax" do
287
122
  subject = described_class.from_file("spec/data/mooforge_quirky_source.js")
288
- subject.dependencies_names.should == ["MootoolsCore/Core"]
123
+ subject.dependencies.map {|d| d.to_s }.should == ["MootoolsCore/Core"]
289
124
  end
290
125
 
291
126
  describe "#==, eql, hash" do
@@ -301,4 +136,20 @@ describe Jsus::SourceFile do
301
136
  subject.hash.should_not == described_class.from_file("spec/data/Extensions/app/javascripts/Orwik/Extensions/Class.js").hash
302
137
  end
303
138
  end
139
+
140
+ describe "#to_hash" do
141
+ subject { described_class.from_file(filename, :namespace => "Core") }
142
+ it "should include shortened provides tags" do
143
+ subject.to_hash["provides"].should =~ ["Chain", "Events", "Options"]
144
+ end
145
+
146
+ it "should include shortened requirement tags for local dependencies" do
147
+ subject.to_hash["requires"].should == ["Class"]
148
+ end
149
+
150
+ it "should include full-form requirement tags for external dependencies" do
151
+ subject = described_class.from_file("spec/data/OutsideDependencies/app/javascripts/Orwik/Source/Widget/Widget.js", :namespace => "Orwik")
152
+ subject.to_hash["requires"].should == ["Core/Class"]
153
+ end
154
+ end
304
155
  end