source2swagger 0.0.1

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.
@@ -0,0 +1,44 @@
1
+ ##~ sapi = source2swagger.namespace("sentiment")
2
+ ##~ sapi.basePath = "http://helloworld.3scale.net"
3
+ ##~ sapi.swagrVersion = "0.1a"
4
+ ##~ sapi.apiVersion = "1.0"
5
+
6
+ ##~ sapi = source2swagger.namespace("sentiment")
7
+ ##~ a = sapi.apis.add
8
+ ##
9
+ ##~ a.set :path => "/word/{word}", :format => "json"
10
+ ##~ a.description = "Access to the sentiment of a given word"
11
+ ##
12
+ ## declaring errors
13
+ ##~ @error_sanitize = {:reason => "failure to sanitize: \"input\"", :code => 422}
14
+ ##~ @error_api_down = {:reason => "API down", :code => 500}
15
+
16
+ ##
17
+ ##~ a.errorResponses.add @error_sanitize
18
+ ##~ a.errorResponses.add @error_api_down
19
+ ##~ a.errorResponses.add :reason => "failure to sanitize: \"input\", returns empty set", :code => 422
20
+ ##~ a.errorResponses.add :reason => "access denied, either your access credentials are incorrect or you are about the limits of your quota", :code => 403
21
+ ##~
22
+ ##~ op = a.operations.add
23
+ ##~ op.set :httpMethod => "GET", :tags => ["production"], :nickname => "get_word", :deprecated => false
24
+ ##~ op.summary = "Returns the sentiment values of a given word"
25
+ ##~ op.parameters.add :name => "word", :description => "The word whose sentiment is returned", :dataType => "string", :allowMultiple => false, :required => true, :paramType => "path"
26
+ ##~ op.parameters.add :name => "app_id", :description => "Your access application id", :dataType => "string", :allowMultiple => false, :required => true, :paramType => "query"
27
+ ##~ op.parameters.add :name => "app_key", :description => "Your access application key", :dataType => "string", :allowMultiple => false, :required => false, :paramType => "query"
28
+ ##
29
+ ##~ sapi = source2swagger.namespace("sentiment")
30
+ ##
31
+ ##~ a = sapi.apis.add
32
+ ##
33
+ ##~ a.set :path => "/ping", :format => "text"
34
+ ##~ a.description = "Check the status to see if it's up and running"
35
+ ##
36
+ ## declaring errors
37
+ ##
38
+ ##~ a.errorResponses.add @error_api_down
39
+ ##
40
+ ##~ op = a.operations.add
41
+ ##~ op.set :httpMethod => "GET", :tags => ["test"], :nickname => "ping", :deprecated => true
42
+ ##~ op.summary = "This operation is DEPRECATED. It returns the string \"that's getting old... pong \" if the API is up and running"
43
+ ##
44
+
@@ -0,0 +1,46 @@
1
+ ##~ sapi = source2swagger.namespace("sentiment")
2
+ ##~ sapi.basePath = "http://helloworld.3scale.net"
3
+ ##~ sapi.swagrVersion = "0.1a"
4
+ ##~ sapi.apiVersion = "1.0"
5
+
6
+ ##~ sapi = source2swagger.namespace("sentiment")
7
+ ##~ a = sapi.apis.add
8
+ ##
9
+ ##~ a.set :path => "/word/{word}", :format => "json"
10
+ ##~ a.description = "Access to the sentiment of a given word"
11
+ ##
12
+ ## REMOVING THE DECLARATION ON @error_sanitize and @error_api_dow TO THE END OF THE FILE
13
+ ## COULD ALSO BE A DIFFERENT FILE
14
+ ##
15
+ ##~ a.errorResponses.add @error_sanitize
16
+ ##~ a.errorResponses.add @error_api_down
17
+ ##~ a.errorResponses.add :reason => "failure to sanitize: \"input\", returns empty set", :code => 422
18
+ ##~ a.errorResponses.add :reason => "access denied, either your access credentials are incorrect or you are about the limits of your quota", :code => 403
19
+ ##~
20
+ ##~ op = a.operations.add
21
+ ##~ op.set :httpMethod => "GET", :tags => ["production"], :nickname => "get_word", :deprecated => false
22
+ ##~ op.summary = "Returns the sentiment values of a given word"
23
+ ##~ op.parameters.add :name => "word", :description => "The word whose sentiment is returned", :dataType => "string", :allowMultiple => false, :required => true, :paramType => "path"
24
+ ##~ op.parameters.add :name => "app_id", :description => "Your access application id", :dataType => "string", :allowMultiple => false, :required => true, :paramType => "query"
25
+ ##~ op.parameters.add :name => "app_key", :description => "Your access application key", :dataType => "string", :allowMultiple => false, :required => false, :paramType => "query"
26
+ ##
27
+ ##~ sapi = source2swagger.namespace("sentiment")
28
+ ##
29
+ ##~ a = sapi.apis.add
30
+ ##
31
+ ##~ a.set :path => "/ping", :format => "text"
32
+ ##~ a.description = "Check the status to see if it's up and running"
33
+ ##
34
+ ## declaring errors
35
+ ##
36
+ ##~ a.errorResponses.add @error_api_down
37
+ ##
38
+ ##~ op = a.operations.add
39
+ ##~ op.set :httpMethod => "GET", :tags => ["test"], :nickname => "ping", :deprecated => true
40
+ ##~ op.summary = "This operation is DEPRECATED. It returns the string \"that's getting old... pong \" if the API is up and running"
41
+ ##
42
+ ## MOVED VAR DECLARATION
43
+ ##~ @error_sanitize = {:reason => "failure to sanitize: \"input\"", :code => 422}
44
+ ##~ @error_api_down = {:reason => "API down", :code => 500}
45
+
46
+
@@ -0,0 +1,20 @@
1
+ ##~ sapi = source2swagger.namespace("sentiment")
2
+ ##~ sapi.basePath = "http://helloworld.3scale.net"
3
+ ##~ sapi.swagrVersion = "0.1a"
4
+ ##~ sapi.apiVersion = "1.0"
5
+ ##
6
+ ##~ a = sapi.apis.add
7
+ ##
8
+ ##~ a.set :path => "/ping", :format => "text"
9
+ ##~ a.description = "Check the status to see if it's up and running"
10
+ ##
11
+ ## declaring errors
12
+ ##
13
+ ##~ a.errorResponses.add :reason => "API down", :code => 500
14
+ ##
15
+ ## end CANNOT BE USED AS VARIABLE SINCE IT'S A RUBY RESERVED WORD
16
+ ##
17
+ ##~ end = a.operations.add
18
+ ##~ end.set :httpMethod => "GET", :tags => ["test"], :nickname => "ping", :deprecated => true
19
+ ##~ end.summary = "This operation is DEPRECATED. It returns the string \"that's getting old... pong \" if the API is up and running"
20
+ ##
@@ -0,0 +1,16 @@
1
+ ##~ sapi = source2swagger.namespace("sentiment")
2
+ ##~ sapi.basePath = "http://helloworld.3scale.net"
3
+ ##~ sapi.swagrVersion = "0.1a"
4
+ ##~ sapi.apiVersion = "1.0"
5
+ ##
6
+ ##~ a = sapi.apis.add
7
+ ##
8
+ ##~ a.set :path => "/ping", :format => "text"
9
+ ##~ a.description = Check the status to see if it's up and running
10
+ ##
11
+ ## THE STRING ABOVE IS NOT WITHIN QUOTES
12
+ ## declaring errors
13
+ ##
14
+ ##~ a.errorResponses.add :reason => "API down", :code => 500
15
+ ##
16
+
@@ -0,0 +1,44 @@
1
+ ##~ sapi = source2swagger.namespace("sentiment")
2
+ ##~ sapi.basePath = "http://helloworld.3scale.net"
3
+ ##~ sapi.swagrVersion = "0.1a"
4
+ ##~ sapi.apiVersion = "1.0"
5
+
6
+ ##~ sapi = source2swagger.namespace("sentiment")
7
+ ##~ a = sapi.apis.add
8
+ ##
9
+ ##~ a.set :path => "/word/{word}", :format => "json"
10
+ ##~ a.description = "Access to the sentiment of a given word"
11
+ ##
12
+ ## declaring errors
13
+ ##~ @error_sanitize = {:reason => "failure to sanitize: \"input\"", :code => 422}
14
+ ##~ @error_api_down = {:reason => "API down", :code => 500}
15
+
16
+ ##
17
+ ##~ a.errorResponses.add @error_sanitize_NOT_YET_DEFINED
18
+ ##~ a.errorResponses.add @error_api_down
19
+ ##~ a.errorResponses.add :reason => "failure to sanitize: \"input\", returns empty set", :code => 422
20
+ ##~ a.errorResponses.add :reason => "access denied, either your access credentials are incorrect or you are about the limits of your quota", :code => 403
21
+ ##~
22
+ ##~ op = a.operations.add
23
+ ##~ op.set :httpMethod => "GET", :tags => ["production"], :nickname => "get_word", :deprecated => false
24
+ ##~ op.summary = "Returns the sentiment values of a given word"
25
+ ##~ op.parameters.add :name => "word", :description => "The word whose sentiment is returned", :dataType => "string", :allowMultiple => false, :required => true, :paramType => "path"
26
+ ##~ op.parameters.add :name => "app_id", :description => "Your access application id", :dataType => "string", :allowMultiple => false, :required => true, :paramType => "query"
27
+ ##~ op.parameters.add :name => "app_key", :description => "Your access application key", :dataType => "string", :allowMultiple => false, :required => false, :paramType => "query"
28
+ ##
29
+ ##~ sapi = source2swagger.namespace("sentiment")
30
+ ##
31
+ ##~ a = sapi.apis.add
32
+ ##
33
+ ##~ a.set :path => "/ping", :format => "text"
34
+ ##~ a.description = "Check the status to see if it's up and running"
35
+ ##
36
+ ## declaring errors
37
+ ##
38
+ ##~ a.errorResponses.add @error_api_down
39
+ ##
40
+ ##~ op = a.operations.add
41
+ ##~ op.set :httpMethod => "GET", :tags => ["test"], :nickname => "ping", :deprecated => true
42
+ ##~ op.summary = "This operation is DEPRECATED. It returns the string \"that's getting old... pong \" if the API is up and running"
43
+ ##
44
+
@@ -0,0 +1,10 @@
1
+ require 'test/unit'
2
+ require 'swagger_hash'
3
+ require 'swagger_reader'
4
+ require 'json'
5
+
6
+ $:.unshift(File.expand_path(File.dirname(__FILE__) + '/../lib'))
7
+
8
+ Dir[File.dirname(__FILE__) + '/test_helpers/**/*.rb'].each { |file| require file }
9
+
10
+
@@ -0,0 +1,57 @@
1
+ module TestHelpers
2
+ module CompareHashes
3
+
4
+ def paths(path,h)
5
+
6
+ if h.class==Hash
7
+ v = []
8
+ h.each do |k,val|
9
+ v << paths("#{path}/#{k}",val)
10
+ end
11
+ return v.flatten
12
+ else
13
+ if h.class==Array
14
+ v = []
15
+ if h.size>0
16
+ h.each do |item|
17
+ v << paths("#{path}/[]",item)
18
+ end
19
+ else
20
+ v << ["#{path}/[]"]
21
+ end
22
+
23
+ return v.flatten
24
+ else
25
+ return ["#{path}/#{h}:(#{h.class})"]
26
+ end
27
+ end
28
+ end
29
+
30
+ def diff(h1, h2)
31
+
32
+ v1 = paths("",h1)
33
+ v2 = paths("",h2)
34
+
35
+ return [] if v1.size==v2.size && v1-v2 == []
36
+
37
+ v1 = v1.sort
38
+ v2 = v2.sort
39
+
40
+ num = v1.size
41
+ num = v2.size if v2.size < num
42
+
43
+ v1.size.times do |i|
44
+ if v1[i]!=v2[i]
45
+ return [v1[i], v2[i]]
46
+ end
47
+ end
48
+
49
+ return [nil, nil]
50
+
51
+ end
52
+ end
53
+ end
54
+
55
+ Test::Unit::TestCase.send(:include, TestHelpers::CompareHashes)
56
+
57
+
@@ -0,0 +1,177 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
2
+
3
+ class SwaggerHashTest < Test::Unit::TestCase
4
+
5
+
6
+ def test_basics
7
+ h = SwaggerHash.new
8
+
9
+ h.o = 1
10
+ assert_equal h, {:o => 1}
11
+
12
+ h.u.u.u = {:y => "1"}
13
+ assert_equal h, {:o => 1, :u => {:u => {:u => {:y => "1"}}}}
14
+
15
+ h.x
16
+ assert_equal h, {:o => 1, :u => {:u => {:u => {:y => "1"}}}, :x => {}}
17
+
18
+ h.x = []
19
+ assert_equal h, {:o => 1, :u => {:u => {:u => {:y => "1"}}}, :x => []}
20
+
21
+ end
22
+
23
+ def test_basics_add
24
+
25
+ h = SwaggerHash.new
26
+
27
+ v = h.x.y.z.add
28
+ assert_equal v, {}
29
+ assert_equal h, {:x => {:y => {:z => {:_array => [{}]}}}}
30
+
31
+ v.a = 10
32
+ assert_equal h, {:x => {:y => {:z => {:_array =>[{:a => 10}]}}}}
33
+
34
+ v.b.b = "5"
35
+ assert_equal h, {:x => {:y => {:z => {:_array =>[{:a => 10, :b => {:b => "5"}}]}}}}
36
+
37
+ v = h.x.y.z.add
38
+ assert_equal h, {:x => {:y => {:z => {:_array =>[{:a => 10, :b => {:b => "5"}},{}]}}}}
39
+
40
+ v.c.c = "3"
41
+ assert_equal h, {:x => {:y => {:z => {:_array =>[{:a => 10, :b => {:b => "5"}}, {:c => {:c => "3"}}]}}}}
42
+
43
+ end
44
+
45
+ def test_basics_add_params
46
+
47
+ h = SwaggerHash.new
48
+
49
+ h.z.add :a => 1
50
+ h.z.add :a => 1
51
+
52
+ assert_equal h.to_hash, {:z => [{:a => 1}, {:a => 1}]}
53
+
54
+ h = SwaggerHash.new
55
+
56
+ h.z.add :a => 1, :b => 2, :c => 3
57
+ h.z.add :a => 1, :b => 2, :c => 3
58
+
59
+ assert_equal h.to_hash, {:z => [{:a => 1, :b => 2, :c => 3}, {:a => 1, :b => 2, :c => 3}]}
60
+
61
+ h = SwaggerHash.new
62
+
63
+ h.z.add :a => 1, :b => 2, :c => 3
64
+ h.z.add :a => 1, :b => 2, :c => 3
65
+ i = h.z.add
66
+ i.bs = "k"
67
+
68
+ assert_equal h.to_hash, {:z => [{:a => 1, :b => 2, :c => 3}, {:a => 1, :b => 2, :c => 3}, {:bs => "k"}]}
69
+
70
+ end
71
+
72
+ def test_to_hash
73
+
74
+ h = SwaggerHash.new
75
+ assert_equal h.to_hash, {}
76
+
77
+ h = SwaggerHash.new
78
+ a = h.x.y.add
79
+ a.a1 = "1"
80
+ a.a2 = "2"
81
+
82
+ a = h.x.y.add
83
+ a.a1 = "1"
84
+
85
+ a = h.y.add
86
+
87
+ a.set :bs => "k", :bs2 => "k2"
88
+
89
+ a.bs3 = "k3"
90
+
91
+ assert_equal h.to_hash, {:x => {:y => [{:a1 => "1", :a2 => "2"}, {:a1 => "1"}]}, :y => [{:bs => "k", :bs2 => "k2", :bs3 => "k3"}]}
92
+
93
+ end
94
+
95
+
96
+ def test_load_same_api_space
97
+
98
+ source2swagger = SwaggerHash.new
99
+
100
+ a = source2swagger.namespace("namespace1")
101
+ a.bla = 10
102
+ a.foo = "100"
103
+
104
+ a = source2swagger.namespace("namespace2")
105
+ assert_equal a.to_hash, {}
106
+
107
+ a = source2swagger.namespace("namespace1")
108
+ assert_equal a.to_hash, {:bla => 10, :foo => "100"}
109
+
110
+ a.bar.add :a => 1, :b => 2
111
+ assert_equal a.to_hash, {:bla => 10, :foo => "100", :bar => [{:a => 1, :b => 2}]}
112
+
113
+ a = source2swagger.namespace("namespace2")
114
+ assert_equal a.to_hash, {}
115
+
116
+ a = source2swagger.namespace("namespace1")
117
+ assert_equal a.to_hash, {:bla => 10, :foo => "100", :bar => [{:a => 1, :b => 2}]}
118
+
119
+ end
120
+
121
+ def test_save
122
+
123
+ source2swagger = SwaggerHash.new
124
+
125
+ a = source2swagger.namespace("namespace1")
126
+ a.bla = 10
127
+ a.foo = "100"
128
+
129
+ b = source2swagger.namespace("namespace2")
130
+ b.foo.bar = 42
131
+
132
+ assert_equal source2swagger.namespace("namespace1").to_hash, {:bla => 10, :foo => "100"}
133
+ assert_equal source2swagger.namespace("namespace2").to_hash, {:foo => {:bar => 42}}
134
+
135
+ a = source2swagger.namespace("namespace1")
136
+ assert_equal a.to_hash, {:bla => 10, :foo => "100"}
137
+
138
+ end
139
+
140
+
141
+ def test_compare
142
+
143
+ reader = SwaggerReader.new
144
+
145
+ assert_equal [], diff([],[])
146
+ assert_equal [], diff({},{})
147
+ assert_equal [], diff("10","10")
148
+ assert_not_equal [], diff("10","11")
149
+
150
+ assert_equal [], diff({:a=>1,:b=>{:a=>1}},{:b=>{:a=>1},:a=>1})
151
+ assert_not_equal [], diff({:a=>1,:b=>{:a=>1}},{:b=>{:a=>1},:a=>"1"})
152
+ assert_not_equal [], diff({:a=>1,:b=>{:a=>1}},{:b=>{:a=>2},:a=>1})
153
+
154
+ assert_equal [], diff({:a=>1,:b=>{:a=>1,:c=>[ 11, 10, 9] }},{:b=>{:c=>[9, 10, 11],:a=>1},:a=>1})
155
+
156
+ a = {:a=>1, :b=>{:a=>1, :c => [{:z=>1}, {}, {:z2=>"2"}] }}
157
+ b = {:b=> {:c => [ {}, {:z2=>"2"}, {:z=>1}], :a=>1}, :a=>1}
158
+
159
+ assert_equal [], diff(a,b)
160
+
161
+ a = {:z => [{}, {:a => {:b => [1,2]}}]}
162
+ b = {:z => [{:a => {:b => [1,2]}}, {}]}
163
+
164
+ assert_equal [], diff(a,b)
165
+
166
+ b = {:z => [{}, {:a => {:b => [2,1]}}]}
167
+
168
+ assert_equal [], diff(a,b)
169
+
170
+ a = {:z => [{}, {:a => {:b => [{:c => 3}, {:d => 4}]}}]}
171
+ b = {:z => [{}, {:a => {:b => [{:d => 4}, {:c => 3}]}}]}
172
+
173
+ assert_equal [], diff(a,b)
174
+
175
+ end
176
+
177
+ end
@@ -0,0 +1,181 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
2
+
3
+ class SwaggerReaderTest < Test::Unit::TestCase
4
+
5
+ def setup
6
+ source2swagger = SwaggerHash.new
7
+ end
8
+
9
+ def test_swagger_simple
10
+
11
+ source2swagger = SwaggerHash.new
12
+ sapi = source2swagger.namespace("test")
13
+ ep = sapi.endpoint.add
14
+ ep.set :path => "/sentence/{sentence}", :format => "json"
15
+ ep.description = "Returns the aggregated sentiment of a sentence"
16
+
17
+ expected = {:endpoint => [{:path => "/sentence/{sentence}", :format => "json", :description => "Returns the aggregated sentiment of a sentence"}]}
18
+ assert_equal source2swagger.namespace("test").to_hash, expected
19
+
20
+
21
+
22
+ code = ["source2swagger = SwaggerHash.new", "sapi = source2swagger.namespace(\"test\")", "ep = sapi.endpoint.add", "ep.set :path => \"/sentence/{sentence}\", :format => \"json\"", "ep.description = \"Returns the aggregated sentiment of a sentence\""]
23
+ code << "source2swagger.namespace(\"test\").to_hash"
24
+ res = eval(code.join(";"))
25
+ assert_equal res, expected
26
+
27
+ end
28
+
29
+ def test_samples_1
30
+
31
+ reader = SwaggerReader.new
32
+
33
+ code = reader.analyze_file("#{File.dirname(__FILE__)}/../data/sample1.rb","##~")
34
+
35
+ api1 = reader.process_code(code)
36
+
37
+ api1 = api1["sentiment"].to_hash
38
+
39
+ api2 = JSON::load(File.new("#{File.dirname(__FILE__)}/../data/sample1.json","r"))
40
+
41
+ assert_equal [], diff(api1, api2)
42
+
43
+ end
44
+
45
+ def test_samples_2
46
+
47
+ reader = SwaggerReader.new
48
+
49
+ code = reader.analyze_file("#{File.dirname(__FILE__)}/../data/sample2.rb","##~")
50
+ api1 = reader.process_code(code)
51
+
52
+ api1 = api1["sentiment"].to_hash
53
+
54
+ api2 = JSON::load(File.new("#{File.dirname(__FILE__)}/../data/sample2.json","r"))
55
+
56
+ assert_equal [], diff(api1, api2)
57
+
58
+ end
59
+
60
+ def test_samples_3
61
+
62
+ reader = SwaggerReader.new
63
+
64
+ code = reader.analyze_file("#{File.dirname(__FILE__)}/../data/sample3.rb","##~")
65
+ api1 = reader.process_code(code)
66
+
67
+ api1 = api1["sentiment"].to_hash
68
+
69
+ api2 = JSON::load(File.new("#{File.dirname(__FILE__)}/../data/sample3.json","r"))
70
+
71
+ assert_equal [], diff(api1, api2)
72
+
73
+ end
74
+
75
+ def test_samples_4
76
+
77
+ ## sample4.rb is same as sample2.rb with the use of variables
78
+
79
+ reader = SwaggerReader.new
80
+
81
+ code = reader.analyze_file("#{File.dirname(__FILE__)}/../data/sample4.rb","##~")
82
+ api1 = reader.process_code(code)
83
+ api1 = api1["sentiment"].to_hash
84
+
85
+ api2 = JSON::load(File.new("#{File.dirname(__FILE__)}/../data/sample2.json","r"))
86
+
87
+ assert_equal [], diff(api1, api2)
88
+
89
+ end
90
+
91
+
92
+ def test_incorrect_samples
93
+
94
+ reader = SwaggerReader.new
95
+
96
+ code = reader.analyze_file("#{File.dirname(__FILE__)}/../data/sample1.rb","##~")
97
+ api1 = reader.process_code(code)
98
+
99
+ api1 = api1["sentiment"].to_hash
100
+
101
+ api2 = JSON::load(File.new("#{File.dirname(__FILE__)}/../data/sample2.json","r"))
102
+
103
+ assert_not_equal [], diff(api1, api2)
104
+
105
+ api3 = JSON::load(File.new("#{File.dirname(__FILE__)}/../data/sample3.json","r"))
106
+ assert_not_equal [], diff(api1, api3)
107
+
108
+
109
+ end
110
+
111
+ def test_exception_single_file
112
+
113
+ reader = SwaggerReader.new
114
+
115
+ begin
116
+ code = reader.analyze_file("#{File.dirname(__FILE__)}/../data/sample_bad2.rb","##~")
117
+ api1 = reader.process_code(code)
118
+ assert_equal true, false
119
+ rescue Exception => e
120
+ assert_equal "Error parsing source files at #{File.dirname(__FILE__)}/../data/sample_bad2.rb:9\n#<SyntaxError: (eval):1: unterminated string meets end of file>", e.to_s
121
+ end
122
+
123
+ end
124
+
125
+ def test_exception_all_files
126
+
127
+ reader = SwaggerReader.new
128
+
129
+ begin
130
+ code = reader.analyze_all_files("#{File.dirname(__FILE__)}/../data","rb","##~")
131
+ api1 = reader.process_code(code)
132
+ assert_equal true, false
133
+ rescue Exception => e
134
+ assert_equal "Error parsing source files at #{File.dirname(__FILE__)}/../data/sample_bad1.rb:17\n#<SyntaxError: (eval):1: syntax error, unexpected keyword_end, expecting $end\n...=> \"API down\", :code => 500;end = a.operations.add;out = {:a...\n... ^>", e.to_s
135
+ end
136
+
137
+ end
138
+
139
+ def test_exception_variable_not_defined
140
+
141
+ reader = SwaggerReader.new
142
+
143
+ begin
144
+ code = reader.analyze_file("#{File.dirname(__FILE__)}/../data/sample_bad3.rb","##~")
145
+ api1 = reader.process_code(code)
146
+ assert_equal true, false
147
+ rescue Exception => e
148
+ assert_equal "Error parsing source files at #{File.dirname(__FILE__)}/../data/sample_bad3.rb:17\n#<NameError: undefined local variable or method `error_sanitize_NOT_YET_DEFINED' ", e.to_s.split("for")[0].to_s
149
+
150
+ end
151
+ end
152
+
153
+ def test_unordered_variables_do_not_matter
154
+
155
+ reader = SwaggerReader.new
156
+
157
+ code = reader.analyze_file("#{File.dirname(__FILE__)}/../data/sample5.rb","##~")
158
+ api1 = reader.process_code(code)
159
+ api1 = api1["sentiment"].to_hash
160
+
161
+ api2 = JSON::load(File.new("#{File.dirname(__FILE__)}/../data/sample2.json","r"))
162
+
163
+ assert_equal [], diff(api1, api2)
164
+ end
165
+
166
+ def test_safe_level
167
+
168
+ assert_raises SwaggerReaderException do
169
+ reader = SwaggerReader.new
170
+
171
+ code = {:code => [], :line_number => [], :file => []}
172
+
173
+ code[:code] << "system \"rm -rf /tmp/test.txt\""
174
+ code[:line_number] << 0
175
+ code[:file] << "foo"
176
+
177
+ reader.process_code(code)
178
+ end
179
+ end
180
+
181
+ end