pork 1.0.1 → 1.0.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: aacd67d75401cc17261741e93e992df0ad2f3132
4
- data.tar.gz: 67ff0980b2a2505762afd341d764c6fc3df8b98a
3
+ metadata.gz: 814a6e5d8622a7c77c53f88b539b81d77f39872f
4
+ data.tar.gz: 4269395ba1774b0051195edd772d1c850298da6c
5
5
  SHA512:
6
- metadata.gz: 13f2ee44b10391b913fc9b967d21669d78fbb238a4935a7e95a0ef8086af402d4b4ef26dba1e94b7355ed561b773a48a64a411841604101eb2f285062de76501
7
- data.tar.gz: 229a1171f3244870561f1205313bd472dacc26577997557fd00a3801b2b3f449137955d1feea5c2730979f6526fa6d06c24296a9e2d178d3ca1c03e4393b24da
6
+ metadata.gz: 46b0342699c72744ff5cc2fc230c13b328df33ad1593ee872a83ac4283827f27e3b42cc926be1f4a93d586df15e8f813e1cac828fb86e1119e1739abad83f3ac
7
+ data.tar.gz: 597fb9cbf4754d9866e55d9a7ed4c334d63c067791cfad332169341d1edcce6a7947b77dcd8173dd88732995733bbf7fabee790d11992c62a78e0c9130ac337a
data/CHANGES.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # CHANGES
2
2
 
3
+ ## Pork 1.0.2 -- 2014-12-09
4
+
5
+ * Hash difference is much improved. Now it uses `/` to separate keys,
6
+ and use quotes for string keys and colons for symbol keys, so that
7
+ we won't be confused when comparing string hashes and symbol hashes.
8
+ Further more, it would show `<undefined>` for hashes missing a key,
9
+ and `<out-of-bound>` for arrays out of bound. Previously, hash with
10
+ nil values are indistinguishable with hash missing keys.
11
+ Thanks Chun-Yi Liu (@trantorliu).
12
+
3
13
  ## Pork 1.0.1 -- 2014-11-21
4
14
 
5
15
  * Fixed the failure message for hash diff.
data/README.md CHANGED
@@ -848,6 +848,7 @@ Then it would always use the mode we specified.
848
848
 
849
849
  ## CONTRIBUTORS:
850
850
 
851
+ * Chun-Yi Liu (@trantorliu)
851
852
  * Lin Jen-Shin (@godfat)
852
853
  * Josh Kalderimis (@joshk)
853
854
 
data/lib/pork/inspect.rb CHANGED
@@ -6,6 +6,19 @@ module Pork
6
6
  end
7
7
 
8
8
  class Inspect < Struct.new(:flip)
9
+ Undefined = Object.new
10
+ Undefined.singleton_class.module_eval do
11
+ def inspect
12
+ '<undefined>'
13
+ end
14
+ end
15
+ OutOfBound = Object.new
16
+ OutOfBound.singleton_class.module_eval do
17
+ def inspect
18
+ '<out-of-bound>'
19
+ end
20
+ end
21
+
9
22
  def self.with *args
10
23
  lambda{ public_send("with_#{Pork.inspect_failure_mode}", *args) }
11
24
  end
@@ -38,7 +51,7 @@ module Pork
38
51
  def self.for_diff_hash msg, negate, result
39
52
  "\n" + result.map do |key, (expect, actual)|
40
53
  body = with_auto(expect, msg, [actual], negate)
41
- "\tHash with key path: #{key.inspect}\n#{body.sub(/\A\n/, '')}"
54
+ "\tHash with key path: #{key}\n#{body.sub(/\A\n/, '')}"
42
55
  end.join("\n\n")
43
56
  end
44
57
 
@@ -68,13 +81,23 @@ module Pork
68
81
 
69
82
  def diff_hash expect, actual, result={}, prefix=''
70
83
  expect.inject(result) do |r, (key, e)|
71
- diff_object(e, actual[key], r, "#{prefix}#{key}")
84
+ a = if actual.key?(key)
85
+ actual[key]
86
+ else
87
+ Undefined
88
+ end
89
+ diff_object(e, a, r, "#{prefix}#{key.inspect}")
72
90
  end
