diff --git a/i3status/entry.go b/i3status/entry.go new file mode 100644 index 0000000..bf27ad1 --- /dev/null +++ b/i3status/entry.go @@ -0,0 +1,19 @@ +package i3status + +import ( + "encoding/json" +) + +type Entry struct { + Name string `json:"name"` + Instance string `json:"instance"` + Button int `json:"button"` + X int `json:"x"` + Y int `json:"y"` +} + +func NewEntry(str string) *Entry { + var e Entry + json.Unmarshal([]byte(str), &e) + return &e +} diff --git a/i3status/on_off.go b/i3status/on_off.go new file mode 100644 index 0000000..4d9ee7e --- /dev/null +++ b/i3status/on_off.go @@ -0,0 +1,40 @@ +package i3status + +import ( + "fmt" + "strconv" + "time" +) + +type OnOffWidget struct { + BaseWidget + Input chan Entry +} + +func NewOnOffWidget(output chan Message, input chan Entry) *OnOffWidget { + instanceCount++ + w := OnOffWidget{ + BaseWidget{ + output, + 1000, + instanceCount, + }, + input, + } + return &w +} + +func (w *OnOffWidget) basicLoop() { + msg := NewMessage() + msg.Name = "Date" + msg.Color = "#ffffff" + msg.Instance = strconv.Itoa(w.Instance) + for { + msg.FullText = fmt.Sprintf("%s", time.Now()) + w.Output <- *msg + time.Sleep(w.Refresh * time.Millisecond) + } +} +func (w *OnOffWidget) Start() { + go w.basicLoop() +} diff --git a/test/entry_test.go b/test/entry_test.go new file mode 100644 index 0000000..5c9e2d9 --- /dev/null +++ b/test/entry_test.go @@ -0,0 +1,27 @@ +package i3status_test + +import ( + "github.com/ghedamat/go-i3status/i3status" + . "github.com/smartystreets/goconvey/convey" + "testing" +) + +func TestEntry(t *testing.T) { + Convey("Given a json string", t, func() { + str := `{ + "name": "ethernet", + "instance": "eth0", + "button": 1, + "x": 1320, + "y": 1400 + }` + Convey("When NewEntry is called", func() { + e := i3status.NewEntry(str) + Convey("a new Entry is created", func() { + So(e.Name, ShouldEqual, "ethernet") + So(e.Instance, ShouldEqual, "eth0") + So(e.Button, ShouldEqual, 1) + }) + }) + }) +} diff --git a/test/on_off_test.go b/test/on_off_test.go new file mode 100644 index 0000000..2b7393c --- /dev/null +++ b/test/on_off_test.go @@ -0,0 +1,21 @@ +package i3status_test + +import ( + "github.com/ghedamat/go-i3status/i3status" + . "github.com/smartystreets/goconvey/convey" + "testing" +) + +func TestOnOffWidgetConstructor(t *testing.T) { + Convey("Given an input and an output channel", t, func() { + c := make(chan i3status.Message) + i := make(chan i3status.Entry) + Convey("When OnOff is created", func() { + w := i3status.NewOnOffWidget(c, i) + Convey("input and output channel are available", func() { + So(w.Input, ShouldEqual, i) + So(w.Output, ShouldEqual, c) + }) + }) + }) +} diff --git a/test/test.test b/test/test.test new file mode 100755 index 0000000..1c4db2e Binary files /dev/null and b/test/test.test differ diff --git a/test/widget_test.go b/test/widget_test.go index 692cd24..2d93439 100644 --- a/test/widget_test.go +++ b/test/widget_test.go @@ -7,14 +7,6 @@ import ( ) func TestWidgetConstructor(t *testing.T) { - Convey("Given a widget", t, func() { - Convey("When it is created", func() { - Convey("a channel for incoming events is returned", func() { - So("", ShouldEqual, "implement me") - }) - }) - }) - Convey("Given a Message channel", t, func() { c := make(chan i3status.Message) Convey("When a widget is created and a channel is passed", func() {