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.
Files changed (120) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +3 -0
  3. data/Rakefile +6 -6
  4. data/bin/saper +17 -36
  5. data/lib/saper.rb +63 -20
  6. data/lib/saper/actions/append_with.rb +1 -1
  7. data/lib/saper/actions/convert_to_html.rb +1 -1
  8. data/lib/saper/actions/convert_to_json.rb +6 -2
  9. data/lib/saper/actions/convert_to_markdown.rb +1 -1
  10. data/lib/saper/actions/convert_to_time.rb +38 -1
  11. data/lib/saper/actions/convert_to_xml.rb +1 -1
  12. data/lib/saper/actions/create_atom.rb +6 -2
  13. data/lib/saper/actions/fetch.rb +3 -2
  14. data/lib/saper/actions/fetch_with_token.rb +18 -0
  15. data/lib/saper/actions/find.rb +1 -1
  16. data/lib/saper/actions/find_first.rb +1 -1
  17. data/lib/saper/actions/get_attribute.rb +7 -2
  18. data/lib/saper/actions/get_contents.rb +1 -1
  19. data/lib/saper/actions/get_text.rb +1 -1
  20. data/lib/saper/actions/nothing.rb +11 -0
  21. data/lib/saper/actions/prepend_with.rb +2 -2
  22. data/lib/saper/actions/remove_after.rb +2 -2
  23. data/lib/saper/actions/remove_before.rb +2 -2
  24. data/lib/saper/actions/remove_matching.rb +2 -2
  25. data/lib/saper/actions/remove_tags.rb +1 -1
  26. data/lib/saper/actions/replace.rb +1 -1
  27. data/lib/saper/actions/run_recipe.rb +2 -2
  28. data/lib/saper/actions/run_recipe_and_save.rb +3 -3
  29. data/lib/saper/actions/save.rb +2 -2
  30. data/lib/saper/actions/select_matching.rb +2 -2
  31. data/lib/saper/actions/set_input.rb +1 -1
  32. data/lib/saper/actions/skip_tags.rb +1 -1
  33. data/lib/saper/actions/split.rb +1 -1
  34. data/lib/saper/arguments/attribute.rb +6 -0
  35. data/lib/saper/arguments/recipe.rb +12 -6
  36. data/lib/saper/arguments/service.rb +12 -0
  37. data/lib/saper/arguments/text.rb +1 -0
  38. data/lib/saper/arguments/timezone.rb +2 -1
  39. data/lib/saper/arguments/url.rb +12 -0
  40. data/lib/saper/arguments/variable.rb +2 -1
  41. data/lib/saper/arguments/xpath.rb +2 -1
  42. data/lib/saper/core/action.rb +43 -13
  43. data/lib/saper/core/argument.rb +30 -14
  44. data/lib/saper/core/browser.rb +29 -28
  45. data/lib/saper/core/dsl.rb +14 -16
  46. data/lib/saper/core/error.rb +1 -1
  47. data/lib/saper/core/item.rb +2 -2
  48. data/lib/saper/core/keychain.rb +58 -5
  49. data/lib/saper/core/namespace.rb +15 -18
  50. data/lib/saper/core/recipe.rb +53 -12
  51. data/lib/saper/core/result.rb +72 -0
  52. data/lib/saper/core/runtime.rb +44 -177
  53. data/lib/saper/core/stack.rb +57 -0
  54. data/lib/saper/items/atom.rb +18 -1
  55. data/lib/saper/items/document.rb +39 -19
  56. data/lib/saper/items/html.rb +52 -7
  57. data/lib/saper/items/json.rb +19 -1
  58. data/lib/saper/items/markdown.rb +14 -4
  59. data/lib/saper/items/nothing.rb +6 -0
  60. data/lib/saper/items/text.rb +28 -3
  61. data/lib/saper/items/time.rb +25 -2
  62. data/lib/saper/items/url.rb +8 -2
  63. data/lib/saper/items/xml.rb +51 -11
  64. data/lib/{lib → saper/patches}/mechanize.rb +0 -0
  65. data/lib/{lib → saper/patches}/nokogiri.rb +0 -0
  66. data/lib/saper/version.rb +2 -2
  67. data/spec/actions/append_with_spec.rb +29 -52
  68. data/spec/actions/convert_to_html_spec.rb +13 -30
  69. data/spec/actions/convert_to_json_spec.rb +13 -30
  70. data/spec/actions/convert_to_markdown_spec.rb +17 -19
  71. data/spec/actions/convert_to_time_spec.rb +25 -43
  72. data/spec/actions/convert_to_xml_spec.rb +15 -11
  73. data/spec/actions/create_atom_spec.rb +11 -19
  74. data/spec/actions/fetch_spec.rb +3 -8
  75. data/spec/actions/find_first_spec.rb +38 -40
  76. data/spec/actions/find_spec.rb +23 -39
  77. data/spec/actions/get_attribute_spec.rb +30 -3
  78. data/spec/actions/{get_contents.rb → get_contents_spec.rb} +0 -0
  79. data/spec/actions/{get_text.rb → get_text_spec.rb} +0 -0
  80. data/spec/actions/nothing_spec.rb +7 -0
  81. data/spec/actions/prepend_with_spec.rb +31 -18
  82. data/spec/actions/{remove_after.rb → remove_after_spec.rb} +0 -0
  83. data/spec/actions/{remove_before.rb → remove_before_spec.rb} +0 -0
  84. data/spec/actions/remove_matching_spec.rb +7 -0
  85. data/spec/actions/remove_tags_spec.rb +7 -0
  86. data/spec/actions/run_recipe_and_save_spec.rb +7 -0
  87. data/spec/actions/run_recipe_spec.rb +7 -0
  88. data/spec/arguments/attribute_spec.rb +7 -0
  89. data/spec/arguments/recipe_spec.rb +7 -0
  90. data/spec/arguments/text_spec.rb +7 -0
  91. data/spec/arguments/timezone_spec.rb +7 -0
  92. data/spec/arguments/variable_spec.rb +7 -0
  93. data/spec/arguments/xpath_spec.rb +7 -0
  94. data/spec/core/action_spec.rb +13 -142
  95. data/spec/core/argument_spec.rb +38 -71
  96. data/spec/core/browser_spec.rb +18 -3
  97. data/spec/core/dsl_spec.rb +1 -1
  98. data/spec/core/item_spec.rb +1 -1
  99. data/spec/core/namespace_spec.rb +0 -11
  100. data/spec/core/recipe_spec.rb +54 -77
  101. data/spec/core/result_spec.rb +7 -0
  102. data/spec/core/runtime_spec.rb +20 -151
  103. data/spec/core/stack_spec.rb +7 -0
  104. data/spec/integration/simple_invalid_spec.rb +39 -0
  105. data/spec/integration/simple_valid_spec.rb +39 -0
  106. data/spec/items/atom_spec.rb +6 -1
  107. data/spec/items/document_spec.rb +93 -15
  108. data/spec/items/html_spec.rb +45 -28
  109. data/spec/items/json_spec.rb +10 -10
  110. data/spec/items/markdown_spec.rb +24 -3
  111. data/spec/items/nothing_spec.rb +1 -1
  112. data/spec/items/text_spec.rb +13 -41
  113. data/spec/items/time_spec.rb +25 -4
  114. data/spec/items/url_spec.rb +1 -7
  115. data/spec/items/xml_spec.rb +46 -39
  116. data/spec/spec_helper.rb +2 -21
  117. metadata +63 -60
  118. data/lib/lib/json_search.rb +0 -54
  119. data/spec/actions/run_recipe_and_save_spec.tmp.rb +0 -52
  120. data/spec/actions/run_recipe_spec.tmp.rb +0 -53