73
91
  end
74
92
 
75
93
  def diff_array expect, actual, result={}, prefix=''
76
94
  expect.each.with_index.inject(result) do |r, (e, idx)|
77
- diff_object(e, actual[idx], r, "#{prefix}#{idx}")
95
+ a = if idx < actual.size
96
+ actual[idx]
97
+ else
98
+ OutOfBound
99
+ end
100
+ diff_object(e, a, r, "#{prefix}#{idx}")
78
101
  end
79
102
  end
80
103
 
@@ -82,9 +105,9 @@ module Pork
82
105
  return result if expect == actual
83
106
 
84
107
  if expect.kind_of?(Hash) && actual.kind_of?(Hash)
85
- diff_hash(expect, actual, result, "#{prefix}:")
108
+ diff_hash(expect, actual, result, "#{prefix}/")
86
109
  elsif expect.kind_of?(Array) && actual.kind_of?(Array)
87
- diff_array(expect, actual, result, "#{prefix}:")
110
+ diff_array(expect, actual, result, "#{prefix}/")
88
111
  elsif flip
89
112
  result[prefix] = [actual, expect]
90
113
  else
data/lib/pork/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
 
2
2
  module Pork
3
- VERSION = '1.0.1'
3
+ VERSION = '1.0.2'
4
4
  end
data/pork.gemspec CHANGED
@@ -1,14 +1,14 @@
1
1
  # -*- encoding: utf-8 -*-
2
- # stub: pork 1.0.1 ruby lib
2
+ # stub: pork 1.0.2 ruby lib
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "pork"
6
- s.version = "1.0.1"
6
+ s.version = "1.0.2"
7
7
 
8
8
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
9
9
  s.require_paths = ["lib"]
10
10
  s.authors = ["Lin Jen-Shin (godfat)"]
11
- s.date = "2014-11-21"
11
+ s.date = "2014-12-09"
12
12
  s.description = "Pork -- Simple and clean and modular testing library.\n\nInspired by [Bacon][].\n\n[Bacon]: https://github.com/chneukirchen/bacon"
13
13
  s.email = ["godfat (XD) godfat.org"]
14
14
  s.files = [
@@ -50,7 +50,7 @@ Gem::Specification.new do |s|
50
50
  "test/test_shuffle.rb"]
51
51
  s.homepage = "https://github.com/godfat/pork"
52
52
  s.licenses = ["Apache License 2.0"]
53
- s.rubygems_version = "2.4.4"
53
+ s.rubygems_version = "2.4.5"
54
54
  s.summary = "Pork -- Simple and clean and modular testing library."
