@@ -117,12 +117,36 @@ tape.test("feature resolution inheritance file to message", function(test) {
117
117
test . end ( ) ;
118
118
} ) ;
119
119
120
- tape . test ( "feature resolution inheritance file to nested message " , function ( test ) {
120
+ tape . test ( "feature resolution inheritance message to field " , function ( test ) {
121
121
var rootEditionsOverriden = protobuf . parse ( `edition = "2023";
122
- option features.json_format = LEGACY_BEST_EFFORT;
123
- option features.(abc).d_e = deeply_nested_false;
122
+
123
+ message Message {
124
+ option features.json_format = LEGACY_BEST_EFFORT;
125
+ option features.(abc).d_e = deeply_nested_false;
126
+ string string_val = 1;
127
+ string string_repeated = 2 [features.enum_type = CLOSED];
128
+ }` ) . root . resolveAll ( ) ;
129
+
130
+ // Should flip enum_type from default setting, inherit from Message,
131
+ // and keep everything else
132
+ test . same ( rootEditionsOverriden . lookup ( "Message" ) . fields . stringRepeated . _features , {
133
+ enum_type : 'CLOSED' ,
134
+ field_presence : 'EXPLICIT' ,
135
+ json_format : 'LEGACY_BEST_EFFORT' ,
136
+ message_encoding : 'LENGTH_PREFIXED' ,
137
+ repeated_field_encoding : 'PACKED' ,
138
+ utf8_validation : 'VERIFY' ,
139
+ '(abc)' : { d_e : 'deeply_nested_false' }
140
+ } )
124
141
142
+ test . end ( ) ;
143
+ } ) ;
144
+
145
+ tape . test ( "feature resolution inheritance message to nested message" , function ( test ) {
146
+ var rootEditionsOverriden = protobuf . parse ( `edition = "2023";
125
147
message Message {
148
+ option features.json_format = LEGACY_BEST_EFFORT;
149
+ option features.(abc).d_e = deeply_nested_false;
126
150
string string_val = 1;
127
151
string string_repeated = 2 [features.enum_type = CLOSED];
128
152
@@ -180,21 +204,20 @@ tape.test("feature resolution inheritance file to enums and enum values", functi
180
204
test . end ( ) ;
181
205
} ) ;
182
206
183
- tape . test ( "feature resolution inheritance file to oneofs" , function ( test ) {
207
+ tape . test ( "feature resolution inheritance message to oneofs" , function ( test ) {
184
208
185
209
var rootEditionsOverriden = protobuf . parse ( `
186
210
edition = "2023";
187
- option features.json_format = LEGACY_BEST_EFFORT;
188
211
option features.(abc).d_e = deeply_nested_false;
189
212
message Message {
213
+ option features.json_format = LEGACY_BEST_EFFORT;
190
214
oneof SomeOneOf {
191
215
option features.json_format = ALLOW;
192
216
int32 a = 13;
193
217
string b = 14;
194
218
}
195
219
}` ) . root . resolveAll ( ) ;
196
220
197
- // console.log(rootEditionsOverriden.lookup("SomeOneOf")._features)
198
221
test . same ( rootEditionsOverriden . lookup ( "SomeOneOf" ) . _features , {
199
222
enum_type : 'OPEN' ,
200
223
field_presence : 'EXPLICIT' ,
@@ -208,20 +231,96 @@ tape.test("feature resolution inheritance file to oneofs", function(test) {
208
231
test . end ( ) ;
209
232
} ) ;
210
233
234
+ tape . test ( "feature resolution inheritance oneofs to field" , function ( test ) {
235
+ var rootEditionsOverriden = protobuf . parse ( `
236
+ edition = "2023";
237
+ option features.(abc).d_e = deeply_nested_false;
238
+ message Message {
239
+ option features.json_format = LEGACY_BEST_EFFORT;
240
+ oneof SomeOneOf {
241
+ option features.json_format = ALLOW;
242
+ int32 a = 13;
243
+ string b = 14;
244
+ }
245
+ }` ) . root . resolveAll ( ) ;
246
+
247
+ test . same ( rootEditionsOverriden . lookup ( "SomeOneOf" ) . fieldsArray . find ( x => x . name === 'b' ) . _features , {
248
+ enum_type : 'OPEN' ,
249
+ field_presence : 'EXPLICIT' ,
250
+ json_format : 'LEGACY_BEST_EFFORT' ,
251
+ message_encoding : 'LENGTH_PREFIXED' ,
252
+ repeated_field_encoding : 'PACKED' ,
253
+ utf8_validation : 'VERIFY' ,
254
+ '(abc)' : { d_e : 'deeply_nested_false' }
255
+ } )
256
+
257
+ test . end ( ) ;
258
+ } ) ;
259
+
211
260
tape . test ( "feature resolution inheritance file to extensions" , function ( test ) {
212
261
213
262
var rootEditionsOverriden = protobuf . parse ( `
214
263
edition = "2023";
215
264
option features.json_format = LEGACY_BEST_EFFORT;
216
265
option features.(abc).d_e = deeply_nested_false;
266
+
267
+ extend Message {
268
+ int32 bar = 10 [features.utf8_validation = NONE];
269
+ }
270
+ message Message {}` ) . root . resolveAll ( ) ;
271
+
272
+ test . same ( rootEditionsOverriden . lookup ( ".bar" ) . _features , {
273
+ enum_type : 'OPEN' ,
274
+ field_presence : 'EXPLICIT' ,
275
+ json_format : 'LEGACY_BEST_EFFORT' ,
276
+ message_encoding : 'LENGTH_PREFIXED' ,
277
+ repeated_field_encoding : 'PACKED' ,
278
+ utf8_validation : 'NONE' ,
279
+ '(abc)' : { d_e : 'deeply_nested_false' }
280
+ } )
281
+
282
+ test . end ( ) ;
283
+ } ) ;
284
+
285
+ tape . test ( "feature resolution inheritance message to extensions" , function ( test ) {
286
+
287
+ var rootEditionsOverriden = protobuf . parse ( `
288
+ edition = "2023";
289
+ option features.json_format = LEGACY_BEST_EFFORT;
290
+ option features.(abc).d_e = deeply_nested_false;
291
+
292
+ extend Message {
293
+ int32 bar = 10 [features.utf8_validation = NONE];
294
+ }
295
+ message Message {}` ) . root . resolveAll ( ) ;
296
+
297
+ test . same ( rootEditionsOverriden . lookup ( ".bar" ) . _features , {
298
+ enum_type : 'OPEN' ,
299
+ field_presence : 'EXPLICIT' ,
300
+ json_format : 'LEGACY_BEST_EFFORT' ,
301
+ message_encoding : 'LENGTH_PREFIXED' ,
302
+ repeated_field_encoding : 'PACKED' ,
303
+ utf8_validation : 'NONE' ,
304
+ '(abc)' : { d_e : 'deeply_nested_false' }
305
+ } )
306
+
307
+ test . end ( ) ;
308
+ } ) ;
309
+
310
+ tape . test ( "feature resolution inheritance message to enum" , function ( test ) {
311
+
312
+ var rootEditionsOverriden = protobuf . parse ( `edition = "2023";
313
+ option features.json_format = LEGACY_BEST_EFFORT;
314
+ option features.(abc).d_e = deeply_nested_false;
217
315
message Message {
218
- extensions 10 to 100;
219
- extend Message {
220
- int32 bar = 10 [features.utf8_validation = NONE];
316
+ option features.utf8_validation = NONE;
317
+ enum SomeEnum {
318
+ ONE = 1;
319
+ TWO = 2;
221
320
}
222
321
}` ) . root . resolveAll ( ) ;
223
322
224
- test . same ( rootEditionsOverriden . lookup ( "Message" ) . lookup ( ".Message.bar " ) . _features , {
323
+ test . same ( rootEditionsOverriden . lookup ( "Message" ) . lookup ( "SomeEnum " ) . _features , {
225
324
enum_type : 'OPEN' ,
226
325
field_presence : 'EXPLICIT' ,
227
326
json_format : 'LEGACY_BEST_EFFORT' ,
@@ -234,7 +333,7 @@ tape.test("feature resolution inheritance file to extensions", function(test) {
234
333
test . end ( ) ;
235
334
} ) ;
236
335
237
- tape . test ( "feature resolution inheritance file to top-level enum" , function ( test ) {
336
+ tape . test ( "feature resolution inheritance message to enum" , function ( test ) {
238
337
239
338
var rootEditionsOverriden = protobuf . parse ( `edition = "2023";
240
339
option features.json_format = LEGACY_BEST_EFFORT;
@@ -245,7 +344,6 @@ tape.test("feature resolution inheritance file to top-level enum", function(test
245
344
TWO = 2;
246
345
}` ) . root . resolveAll ( ) ;
247
346
248
- console . log ( rootEditionsOverriden . lookup ( "SomeEnum" ) . _features )
249
347
test . same ( rootEditionsOverriden . lookup ( "SomeEnum" ) . _features , {
250
348
enum_type : 'OPEN' ,
251
349
field_presence : 'EXPLICIT' ,
@@ -259,7 +357,7 @@ tape.test("feature resolution inheritance file to top-level enum", function(test
259
357
test . end ( ) ;
260
358
} ) ;
261
359
262
- tape . test ( "feature resolution inheritance file to service and method" , function ( test ) {
360
+ tape . test ( "feature resolution inheritance file to service and service to method" , function ( test ) {
263
361
var rootEditionsOverriden = protobuf . parse ( `edition = "2023";
264
362
option features.json_format = LEGACY_BEST_EFFORT;
265
363
option features.(abc).d_e = deeply_nested_false;
0 commit comments