File without changes
File without changes
@@ -1,3 +1,3 @@
1
1
  module Saper
2
- VERSION = "0.5.1"
3
- end
2
+ VERSION = "0.5.2"
3
+ end
@@ -1,60 +1,37 @@
1
1
  require './spec/spec_helper'
2
2
 
3
3
  describe Saper::Actions::AppendWith do
4
-
5
- let(:action) do
4
+ let :subject do
6
5
  Saper::Actions::AppendWith.new('!')
7
6
  end
8
-
9
- context ".new(nil)" do
10
- it "raises InvalidArgument" do
11
- expect { Saper::Actions::AppendWith.new(nil) }.to raise_error(Saper::InvalidArgument)
12
- end
7
+ it ".new(nil) raises InvalidArgument" do
8
+ lambda { Saper::Actions::AppendWith.new(nil) }.must_raise(Saper::InvalidArgument)
13
9
  end
14
-
15
- context ".new(Number)" do
16
- it "raises InvalidArgument" do
17
- expect { Saper::Actions::AppendWith.new(2) }.to raise_error(Saper::InvalidArgument)
18
- end
10
+ it ".new(Numeric) raises InvalidArgument" do
11
+ lambda { Saper::Actions::AppendWith.new(2) }.must_raise(Saper::InvalidArgument)
12
+ end
13
+ it ".new(Hash) raises InvalidArgumenth" do
14
+ lambda { Saper::Actions::AppendWith.new({}) }.must_raise(Saper::InvalidArgument)
15
+ end
16
+ it ".new(Array) raises InvalidArgument" do
17
+ lambda { Saper::Actions::AppendWith.new([]) }.must_raise(Saper::InvalidArgument)
18
+ end
19
+ it ".new(String)returns Action instance" do
20
+ Saper::Actions::AppendWith.new("!").must_be_kind_of(Saper::Action)
21
+ end
22
+ it "#run(nil) raises InvalidInput" do
23
+ lambda { subject.run(nil) }.must_raise(Saper::InvalidInput)
24
+ end
25
+ it "#run(Numeric) returns valid output" do
26
+ lambda { subject.run(1) }.must_raise(Saper::InvalidInput)
27
+ end
28
+ it "#run(String) returns valid output" do
29
+ subject.run('string').must_be :==, 'string!'
30
+ end
31
+ it "#run(Text) returns valid output" do
32
+ subject.run(Saper::Items::Text.new('string')).must_be :==, 'string!'
33
+ end
34
+ it "#run returns Text instance" do
35
+ subject.run('string').must_be_instance_of(Saper::Items::Text)
19
36
  end