55
55
  s.test_files = [
56
56
  "test/test_bacon.rb",
data/test/test_inspect.rb CHANGED
@@ -21,6 +21,51 @@ describe Pork::Inspect do
21
21
  should.eq "String#==(\n#{n}a#{n+1}\n> b\n) to return false"
22
22
  end
23
23
 
24
+ would '#diff_hash with nil and <undefined>' do
25
+ z = 'z'*80
26
+ a, b = {:z => z, :a => nil}, {:z => z}
27
+ Pork::Inspect.with_auto(a, :==, [b], false).should.start_with? <<-MSG.chop
28
+
29
+ \tHash with key path: :a
30
+ nil.==(<undefined>) to return true
31
+ MSG
32
+
33
+ Pork::Inspect.with_auto(b, :==, [a], false).should.start_with? <<-MSG.chop
34
+
35
+ \tHash with key path: :a
36
+ <undefined>.==(nil) to return true
37
+ MSG
38
+ end
39
+
40
+ would '#diff_hash with nil and <out-of-bound>' do
41
+ z = 'z'*80
42
+ a, b = {:a => {:b => [z, nil]}}, {:a => {:b => [z]}}
43
+ Pork::Inspect.with_auto(a, :==, [b], false).should.start_with? <<-MSG.chop
44
+
45
+ \tHash with key path: :a/:b/1
46
+ nil.==(<out-of-bound>) to return true
47
+ MSG
48
+
49
+ Pork::Inspect.with_auto(b, :==, [a], false).should.start_with? <<-MSG.chop
50
+
51
+ \tHash with key path: :a/:b/1
52
+ <out-of-bound>.==(nil) to return true
53
+ MSG
54
+ end
55
+
56
+ would '#diff_hash with string keys and symbol keys' do
57
+ z = 'z'*80
58
+ a, b = {:a => z}, {'a' => z}
59
+ Pork::Inspect.with_auto(a, :==, [b], false).should.start_with? <<-MSG.chop
60
+
61
+ \tHash with key path: :a
62
+ #{z.inspect}.==(\n<undefined>) to return true
63
+
64
+ \tHash with key path: "a"
65
+ <undefined>.==(#{z.inspect}) to return true
66
+ MSG
67
+ end
68
+
24
69
  would '#diff_hash' do
25
70
  a = {"category_chats"=>[{"category_name"=>"Cat", "experts_url"=>"cat-experts", "chat_list"=>[{"mentee"=>{"timezone_str"=>"+00:00", "timezone_offset"=>0, "timezone_display"=>"UTC (+00:00)", "username"=>"example", "name"=>"Example", "level"=>"mentor", "rating"=>0.0, "role"=>"user", "avatar_url"=>"https://www.gravatar.com/avatar/55502f40dc8b7c769880b10874abc9d0?d=mm", "small_avatar_url"=>"https://www.gravatar.com/avatar/55502f40dc8b7c769880b10874abc9d0?d=mm?s=64&d=mm"}, "mentor"=>{"timezone_str"=>"+00:00", "timezone_offset"=>0, "timezone_display"=>"UTC (+00:00)", "username"=>"menmen", "name"=>"Menmen", "level"=>"mentor", "rating"=>0.0, "role"=>"mentor", "avatar_url"=>"https://www.gravatar.com/avatar/556611444ab1143c8ad30206fda3926f?d=mm", "small_avatar_url"=>"https://www.gravatar.com/avatar/556611444ab1143c8ad30206fda3926f?d=mm?s=64&d=mm"}, "chatroom_id"=>"8c3dd9387dd30499a4053e07e4a41be4", "chatroom_firebase_id"=>"49c31f7444e199bdaea610dbe518d329"}]}], "longterm"=>[{"rate"=>"3.00", "credit"=>"7.00", "valid_from"=>1416148781, "valid_to"=>1416235181, "mentee"=>{"timezone_str"=>"+00:00", "timezone_offset"=>0, "timezone_display"=>"UTC (+00:00)", "username"=>"example", "name"=>"Example", "level"=>"mentor", "rating"=>0.0, "role"=>"user", "avatar_url"=>"https://www.gravatar.com/avatar/55502f40dc8b7c769880b10874abc9d0?d=mm", "small_avatar_url"=>"https://www.gravatar.com/avatar/55502f40dc8b7c769880b10874abc9d0?d=mm?s=64&d=mm"}, "mentor"=>{"timezone_str"=>"+00:00", "timezone_offset"=>0, "timezone_display"=>"UTC (+00:00)", "username"=>"menmen", "name"=>"Menmen", "level"=>"mentor", "rating"=>0.0, "role"=>"mentor", "avatar_url"=>"https://www.gravatar.com/avatar/556611444ab1143c8ad30206fda3926f?d=mm", "small_avatar_url"=>"https://www.gravatar.com/avatar/556611444ab1143c8ad30206fda3926f?d=mm?s=64&d=mm"}, "chatroom_id"=>"8c3dd9387dd30499a4053e07e4a41be4", "chatroom_firebase_id"=>"49c31f7444e199bdaea610dbe518d329"}], "my"=>[], "recent_chats"=>[{"request"=>{}, "type"=>"message", "id"=>"e71bca4b-a617-4edc-9816-7fc3034c64ea", "content"=>"hi", "created_at"=>"2014-11-16T14:39:41Z", "read_at"=>nil, "sender"=>{"timezone_str"=>"+00:00", "timezone_offset"=>0, "timezone_display"=>"UTC (+00:00)", "username"=>"example", "name"=>"Example", "level"=>"mentor", "rating"=>0.0, "role"=>"user", "avatar_url"=>"https://www.gravatar.com/avatar/55502f40dc8b7c769880b10874abc9d0?d=mm", "small_avatar_url"=>"https://www.gravatar.com/avatar/55502f40dc8b7c769880b10874abc9d0?d=mm?s=64&d=mm"}, "receiver"=>{"timezone_str"=>"+00:00", "timezone_offset"=>0, "timezone_display"=>"UTC (+00:00)", "username"=>"menmen", "name"=>"Menmen", "level"=>"mentor", "rating"=>0.0, "role"=>"mentor", "avatar_url"=>"https://www.gravatar.com/avatar/556611444ab1143c8ad30206fda3926f?d=mm", "small_avatar_url"=>"https://www.gravatar.com/avatar/556611444ab1143c8ad30206fda3926f?d=mm?s=64&d=mm"}, "chatroom_id"=>"8c3dd9387dd30499a4053e07e4a41be4", "chatroom_firebase_id"=>"49c31f7444e199bdaea610dbe518d329"}]}
26
71
 
@@ -29,12 +74,12 @@ describe Pork::Inspect do
29
74
  f = expect.raise(Pork::Failure){ expect(a, 'Additional Message').eq(b) }
30
75
  expect(f.message).eq <<-MSG.sub(/\AExpect/, 'Expect ').chop
31
76
  Expect
32
- \tHash with key path: "category_chats:0:chat_list:0:mentor"
77
+ \tHash with key path: "category_chats"/0/"chat_list"/0/"mentor"
33
78
  {"timezone_str"=>"+00:00", "timezone_offset"=>0, "timezone_display"=>"UTC (+00:00)", "username"=>"menmen", "name"=>"Menmen", "level"=>"mentor", "rating"=>0.0, "role"=>"mentor", "avatar_url"=>"https://www.gravatar.com/avatar/556611444ab1143c8ad30206fda3926f?d=mm", "small_avatar_url"=>"https://www.gravatar.com/avatar/556611444ab1143c8ad30206fda3926f?d=mm?s=64&d=mm"}.==(
34
- nil) to return true
79
+ <undefined>) to return true
35
80
 
36
- \tHash with key path: "my:0"
37
- nil.==({"mentee"=>{"timezone_str"=>"+00:00", "timezone_offset"=>0, "timezone_display"=>"UTC (+00:00)", "username"=>"example", "name"=>"Example", "level"=>"mentor", "rating"=>0.0, "role"=>"user", "avatar_url"=>"https://www.gravatar.com/avatar/55502f40dc8b7c769880b10874abc9d0?d=mm", "small_avatar_url"=>"https://www.gravatar.com/avatar/55502f40dc8b7c769880b10874abc9d0?d=mm?s=64&d=mm"}, "chatroom_id"=>"8c3dd9387dd30499a4053e07e4a41be4", "chatroom_firebase_id"=>"49c31f7444e199bdaea610dbe518d329"}) to return true
81
+ \tHash with key path: "my"/0
82
+ <out-of-bound>.==({"mentee"=>{"timezone_str"=>"+00:00", "timezone_offset"=>0, "timezone_display"=>"UTC (+00:00)", "username"=>"example", "name"=>"Example", "level"=>"mentor", "rating"=>0.0, "role"=>"user", "avatar_url"=>"https://www.gravatar.com/avatar/55502f40dc8b7c769880b10874abc9d0?d=mm", "small_avatar_url"=>"https://www.gravatar.com/avatar/55502f40dc8b7c769880b10874abc9d0?d=mm?s=64&d=mm"}, "chatroom_id"=>"8c3dd9387dd30499a4053e07e4a41be4", "chatroom_firebase_id"=>"49c31f7444e199bdaea610dbe518d329"}) to return true
38
83
  Additional Message
39
84
  MSG
40
85
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pork
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lin Jen-Shin (godfat)
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-11-21 00:00:00.000000000 Z
11
+ date: 2014-12-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: muack
@@ -92,7 +92,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
92
92
  version: '0'
93
93
  requirements: []
94
94
  rubyforge_project:
95
- rubygems_version: 2.4.4
95
+ rubygems_version: 2.4.5
96
96
  signing_key:
97
97
  specification_version: 4
98
98
  summary: Pork -- Simple and clean and modular testing library.