saper 0.5.1 → 0.5.2

Sign up to get free protection for your applications and to get access to all the features.
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