saper 0.5.1 → 0.5.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +3 -0
- data/Rakefile +6 -6
- data/bin/saper +17 -36
- data/lib/saper.rb +63 -20
- data/lib/saper/actions/append_with.rb +1 -1
- data/lib/saper/actions/convert_to_html.rb +1 -1
- data/lib/saper/actions/convert_to_json.rb +6 -2
- data/lib/saper/actions/convert_to_markdown.rb +1 -1
- data/lib/saper/actions/convert_to_time.rb +38 -1
- data/lib/saper/actions/convert_to_xml.rb +1 -1
- data/lib/saper/actions/create_atom.rb +6 -2
- data/lib/saper/actions/fetch.rb +3 -2
- data/lib/saper/actions/fetch_with_token.rb +18 -0
- data/lib/saper/actions/find.rb +1 -1
- data/lib/saper/actions/find_first.rb +1 -1
- data/lib/saper/actions/get_attribute.rb +7 -2
- data/lib/saper/actions/get_contents.rb +1 -1
- data/lib/saper/actions/get_text.rb +1 -1
- data/lib/saper/actions/nothing.rb +11 -0
- data/lib/saper/actions/prepend_with.rb +2 -2
- data/lib/saper/actions/remove_after.rb +2 -2
- data/lib/saper/actions/remove_before.rb +2 -2
- data/lib/saper/actions/remove_matching.rb +2 -2
- data/lib/saper/actions/remove_tags.rb +1 -1
- data/lib/saper/actions/replace.rb +1 -1
- data/lib/saper/actions/run_recipe.rb +2 -2
- data/lib/saper/actions/run_recipe_and_save.rb +3 -3
- data/lib/saper/actions/save.rb +2 -2
- data/lib/saper/actions/select_matching.rb +2 -2
- data/lib/saper/actions/set_input.rb +1 -1
- data/lib/saper/actions/skip_tags.rb +1 -1
- data/lib/saper/actions/split.rb +1 -1
- data/lib/saper/arguments/attribute.rb +6 -0
- data/lib/saper/arguments/recipe.rb +12 -6
- data/lib/saper/arguments/service.rb +12 -0
- data/lib/saper/arguments/text.rb +1 -0
- data/lib/saper/arguments/timezone.rb +2 -1
- data/lib/saper/arguments/url.rb +12 -0
- data/lib/saper/arguments/variable.rb +2 -1
- data/lib/saper/arguments/xpath.rb +2 -1
- data/lib/saper/core/action.rb +43 -13
- data/lib/saper/core/argument.rb +30 -14
- data/lib/saper/core/browser.rb +29 -28
- data/lib/saper/core/dsl.rb +14 -16
- data/lib/saper/core/error.rb +1 -1
- data/lib/saper/core/item.rb +2 -2
- data/lib/saper/core/keychain.rb +58 -5
- data/lib/saper/core/namespace.rb +15 -18
- data/lib/saper/core/recipe.rb +53 -12
- data/lib/saper/core/result.rb +72 -0
- data/lib/saper/core/runtime.rb +44 -177
- data/lib/saper/core/stack.rb +57 -0
- data/lib/saper/items/atom.rb +18 -1
- data/lib/saper/items/document.rb +39 -19
- data/lib/saper/items/html.rb +52 -7
- data/lib/saper/items/json.rb +19 -1
- data/lib/saper/items/markdown.rb +14 -4
- data/lib/saper/items/nothing.rb +6 -0
- data/lib/saper/items/text.rb +28 -3
- data/lib/saper/items/time.rb +25 -2
- data/lib/saper/items/url.rb +8 -2
- data/lib/saper/items/xml.rb +51 -11
- data/lib/{lib → saper/patches}/mechanize.rb +0 -0
- data/lib/{lib → saper/patches}/nokogiri.rb +0 -0
- data/lib/saper/version.rb +2 -2
- data/spec/actions/append_with_spec.rb +29 -52
- data/spec/actions/convert_to_html_spec.rb +13 -30
- data/spec/actions/convert_to_json_spec.rb +13 -30
- data/spec/actions/convert_to_markdown_spec.rb +17 -19
- data/spec/actions/convert_to_time_spec.rb +25 -43
- data/spec/actions/convert_to_xml_spec.rb +15 -11
- data/spec/actions/create_atom_spec.rb +11 -19
- data/spec/actions/fetch_spec.rb +3 -8
- data/spec/actions/find_first_spec.rb +38 -40
- data/spec/actions/find_spec.rb +23 -39
- data/spec/actions/get_attribute_spec.rb +30 -3
- data/spec/actions/{get_contents.rb → get_contents_spec.rb} +0 -0
- data/spec/actions/{get_text.rb → get_text_spec.rb} +0 -0
- data/spec/actions/nothing_spec.rb +7 -0
- data/spec/actions/prepend_with_spec.rb +31 -18
- data/spec/actions/{remove_after.rb → remove_after_spec.rb} +0 -0
- data/spec/actions/{remove_before.rb → remove_before_spec.rb} +0 -0
- data/spec/actions/remove_matching_spec.rb +7 -0
- data/spec/actions/remove_tags_spec.rb +7 -0
- data/spec/actions/run_recipe_and_save_spec.rb +7 -0
- data/spec/actions/run_recipe_spec.rb +7 -0
- data/spec/arguments/attribute_spec.rb +7 -0
- data/spec/arguments/recipe_spec.rb +7 -0
- data/spec/arguments/text_spec.rb +7 -0
- data/spec/arguments/timezone_spec.rb +7 -0
- data/spec/arguments/variable_spec.rb +7 -0
- data/spec/arguments/xpath_spec.rb +7 -0
- data/spec/core/action_spec.rb +13 -142
- data/spec/core/argument_spec.rb +38 -71
- data/spec/core/browser_spec.rb +18 -3
- data/spec/core/dsl_spec.rb +1 -1
- data/spec/core/item_spec.rb +1 -1
- data/spec/core/namespace_spec.rb +0 -11
- data/spec/core/recipe_spec.rb +54 -77
- data/spec/core/result_spec.rb +7 -0
- data/spec/core/runtime_spec.rb +20 -151
- data/spec/core/stack_spec.rb +7 -0
- data/spec/integration/simple_invalid_spec.rb +39 -0
- data/spec/integration/simple_valid_spec.rb +39 -0
- data/spec/items/atom_spec.rb +6 -1
- data/spec/items/document_spec.rb +93 -15
- data/spec/items/html_spec.rb +45 -28
- data/spec/items/json_spec.rb +10 -10
- data/spec/items/markdown_spec.rb +24 -3
- data/spec/items/nothing_spec.rb +1 -1
- data/spec/items/text_spec.rb +13 -41
- data/spec/items/time_spec.rb +25 -4
- data/spec/items/url_spec.rb +1 -7
- data/spec/items/xml_spec.rb +46 -39
- data/spec/spec_helper.rb +2 -21
- metadata +63 -60
- data/lib/lib/json_search.rb +0 -54
- data/spec/actions/run_recipe_and_save_spec.tmp.rb +0 -52
- data/spec/actions/run_recipe_spec.tmp.rb +0 -53
data/spec/items/atom_spec.rb
CHANGED
data/spec/items/document_spec.rb
CHANGED
@@ -1,25 +1,103 @@
|
|
1
1
|
require './spec/spec_helper'
|
2
2
|
|
3
3
|
describe Saper::Items::Document do
|
4
|
-
|
5
|
-
|
6
|
-
|
4
|
+
let(:doc) do
|
5
|
+
Saper::Items::Document.new("")
|
7
6
|
end
|
7
|
+
let(:doc_with_params) do
|
8
|
+
Saper::Items::Document.new("", "http://google.com", { "content-type" => "text/html; charset=win-1251" })
|
9
|
+
end
|
10
|
+
it ".new(nil) raises InvalidItem" do
|
11
|
+
lambda { Saper::Items::Document.new(nil) }.must_raise(Saper::InvalidItem)
|
12
|
+
end
|
13
|
+
it "#uri returns nil by default" do
|
14
|
+
doc.uri.must_be_nil
|
15
|
+
end
|
16
|
+
it "#uri returns URI when defined" do
|
17
|
+
doc_with_params.uri.must_equal "http://google.com"
|
18
|
+
end
|
19
|
+
it "#mime returns nil by default" do
|
20
|
+
doc.mime.must_be_nil
|
21
|
+
end
|
22
|
+
it "#mime returns mime type if defined in headers" do
|
23
|
+
doc_with_params.mime.must_equal "text/html"
|
24
|
+
end
|
25
|
+
it "#charset returns nil by defaukt" do
|
26
|
+
doc.charset.must_be_nil
|
27
|
+
end
|
28
|
+
it "#charset returns charset if defined in headers" do
|
29
|
+
doc_with_params.charset.must_equal "win-1251"
|
30
|
+
end
|
31
|
+
end
|
8
32
|
|
9
|
-
|
10
|
-
|
33
|
+
describe "Saper::Items::Document(empty String)" do
|
34
|
+
subject do
|
35
|
+
Saper::Items::Document.new("")
|
36
|
+
end
|
37
|
+
it "#size returns zero" do
|
38
|
+
subject.size.must_equal 0
|
39
|
+
end
|
40
|
+
it "#to_html raises InvalidItem" do
|
41
|
+
lambda { subject.to_html }.must_raise(Saper::InvalidItem)
|
42
|
+
end
|
43
|
+
it "#to_markdown raises InvalidItem" do
|
44
|
+
lambda { subject.to_markdown }.must_raise(Saper::InvalidItem)
|
11
45
|
end
|
12
|
-
|
13
|
-
|
14
|
-
|
46
|
+
it "#to_native returns empty string" do
|
47
|
+
subject.to_native.must_equal ""
|
15
48
|
end
|
16
|
-
|
17
|
-
|
18
|
-
|
49
|
+
it "#to_text returns Text" do
|
50
|
+
subject.to_text.must_be_kind_of(Saper::Items::Text)
|
19
51
|
end
|
20
|
-
|
21
|
-
|
22
|
-
|
52
|
+
it "#to_xml raises InvalidItem" do
|
53
|
+
lambda { subject.to_xml }.must_raise(Saper::InvalidItem)
|
23
54
|
end
|
24
|
-
|
25
55
|
end
|
56
|
+
|
57
|
+
describe "Saper::Items::Document(HTML as String)" do
|
58
|
+
subject do
|
59
|
+
Saper::Items::Document.new("<html></html>")
|
60
|
+
end
|
61
|
+
it "#size returns string length" do
|
62
|
+
subject.size.must_equal 13
|
63
|
+
end
|
64
|
+
it "#to_html returns HTML" do
|
65
|
+
subject.to_html.must_be_kind_of(Saper::Items::HTML)
|
66
|
+
end
|
67
|
+
it "#to_markdown returns Markdown" do
|
68
|
+
subject.to_markdown.must_be_kind_of(Saper::Items::Markdown)
|
69
|
+
end
|
70
|
+
it "#to_native returns document contents" do
|
71
|
+
subject.to_native.must_equal "<html></html>"
|
72
|
+
end
|
73
|
+
it "#to_text returns Text" do
|
74
|
+
subject.to_text.must_be_kind_of(Saper::Items::Text)
|
75
|
+
end
|
76
|
+
it "#to_xml raises InvalidItem" do
|
77
|
+
subject.to_xml.must_be_kind_of(Saper::Items::XML)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
describe "Saper::Items::Document(XML as String)" do
|
82
|
+
subject do
|
83
|
+
Saper::Items::Document.new("<response></response>")
|
84
|
+
end
|
85
|
+
it "#size returns string length" do
|
86
|
+
subject.size.must_equal 21
|
87
|
+
end
|
88
|
+
it "#to_html returns HTML" do
|
89
|
+
subject.to_html.must_be_kind_of(Saper::Items::HTML)
|
90
|
+
end
|
91
|
+
it "#to_markdown returns Markdown" do
|
92
|
+
subject.to_markdown.must_be_kind_of(Saper::Items::Markdown)
|
93
|
+
end
|
94
|
+
it "#to_native returns document contents" do
|
95
|
+
subject.to_native.must_equal "<response></response>"
|
96
|
+
end
|
97
|
+
it "#to_text returns Text" do
|
98
|
+
subject.to_text.must_be_kind_of(Saper::Items::Text)
|
99
|
+
end
|
100
|
+
it "#to_xml returns XML" do
|
101
|
+
subject.to_xml.must_be_kind_of(Saper::Items::XML)
|
102
|
+
end
|
103
|
+
end
|
data/spec/items/html_spec.rb
CHANGED
@@ -1,41 +1,58 @@
|
|
1
1
|
require './spec/spec_helper'
|
2
2
|
|
3
3
|
describe Saper::Items::HTML do
|
4
|
-
|
5
|
-
|
6
|
-
|
4
|
+
let :html do
|
5
|
+
"<html><body><p><a href=\"http://google.com\">Google</a></p><p><a href=\"http://yandex.ru\">Yandex</a></p></body></html>"
|
7
6
|
end
|
8
|
-
|
9
|
-
|
10
|
-
|
7
|
+
let :subject do
|
8
|
+
Saper::Items::HTML.new html
|
11
9
|
end
|
12
|
-
|
13
|
-
|
14
|
-
|
10
|
+
it "::new(nil) raises InvalidItem" do
|
11
|
+
lambda { Saper::Items::HTML.new(nil) }.must_raise(Saper::InvalidItem)
|
15
12
|
end
|
16
|
-
|
17
|
-
|
18
|
-
|
13
|
+
it "::new('') raises InvalidItem" do
|
14
|
+
lambda { Saper::Items::HTML.new("") }.must_raise(Saper::InvalidItem)
|
19
15
|
end
|
20
|
-
|
21
|
-
|
22
|
-
|
16
|
+
it "::new(String) returns HTML" do
|
17
|
+
Saper::Items::HTML.new("string").must_be_instance_of(Saper::Items::HTML)
|
23
18
|
end
|
24
|
-
|
25
|
-
|
26
|
-
|
19
|
+
it "#find(valid) returns HTML" do
|
20
|
+
subject.find("a").must_be_kind_of(Saper::Items::HTML)
|
27
21
|
end
|
28
|
-
|
29
|
-
|
30
|
-
|
22
|
+
it "#find(invalid) returns nil" do
|
23
|
+
subject.find("li").must_be_nil
|
31
24
|
end
|
32
|
-
|
33
|
-
|
34
|
-
|
25
|
+
it "#find_all(valid) returns an Array of HTML instances" do
|
26
|
+
subject.find_all("a").first.must_be_kind_of(Saper::Items::HTML)
|
35
27
|
end
|
36
|
-
|
37
|
-
|
38
|
-
|
28
|
+
it "#find_all(invalid) returns an empty Array" do
|
29
|
+
subject.find_all("li").must_be_empty
|
30
|
+
end
|
31
|
+
it "#[](valid) returns Text" do
|
32
|
+
subject.find("a")["href"].must_be_kind_of(Saper::Items::Text)
|
33
|
+
end
|
34
|
+
it "#[](invalid) returns nil" do
|
35
|
+
subject.find("a")["unknown"].must_be_nil
|
36
|
+
end
|
37
|
+
it "#inner_html returns Text" do
|
38
|
+
subject.inner_html.must_be_kind_of(Saper::Items::Text)
|
39
|
+
end
|
40
|
+
it "#inner_html returns valid contents" do
|
41
|
+
subject.inner_html.must_be :==, html
|
42
|
+
end
|
43
|
+
it "#inner_text returns Text" do
|
44
|
+
subject.inner_text.must_be_kind_of(Saper::Items::Text)
|
45
|
+
end
|
46
|
+
it "#remove_children_preserving_content returns modified HTML" do
|
47
|
+
subject.remove_children_preserving_content("a").to_native.must_equal "<html><body><p>Google</p><p>Yandex</p></body></html>"
|
48
|
+
end
|
49
|
+
it "#remove_children_with_content returns modified HTML" do
|
50
|
+
subject.remove_children_with_content("a").to_native.must_equal "<html><body><p></p><p></p></body></html>"
|
51
|
+
end
|
52
|
+
it "#to_markdown returns Markdown" do
|
53
|
+
subject.to_markdown.must_be_kind_of(Saper::Items::Markdown)
|
54
|
+
end
|
55
|
+
it "#== returns true for matching string" do
|
56
|
+
subject.to_s.must_be :==, html
|
39
57
|
end
|
40
|
-
|
41
58
|
end
|
data/spec/items/json_spec.rb
CHANGED
@@ -1,17 +1,17 @@
|
|
1
1
|
require './spec/spec_helper'
|
2
2
|
|
3
3
|
describe Saper::Items::JSON do
|
4
|
-
|
5
|
-
|
6
|
-
|
4
|
+
it "::new(nil) raises InvalidItem" do
|
5
|
+
lambda { Saper::Items::JSON.new(nil) }.must_raise(Saper::InvalidItem)
|
7
6
|
end
|
8
|
-
|
9
|
-
|
10
|
-
|
7
|
+
it "::new('') raises InvalidItem" do
|
8
|
+
lambda { Saper::Items::JSON.new("") }.must_raise(Saper::InvalidItem)
|
11
9
|
end
|
12
|
-
|
13
|
-
|
14
|
-
|
10
|
+
it "::new(invalid String) raises InvalidItem" do
|
11
|
+
lambda { Saper::Items::JSON.new("not json") }.must_raise(Saper::InvalidItem)
|
15
12
|
end
|
16
|
-
|
13
|
+
it "#find" # TODO
|
14
|
+
it "#find_all" # TODO
|
15
|
+
it "#to_native" # TODO
|
16
|
+
it "#to_s" # TODO
|
17
17
|
end
|
data/spec/items/markdown_spec.rb
CHANGED
@@ -1,7 +1,28 @@
|
|
1
1
|
require './spec/spec_helper'
|
2
2
|
|
3
3
|
describe Saper::Items::Markdown do
|
4
|
-
|
5
|
-
|
6
|
-
|
4
|
+
let :html do
|
5
|
+
Saper::Items::HTML.new('<p>test</p>')
|
6
|
+
end
|
7
|
+
let :subject do
|
8
|
+
Saper::Items::Markdown.new(html)
|
9
|
+
end
|
10
|
+
it "::new(nil) raises InvalidItem" do
|
11
|
+
lambda { Saper::Items::Markdown.new(nil) }.must_raise(Saper::InvalidItem)
|
12
|
+
end
|
13
|
+
it "::new('') raises InvalidItem" do
|
14
|
+
lambda { Saper::Items::Markdown.new("") }.must_raise(Saper::InvalidItem)
|
15
|
+
end
|
16
|
+
it "::new(String) returns Markdown" do
|
17
|
+
lambda { Saper::Items::Markdown.new("string") }.must_raise(Saper::InvalidItem)
|
18
|
+
end
|
19
|
+
it "#to_native returns underlying String" do
|
20
|
+
subject.to_native.must_equal 'test'
|
21
|
+
end
|
22
|
+
it "#to_s returns underlying String" do
|
23
|
+
subject.to_s.must_equal 'test'
|
24
|
+
end
|
25
|
+
it "#== returns true for a matching string" do
|
26
|
+
subject.to_native.must_equal "test"
|
27
|
+
end
|
7
28
|
end
|
data/spec/items/nothing_spec.rb
CHANGED
data/spec/items/text_spec.rb
CHANGED
@@ -1,45 +1,17 @@
|
|
1
1
|
require './spec/spec_helper'
|
2
2
|
|
3
3
|
describe Saper::Items::Text do
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
end
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
context "#gsub" do
|
18
|
-
|
19
|
-
end
|
20
|
-
|
21
|
-
context "#split" do
|
22
|
-
|
23
|
-
end
|
24
|
-
|
25
|
-
context "#to_json" do
|
26
|
-
|
27
|
-
end
|
28
|
-
|
29
|
-
context "#to_html" do
|
30
|
-
|
31
|
-
end
|
32
|
-
|
33
|
-
context "#to_s" do
|
34
|
-
|
35
|
-
end
|
36
|
-
|
37
|
-
context "#to_time" do
|
38
|
-
|
39
|
-
end
|
40
|
-
|
41
|
-
context "#to_xml" do
|
42
|
-
|
43
|
-
end
|
44
|
-
|
4
|
+
subject do
|
5
|
+
Saper::Items::Text.new("text")
|
6
|
+
end
|
7
|
+
it "#== returns true for comparable String" do
|
8
|
+
subject.must_be :==, "text"
|
9
|
+
end
|
10
|
+
it "#gsub" # TODO
|
11
|
+
it "#split" # TODO
|
12
|
+
it "#to_json" # TODO
|
13
|
+
it "#to_html" # TODO
|
14
|
+
it "#to_s" # TODO
|
15
|
+
it "#to_time" # TODO
|
16
|
+
it "#to_xml" # TODO
|
45
17
|
end
|
data/spec/items/time_spec.rb
CHANGED
@@ -1,7 +1,28 @@
|
|
1
1
|
require './spec/spec_helper'
|
2
2
|
|
3
3
|
describe Saper::Items::Time do
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
4
|
+
let(:input) do
|
5
|
+
'19-04-2014 18:56'
|
6
|
+
end
|
7
|
+
it ".new(nil) raises InvalidItem" do
|
8
|
+
lambda { Saper::Items::Time.new(nil) }.must_raise(Saper::InvalidItem)
|
9
|
+
end
|
10
|
+
it ".new('') raises InvalidItem" do
|
11
|
+
lambda { Saper::Items::Time.new('') }.must_raise(Saper::InvalidItem)
|
12
|
+
end
|
13
|
+
it ".new(invalid) raises InvalidItem" do
|
14
|
+
lambda { Saper::Items::Time.new(input, '%H:%M') }.must_raise(Saper::InvalidItem)
|
15
|
+
end
|
16
|
+
it ".new(valid) returns Time instance" do
|
17
|
+
Saper::Items::Time.new(input, '%d-%m-%Y %H:%M').must_be_instance_of(Saper::Items::Time)
|
18
|
+
end
|
19
|
+
it ".new(valid) returns valid time" do
|
20
|
+
Saper::Items::Time.new(input, '%d-%m-%Y %H:%M').to_s.must_be :==, '2014-04-19T18:56:00+00:00'
|
21
|
+
end
|
22
|
+
it ".new(valid, tz) returns Time instance" do
|
23
|
+
Saper::Items::Time.new(input, '%d-%m-%Y %H:%M', 'Europe/Moscow').to_s.must_be :==, '2014-04-19T18:56:00+04:00'
|
24
|
+
end
|
25
|
+
it "#to_native returns native Time instance" do
|
26
|
+
Saper::Items::Time.new(input, '%d-%m-%Y %H:%M').to_native.must_be_instance_of(Time)
|
27
|
+
end
|
28
|
+
end
|
data/spec/items/url_spec.rb
CHANGED
data/spec/items/xml_spec.rb
CHANGED
@@ -1,45 +1,52 @@
|
|
1
1
|
require './spec/spec_helper'
|
2
2
|
|
3
3
|
describe Saper::Items::XML do
|
4
|
-
|
5
|
-
|
6
|
-
it "returns Text instance" do
|
7
|
-
Saper::Items::Text.new("text").should be_a(Saper::Items::Text)
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
context ".new(nil)" do
|
12
|
-
it "raises InvalidItem" do
|
13
|
-
expect { Saper::Items::XML.new(nil) }.to raise_error(Saper::InvalidItem)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
context "#[]" do
|
18
|
-
|
19
|
-
end
|
20
|
-
|
21
|
-
context "#find" do
|
22
|
-
|
23
|
-
end
|
24
|
-
|
25
|
-
context "#find_all" do
|
26
|
-
|
27
|
-
end
|
28
|
-
|
29
|
-
context "#inner_html" do
|
30
|
-
|
31
|
-
end
|
32
|
-
|
33
|
-
context "#inner_text" do
|
34
|
-
|
35
|
-
end
|
36
|
-
|
37
|
-
context "#remove_children_preserving_content" do
|
38
|
-
|
4
|
+
let :xml do
|
5
|
+
"<response><item name=\"Google\"><host>google.com</host></item><item name=\"Yandex\"><host>yandex.ru</host></item></response>"
|
39
6
|
end
|
40
|
-
|
41
|
-
|
42
|
-
|
7
|
+
let :subject do
|
8
|
+
Saper::Items::XML.new xml
|
9
|
+
end
|
10
|
+
it "::new(nil) raises InvalidItem" do
|
11
|
+
lambda { Saper::Items::XML.new(nil) }.must_raise(Saper::InvalidItem)
|
12
|
+
end
|
13
|
+
it "::new('') raises InvalidItem" do
|
14
|
+
lambda { Saper::Items::XML.new("") }.must_raise(Saper::InvalidItem)
|
15
|
+
end
|
16
|
+
it "::new(String) returns XML" do
|
17
|
+
Saper::Items::XML.new("string").must_be_instance_of(Saper::Items::XML)
|
18
|
+
end
|
19
|
+
it "#find(valid) returns XML" do
|
20
|
+
subject.find("host").must_be_kind_of(Saper::Items::XML)
|
21
|
+
end
|
22
|
+
it "#find(invalid) returns nil" do
|
23
|
+
subject.find("smth").must_be_nil
|
24
|
+
end
|
25
|
+
it "#find_all(valid) returns an Array of XML instances" do
|
26
|
+
subject.find_all("host").first.must_be_kind_of(Saper::Items::XML)
|
27
|
+
end
|
28
|
+
it "#find_all(invalid) returns an empty Array" do
|
29
|
+
subject.find_all("smth").must_be_empty
|
30
|
+
end
|
31
|
+
it "#[](valid) returns Text" do
|
32
|
+
subject.find("item")["name"].must_be_kind_of(Saper::Items::Text)
|
33
|
+
end
|
34
|
+
it "#[](invalid) returns nil" do
|
35
|
+
subject.find("item")["unknown"].must_be_nil
|
36
|
+
end
|
37
|
+
it "#inner_xml returns Text" do
|
38
|
+
subject.inner_xml.must_be_kind_of(Saper::Items::Text)
|
39
|
+
end
|
40
|
+
it "#inner_xml returns valid contents" do
|
41
|
+
subject.inner_xml.must_be :==, xml
|
42
|
+
end
|
43
|
+
it "#inner_text returns Text" do
|
44
|
+
subject.inner_text.must_be_kind_of(Saper::Items::Text)
|
45
|
+
end
|
46
|
+
it "#remove_children_preserving_content returns modified HTML" do
|
47
|
+
subject.remove_children_preserving_content("host").to_native.must_equal "<response><item name=\"Google\">google.com</item><item name=\"Yandex\">yandex.ru</item></response>"
|
48
|
+
end
|
49
|
+
it "#remove_children_with_content returns modified HTML" do
|
50
|
+
subject.remove_children_with_content("host").to_native.must_equal "<response><item name=\"Google\"></item><item name=\"Yandex\"></item></response>"
|
43
51
|
end
|
44
|
-
|
45
52
|
end
|