20
-
21
- context ".new(String)" do
22
- it "raises no errors" do
23
- expect { Saper::Actions::AppendWith.new("!") }.to_not raise_error
24
- end
25
- it "returns Action instance" do
26
- Saper::Actions::AppendWith.new("!").should be_a(Saper::Action)
27
- end
28
- end
29
-
30
- context "#run(nil)" do
31
- it "raises InvalidInput" do
32
- expect { action.run(nil) }.to raise_error(Saper::InvalidInput)
33
- end
34
- end
35
-
36
- context "#run(String)" do
37
- let(:input) do
38
- 'string'
39
- end
40
- it "returns valid output" do
41
- action.run(input).should == 'string!'
42
- end
43
- it "returns Text instance" do
44
- action.run(input).should be_a(Saper::Items::Text)
45
- end
46
- end
47
-
48
- context "#run(Text)" do
49
- let(:input) do
50
- Saper::Items::Text.new('string')
51
- end
52
- it "returns valid output" do
53
- action.run(input).should == 'string!'
54
- end
55
- it "returns Text instance" do
56
- action.run(input).should be_a(Saper::Items::Text)
57
- end
58
- end
59
-
60
37
  end
@@ -1,39 +1,22 @@
1
1
  require './spec/spec_helper'
2
2
 
3
3
  describe Saper::Actions::ConvertToHTML do
4
-
5
- let(:action) do
4
+ let :subject do
6
5
  Saper::Actions::ConvertToHTML.new
7
6
  end
8
-
9
- context "#run(nil)" do
10
- it "raises InvalidInput" do
11
- expect { action.run(nil) }.to raise_error(Saper::InvalidInput)
12
- end
7
+ it "#run(nil) raises InvalidInput" do
8
+ lambda { subject.run(nil) }.must_raise(Saper::InvalidInput)
13
9
  end
