maca-fork-csspool 2.0.2
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/CHANGELOG.rdoc +72 -0
- data/History.txt +4 -0
- data/Manifest.txt +70 -0
- data/README.rdoc +78 -0
- data/Rakefile +35 -0
- data/lib/csspool.rb +20 -0
- data/lib/csspool/collection.rb +50 -0
- data/lib/csspool/css.rb +7 -0
- data/lib/csspool/css/charset.rb +7 -0
- data/lib/csspool/css/declaration.rb +8 -0
- data/lib/csspool/css/document.rb +34 -0
- data/lib/csspool/css/document_handler.rb +51 -0
- data/lib/csspool/css/import_rule.rb +15 -0
- data/lib/csspool/css/media.rb +7 -0
- data/lib/csspool/css/rule_set.rb +12 -0
- data/lib/csspool/lib_croco.rb +78 -0
- data/lib/csspool/lib_croco/cr_additional_sel.rb +46 -0
- data/lib/csspool/lib_croco/cr_attr_sel.rb +16 -0
- data/lib/csspool/lib_croco/cr_doc_handler.rb +24 -0
- data/lib/csspool/lib_croco/cr_num.rb +13 -0
- data/lib/csspool/lib_croco/cr_parser.rb +11 -0
- data/lib/csspool/lib_croco/cr_parsing_location.rb +17 -0
- data/lib/csspool/lib_croco/cr_pseudo.rb +14 -0
- data/lib/csspool/lib_croco/cr_rgb.rb +18 -0
- data/lib/csspool/lib_croco/cr_selector.rb +33 -0
- data/lib/csspool/lib_croco/cr_simple_sel.rb +54 -0
- data/lib/csspool/lib_croco/cr_term.rb +97 -0
- data/lib/csspool/lib_croco/glist.rb +21 -0
- data/lib/csspool/node.rb +5 -0
- data/lib/csspool/sac.rb +2 -0
- data/lib/csspool/sac/document.rb +35 -0
- data/lib/csspool/sac/parser.rb +122 -0
- data/lib/csspool/selector.rb +35 -0
- data/lib/csspool/selectors.rb +8 -0
- data/lib/csspool/selectors/additional.rb +6 -0
- data/lib/csspool/selectors/attribute.rb +21 -0
- data/lib/csspool/selectors/class.rb +11 -0
- data/lib/csspool/selectors/id.rb +11 -0
- data/lib/csspool/selectors/pseudo_class.rb +13 -0
- data/lib/csspool/selectors/simple.rb +22 -0
- data/lib/csspool/selectors/type.rb +6 -0
- data/lib/csspool/selectors/universal.rb +6 -0
- data/lib/csspool/terms.rb +7 -0
- data/lib/csspool/terms/function.rb +17 -0
- data/lib/csspool/terms/hash.rb +6 -0
- data/lib/csspool/terms/ident.rb +15 -0
- data/lib/csspool/terms/number.rb +14 -0
- data/lib/csspool/terms/rgb.rb +23 -0
- data/lib/csspool/terms/string.rb +6 -0
- data/lib/csspool/terms/uri.rb +6 -0
- data/lib/csspool/visitable.rb +30 -0
- data/lib/csspool/visitors.rb +5 -0
- data/lib/csspool/visitors/children.rb +50 -0
- data/lib/csspool/visitors/comparable.rb +85 -0
- data/lib/csspool/visitors/iterator.rb +80 -0
- data/lib/csspool/visitors/to_css.rb +188 -0
- data/lib/csspool/visitors/visitor.rb +17 -0
- data/test/css/test_document.rb +13 -0
- data/test/css/test_import_rule.rb +42 -0
- data/test/helper.rb +67 -0
- data/test/sac/test_parser.rb +115 -0
- data/test/sac/test_properties.rb +43 -0
- data/test/sac/test_terms.rb +134 -0
- data/test/test_collection.rb +81 -0
- data/test/test_parser.rb +91 -0
- data/test/test_selector.rb +47 -0
- data/test/visitors/test_children.rb +20 -0
- data/test/visitors/test_comparable.rb +103 -0
- data/test/visitors/test_each.rb +19 -0
- data/test/visitors/test_to_css.rb +200 -0
- metadata +173 -0
@@ -0,0 +1,17 @@
|
|
1
|
+
module CSSPool
|
2
|
+
module Visitors
|
3
|
+
class Visitor
|
4
|
+
def self.visitor_for *klasses, &block
|
5
|
+
klasses.each do |klass|
|
6
|
+
method_name = klass.name.split('::').join('_')
|
7
|
+
define_method(:"visit_#{method_name}", block)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def accept target
|
12
|
+
method_name = target.class.name.split('::').join('_')
|
13
|
+
send(:"visit_#{method_name}", target)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
module CSSPool
|
4
|
+
module CSS
|
5
|
+
class TestDocument < CSSPool::TestCase
|
6
|
+
def test_search
|
7
|
+
doc = CSSPool.CSS('div > p { background: red; }')
|
8
|
+
assert_equal 1, doc['div > p'].length
|
9
|
+
assert_equal 1, doc['div > p'].first.declarations.length
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
module CSSPool
|
4
|
+
module CSS
|
5
|
+
class TestImportRule < CSSPool::TestCase
|
6
|
+
def test_import
|
7
|
+
doc = CSSPool.CSS <<-eocss
|
8
|
+
@import "foo.css";
|
9
|
+
eocss
|
10
|
+
|
11
|
+
assert_equal 1, doc.import_rules.length
|
12
|
+
|
13
|
+
doc.import_rules.each do |ir|
|
14
|
+
new_doc = ir.load do |url|
|
15
|
+
assert_equal "foo.css", url
|
16
|
+
"div { background: red; }"
|
17
|
+
end
|
18
|
+
assert new_doc
|
19
|
+
assert_equal 1, new_doc.rule_sets.length
|
20
|
+
assert_equal ir, new_doc.parent_import_rule
|
21
|
+
assert_equal doc, new_doc.parent
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_import_with_media
|
26
|
+
doc = CSSPool.CSS <<-eocss
|
27
|
+
@import "foo.css" screen, print;
|
28
|
+
eocss
|
29
|
+
|
30
|
+
assert_equal 1, doc.import_rules.length
|
31
|
+
doc.import_rules.each do |ir|
|
32
|
+
new_doc = ir.load do |url|
|
33
|
+
"div { background: red; }"
|
34
|
+
end
|
35
|
+
new_doc.rule_sets.each do |rs|
|
36
|
+
assert_equal ir.media, rs.media
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
data/test/helper.rb
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
require "rubygems"
|
2
|
+
require "test/unit"
|
3
|
+
require "csspool"
|
4
|
+
|
5
|
+
|
6
|
+
module CSSPool
|
7
|
+
class TestCase < Test::Unit::TestCase
|
8
|
+
unless RUBY_VERSION >= '1.9'
|
9
|
+
undef :default_test
|
10
|
+
end
|
11
|
+
|
12
|
+
ASSET_DIR = File.join(File.dirname(__FILE__), 'files')
|
13
|
+
|
14
|
+
class MyDoc < CSSPool::SAC::Document
|
15
|
+
attr_accessor :start_documents, :end_documents
|
16
|
+
attr_accessor :charsets, :import_styles, :comments, :start_selectors
|
17
|
+
attr_accessor :end_selectors, :properties
|
18
|
+
|
19
|
+
def initialize
|
20
|
+
@start_documents = []
|
21
|
+
@end_documents = []
|
22
|
+
@charsets = []
|
23
|
+
@import_styles = []
|
24
|
+
@comments = []
|
25
|
+
@start_selectors = []
|
26
|
+
@end_selectors = []
|
27
|
+
@properties = []
|
28
|
+
end
|
29
|
+
|
30
|
+
def property name, expression, important
|
31
|
+
@properties << [name, expression]
|
32
|
+
end
|
33
|
+
|
34
|
+
def start_document
|
35
|
+
@start_documents << true
|
36
|
+
end
|
37
|
+
|
38
|
+
def end_document
|
39
|
+
@end_documents << true
|
40
|
+
end
|
41
|
+
|
42
|
+
def charset name, location
|
43
|
+
@charsets << [name, location]
|
44
|
+
end
|
45
|
+
|
46
|
+
def import_style media_list, uri, default_ns, location
|
47
|
+
@import_styles << [media_list, uri, default_ns, location]
|
48
|
+
end
|
49
|
+
|
50
|
+
def namespace_declaration prefix, uri, location
|
51
|
+
@import_styles << [prefix, uri, location]
|
52
|
+
end
|
53
|
+
|
54
|
+
def comment string
|
55
|
+
@comments << string
|
56
|
+
end
|
57
|
+
|
58
|
+
def start_selector selectors
|
59
|
+
@start_selectors << selectors
|
60
|
+
end
|
61
|
+
|
62
|
+
def end_selector selectors
|
63
|
+
@end_selectors << selectors
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,115 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
module CSSPool
|
4
|
+
module SAC
|
5
|
+
class TestParser < CSSPool::TestCase
|
6
|
+
def setup
|
7
|
+
super
|
8
|
+
@doc = MyDoc.new
|
9
|
+
@css = <<-eocss
|
10
|
+
@charset "UTF-8";
|
11
|
+
@import url("foo.css") screen;
|
12
|
+
/* This is a comment */
|
13
|
+
div a.foo, #bar, * { background: red; }
|
14
|
+
div#a, a.foo, a:hover, a[href][int="10"]{ background: red; }
|
15
|
+
eocss
|
16
|
+
@parser = CSSPool::SAC::Parser.new(@doc)
|
17
|
+
@parser.parse(@css)
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_start_and_end_called_with_the_same
|
21
|
+
assert_equal @doc.start_selectors, @doc.end_selectors
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_parse_no_doc
|
25
|
+
parser = CSSPool::SAC::Parser.new
|
26
|
+
parser.parse(@css)
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_start_document
|
30
|
+
assert_equal [true], @doc.start_documents
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_end_document
|
34
|
+
assert_equal [true], @doc.end_documents
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_charset
|
38
|
+
assert_equal(
|
39
|
+
[["UTF-8", { :line => 1, :byte_offset => 10, :column => 11}]],
|
40
|
+
@doc.charsets)
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_import_style
|
44
|
+
styles = @doc.import_styles.first
|
45
|
+
assert_equal ["screen"], styles.first
|
46
|
+
assert_equal "foo.css", styles[1]
|
47
|
+
assert_nil styles[2]
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_start_selector
|
51
|
+
selectors_for_rule = @doc.start_selectors.first
|
52
|
+
assert selectors_for_rule
|
53
|
+
assert_equal 3, selectors_for_rule.length
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_simple_selector
|
57
|
+
selectors_for_rule = @doc.start_selectors.first
|
58
|
+
selector = selectors_for_rule.first # => div a.foo
|
59
|
+
assert_equal 2, selector.simple_selectors.length
|
60
|
+
selector.simple_selectors.each do |ss|
|
61
|
+
assert ss.parse_location
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_additional_selector_list
|
66
|
+
selectors_for_rule = @doc.start_selectors.first
|
67
|
+
selector = selectors_for_rule.first # => div a.foo
|
68
|
+
simple_selector = selector.simple_selectors[1] # => a.foo
|
69
|
+
assert additional_selectors = simple_selector.additional_selectors
|
70
|
+
assert_equal 1, additional_selectors.length
|
71
|
+
end
|
72
|
+
|
73
|
+
def test_additional_selector_class_name
|
74
|
+
selectors_for_rule = @doc.start_selectors.first
|
75
|
+
selector = selectors_for_rule.first # => div a.foo
|
76
|
+
simple_selector = selector.simple_selectors[1] # => a.foo
|
77
|
+
assert additional_selectors = simple_selector.additional_selectors
|
78
|
+
foo_class = additional_selectors.first
|
79
|
+
assert_equal 'foo', foo_class.name
|
80
|
+
end
|
81
|
+
|
82
|
+
# div#a, a.foo, a:hover, a[href='watever'] { background: red; }
|
83
|
+
def test_id_additional_selector
|
84
|
+
selectors_for_rule = @doc.start_selectors[1]
|
85
|
+
selector = selectors_for_rule.first # => div#a
|
86
|
+
simple_selector = selector.simple_selectors.first # => div#a
|
87
|
+
assert_equal 'a', simple_selector.additional_selectors.first.name
|
88
|
+
end
|
89
|
+
|
90
|
+
# div#a, a.foo, a:hover, a[href][int="10"]{ background: red; }
|
91
|
+
def test_pseudo_additional_selector
|
92
|
+
selectors_for_rule = @doc.start_selectors[1]
|
93
|
+
selector = selectors_for_rule[2] # => 'a:hover'
|
94
|
+
simple_selector = selector.simple_selectors.first # => a:hover
|
95
|
+
assert_equal 'hover', simple_selector.additional_selectors.first.name
|
96
|
+
assert_nil simple_selector.additional_selectors.first.extra
|
97
|
+
end
|
98
|
+
|
99
|
+
# div#a, a.foo, a:hover, a[href][int="10"]{ background: red; }
|
100
|
+
def test_attribute_selector
|
101
|
+
selectors_for_rule = @doc.start_selectors[1]
|
102
|
+
selector = selectors_for_rule[3] # => a[href][int="10"]
|
103
|
+
simple_selector = selector.simple_selectors.first
|
104
|
+
|
105
|
+
assert_equal 'href', simple_selector.additional_selectors.first.name
|
106
|
+
assert_nil simple_selector.additional_selectors.first.value
|
107
|
+
assert_equal 1, simple_selector.additional_selectors.first.match_way
|
108
|
+
|
109
|
+
assert_equal 'int', simple_selector.additional_selectors[1].name
|
110
|
+
assert_equal '10', simple_selector.additional_selectors[1].value
|
111
|
+
assert_equal 2, simple_selector.additional_selectors[1].match_way
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
module CSSPool
|
4
|
+
module SAC
|
5
|
+
class TestProperties < CSSPool::TestCase
|
6
|
+
def setup
|
7
|
+
super
|
8
|
+
@doc = MyDoc.new
|
9
|
+
@css = <<-eocss
|
10
|
+
@charset "UTF-8";
|
11
|
+
@import url("foo.css") screen;
|
12
|
+
/* This is a comment */
|
13
|
+
div a.foo, #bar, * { background: red; }
|
14
|
+
div#a, a.foo, a:hover, a[href][int="10"]{ background: red; }
|
15
|
+
eocss
|
16
|
+
@parser = CSSPool::SAC::Parser.new(@doc)
|
17
|
+
@parser.parse(@css)
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_properties
|
21
|
+
assert_equal ['background'], @doc.properties.map { |x| x.first }.uniq
|
22
|
+
@doc.properties.each do |property|
|
23
|
+
assert_equal 1, property[1].length
|
24
|
+
end
|
25
|
+
assert_equal ['red'], @doc.properties.map { |x| x[1].first.value }.uniq
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_ident_with_comma
|
29
|
+
doc = MyDoc.new
|
30
|
+
parser = CSSPool::SAC::Parser.new(doc)
|
31
|
+
parser.parse <<-eocss
|
32
|
+
h1 { font-family: Verdana, sans-serif, monospace; }
|
33
|
+
eocss
|
34
|
+
assert_equal 1, doc.properties.length
|
35
|
+
values = doc.properties.first[1]
|
36
|
+
assert_equal 3, values.length
|
37
|
+
assert_equal [nil, ',', ','],
|
38
|
+
values.map { |value| value.operator }
|
39
|
+
values.each { |value| assert value.parse_location }
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,134 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
module CSSPool
|
4
|
+
module SAC
|
5
|
+
class TestTerms < CSSPool::TestCase
|
6
|
+
def setup
|
7
|
+
@doc = MyDoc.new
|
8
|
+
@parser = CSSPool::SAC::Parser.new(@doc)
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_hash_range
|
12
|
+
@parser.parse <<-eocss
|
13
|
+
div { border: #123; }
|
14
|
+
eocss
|
15
|
+
hash = @doc.properties.first[1].first
|
16
|
+
assert_equal '123', hash.value
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_rgb
|
20
|
+
@parser.parse <<-eocss
|
21
|
+
div { border: rgb(1,2,3); }
|
22
|
+
eocss
|
23
|
+
color = @doc.properties.first[1].first
|
24
|
+
assert_equal 1, color.red
|
25
|
+
assert_equal 2, color.green
|
26
|
+
assert_equal 3, color.blue
|
27
|
+
assert !color.percentage?
|
28
|
+
assert_match('rgb(1,2,3)', color.to_css)
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_rgb_with_percentage
|
32
|
+
@parser.parse <<-eocss
|
33
|
+
div { border: rgb(100%,2%,3%); }
|
34
|
+
eocss
|
35
|
+
color = @doc.properties.first[1].first
|
36
|
+
assert_equal 100, color.red
|
37
|
+
assert_equal 2, color.green
|
38
|
+
assert_equal 3, color.blue
|
39
|
+
assert color.percentage?
|
40
|
+
assert_match('rgb(100%,2%,3%)', color.to_css)
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_negative_number
|
44
|
+
@parser.parse <<-eocss
|
45
|
+
div { border: -1px; }
|
46
|
+
eocss
|
47
|
+
assert_equal 1, @doc.properties.length
|
48
|
+
size = @doc.properties.first[1].first
|
49
|
+
assert_equal :minus, size.unary_operator
|
50
|
+
assert_equal 1, size.value
|
51
|
+
assert_equal '-1.0px', size.to_s
|
52
|
+
assert_equal '-1.0px', size.to_css
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_positive_number
|
56
|
+
@parser.parse <<-eocss
|
57
|
+
div { border: 1px; }
|
58
|
+
eocss
|
59
|
+
assert_equal 1, @doc.properties.length
|
60
|
+
size = @doc.properties.first[1].first
|
61
|
+
assert_equal 1, size.value
|
62
|
+
assert_equal '1.0px', size.to_s
|
63
|
+
end
|
64
|
+
|
65
|
+
%w{
|
66
|
+
1 1em 1ex 1px 1in 1cm 1mm 1pt 1pc 1% 1deg 1rad 1ms 1s 1Hz 1kHz
|
67
|
+
}.each do |num|
|
68
|
+
expected = num.sub(/1/, '1.0')
|
69
|
+
define_method(:"test_num_#{num}") do
|
70
|
+
@parser.parse <<-eocss
|
71
|
+
div { border: #{num}; }
|
72
|
+
eocss
|
73
|
+
assert_equal 1, @doc.properties.length
|
74
|
+
size = @doc.properties.first[1].first
|
75
|
+
assert_equal 1, size.value
|
76
|
+
assert_equal expected, size.to_s
|
77
|
+
assert_equal expected, size.to_css
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
def test_string_term
|
82
|
+
@parser.parse <<-eocss
|
83
|
+
div { border: "hello"; }
|
84
|
+
eocss
|
85
|
+
assert_equal 1, @doc.properties.length
|
86
|
+
string = @doc.properties.first[1].first
|
87
|
+
assert_equal 'hello', string.value
|
88
|
+
assert_equal '"hello"', string.to_css
|
89
|
+
end
|
90
|
+
|
91
|
+
def test_inherit
|
92
|
+
@parser.parse <<-eocss
|
93
|
+
div { color: inherit; }
|
94
|
+
eocss
|
95
|
+
assert_equal 1, @doc.properties.length
|
96
|
+
string = @doc.properties.first[1].first
|
97
|
+
assert_equal 'inherit', string.value
|
98
|
+
assert_equal 'inherit', string.to_css
|
99
|
+
end
|
100
|
+
|
101
|
+
def test_important
|
102
|
+
@parser.parse <<-eocss
|
103
|
+
div { color: inherit !important; }
|
104
|
+
eocss
|
105
|
+
assert_equal 1, @doc.properties.length
|
106
|
+
string = @doc.properties.first[1].first
|
107
|
+
assert_equal 'inherit', string.value
|
108
|
+
assert_equal 'inherit', string.to_css
|
109
|
+
end
|
110
|
+
|
111
|
+
def test_function
|
112
|
+
@parser.parse <<-eocss
|
113
|
+
div { border: foo("hello"); }
|
114
|
+
eocss
|
115
|
+
assert_equal 1, @doc.properties.length
|
116
|
+
func = @doc.properties.first[1].first
|
117
|
+
assert_equal 'foo', func.name
|
118
|
+
assert_equal 1, func.params.length
|
119
|
+
assert_equal 'hello', func.params.first.value
|
120
|
+
assert_match 'foo("hello")', func.to_css
|
121
|
+
end
|
122
|
+
|
123
|
+
def test_uri
|
124
|
+
@parser.parse <<-eocss
|
125
|
+
div { border: url(http://tenderlovemaking.com/); }
|
126
|
+
eocss
|
127
|
+
assert_equal 1, @doc.properties.length
|
128
|
+
url = @doc.properties.first[1].first
|
129
|
+
assert_equal 'http://tenderlovemaking.com/', url.value
|
130
|
+
assert_match 'url(http://tenderlovemaking.com/)', url.to_css
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
module CSSPool
|
4
|
+
class TestCollection < CSSPool::TestCase
|
5
|
+
def test_new
|
6
|
+
assert CSSPool::Collection.new
|
7
|
+
assert CSSPool::Collection.new { |url| }
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_append
|
11
|
+
collection = CSSPool::Collection.new
|
12
|
+
collection << "div { background: green; }"
|
13
|
+
assert_equal 1, collection.length
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_collection_imports_stuff
|
17
|
+
called = false
|
18
|
+
collection = CSSPool::Collection.new do |url|
|
19
|
+
called = true
|
20
|
+
assert_equal 'hello.css', url
|
21
|
+
"div { background: red; }"
|
22
|
+
end
|
23
|
+
|
24
|
+
collection << '@import url(hello.css);'
|
25
|
+
assert called, "block was not called"
|
26
|
+
assert_equal 2, collection.length
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_collection_imports_imports_imports
|
30
|
+
css = {
|
31
|
+
'foo.css' => '@import url("bar.css");',
|
32
|
+
'bar.css' => '@import url("baz.css");',
|
33
|
+
'baz.css' => 'div { background: red; }',
|
34
|
+
}
|
35
|
+
|
36
|
+
collection = CSSPool::Collection.new do |url|
|
37
|
+
css[url] || raise
|
38
|
+
end
|
39
|
+
|
40
|
+
collection << '@import url(foo.css);'
|
41
|
+
assert_equal 4, collection.length
|
42
|
+
assert_nil collection.last.parent
|
43
|
+
assert_equal collection[-2].parent, collection.last
|
44
|
+
assert_equal collection[-3].parent, collection[-2]
|
45
|
+
assert_equal collection[-4].parent, collection[-3]
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_load_only_once
|
49
|
+
css = {
|
50
|
+
'foo.css' => '@import url("foo.css");',
|
51
|
+
}
|
52
|
+
|
53
|
+
collection = CSSPool::Collection.new do |url|
|
54
|
+
css[url] || raise
|
55
|
+
end
|
56
|
+
|
57
|
+
collection << '@import url(foo.css);'
|
58
|
+
|
59
|
+
assert_equal 2, collection.length
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_each
|
63
|
+
css = {
|
64
|
+
'foo.css' => '@import url("foo.css");',
|
65
|
+
}
|
66
|
+
|
67
|
+
collection = CSSPool::Collection.new do |url|
|
68
|
+
css[url] || raise
|
69
|
+
end
|
70
|
+
|
71
|
+
collection << '@import url(foo.css);'
|
72
|
+
|
73
|
+
list = []
|
74
|
+
collection.each do |thing|
|
75
|
+
list << thing
|
76
|
+
end
|
77
|
+
|
78
|
+
assert_equal 2, list.length
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|