@@ -310,3 +310,122 @@ func TestBoardDetailsListProgrammersFlag(t *testing.T) {
310
310
require .Contains (t , lines , "atmel_ice Atmel-ICE" )
311
311
require .Contains (t , lines , "sam_ice Atmel SAM-ICE" )
312
312
}
313
+
314
+ func TestBoardSearch (t * testing.T ) {
315
+ env , cli := integrationtest .CreateArduinoCLIWithEnvironment (t )
316
+ defer env .CleanUp ()
317
+
318
+ _ , _ , err := cli .Run ("update" )
319
+ require .NoError (t , err )
320
+
321
+ stdout , _ , err := cli .Run ("board" , "search" , "--format" , "json" )
322
+ require .NoError (t , err )
323
+ // Verifies boards are returned
324
+ requirejson .NotEmpty (t , stdout )
325
+ // Verifies no board has FQBN set since no platform is installed
326
+ requirejson .Query (t , stdout , "[ .[] | select(.fqbn) ] | length" , "0" )
327
+ requirejson .Contains (t , stdout , `[
328
+ {"name": "Arduino Uno"},
329
+ {"name": "Arduino Yún"},
330
+ {"name": "Arduino Zero"},
331
+ {"name": "Arduino Nano 33 BLE"},
332
+ {"name": "Arduino Portenta H7"}
333
+ ]` )
334
+
335
+ // Search in non installed boards
336
+ stdout , _ , err = cli .Run ("board" , "search" , "--format" , "json" , "nano" , "33" )
337
+ require .NoError (t , err )
338
+ // Verifies boards are returned
339
+ requirejson .NotEmpty (t , stdout )
340
+ // Verifies no board has FQBN set since no platform is installed
341
+ requirejson .Query (t , stdout , "[ .[] | select(.fqbn) ] | length" , "0" )
342
+ requirejson .Contains (t , stdout , `[
343
+ {"name": "Arduino Nano 33 BLE"},
344
+ {"name": "Arduino Nano 33 IoT"}
345
+ ]` )
346
+
347
+ // Install a platform from index
348
+ _ , _ , err = cli .Run ("core" , "install" , "arduino:avr@1.8.3" )
349
+ require .NoError (t , err )
350
+
351
+ stdout , _ , err = cli .Run ("board" , "search" , "--format" , "json" )
352
+ require .NoError (t , err )
353
+ requirejson .NotEmpty (t , stdout )
354
+ // Verifies some FQBNs are now returned after installing a platform
355
+ requirejson .Query (t , stdout , "[ .[] | select(.fqbn) ] | length" , "26" )
356
+ requirejson .Contains (t , stdout , `[
357
+ {
358
+ "name": "Arduino Yún",
359
+ "fqbn": "arduino:avr:yun"
360
+ },
361
+ {
362
+ "name": "Arduino Uno",
363
+ "fqbn": "arduino:avr:uno"
364
+ }
365
+ ]` )
366
+
367
+ stdout , _ , err = cli .Run ("board" , "search" , "--format" , "json" , "arduino" , "yun" )
368
+ require .NoError (t , err )
369
+ requirejson .NotEmpty (t , stdout )
370
+ requirejson .Contains (t , stdout , `[
371
+ {
372
+ "name": "Arduino Yún",
373
+ "fqbn": "arduino:avr:yun"
374
+ }
375
+ ]` )
376
+
377
+ // Manually installs a core in sketchbooks hardware folder
378
+ gitUrl := "https://github.com/arduino/ArduinoCore-samd.git"
379
+ repoDir := cli .SketchbookDir ().Join ("hardware" , "arduino-beta-development" , "samd" )
380
+ _ , err = git .PlainClone (repoDir .String (), false , & git.CloneOptions {
381
+ URL : gitUrl ,
382
+ ReferenceName : plumbing .NewTagReferenceName ("1.8.11" ),
383
+ })
384
+ require .NoError (t , err )
385
+
386
+ stdout , _ , err = cli .Run ("board" , "search" , "--format" , "json" )
387
+ require .NoError (t , err )
388
+ requirejson .NotEmpty (t , stdout )
389
+ // Verifies some FQBNs are now returned after installing a platform
390
+ requirejson .Query (t , stdout , "[ .[] | select(.fqbn) ] | length" , "43" )
391
+ requirejson .Contains (t , stdout , `[
392
+ {
393
+ "name": "Arduino Uno",
394
+ "fqbn": "arduino:avr:uno"
395
+ },
396
+ {
397
+ "name": "Arduino Yún",
398
+ "fqbn": "arduino:avr:yun"
399
+ },
400
+ {
401
+ "name": "Arduino MKR WiFi 1010",
402
+ "fqbn": "arduino-beta-development:samd:mkrwifi1010"
403
+ },
404
+ {
405
+ "name": "Arduino MKR1000",
406
+ "fqbn": "arduino-beta-development:samd:mkr1000"
407
+ },
408
+ {
409
+ "name": "Arduino MKRZERO",
410
+ "fqbn": "arduino-beta-development:samd:mkrzero"
411
+ },
412
+ {
413
+ "name": "Arduino NANO 33 IoT",
414
+ "fqbn": "arduino-beta-development:samd:nano_33_iot"
415
+ },
416
+ {
417
+ "fqbn": "arduino-beta-development:samd:arduino_zero_native"
418
+ }
419
+ ]` )
420
+
421
+ stdout , _ , err = cli .Run ("board" , "search" , "--format" , "json" , "mkr1000" )
422
+ require .NoError (t , err )
423
+ requirejson .NotEmpty (t , stdout )
424
+ // Verifies some FQBNs are now returned after installing a platform
425
+ requirejson .Contains (t , stdout , `[
426
+ {
427
+ "name": "Arduino MKR1000",
428
+ "fqbn": "arduino-beta-development:samd:mkr1000"
429
+ }
430
+ ]` )
431
+ }
0 commit comments