saper 0.5.1 → 0.5.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.
- 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
|