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.
- data/.travis.yml +2 -0
- data/CHANGELOG +5 -0
- data/Gemfile +7 -4
- data/VERSION +1 -1
- data/bin/jsus +1 -5
- data/cucumber.yml +1 -1
- data/features/command-line/external_dependency_resolution.feature +4 -4
- data/features/command-line/generate_includes.feature +34 -0
- data/features/command-line/mooforge_compatibility_layer.feature +1 -1
- data/features/command-line/postproc.feature +12 -3
- data/features/command-line/structure_json.feature +5 -40
- data/features/data/ExternalDependencyWithExternalDependency/Leonardo/Source/Core.js +2 -2
- data/features/step_definitions/cli_steps.rb +15 -9
- data/features/support/env.rb +1 -1
- data/jsus.gemspec +25 -7
- data/lib/extensions/rgl.rb +2 -1
- data/lib/jsus/cli.rb +43 -27
- data/lib/jsus/container.rb +71 -51
- data/lib/jsus/middleware.rb +2 -3
- data/lib/jsus/package.rb +27 -129
- data/lib/jsus/packager.rb +10 -6
- data/lib/jsus/pool.rb +48 -20
- data/lib/jsus/source_file.rb +119 -198
- data/lib/jsus/tag.rb +72 -106
- data/lib/jsus/util.rb +14 -4
- data/lib/jsus/util/compressor.rb +1 -1
- data/lib/jsus/util/documenter.rb +1 -1
- data/lib/jsus/util/mixins.rb +7 -0
- data/lib/jsus/util/mixins/operates_on_sources.rb +29 -0
- data/lib/jsus/util/post_processor.rb +35 -0
- data/lib/jsus/util/post_processor/base.rb +32 -0
- data/lib/jsus/util/post_processor/moocompat12.rb +19 -0
- data/lib/jsus/util/post_processor/mooltie8.rb +19 -0
- data/lib/jsus/util/post_processor/semicolon.rb +18 -0
- data/lib/jsus/util/validator/base.rb +3 -23
- data/lib/jsus/util/watcher.rb +8 -6
- data/spec/data/Extensions/app/javascripts/Core/Source/Hash.js +13 -0
- data/spec/data/Extensions/app/javascripts/Core/Source/Mash.js +13 -0
- data/spec/data/Extensions/app/javascripts/Core/package.yml +3 -1
- data/spec/data/Extensions/app/javascripts/Orwik/Extensions/Mash.js +16 -0
- data/spec/data/Extensions/app/javascripts/Orwik/package.yml +2 -1
- data/spec/data/OutsideDependencies/app/javascripts/Orwik/package.yml +3 -3
- data/spec/data/SimpleSources/dependent_source_one.js +15 -0
- data/spec/data/SimpleSources/replacement_source_one.js +13 -0
- data/spec/data/SimpleSources/simple_source_one.js +13 -0
- data/spec/data/SimpleSources/simple_source_two.js +13 -0
- data/spec/data/extension_1.js +15 -0
- data/spec/data/extension_2.js +15 -0
- data/spec/data/replacement.js +15 -0
- data/spec/jsus/container_spec.rb +72 -14
- data/spec/jsus/package_spec.rb +10 -128
- data/spec/jsus/packager_spec.rb +11 -11
- data/spec/jsus/pool_spec.rb +13 -22
- data/spec/jsus/source_file_spec.rb +66 -215
- data/spec/jsus/tag_spec.rb +24 -69
- data/spec/jsus/util/documenter_spec.rb +1 -1
- data/spec/jsus/util/post_processor/moocompat12_spec.rb +23 -0
- data/spec/jsus/util/post_processor/mooltie8_spec.rb +23 -0
- data/spec/jsus/util/post_processor/semicolon_spec.rb +21 -0
- data/spec/jsus/util/post_processors/base_spec.rb +6 -0
- data/spec/jsus/util/tree_spec.rb +3 -3
- data/spec/jsus/util/validator/base_spec.rb +4 -2
- data/spec/jsus/util/watcher_spec.rb +12 -2
- data/spec/shared/mixins_segs.rb +38 -0
- data/spec/spec_helper.rb +6 -0
- metadata +28 -10
- data/features/data/tmp2/package.js +0 -35
- data/features/data/tmp2/scripts.json +0 -13
- data/features/data/tmp2/tree.json +0 -26
- data/lib/jsus/compiler.rb +0 -28
- data/spec/shared/class_stubs.rb +0 -31
data/spec/jsus/packager_spec.rb
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
|
4
|
-
describe Jsus::Packager do
|
5
|
-
let(:simple_source) {
|
6
|
-
let(:another_simple_source) {
|
7
|
-
let(:dependant_source) {
|
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.
|
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.
|
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.
|
34
|
+
package_with_dependency.pack.should == "#{simple_source.source}\n#{dependant_source.source}"
|
35
35
|
end
|
36
36
|
end
|
37
|
-
end
|
37
|
+
end
|
data/spec/jsus/pool_spec.rb
CHANGED
@@ -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"
|
7
|
-
Jsus::Package.new("#{input_dir}/Class"
|
8
|
-
Jsus::Package.new("#{input_dir}/Hash"
|
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.
|
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)
|
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
|
108
|
-
subject.lookup_dependencies(Jsus::Tag["Mash/Mash"]).should
|
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
|
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
|
140
|
-
|
141
|
-
subject.lookup_extensions(
|
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.
|
146
|
-
subject.lookup_extensions(
|
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(:
|
8
|
-
subject { Jsus::SourceFile.from_file(
|
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
|
23
|
-
subject.
|
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
|
-
|
27
|
-
|
28
|
-
|
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
|
34
|
-
|
35
|
-
|
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
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
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
|
-
|
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
|
-
|
245
|
-
|
246
|
-
|
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.
|
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
|