sitefuel 0.0.0a
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/README +86 -0
- data/RELEASE_NOTES +7 -0
- data/bin/sitefuel +162 -0
- data/lib/sitefuel/Configuration.rb +35 -0
- data/lib/sitefuel/SiteFuelLogger.rb +128 -0
- data/lib/sitefuel/SiteFuelRuntime.rb +293 -0
- data/lib/sitefuel/extensions/ArrayComparisons.rb +34 -0
- data/lib/sitefuel/extensions/DynamicClassMethods.rb +19 -0
- data/lib/sitefuel/extensions/FileComparison.rb +24 -0
- data/lib/sitefuel/extensions/Silently.rb +27 -0
- data/lib/sitefuel/extensions/StringFormatting.rb +75 -0
- data/lib/sitefuel/extensions/SymbolComparison.rb +13 -0
- data/lib/sitefuel/external/AbstractExternalProgram.rb +616 -0
- data/lib/sitefuel/external/ExternalProgramTestCase.rb +67 -0
- data/lib/sitefuel/external/GIT.rb +9 -0
- data/lib/sitefuel/external/JPEGTran.rb +68 -0
- data/lib/sitefuel/external/PNGCrush.rb +66 -0
- data/lib/sitefuel/processors/AbstractExternalProgramProcessor.rb +72 -0
- data/lib/sitefuel/processors/AbstractProcessor.rb +378 -0
- data/lib/sitefuel/processors/AbstractStringBasedProcessor.rb +88 -0
- data/lib/sitefuel/processors/CSSProcessor.rb +84 -0
- data/lib/sitefuel/processors/HAMLProcessor.rb +52 -0
- data/lib/sitefuel/processors/HTMLProcessor.rb +211 -0
- data/lib/sitefuel/processors/JavaScriptProcessor.rb +57 -0
- data/lib/sitefuel/processors/PHPProcessor.rb +32 -0
- data/lib/sitefuel/processors/PNGProcessor.rb +80 -0
- data/lib/sitefuel/processors/RHTMLProcessor.rb +25 -0
- data/lib/sitefuel/processors/SASSProcessor.rb +50 -0
- data/test/processor_listing.rb +28 -0
- data/test/test_AbstractExternalProgram.rb +186 -0
- data/test/test_AbstractProcessor.rb +237 -0
- data/test/test_AbstractStringBasedProcessor.rb +48 -0
- data/test/test_AllProcessors.rb +65 -0
- data/test/test_ArrayComparisons.rb +32 -0
- data/test/test_CSSProcessor.rb +120 -0
- data/test/test_FileComparisons.rb +42 -0
- data/test/test_HAMLProcessor.rb.rb +60 -0
- data/test/test_HTMLProcessor.rb +186 -0
- data/test/test_JPEGTran.rb +40 -0
- data/test/test_JavaScriptProcessor.rb +63 -0
- data/test/test_PHPProcessor.rb +51 -0
- data/test/test_PNGCrush.rb +58 -0
- data/test/test_PNGProcessor.rb +32 -0
- data/test/test_RHTMLProcessor.rb +62 -0
- data/test/test_SASSProcessor.rb +68 -0
- data/test/test_SiteFuelLogging.rb +79 -0
- data/test/test_SiteFuelRuntime.rb +96 -0
- data/test/test_StringFormatting.rb +51 -0
- data/test/test_SymbolComparison.rb +27 -0
- data/test/test_images/sample_jpg01.jpg +0 -0
- data/test/test_images/sample_png01.png +0 -0
- data/test/test_programs/versioning.rb +26 -0
- data/test/test_sites/simplehtml/deployment.yml +22 -0
- data/test/test_sites/simplehtml/index.html +66 -0
- data/test/test_sites/simplehtml/style.css +40 -0
- data/test/ts_all.rb +39 -0
- metadata +165 -0
@@ -0,0 +1,186 @@
|
|
1
|
+
#
|
2
|
+
# File:: test_AbstractExternalProgram.rb
|
3
|
+
# Author:: wkm
|
4
|
+
# Copyright:: 2009
|
5
|
+
# License:: GPL
|
6
|
+
#
|
7
|
+
# Unit tests for the AbstractExternalProgram wrapper.
|
8
|
+
#
|
9
|
+
|
10
|
+
$:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
|
11
|
+
|
12
|
+
require 'test/unit'
|
13
|
+
|
14
|
+
require 'sitefuel/external/AbstractExternalProgram'
|
15
|
+
|
16
|
+
include SiteFuel::External
|
17
|
+
|
18
|
+
# a wrapper around a generic program
|
19
|
+
class BashProgram < AbstractExternalProgram
|
20
|
+
def self.program_name
|
21
|
+
'bash'
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
# a wrapper around a program which hopefully doesn't exist ;)
|
26
|
+
class BadProgram < AbstractExternalProgram
|
27
|
+
def self.program_name
|
28
|
+
'foo183127cowsaydog'
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
class TestProgramA < AbstractExternalProgram
|
33
|
+
def self.program_name
|
34
|
+
'./test/test_programs/versioning.rb'
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.compatible_versions
|
38
|
+
'> 0.1'
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
class TestProgramB < TestProgramA
|
43
|
+
def self.option_version
|
44
|
+
'--version-2'
|
45
|
+
end
|
46
|
+
|
47
|
+
def self.compatible_versions
|
48
|
+
'> 0.1.2'
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
class TestProgramC < TestProgramA
|
53
|
+
def self.option_version
|
54
|
+
'--version-3'
|
55
|
+
end
|
56
|
+
|
57
|
+
def self.compatible_versions
|
58
|
+
'> 0.1.5'
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
class TestProgramD < TestProgramA
|
63
|
+
def self.option_version
|
64
|
+
'--version-4'
|
65
|
+
end
|
66
|
+
|
67
|
+
def self.compatible_versions
|
68
|
+
'> 0.5.2'
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
class TestExternalProgram < Test::Unit::TestCase
|
73
|
+
|
74
|
+
def test_program_finding
|
75
|
+
assert BashProgram.program_found?
|
76
|
+
assert_equal false, BadProgram.program_found?
|
77
|
+
|
78
|
+
assert TestProgramA.program_found?, 'Couldn\'t find test program "versioning.rb"'
|
79
|
+
end
|
80
|
+
|
81
|
+
def test_getting_program_version
|
82
|
+
|
83
|
+
# no real point testing against the bash version, who knows
|
84
|
+
# what they're running; just make sure we can get a version
|
85
|
+
assert_not_nil BashProgram.program_version
|
86
|
+
|
87
|
+
assert_equal '0.1.2', TestProgramA.program_version
|
88
|
+
assert_equal '0.1.2asdad', TestProgramB.program_version
|
89
|
+
assert_equal '0.2', TestProgramC.program_version
|
90
|
+
assert_equal '0.1.2', TestProgramD.program_version
|
91
|
+
|
92
|
+
end
|
93
|
+
|
94
|
+
def test_compatible_version
|
95
|
+
assert TestProgramA.compatible_version?
|
96
|
+
assert TestProgramB.compatible_version?
|
97
|
+
assert TestProgramC.compatible_version?
|
98
|
+
assert_equal false, TestProgramD.compatible_version?
|
99
|
+
end
|
100
|
+
|
101
|
+
def test_version_less?
|
102
|
+
|
103
|
+
# practical tests
|
104
|
+
assert AbstractExternalProgram.version_older?('1.5', '1.5')
|
105
|
+
|
106
|
+
assert AbstractExternalProgram.version_older?('1.5', '1.5.10')
|
107
|
+
|
108
|
+
assert !AbstractExternalProgram.version_older?('1.5', '1.4')
|
109
|
+
|
110
|
+
assert AbstractExternalProgram.version_older?('1.5', '1.5a')
|
111
|
+
assert AbstractExternalProgram.version_older?('1.5', '1.5A')
|
112
|
+
assert AbstractExternalProgram.version_older?('1.5', '1.5.a')
|
113
|
+
assert AbstractExternalProgram.version_older?('1.5', '1.5.A')
|
114
|
+
|
115
|
+
assert AbstractExternalProgram.version_older?('1.5', '1.51')
|
116
|
+
assert AbstractExternalProgram.version_older?('1.5', '1.5.1')
|
117
|
+
assert AbstractExternalProgram.version_older?('1.5', '1.5.0')
|
118
|
+
|
119
|
+
assert AbstractExternalProgram.version_older?('1.5', '2')
|
120
|
+
assert AbstractExternalProgram.version_older?('1.5', '2.0')
|
121
|
+
assert AbstractExternalProgram.version_older?('1.5', '2.1')
|
122
|
+
assert AbstractExternalProgram.version_older?('1.5', '5.1.5')
|
123
|
+
|
124
|
+
assert AbstractExternalProgram.version_older?('1.5.2', '1.5.2')
|
125
|
+
assert AbstractExternalProgram.version_older?('1.5.2', '1.5.3')
|
126
|
+
assert AbstractExternalProgram.version_older?('1.5.2', '1.5.2')
|
127
|
+
assert AbstractExternalProgram.version_older?('1.5.2', '1.6')
|
128
|
+
assert AbstractExternalProgram.version_older?('1.5.2', '2')
|
129
|
+
|
130
|
+
assert !AbstractExternalProgram.version_older?('1.5.2', '1.5')
|
131
|
+
|
132
|
+
assert !AbstractExternalProgram.version_older?('1a', '1')
|
133
|
+
end
|
134
|
+
|
135
|
+
def test_test_version_number
|
136
|
+
assert AbstractExternalProgram.test_version_number('> 1.5', '1.5')
|
137
|
+
assert AbstractExternalProgram.test_version_number('> 1.5', '1.5.10')
|
138
|
+
|
139
|
+
assert AbstractExternalProgram.test_version_number(['> 1.5'], '1.5.10')
|
140
|
+
end
|
141
|
+
|
142
|
+
def test_option_organizing
|
143
|
+
assert_equal [], AbstractExternalProgram.organize_options()
|
144
|
+
assert_equal [[:a],[:b],[:c]], AbstractExternalProgram.organize_options(:a, :b, :c)
|
145
|
+
assert_equal(
|
146
|
+
[[:a], [:b, 'val'], [:c]],
|
147
|
+
AbstractExternalProgram.organize_options(:a,
|
148
|
+
:b, 'val',
|
149
|
+
:c)
|
150
|
+
)
|
151
|
+
|
152
|
+
assert_equal(
|
153
|
+
[[:a, 'val1'], [:b, 'val2'], [:c, 'val3']],
|
154
|
+
AbstractExternalProgram.organize_options(:a, 'val1',
|
155
|
+
:b, 'val2',
|
156
|
+
:c, 'val3')
|
157
|
+
)
|
158
|
+
|
159
|
+
assert_equal(
|
160
|
+
[[:a, 'val1', 'val2']],
|
161
|
+
AbstractExternalProgram.organize_options(:a, 'val1', 'val2')
|
162
|
+
)
|
163
|
+
end
|
164
|
+
|
165
|
+
|
166
|
+
def test_option_creation
|
167
|
+
# here we want to test the sanity checks that are preformed when an option
|
168
|
+
# is created
|
169
|
+
|
170
|
+
# if there is a default there must be ${value} slot
|
171
|
+
assert_raises NoOptionValueSlot do
|
172
|
+
TestProgramA.option(:option1, '--someflag', 'defaultvalue')
|
173
|
+
end
|
174
|
+
|
175
|
+
# make sure the option wasn't added
|
176
|
+
assert !TestProgramA.options.include?(:option1)
|
177
|
+
|
178
|
+
# if there is a ${value} slot and no default, the option must
|
179
|
+
# have a value when it's being set
|
180
|
+
assert_nothing_raised { TestProgramA.option(:optionNoDef, '--someopt ${value}') }
|
181
|
+
assert_raises NoValueForOption do
|
182
|
+
TestProgramA.execute(:optionNoDef)
|
183
|
+
end
|
184
|
+
end
|
185
|
+
|
186
|
+
end
|
@@ -0,0 +1,237 @@
|
|
1
|
+
#
|
2
|
+
# File:: test_AbstractProcessor.rb
|
3
|
+
# Author:: wkm
|
4
|
+
# Copyright:: 2009
|
5
|
+
# License:: GPL
|
6
|
+
#
|
7
|
+
# Unit tests for the AbstractProcessor
|
8
|
+
#
|
9
|
+
|
10
|
+
$:.unshift File.join(File.dirname(__FILE__),'..','lib')
|
11
|
+
|
12
|
+
require 'test/unit'
|
13
|
+
require 'sitefuel/SiteFuelLogger'
|
14
|
+
require 'sitefuel/processors/AbstractProcessor'
|
15
|
+
|
16
|
+
require 'sitefuel/extensions/SymbolComparison'
|
17
|
+
|
18
|
+
include SiteFuel
|
19
|
+
include SiteFuel::Processor
|
20
|
+
|
21
|
+
class TestAProcessor < AbstractProcessor
|
22
|
+
def filter_a; end
|
23
|
+
def filter_b; end
|
24
|
+
def filter_c; end
|
25
|
+
def filter_long_name; end
|
26
|
+
|
27
|
+
def self.file_patterns
|
28
|
+
[".testA", ".test-a", ".test.a", "_test_a"]
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.default_filterset
|
32
|
+
:normal
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.filterset_normal
|
36
|
+
[:a, :b]
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.filterset_heavy
|
40
|
+
[:a, :b, :c]
|
41
|
+
end
|
42
|
+
|
43
|
+
def self.filterset_light
|
44
|
+
[:a]
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
class TestBProcessor < AbstractProcessor
|
49
|
+
def self.file_patterns
|
50
|
+
[/tpb.*fitz/, ".tpb"]
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
class TestAbstractProcessor < Test::Unit::TestCase
|
55
|
+
|
56
|
+
def test_filters
|
57
|
+
assert_equal [:a, :b, :c, :long_name], TestAProcessor.filters
|
58
|
+
|
59
|
+
ta = TestAProcessor.new
|
60
|
+
assert_nil ta.run_filter(:a)
|
61
|
+
assert_nil ta.run_filter(:b)
|
62
|
+
assert_nil ta.run_filter(:long_name)
|
63
|
+
|
64
|
+
assert_raise UnknownFilter do
|
65
|
+
ta.run_filter(:foo)
|
66
|
+
end
|
67
|
+
|
68
|
+
assert_equal [], TestBProcessor.filters
|
69
|
+
end
|
70
|
+
|
71
|
+
def test_file_patterns_01
|
72
|
+
assert TestAProcessor.processes_file?(".testA")
|
73
|
+
assert TestAProcessor.processes_file?(".test-a")
|
74
|
+
assert TestAProcessor.processes_file?(".test.a")
|
75
|
+
assert TestAProcessor.processes_file?("_test_a")
|
76
|
+
|
77
|
+
assert TestAProcessor.processes_file?("foo.testA")
|
78
|
+
assert TestAProcessor.processes_file?("foo.testa")
|
79
|
+
assert TestAProcessor.processes_file?("foo.test-a")
|
80
|
+
assert TestAProcessor.processes_file?("foo.test.a")
|
81
|
+
assert TestAProcessor.processes_file?("foo_test_a")
|
82
|
+
|
83
|
+
assert_equal false, TestAProcessor.processes_file?("footestA")
|
84
|
+
assert_equal false, TestAProcessor.processes_file?(":")
|
85
|
+
assert_equal false, TestAProcessor.processes_file?("testA")
|
86
|
+
assert_equal false, TestAProcessor.processes_file?("XtestA")
|
87
|
+
assert_equal false, TestAProcessor.processes_file?("XtestXA")
|
88
|
+
end
|
89
|
+
|
90
|
+
def test_file_patterns_02
|
91
|
+
# file extension tests
|
92
|
+
assert TestBProcessor.processes_file?("test.tpb")
|
93
|
+
assert TestBProcessor.processes_file?("foo.tpb")
|
94
|
+
|
95
|
+
# regexp file name test
|
96
|
+
assert TestBProcessor.processes_file?("tpb.foofoofitz")
|
97
|
+
assert_equal false, TestBProcessor.processes_file?("TPB.foofoofitz")
|
98
|
+
end
|
99
|
+
|
100
|
+
def test_processor_names
|
101
|
+
assert_equal "TestA", TestAProcessor.processor_name
|
102
|
+
assert_equal "TestB", TestBProcessor.processor_name
|
103
|
+
end
|
104
|
+
|
105
|
+
def test_processor_logging
|
106
|
+
log = SiteFuelLogger.instance
|
107
|
+
proc = TestAProcessor.new
|
108
|
+
|
109
|
+
log.level = Logger::UNKNOWN
|
110
|
+
|
111
|
+
# test fatal messages
|
112
|
+
fatal = log.fatal_count
|
113
|
+
proc.fatal 'Fatal error: fatal errors don\'t cause program halt.'
|
114
|
+
assert_equal fatal+1, log.fatal_count
|
115
|
+
|
116
|
+
# test error messages
|
117
|
+
error = log.error_count
|
118
|
+
proc.error 'Error: brain malfunction: cannot find Creativity.'
|
119
|
+
assert_equal error+1, log.error_count
|
120
|
+
|
121
|
+
# test warning messages
|
122
|
+
warn = log.warn_count
|
123
|
+
proc.warn 'Warning: impending doom...!'
|
124
|
+
assert_equal warn+1, log.warn_count
|
125
|
+
|
126
|
+
# test info messages
|
127
|
+
info = log.info_count
|
128
|
+
proc.info 'It\'s 77oC outside.'
|
129
|
+
assert_equal info+1, log.info_count
|
130
|
+
|
131
|
+
# test debugging messages
|
132
|
+
debug = log.debug_count
|
133
|
+
proc.debug 'testing the value of "i" :P'
|
134
|
+
assert_equal debug+1, log.debug_count
|
135
|
+
end
|
136
|
+
|
137
|
+
# filter set testing
|
138
|
+
def test_filtersets
|
139
|
+
assert_equal [:heavy, :light, :normal, :ignore].sort, TestAProcessor.filtersets.sort
|
140
|
+
assert_equal :normal, TestAProcessor.default_filterset
|
141
|
+
|
142
|
+
assert_equal [:a,:b], TestAProcessor.filters_in_filterset(:normal)
|
143
|
+
assert_equal [:a,:b,:c], TestAProcessor.filters_in_filterset(:heavy)
|
144
|
+
assert_equal [:a], TestAProcessor.filters_in_filterset(:light)
|
145
|
+
end
|
146
|
+
|
147
|
+
# execution list testing
|
148
|
+
def test_execution_list
|
149
|
+
a = TestAProcessor.new
|
150
|
+
|
151
|
+
# with normal filters
|
152
|
+
assert_equal [:b], a.add_filter(:b)
|
153
|
+
assert_equal [:b, :a], a.add_filter(:a)
|
154
|
+
assert_equal [:b, :a], a.execution_list
|
155
|
+
|
156
|
+
assert_equal [:b, :a, :c], a.add_filter(:c)
|
157
|
+
assert_equal [:b, :a, :c], a.execution_list
|
158
|
+
|
159
|
+
assert_equal [:a, :c], a.drop_filter(:b)
|
160
|
+
assert_equal [:c], a.drop_filter(:a)
|
161
|
+
assert_equal [], a.drop_filter(:c)
|
162
|
+
|
163
|
+
assert_equal [:c], a.add_filter(:c)
|
164
|
+
assert_equal [:c, :b], a.add_filter(:b)
|
165
|
+
|
166
|
+
assert_equal [], a.clear_filters
|
167
|
+
assert_equal [], a.execution_list
|
168
|
+
|
169
|
+
|
170
|
+
# test filter sets
|
171
|
+
assert_equal [:a,:b], a.add_filterset(:normal)
|
172
|
+
assert_equal [], a.clear_filters
|
173
|
+
assert_equal [], a.execution_list
|
174
|
+
|
175
|
+
assert_equal [:a,:b,:c], a.add_filterset(:heavy)
|
176
|
+
assert_equal [], a.clear_filters
|
177
|
+
assert_equal [], a.execution_list
|
178
|
+
|
179
|
+
# test filters *and* filter sets
|
180
|
+
assert_equal [:c], a.add_filter(:c)
|
181
|
+
assert_equal [:c, :a], a.add_filterset(:light)
|
182
|
+
assert_equal [], a.clear_filters
|
183
|
+
assert_equal [], a.execution_list
|
184
|
+
|
185
|
+
assert_equal [:a,:b], a.add_filterset(:normal)
|
186
|
+
assert_equal [:a,:b,:c], a.add_filter(:c)
|
187
|
+
assert_equal [], a.clear_filters
|
188
|
+
assert_equal [], a.execution_list
|
189
|
+
end
|
190
|
+
|
191
|
+
# configuration testing
|
192
|
+
def test_config_filters
|
193
|
+
a = TestAProcessor.new
|
194
|
+
|
195
|
+
a.configure({:filters => :a})
|
196
|
+
assert_equal [:a], a.execution_list
|
197
|
+
|
198
|
+
# test that filters are cleared before being set
|
199
|
+
a.configure({:filters => :b})
|
200
|
+
assert_equal [:b], a.execution_list
|
201
|
+
|
202
|
+
# test that filters aren't changed if they're not set
|
203
|
+
# a.configure({})
|
204
|
+
# assert_equal [:b], a.execution_list
|
205
|
+
|
206
|
+
a.configure({:filters => [:a]})
|
207
|
+
assert_equal [:a], a.execution_list
|
208
|
+
|
209
|
+
a.configure({:filters => [:a, :b]})
|
210
|
+
assert_equal [:a,:b], a.execution_list
|
211
|
+
|
212
|
+
a.configure({:filtersets => [:light]})
|
213
|
+
assert_equal [:a], a.execution_list
|
214
|
+
|
215
|
+
a.configure({:filtersets => :normal})
|
216
|
+
assert_equal [:a,:b], a.execution_list
|
217
|
+
|
218
|
+
# note: since we're doing #each_pair on a hash, order is not guaranteed,
|
219
|
+
# hence the #sort
|
220
|
+
a.configure({:filters => [:c], :filtersets => :light})
|
221
|
+
assert_equal [:c,:a].sort, a.execution_list.sort
|
222
|
+
|
223
|
+
a.configure({:filtersets => :ignore})
|
224
|
+
assert_equal [], a.execution_list
|
225
|
+
end
|
226
|
+
|
227
|
+
def test_config_resource_name
|
228
|
+
a = TestAProcessor.new
|
229
|
+
a.configure :resource_name => 'foo.file'
|
230
|
+
assert_equal 'foo.file', a.resource_name
|
231
|
+
end
|
232
|
+
|
233
|
+
# test attempts to add unknown filters/filtersets
|
234
|
+
def test_config_filters_negative
|
235
|
+
|
236
|
+
end
|
237
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
#
|
2
|
+
# File:: test_AbstractStringBasedProcessor.rb
|
3
|
+
# Author:: wkm
|
4
|
+
# Copyright:: 2009
|
5
|
+
# License:: GPL
|
6
|
+
#
|
7
|
+
# Unit tests for the string-based processor abstraction
|
8
|
+
#
|
9
|
+
|
10
|
+
$:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
|
11
|
+
|
12
|
+
require 'test/unit'
|
13
|
+
require 'tempfile'
|
14
|
+
require 'sitefuel/processors/AbstractStringBasedProcessor'
|
15
|
+
|
16
|
+
include SiteFuel::Processor
|
17
|
+
|
18
|
+
class StringProc1 < AbstractStringBasedProcessor
|
19
|
+
def self.default_filterset
|
20
|
+
:typical
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.filterset_typical
|
24
|
+
[:test]
|
25
|
+
end
|
26
|
+
|
27
|
+
def filter_test
|
28
|
+
@document = @document.gsub('hello', 'goodbye')
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
class TestAbstractStringBasedProcessor < Test::Unit::TestCase
|
34
|
+
def test_processor_type
|
35
|
+
assert 'String', StringProc1.processor_type
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_process_file
|
39
|
+
# create a test file to process
|
40
|
+
tf = Tempfile.new('abstract-string-based-processor.txt')
|
41
|
+
File.open(tf.path, 'w') do |f|
|
42
|
+
f.write('hello world')
|
43
|
+
end
|
44
|
+
|
45
|
+
proc = StringProc1.process_file(tf.path)
|
46
|
+
assert_equal 'goodbye world', proc.document
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
#
|
2
|
+
# File:: test_AllProcessors.rb
|
3
|
+
# Author:: wkm
|
4
|
+
# Copyright:: 2009
|
5
|
+
# License:: GPL
|
6
|
+
#
|
7
|
+
# Programmatic tests run against all processors
|
8
|
+
#
|
9
|
+
|
10
|
+
$:.unshift File.join(File.dirname(__FILE__),'..','lib')
|
11
|
+
|
12
|
+
require 'test/unit'
|
13
|
+
require 'sitefuel/SiteFuelRuntime'
|
14
|
+
require 'sitefuel/processors/AbstractStringBasedProcessor'
|
15
|
+
|
16
|
+
include SiteFuel
|
17
|
+
|
18
|
+
class TestAllProcessors < Test::Unit::TestCase
|
19
|
+
|
20
|
+
def setup
|
21
|
+
SiteFuelRuntime.load_processors
|
22
|
+
@processors = SiteFuelRuntime.
|
23
|
+
find_processors.
|
24
|
+
delete_if do |proc|
|
25
|
+
proc.to_s =~ /.*Test.*Processor/
|
26
|
+
end
|
27
|
+
|
28
|
+
@string_processors = Processor::AbstractStringBasedProcessor.
|
29
|
+
find_processors.
|
30
|
+
delete_if do |proc|
|
31
|
+
proc.to_s =~ /.*Test.*Processor/
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
# ensure that every filter in every filter set is known
|
36
|
+
def test_filter_sets
|
37
|
+
@processors.each do |proc|
|
38
|
+
proc.filtersets.each do |filterset|
|
39
|
+
proc.filters_in_filterset(filterset).each do |filter|
|
40
|
+
assert(
|
41
|
+
proc.filter?(filter),
|
42
|
+
'Filter %s in filterset %s isn\'t known for %s' %
|
43
|
+
[filter, filterset, proc]
|
44
|
+
)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
# test that every processor has a default filterset
|
51
|
+
def test_default_filter_sets
|
52
|
+
@processors.each do |proc|
|
53
|
+
assert proc.filterset?(proc.default_filterset), 'Default filterset %s for %s isn\'t known'%[proc.default_filterset, proc]
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
# test that every string based processor's filters can handle the empty string
|
58
|
+
def test_string_based_empty_string
|
59
|
+
@string_processors.each do |proc|
|
60
|
+
proc.filters.each do |filter|
|
61
|
+
assert_nothing_raised { proc.filter_string(filter, '') }
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
#
|
2
|
+
# File:: test_ArrayComparisons.rb
|
3
|
+
# Author:: wkm
|
4
|
+
# Copyright:: 2009
|
5
|
+
# License:: GPL
|
6
|
+
#
|
7
|
+
# Unit tests for the Array#ends_with? method.
|
8
|
+
#
|
9
|
+
|
10
|
+
$:.unshift File.join(File.dirname(__FILE__),'..','lib')
|
11
|
+
|
12
|
+
require 'test/unit'
|
13
|
+
require 'sitefuel/extensions/ArrayComparisons'
|
14
|
+
|
15
|
+
class TestArrayComparisons < Test::Unit::TestCase
|
16
|
+
def test_ends_with
|
17
|
+
|
18
|
+
# positive tests
|
19
|
+
assert [1, 2, 3].ends_with?([2,3])
|
20
|
+
assert [1, 2, 3].ends_with?([])
|
21
|
+
assert [1, 2, 3].ends_with?([1, 2, 3])
|
22
|
+
|
23
|
+
assert [].ends_with?([])
|
24
|
+
assert [1].ends_with?([1])
|
25
|
+
|
26
|
+
# negative tests
|
27
|
+
assert ![1, 2, 3].ends_with?([1, 2])
|
28
|
+
assert ![].ends_with?([1])
|
29
|
+
assert ![1, 2, 3].ends_with?([1, 2, 3, 4])
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,120 @@
|
|
1
|
+
#
|
2
|
+
# File:: test_CSSProcessor.rb
|
3
|
+
# Author:: wkm
|
4
|
+
# Copyright:: 2009
|
5
|
+
# License:: GPL
|
6
|
+
#
|
7
|
+
# Unit tests for the CSSProcessor
|
8
|
+
#
|
9
|
+
|
10
|
+
$:.unshift File.join(File.dirname(__FILE__),'..','lib')
|
11
|
+
|
12
|
+
require 'test/unit'
|
13
|
+
require 'sitefuel/processors/CSSProcessor'
|
14
|
+
require 'sitefuel/extensions/StringFormatting'
|
15
|
+
|
16
|
+
include SiteFuel::Processor
|
17
|
+
|
18
|
+
class TestCSSProcessor < Test::Unit::TestCase
|
19
|
+
def test_file_extensions
|
20
|
+
|
21
|
+
# negative tests
|
22
|
+
assert_equal false, CSSProcessor.processes_file?("testcss")
|
23
|
+
assert_equal false, CSSProcessor.processes_file?("test.css.foo")
|
24
|
+
|
25
|
+
# positive tests
|
26
|
+
assert CSSProcessor.processes_file?("test.css")
|
27
|
+
assert CSSProcessor.processes_file?("test.CSS")
|
28
|
+
assert CSSProcessor.processes_file?("test.CsS")
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_name
|
32
|
+
assert_equal "CSS", CSSProcessor.processor_name
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_filter_strip_comments
|
36
|
+
assert_equal(
|
37
|
+
"\nbody {\n margin: 5em; \n//\n}\n",
|
38
|
+
CSSProcessor.filter_string(
|
39
|
+
:strip_comments,
|
40
|
+
%q{
|
41
|
+
// this is a line comment on its own
|
42
|
+
body {
|
43
|
+
margin: 5em; // at the end of a line
|
44
|
+
/* and here
|
45
|
+
is a multi-line comment... */
|
46
|
+
}
|
47
|
+
}.align
|
48
|
+
)
|
49
|
+
)
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_filter_clean_whitespace
|
53
|
+
assert_equal(
|
54
|
+
"body {\n// here's a little line comment. We want to be sure\n// it isn't mashed with the margin stuff below.\nmargin: 5em;\n}\n",
|
55
|
+
CSSProcessor.filter_string(
|
56
|
+
:clean_whitespace,
|
57
|
+
%q{
|
58
|
+
body {
|
59
|
+
// here's a little line comment. We want to be sure
|
60
|
+
// it isn't mashed with the margin stuff below.
|
61
|
+
margin: 5em;
|
62
|
+
}
|
63
|
+
}.align
|
64
|
+
)
|
65
|
+
)
|
66
|
+
|
67
|
+
|
68
|
+
# finally, let's test the strip_comments and clean_whitespace filters
|
69
|
+
# all together. (and incidentally test giving #filter_string an array)
|
70
|
+
assert_equal(
|
71
|
+
"body {\nmargin: 5em;\n}\n",
|
72
|
+
CSSProcessor.filter_string(
|
73
|
+
[:strip_comments, :clean_whitespace],
|
74
|
+
%q{
|
75
|
+
body {
|
76
|
+
// here's a little line comment. We want to be sure
|
77
|
+
// it isn't mashed with the margin stuff below.
|
78
|
+
margin: 5em;
|
79
|
+
}
|
80
|
+
}.align
|
81
|
+
)
|
82
|
+
)
|
83
|
+
end
|
84
|
+
|
85
|
+
# note that minification is based on CSSMin, so it's not too heavily tested
|
86
|
+
def test_minify
|
87
|
+
# test: whitespace removal; hexcode compaction; comment stripping
|
88
|
+
assert_equal(
|
89
|
+
"body{color:#000;}",
|
90
|
+
CSSProcessor.filter_string(
|
91
|
+
:minify,
|
92
|
+
<<-END
|
93
|
+
body {
|
94
|
+
/* comments should be stripped */
|
95
|
+
color: #000000;
|
96
|
+
}
|
97
|
+
END
|
98
|
+
)
|
99
|
+
)
|
100
|
+
|
101
|
+
assert_equal(
|
102
|
+
"h1 .header{color:white;margin:0;font-family:\"lucida grande\",lucida,verdana,sans-serif;}a:hover{text-decoration:none;}",
|
103
|
+
CSSProcessor.filter_string(
|
104
|
+
:minify,
|
105
|
+
<<-END
|
106
|
+
h1 .header
|
107
|
+
{
|
108
|
+
color: white;
|
109
|
+
margin: 0 0 0 0;
|
110
|
+
font-family: "lucida grande", lucida, verdana, sans-serif;
|
111
|
+
}
|
112
|
+
|
113
|
+
a:hover {
|
114
|
+
text-decoration: none;
|
115
|
+
}
|
116
|
+
END
|
117
|
+
)
|
118
|
+
)
|
119
|
+
end
|
120
|
+
end
|