@@ -46,6 +46,7 @@ func TestFileServer(t *testing.T) {
46
46
require .Equal (t , "bar" , string (body ))
47
47
}
48
48
49
+ // addExtension adds the provided test extension to the provided directory..
49
50
func addExtension (t * testing.T , ext testutil.Extension , extdir , version string ) * storage.VSIXManifest {
50
51
dir := filepath .Join (extdir , ext .Publisher , ext .Name , version )
51
52
err := os .MkdirAll (dir , 0o755 )
@@ -512,3 +513,117 @@ func TestAddExtension(t *testing.T) {
512
513
}
513
514
})
514
515
}
516
+
517
+ func TestRemoveExtension (t * testing.T ) {
518
+ t .Parallel ()
519
+
520
+ tests := []struct {
521
+ all bool
522
+ error string
523
+ expected []string
524
+ name string
525
+ remove string
526
+ }{
527
+ {
528
+ name : "OK" ,
529
+ expected : []string {"a" },
530
+ remove : fmt .Sprintf ("%s.%s-a" , testutil .Extensions [0 ].Publisher , testutil .Extensions [0 ].Name ),
531
+ },
532
+ {
533
+ name : "NoVersionMatch" ,
534
+ error : "does not exist" ,
535
+ remove : fmt .Sprintf ("%s.%s-d" , testutil .Extensions [0 ].Publisher , testutil .Extensions [0 ].Name ),
536
+ },
537
+ {
538
+ name : "NoPublisherMatch" ,
539
+ error : "does not exist" ,
540
+ remove : "test-test.test-test" ,
541
+ },
542
+ {
543
+ name : "NoExtensionMatch" ,
544
+ error : "does not exist" ,
545
+ remove : "foo.test-test" ,
546
+ },
547
+ {
548
+ name : "MultipleDots" ,
549
+ error : "does not exist" ,
550
+ remove : "foo.bar-test.test" ,
551
+ },
552
+ {
553
+ name : "EmptyID" ,
554
+ error : "invalid ID" ,
555
+ remove : "" ,
556
+ },
557
+ {
558
+ name : "MissingPublisher" ,
559
+ error : "invalid ID" ,
560
+ remove : ".qux-bar" ,
561
+ },
562
+ {
563
+ name : "MissingExtension" ,
564
+ error : "invalid ID" ,
565
+ remove : "foo.-baz" ,
566
+ },
567
+ {
568
+ name : "MissingExtensionAndVersion" ,
569
+ error : "invalid ID" ,
570
+ remove : "foo." ,
571
+ },
572
+ {
573
+ name : "MissingPublisherAndVersion" ,
574
+ error : "invalid ID" ,
575
+ remove : ".qux" ,
576
+ },
577
+ {
578
+ name : "InvalidID" ,
579
+ error : "invalid ID" ,
580
+ remove : "publisher-version" ,
581
+ },
582
+ {
583
+ name : "MissingVersion" ,
584
+ error : "target a specific version or pass --all" ,
585
+ remove : fmt .Sprintf ("%s.%s" , testutil .Extensions [0 ].Publisher , testutil .Extensions [0 ].Name ),
586
+ },
587
+ {
588
+ name : "All" ,
589
+ expected : []string {"a" , "b" , "c" },
590
+ all : true ,
591
+ remove : fmt .Sprintf ("%s.%s" , testutil .Extensions [0 ].Publisher , testutil .Extensions [0 ].Name ),
592
+ },
593
+ {
594
+ name : "AllWithVersion" ,
595
+ error : "cannot specify both" ,
596
+ all : true ,
597
+ remove : fmt .Sprintf ("%s.%s-a" , testutil .Extensions [0 ].Publisher , testutil .Extensions [0 ].Name ),
598
+ },
599
+ }
600
+
601
+ for _ , test := range tests {
602
+ test := test
603
+ t .Run (test .name , func (t * testing.T ) {
604
+ t .Parallel ()
605
+
606
+ extdir := t .TempDir ()
607
+ ext := testutil .Extensions [0 ]
608
+ addExtension (t , ext , extdir , "a" )
609
+ addExtension (t , ext , extdir , "b" )
610
+ addExtension (t , ext , extdir , "c" )
611
+
612
+ ext = testutil .Extensions [1 ]
613
+ addExtension (t , ext , extdir , "a" )
614
+ addExtension (t , ext , extdir , "b" )
615
+ addExtension (t , ext , extdir , "c" )
616
+
617
+ s := & storage.Local {ExtDir : extdir }
618
+
619
+ removed , err := s .RemoveExtension (context .Background (), test .remove , test .all )
620
+ if test .error != "" {
621
+ require .Error (t , err )
622
+ require .Regexp (t , test .error , err .Error ())
623
+ } else {
624
+ require .NoError (t , err )
625
+ }
626
+ require .ElementsMatch (t , test .expected , removed )
627
+ })
628
+ }
629
+ }
0 commit comments