assert_json 0.0.3 → 0.1.0
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.
- data/.gitignore +3 -0
- data/.rvmrc +2 -0
- data/Gemfile.lock +18 -0
- data/README.md +22 -19
- data/Rakefile +5 -5
- data/assert_json.gemspec +22 -0
- data/lib/assert_json/assert_json.rb +80 -0
- data/lib/assert_json/version.rb +3 -0
- data/lib/assert_json.rb +2 -65
- data/test/assert_json_new_dsl_test.rb +268 -0
- data/test/assert_json_test.rb +268 -0
- data/test/test_helper.rb +6 -0
- metadata +18 -8
data/.gitignore
ADDED
data/.rvmrc
ADDED
data/Gemfile.lock
ADDED
data/README.md
CHANGED
@@ -1,19 +1,25 @@
|
|
1
|
-
AssertJson
|
2
|
-
==========
|
1
|
+
# AssertJson #
|
3
2
|
|
4
|
-
|
3
|
+
Test your JSON strings.
|
5
4
|
|
6
|
-
Installation
|
7
|
-
------------
|
5
|
+
## Installation ##
|
8
6
|
|
9
|
-
|
10
|
-
|
7
|
+
```sh
|
8
|
+
cd path/to/your/rails-project
|
9
|
+
./script/plugin install git://github.com/xing/assert_json.git
|
10
|
+
```
|
11
|
+
|
12
|
+
Or if you prefer [bundler](http://getbundler.com)
|
13
|
+
|
14
|
+
```sh
|
15
|
+
# in your Gemfile
|
16
|
+
gem 'assert_json'
|
17
|
+
```
|
11
18
|
|
12
19
|
|
13
|
-
Usage
|
14
|
-
-----
|
20
|
+
## Usage ##
|
15
21
|
|
16
|
-
```
|
22
|
+
```ruby
|
17
23
|
class MyActionTest < ActionController::TestCase
|
18
24
|
include AssertJson
|
19
25
|
|
@@ -22,30 +28,27 @@ class MyActionTest < ActionController::TestCase
|
|
22
28
|
# => @response.body= '{"key":[{"inner_key1":"value1"},{"inner_key2":"value2"}]}'
|
23
29
|
|
24
30
|
assert_json(@response.body) do |json|
|
25
|
-
|
26
|
-
|
27
|
-
|
31
|
+
has 'key' do
|
32
|
+
has 'inner_key1', 'value1'
|
33
|
+
has 'inner_key2', /lue2/
|
28
34
|
end
|
29
|
-
|
35
|
+
has_not 'key_not_included'
|
30
36
|
end
|
31
37
|
end
|
32
38
|
|
33
39
|
end
|
34
40
|
```
|
35
41
|
|
36
|
-
Authors
|
37
|
-
-------
|
42
|
+
## Authors ##
|
38
43
|
|
39
44
|
[Thorsten Böttger](http://github.com/alto),
|
40
|
-
[Andree Wille](http://github.com/dreewill),
|
41
45
|
[Ralph von der Heyden](http://github.com/ralph)
|
42
46
|
|
43
47
|
Please find out more about our work in our
|
44
48
|
[Xing Dev Blog](http://devblog.xing.com/).
|
45
49
|
|
46
50
|
|
47
|
-
License
|
48
|
-
-------
|
51
|
+
## License ##
|
49
52
|
|
50
53
|
The MIT License
|
51
54
|
|
data/Rakefile
CHANGED
@@ -1,13 +1,13 @@
|
|
1
|
+
require 'rubygems'
|
1
2
|
require 'rake'
|
2
|
-
require '
|
3
|
-
require 'rake/rdoctask'
|
4
|
-
|
5
|
-
desc 'Default: run unit tests.'
|
6
|
-
task :default => :test
|
3
|
+
require 'bundler/gem_tasks'
|
7
4
|
|
5
|
+
require 'rake/testtask'
|
8
6
|
desc 'Test the assert_json plugin.'
|
9
7
|
Rake::TestTask.new(:test) do |t|
|
10
8
|
t.libs << 'lib'
|
11
9
|
t.pattern = 'test/**/*_test.rb'
|
12
10
|
t.verbose = true
|
13
11
|
end
|
12
|
+
desc 'Default: run unit tests.'
|
13
|
+
task :default => :test
|
data/assert_json.gemspec
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
$:.push File.expand_path("../lib", __FILE__)
|
2
|
+
require "assert_json/version"
|
3
|
+
|
4
|
+
Gem::Specification.new do |s|
|
5
|
+
s.name = "assert_json"
|
6
|
+
s.version = AssertJson::VERSION
|
7
|
+
s.summary = "A gem to test JSON strings."
|
8
|
+
s.description = "A gem to test JSON strings."
|
9
|
+
s.files = Dir["{app,lib,config}/**/*"] + ["MIT-LICENSE", "Rakefile", "Gemfile", "README.md"]
|
10
|
+
|
11
|
+
s.authors = ["Thorsten Böttger", "Ralph von der Heyden"]
|
12
|
+
s.email = %q{boettger@mt7.de}
|
13
|
+
s.homepage = %q{https://github.com/xing/assert_json}
|
14
|
+
|
15
|
+
s.files = `git ls-files`.split("\n")
|
16
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
17
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
18
|
+
s.require_paths = ["lib"]
|
19
|
+
|
20
|
+
s.add_dependency 'activesupport'
|
21
|
+
s.add_development_dependency 'minitest'
|
22
|
+
end
|
@@ -0,0 +1,80 @@
|
|
1
|
+
module AssertJson
|
2
|
+
|
3
|
+
def assert_json(json_string, &block)
|
4
|
+
if block_given?
|
5
|
+
json = AssertJson::Json.new(json_string)
|
6
|
+
json.instance_exec(json, &block)
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
class Json
|
11
|
+
|
12
|
+
def initialize(json_string)
|
13
|
+
@decoded_json = ActiveSupport::JSON.decode(json_string)
|
14
|
+
end
|
15
|
+
|
16
|
+
def element(*args, &block)
|
17
|
+
arg = args.shift
|
18
|
+
token = @decoded_json.is_a?(Array) ? @decoded_json.shift : @decoded_json
|
19
|
+
case token
|
20
|
+
when Hash
|
21
|
+
raise_error("element #{arg} not found") unless token.keys.include?(arg)
|
22
|
+
if second_arg = args.shift
|
23
|
+
case second_arg
|
24
|
+
when Regexp
|
25
|
+
raise_error("element #{token[arg].inspect} does not match #{second_arg.inspect}") if second_arg !~ token[arg]
|
26
|
+
else
|
27
|
+
raise_error("element #{token[arg].inspect} does not match #{second_arg.inspect}") if second_arg != token[arg]
|
28
|
+
end
|
29
|
+
end
|
30
|
+
when Array
|
31
|
+
raise_error("element #{arg} not found") if token != arg
|
32
|
+
when String
|
33
|
+
case arg
|
34
|
+
when Regexp
|
35
|
+
raise_error("element #{arg.inspect} not found") if token !~ arg
|
36
|
+
else
|
37
|
+
raise_error("element #{arg.inspect} not found") if token != arg
|
38
|
+
end
|
39
|
+
when NilClass
|
40
|
+
raise_error("no element left")
|
41
|
+
else
|
42
|
+
flunk
|
43
|
+
end
|
44
|
+
|
45
|
+
if block_given?
|
46
|
+
begin
|
47
|
+
in_scope, @decoded_json = @decoded_json, token.is_a?(Hash) ? token[arg] : token
|
48
|
+
yield
|
49
|
+
ensure
|
50
|
+
@decoded_json = in_scope
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
alias has element
|
56
|
+
|
57
|
+
def not_element(*args, &block)
|
58
|
+
arg = args.shift
|
59
|
+
token = @decoded_json
|
60
|
+
case token
|
61
|
+
when Array
|
62
|
+
raise_error("element #{arg} found, but not expected") if token.include?(arg)
|
63
|
+
else
|
64
|
+
raise_error("element #{arg} found, but not expected") if token.keys.include?(arg)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
alias has_not not_element
|
68
|
+
|
69
|
+
private
|
70
|
+
|
71
|
+
def raise_error(message)
|
72
|
+
if Object.const_defined?(:MiniTest)
|
73
|
+
raise MiniTest::Assertion.new(message)
|
74
|
+
else
|
75
|
+
raise Test::Unit::AssertionFailedError.new(message)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
end
|
80
|
+
end
|
data/lib/assert_json.rb
CHANGED
@@ -1,65 +1,2 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
def assert_json(json_string, &block)
|
4
|
-
if block_given?
|
5
|
-
yield AssertJson::Json.new(json_string)
|
6
|
-
end
|
7
|
-
end
|
8
|
-
|
9
|
-
class Json
|
10
|
-
|
11
|
-
def initialize(json_string)
|
12
|
-
@decoded_json = ActiveSupport::JSON.decode(json_string)
|
13
|
-
end
|
14
|
-
|
15
|
-
def element(*args, &block)
|
16
|
-
arg = args.shift
|
17
|
-
token = @decoded_json.is_a?(Array) ? @decoded_json.shift : @decoded_json
|
18
|
-
case token
|
19
|
-
when Hash
|
20
|
-
raise_error("element #{arg} not found") unless token.keys.include?(arg)
|
21
|
-
if second_arg = args.shift
|
22
|
-
raise_error("element #{token[arg].inspect} does not match #{second_arg.inspect}") if second_arg != token[arg]
|
23
|
-
end
|
24
|
-
when String, Array
|
25
|
-
raise_error("element #{arg} not found") if token != arg
|
26
|
-
when NilClass
|
27
|
-
raise_error("no element left")
|
28
|
-
else
|
29
|
-
flunk
|
30
|
-
end
|
31
|
-
|
32
|
-
if block_given?
|
33
|
-
begin
|
34
|
-
in_scope, @decoded_json = @decoded_json, token.is_a?(Hash) ? token[arg] : token
|
35
|
-
yield
|
36
|
-
ensure
|
37
|
-
@decoded_json = in_scope
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
end
|
42
|
-
|
43
|
-
def not_element(*args, &block)
|
44
|
-
arg = args.shift
|
45
|
-
token = @decoded_json
|
46
|
-
case token
|
47
|
-
when Array
|
48
|
-
raise_error("element #{arg} found, but not expected") if token.include?(arg)
|
49
|
-
else
|
50
|
-
raise_error("element #{arg} found, but not expected") if token.keys.include?(arg)
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
private
|
55
|
-
|
56
|
-
def raise_error(message)
|
57
|
-
if Object.const_defined?(:MiniTest)
|
58
|
-
raise MiniTest::Assertion.new(message)
|
59
|
-
else
|
60
|
-
raise Test::Unit::AssertionFailedError.new(message)
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
end
|
65
|
-
end
|
1
|
+
require 'assert_json/version'
|
2
|
+
require 'assert_json/assert_json'
|
@@ -0,0 +1,268 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/test_helper')
|
2
|
+
|
3
|
+
class AssertJsonNewDslTest < Test::Unit::TestCase
|
4
|
+
include AssertJson
|
5
|
+
|
6
|
+
def test_string
|
7
|
+
assert_json '"key"' do
|
8
|
+
has 'key'
|
9
|
+
end
|
10
|
+
end
|
11
|
+
def test_string_crosscheck
|
12
|
+
assert_raises(MiniTest::Assertion) do
|
13
|
+
assert_json '"key"' do
|
14
|
+
has 'wrong_key'
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
def test_regular_expression_for_strings
|
19
|
+
assert_json '"string"' do
|
20
|
+
has /tri/
|
21
|
+
end
|
22
|
+
end
|
23
|
+
def test_regular_expression_for_hash_values
|
24
|
+
assert_json '{"key":"value"}' do
|
25
|
+
has 'key', /alu/
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_single_hash
|
30
|
+
assert_json '{"key":"value"}' do
|
31
|
+
has 'key', 'value'
|
32
|
+
end
|
33
|
+
end
|
34
|
+
def test_single_hash_crosscheck_for_key
|
35
|
+
assert_raises(MiniTest::Assertion) do
|
36
|
+
assert_json '{"key":"value"}' do
|
37
|
+
has 'wrong_key', 'value'
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
def test_single_hash_crosscheck_for_value
|
42
|
+
assert_raises(MiniTest::Assertion) do
|
43
|
+
assert_json '{"key":"value"}' do
|
44
|
+
has 'key', 'wrong_value'
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_has_not
|
50
|
+
assert_json '{"key":"value"}' do
|
51
|
+
has 'key', 'value'
|
52
|
+
has_not 'key_not_included'
|
53
|
+
end
|
54
|
+
end
|
55
|
+
def test_has_not_crosscheck
|
56
|
+
assert_raises(MiniTest::Assertion) do
|
57
|
+
assert_json '{"key":"value"}' do
|
58
|
+
has_not 'key'
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_array
|
64
|
+
assert_json '["value1","value2","value3"]' do
|
65
|
+
has 'value1'
|
66
|
+
has 'value2'
|
67
|
+
has 'value3'
|
68
|
+
end
|
69
|
+
end
|
70
|
+
def test_has_not_array
|
71
|
+
assert_json '["value1","value2"]' do
|
72
|
+
has 'value1'
|
73
|
+
has 'value2'
|
74
|
+
has_not 'value3'
|
75
|
+
end
|
76
|
+
end
|
77
|
+
def test_array_crosscheck_order
|
78
|
+
assert_raises(MiniTest::Assertion) do
|
79
|
+
assert_json '["value1","value2","value3"]' do
|
80
|
+
has 'value2'
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
def test_array_crosscheck_for_first_item
|
85
|
+
assert_raises(MiniTest::Assertion) do
|
86
|
+
assert_json '["value1","value2","value3"]' do
|
87
|
+
has 'wrong_value1'
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
def test_array_crosscheck_for_second_item
|
92
|
+
assert_raises(MiniTest::Assertion) do
|
93
|
+
assert_json '["value1","value2","value3"]' do
|
94
|
+
has 'value1'
|
95
|
+
has 'wrong_value2'
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
def test_nested_arrays
|
101
|
+
assert_json '[[["deep","another_depp"],["second_deep"]]]' do
|
102
|
+
has [["deep","another_depp"],["second_deep"]]
|
103
|
+
end
|
104
|
+
end
|
105
|
+
def test_nested_arrays_crosscheck
|
106
|
+
assert_raises(MiniTest::Assertion) do
|
107
|
+
assert_json '[[["deep","another_depp"],["second_deep"]]]' do
|
108
|
+
has [["deep","wrong_another_depp"],["second_deep"]]
|
109
|
+
end
|
110
|
+
end
|
111
|
+
assert_raises(MiniTest::Assertion) do
|
112
|
+
assert_json '[[["deep","another_depp"],["second_deep"]]]' do
|
113
|
+
has [["deep","another_depp"],["wrong_second_deep"]]
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
def test_hash_with_value_array
|
119
|
+
assert_json '{"key":["value1","value2"]}' do
|
120
|
+
has 'key', ['value1', 'value2']
|
121
|
+
end
|
122
|
+
end
|
123
|
+
def test_hash_with_value_array_crosscheck_wrong_key
|
124
|
+
assert_raises(MiniTest::Assertion) do
|
125
|
+
assert_json '{"key":["value1","value2"]}' do
|
126
|
+
has 'wrong_key', ['value1', 'value2']
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
130
|
+
def test_hash_with_value_array_crosscheck_wrong_value1
|
131
|
+
assert_raises(MiniTest::Assertion) do
|
132
|
+
assert_json '{"key":["value1","value2"]}' do
|
133
|
+
has 'key', ['wrong_value1', 'value2']
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
137
|
+
def test_hash_with_value_array_crosscheck_wrong_value2
|
138
|
+
assert_raises(MiniTest::Assertion) do
|
139
|
+
assert_json '{"key":["value1","value2"]}' do
|
140
|
+
has 'key', ['value1', 'wrong_value2']
|
141
|
+
end
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
def test_hash_with_array_of_hashes
|
146
|
+
assert_json '{"key":[{"inner_key1":"value1"},{"inner_key2":"value2"}]}' do
|
147
|
+
has 'key' do
|
148
|
+
has 'inner_key1', 'value1'
|
149
|
+
has 'inner_key2', 'value2'
|
150
|
+
end
|
151
|
+
end
|
152
|
+
end
|
153
|
+
def test_hash_with_array_of_hashes_crosscheck_inner_key
|
154
|
+
assert_raises(MiniTest::Assertion) do
|
155
|
+
assert_json '{"key":[{"inner_key1":"value1"},{"inner_key2":"value2"}]}' do
|
156
|
+
has 'key' do
|
157
|
+
has 'wrong_inner_key1', 'value1'
|
158
|
+
end
|
159
|
+
end
|
160
|
+
end
|
161
|
+
end
|
162
|
+
def test_hash_with_array_of_hashes_crosscheck_inner_value
|
163
|
+
assert_raises(MiniTest::Assertion) do
|
164
|
+
assert_json '{"key":[{"inner_key1":"value1"},{"inner_key2":"value2"}]}' do
|
165
|
+
has 'key' do
|
166
|
+
has 'inner_key1', 'wrong_value1'
|
167
|
+
end
|
168
|
+
end
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
172
|
+
def test_array_with_two_hashes
|
173
|
+
assert_json '[{"key1":"value1"}, {"key2":"value2"}]' do
|
174
|
+
has 'key1', 'value1'
|
175
|
+
has 'key2', 'value2'
|
176
|
+
end
|
177
|
+
end
|
178
|
+
def test_array_with_nested_hashes
|
179
|
+
assert_json '[{"key1":{"key2":"value2"}}]' do
|
180
|
+
has 'key1' do
|
181
|
+
has 'key2', 'value2'
|
182
|
+
end
|
183
|
+
end
|
184
|
+
end
|
185
|
+
def test_array_with_two_hashes_crosscheck
|
186
|
+
assert_raises(MiniTest::Assertion) do
|
187
|
+
assert_json '[{"key1":"value1"}, {"key2":"value2"}]' do
|
188
|
+
has 'wrong_key1', 'value1'
|
189
|
+
has 'key2', 'value2'
|
190
|
+
end
|
191
|
+
end
|
192
|
+
assert_raises(MiniTest::Assertion) do
|
193
|
+
assert_json '[{"key1":"value1"}, {"key2":"value2"}]' do
|
194
|
+
has 'key1', 'value1'
|
195
|
+
has 'key2', 'wrong_value2'
|
196
|
+
end
|
197
|
+
end
|
198
|
+
end
|
199
|
+
|
200
|
+
def test_nested_hashes
|
201
|
+
assert_json '{"outer_key":{"key":{"inner_key":"value"}}}' do
|
202
|
+
has 'outer_key' do
|
203
|
+
has 'key' do
|
204
|
+
has 'inner_key', 'value'
|
205
|
+
end
|
206
|
+
end
|
207
|
+
end
|
208
|
+
end
|
209
|
+
def test_nested_hashes_crosscheck
|
210
|
+
assert_raises(MiniTest::Assertion) do
|
211
|
+
assert_json '{"outer_key":{"key":{"inner_key":"value"}}}' do
|
212
|
+
has 'wrong_outer_key'
|
213
|
+
end
|
214
|
+
end
|
215
|
+
assert_raises(MiniTest::Assertion) do
|
216
|
+
assert_json '{"outer_key":{"key":{"inner_key":"value"}}}' do
|
217
|
+
has 'outer_key' do
|
218
|
+
has 'key' do
|
219
|
+
has 'inner_key', 'wrong_value'
|
220
|
+
end
|
221
|
+
end
|
222
|
+
end
|
223
|
+
end
|
224
|
+
end
|
225
|
+
|
226
|
+
def test_real_xws
|
227
|
+
assert_json '[{"contact_request":{"sender_id":"3","receiver_id":"2","id":1}}]' do
|
228
|
+
has 'contact_request' do
|
229
|
+
has 'sender_id', '3'
|
230
|
+
has 'receiver_id', '2'
|
231
|
+
has 'id', 1
|
232
|
+
end
|
233
|
+
end
|
234
|
+
|
235
|
+
assert_json '[{"private_message":{"sender":{"display_name":"first last"},"receiver_id":"2","body":"body"}}]' do
|
236
|
+
has 'private_message' do
|
237
|
+
has 'sender' do
|
238
|
+
has 'display_name', 'first last'
|
239
|
+
end
|
240
|
+
has 'receiver_id', '2'
|
241
|
+
has 'body', 'body'
|
242
|
+
end
|
243
|
+
end
|
244
|
+
end
|
245
|
+
|
246
|
+
def test_not_enough_hass_in_array
|
247
|
+
assert_raises(MiniTest::Assertion) do
|
248
|
+
assert_json '["one","two"]' do
|
249
|
+
has "one"
|
250
|
+
has "two"
|
251
|
+
has "three"
|
252
|
+
end
|
253
|
+
end
|
254
|
+
end
|
255
|
+
|
256
|
+
def test_not_enough_hass_in_hash_array
|
257
|
+
assert_raises(MiniTest::Assertion) do
|
258
|
+
assert_json '{"key":[{"key1":"value1"}, {"key2":"value2"}]}' do
|
259
|
+
has 'key' do
|
260
|
+
has 'key1', 'value1'
|
261
|
+
has 'key2', 'value2'
|
262
|
+
has 'key3'
|
263
|
+
end
|
264
|
+
end
|
265
|
+
end
|
266
|
+
end
|
267
|
+
|
268
|
+
end
|
@@ -0,0 +1,268 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/test_helper')
|
2
|
+
|
3
|
+
class AssertJsonTest < Test::Unit::TestCase
|
4
|
+
include AssertJson
|
5
|
+
|
6
|
+
def test_string
|
7
|
+
assert_json '"key"' do |json|
|
8
|
+
json.element 'key'
|
9
|
+
end
|
10
|
+
end
|
11
|
+
def test_string_crosscheck
|
12
|
+
assert_raises(MiniTest::Assertion) do
|
13
|
+
assert_json '"key"' do |json|
|
14
|
+
json.element 'wrong_key'
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
def test_regular_expression_for_strings
|
19
|
+
assert_json '"string"' do |json|
|
20
|
+
json.element /tri/
|
21
|
+
end
|
22
|
+
end
|
23
|
+
def test_regular_expression_for_hash_values
|
24
|
+
assert_json '{"key":"value"}' do |json|
|
25
|
+
json.element 'key', /alu/
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_single_hash
|
30
|
+
assert_json '{"key":"value"}' do |json|
|
31
|
+
json.element 'key', 'value'
|
32
|
+
end
|
33
|
+
end
|
34
|
+
def test_single_hash_crosscheck_for_key
|
35
|
+
assert_raises(MiniTest::Assertion) do
|
36
|
+
assert_json '{"key":"value"}' do |json|
|
37
|
+
json.element 'wrong_key', 'value'
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
def test_single_hash_crosscheck_for_value
|
42
|
+
assert_raises(MiniTest::Assertion) do
|
43
|
+
assert_json '{"key":"value"}' do |json|
|
44
|
+
json.element 'key', 'wrong_value'
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_not_element
|
50
|
+
assert_json '{"key":"value"}' do |json|
|
51
|
+
json.element 'key', 'value'
|
52
|
+
json.not_element 'key_not_included'
|
53
|
+
end
|
54
|
+
end
|
55
|
+
def test_not_element_crosscheck
|
56
|
+
assert_raises(MiniTest::Assertion) do
|
57
|
+
assert_json '{"key":"value"}' do |json|
|
58
|
+
json.not_element 'key'
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_array
|
64
|
+
assert_json '["value1","value2","value3"]' do |json|
|
65
|
+
json.element 'value1'
|
66
|
+
json.element 'value2'
|
67
|
+
json.element 'value3'
|
68
|
+
end
|
69
|
+
end
|
70
|
+
def test_not_element_array
|
71
|
+
assert_json '["value1","value2"]' do |json|
|
72
|
+
json.element 'value1'
|
73
|
+
json.element 'value2'
|
74
|
+
json.not_element 'value3'
|
75
|
+
end
|
76
|
+
end
|
77
|
+
def test_array_crosscheck_order
|
78
|
+
assert_raises(MiniTest::Assertion) do
|
79
|
+
assert_json '["value1","value2","value3"]' do |json|
|
80
|
+
json.element 'value2'
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
def test_array_crosscheck_for_first_item
|
85
|
+
assert_raises(MiniTest::Assertion) do
|
86
|
+
assert_json '["value1","value2","value3"]' do |json|
|
87
|
+
json.element 'wrong_value1'
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
def test_array_crosscheck_for_second_item
|
92
|
+
assert_raises(MiniTest::Assertion) do
|
93
|
+
assert_json '["value1","value2","value3"]' do |json|
|
94
|
+
json.element 'value1'
|
95
|
+
json.element 'wrong_value2'
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
def test_nested_arrays
|
101
|
+
assert_json '[[["deep","another_depp"],["second_deep"]]]' do |json|
|
102
|
+
json.element [["deep","another_depp"],["second_deep"]]
|
103
|
+
end
|
104
|
+
end
|
105
|
+
def test_nested_arrays_crosscheck
|
106
|
+
assert_raises(MiniTest::Assertion) do
|
107
|
+
assert_json '[[["deep","another_depp"],["second_deep"]]]' do |json|
|
108
|
+
json.element [["deep","wrong_another_depp"],["second_deep"]]
|
109
|
+
end
|
110
|
+
end
|
111
|
+
assert_raises(MiniTest::Assertion) do
|
112
|
+
assert_json '[[["deep","another_depp"],["second_deep"]]]' do |json|
|
113
|
+
json.element [["deep","another_depp"],["wrong_second_deep"]]
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
def test_hash_with_value_array
|
119
|
+
assert_json '{"key":["value1","value2"]}' do |json|
|
120
|
+
json.element 'key', ['value1', 'value2']
|
121
|
+
end
|
122
|
+
end
|
123
|
+
def test_hash_with_value_array_crosscheck_wrong_key
|
124
|
+
assert_raises(MiniTest::Assertion) do
|
125
|
+
assert_json '{"key":["value1","value2"]}' do |json|
|
126
|
+
json.element 'wrong_key', ['value1', 'value2']
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
130
|
+
def test_hash_with_value_array_crosscheck_wrong_value1
|
131
|
+
assert_raises(MiniTest::Assertion) do
|
132
|
+
assert_json '{"key":["value1","value2"]}' do |json|
|
133
|
+
json.element 'key', ['wrong_value1', 'value2']
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
137
|
+
def test_hash_with_value_array_crosscheck_wrong_value2
|
138
|
+
assert_raises(MiniTest::Assertion) do
|
139
|
+
assert_json '{"key":["value1","value2"]}' do |json|
|
140
|
+
json.element 'key', ['value1', 'wrong_value2']
|
141
|
+
end
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
def test_hash_with_array_of_hashes
|
146
|
+
assert_json '{"key":[{"inner_key1":"value1"},{"inner_key2":"value2"}]}' do |json|
|
147
|
+
json.element 'key' do
|
148
|
+
json.element 'inner_key1', 'value1'
|
149
|
+
json.element 'inner_key2', 'value2'
|
150
|
+
end
|
151
|
+
end
|
152
|
+
end
|
153
|
+
def test_hash_with_array_of_hashes_crosscheck_inner_key
|
154
|
+
assert_raises(MiniTest::Assertion) do
|
155
|
+
assert_json '{"key":[{"inner_key1":"value1"},{"inner_key2":"value2"}]}' do |json|
|
156
|
+
json.element 'key' do
|
157
|
+
json.element 'wrong_inner_key1', 'value1'
|
158
|
+
end
|
159
|
+
end
|
160
|
+
end
|
161
|
+
end
|
162
|
+
def test_hash_with_array_of_hashes_crosscheck_inner_value
|
163
|
+
assert_raises(MiniTest::Assertion) do
|
164
|
+
assert_json '{"key":[{"inner_key1":"value1"},{"inner_key2":"value2"}]}' do |json|
|
165
|
+
json.element 'key' do
|
166
|
+
json.element 'inner_key1', 'wrong_value1'
|
167
|
+
end
|
168
|
+
end
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
172
|
+
def test_array_with_two_hashes
|
173
|
+
assert_json '[{"key1":"value1"}, {"key2":"value2"}]' do |json|
|
174
|
+
json.element 'key1', 'value1'
|
175
|
+
json.element 'key2', 'value2'
|
176
|
+
end
|
177
|
+
end
|
178
|
+
def test_array_with_nested_hashes
|
179
|
+
assert_json '[{"key1":{"key2":"value2"}}]' do |json|
|
180
|
+
json.element 'key1' do
|
181
|
+
json.element 'key2', 'value2'
|
182
|
+
end
|
183
|
+
end
|
184
|
+
end
|
185
|
+
def test_array_with_two_hashes_crosscheck
|
186
|
+
assert_raises(MiniTest::Assertion) do
|
187
|
+
assert_json '[{"key1":"value1"}, {"key2":"value2"}]' do |json|
|
188
|
+
json.element 'wrong_key1', 'value1'
|
189
|
+
json.element 'key2', 'value2'
|
190
|
+
end
|
191
|
+
end
|
192
|
+
assert_raises(MiniTest::Assertion) do
|
193
|
+
assert_json '[{"key1":"value1"}, {"key2":"value2"}]' do |json|
|
194
|
+
json.element 'key1', 'value1'
|
195
|
+
json.element 'key2', 'wrong_value2'
|
196
|
+
end
|
197
|
+
end
|
198
|
+
end
|
199
|
+
|
200
|
+
def test_nested_hashes
|
201
|
+
assert_json '{"outer_key":{"key":{"inner_key":"value"}}}' do |json|
|
202
|
+
json.element 'outer_key' do
|
203
|
+
json.element 'key' do
|
204
|
+
json.element 'inner_key', 'value'
|
205
|
+
end
|
206
|
+
end
|
207
|
+
end
|
208
|
+
end
|
209
|
+
def test_nested_hashes_crosscheck
|
210
|
+
assert_raises(MiniTest::Assertion) do
|
211
|
+
assert_json '{"outer_key":{"key":{"inner_key":"value"}}}' do |json|
|
212
|
+
json.element 'wrong_outer_key'
|
213
|
+
end
|
214
|
+
end
|
215
|
+
assert_raises(MiniTest::Assertion) do
|
216
|
+
assert_json '{"outer_key":{"key":{"inner_key":"value"}}}' do |json|
|
217
|
+
json.element 'outer_key' do
|
218
|
+
json.element 'key' do
|
219
|
+
json.element 'inner_key', 'wrong_value'
|
220
|
+
end
|
221
|
+
end
|
222
|
+
end
|
223
|
+
end
|
224
|
+
end
|
225
|
+
|
226
|
+
def test_real_xws
|
227
|
+
assert_json '[{"contact_request":{"sender_id":"3","receiver_id":"2","id":1}}]' do |json|
|
228
|
+
json.element 'contact_request' do
|
229
|
+
json.element 'sender_id', '3'
|
230
|
+
json.element 'receiver_id', '2'
|
231
|
+
json.element 'id', 1
|
232
|
+
end
|
233
|
+
end
|
234
|
+
|
235
|
+
assert_json '[{"private_message":{"sender":{"display_name":"first last"},"receiver_id":"2","body":"body"}}]' do |json|
|
236
|
+
json.element 'private_message' do
|
237
|
+
json.element 'sender' do
|
238
|
+
json.element 'display_name', 'first last'
|
239
|
+
end
|
240
|
+
json.element 'receiver_id', '2'
|
241
|
+
json.element 'body', 'body'
|
242
|
+
end
|
243
|
+
end
|
244
|
+
end
|
245
|
+
|
246
|
+
def test_not_enough_elements_in_array
|
247
|
+
assert_raises(MiniTest::Assertion) do
|
248
|
+
assert_json '["one","two"]' do |json|
|
249
|
+
json.element "one"
|
250
|
+
json.element "two"
|
251
|
+
json.element "three"
|
252
|
+
end
|
253
|
+
end
|
254
|
+
end
|
255
|
+
|
256
|
+
def test_not_enough_elements_in_hash_array
|
257
|
+
assert_raises(MiniTest::Assertion) do
|
258
|
+
assert_json '{"key":[{"key1":"value1"}, {"key2":"value2"}]}' do |json|
|
259
|
+
json.element 'key' do
|
260
|
+
json.element 'key1', 'value1'
|
261
|
+
json.element 'key2', 'value2'
|
262
|
+
json.element 'key3'
|
263
|
+
end
|
264
|
+
end
|
265
|
+
end
|
266
|
+
end
|
267
|
+
|
268
|
+
end
|
data/test/test_helper.rb
ADDED
metadata
CHANGED
@@ -2,17 +2,16 @@
|
|
2
2
|
name: assert_json
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0
|
5
|
+
version: 0.1.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- "Thorsten B\xC3\xB6ttger"
|
9
|
-
- Andree Wille
|
10
9
|
- Ralph von der Heyden
|
11
10
|
autorequire:
|
12
11
|
bindir: bin
|
13
12
|
cert_chain: []
|
14
13
|
|
15
|
-
date: 2011-
|
14
|
+
date: 2011-10-27 00:00:00 +02:00
|
16
15
|
default_executable:
|
17
16
|
dependencies:
|
18
17
|
- !ruby/object:Gem::Dependency
|
@@ -46,11 +45,20 @@ extensions: []
|
|
46
45
|
extra_rdoc_files: []
|
47
46
|
|
48
47
|
files:
|
49
|
-
-
|
50
|
-
-
|
51
|
-
- Rakefile
|
48
|
+
- .gitignore
|
49
|
+
- .rvmrc
|
52
50
|
- Gemfile
|
51
|
+
- Gemfile.lock
|
52
|
+
- MIT-LICENSE
|
53
53
|
- README.md
|
54
|
+
- Rakefile
|
55
|
+
- assert_json.gemspec
|
56
|
+
- lib/assert_json.rb
|
57
|
+
- lib/assert_json/assert_json.rb
|
58
|
+
- lib/assert_json/version.rb
|
59
|
+
- test/assert_json_new_dsl_test.rb
|
60
|
+
- test/assert_json_test.rb
|
61
|
+
- test/test_helper.rb
|
54
62
|
has_rdoc: true
|
55
63
|
homepage: https://github.com/xing/assert_json
|
56
64
|
licenses: []
|
@@ -79,5 +87,7 @@ rubygems_version: 1.6.2
|
|
79
87
|
signing_key:
|
80
88
|
specification_version: 3
|
81
89
|
summary: A gem to test JSON strings.
|
82
|
-
test_files:
|
83
|
-
|
90
|
+
test_files:
|
91
|
+
- test/assert_json_new_dsl_test.rb
|
92
|
+
- test/assert_json_test.rb
|
93
|
+
- test/test_helper.rb
|