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.
Files changed (57) hide show
  1. data/README +86 -0
  2. data/RELEASE_NOTES +7 -0
  3. data/bin/sitefuel +162 -0
  4. data/lib/sitefuel/Configuration.rb +35 -0
  5. data/lib/sitefuel/SiteFuelLogger.rb +128 -0
  6. data/lib/sitefuel/SiteFuelRuntime.rb +293 -0
  7. data/lib/sitefuel/extensions/ArrayComparisons.rb +34 -0
  8. data/lib/sitefuel/extensions/DynamicClassMethods.rb +19 -0
  9. data/lib/sitefuel/extensions/FileComparison.rb +24 -0
  10. data/lib/sitefuel/extensions/Silently.rb +27 -0
  11. data/lib/sitefuel/extensions/StringFormatting.rb +75 -0
  12. data/lib/sitefuel/extensions/SymbolComparison.rb +13 -0
  13. data/lib/sitefuel/external/AbstractExternalProgram.rb +616 -0
  14. data/lib/sitefuel/external/ExternalProgramTestCase.rb +67 -0
  15. data/lib/sitefuel/external/GIT.rb +9 -0
  16. data/lib/sitefuel/external/JPEGTran.rb +68 -0
  17. data/lib/sitefuel/external/PNGCrush.rb +66 -0
  18. data/lib/sitefuel/processors/AbstractExternalProgramProcessor.rb +72 -0
  19. data/lib/sitefuel/processors/AbstractProcessor.rb +378 -0
  20. data/lib/sitefuel/processors/AbstractStringBasedProcessor.rb +88 -0
  21. data/lib/sitefuel/processors/CSSProcessor.rb +84 -0
  22. data/lib/sitefuel/processors/HAMLProcessor.rb +52 -0
  23. data/lib/sitefuel/processors/HTMLProcessor.rb +211 -0
  24. data/lib/sitefuel/processors/JavaScriptProcessor.rb +57 -0
  25. data/lib/sitefuel/processors/PHPProcessor.rb +32 -0
  26. data/lib/sitefuel/processors/PNGProcessor.rb +80 -0
  27. data/lib/sitefuel/processors/RHTMLProcessor.rb +25 -0
  28. data/lib/sitefuel/processors/SASSProcessor.rb +50 -0
  29. data/test/processor_listing.rb +28 -0
  30. data/test/test_AbstractExternalProgram.rb +186 -0
  31. data/test/test_AbstractProcessor.rb +237 -0
  32. data/test/test_AbstractStringBasedProcessor.rb +48 -0
  33. data/test/test_AllProcessors.rb +65 -0
  34. data/test/test_ArrayComparisons.rb +32 -0
  35. data/test/test_CSSProcessor.rb +120 -0
  36. data/test/test_FileComparisons.rb +42 -0
  37. data/test/test_HAMLProcessor.rb.rb +60 -0
  38. data/test/test_HTMLProcessor.rb +186 -0
  39. data/test/test_JPEGTran.rb +40 -0
  40. data/test/test_JavaScriptProcessor.rb +63 -0
  41. data/test/test_PHPProcessor.rb +51 -0
  42. data/test/test_PNGCrush.rb +58 -0
  43. data/test/test_PNGProcessor.rb +32 -0
  44. data/test/test_RHTMLProcessor.rb +62 -0
  45. data/test/test_SASSProcessor.rb +68 -0
  46. data/test/test_SiteFuelLogging.rb +79 -0
  47. data/test/test_SiteFuelRuntime.rb +96 -0
  48. data/test/test_StringFormatting.rb +51 -0
  49. data/test/test_SymbolComparison.rb +27 -0
  50. data/test/test_images/sample_jpg01.jpg +0 -0
  51. data/test/test_images/sample_png01.png +0 -0
  52. data/test/test_programs/versioning.rb +26 -0
  53. data/test/test_sites/simplehtml/deployment.yml +22 -0
  54. data/test/test_sites/simplehtml/index.html +66 -0
  55. data/test/test_sites/simplehtml/style.css +40 -0
  56. data/test/ts_all.rb +39 -0
  57. 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