command_test.go 2.61 KB
Newer Older
1 2 3 4 5 6 7 8 9 10
package commands

import "testing"

func TestOptionValidation(t *testing.T) {
  cmd := Command{
    Options: []Option{
      Option{ []string{ "b", "beep" }, Int },
      Option{ []string{ "B", "boop" }, String },
    },
11
    f: func(req *Request, res *Response) {},
12 13 14 15
  }

  req := NewRequest()
  req.options["foo"] = 5
16 17
  res := cmd.Call(nil, req)
  if res.Error == nil {
18 19 20 21 22 23
    t.Error("Should have failed (unrecognized command)")
  }

  req = NewRequest()
  req.options["beep"] = 5
  req.options["b"] = 10
24 25
  res = cmd.Call(nil, req)
  if res.Error == nil {
26 27 28 29 30
    t.Error("Should have failed (duplicate options)")
  }

  req = NewRequest()
  req.options["beep"] = "foo"
31 32
  res = cmd.Call(nil, req)
  if res.Error == nil {
33 34 35 36 37
    t.Error("Should have failed (incorrect type)")
  }

  req = NewRequest()
  req.options["beep"] = 5
38 39
  res = cmd.Call(nil, req)
  if res.Error != nil {
40 41 42 43 44 45
    t.Error("Should have passed")
  }

  req = NewRequest()
  req.options["beep"] = 5
  req.options["boop"] = "test"
46 47
  res = cmd.Call(nil, req)
  if res.Error != nil {
48 49 50 51 52 53
    t.Error("Should have passed")
  }

  req = NewRequest()
  req.options["b"] = 5
  req.options["B"] = "test"
54 55
  res = cmd.Call(nil, req)
  if res.Error != nil {
56 57
    t.Error("Should have passed")
  }
58 59 60

  req = NewRequest()
  req.options["enc"] = "json"
61 62
  res = cmd.Call(nil, req)
  if res.Error != nil {
63 64
    t.Error("Should have passed")
  }
65
}
66 67 68 69 70 71 72

func TestRegistration(t *testing.T) {
  cmds := []*Command{
    &Command{
      Options: []Option{
        Option{ []string{ "beep" }, Int },
      },
73
      f: func(req *Request, res *Response) {},
74 75 76 77 78 79
    },

    &Command{
      Options: []Option{
        Option{ []string{ "boop" }, Int },
      },
80
      f: func(req *Request, res *Response) {},
81 82 83 84 85 86
    },

    &Command{
      Options: []Option{
        Option{ []string{ "boop" }, String },
      },
87
      f: func(req *Request, res *Response) {},
88 89 90 91 92 93
    },

    &Command{
      Options: []Option{
        Option{ []string{ "bop" }, String },
      },
94
      f: func(req *Request, res *Response) {},
95
    },
96 97 98 99 100

    &Command{
      Options: []Option{
        Option{ []string{ "enc" }, String },
      },
101
      f: func(req *Request, res *Response) {},
102
    },
103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118
  }

  err := cmds[0].Register("foo", cmds[1])
  if err != nil {
    t.Error("Should have passed")
  }

  err = cmds[0].Register("bar", cmds[2])
  if err == nil {
    t.Error("Should have failed (option name collision)")
  }

  err = cmds[0].Register("foo", cmds[3])
  if err == nil {
    t.Error("Should have failed (subcommand name collision)")
  }
119 120 121 122 123

  err = cmds[0].Register("baz", cmds[4])
  if err == nil {
    t.Error("Should have failed (option name collision with global options)")
  }
124
}