diff --git a/table.go b/table.go index ef69b5c..2f9adc8 100644 --- a/table.go +++ b/table.go @@ -9,6 +9,7 @@ type Table interface { On(string, interface{}) error Trigger(string, ...interface{}) error Off(string, interface{}) + Destroy(string) error } type table struct { @@ -58,4 +59,12 @@ func (t *table) Off(name string, f interface{}) { e.Off(f) } +func (t *table) Destroy(name string) error { + if _, ok := t.events[name]; !ok { + return fmt.Errorf("%s event has not been defined yet.", name) + } + delete(t.events, name) + return nil +} + var _ Table = &table{} diff --git a/table_test.go b/table_test.go index c5d51fe..b419ba5 100644 --- a/table_test.go +++ b/table_test.go @@ -50,3 +50,27 @@ func TestTableOff(t *testing.T) { t.Errorf("i expected 1, but got %d", i) } } + +func TestTableDestroy(t *testing.T) { + ta := goevent.NewTable() + i := 0 + ta.On("foo", func(j int) { i += j }) + + ta.Trigger("foo", 1) + err := ta.Destroy("foo") + if err != nil { + t.Error(err) + } + err = ta.Trigger("foo", 1) + if err == nil { + t.Errorf("should destroy event. but not destroy.") + } + if i != 1 { + t.Errorf("i expected 1, but got %d", i) + } + + err = ta.Destroy("foo") + if err == nil { + t.Errorf("should return error when event has not been defined yet. but got nil") + } +}