hmachine 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +4 -133
- data/hmachine.gemspec +15 -79
- metadata +22 -89
- data/.gitignore +0 -3
- data/Gemfile +0 -11
- data/Gemfile.lock +0 -51
- data/Rakefile +0 -53
- data/bin/hmachine +0 -99
- data/test/fixtures/hcard/commercenet.html +0 -21
- data/test/fixtures/hcard/geo.html +0 -28
- data/test/fixtures/huffduffer.html +0 -466
- data/test/fixtures/likeorhate.html +0 -48
- data/test/fixtures/rel_license.html +0 -4
- data/test/fixtures/test-fixture/hcard/hcard1.html +0 -147
- data/test/fixtures/test-fixture/hcard/hcard11.html +0 -123
- data/test/fixtures/test-fixture/hcard/hcard12.html +0 -178
- data/test/fixtures/test-fixture/hcard/hcard17.html +0 -165
- data/test/fixtures/test-fixture/hcard/hcard2.html +0 -264
- data/test/fixtures/test-fixture/hcard/hcard3.html +0 -144
- data/test/fixtures/test-fixture/hcard/hcard4.html +0 -117
- data/test/fixtures/test-fixture/hcard/hcard5.html +0 -119
- data/test/fixtures/test-fixture/hcard/hcard6.html +0 -188
- data/test/fixtures/test-fixture/hcard/hcard7.html +0 -188
- data/test/fixtures/test-fixture/hcard/hcard8.html +0 -130
- data/test/fixtures/test-fixture/hcard/hcard9.html +0 -111
- data/test/fixtures/test-fixture/hcard/hcard99.html +0 -215
- data/test/fixtures/test-fixture/value-class-date-time/value-dt-test-YYYY-MM-DD--HH-MM.html +0 -9
- data/test/fixtures/test-fixture/value-class-date-time/value-dt-test-abbr-YYYY-MM-DD--HH-MM.html +0 -4
- data/test/fixtures/xfn.html +0 -198
- data/test/fixtures/xmdp.html +0 -32
- data/test/fixtures/xoxo.html +0 -51
- data/test/hmachine_test.rb +0 -133
- data/test/microformat/adr_test.rb +0 -47
- data/test/microformat/geo_test.rb +0 -66
- data/test/microformat/hcard_test.rb +0 -510
- data/test/microformat/rellicense_test.rb +0 -36
- data/test/microformat/reltag_test.rb +0 -61
- data/test/microformat/votelinks_test.rb +0 -44
- data/test/microformat/xfn_test.rb +0 -28
- data/test/microformat/xmdp_test.rb +0 -16
- data/test/microformat/xoxo_test.rb +0 -51
- data/test/microformat_test.rb +0 -20
- data/test/pattern/date_time_test.rb +0 -55
- data/test/pattern/value_class_test.rb +0 -33
- data/test/pattern_test.rb +0 -132
- data/test/posh/anchor_test.rb +0 -41
- data/test/posh/base_test.rb +0 -150
- data/test/posh/definition_list_test.rb +0 -38
- data/test/test_helper.rb +0 -32
data/test/fixtures/xfn.html
DELETED
@@ -1,198 +0,0 @@
|
|
1
|
-
<!DOCTYPE html PUBdtC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
2
|
-
<html xmlns="http://www.w3.org/1999/xhtml">
|
3
|
-
<head>
|
4
|
-
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
5
|
-
<title>XFN Test Data</title>
|
6
|
-
<style type="text/css">
|
7
|
-
body {
|
8
|
-
font-family: Helvetica, Arial, sans-serif;
|
9
|
-
color: #161616;
|
10
|
-
}
|
11
|
-
h1, h2, h3, h4 {
|
12
|
-
color: #333;
|
13
|
-
}
|
14
|
-
|
15
|
-
h1 {
|
16
|
-
font-weight: normal;
|
17
|
-
font-size: 240%;
|
18
|
-
}
|
19
|
-
|
20
|
-
dt {
|
21
|
-
font-weight: bold;
|
22
|
-
padding-left:20px;
|
23
|
-
}
|
24
|
-
|
25
|
-
.valid dt {
|
26
|
-
color: #45C445;
|
27
|
-
}
|
28
|
-
.invalid dt {
|
29
|
-
color: #D22828;
|
30
|
-
}
|
31
|
-
a { color: #666666; }
|
32
|
-
</style>
|
33
|
-
</head>
|
34
|
-
|
35
|
-
<body>
|
36
|
-
<h1>XFN Test Data</h1>
|
37
|
-
<h4>Steve Ivy, 02-05-2007</h4>
|
38
|
-
<p>This test data is based on the <a href="http://gmpg.org/xfn/11">XFN 1.1 profile</a>. Comments or suggestions on this data can be sent to <a href="mailto:steveivy@gmail.com">steveivy@gmail.com</a>.</p>
|
39
|
-
<h3>Valid Relationships - singletons</h3>
|
40
|
-
<p>These represent a single relationship on each link and are all valid.</p>
|
41
|
-
|
42
|
-
<dl class="valid">
|
43
|
-
<dt>Friendship - pick at most one</dt>
|
44
|
-
<dd><a href="#contact" rel="contact">friend - contact</a></dd>
|
45
|
-
<dd><a href="#acquaintance" rel="acquaintance">friend - acquaintance</a></dd>
|
46
|
-
<dd><a href="#friend" rel="friend">friend - friend</a></dd>
|
47
|
-
</dl>
|
48
|
-
|
49
|
-
<dl class="valid">
|
50
|
-
<dt>Physical</dt>
|
51
|
-
<dd><a href="#met" rel="met">physical - met</a></dd>
|
52
|
-
</dl>
|
53
|
-
|
54
|
-
<dl class="valid">
|
55
|
-
<dt>Professional</dt>
|
56
|
-
<dd><a href="#co-worker" rel="co-worker">professional - co-worker</a></dd>
|
57
|
-
<dd><a href="#colleague" rel="colleague">professional - colleague</a></dd>
|
58
|
-
</dl>
|
59
|
-
|
60
|
-
<dl class="valid">
|
61
|
-
<dt>Geographical - pick at most one</dt>
|
62
|
-
<dd><a href="#co-resident" rel="co-resident">geographical - co-resident</a></dd>
|
63
|
-
<dd><a href="#neighbor" rel="neighbor">geographical - neighbor</a></dd>
|
64
|
-
</dl>
|
65
|
-
|
66
|
-
<dl class="valid">
|
67
|
-
<dt>Family - pick at most one</dt>
|
68
|
-
<dd><a href="#child" rel="child">family - child</a></dd>
|
69
|
-
<dd><a href="#parent" rel="parent">family - parent</a></dd>
|
70
|
-
<dd><a href="#sibling" rel="sibling">family - sibling</a></dd>
|
71
|
-
<dd><a href="#spouse" rel="spouse">family - spouse</a></dd>
|
72
|
-
<dd><a href="#kin" rel="kin">family - kin</a></dd>
|
73
|
-
</dl>
|
74
|
-
|
75
|
-
<dl class="valid">
|
76
|
-
<dt>Romantic</dt>
|
77
|
-
<dd><a href="#muse" rel="muse">romantic - muse</a></dt>
|
78
|
-
<dd><a href="#crush" rel="crush">romantic - crush</a></dd>
|
79
|
-
<dd><a href="#date" rel="colleague">romantic - date</a></dd>
|
80
|
-
<dd><a href="#sweetheart" rel="sweetheart">romantic - sweetheart</a></dd>
|
81
|
-
</dl>
|
82
|
-
|
83
|
-
<dl class="valid">
|
84
|
-
<dt>Identity</dt>
|
85
|
-
<dd><a href="#me" rel="me">me</a> (exclusive of all other values)</dd>
|
86
|
-
</dl>
|
87
|
-
|
88
|
-
<h3>Valid Relationships - compound</h3>
|
89
|
-
<p>These represent compound relationship on each link and should all be valid.</p>
|
90
|
-
|
91
|
-
<dl class="valid">
|
92
|
-
<dt>Friendship + Physical</dt>
|
93
|
-
<dd><a href="#contact" rel="contact met">contact + met</a></dd>
|
94
|
-
<dd><a href="#acquaintance" rel="acquaintance met">acquaintance + met</a></dd>
|
95
|
-
<dd><a href="#friend" rel="friend met">friend + met</a></dd>
|
96
|
-
</dl>
|
97
|
-
|
98
|
-
<dl class="valid">
|
99
|
-
<dt>Friendship + Professional</dt>
|
100
|
-
<dd><a href="#contact" rel="contact co-worker">contact + co-worker</a></dd>
|
101
|
-
<dd><a href="#acquaintance" rel="acquaintance co-worker">acquaintance + co-worker</a></dd>
|
102
|
-
<dd><a href="#friend" rel="friend co-worker">friend + co-worker</a></dd>
|
103
|
-
</dl>
|
104
|
-
|
105
|
-
<dl class="valid">
|
106
|
-
<dt>Friendship + Geographic</dt>
|
107
|
-
<dd><a href="#contact" rel="contact co-resident">contact + co-resident</a></dd>
|
108
|
-
<dd><a href="#acquaintance" rel="acquaintance co-resident">acquaintance + co-resident</a></dd>
|
109
|
-
<dd><a href="#friend" rel="friend co-resident">friend - co-resident</a></dd>
|
110
|
-
<dd><a href="#contact2" rel="contact co-resident">contact + neighbor</a></dd>
|
111
|
-
<dd><a href="#acquaintance2" rel="acquaintance neighbor">acquaintance + neighbor</a></dd>
|
112
|
-
<dd><a href="#friend2" rel="friend neighbor">friend - neighbor</a></dd>
|
113
|
-
</dl>
|
114
|
-
|
115
|
-
<dl class="valid">
|
116
|
-
<dt>Professional + Physical</dt>
|
117
|
-
<dd><a href="#co-worker" rel="co-worker met">co-worker + met</a></dd>
|
118
|
-
<dd><a href="#colleague" rel="colleague met">colleague + met</a></dd>
|
119
|
-
</dl>
|
120
|
-
|
121
|
-
<dl class="valid">
|
122
|
-
<dt>Professional + Romantic</dt>
|
123
|
-
<dd><a href="#co-worker" rel="co-worker muse">co-worker + muse</a></dd>
|
124
|
-
<dd><a href="#colleague" rel="colleague muse">colleague + muse</a></dd>
|
125
|
-
<dd><a href="#co-worker" rel="co-worker crush">co-worker + crush</a></dd>
|
126
|
-
<dd><a href="#colleague" rel="colleague crush">colleague + crush</a></dd>
|
127
|
-
<dd><a href="#co-worker" rel="co-worker date">co-worker + date</a></dd>
|
128
|
-
<dd><a href="#colleague" rel="colleague date">colleague + date</a></dd>
|
129
|
-
<dd><a href="#co-worker" rel="co-worker sweetheart">co-worker + sweetheart</a></dd>
|
130
|
-
<dd><a href="#colleague" rel="colleague sweetheart">colleague + sweetheart</a></dd>
|
131
|
-
</dl>
|
132
|
-
|
133
|
-
<dl class="valid">
|
134
|
-
<dt>Family + Professional</dt>
|
135
|
-
<dd><a href="#child" rel="child co-worker">child + co-worker</a></dd>
|
136
|
-
<dd><a href="#child" rel="child colleague">child + colleague</a></dd>
|
137
|
-
<dd><a href="#parent" rel="parent co-worker">parent + co-worker</a></dd>
|
138
|
-
<dd><a href="#parent" rel="parent colleague">parent + colleague</a></dd>
|
139
|
-
<dd><a href="#sibling" rel="sibling co-worker">sibling + co-worker</a></dd>
|
140
|
-
<dd><a href="#sibling" rel="sibling colleague">sibling + colleague</a></dd>
|
141
|
-
<dd><a href="#spouse" rel="spouse co-worker">spouse + co-worker</a></dd>
|
142
|
-
<dd><a href="#spouse" rel="spouse colleague">spouse + colleague</a></dd>
|
143
|
-
<dd><a href="#kin" rel="kin co-worker">kin + co-worker</a></dd>
|
144
|
-
<dd><a href="#kin" rel="kin colleague">kin + colleague</a></dd>
|
145
|
-
</dl>
|
146
|
-
|
147
|
-
<h3>Invalid relationships</h3>
|
148
|
-
<p>These relationships violate rules of exclusivity, mostly.</p>
|
149
|
-
|
150
|
-
<dl class="invalid">
|
151
|
-
<dt>Friendship - multiple values</dt>
|
152
|
-
<dd><a href="#contact" rel="contact acquaintance">contact + acquaintance</a></dd>
|
153
|
-
<dd><a href="#acquaintance" rel="acquaintance friend">acquaintance + friend</a></dd>
|
154
|
-
<dd><a href="#friend" rel="friend contact">friend + contact</a></dd>
|
155
|
-
</dl>
|
156
|
-
|
157
|
-
<dl class="invalid">
|
158
|
-
<dt>Geographical - multiple values</dt>
|
159
|
-
<dd><a href="#co-resident" rel="co-resident neighbor">co-resident + neighbor</a></dd>
|
160
|
-
</dl>
|
161
|
-
|
162
|
-
<dl class="invalid">
|
163
|
-
<dt>Family - multiple values</dt>
|
164
|
-
<dd><a href="#child" rel="child parent">child + parent</a></dd>
|
165
|
-
<dd><a href="#child" rel="child sibling">child + sibling</a></dd>
|
166
|
-
<dd><a href="#child" rel="child spouse">child + spouse</a></dd>
|
167
|
-
<dd><a href="#child" rel="child kin">child + kin</a></dd>
|
168
|
-
<dd><a href="#parent" rel="parent sibling">parent + sibling</a></dd>
|
169
|
-
<dd><a href="#parent" rel="parent spouse">parent + spouse</a></dd>
|
170
|
-
<dd><a href="#parent" rel="parent kin">parent + kin</a></dd>
|
171
|
-
<dd><a href="#sibling" rel="sibling spouse">sibling + spouse</a></dd>
|
172
|
-
<dd><a href="#sibling" rel="sibling kin">sibling + kin</a></dd>
|
173
|
-
<dd><a href="#spouse" rel="spouse kin">spouse + kin</a></dd>
|
174
|
-
</dl>
|
175
|
-
|
176
|
-
<dl class="invalid">
|
177
|
-
<dt>Identity - me + anything</dt>
|
178
|
-
<dd><a href="#contact" rel="me contact">me + contact</a></dd>
|
179
|
-
<dd><a href="#acquaintance" rel="me acquaintance">me + acquaintance</a></dd>
|
180
|
-
<dd><a href="#friend" rel="me friend">me + friend</a></dd>
|
181
|
-
<dd><a href="#met" rel="me met">me + met</a></dd>
|
182
|
-
<dd><a href="#co-worker" rel="me co-worker">me + co-worker</a></dd>
|
183
|
-
<dd><a href="#colleague" rel="me colleague">me + colleague</a></dd>
|
184
|
-
<dd><a href="#co-resident" rel="me co-resident">me + co-resident</a></dd>
|
185
|
-
<dd><a href="#neighbor" rel="me neighbor">me + neighbor</a></dd>
|
186
|
-
<dd><a href="#child" rel="me child">me + child</a></dd>
|
187
|
-
<dd><a href="#parent" rel="me parent">me + parent</a></dd>
|
188
|
-
<dd><a href="#sibling" rel="me sibling">me + sibling</a></dd>
|
189
|
-
<dd><a href="#spouse" rel="me spouse">me + spouse</a></dd>
|
190
|
-
<dd><a href="#kin" rel="me kin">me + kin</a></dd>
|
191
|
-
<dd><a href="#muse" rel="me muse">me + muse</a></dt>
|
192
|
-
<dd><a href="#crush" rel="me crush">me + crush</a></dd>
|
193
|
-
<dd><a href="#date" rel="me colleague">me + date</a></dd>
|
194
|
-
<dd><a href="#sweetheart" rel="me sweetheart">me + sweetheart</a></dd>
|
195
|
-
</dl>
|
196
|
-
|
197
|
-
</body>
|
198
|
-
</html>
|
data/test/fixtures/xmdp.html
DELETED
@@ -1,32 +0,0 @@
|
|
1
|
-
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
2
|
-
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
3
|
-
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
4
|
-
<head><title>sample HTML profile</title>
|
5
|
-
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
6
|
-
</head>
|
7
|
-
<body>
|
8
|
-
<dl class="profile">
|
9
|
-
<dt id='author'>author</dt>
|
10
|
-
<dd>A person who wrote (at least part of) the document.</dd>
|
11
|
-
<dt id='keywords'>keywords</dt>
|
12
|
-
<dd>A comma and/or space separated list of the
|
13
|
-
keywords or keyphrases of the document.</dd>
|
14
|
-
<dt id='copyright'>copyright</dt>
|
15
|
-
<dd>The name (or names) of the copyright holder(s)
|
16
|
-
for this document, and/or a complete statement of copyright.</dd>
|
17
|
-
<dt id='date'>date</dt>
|
18
|
-
<dd>The last updated date of the document, in ISO8601 date format.</dd>
|
19
|
-
<dt id='identifier'>identifier</dt>
|
20
|
-
<dd>The normative URI for the document.</dd>
|
21
|
-
<dt id='rel'>rel</dt>
|
22
|
-
<dd>
|
23
|
-
<dl>
|
24
|
-
<dt id='script'>script</dt>
|
25
|
-
<dd>A reference to a client-side script. When used with the
|
26
|
-
LINK element, the script is evaluated as the document loads and
|
27
|
-
may modify the contents of the document dynamically.</dd>
|
28
|
-
</dl>
|
29
|
-
</dd>
|
30
|
-
</dl>
|
31
|
-
</body>
|
32
|
-
</html>
|
data/test/fixtures/xoxo.html
DELETED
@@ -1,51 +0,0 @@
|
|
1
|
-
<ol class='xoxo'>
|
2
|
-
<li>Subject 1
|
3
|
-
<ol>
|
4
|
-
<li>subpoint a</li>
|
5
|
-
<li>subpoint b</li>
|
6
|
-
</ol>
|
7
|
-
</li>
|
8
|
-
<li>Subject 2
|
9
|
-
<ol compact="compact">
|
10
|
-
<li>subpoint c</li>
|
11
|
-
<li>subpoint d</li>
|
12
|
-
</ol>
|
13
|
-
</li>
|
14
|
-
<li>Subject 3
|
15
|
-
<ol>
|
16
|
-
<li>subpoint e</li>
|
17
|
-
<li>subpoint f
|
18
|
-
<ol>
|
19
|
-
<li>subsubpoint i</li>
|
20
|
-
<li>subsubpoint ii</li>
|
21
|
-
</ol>
|
22
|
-
</li>
|
23
|
-
</ol>
|
24
|
-
</li>
|
25
|
-
<li>
|
26
|
-
<dl>
|
27
|
-
<dt>text</dt>
|
28
|
-
<dd>item 1</dd>
|
29
|
-
<dt>description</dt>
|
30
|
-
<dd>This item represents the main point we're trying to make.</dd>
|
31
|
-
<dt>url</dt>
|
32
|
-
<dd>http://example.com/more.xoxo</dd>
|
33
|
-
<dt>title</dt>
|
34
|
-
<dd>title of item 1</dd>
|
35
|
-
<dt>type</dt>
|
36
|
-
<dd>text/xml</dd>
|
37
|
-
<dt>rel</dt>
|
38
|
-
<dd>help</dd>
|
39
|
-
</dl>
|
40
|
-
</li>
|
41
|
-
<li>
|
42
|
-
<a href="http://example.com/more.xoxo"
|
43
|
-
title="title of item 1"
|
44
|
-
type="text/xml"
|
45
|
-
rel="help">item 1</a>
|
46
|
-
<dl>
|
47
|
-
<dt>description</dt>
|
48
|
-
<dd>This item represents the main point we're trying to make.</dd>
|
49
|
-
</dl>
|
50
|
-
</li>
|
51
|
-
</ol>
|
data/test/hmachine_test.rb
DELETED
@@ -1,133 +0,0 @@
|
|
1
|
-
require File.join(File.dirname(__FILE__), 'test_helper')
|
2
|
-
|
3
|
-
class HMachineTest < Test::Unit::TestCase
|
4
|
-
setup do
|
5
|
-
FakeWeb.register_uri(:get, "http://markwunsch.com/", :body => "Nothing to be found 'round here")
|
6
|
-
@html = get_fixture('hcard/commercenet.html')
|
7
|
-
@doc = Nokogiri.parse(@html)
|
8
|
-
end
|
9
|
-
|
10
|
-
teardown do
|
11
|
-
FakeWeb.clean_registry
|
12
|
-
end
|
13
|
-
|
14
|
-
describe 'Class Level Methods' do
|
15
|
-
should 'normalize names' do
|
16
|
-
assert_equal :hcard, HMachine.normalize("hCard")
|
17
|
-
end
|
18
|
-
|
19
|
-
should 'map symbol names to Extraction methods' do
|
20
|
-
assert_equal HMachine::Pattern::ValueClass, HMachine.map(:value_class)
|
21
|
-
end
|
22
|
-
|
23
|
-
should 'parse an html document into a Nokogiri doc' do
|
24
|
-
assert HMachine.get_document('<div id="hello">World</div').is_a?(Nokogiri::XML::Node)
|
25
|
-
end
|
26
|
-
|
27
|
-
should 'open a url and get the document' do
|
28
|
-
doc = HMachine.get_url('http://markwunsch.com')
|
29
|
-
assert doc.is_a?(Nokogiri::XML::Document)
|
30
|
-
end
|
31
|
-
|
32
|
-
should 'get a document with a url or a string of html' do
|
33
|
-
doc = HMachine.get('http://markwunsch.com')
|
34
|
-
assert doc.is_a?(Nokogiri::XML::Document)
|
35
|
-
assert_equal 'http://markwunsch.com/', doc.url
|
36
|
-
assert HMachine.get('<p>Hello world</p>').is_a?(Nokogiri::XML::Document)
|
37
|
-
end
|
38
|
-
|
39
|
-
should 'find all microformats in a document' do
|
40
|
-
huffduff = HMachine.find get_fixture('huffduffer.html')
|
41
|
-
assert_equal 45, huffduff.count
|
42
|
-
end
|
43
|
-
|
44
|
-
should 'find a specific format in a document' do
|
45
|
-
huffduff = get_fixture('huffduffer.html')
|
46
|
-
hcards = HMachine.find huffduff, :hcard
|
47
|
-
assert_equal 10, hcards.count
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
describe 'Module' do
|
52
|
-
setup do
|
53
|
-
@klass = Class.new.send(:include, HMachine)
|
54
|
-
end
|
55
|
-
|
56
|
-
should 'define a function to search nodes' do
|
57
|
-
test = @klass.new
|
58
|
-
test.search {|node| node.css('div') }
|
59
|
-
assert_respond_to test.search, :call
|
60
|
-
end
|
61
|
-
|
62
|
-
should 'find an element in a node' do
|
63
|
-
test = @klass.new
|
64
|
-
test.search {|node| node.css('div') }
|
65
|
-
assert test.find_in(@doc).is_a?(Nokogiri::XML::NodeSet), "Search resulted in #{test.find_in(@doc).class}"
|
66
|
-
end
|
67
|
-
|
68
|
-
should 'test if an element can be found in a node' do
|
69
|
-
test = @klass.new
|
70
|
-
test.search {|node| node.css('foobar') }
|
71
|
-
assert !test.found_in?(@doc)
|
72
|
-
end
|
73
|
-
|
74
|
-
should 'define a function to validate nodes' do
|
75
|
-
test = @klass.new
|
76
|
-
test.validate {|node| true if node }
|
77
|
-
assert_respond_to test.validate, :call
|
78
|
-
end
|
79
|
-
|
80
|
-
should 'have a smart default validation method' do
|
81
|
-
test = @klass.new
|
82
|
-
node = @doc.css('.vcard').first
|
83
|
-
assert test.validate.call(node)
|
84
|
-
end
|
85
|
-
|
86
|
-
should 'test if a node is valid' do
|
87
|
-
test = @klass.new
|
88
|
-
node = @doc.css('.vcard').first
|
89
|
-
test.validate { |node| node['class'] == 'vcard' }
|
90
|
-
assert test.valid?(node)
|
91
|
-
end
|
92
|
-
|
93
|
-
should 'define an extraction method' do
|
94
|
-
test = @klass.new
|
95
|
-
test.extract {|node| node.content }
|
96
|
-
assert_respond_to test.extract, :call
|
97
|
-
end
|
98
|
-
|
99
|
-
should 'extract node content if no parsers are defined' do
|
100
|
-
test = @klass.new
|
101
|
-
assert_equal @doc.content.strip, test.extract_from(@doc)
|
102
|
-
end
|
103
|
-
|
104
|
-
should 'attempt to use a parser to extract content from node' do
|
105
|
-
test = @klass.new
|
106
|
-
test.extract {|node| node.css('a.fn').first['href'] }
|
107
|
-
assert_equal @doc.css('a.fn').first['href'], test.extract_from(@doc)
|
108
|
-
end
|
109
|
-
|
110
|
-
should "parse a node, extracting its contents" do
|
111
|
-
test = @klass.new
|
112
|
-
test.search {|node| node.css('.fn') }
|
113
|
-
assert_equal @doc.css('.fn').first.content, test.parse(@doc)
|
114
|
-
end
|
115
|
-
|
116
|
-
should 'parse a document, and return an array of contents' do
|
117
|
-
test = @klass.new
|
118
|
-
tel_type = @doc.css('.tel > .type').collect {|node| node.content }
|
119
|
-
test.search {|node| node.css('.tel') }
|
120
|
-
test.extract {|node| node.css('.type').first.content }
|
121
|
-
assert_equal tel_type, test.parse(@doc)
|
122
|
-
end
|
123
|
-
|
124
|
-
should 'parse the first instance of an element in a node' do
|
125
|
-
test = @klass.new
|
126
|
-
tel_type = @doc.css('.tel > .type').collect {|node| node.content }
|
127
|
-
test.search {|node| node.css('.tel') }
|
128
|
-
test.extract {|node| node.css('.type').first.content }
|
129
|
-
assert_equal tel_type.first, test.parse_first(@doc)
|
130
|
-
end
|
131
|
-
|
132
|
-
end
|
133
|
-
end
|
@@ -1,47 +0,0 @@
|
|
1
|
-
require File.join(File.dirname(__FILE__), '..', 'test_helper')
|
2
|
-
|
3
|
-
class AdrTest < Test::Unit::TestCase
|
4
|
-
setup do
|
5
|
-
@klass = HMachine::Microformat::Adr
|
6
|
-
@html = %Q{<div class="adr">
|
7
|
-
<div class="street-address">665 3rd St.</div>
|
8
|
-
<div class="extended-address">Suite 207</div>
|
9
|
-
<span class="locality">San Francisco</span>,
|
10
|
-
<span class="region">CA</span>
|
11
|
-
<span class="postal-code">94107</span>
|
12
|
-
<div class="country-name">U.S.A.</div>
|
13
|
-
</div>}
|
14
|
-
@doc = Nokogiri.parse(@html)
|
15
|
-
@adr = @klass.parse_first(@doc)
|
16
|
-
end
|
17
|
-
|
18
|
-
should 'have a street address' do
|
19
|
-
assert @adr.has_property?(:street_address)
|
20
|
-
assert_equal '665 3rd St.', @adr.street_address
|
21
|
-
end
|
22
|
-
|
23
|
-
should 'have an extended address' do
|
24
|
-
assert @adr.has_property?(:extended_address)
|
25
|
-
assert_equal 'Suite 207', @adr.extended_address
|
26
|
-
end
|
27
|
-
|
28
|
-
should 'have a locality' do
|
29
|
-
assert @adr.has_property?(:locality)
|
30
|
-
assert_equal 'San Francisco', @adr.locality
|
31
|
-
end
|
32
|
-
|
33
|
-
should 'have a region' do
|
34
|
-
assert @adr.has_property?(:region)
|
35
|
-
assert_equal 'CA', @adr.region
|
36
|
-
end
|
37
|
-
|
38
|
-
should 'have a postal code' do
|
39
|
-
assert @adr.has_property?(:postal_code)
|
40
|
-
assert_equal '94107', @adr.postal_code
|
41
|
-
end
|
42
|
-
|
43
|
-
should 'have a country name' do
|
44
|
-
assert @adr.has_property?(:country_name)
|
45
|
-
assert_equal 'U.S.A.', @adr.country_name
|
46
|
-
end
|
47
|
-
end
|