forked from sproutit/sproutcore-abbot
-
Notifications
You must be signed in to change notification settings - Fork 1
/
package_spec.rb
172 lines (127 loc) · 4.89 KB
/
package_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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
require File.join(File.dirname(__FILE__), 'spec_helper')
describe SC::Builder::PackageExports do
include SC::SpecHelpers
include SC::BuilderSpecHelper
before do
std_before :module_test
@target.config.load_debug = false
@target.config.theme = nil
@target.config.timestamp_urls = false
@manifest.build!
@entry = @manifest.entry_for('package_exports.js')
end
after do
@entry = nil
std_after
end
it "should generate a JS file with package exports" do
@entry.build!
path = @entry.build_path
File.exist?(path).should be_true
code = File.read(path)
# verify key points...
code.should =~ /#{Regexp.escape("tiki.module('#{@entry.manifest.package_id}:index'")}/
# should only define exports for foo & bar
# other exports are defined in the fixture but not at package level
exports = code.scan(/exports\.([^=]+)=/).flatten.map { |x| x.strip }.sort
exports.should == %w(bar foo)
#should only import core
#other files are included but not with package exports
imports = code.scan(/require\(\s?'([^']+)'\s?\)/).flatten.sort
imports.should == %w(module_test:core)
# should register script ID
code.should =~ /#{Regexp.escape("tiki.script('#{@entry.script_id}')")}/
end
end
describe SC::Builder::PackageInfo do
include SC::SpecHelpers
include SC::BuilderSpecHelper
before do
std_before :package_test
@target.config.load_debug = false
@target.config.theme = nil
@target.config.timestamp_urls = false
end
after do
@entry = nil
std_after
end
def prep
@manifest.build!
if @target.config.combine_javascript
@entry = @manifest.entry_for('package_info.js', :hidden => true)
else
@entry = @manifest.entry_for('package_info.js')
end
@entry.should_not be_nil
# get JS entries. omit the combined entry if we are not combining
script_entries = @manifest.entries.select do |x|
(x.entry_type == :javascript) &&
(@target.config.combine_javascript || x.filename != 'javascript.js')
end
# get JS entries. omit the combined entry if we are not combining
style_entries = @manifest.entries.select do |x|
(x.entry_type == :css) &&
(@target.config.combine_stylesheets || x.filename != 'stylesheet.css')
end
return [script_entries, style_entries]
end
def verify_entry(script_entries, style_entries)
@entry.build!
path = @entry.build_path
File.exist?(path).should be_true
code = File.read(path)
#puts code
# should register package info
package_id = @entry.manifest.package_id
code.should =~ /#{Regexp.escape("tiki.register('#{package_id}',")}/
# should register dynamic dependency separately
# should mention that this is external...
code.gsub("\n", '').should =~ /#{Regexp.escape("tiki.register('::req_target_2")}.+"tiki:external":\s+true/
# let's get the package info JSON and verifiy it
require 'json'
# make a single line for regex
info = code.gsub("\n", '').scan(/#{Regexp.escape("tiki.register('#{package_id}',")}\s?(\{.+\})\s?\);.+tiki\./).flatten.first
info = JSON.parse(info)
info.should_not be_nil
# should explicitly name required dependency
info['dependencies'].should == { "req_target_1" => '~' } # hard dependency
# verify resources - collect scripts & styles
info_resources = info['tiki:resources'];
info_resources.should_not be_nil
info_scripts = []
info_styles = []
info_resources.each do |x|
if x['type'] == 'script'
info_scripts << x
elsif x['type'] == 'stylesheet'
info_styles << x
end
end
info_scripts.map { |x| x['url'] }.sort.should == script_entries.map { |x| x.cacheable_url }.sort
info_scripts.map { |x| x['id'] }.sort.should == script_entries.map { |x| x.script_id }.sort
# verify stlyes
info_styles.map { |x| x['url'] }.sort.should == style_entries.map { |x| x.cacheable_url }.sort
info_styles.map { |x| x['id'] }.sort.should == style_entries.map { |x| x.script_id }.sort
# should register script ID
if @target.config.combine_javascript == false
code.should =~ /#{Regexp.escape("tiki.script('#{@entry.script_id}')")}/
end
end
it "should generate a JS file with package info" do
@target.config.combine_javascript = false
@target.config.combine_stylesheets = false
script_entries, style_entries = prep
script_entries.size.should > 1
style_entries.size.should > 1
verify_entry(script_entries, style_entries)
end
it "should generate a combined JS file with package info" do
@target.config.combine_javascript = true
@target.config.combine_stylesheets = true
script_entries, style_entries = prep
script_entries.size.should == 1
style_entries.size.should == 1
verify_entry(script_entries, style_entries)
end
end