rspec-approvals 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -53,6 +53,18 @@ empty.
53
53
 
54
54
  The contents of the two files are compared, and the approval will fail at this point.
55
55
 
56
+ ### Formatting
57
+
58
+ You can pass options to format output before it gets written to the file.
59
+ At the moment, only xml and html are supported.
60
+
61
+ Simply add a `:format => :xml` or `:format => :html` option to the example:
62
+
63
+ approve "some html", :format => :html do
64
+ "<html><head></head><body><h1>ZOMG</h1></body></html>"
65
+ end
66
+
67
+
56
68
  ### Approving a spec
57
69
 
58
70
  If the contents of the received file is to your liking, you can approve
@@ -9,6 +9,7 @@ module RSpec
9
9
  def inspect
10
10
  ""
11
11
  end
12
+ def strip; end
12
13
  end
13
14
 
14
15
  class Approval
@@ -23,8 +24,9 @@ module RSpec
23
24
 
24
25
  attr_reader :location
25
26
 
26
- def initialize(example, received = '')
27
+ def initialize(example, received = '', options = {})
27
28
  @path = Approval.base_path(example.full_description)
29
+ @options = options
28
30
 
29
31
  example.options[:approval] = true
30
32
  example.options[:approval_diff_paths] = {
@@ -46,7 +48,11 @@ module RSpec
46
48
 
47
49
  def write(suffix, contents)
48
50
  File.open("#{@path}.#{suffix}.txt", 'w') do |f|
49
- if contents.respond_to?(:each_pair)
51
+ if xml?
52
+ parser = XML::Parser.string contents.strip
53
+ doc = parser.parse
54
+ f.write doc.to_s
55
+ elsif contents.respond_to?(:each_pair)
50
56
  contents.each_pair do |k,v|
51
57
  f.write "#{k.inspect} => #{v.inspect}\n"
52
58
  end
@@ -61,6 +67,11 @@ module RSpec
61
67
  end
62
68
 
63
69
  def failure_message
70
+ return failure_message_exposing_received if show_received?
71
+ return default_failure_message
72
+ end
73
+
74
+ def default_failure_message
64
75
  <<-FAILURE_MESSAGE
65
76
 
66
77
  Approval Failure:
@@ -80,6 +91,10 @@ module RSpec
80
91
  FAILURE_MESSAGE
81
92
  end
82
93
 
94
+ def failure_message_exposing_received
95
+ default_failure_message << " received:\n " << received << "\n\n\n"
96
+ end
97
+
83
98
  def location=(backtrace)
84
99
  @location = [backtrace.first.gsub(Dir.pwd, '.')]
85
100
  end
@@ -91,6 +106,22 @@ module RSpec
91
106
  raise RSpec::Approvals::ReceivedDiffersError, failure_message, location
92
107
  end
93
108
  end
109
+
110
+ def approved
111
+ File.read(approved_path)
112
+ end
113
+
114
+ def received
115
+ File.read(received_path)
116
+ end
117
+
118
+ def xml?
119
+ [:xml, :html].include? @options[:format]
120
+ end
121
+
122
+ def show_received?
123
+ @options[:show_received]
124
+ end
94
125
  end
95
126
  end
96
127
  end
@@ -4,10 +4,10 @@ module RSpec
4
4
  module Approvals
5
5
  module DSL
6
6
 
7
- def approve(description)
7
+ def approve(description, options = {})
8
8
 
9
9
  specify(description) do
10
- approval = Approval.new(example, yield)
10
+ approval = Approval.new(example, yield, options)
11
11
 
12
12
  # We may be able to set file_path and
13
13
  # line_number on example in the approval
@@ -1,5 +1,5 @@
1
1
  module RSpec
2
2
  module Approvals
3
- VERSION = "0.0.3"
3
+ VERSION = "0.0.4"
4
4
  end
5
5
  end
@@ -1,4 +1,5 @@
1
1
 
2
+ require 'xml'
2
3
  require "rspec/approvals/version"
3
4
  require "rspec/approvals/approval"
4
5
  require "rspec/approvals/dsl"
@@ -19,4 +19,5 @@ Gem::Specification.new do |s|
19
19
  s.require_paths = ["lib"]
20
20
 
21
21
  s.add_dependency 'rspec', '~> 2.6'
22
+ s.add_dependency 'libxml-ruby'
22
23
  end
@@ -149,6 +149,33 @@ The::Class \t \r\n \fname
149
149
  mv #{approval.received_path} #{approval.approved_path}
150
150
 
151
151
 
152
+ FAILURE_MESSAGE
153
+
154
+ approval.failure_message.should eq(message)
155
+ end
156
+
157
+ it "fails with exposed 'received'" do
158
+ approval = Approvals::Approval.new(example, 'aoeu', :show_received => true)
159
+ message = <<-FAILURE_MESSAGE
160
+
161
+ Approval Failure:
162
+
163
+ The received contents did not match the approved contents.
164
+
165
+ Inspect the differences in the following files:
166
+ #{approval.received_path}
167
+ #{approval.approved_path}
168
+
169
+ If you like what you see in the *.received.txt file, you can approve it
170
+ by renaming it with the .approved.txt suffix.
171
+
172
+ mv #{approval.received_path} #{approval.approved_path}
173
+
174
+
175
+ received:
176
+ #{approval.received}
177
+
178
+
152
179
  FAILURE_MESSAGE
153
180
 
154
181
  approval.failure_message.should eq(message)
@@ -0,0 +1,48 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
3
+ <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
4
+ <head>
5
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
6
+ <title>blog</title>
7
+ <script type="text/javascript" src="/blog/static/jquery-1.1.3.pack.js"></script>
8
+ <script type="text/javascript" src="/blog/static/blog.js"></script>
9
+ <link type="text/css" rel="stylesheet" href="/blog/styles.css" media="screen" />
10
+ </head>
11
+ <body>
12
+ <h1 class="header">
13
+ <a href="/blog/">blog</a>
14
+ </h1>
15
+ <div class="content">
16
+ <h1 class="post_head">
17
+ <a href="/blog/view/2">Hej</a>
18
+ <a class="edit_link" href="/blog/edit/2">edit</a>
19
+ </h1>
20
+ <p>ASDJlksdjfsld
21
+ </p>
22
+ <h2 class="comment_head">
23
+ <a href="javascript:getComments(2)">See comments (2)</a>
24
+ </h2>
25
+ <div id="comments">
26
+ <h3>tyysen</h3>
27
+ <p>miljoooner</p>
28
+ <h3>hej</h3>
29
+ <p>bulan</p>
30
+ </div>
31
+ <h2 class="add_comment_head">
32
+ <a href="#comment_form">Add comment</a>
33
+ </h2>
34
+ <form method="post" name="comment_form" id="comment_form" action="/blog/comment">
35
+ <label for="post_username">Name</label>
36
+ <br />
37
+ <input type="text" name="post_username" />
38
+ <br />
39
+ <label for="post_body">Comment</label>
40
+ <br />
41
+ <textarea name="post_body"></textarea>
42
+ <br />
43
+ <input type="hidden" name="post_id" value="2" />
44
+ <input type="submit" value="Add comment" />
45
+ </form>
46
+ </div>
47
+ </body>
48
+ </html>
@@ -0,0 +1,10 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <xml testsdf="dsfsdf">
3
+ <test/>
4
+ <node>
5
+ <content attr="fgsd"/>
6
+ </node>
7
+ <node id="2">
8
+ <content/>
9
+ </node>
10
+ </xml>
@@ -63,4 +63,14 @@ describe Approvals do
63
63
  hello # => output matches hello.inspect
64
64
  end
65
65
 
66
+ approve "formats html nicely", :format => :html, :show_received => true do
67
+ <<-XML
68
+ <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"/><title>blog</title><script type="text/javascript" src="/blog/static/jquery-1.1.3.pack.js"></script><script type="text/javascript" src="/blog/static/blog.js"></script><link type="text/css" rel="stylesheet" href="/blog/styles.css" media="screen"/></head><body><h1 class="header"><a href="/blog/">blog</a></h1><div class="content"><h1 class="post_head"><a href="/blog/view/2">Hej</a><a class="edit_link" href="/blog/edit/2">edit</a></h1><p>ASDJlksdjfsld
69
+ </p><h2 class="comment_head"><a href="javascript:getComments(2)">See comments (2)</a></h2><div id="comments"><h3>tyysen</h3><p>miljoooner</p><h3>hej</h3><p>bulan</p></div><h2 class="add_comment_head"><a href="#comment_form">Add comment</a></h2><form method="post" name="comment_form" id="comment_form" action="/blog/comment"><label for="post_username">Name</label><br/><input type="text" name="post_username"/><br/><label for="post_body">Comment</label><br/><textarea name="post_body"></textarea><br/><input type="hidden" name="post_id" value="2"/><input type="submit" value="Add comment"/></form></div></body></html>
70
+ XML
71
+ end
72
+
73
+ approve "formats xml nicely", :format => :xml, :show_received => true do
74
+ "<xml testsdf=\"dsfsdf\"><test/><node><content attr='fgsd' /></node><node id='2'><content /></node></xml>"
75
+ end
66
76
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 3
9
- version: 0.0.3
8
+ - 4
9
+ version: 0.0.4
10
10
  platform: ruby
11
11
  authors:
12
12
  - Katrina Owen
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2011-07-27 00:00:00 +02:00
17
+ date: 2011-07-29 00:00:00 +02:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -31,6 +31,19 @@ dependencies:
31
31
  version: "2.6"
32
32
  type: :runtime
33
33
  version_requirements: *id001
34
+ - !ruby/object:Gem::Dependency
35
+ name: libxml-ruby
36
+ prerelease: false
37
+ requirement: &id002 !ruby/object:Gem::Requirement
38
+ none: false
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ segments:
43
+ - 0
44
+ version: "0"
45
+ type: :runtime
46
+ version_requirements: *id002
34
47
  description: An RSpec extension that adds support for approvals. Based on the idea of the Golden Master.
35
48
  email:
36
49
  - katrina.owen@gmail.com
@@ -58,6 +71,8 @@ files:
58
71
  - spec/approvals/rspec_approvals_a_hash.approved.txt
59
72
  - spec/approvals/rspec_approvals_a_string.approved.txt
60
73
  - spec/approvals/rspec_approvals_an_array.approved.txt
74
+ - spec/approvals/rspec_approvals_formats_html_nicely.approved.txt
75
+ - spec/approvals/rspec_approvals_formats_xml_nicely.approved.txt
61
76
  - spec/approvals_spec.rb
62
77
  - spec/spec_helper.rb
63
78
  has_rdoc: true