csspool 0.2.6 → 2.0.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/.autotest +16 -0
- data/{CHANGELOG.txt → CHANGELOG.rdoc} +10 -0
- data/Manifest.txt +60 -72
- data/README.rdoc +78 -0
- data/Rakefile +9 -52
- data/lib/csspool/collection.rb +50 -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/css.rb +7 -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 +34 -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/lib_croco.rb +78 -0
- data/lib/csspool/node.rb +5 -0
- data/lib/csspool/sac/document.rb +35 -0
- data/lib/csspool/sac/parser.rb +122 -0
- data/lib/csspool/sac.rb +2 -0
- data/lib/csspool/selector.rb +32 -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/selectors.rb +8 -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/terms.rb +7 -0
- data/lib/csspool/visitable.rb +18 -0
- data/lib/csspool/visitors/comparable.rb +78 -0
- data/lib/csspool/visitors/to_css.rb +201 -0
- data/lib/csspool/visitors/visitor.rb +17 -0
- data/lib/csspool/visitors.rb +3 -0
- data/lib/csspool.rb +18 -1
- data/test/css/test_document.rb +13 -0
- data/test/css/test_import_rule.rb +42 -0
- data/test/helper.rb +62 -6
- 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 +75 -241
- data/test/test_selector.rb +45 -34
- data/test/visitors/test_comparable.rb +72 -0
- data/test/visitors/test_to_css.rb +141 -0
- metadata +98 -85
- data/README.txt +0 -79
- data/lib/css/sac/conditions/attribute_condition.rb +0 -56
- data/lib/css/sac/conditions/begin_hyphen_condition.rb +0 -22
- data/lib/css/sac/conditions/class_condition.rb +0 -22
- data/lib/css/sac/conditions/combinator_condition.rb +0 -40
- data/lib/css/sac/conditions/condition.rb +0 -35
- data/lib/css/sac/conditions/id_condition.rb +0 -27
- data/lib/css/sac/conditions/one_of_condition.rb +0 -22
- data/lib/css/sac/conditions/pseudo_class_condition.rb +0 -24
- data/lib/css/sac/conditions.rb +0 -5
- data/lib/css/sac/document_handler.rb +0 -67
- data/lib/css/sac/error_handler.rb +0 -14
- data/lib/css/sac/generated_parser.rb +0 -999
- data/lib/css/sac/generated_property_parser.rb +0 -9214
- data/lib/css/sac/lexeme.rb +0 -29
- data/lib/css/sac/lexical_unit.rb +0 -203
- data/lib/css/sac/parse_exception.rb +0 -6
- data/lib/css/sac/parser.rb +0 -115
- data/lib/css/sac/property_parser.rb +0 -47
- data/lib/css/sac/selectors/child_selector.rb +0 -40
- data/lib/css/sac/selectors/conditional_selector.rb +0 -49
- data/lib/css/sac/selectors/descendant_selector.rb +0 -40
- data/lib/css/sac/selectors/element_selector.rb +0 -39
- data/lib/css/sac/selectors/selector.rb +0 -31
- data/lib/css/sac/selectors/sibling_selector.rb +0 -39
- data/lib/css/sac/selectors/simple_selector.rb +0 -25
- data/lib/css/sac/selectors.rb +0 -5
- data/lib/css/sac/token.rb +0 -27
- data/lib/css/sac/tokenizer.rb +0 -187
- data/lib/css/sac/visitable.rb +0 -106
- data/lib/css/sac.rb +0 -14
- data/lib/css/stylesheet/rule.rb +0 -20
- data/lib/css/stylesheet/stylesheet.rb +0 -96
- data/lib/css/stylesheet.rb +0 -3
- data/lib/parser.y +0 -308
- data/lib/property_parser.y +0 -2346
- data/lib/property_parser.y.erb +0 -1321
- data/test/condition_test_case.rb +0 -6
- data/test/selector_test_case.rb +0 -20
- data/test/test_all.rb +0 -4
- data/test/test_attribute_condition.rb +0 -39
- data/test/test_begin_hyphen_condition.rb +0 -15
- data/test/test_child_selector.rb +0 -60
- data/test/test_class_condition.rb +0 -15
- data/test/test_combinator_condition.rb +0 -38
- data/test/test_condition.rb +0 -31
- data/test/test_conditional_selector.rb +0 -44
- data/test/test_descendant_selector.rb +0 -64
- data/test/test_element_selector.rb +0 -31
- data/test/test_error_recovery.rb +0 -28
- data/test/test_id_condition.rb +0 -16
- data/test/test_lexeme.rb +0 -39
- data/test/test_lexical_color.rb +0 -49
- data/test/test_lexical_function.rb +0 -31
- data/test/test_lexical_ident.rb +0 -30
- data/test/test_lexical_number.rb +0 -68
- data/test/test_lexical_string.rb +0 -23
- data/test/test_lexical_unit.rb +0 -106
- data/test/test_lexical_uri.rb +0 -28
- data/test/test_one_of_condition.rb +0 -15
- data/test/test_parse_error.rb +0 -199
- data/test/test_property_parser.rb +0 -593
- data/test/test_selector_as_string.rb +0 -94
- data/test/test_selector_parser.rb +0 -178
- data/test/test_sibling_selector.rb +0 -42
- data/test/test_simple_selector.rb +0 -9
- data/test/test_specificity.rb +0 -76
- data/test/test_stylesheet.rb +0 -95
- data/test/test_token.rb +0 -24
- data/test/test_tokenizer.rb +0 -127
- data/test/test_xpath.rb +0 -105
data/test/condition_test_case.rb
DELETED
data/test/selector_test_case.rb
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
class SelectorTestCase < Test::Unit::TestCase
|
|
2
|
-
include CSS::SAC::Selectors
|
|
3
|
-
Node = Struct.new(:name, :parent, :child, :next_sibling, :attributes)
|
|
4
|
-
NoParentNode = Struct.new(:name)
|
|
5
|
-
|
|
6
|
-
def parent_child_tree(*args)
|
|
7
|
-
nodes = args.map { |name|
|
|
8
|
-
n = Node.new
|
|
9
|
-
n.name = name
|
|
10
|
-
n
|
|
11
|
-
}
|
|
12
|
-
nodes.each_with_index do |n,i|
|
|
13
|
-
n.child = nodes[i + 1] if i < nodes.length
|
|
14
|
-
n.parent = nodes[i - 1] if i > 0
|
|
15
|
-
end
|
|
16
|
-
nodes.last
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
undef :default_test
|
|
20
|
-
end
|
data/test/test_all.rb
DELETED
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
require File.dirname(__FILE__) + "/helper"
|
|
2
|
-
|
|
3
|
-
class AttributeConditionTest < ConditionTestCase
|
|
4
|
-
def test_hash
|
|
5
|
-
first = AttributeCondition.new(1, 1, 1)
|
|
6
|
-
second = AttributeCondition.new(1, 1, 1)
|
|
7
|
-
assert_equal first.hash, second.hash
|
|
8
|
-
|
|
9
|
-
third = AttributeCondition.new(2, 1, 1)
|
|
10
|
-
assert_not_equal first.hash, third.hash
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def test_equals2
|
|
14
|
-
first = AttributeCondition.new(1, 1, 1)
|
|
15
|
-
second = AttributeCondition.new(1, 1, 1)
|
|
16
|
-
assert_equal first, second
|
|
17
|
-
|
|
18
|
-
third = AttributeCondition.new(1,1,2)
|
|
19
|
-
assert_not_equal first, third
|
|
20
|
-
|
|
21
|
-
fourth = AttributeCondition.new(1,2,1)
|
|
22
|
-
assert_not_equal first, fourth
|
|
23
|
-
|
|
24
|
-
fifth = AttributeCondition.new(2,1,1)
|
|
25
|
-
assert_not_equal first, fifth
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
def test_equals_tilde
|
|
29
|
-
attribute = AttributeCondition.new('class', 'foo', true)
|
|
30
|
-
node = Node.new('p')
|
|
31
|
-
node.attributes = { 'class' => 'foo' }
|
|
32
|
-
|
|
33
|
-
assert attribute =~ node
|
|
34
|
-
|
|
35
|
-
node.attributes = { 'class' => 'bar' }
|
|
36
|
-
assert(!(attribute =~ node))
|
|
37
|
-
assert(!(attribute =~ 1))
|
|
38
|
-
end
|
|
39
|
-
end
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
require File.dirname(__FILE__) + "/helper"
|
|
2
|
-
|
|
3
|
-
class BeginHyphenConditionTest < ConditionTestCase
|
|
4
|
-
def test_tilde_equals
|
|
5
|
-
attribute = BeginHyphenCondition.new('class', 'foo')
|
|
6
|
-
node = Node.new('p')
|
|
7
|
-
node.attributes = { 'class' => 'foobar' }
|
|
8
|
-
|
|
9
|
-
assert attribute =~ node
|
|
10
|
-
|
|
11
|
-
node.attributes = { 'class' => 'barfoo' }
|
|
12
|
-
assert(!(attribute =~ node))
|
|
13
|
-
assert(!(attribute =~ 1))
|
|
14
|
-
end
|
|
15
|
-
end
|
data/test/test_child_selector.rb
DELETED
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
require File.dirname(__FILE__) + "/helper"
|
|
2
|
-
|
|
3
|
-
class ChildSelectorTest < SelectorTestCase
|
|
4
|
-
def test_hash
|
|
5
|
-
first = ChildSelector.new(1,1)
|
|
6
|
-
second = ChildSelector.new(1,1)
|
|
7
|
-
assert_equal first.hash, second.hash
|
|
8
|
-
|
|
9
|
-
third = ChildSelector.new(1,2)
|
|
10
|
-
assert_not_equal first.hash, third.hash
|
|
11
|
-
|
|
12
|
-
fourth = ChildSelector.new(2,1)
|
|
13
|
-
assert_not_equal first.hash, fourth.hash
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def test_equals2
|
|
17
|
-
first = ChildSelector.new(1,1)
|
|
18
|
-
second = ChildSelector.new(1,1)
|
|
19
|
-
assert_equal first, second
|
|
20
|
-
|
|
21
|
-
third = ChildSelector.new(1,2)
|
|
22
|
-
assert_not_equal first, third
|
|
23
|
-
|
|
24
|
-
fourth = ChildSelector.new(2,1)
|
|
25
|
-
assert_not_equal first, fourth
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
def test_equals_tilde
|
|
29
|
-
parent = ElementSelector.new('div')
|
|
30
|
-
child = ElementSelector.new('p')
|
|
31
|
-
sel = ChildSelector.new(parent, child)
|
|
32
|
-
|
|
33
|
-
node = parent_child_tree('div', 'p')
|
|
34
|
-
assert sel =~ node
|
|
35
|
-
|
|
36
|
-
node2 = parent_child_tree('body', 'div', 'p')
|
|
37
|
-
assert sel =~ node2
|
|
38
|
-
|
|
39
|
-
failing = parent_child_tree('p', 'div')
|
|
40
|
-
assert(! (sel =~ failing))
|
|
41
|
-
assert(! (sel =~ NoParentNode.new('div')))
|
|
42
|
-
assert(! (sel =~ Node.new('div', nil, nil)))
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
def test_many_child
|
|
46
|
-
@sac = CSS::SAC::Parser.new()
|
|
47
|
-
class << @sac.document_handler
|
|
48
|
-
attr_accessor :selectors
|
|
49
|
-
alias :start_selector :selectors=
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
@sac.parse('div > h1 > h2 { }')
|
|
53
|
-
selectors = @sac.document_handler.selectors
|
|
54
|
-
assert_equal(1, selectors.length)
|
|
55
|
-
|
|
56
|
-
sel = selectors.first
|
|
57
|
-
node = parent_child_tree('div', 'h1', 'h2')
|
|
58
|
-
assert sel =~ node
|
|
59
|
-
end
|
|
60
|
-
end
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
require File.dirname(__FILE__) + "/helper"
|
|
2
|
-
|
|
3
|
-
class ClassConditionTest < ConditionTestCase
|
|
4
|
-
def test_tilde_equals
|
|
5
|
-
attribute = ClassCondition.new('foo')
|
|
6
|
-
node = Node.new('p')
|
|
7
|
-
node.attributes = { 'class' => 'foo' }
|
|
8
|
-
|
|
9
|
-
assert attribute =~ node
|
|
10
|
-
|
|
11
|
-
node.attributes = { 'class' => 'barfoo' }
|
|
12
|
-
assert(!(attribute =~ node))
|
|
13
|
-
assert(!(attribute =~ 1))
|
|
14
|
-
end
|
|
15
|
-
end
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
require File.dirname(__FILE__) + "/helper"
|
|
2
|
-
|
|
3
|
-
class CombinatorConditionTest < ConditionTestCase
|
|
4
|
-
def test_equals2
|
|
5
|
-
first = CombinatorCondition.new(1,1)
|
|
6
|
-
second = CombinatorCondition.new(1,1)
|
|
7
|
-
assert_equal first, second
|
|
8
|
-
|
|
9
|
-
third = CombinatorCondition.new(1,2)
|
|
10
|
-
assert_not_equal first, third
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def test_hash
|
|
14
|
-
first = CombinatorCondition.new(1,1)
|
|
15
|
-
second = CombinatorCondition.new(1,1)
|
|
16
|
-
assert_equal first.hash, second.hash
|
|
17
|
-
|
|
18
|
-
third = CombinatorCondition.new(1,2)
|
|
19
|
-
assert_not_equal first.hash, third.hash
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
def test_equals_tilde
|
|
23
|
-
first = ClassCondition.new('foo')
|
|
24
|
-
second = AttributeCondition.new('name', 'aaron', true)
|
|
25
|
-
combinator_condition = CombinatorCondition.new(first, second)
|
|
26
|
-
|
|
27
|
-
node = Node.new('p')
|
|
28
|
-
node.attributes = { 'class' => 'foo', 'name' => 'aaron' }
|
|
29
|
-
|
|
30
|
-
assert combinator_condition =~ node
|
|
31
|
-
|
|
32
|
-
node.attributes = { 'class' => 'bar', 'name' => 'aaron' }
|
|
33
|
-
assert(!(combinator_condition =~ node))
|
|
34
|
-
|
|
35
|
-
node.attributes = { 'class' => 'foo', 'name' => 'bar' }
|
|
36
|
-
assert(!(combinator_condition =~ node))
|
|
37
|
-
end
|
|
38
|
-
end
|
data/test/test_condition.rb
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
require File.dirname(__FILE__) + "/helper"
|
|
2
|
-
|
|
3
|
-
class ConditionTest < ConditionTestCase
|
|
4
|
-
def test_equals2
|
|
5
|
-
first = Condition.new(1)
|
|
6
|
-
second = Condition.new(1)
|
|
7
|
-
assert_equal first, second
|
|
8
|
-
|
|
9
|
-
third = Condition.new(2)
|
|
10
|
-
assert_not_equal first, third
|
|
11
|
-
assert_not_equal first, 1
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
def test_eql?
|
|
15
|
-
first = Condition.new(1)
|
|
16
|
-
second = Condition.new(1)
|
|
17
|
-
assert first.eql?(second)
|
|
18
|
-
|
|
19
|
-
third = Condition.new(2)
|
|
20
|
-
assert !first.eql?(third)
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
def test_hash
|
|
24
|
-
first = Condition.new(1)
|
|
25
|
-
second = Condition.new(1)
|
|
26
|
-
assert_equal first.hash, second.hash
|
|
27
|
-
|
|
28
|
-
third = Condition.new(2)
|
|
29
|
-
assert_not_equal first.hash, third.hash
|
|
30
|
-
end
|
|
31
|
-
end
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
require File.dirname(__FILE__) + "/helper"
|
|
2
|
-
|
|
3
|
-
class ConditionalSelectorTest < SelectorTestCase
|
|
4
|
-
def test_hash
|
|
5
|
-
first = ConditionalSelector.new(1,1)
|
|
6
|
-
second = ConditionalSelector.new(1,1)
|
|
7
|
-
assert_equal first.hash, second.hash
|
|
8
|
-
|
|
9
|
-
third = ConditionalSelector.new(1,2)
|
|
10
|
-
assert_not_equal first.hash, third.hash
|
|
11
|
-
|
|
12
|
-
fourth = ConditionalSelector.new(2,1)
|
|
13
|
-
assert_not_equal first.hash, fourth.hash
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def test_equals2
|
|
17
|
-
first = ConditionalSelector.new(1,1)
|
|
18
|
-
second = ConditionalSelector.new(1,1)
|
|
19
|
-
assert_equal first, second
|
|
20
|
-
|
|
21
|
-
third = ConditionalSelector.new(1,2)
|
|
22
|
-
assert_not_equal first, third
|
|
23
|
-
|
|
24
|
-
fourth = ConditionalSelector.new(2,1)
|
|
25
|
-
assert_not_equal first, fourth
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
def test_equals_tilde
|
|
29
|
-
attribute = CSS::SAC::Conditions::AttributeCondition.new('class', 'foo', true)
|
|
30
|
-
div = ElementSelector.new('div')
|
|
31
|
-
sel = ConditionalSelector.new(div, attribute)
|
|
32
|
-
|
|
33
|
-
node = Node.new('div')
|
|
34
|
-
node.attributes = { 'class' => 'foo' }
|
|
35
|
-
|
|
36
|
-
assert sel =~ node
|
|
37
|
-
|
|
38
|
-
sel = ConditionalSelector.new(nil, attribute)
|
|
39
|
-
assert(sel =~ node)
|
|
40
|
-
|
|
41
|
-
node.attributes = { 'class' => 'bar' }
|
|
42
|
-
assert(!(sel =~ node))
|
|
43
|
-
end
|
|
44
|
-
end
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
require File.dirname(__FILE__) + "/helper"
|
|
2
|
-
|
|
3
|
-
class DescendantSelectorTest < SelectorTestCase
|
|
4
|
-
def test_hash
|
|
5
|
-
first = DescendantSelector.new(1,1)
|
|
6
|
-
second = DescendantSelector.new(1,1)
|
|
7
|
-
assert_equal first.hash, second.hash
|
|
8
|
-
|
|
9
|
-
third = DescendantSelector.new(1,2)
|
|
10
|
-
assert_not_equal first.hash, third.hash
|
|
11
|
-
|
|
12
|
-
fourth = DescendantSelector.new(2,1)
|
|
13
|
-
assert_not_equal first.hash, fourth.hash
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def test_equals2
|
|
17
|
-
first = DescendantSelector.new(1,1)
|
|
18
|
-
second = DescendantSelector.new(1,1)
|
|
19
|
-
assert_equal first, second
|
|
20
|
-
|
|
21
|
-
third = DescendantSelector.new(1,2)
|
|
22
|
-
assert_not_equal first, third
|
|
23
|
-
|
|
24
|
-
fourth = DescendantSelector.new(2,1)
|
|
25
|
-
assert_not_equal first, fourth
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
def test_equals_tilde
|
|
29
|
-
parent = ElementSelector.new('div')
|
|
30
|
-
child = ElementSelector.new('p')
|
|
31
|
-
sel = DescendantSelector.new(parent, child)
|
|
32
|
-
|
|
33
|
-
node = parent_child_tree('div', 'p')
|
|
34
|
-
assert sel =~ node
|
|
35
|
-
|
|
36
|
-
node2 = parent_child_tree('body', 'div', 'p')
|
|
37
|
-
assert sel =~ node2
|
|
38
|
-
|
|
39
|
-
node3 = parent_child_tree('body', 'div', 'table', 'tr', 'td', 'p')
|
|
40
|
-
assert sel =~ node3
|
|
41
|
-
|
|
42
|
-
failing = parent_child_tree('p', 'div')
|
|
43
|
-
assert(! (sel =~ failing))
|
|
44
|
-
assert(! (sel =~ NoParentNode.new('div')))
|
|
45
|
-
assert(! (sel =~ Node.new('div', nil, nil)))
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
def test_many_descendants
|
|
49
|
-
@sac = CSS::SAC::Parser.new()
|
|
50
|
-
class << @sac.document_handler
|
|
51
|
-
attr_accessor :selectors
|
|
52
|
-
alias :start_selector :selectors=
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
@sac.parse('div h1 h2 { }')
|
|
56
|
-
selectors = @sac.document_handler.selectors
|
|
57
|
-
assert_equal(1, selectors.length)
|
|
58
|
-
|
|
59
|
-
sel = selectors.first
|
|
60
|
-
node = parent_child_tree('body', 'div', 'p', 'h1', 'p', 'h2')
|
|
61
|
-
assert sel =~ node
|
|
62
|
-
end
|
|
63
|
-
end
|
|
64
|
-
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
require File.dirname(__FILE__) + "/helper"
|
|
2
|
-
|
|
3
|
-
class ElementSelectorTest < SelectorTestCase
|
|
4
|
-
def test_hash
|
|
5
|
-
first = ElementSelector.new(1)
|
|
6
|
-
second = ElementSelector.new(1)
|
|
7
|
-
assert_equal first.hash, second.hash
|
|
8
|
-
|
|
9
|
-
third = ElementSelector.new(2)
|
|
10
|
-
assert_not_equal first.hash, third.hash
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def test_equals2
|
|
14
|
-
first = ElementSelector.new(1)
|
|
15
|
-
second = ElementSelector.new(1)
|
|
16
|
-
assert_equal first, second
|
|
17
|
-
|
|
18
|
-
third = ElementSelector.new(2)
|
|
19
|
-
assert_not_equal first, third
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
def test_equals_tilde
|
|
23
|
-
div = ElementSelector.new('div')
|
|
24
|
-
node = Node.new
|
|
25
|
-
node.name = 'div'
|
|
26
|
-
|
|
27
|
-
assert div =~ node
|
|
28
|
-
assert(!(div =~ nil))
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
|
data/test/test_error_recovery.rb
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
require File.dirname(__FILE__) + "/helper"
|
|
2
|
-
|
|
3
|
-
class ErrorRecoveryTest < Test::Unit::TestCase
|
|
4
|
-
def setup
|
|
5
|
-
@sac = CSS::SAC::Parser.new
|
|
6
|
-
end
|
|
7
|
-
|
|
8
|
-
def test_unexpected_color
|
|
9
|
-
doc = @sac.parse('
|
|
10
|
-
a { color: red; }
|
|
11
|
-
body { border: solid 1px; #000; color: red; }
|
|
12
|
-
p { color: blue; }
|
|
13
|
-
')
|
|
14
|
-
assert_equal 3, doc.rules.length
|
|
15
|
-
|
|
16
|
-
a_rule = doc['a']
|
|
17
|
-
assert a_rule
|
|
18
|
-
assert_equal 1, a_rule.properties.length
|
|
19
|
-
|
|
20
|
-
body_rule = doc['body']
|
|
21
|
-
assert body_rule
|
|
22
|
-
assert_equal 2, body_rule.properties.length
|
|
23
|
-
|
|
24
|
-
p_rule = doc['p']
|
|
25
|
-
assert p_rule
|
|
26
|
-
assert_equal 1, p_rule.properties.length
|
|
27
|
-
end
|
|
28
|
-
end
|
data/test/test_id_condition.rb
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
require File.dirname(__FILE__) + "/helper"
|
|
2
|
-
|
|
3
|
-
class IdConditionTest < ConditionTestCase
|
|
4
|
-
def test_equals_tilde
|
|
5
|
-
attribute = IDCondition.new('some_id')
|
|
6
|
-
node = Node.new('p')
|
|
7
|
-
node.attributes = { 'id' => 'some_id' }
|
|
8
|
-
|
|
9
|
-
assert attribute =~ node
|
|
10
|
-
|
|
11
|
-
node.attributes = { 'id' => 'different' }
|
|
12
|
-
assert(!(attribute =~ node))
|
|
13
|
-
assert(!(attribute =~ 1))
|
|
14
|
-
end
|
|
15
|
-
end
|
|
16
|
-
|
data/test/test_lexeme.rb
DELETED
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
require File.dirname(__FILE__) + "/helper"
|
|
2
|
-
|
|
3
|
-
class LexemeTest < Test::Unit::TestCase
|
|
4
|
-
include CSS
|
|
5
|
-
#include CSS::SAC # grrr annoying: SAC should be a module
|
|
6
|
-
|
|
7
|
-
def test_lexemes_have_a_required_name
|
|
8
|
-
assert_equal(:foo, SAC::Lexeme.new(:foo, /foo/).name)
|
|
9
|
-
assert_raise(ArgumentError) { SAC::Lexeme.new(nil, /foo/) }
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def test_lexemes_require_at_least_one_pattern
|
|
13
|
-
assert_raise(ArgumentError) { SAC::Lexeme.new(:foo) }
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def test_simple_lexemes_can_specify_a_pattern_inline
|
|
17
|
-
lexeme = SAC::Lexeme.new(:foo, /bar/)
|
|
18
|
-
assert(lexeme.pattern.match("bar"))
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
def test_more_patterns_can_be_added_in_a_block
|
|
22
|
-
lexeme = SAC::Lexeme.new(:foo) do |patterns|
|
|
23
|
-
patterns << /foo/
|
|
24
|
-
patterns << /bar/
|
|
25
|
-
patterns << /baz/
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
# ...but the single exposed lexeme pattern is a union
|
|
29
|
-
%w(foo bar baz).each do |candidate|
|
|
30
|
-
assert_match(lexeme.pattern, candidate)
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
def test_patterns_are_start_anchored_and_case_insensitive
|
|
35
|
-
lexeme = SAC::Lexeme.new(:foo, /foo/)
|
|
36
|
-
assert_match(lexeme.pattern, "FOO")
|
|
37
|
-
assert_no_match(lexeme.pattern, " foo")
|
|
38
|
-
end
|
|
39
|
-
end
|
data/test/test_lexical_color.rb
DELETED
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
require File.dirname(__FILE__) + "/helper"
|
|
2
|
-
|
|
3
|
-
class LexicalColorTest < Test::Unit::TestCase
|
|
4
|
-
include CSS::SAC
|
|
5
|
-
|
|
6
|
-
def test_to_s
|
|
7
|
-
first = Color.new('#FFFFFF')
|
|
8
|
-
assert_equal('#FFF', first.to_s)
|
|
9
|
-
|
|
10
|
-
second = Color.new('#FEFEFE')
|
|
11
|
-
assert_equal('#FEFEFE', second.to_s)
|
|
12
|
-
|
|
13
|
-
third = Color.new('red')
|
|
14
|
-
assert_equal('red', third.to_s)
|
|
15
|
-
|
|
16
|
-
fourth = Color.new('#0066FF')
|
|
17
|
-
assert_equal('#06F', fourth.to_s)
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
def test_hash
|
|
21
|
-
first = Color.new('#FFFFFF')
|
|
22
|
-
second = Color.new('#FFFFFF')
|
|
23
|
-
assert_equal first.hash, second.hash
|
|
24
|
-
|
|
25
|
-
third = Color.new('red')
|
|
26
|
-
assert_not_equal first.hash, third.hash
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
def test_equals2
|
|
30
|
-
first = Color.new('#FFFFFF')
|
|
31
|
-
second = Color.new('#FFFFFF')
|
|
32
|
-
assert_equal(first, second)
|
|
33
|
-
|
|
34
|
-
third = Color.new('#FFF')
|
|
35
|
-
assert_equal(first, third)
|
|
36
|
-
|
|
37
|
-
fourth = Color.new('#FFA')
|
|
38
|
-
assert_not_equal(first, fourth)
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
def test_equals2_string
|
|
42
|
-
first = Color.new('red')
|
|
43
|
-
second = Color.new('red')
|
|
44
|
-
assert_equal(first, second)
|
|
45
|
-
|
|
46
|
-
third = Color.new('#FFF')
|
|
47
|
-
assert_not_equal(first, third)
|
|
48
|
-
end
|
|
49
|
-
end
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
require File.dirname(__FILE__) + "/helper"
|
|
2
|
-
|
|
3
|
-
class LexicalFunctionTest < Test::Unit::TestCase
|
|
4
|
-
include CSS::SAC
|
|
5
|
-
|
|
6
|
-
def test_to_s
|
|
7
|
-
first = Function.new('counter(', %w{ 1 2 3 4 })
|
|
8
|
-
assert_equal('counter(1, 2, 3, 4)', first.to_s)
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
def test_equals2
|
|
12
|
-
first = Function.new('counter(', %w{ 1 2 3 4 })
|
|
13
|
-
second = Function.new('counter(', %w{ 1 2 3 4 })
|
|
14
|
-
assert_equal(first, second)
|
|
15
|
-
|
|
16
|
-
third = Function.new('rect(', %w{ 1 2 3 4 })
|
|
17
|
-
assert_not_equal(first, third)
|
|
18
|
-
|
|
19
|
-
fourth = Function.new('counter(', %w{ 1 2 3 5 })
|
|
20
|
-
assert_not_equal(first, fourth)
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
def test_hash
|
|
24
|
-
first = Function.new('counter(', %w{ 1 2 3 4 })
|
|
25
|
-
second = Function.new('counter(', %w{ 1 2 3 4 })
|
|
26
|
-
assert_equal first.hash, second.hash
|
|
27
|
-
|
|
28
|
-
third = Function.new('counter(', %w{ 1 2 4 4 })
|
|
29
|
-
assert_not_equal first.hash, third.hash
|
|
30
|
-
end
|
|
31
|
-
end
|
data/test/test_lexical_ident.rb
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
require File.dirname(__FILE__) + "/helper"
|
|
2
|
-
|
|
3
|
-
class LexicalIdentTest < Test::Unit::TestCase
|
|
4
|
-
include CSS::SAC
|
|
5
|
-
|
|
6
|
-
def test_equals2
|
|
7
|
-
first = LexicalIdent.new('one')
|
|
8
|
-
second = LexicalIdent.new('one')
|
|
9
|
-
assert_equal first, second
|
|
10
|
-
|
|
11
|
-
third = LexicalIdent.new('two')
|
|
12
|
-
assert_not_equal first, third
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
def test_eql?
|
|
16
|
-
first = LexicalIdent.new('one')
|
|
17
|
-
second = LexicalIdent.new('one')
|
|
18
|
-
|
|
19
|
-
assert first.eql?(second)
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
def test_hash
|
|
23
|
-
first = LexicalIdent.new('one')
|
|
24
|
-
second = LexicalIdent.new('one')
|
|
25
|
-
assert_equal first.hash, second.hash
|
|
26
|
-
|
|
27
|
-
third = LexicalIdent.new('two')
|
|
28
|
-
assert_not_equal first.hash, third.hash
|
|
29
|
-
end
|
|
30
|
-
end
|
data/test/test_lexical_number.rb
DELETED
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
require File.dirname(__FILE__) + "/helper"
|
|
2
|
-
|
|
3
|
-
class LexicalNumberTest < Test::Unit::TestCase
|
|
4
|
-
def test_to_s
|
|
5
|
-
first = CSS::SAC::Number.new('10', 'px')
|
|
6
|
-
assert_equal('10px', first.to_s)
|
|
7
|
-
|
|
8
|
-
second = CSS::SAC::Number.new('0', 'em')
|
|
9
|
-
assert_equal('0', second.to_s)
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def test_hash
|
|
13
|
-
first = CSS::SAC::Number.new('10', 'px')
|
|
14
|
-
second = CSS::SAC::Number.new('10', 'px')
|
|
15
|
-
assert_equal first.hash, second.hash
|
|
16
|
-
|
|
17
|
-
third = CSS::SAC::Number.new('11', 'px')
|
|
18
|
-
assert_not_equal first.hash, third.hash
|
|
19
|
-
|
|
20
|
-
fourth = CSS::SAC::Number.new('10', 'em')
|
|
21
|
-
assert_not_equal first.hash, fourth.hash
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
def test_hash_0_unit
|
|
25
|
-
first = CSS::SAC::Number.new('0', 'px')
|
|
26
|
-
second = CSS::SAC::Number.new('0', 'px')
|
|
27
|
-
assert_equal first.hash, second.hash
|
|
28
|
-
|
|
29
|
-
third = CSS::SAC::Number.new('0', 'em')
|
|
30
|
-
assert_equal first.hash, third.hash
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
def test_equals2
|
|
34
|
-
first = CSS::SAC::Number.new('10', 'px')
|
|
35
|
-
second = CSS::SAC::Number.new('10', 'px')
|
|
36
|
-
assert_equal first, second
|
|
37
|
-
|
|
38
|
-
third = CSS::SAC::Number.new('10', 'ex')
|
|
39
|
-
assert_not_equal first, third
|
|
40
|
-
|
|
41
|
-
fourth = CSS::SAC::Number.new('11', 'px')
|
|
42
|
-
assert_equal(11, fourth.integer_value)
|
|
43
|
-
assert_not_equal first, fourth
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
def test_equals2_zero
|
|
47
|
-
first = CSS::SAC::Number.new('0', 'px')
|
|
48
|
-
second = CSS::SAC::Number.new('0', 'em')
|
|
49
|
-
assert_equal first, second
|
|
50
|
-
|
|
51
|
-
first_float = CSS::SAC::Number.new('0.0', 'px')
|
|
52
|
-
second_float = CSS::SAC::Number.new('0.0', 'em')
|
|
53
|
-
assert_equal first_float, second_float
|
|
54
|
-
|
|
55
|
-
third_float = CSS::SAC::Number.new('0.1', 'em')
|
|
56
|
-
assert_equal 0.1, third_float.float_value
|
|
57
|
-
assert_not_equal first_float, third_float
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
def test_equals2_type
|
|
61
|
-
first = CSS::SAC::Number.new(10, '', :SAC_INTEGER)
|
|
62
|
-
second = CSS::SAC::Number.new(10, '', :SAC_INTEGER)
|
|
63
|
-
assert_equal first, second
|
|
64
|
-
|
|
65
|
-
third = CSS::SAC::Number.new(11, '', :SAC_INTEGER)
|
|
66
|
-
assert_not_equal first, third
|
|
67
|
-
end
|
|
68
|
-
end
|
data/test/test_lexical_string.rb
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
require File.dirname(__FILE__) + "/helper"
|
|
2
|
-
|
|
3
|
-
class LexicalStringTest < Test::Unit::TestCase
|
|
4
|
-
include CSS::SAC
|
|
5
|
-
|
|
6
|
-
def test_equals2
|
|
7
|
-
first = LexicalString.new('hey bro')
|
|
8
|
-
second = LexicalString.new('hey bro')
|
|
9
|
-
assert_equal(first, second)
|
|
10
|
-
|
|
11
|
-
third = LexicalString.new('hey bro again')
|
|
12
|
-
assert_not_equal(first, third)
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
def test_hash
|
|
16
|
-
first = LexicalString.new('hey bro')
|
|
17
|
-
second = LexicalString.new('hey bro')
|
|
18
|
-
assert_equal(first.hash, second.hash)
|
|
19
|
-
|
|
20
|
-
third = LexicalString.new('hey bro!')
|
|
21
|
-
assert_not_equal(first.hash, third.hash)
|
|
22
|
-
end
|
|
23
|
-
end
|