1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
|
// Copyright 2015 Canonical Ltd.
// Licensed under the LGPLv3, see LICENCE file for details.
package shell_test
import (
"runtime"
"github.com/juju/errors"
"github.com/juju/testing"
jc "github.com/juju/testing/checkers"
"github.com/juju/utils"
gc "gopkg.in/check.v1"
"github.com/juju/utils/shell"
)
type rendererSuite struct {
testing.IsolationSuite
unix *shell.BashRenderer
windows *shell.PowershellRenderer
}
var _ = gc.Suite(&rendererSuite{})
func (s *rendererSuite) SetUpTest(c *gc.C) {
s.IsolationSuite.SetUpTest(c)
s.unix = &shell.BashRenderer{}
s.windows = &shell.PowershellRenderer{}
}
func (s rendererSuite) checkRenderer(c *gc.C, renderer shell.Renderer, expected string) {
switch expected {
case "powershell":
c.Check(renderer, gc.FitsTypeOf, s.windows)
case "bash":
c.Check(renderer, gc.FitsTypeOf, s.unix)
default:
c.Errorf("unknown kind %q", expected)
}
}
func (s rendererSuite) TestNewRendererDefault(c *gc.C) {
// All possible values of runtime.GOOS should be supported.
renderer, err := shell.NewRenderer("")
c.Assert(err, jc.ErrorIsNil)
switch runtime.GOOS {
case "windows":
s.checkRenderer(c, renderer, "powershell")
default:
s.checkRenderer(c, renderer, "bash")
}
}
func (s rendererSuite) TestNewRendererGOOS(c *gc.C) {
// All possible values of runtime.GOOS should be supported.
renderer, err := shell.NewRenderer(runtime.GOOS)
c.Assert(err, jc.ErrorIsNil)
switch runtime.GOOS {
case "windows":
s.checkRenderer(c, renderer, "powershell")
default:
s.checkRenderer(c, renderer, "bash")
}
}
func (s rendererSuite) TestNewRendererWindows(c *gc.C) {
renderer, err := shell.NewRenderer("windows")
c.Assert(err, jc.ErrorIsNil)
s.checkRenderer(c, renderer, "powershell")
}
func (s rendererSuite) TestNewRendererUnix(c *gc.C) {
for _, os := range utils.OSUnix {
c.Logf("trying %q", os)
renderer, err := shell.NewRenderer(os)
c.Assert(err, jc.ErrorIsNil)
s.checkRenderer(c, renderer, "bash")
}
}
func (s rendererSuite) TestNewRendererDistros(c *gc.C) {
distros := []string{"ubuntu"}
for _, distro := range distros {
c.Logf("trying %q", distro)
renderer, err := shell.NewRenderer(distro)
c.Assert(err, jc.ErrorIsNil)
s.checkRenderer(c, renderer, "bash")
}
}
func (s rendererSuite) TestNewRendererUnknown(c *gc.C) {
_, err := shell.NewRenderer("<unknown OS>")
c.Check(err, jc.Satisfies, errors.IsNotFound)
}
|