14
-
15
- context "#run(String)" do
16
- let(:input) do
17
- '<p>test</p>'
18
- end
19
- it "raises no errors" do
20
- expect { action.run(input) }.to_not raise_error
21
- end
22
- it "returns HTML instance" do
23
- action.run(input).should be_a(Saper::Items::HTML)
24
- end
10
+ it "#run(Numeric) raises InvalidInput" do
11
+ lambda { subject.run(2) }.must_raise(Saper::InvalidInput)
25
12
  end
26
-
27
- context "#run(Text)" do
28
- let(:input) do
29
- Saper::Items::Text.new('<p>test</p>')
30
- end
31
- it "raises no errors" do
32
- expect { action.run(input) }.to_not raise_error
33
- end
34
- it "returns HTML instance" do
35
- action.run(input).should be_a(Saper::Items::HTML)
36
- end
13
+ it "#run(invalid String) returns HTML instance" do
14
+ subject.run("not html").must_be_instance_of(Saper::Items::HTML)
15
+ end
16
+ it "#run(valid String) returns HTML instance" do
17
+ subject.run('<p>test</p>').must_be_instance_of(Saper::Items::HTML)
18
+ end
19
+ it "#run(valid Text) returns HTML instance" do
20
+ subject.run(Saper::Items::Text.new('<p>test</p>')).must_be_instance_of(Saper::Items::HTML)
37
21
  end
38
-
39
22
  end
@@ -1,39 +1,22 @@
1
1
  require './spec/spec_helper'
2
2
 
3
3
  describe Saper::Actions::ConvertToJSON do
4
-
5
- let(:action) do
4
+ let :subject do
6
5
  Saper::Actions::ConvertToJSON.new
7
6
  end
8
-
9
- context "#run(nil)" do
10
- it "raises InvalidInput" do
11
- expect { action.run(nil) }.to raise_error(Saper::InvalidInput)
12
- end
7
+ it "#run(nil) raises InvalidInput" do
8
+ lambda { subject.run(nil) }.must_raise(Saper::InvalidInput)
13
9
  end
14
-
15
- context "#run(String)" do
16
- let(:input) do
17
- '{"test":"ok"}'
18
- end
19
- it "raises no errors" do
20
- expect { action.run(input) }.to_not raise_error
21
- end
22
- it "returns JSON instance" do
23
- action.run(input).should be_a(Saper::Items::JSON)
24
- end
10
+ it "#run(Numeric) raises InvalidInput" do
11
+ lambda { subject.run(2) }.must_raise(Saper::InvalidInput)
25
12
  end
26
-
27
- context "#run(String)" do
28
- let(:input) do
29
- Saper::Items::Text.new('{"test":"ok"}')
30
- end
31
- it "raises no errors" do
32
- expect { action.run(input) }.to_not raise_error
33
- end
34
- it "returns JSON instance" do
35
- action.run(input).should be_a(Saper::Items::JSON)
36
- end
13
+ it "#run(invalid String) raises InvalidInput" do
14
+ subject.run('not json').must_be_nil
15
+ end
16
+ it "#run(valid String) returns JSON instance" do
17
+ subject.run('{"test":"ok"}').must_be_instance_of(Saper::Items::JSON)
18
+ end
19
+ it "#run(valid Text) returns JSON instance" do
20
+ subject.run(Saper::Items::Text.new('{"test":"ok"}')).must_be_instance_of(Saper::Items::JSON)
37
21
  end
38
-
39
22
  end
@@ -1,27 +1,25 @@
1
1
  require './spec/spec_helper'
2
2
 
3
3
  describe Saper::Actions::ConvertToMarkdown do
4
-
5
- let(:action) do
4
+ let :subject do
6
5
  Saper::Actions::ConvertToMarkdown.new
7
6
  end
8
-
9
- context "#run(nil)" do
10
- it "raises InvalidInput" do
11
- expect { action.run(nil) }.to raise_error(Saper::InvalidInput)
12
- end
7
+ let :html do
8
+ Saper::Items::HTML.new('<p>test</p>')
13
9
  end
