Skip to content

Commit cc2887c

Browse files
committed
Detect invalid upload.<protocol_name>.x properties
Pluggable discovery brings support for variants of the upload properties for each protocol. In addition to the previous property names, the same rules must now be applied to the properties with an arbitrary protocol name inserted.
1 parent c7182c1 commit cc2887c

File tree

6 files changed

+168
-128
lines changed

6 files changed

+168
-128
lines changed

Diff for: etc/schemas/arduino-boards-txt-definitions-schema.json

+60-60
Original file line numberDiff line numberDiff line change
@@ -145,28 +145,28 @@
145145
},
146146
"serial.disableRTS": {
147147
"$ref": "#/definitions/propertiesObjects/boardIDSerialDisableRTS/permissive/object"
148+
}
149+
}
150+
},
151+
{
152+
"patternProperties": {
153+
"^upload.tool(\\..+)?$": {
154+
"$ref": "#/definitions/propertiesObjects/boardIDUploadTool/permissive/object"
148155
},
149156
"upload.maximum_size": {
150157
"$ref": "#/definitions/propertiesObjects/boardIDUploadMaximumSize/permissive/object"
151158
},
152159
"upload.maximum_data_size": {
153160
"$ref": "#/definitions/propertiesObjects/boardIDUploadMaximumDataSize/permissive/object"
154161
},
155-
"upload.protocol": {
162+
"upload(\\..+)?\\.protocol": {
156163
"$ref": "#/definitions/propertiesObjects/boardIDUploadProtocol/permissive/object"
157164
},
158-
"upload.use_1200bps_touch": {
165+
"upload(\\..+)?\\.use_1200bps_touch": {
159166
"$ref": "#/definitions/propertiesObjects/boardIDUploadUse1200bpsTouch/permissive/object"
160167
},
161-
"upload.wait_for_upload_port": {
168+
"upload(\\..+)?\\.wait_for_upload_port": {
162169
"$ref": "#/definitions/propertiesObjects/boardIDUploadWaitForUploadPort/permissive/object"
163-
}
164-
}
165-
},
166-
{
167-
"patternProperties": {
168-
"^upload.tool(\\..+)?$": {
169-
"$ref": "#/definitions/propertiesObjects/boardIDUploadTool/permissive/object"
170170
},
171171
"^[vp]id\\.[0-9]+$": {
172172
"$ref": "#/definitions/propertiesObjects/boardIDXidN/permissive/object"
@@ -210,28 +210,28 @@
210210
},
211211
"serial.disableRTS": {
212212
"$ref": "#/definitions/propertiesObjects/boardIDSerialDisableRTS/specification/object"
213+
}
214+
}
215+
},
216+
{
217+
"patternProperties": {
218+
"^upload.tool(\\..+)?$": {
219+
"$ref": "#/definitions/propertiesObjects/boardIDUploadTool/specification/object"
213220
},
214221
"upload.maximum_size": {
215222
"$ref": "#/definitions/propertiesObjects/boardIDUploadMaximumSize/specification/object"
216223
},
217224
"upload.maximum_data_size": {
218225
"$ref": "#/definitions/propertiesObjects/boardIDUploadMaximumDataSize/specification/object"
219226
},
220-
"upload.protocol": {
227+
"upload(\\..+)?\\.protocol": {
221228
"$ref": "#/definitions/propertiesObjects/boardIDUploadProtocol/specification/object"
222229
},
223-
"upload.use_1200bps_touch": {
230+
"upload(\\..+)?\\.use_1200bps_touch": {
224231
"$ref": "#/definitions/propertiesObjects/boardIDUploadUse1200bpsTouch/specification/object"
225232
},
226-
"upload.wait_for_upload_port": {
233+
"upload(\\..+)?\\.wait_for_upload_port": {
227234
"$ref": "#/definitions/propertiesObjects/boardIDUploadWaitForUploadPort/specification/object"
228-
}
229-
}
230-
},
231-
{
232-
"patternProperties": {
233-
"^upload.tool(\\..+)?$": {
234-
"$ref": "#/definitions/propertiesObjects/boardIDUploadTool/specification/object"
235235
},
236236
"^[vp]id\\.[0-9]+$": {
237237
"$ref": "#/definitions/propertiesObjects/boardIDXidN/specification/object"
@@ -275,28 +275,28 @@
275275
},
276276
"serial.disableRTS": {
277277
"$ref": "#/definitions/propertiesObjects/boardIDSerialDisableRTS/strict/object"
278+
}
279+
}
280+
},
281+
{
282+
"patternProperties": {
283+
"^upload.tool(\\..+)?$": {
284+
"$ref": "#/definitions/propertiesObjects/boardIDUploadTool/strict/object"
278285
},
279286
"upload.maximum_size": {
280287
"$ref": "#/definitions/propertiesObjects/boardIDUploadMaximumSize/strict/object"
281288
},
282289
"upload.maximum_data_size": {
283290
"$ref": "#/definitions/propertiesObjects/boardIDUploadMaximumDataSize/strict/object"
284291
},
285-
"upload.protocol": {
292+
"upload(\\..+)?\\.protocol": {
286293
"$ref": "#/definitions/propertiesObjects/boardIDUploadProtocol/strict/object"
287294
},
288-
"upload.use_1200bps_touch": {
295+
"upload(\\..+)?\\.use_1200bps_touch": {
289296
"$ref": "#/definitions/propertiesObjects/boardIDUploadUse1200bpsTouch/strict/object"
290297
},
291-
"upload.wait_for_upload_port": {
298+
"upload(\\..+)?\\.wait_for_upload_port": {
292299
"$ref": "#/definitions/propertiesObjects/boardIDUploadWaitForUploadPort/strict/object"
293-
}
294-
}
295-
},
296-
{
297-
"patternProperties": {
298-
"^upload.tool(\\..+)?$": {
299-
"$ref": "#/definitions/propertiesObjects/boardIDUploadTool/strict/object"
300300
},
301301
"^[vp]id\\.[0-9]+$": {
302302
"$ref": "#/definitions/propertiesObjects/boardIDXidN/strict/object"
@@ -624,28 +624,28 @@
624624
},
625625
"serial.disableRTS": {
626626
"$ref": "#/definitions/propertiesObjects/boardIDSerialDisableRTS/permissive/object"
627+
}
628+
}
629+
},
630+
{
631+
"patternProperties": {
632+
"^upload.tool(\\..+)?$": {
633+
"$ref": "#/definitions/propertiesObjects/boardIDUploadTool/permissive/object"
627634
},
628635
"upload.maximum_size": {
629636
"$ref": "#/definitions/propertiesObjects/boardIDUploadMaximumSize/permissive/object"
630637
},
631638
"upload.maximum_data_size": {
632639
"$ref": "#/definitions/propertiesObjects/boardIDUploadMaximumDataSize/permissive/object"
633640
},
634-
"upload.protocol": {
641+
"upload(\\..+)?\\.protocol": {
635642
"$ref": "#/definitions/propertiesObjects/boardIDUploadProtocol/permissive/object"
636643
},
637-
"upload.use_1200bps_touch": {
644+
"upload(\\..+)?\\.use_1200bps_touch": {
638645
"$ref": "#/definitions/propertiesObjects/boardIDUploadUse1200bpsTouch/permissive/object"
639646
},
640-
"upload.wait_for_upload_port": {
647+
"upload(\\..+)?\\.wait_for_upload_port": {
641648
"$ref": "#/definitions/propertiesObjects/boardIDUploadWaitForUploadPort/permissive/object"
642-
}
643-
}
644-
},
645-
{
646-
"patternProperties": {
647-
"^upload.tool(\\..+)?$": {
648-
"$ref": "#/definitions/propertiesObjects/boardIDUploadTool/permissive/object"
649649
},
650650
"^[vp]id\\.[0-9]+$": {
651651
"$ref": "#/definitions/propertiesObjects/boardIDXidN/permissive/object"
@@ -677,28 +677,28 @@
677677
},
678678
"serial.disableRTS": {
679679
"$ref": "#/definitions/propertiesObjects/boardIDSerialDisableRTS/specification/object"
680+
}
681+
}
682+
},
683+
{
684+
"patternProperties": {
685+
"^upload.tool(\\..+)?$": {
686+
"$ref": "#/definitions/propertiesObjects/boardIDUploadTool/specification/object"
680687
},
681688
"upload.maximum_size": {
682689
"$ref": "#/definitions/propertiesObjects/boardIDUploadMaximumSize/specification/object"
683690
},
684691
"upload.maximum_data_size": {
685692
"$ref": "#/definitions/propertiesObjects/boardIDUploadMaximumDataSize/specification/object"
686693
},
687-
"upload.protocol": {
694+
"upload(\\..+)?\\.protocol": {
688695
"$ref": "#/definitions/propertiesObjects/boardIDUploadProtocol/specification/object"
689696
},
690-
"upload.use_1200bps_touch": {
697+
"upload(\\..+)?\\.use_1200bps_touch": {
691698
"$ref": "#/definitions/propertiesObjects/boardIDUploadUse1200bpsTouch/specification/object"
692699
},
693-
"upload.wait_for_upload_port": {
700+
"upload(\\..+)?\\.wait_for_upload_port": {
694701
"$ref": "#/definitions/propertiesObjects/boardIDUploadWaitForUploadPort/specification/object"
695-
}
696-
}
697-
},
698-
{
699-
"patternProperties": {
700-
"^upload.tool(\\..+)?$": {
701-
"$ref": "#/definitions/propertiesObjects/boardIDUploadTool/specification/object"
702702
},
703703
"^[vp]id\\.[0-9]+$": {
704704
"$ref": "#/definitions/propertiesObjects/boardIDXidN/specification/object"
@@ -730,28 +730,28 @@
730730
},
731731
"serial.disableRTS": {
732732
"$ref": "#/definitions/propertiesObjects/boardIDSerialDisableRTS/strict/object"
733+
}
734+
}
735+
},
736+
{
737+
"patternProperties": {
738+
"^upload.tool(\\..+)?$": {
739+
"$ref": "#/definitions/propertiesObjects/boardIDUploadTool/strict/object"
733740
},
734741
"upload.maximum_size": {
735742
"$ref": "#/definitions/propertiesObjects/boardIDUploadMaximumSize/strict/object"
736743
},
737744
"upload.maximum_data_size": {
738745
"$ref": "#/definitions/propertiesObjects/boardIDUploadMaximumDataSize/strict/object"
739746
},
740-
"upload.protocol": {
747+
"upload(\\..+)?\\.protocol": {
741748
"$ref": "#/definitions/propertiesObjects/boardIDUploadProtocol/strict/object"
742749
},
743-
"upload.use_1200bps_touch": {
750+
"upload(\\..+)?\\.use_1200bps_touch": {
744751
"$ref": "#/definitions/propertiesObjects/boardIDUploadUse1200bpsTouch/strict/object"
745752
},
746-
"upload.wait_for_upload_port": {
753+
"upload(\\..+)?\\.wait_for_upload_port": {
747754
"$ref": "#/definitions/propertiesObjects/boardIDUploadWaitForUploadPort/strict/object"
748-
}
749-
}
750-
},
751-
{
752-
"patternProperties": {
753-
"^upload.tool(\\..+)?$": {
754-
"$ref": "#/definitions/propertiesObjects/boardIDUploadTool/strict/object"
755755
},
756756
"^[vp]id\\.[0-9]+$": {
757757
"$ref": "#/definitions/propertiesObjects/boardIDXidN/strict/object"

Diff for: internal/project/platform/boardstxt/boardstxtschema_test.go

+40
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,16 @@ func TestEnum(t *testing.T) {
234234
{"nano.upload.use_1200bps_touch", "nano/upload\\.use_1200bps_touch", "foo", compliancelevel.Specification, assert.True},
235235
{"nano.upload.use_1200bps_touch", "nano/upload\\.use_1200bps_touch", "foo", compliancelevel.Strict, assert.True},
236236

237+
{"nano.upload.serial.use_1200bps_touch", "nano/upload\\.serial\\.use_1200bps_touch", "true", compliancelevel.Permissive, assert.False},
238+
{"nano.upload.serial.use_1200bps_touch", "nano/upload\\.serial\\.use_1200bps_touch", "true", compliancelevel.Specification, assert.False},
239+
{"nano.upload.serial.use_1200bps_touch", "nano/upload\\.serial\\.use_1200bps_touch", "true", compliancelevel.Strict, assert.False},
240+
{"nano.upload.serial.use_1200bps_touch", "nano/upload\\.serial\\.use_1200bps_touch", "false", compliancelevel.Permissive, assert.False},
241+
{"nano.upload.serial.use_1200bps_touch", "nano/upload\\.serial\\.use_1200bps_touch", "false", compliancelevel.Specification, assert.False},
242+
{"nano.upload.serial.use_1200bps_touch", "nano/upload\\.serial\\.use_1200bps_touch", "false", compliancelevel.Strict, assert.False},
243+
{"nano.upload.serial.use_1200bps_touch", "nano/upload\\.serial\\.use_1200bps_touch", "foo", compliancelevel.Permissive, assert.True},
244+
{"nano.upload.serial.use_1200bps_touch", "nano/upload\\.serial\\.use_1200bps_touch", "foo", compliancelevel.Specification, assert.True},
245+
{"nano.upload.serial.use_1200bps_touch", "nano/upload\\.serial\\.use_1200bps_touch", "foo", compliancelevel.Strict, assert.True},
246+
237247
{"nano.menu.bar.baz.upload.use_1200bps_touch", "nano/menu/bar/baz/upload\\.use_1200bps_touch", "true", compliancelevel.Permissive, assert.False},
238248
{"nano.menu.bar.baz.upload.use_1200bps_touch", "nano/menu/bar/baz/upload\\.use_1200bps_touch", "true", compliancelevel.Specification, assert.False},
239249
{"nano.menu.bar.baz.upload.use_1200bps_touch", "nano/menu/bar/baz/upload\\.use_1200bps_touch", "true", compliancelevel.Strict, assert.False},
@@ -244,6 +254,16 @@ func TestEnum(t *testing.T) {
244254
{"nano.menu.bar.baz.upload.use_1200bps_touch", "nano/menu/bar/baz/upload\\.use_1200bps_touch", "foo", compliancelevel.Specification, assert.True},
245255
{"nano.menu.bar.baz.upload.use_1200bps_touch", "nano/menu/bar/baz/upload\\.use_1200bps_touch", "foo", compliancelevel.Strict, assert.True},
246256

257+
{"nano.menu.bar.baz.upload.serial.use_1200bps_touch", "nano/menu/bar/baz/upload\\.serial\\.use_1200bps_touch", "true", compliancelevel.Permissive, assert.False},
258+
{"nano.menu.bar.baz.upload.serial.use_1200bps_touch", "nano/menu/bar/baz/upload\\.serial\\.use_1200bps_touch", "true", compliancelevel.Specification, assert.False},
259+
{"nano.menu.bar.baz.upload.serial.use_1200bps_touch", "nano/menu/bar/baz/upload\\.serial\\.use_1200bps_touch", "true", compliancelevel.Strict, assert.False},
260+
{"nano.menu.bar.baz.upload.serial.use_1200bps_touch", "nano/menu/bar/baz/upload\\.serial\\.use_1200bps_touch", "false", compliancelevel.Permissive, assert.False},
261+
{"nano.menu.bar.baz.upload.serial.use_1200bps_touch", "nano/menu/bar/baz/upload\\.serial\\.use_1200bps_touch", "false", compliancelevel.Specification, assert.False},
262+
{"nano.menu.bar.baz.upload.serial.use_1200bps_touch", "nano/menu/bar/baz/upload\\.serial\\.use_1200bps_touch", "false", compliancelevel.Strict, assert.False},
263+
{"nano.menu.bar.baz.upload.serial.use_1200bps_touch", "nano/menu/bar/baz/upload\\.serial\\.use_1200bps_touch", "foo", compliancelevel.Permissive, assert.True},
264+
{"nano.menu.bar.baz.upload.serial.use_1200bps_touch", "nano/menu/bar/baz/upload\\.serial\\.use_1200bps_touch", "foo", compliancelevel.Specification, assert.True},
265+
{"nano.menu.bar.baz.upload.serial.use_1200bps_touch", "nano/menu/bar/baz/upload\\.serial\\.use_1200bps_touch", "foo", compliancelevel.Strict, assert.True},
266+
247267
{"nano.upload.wait_for_upload_port", "nano/upload\\.wait_for_upload_port", "true", compliancelevel.Permissive, assert.False},
248268
{"nano.upload.wait_for_upload_port", "nano/upload\\.wait_for_upload_port", "true", compliancelevel.Specification, assert.False},
249269
{"nano.upload.wait_for_upload_port", "nano/upload\\.wait_for_upload_port", "true", compliancelevel.Strict, assert.False},
@@ -254,6 +274,16 @@ func TestEnum(t *testing.T) {
254274
{"nano.upload.wait_for_upload_port", "nano/upload\\.wait_for_upload_port", "foo", compliancelevel.Specification, assert.True},
255275
{"nano.upload.wait_for_upload_port", "nano/upload\\.wait_for_upload_port", "foo", compliancelevel.Strict, assert.True},
256276

277+
{"nano.upload.serial.wait_for_upload_port", "nano/upload\\.serial\\.wait_for_upload_port", "true", compliancelevel.Permissive, assert.False},
278+
{"nano.upload.serial.wait_for_upload_port", "nano/upload\\.serial\\.wait_for_upload_port", "true", compliancelevel.Specification, assert.False},
279+
{"nano.upload.serial.wait_for_upload_port", "nano/upload\\.serial\\.wait_for_upload_port", "true", compliancelevel.Strict, assert.False},
280+
{"nano.upload.serial.wait_for_upload_port", "nano/upload\\.serial\\.wait_for_upload_port", "false", compliancelevel.Permissive, assert.False},
281+
{"nano.upload.serial.wait_for_upload_port", "nano/upload\\.serial\\.wait_for_upload_port", "false", compliancelevel.Specification, assert.False},
282+
{"nano.upload.serial.wait_for_upload_port", "nano/upload\\.serial\\.wait_for_upload_port", "false", compliancelevel.Strict, assert.False},
283+
{"nano.upload.serial.wait_for_upload_port", "nano/upload\\.serial\\.wait_for_upload_port", "foo", compliancelevel.Permissive, assert.True},
284+
{"nano.upload.serial.wait_for_upload_port", "nano/upload\\.serial\\.wait_for_upload_port", "foo", compliancelevel.Specification, assert.True},
285+
{"nano.upload.serial.wait_for_upload_port", "nano/upload\\.serial\\.wait_for_upload_port", "foo", compliancelevel.Strict, assert.True},
286+
257287
{"nano.menu.bar.baz.upload.wait_for_upload_port", "nano/menu/bar/baz/upload\\.wait_for_upload_port", "true", compliancelevel.Permissive, assert.False},
258288
{"nano.menu.bar.baz.upload.wait_for_upload_port", "nano/menu/bar/baz/upload\\.wait_for_upload_port", "true", compliancelevel.Specification, assert.False},
259289
{"nano.menu.bar.baz.upload.wait_for_upload_port", "nano/menu/bar/baz/upload\\.wait_for_upload_port", "true", compliancelevel.Strict, assert.False},
@@ -263,6 +293,16 @@ func TestEnum(t *testing.T) {
263293
{"nano.menu.bar.baz.upload.wait_for_upload_port", "nano/menu/bar/baz/upload\\.wait_for_upload_port", "foo", compliancelevel.Permissive, assert.True},
264294
{"nano.menu.bar.baz.upload.wait_for_upload_port", "nano/menu/bar/baz/upload\\.wait_for_upload_port", "foo", compliancelevel.Specification, assert.True},
265295
{"nano.menu.bar.baz.upload.wait_for_upload_port", "nano/menu/bar/baz/upload\\.wait_for_upload_port", "foo", compliancelevel.Strict, assert.True},
296+
297+
{"nano.menu.bar.baz.upload.serial.wait_for_upload_port", "nano/menu/bar/baz/upload\\.serial\\.wait_for_upload_port", "true", compliancelevel.Permissive, assert.False},
298+
{"nano.menu.bar.baz.upload.serial.wait_for_upload_port", "nano/menu/bar/baz/upload\\.serial\\.wait_for_upload_port", "true", compliancelevel.Specification, assert.False},
299+
{"nano.menu.bar.baz.upload.serial.wait_for_upload_port", "nano/menu/bar/baz/upload\\.serial\\.wait_for_upload_port", "true", compliancelevel.Strict, assert.False},
300+
{"nano.menu.bar.baz.upload.serial.wait_for_upload_port", "nano/menu/bar/baz/upload\\.serial\\.wait_for_upload_port", "false", compliancelevel.Permissive, assert.False},
301+
{"nano.menu.bar.baz.upload.serial.wait_for_upload_port", "nano/menu/bar/baz/upload\\.serial\\.wait_for_upload_port", "false", compliancelevel.Specification, assert.False},
302+
{"nano.menu.bar.baz.upload.serial.wait_for_upload_port", "nano/menu/bar/baz/upload\\.serial\\.wait_for_upload_port", "false", compliancelevel.Strict, assert.False},
303+
{"nano.menu.bar.baz.upload.serial.wait_for_upload_port", "nano/menu/bar/baz/upload\\.serial\\.wait_for_upload_port", "foo", compliancelevel.Permissive, assert.True},
304+
{"nano.menu.bar.baz.upload.serial.wait_for_upload_port", "nano/menu/bar/baz/upload\\.serial\\.wait_for_upload_port", "foo", compliancelevel.Specification, assert.True},
305+
{"nano.menu.bar.baz.upload.serial.wait_for_upload_port", "nano/menu/bar/baz/upload\\.serial\\.wait_for_upload_port", "foo", compliancelevel.Strict, assert.True},
266306
}
267307

268308
for _, testTable := range testTables {

0 commit comments

Comments
 (0)