jsus 0.3.6 → 0.4.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 (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