14
-
15
- context "#run(HTML)" do
16
- let(:input) do
17
- Saper::Items::HTML.new('<p>test</p>')
18
- end
19
- it "returns valid output" do
20
- action.run(input).should == 'test'
21
- end
22
- it "returns Markdown instance" do
23
- action.run(input).should be_a(Saper::Items::Markdown)
24
- end
10
+ it "#run(nil) raises InvalidInput" do
11
+ lambda { subject.run(nil) }.must_raise(Saper::InvalidInput)
12
+ end
13
+ it "#run(Numeric) raises InvalidInput" do
14
+ lambda { subject.run(2) }.must_raise(Saper::InvalidInput)
15
+ end
16
+ it "#run(String) raises InvalidInput" do
17
+ subject.run("string").must_be_instance_of(Saper::Items::Markdown)
18
+ end
19
+ it "#run(HTML) returns Markdown instance" do
20
+ subject.run(html).must_be_instance_of(Saper::Items::Markdown)
21
+ end
22
+ it "#run(HTML) returns valid output" do
23
+ subject.run(html).must_be :==, "test"
25
24
  end
26
-
27
25
  end
@@ -1,52 +1,34 @@
1
1
  require './spec/spec_helper'
2
2
 
3
3
  describe Saper::Actions::ConvertToTime do
4
-
5
- let(:action_without_tz) do
4
+ let(:subject_without_tz) do
6
5
  Saper::Actions::ConvertToTime.new('%d-%m-%Y %H:%M')
7
6
  end
8
-
9
- let(:action_with_tz) do
7
+ let(:subject_with_tz) do
10
8
  Saper::Actions::ConvertToTime.new('%d-%m-%Y %H:%M', 'Europe/Moscow')
11
9
  end
12
-
13
- context ".new(nil, nil)" do
14
- it "raises InvalidArgument" do
15
- expect { Saper::Actions::ConvertToTime.new }.to raise_error(Saper::InvalidArgument)
16
- end
10
+ let(:input) do
11
+ '19-04-2014 18:56'
12
+ end
13
+ it ".new(nil, nil) raises InvalidArgument" do
14
+ lambda { Saper::Actions::ConvertToTime.new }.must_raise(Saper::InvalidArgument)
15
+ end
16
+ it ".new(format, nil) raises no errors" do
17
+ lambda { Saper::Actions::ConvertToTime.new("%H") }.must_be_silent
18
+ end
19
+ it "#run(nil) raises InvalidInput" do
20
+ lambda { subject_without_tz.run(nil) }.must_raise(Saper::InvalidInput)
21
+ end
22
+ it "#run(valid String) returns valid output with defined TZ" do
23
+ subject_with_tz.run(input).to_s.must_be :==, '2014-04-19T18:56:00+04:00'
24
+ end
25
+ it "#run(valid String) returns valid output with undefined TZ" do
26
+ subject_without_tz.run(input).to_s.must_be :==, '2014-04-19T18:56:00+00:00'
27
+ end
28
+ it "#run(valid String) returns Time instance" do
29
+ subject_with_tz.run(input).must_be_instance_of(Saper::Items::Time)
30
+ end
31
+ it "#run(invalid String) raises InvalidItem" do
32
+ lambda { subject_with_tz.run("ABCDEF") }.must_raise(Saper::InvalidItem)
17
33
  end
