|
1 | 1 | # frozen_string_literal: true |
2 | 2 |
|
3 | | -require_relative "membrane_spec_helper" |
4 | | -require "membrane" |
| 3 | +require_relative 'membrane_spec_helper' |
| 4 | +require 'membrane' |
5 | 5 |
|
6 | 6 | RSpec.describe Membrane::SchemaParser do |
7 | 7 | let(:parser) { Membrane::SchemaParser.new } |
8 | 8 |
|
9 | | - describe "#deparse" do |
10 | | - it "should call inspect on the value of a Value schema" do |
11 | | - val = "test" |
| 9 | + describe '#deparse' do |
| 10 | + it 'calls inspect on the value of a Value schema' do |
| 11 | + val = 'test' |
12 | 12 | schema = Membrane::Schemas::Value.new(val) |
13 | 13 |
|
14 | 14 | # Just verify it returns the inspected value |
15 | 15 | expect(parser.deparse(schema)).to eq val.inspect |
16 | 16 | end |
17 | 17 |
|
18 | | - it "should return 'any' for instance of Membrane::Schemas::Any" do |
| 18 | + it "returns 'any' for instance of Membrane::Schemas::Any" do |
19 | 19 | schema = Membrane::Schemas::Any.new |
20 | 20 |
|
21 | | - expect(parser.deparse(schema)).to eq "any" |
| 21 | + expect(parser.deparse(schema)).to eq 'any' |
22 | 22 | end |
23 | 23 |
|
24 | | - it "should return 'bool' for instances of Membrane::Schemas::Bool" do |
| 24 | + it "returns 'bool' for instances of Membrane::Schemas::Bool" do |
25 | 25 | schema = Membrane::Schemas::Bool.new |
26 | 26 |
|
27 | | - expect(parser.deparse(schema)).to eq "bool" |
| 27 | + expect(parser.deparse(schema)).to eq 'bool' |
28 | 28 | end |
29 | 29 |
|
30 | | - it "should call name on the class of a Membrane::Schemas::Class schema" do |
| 30 | + it 'calls name on the class of a Membrane::Schemas::Class schema' do |
31 | 31 | klass = String |
32 | 32 | schema = Membrane::Schemas::Class.new(klass) |
33 | 33 |
|
34 | 34 | # Just verify it returns the class name |
35 | 35 | expect(parser.deparse(schema)).to eq klass.name |
36 | 36 | end |
37 | 37 |
|
38 | | - it "should deparse the k/v schemas of a Membrane::Schemas::Dictionary schema" do |
| 38 | + it 'deparses the k/v schemas of a Membrane::Schemas::Dictionary schema' do |
39 | 39 | key_schema = Membrane::Schemas::Class.new(String) |
40 | 40 | val_schema = Membrane::Schemas::Class.new(Integer) |
41 | 41 |
|
42 | 42 | dict_schema = Membrane::Schemas::Dictionary.new(key_schema, val_schema) |
43 | 43 |
|
44 | | - expect(parser.deparse(dict_schema)).to eq "dict(String, Integer)" |
| 44 | + expect(parser.deparse(dict_schema)).to eq 'dict(String, Integer)' |
45 | 45 | end |
46 | 46 |
|
47 | | - it "should deparse the element schemas of a Membrane::Schemas::Enum schema" do |
| 47 | + it 'deparses the element schemas of a Membrane::Schemas::Enum schema' do |
48 | 48 | schemas = |
49 | 49 | [String, Integer, Float].map { |c| Membrane::Schemas::Class.new(c) } |
50 | 50 |
|
51 | 51 | enum_schema = Membrane::Schemas::Enum.new(*schemas) |
52 | 52 |
|
53 | | - expect(parser.deparse(enum_schema)).to eq "enum(String, Integer, Float)" |
| 53 | + expect(parser.deparse(enum_schema)).to eq 'enum(String, Integer, Float)' |
54 | 54 | end |
55 | 55 |
|
56 | | - it "should deparse the element schema of a Membrane::Schemas::List schema" do |
| 56 | + it 'deparses the element schema of a Membrane::Schemas::List schema' do |
57 | 57 | key_schema = Membrane::Schemas::Class.new(String) |
58 | 58 | val_schema = Membrane::Schemas::Class.new(Integer) |
59 | 59 | item_schema = Membrane::Schemas::Dictionary.new(key_schema, val_schema) |
60 | 60 |
|
61 | 61 | list_schema = Membrane::Schemas::List.new(item_schema) |
62 | 62 |
|
63 | | - expect(parser.deparse(list_schema)).to eq "[dict(String, Integer)]" |
| 63 | + expect(parser.deparse(list_schema)).to eq '[dict(String, Integer)]' |
64 | 64 | end |
65 | 65 |
|
66 | | - it "should deparse elem schemas of a Membrane::Schemas::Record schema" do |
| 66 | + it 'deparses elem schemas of a Membrane::Schemas::Record schema' do |
67 | 67 | str_schema = Membrane::Schemas::Class.new(String) |
68 | 68 | int_schema = Membrane::Schemas::Class.new(Integer) |
69 | 69 | dict_schema = Membrane::Schemas::Dictionary.new(str_schema, int_schema) |
70 | 70 |
|
71 | 71 | int_rec_schema = Membrane::Schemas::Record.new({ |
72 | | - :str => str_schema, |
73 | | - :dict => dict_schema |
74 | | - }) |
| 72 | + str: str_schema, |
| 73 | + dict: dict_schema |
| 74 | + }) |
75 | 75 | rec_schema = Membrane::Schemas::Record.new({ |
76 | | - "str" => str_schema, |
77 | | - "rec" => int_rec_schema, |
78 | | - "int" => int_schema |
79 | | - }) |
80 | | - |
81 | | - exp_deparse =<<EOT |
82 | | -{ |
83 | | - "str" => String, |
84 | | - "rec" => { |
85 | | - :str => String, |
86 | | - :dict => dict(String, Integer), |
87 | | - }, |
88 | | - "int" => Integer, |
89 | | -} |
90 | | -EOT |
| 76 | + 'str' => str_schema, |
| 77 | + 'rec' => int_rec_schema, |
| 78 | + 'int' => int_schema |
| 79 | + }) |
| 80 | + |
| 81 | + exp_deparse = <<~EXPECTED_DEPARSE |
| 82 | + { |
| 83 | + "str" => String, |
| 84 | + "rec" => { |
| 85 | + :str => String, |
| 86 | + :dict => dict(String, Integer), |
| 87 | + }, |
| 88 | + "int" => Integer, |
| 89 | + } |
| 90 | + EXPECTED_DEPARSE |
91 | 91 | expect(parser.deparse(rec_schema)).to eq exp_deparse.strip |
92 | 92 | end |
93 | 93 |
|
94 | | - it "should call inspect on regexps for Membrane::Schemas::Regexp" do |
| 94 | + it 'calls inspect on regexps for Membrane::Schemas::Regexp' do |
95 | 95 | regexp_val = /test/ |
96 | 96 | schema = Membrane::Schemas::Regexp.new(regexp_val) |
97 | 97 |
|
98 | 98 | # Just verify it returns the regexp inspected |
99 | 99 | expect(parser.deparse(schema)).to eq regexp_val.inspect |
100 | 100 | end |
101 | 101 |
|
102 | | - it "should deparse the element schemas of a Membrane::Schemas::Tuple schema" do |
| 102 | + it 'deparses the element schemas of a Membrane::Schemas::Tuple schema' do |
103 | 103 | schemas = [String, Integer].map { |c| Membrane::Schemas::Class.new(c) } |
104 | | - schemas << Membrane::Schemas::Value.new("test") |
| 104 | + schemas << Membrane::Schemas::Value.new('test') |
105 | 105 |
|
106 | 106 | enum_schema = Membrane::Schemas::Tuple.new(*schemas) |
107 | 107 |
|
108 | 108 | expect(parser.deparse(enum_schema)).to eq 'tuple(String, Integer, "test")' |
109 | 109 | end |
110 | 110 |
|
111 | | - it "should call inspect on a Membrane::Schemas::Base schema" do |
| 111 | + it 'calls inspect on a Membrane::Schemas::Base schema' do |
112 | 112 | schema = Membrane::Schemas::Base.new |
113 | 113 | expect(parser.deparse(schema)).to eq schema.inspect |
114 | 114 | end |
115 | 115 |
|
116 | | - it "should raise an error if given a non-schema" do |
| 116 | + it 'raises an error if given a non-schema' do |
117 | 117 | expect do |
118 | 118 | parser.deparse({}) |
119 | 119 | end.to raise_error(ArgumentError, /Expected instance/) |
120 | 120 | end |
121 | 121 | end |
122 | 122 |
|
123 | | - describe "#parse" do |
124 | | - it "should leave instances derived from Membrane::Schemas::Base unchanged" do |
| 123 | + describe '#parse' do |
| 124 | + it 'leaves instances derived from Membrane::Schemas::Base unchanged' do |
125 | 125 | old_schema = Membrane::Schemas::Any.new |
126 | 126 |
|
127 | 127 | expect(parser.parse { old_schema }).to eq old_schema |
128 | 128 | end |
129 | 129 |
|
130 | | - it "should translate 'any' into Membrane::Schemas::Any" do |
| 130 | + it "translates 'any' into Membrane::Schemas::Any" do |
131 | 131 | schema = parser.parse { any } |
132 | 132 |
|
133 | 133 | expect(schema.class).to eq Membrane::Schemas::Any |
134 | 134 | end |
135 | 135 |
|
136 | | - it "should translate 'bool' into Membrane::Schemas::Bool" do |
| 136 | + it "translates 'bool' into Membrane::Schemas::Bool" do |
137 | 137 | schema = parser.parse { bool } |
138 | 138 |
|
139 | 139 | expect(schema.class).to eq Membrane::Schemas::Bool |
140 | 140 | end |
141 | 141 |
|
142 | | - it "should translate 'enum' into Membrane::Schemas::Enum" do |
| 142 | + it "translates 'enum' into Membrane::Schemas::Enum" do |
143 | 143 | schema = parser.parse { enum(bool, any) } |
144 | 144 |
|
145 | 145 | expect(schema.class).to eq Membrane::Schemas::Enum |
146 | 146 |
|
147 | 147 | expect(schema.elem_schemas.length).to eq 2 |
148 | 148 |
|
149 | | - elem_schema_classes = schema.elem_schemas.map { |es| es.class } |
| 149 | + elem_schema_classes = schema.elem_schemas.map(&:class) |
150 | 150 |
|
151 | 151 | expected_classes = [Membrane::Schemas::Bool, Membrane::Schemas::Any] |
152 | 152 | expect(elem_schema_classes).to eq expected_classes |
153 | 153 | end |
154 | 154 |
|
155 | | - it "should translate 'dict' into Membrane::Schemas::Dictionary" do |
| 155 | + it "translates 'dict' into Membrane::Schemas::Dictionary" do |
156 | 156 | schema = parser.parse { dict(String, Integer) } |
157 | 157 |
|
158 | 158 | expect(schema.class).to eq Membrane::Schemas::Dictionary |
|
164 | 164 | expect(schema.value_schema.klass).to eq Integer |
165 | 165 | end |
166 | 166 |
|
167 | | - it "should translate 'tuple' into Membrane::Schemas::Tuple" do |
| 167 | + it "translates 'tuple' into Membrane::Schemas::Tuple" do |
168 | 168 | schema = parser.parse { tuple(String, any, Integer) } |
169 | 169 |
|
170 | 170 | expect(schema.class).to eq Membrane::Schemas::Tuple |
171 | 171 |
|
172 | 172 | expect(schema.elem_schemas[0].class).to eq Membrane::Schemas::Class |
173 | 173 | expect(schema.elem_schemas[0].klass).to eq String |
174 | 174 |
|
175 | | - schema.elem_schemas[1].class == Membrane::Schemas::Any |
| 175 | + schema.elem_schemas[1].class |
176 | 176 |
|
177 | 177 | expect(schema.elem_schemas[2].class).to eq Membrane::Schemas::Class |
178 | 178 | expect(schema.elem_schemas[2].klass).to eq Integer |
179 | 179 | end |
180 | 180 |
|
181 | | - it "should translate classes into Membrane::Schemas::Class" do |
| 181 | + it 'translates classes into Membrane::Schemas::Class' do |
182 | 182 | schema = parser.parse { String } |
183 | 183 |
|
184 | 184 | expect(schema.class).to eq Membrane::Schemas::Class |
185 | 185 |
|
186 | 186 | expect(schema.klass).to eq String |
187 | 187 | end |
188 | 188 |
|
189 | | - it "should translate regexps into Membrane::Schemas::Regexp" do |
| 189 | + it 'translates regexps into Membrane::Schemas::Regexp' do |
190 | 190 | regexp = /foo/ |
191 | 191 |
|
192 | 192 | schema = parser.parse { regexp } |
|
196 | 196 | expect(schema.regexp).to eq regexp |
197 | 197 | end |
198 | 198 |
|
199 | | - it "should fall back to Membrane::Schemas::Value" do |
| 199 | + it 'falls back to Membrane::Schemas::Value' do |
200 | 200 | schema = parser.parse { 5 } |
201 | 201 |
|
202 | 202 | expect(schema.class).to eq Membrane::Schemas::Value |
203 | 203 | expect(schema.value).to eq 5 |
204 | 204 | end |
205 | 205 |
|
206 | | - describe "when parsing a list" do |
207 | | - it "should raise an error when no element schema is supplied" do |
| 206 | + describe 'when parsing a list' do |
| 207 | + it 'raises an error when no element schema is supplied' do |
208 | 208 | expect do |
209 | 209 | parser.parse { [] } |
210 | 210 | end.to raise_error(ArgumentError, /must supply/) |
211 | 211 | end |
212 | 212 |
|
213 | | - it "should raise an error when supplied > 1 element schema" do |
| 213 | + it 'raises an error when supplied > 1 element schema' do |
214 | 214 | expect do |
215 | 215 | parser.parse { [String, String] } |
216 | 216 | end.to raise_error(ArgumentError, /single schema/) |
217 | 217 | end |
218 | 218 |
|
219 | | - it "should parse '[<expr>]' into Membrane::Schemas::List" do |
| 219 | + it "parses '[<expr>]' into Membrane::Schemas::List" do |
220 | 220 | schema = parser.parse { [String] } |
221 | 221 |
|
222 | 222 | expect(schema.class).to eq Membrane::Schemas::List |
|
226 | 226 | end |
227 | 227 | end |
228 | 228 |
|
229 | | - describe "when parsing a record" do |
230 | | - it "should raise an error if the record is empty" do |
| 229 | + describe 'when parsing a record' do |
| 230 | + it 'raises an error if the record is empty' do |
231 | 231 | expect do |
232 | 232 | parser.parse { {} } |
233 | 233 | end.to raise_error(ArgumentError, /must supply/) |
234 | 234 | end |
235 | 235 |
|
236 | | - it "should parse '{ <key> => <schema> }' into Membrane::Schemas::Record" do |
| 236 | + it "parses '{ <key> => <schema> }' into Membrane::Schemas::Record" do |
237 | 237 | schema = parser.parse do |
238 | | - { "string" => String, |
239 | | - "ints" => [Integer], |
240 | | - } |
| 238 | + { 'string' => String, |
| 239 | + 'ints' => [Integer] } |
241 | 240 | end |
242 | 241 |
|
243 | 242 | expect(schema.class).to eq Membrane::Schemas::Record |
244 | 243 |
|
245 | | - str_schema = schema.schemas["string"] |
| 244 | + str_schema = schema.schemas['string'] |
246 | 245 | expect(str_schema.class).to eq Membrane::Schemas::Class |
247 | 246 | expect(str_schema.klass).to eq String |
248 | 247 |
|
249 | | - ints_schema = schema.schemas["ints"] |
| 248 | + ints_schema = schema.schemas['ints'] |
250 | 249 | expect(ints_schema.class).to eq Membrane::Schemas::List |
251 | 250 | expect(ints_schema.elem_schema.class).to eq Membrane::Schemas::Class |
252 | 251 | expect(ints_schema.elem_schema.klass).to eq Integer |
253 | 252 | end |
254 | 253 |
|
255 | | - it "should handle keys marked with 'optional()'" do |
256 | | - schema = parser.parse { { optional("test") => Integer } } |
| 254 | + it "handles keys marked with 'optional()'" do |
| 255 | + schema = parser.parse { { optional('test') => Integer } } |
257 | 256 |
|
258 | 257 | expect(schema.class).to eq Membrane::Schemas::Record |
259 | | - expect(schema.optional_keys.to_a).to eq ["test"] |
| 258 | + expect(schema.optional_keys.to_a).to eq ['test'] |
260 | 259 | end |
261 | 260 | end |
262 | 261 | end |
|
0 commit comments