@@ -46,6 +46,7 @@ func TestFileServer(t *testing.T) {
4646 require .Equal (t , "bar" , string (body ))
4747}
4848
49+ // addExtension adds the provided test extension to the provided directory..
4950func addExtension (t * testing.T , ext testutil.Extension , extdir , version string ) * storage.VSIXManifest {
5051 dir := filepath .Join (extdir , ext .Publisher , ext .Name , version )
5152 err := os .MkdirAll (dir , 0o755 )
@@ -512,3 +513,117 @@ func TestAddExtension(t *testing.T) {
512513 }
513514 })
514515}
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