18
-
19
- context ".new(format, nil)" do
20
- it "raises no errors" do
21
- expect { Saper::Actions::ConvertToTime.new("%H") }.to_not raise_error
22
- end
23
- end
24
-
25
- context "#run(nil)" do
26
- it "raises InvalidInput" do
27
- expect { action_without_tz.run(nil) }.to raise_error(Saper::InvalidInput)
28
- end
29
- end
30
-
31
- context "#run(valid date)" do
32
- let(:input) do
33
- '19-04-2014 18:56'
34
- end
35
- it "returns valid output if TZ is set" do
36
- action_with_tz.run(input).should == '2014-04-19T18:56:00+04:00'
37
- end
38
- it "returns valid output if TZ is missing" do
39
- action_without_tz.run(input).should == '2014-04-19T18:56:00+00:00'
40
- end
41
- it "returns Time instance" do
42
- action_with_tz.run(input).should be_a(Saper::Items::Time)
43
- end
44
- end
45
-
46
- context "#run(invalid date)" do
47
- it "raises InvalidItem" do
48
- expect { action_with_tz.run("ABCDEF") }.to raise_error(Saper::InvalidItem)
49
- end
50
- end
51
-
52
34
  end
@@ -1,18 +1,22 @@
1
1
  require './spec/spec_helper'
2
2
 
3
3
  describe Saper::Actions::ConvertToXML do
4
-
5
- let(:action) do
4
+ let :subject do
6
5
  Saper::Actions::ConvertToXML.new
7
6
  end
8
-
9
- context "#run" do
10
- it "raises InvalidInput when input is nil" do
11
- expect { action.run(nil) }.to raise_error(Saper::InvalidInput)
12
- end
13
- it "raises no errors when input is a valid Text" do
14
- expect { action.run('<root>test</root>') }.to_not raise_error
15
- end
7
+ it "#run(nil) raises InvalidInput" do
8
+ lambda { subject.run(nil) }.must_raise(Saper::InvalidInput)
9
+ end
10
+ it "#run(Numeric) raises InvalidInput" do
11
+ lambda { subject.run(2) }.must_raise(Saper::InvalidInput)
12
+ end
13
+ it "#run(invalid String) returns XML instance" do
14
+ subject.run("not xml").must_be_instance_of(Saper::Items::XML)
15
+ end
16
+ it "#run(valid String) returns XML instance" do
17
+ subject.run('<root>test</root>').must_be_instance_of(Saper::Items::XML)
18
+ end
19
+ it "#run(valid Text) returns XML instance" do
20
+ subject.run(Saper::Items::Text.new('<root>test</root>')).must_be_instance_of(Saper::Items::XML)
16
21
  end
17
-
18
22
  end
@@ -1,27 +1,19 @@
1
1
  require './spec/spec_helper'
2
2
 
3
3
  describe Saper::Actions::CreateAtom do
4
-
5
- let(:action) do
4
+ let :subject do
6
5
  Saper::Actions::CreateAtom.new
7
6
  end
8
-
9
- context "#run(nil)" do
10
- it "raises RuntimeMissing" do
11
- expect { action.run(nil) }.to raise_error(Saper::RuntimeMissing)
12
- end
7
+ let :runtime do
8
+ Saper::Runtime.new :test => 'ok'
13
9
  end
14
-
15
- context "#run(nil, Runtime)" do
16
- let(:runtime) do
17
- Saper::Runtime.new
18
- end
19
- it "raises no errors" do
20
- expect { action.run(nil, runtime) }.to_not raise_error
21
- end
22
- it "returns Saper::Atom" do
23
- action.run(nil, runtime).should be_a(Saper::Items::Atom)
24
- end
10
+ it "#run(nil) returns Saper::Atom" do
11
+ subject.run(nil).must_be_instance_of(Saper::Items::Atom)
12
+ end
13
+ it "#run(nil, Runtime) returns Saper::Atom" do
14
+ subject.run(nil, runtime).must_be_instance_of(Saper::Items::Atom)
15
+ end
16
+ it "#run(nil, Runtime) returns valid output" do
17
+ subject.run(nil, runtime).to_native.must_equal(:test => 'ok')
25
18
  end
26
-
27
19
  end
@@ -1,15 +1,10 @@
1
1
  require './spec/spec_helper'
2
2
 
3
3
  describe Saper::Actions::Fetch do
4
-
5
- let(:action) do
4
+ let :subject do
6
5
  Saper::Actions::Fetch.new
7
6
  end
8
-
9
- context "#run(nil)" do
10
- it "raises InvalidInput" do
11
- expect { action.run(nil) }.to raise_error(Saper::InvalidInput)
12
- end
7
+ it "#run(nil) raises InvalidInput" do
8
+ lambda { subject.run(nil) }.must_raise(Saper::InvalidInput)
13
9
  end
14
-
15
10
  end
@@ -1,52 +1,50 @@
1
1
  require './spec/spec_helper'
2
2
 
3
3
  describe Saper::Actions::FindFirst do
4
-
5
- let(:action) do
4
+ subject do
6
5
  Saper::Actions::FindFirst.new("//p")
7
6
  end
8
-
9
- context ".new(nil)" do
10
- it "raises InvalidArgument" do
11
- expect { Saper::Actions::FindFirst.new(nil) }.to raise_error(Saper::InvalidArgument)
12
- end
7
+ let :string do
8
+ "<html><body><div><p>test</p></div></body></html>"
13
9
  end
14
-
15
- context ".new(CSS)" do
16
- it "raises no errors" do
17
- expect { Saper::Actions::FindFirst.new("a") }.to_not raise_error
18
- end
10
+ let :html do
11
+ Saper::Items::HTML.new(string)
19
12
  end
20
-
21
- context "#run(nil)" do
22
- it "raises InvalidInput" do
23
- expect { action.run(nil) }.to raise_error(Saper::InvalidInput)
24
- end
13
+ let :json do
14
+ Saper::Items::JSON.new('{"p":{"a":0}}')
25
15
  end
26
-
27
- context "#run(HTML)" do
28
- let(:input) do
29
- Saper::Items::HTML.new('<div><p>test</p></div>')
30
- end
31
- it "returns HTML instance" do
32
- action.run(input).should be_a(Saper::Items::HTML)
33
- end
34
- it "returns valid output" do
35
- action.run(input).name.should == 'p'
36
- end
16
+ it ".new(nil) raises InvalidArgument" do
17
+ lambda { Saper::Actions::FindFirst.new(nil) }.must_raise(Saper::InvalidArgument)
37
18
  end
38
-
39
- context "#run(JSON)" do
40
- let(:input) do
41
- Saper::Items::JSON.new('{"p":{"a":0}}')
42
- end
43
- it "returns JSON instance" do
44
- action.run(input).should be_a(Saper::Items::JSON)
45
- end
46
- it "returns valid output" do
47
- action.run(input).to_s.should == '{"a":0}'
48
- end
49
-
19
+ it ".new(Numeric) raises InvalidArgument" do
20
+ lambda { Saper::Actions::FindFirst.new(1) }.must_raise(Saper::InvalidArgument)
21
+ end
22
+ it ".new(Hash) raises InvalidArgument" do
23
+ lambda { Saper::Actions::FindFirst.new({}) }.must_raise(Saper::InvalidArgument)
24
+ end
25
+ it ".new(Array) raises InvalidArgument" do
26
+ lambda { Saper::Actions::FindFirst.new([]) }.must_raise(Saper::InvalidArgument)
27
+ end
28
+ it ".new(CSS as String) raises no errors" do
29
+ lambda { Saper::Actions::FindFirst.new("a") }.must_be_silent
30
+ end
31
+ it "#run(nil) raises InvalidInput" do
32
+ lambda { subject.run(nil) }.must_raise(Saper::InvalidInput)
33
+ end
34
+ it "#run(String) returns HTML instance" do
35
+ subject.run(string).must_be_instance_of(Saper::Items::HTML)
36
+ end
37
+ it "#run(HTML) returns HTML instance" do
38
+ subject.run(html).must_be_instance_of(Saper::Items::HTML)
39
+ end
40
+ it "#run(HTML) returns valid output" do
41
+ subject.run(html).to_s.must_be :==, '<p>test</p>'
42
+ end
43
+ it "#run(JSON) returns JSON instance" do
44
+ subject.run(json).must_be_instance_of(Saper::Items::JSON)
45
+ end
46
+ it "#run(JSON) returns valid output" do
47
+ subject.run(json).must_be :==, {"a" => 0}
50
48
  end
51
49
 
52
50
  end