summaryrefslogtreecommitdiff
path: root/vendor/github.com/gotk3/gotk3/gtk/gtk_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/gotk3/gotk3/gtk/gtk_test.go')
-rw-r--r--vendor/github.com/gotk3/gotk3/gtk/gtk_test.go739
1 files changed, 739 insertions, 0 deletions
diff --git a/vendor/github.com/gotk3/gotk3/gtk/gtk_test.go b/vendor/github.com/gotk3/gotk3/gtk/gtk_test.go
new file mode 100644
index 0000000..bde4d0e
--- /dev/null
+++ b/vendor/github.com/gotk3/gotk3/gtk/gtk_test.go
@@ -0,0 +1,739 @@
+/*
+ * Copyright (c) 2013-2014 Conformal Systems <info@conformal.com>
+ *
+ * This file originated from: http://opensource.conformal.com/
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+package gtk
+
+import (
+ "fmt"
+ "log"
+ "testing"
+ "time"
+
+ "github.com/gotk3/gotk3/gdk"
+ "github.com/gotk3/gotk3/glib"
+)
+
+func init() {
+ Init(nil)
+}
+
+// TestBoolConvs tests the conversion between Go bools and gboolean
+// types.
+func TestBoolConvs(t *testing.T) {
+ if err := testBoolConvs(); err != nil {
+ t.Error(err)
+ }
+}
+
+// TestBox tests creating and adding widgets to a Box
+func TestBox(t *testing.T) {
+ vbox, err := BoxNew(ORIENTATION_VERTICAL, 0)
+ if err != nil {
+ t.Error("Unable to create box")
+ }
+
+ vbox.Set("homogeneous", true)
+ if vbox.GetHomogeneous() != true {
+ t.Error("Could not set or get Box homogeneous property")
+ }
+
+ vbox.SetHomogeneous(false)
+ if vbox.GetHomogeneous() != false {
+ t.Error("Could not set or get Box homogeneous property")
+ }
+
+ vbox.Set("spacing", 1)
+ if vbox.GetSpacing() != 1 {
+ t.Error("Could not set or get Box spacing")
+ }
+
+ vbox.SetSpacing(2)
+ if vbox.GetSpacing() != 2 {
+ t.Error("Could not set or get Box spacing")
+ }
+
+ // add a child to start and end
+ start, err := LabelNew("Start")
+ if err != nil {
+ t.Error("Unable to create label")
+ }
+
+ end, err := LabelNew("End")
+ if err != nil {
+ t.Error("Unable to create label")
+ }
+
+ vbox.PackStart(start, true, true, 3)
+ vbox.PackEnd(end, true, true, 3)
+}
+func TestTextBuffer_WhenSetText_ExpectGetTextReturnsSame(t *testing.T) {
+ buffer, err := TextBufferNew(nil)
+ if err != nil {
+ t.Error("Unable to create text buffer")
+ }
+ expected := "Hello, World!"
+ buffer.SetText(expected)
+
+ start, end := buffer.GetBounds()
+
+ actual, err := buffer.GetText(start, end, true)
+ if err != nil {
+ t.Error("Unable to get text from buffer")
+ }
+
+ if actual != expected {
+ t.Errorf("Expected '%s'; Got '%s'", expected, actual)
+ }
+}
+
+func testTextViewEditable(set bool) error {
+ tv, err := TextViewNew()
+ if err != nil {
+ return err
+ }
+
+ exp := set
+ tv.SetEditable(exp)
+ act := tv.GetEditable()
+ if exp != act {
+ return fmt.Errorf("Expected GetEditable(): %v; Got: %v", exp, act)
+ }
+ return nil
+}
+
+func TestTextView_WhenSetEditableFalse_ExpectGetEditableReturnsFalse(t *testing.T) {
+ if err := testTextViewEditable(false); err != nil {
+ t.Error(err)
+ }
+}
+
+func TestTextView_WhenSetEditableTrue_ExpectGetEditableReturnsTrue(t *testing.T) {
+ if err := testTextViewEditable(true); err != nil {
+ t.Error(err)
+ }
+}
+
+func testTextViewWrapMode(set WrapMode) error {
+ tv, err := TextViewNew()
+ if err != nil {
+ return err
+ }
+
+ exp := set
+ tv.SetWrapMode(set)
+ act := tv.GetWrapMode()
+ if act != exp {
+ return fmt.Errorf("Expected GetWrapMode(): %v; Got: %v", exp, act)
+ }
+ return nil
+}
+
+func TestTextView_WhenSetWrapModeNone_ExpectGetWrapModeReturnsNone(t *testing.T) {
+ if err := testTextViewWrapMode(WRAP_NONE); err != nil {
+ t.Error(err)
+ }
+}
+
+func TestTextView_WhenSetWrapModeWord_ExpectGetWrapModeReturnsWord(t *testing.T) {
+ if err := testTextViewWrapMode(WRAP_WORD); err != nil {
+ t.Error(err)
+ }
+}
+
+func testTextViewCursorVisible(set bool) error {
+ tv, err := TextViewNew()
+ if err != nil {
+ return err
+ }
+
+ exp := set
+ tv.SetCursorVisible(set)
+ act := tv.GetCursorVisible()
+ if act != exp {
+ return fmt.Errorf("Expected GetCursorVisible(): %v; Got: %v", exp, act)
+ }
+ return nil
+}
+
+func TestTextView_WhenSetCursorVisibleFalse_ExpectGetCursorVisibleReturnsFalse(t *testing.T) {
+ if err := testTextViewCursorVisible(false); err != nil {
+ t.Error(err)
+ }
+}
+
+func TestTextView_WhenSetCursorVisibleTrue_ExpectGetCursorVisibleReturnsTrue(t *testing.T) {
+ if err := testTextViewCursorVisible(true); err != nil {
+ t.Error(err)
+ }
+}
+
+func testTextViewOverwrite(set bool) error {
+ tv, err := TextViewNew()
+ if err != nil {
+ return err
+ }
+
+ exp := set
+ tv.SetOverwrite(set)
+ act := tv.GetOverwrite()
+ if act != exp {
+ return fmt.Errorf("Expected GetOverwrite(): %v; Got: %v", exp, act)
+ }
+ return nil
+}
+
+func TestTextView_WhenSetOverwriteFalse_ExpectGetOverwriteReturnsFalse(t *testing.T) {
+ if err := testTextViewOverwrite(false); err != nil {
+ t.Error(err)
+ }
+}
+
+func TestTextView_WhenSetOverwriteTrue_ExpectGetOverwriteReturnsTrue(t *testing.T) {
+ if err := testTextViewOverwrite(true); err != nil {
+ t.Error(err)
+ }
+}
+
+func testTextViewJustification(justify Justification) error {
+ tv, err := TextViewNew()
+ if err != nil {
+ return err
+ }
+
+ exp := justify
+ tv.SetJustification(justify)
+ act := tv.GetJustification()
+ if act != exp {
+ return fmt.Errorf("Expected GetJustification(): %v; Got: %v", exp, act)
+ }
+ return nil
+}
+
+func TestTextView_WhenSetJustificationLeft_ExpectGetJustificationReturnsLeft(t *testing.T) {
+ if err := testTextViewJustification(JUSTIFY_LEFT); err != nil {
+ t.Error(err)
+ }
+}
+
+func TestTextView_WhenSetJustificationRight_ExpectGetJustificationReturnsRight(t *testing.T) {
+ if err := testTextViewJustification(JUSTIFY_RIGHT); err != nil {
+ t.Error(err)
+ }
+}
+
+func testTextViewAcceptsTab(set bool) error {
+ tv, err := TextViewNew()
+ if err != nil {
+ return err
+ }
+
+ exp := set
+ tv.SetAcceptsTab(set)
+ if act := tv.GetAcceptsTab(); act != exp {
+ return fmt.Errorf("Expected GetAcceptsTab(): %v; Got: %v", exp, act)
+ }
+ return nil
+}
+
+func TestTextView_WhenSetAcceptsTabFalse_ExpectGetAcceptsTabReturnsFalse(t *testing.T) {
+ if err := testTextViewAcceptsTab(false); err != nil {
+ t.Error(err)
+ }
+}
+
+func TestTextView_WhenSetAcceptsTabTrue_ExpectGetAcceptsTabReturnsTrue(t *testing.T) {
+ if err := testTextViewAcceptsTab(true); err != nil {
+ t.Error(err)
+ }
+}
+
+func testIntProperty(val int, set func(int), get func() int) error {
+ set(val)
+ if exp, act := val, get(); act != exp {
+ return fmt.Errorf("Expected: %d; got: %d", exp, act)
+ }
+ return nil
+}
+
+func testTextViewPixelsAboveLines(px int) error {
+ tv, err := TextViewNew()
+ if err != nil {
+ return err
+ }
+ return testIntProperty(px, (*tv).SetPixelsAboveLines, (*tv).GetPixelsAboveLines)
+}
+
+func TestTextView_WhenSetPixelsAboveLines10_ExpectGetPixelsAboveLinesReturns10(t *testing.T) {
+ if err := testTextViewPixelsAboveLines(10); err != nil {
+ t.Error(err)
+ }
+}
+
+func TestTextView_WhenSetPixelsAboveLines11_ExpectGetPixelsAboveLinesReturns11(t *testing.T) {
+ if err := testTextViewPixelsAboveLines(11); err != nil {
+ t.Error(err)
+ }
+}
+
+func testTextViewPixelsBelowLines(px int) error {
+ tv, err := TextViewNew()
+ if err != nil {
+ return err
+ }
+ return testIntProperty(px, (*tv).SetPixelsBelowLines, (*tv).GetPixelsBelowLines)
+}
+
+func TestTextView_WhenSetPixelsBelowLines10_ExpectGetPixelsAboveLinesReturns10(t *testing.T) {
+ if err := testTextViewPixelsBelowLines(10); err != nil {
+ t.Error(err)
+ }
+}
+
+func TestTextView_WhenSetPixelsBelowLines11_ExpectGetPixelsBelowLinesReturns11(t *testing.T) {
+ if err := testTextViewPixelsBelowLines(11); err != nil {
+ t.Error(err)
+ }
+}
+
+func testTextViewPixelsInsideWrap(px int) error {
+ tv, err := TextViewNew()
+ if err != nil {
+ return err
+ }
+
+ return testIntProperty(px, (*tv).SetPixelsInsideWrap, (*tv).GetPixelsInsideWrap)
+}
+
+func TestTextView_WhenSetPixelsInsideWrap10_ExpectGetPixelsInsideWrapReturns11(t *testing.T) {
+ if err := testTextViewPixelsInsideWrap(10); err != nil {
+ t.Error(err)
+ }
+}
+
+func TestTextView_WhenSetPixelsInsideWrap11_ExpectGetPixelsInsideWrapReturns11(t *testing.T) {
+ if err := testTextViewPixelsInsideWrap(11); err != nil {
+ t.Error(err)
+ }
+}
+
+func testTextViewLeftMargin(margin int) error {
+ tv, err := TextViewNew()
+ if err != nil {
+ return err
+ }
+
+ return testIntProperty(margin, (*tv).SetLeftMargin, (*tv).GetLeftMargin)
+}
+
+func TestTextView_WhenSetLeftMargin11_ExpectGetLeftMarginReturns11(t *testing.T) {
+ if err := testTextViewLeftMargin(11); err != nil {
+ t.Error(err)
+ }
+}
+
+func TestTextView_WhenSetLeftMargin10_ExpectGetLeftMarginReturns10(t *testing.T) {
+ if err := testTextViewLeftMargin(10); err != nil {
+ t.Error(err)
+ }
+}
+
+func testTextViewRightMargin(margin int) error {
+ tv, err := TextViewNew()
+ if err != nil {
+ return err
+ }
+
+ return testIntProperty(margin, (*tv).SetRightMargin, (*tv).GetRightMargin)
+}
+
+func TestTextView_WhenSetRightMargin10_ExpectGetRightMarginReturns10(t *testing.T) {
+ if err := testTextViewRightMargin(10); err != nil {
+ t.Error(err)
+ }
+}
+
+func TestTextView_WhenSetRightMargin11_ExpectGetRightMarginReturns11(t *testing.T) {
+ if err := testTextViewRightMargin(11); err != nil {
+ t.Error(err)
+ }
+}
+
+func testTextViewIndent(indent int) error {
+ tv, err := TextViewNew()
+ if err != nil {
+ return err
+ }
+
+ return testIntProperty(indent, (*tv).SetIndent, (*tv).GetIndent)
+}
+
+func TestTextView_WhenSetIndent10_ExpectGetIndentReturns10(t *testing.T) {
+ if err := testTextViewIndent(10); err != nil {
+ t.Error(err)
+ }
+}
+
+func TestTextView_WhenSetIndent11_ExpectGetIndentReturns11(t *testing.T) {
+ if err := testTextViewIndent(11); err != nil {
+ t.Error(err)
+ }
+}
+
+func testTextViewInputHints(hint InputHints) error {
+ tv, err := TextViewNew()
+ if err != nil {
+ return err
+ }
+
+ tv.SetInputHints(hint)
+ if exp, act := hint, tv.GetInputHints(); act != exp {
+ return fmt.Errorf("Expected %v; Got %v", exp, act)
+ }
+ return nil
+}
+
+func TestTextView_WhenSetInputHintsNone_ExpectGetInputHintsReturnsNone(t *testing.T) {
+ if err := testTextViewInputHints(INPUT_HINT_NONE); err != nil {
+ t.Error(err)
+ }
+}
+
+func TestTextView_WhenSetInputHintsSpellCheck_ExpectGetInputHintsReturnsSpellCheck(t *testing.T) {
+ if err := testTextViewInputHints(INPUT_HINT_SPELLCHECK); err != nil {
+ t.Error(err)
+ }
+}
+
+func testTextViewInputPurpose(purpose InputPurpose) error {
+ tv, err := TextViewNew()
+ if err != nil {
+ return err
+ }
+
+ tv.SetInputPurpose(purpose)
+ if exp, act := purpose, tv.GetInputPurpose(); act != exp {
+ return fmt.Errorf("Expected %v; Got %v", exp, act)
+ }
+ return nil
+}
+
+func TestTextView_WhenSetInputPurposeURL_ExpectGetInputPurposeReturnsURL(t *testing.T) {
+ if err := testTextViewInputPurpose(INPUT_PURPOSE_URL); err != nil {
+ t.Error(err)
+ }
+}
+
+func TestTextView_WhenSetInputPurposeALPHA_ExpectGetInputPurposeReturnsALPHA(t *testing.T) {
+ if err := testTextViewInputPurpose(INPUT_PURPOSE_ALPHA); err != nil {
+ t.Error(err)
+ }
+}
+
+func testCellRendererToggleSetRadio(set bool) error {
+ renderer, err := CellRendererToggleNew()
+ if err != nil {
+ return err
+ }
+
+ renderer.SetRadio(set)
+ if exp, act := set, renderer.GetRadio(); act != exp {
+ return fmt.Errorf("Expected GetRadio(): %v; Got: %v", exp, act)
+ }
+ return nil
+}
+
+func TestCellRendererToggle_WhenSetRadioFalse_ExpectGetRadioReturnsFalse(t *testing.T) {
+ if err := testCellRendererToggleSetRadio(false); err != nil {
+ t.Error(err)
+ }
+}
+
+func TestCellRendererToggle_WhenSetRadioTrue_ExpectGetRadioReturnsTrue(t *testing.T) {
+ if err := testCellRendererToggleSetRadio(true); err != nil {
+ t.Error(err)
+ }
+}
+
+func testCellRendererToggleSetActive(set bool) error {
+ renderer, err := CellRendererToggleNew()
+ if err != nil {
+ return err
+ }
+
+ renderer.SetActive(set)
+ if exp, act := set, renderer.GetActive(); act != exp {
+ return fmt.Errorf("Expected GetActive(): %v; Got: %v", exp, act)
+ }
+ return nil
+}
+
+func TestCellRendererToggle_WhenSetActiveFalse_ExpectGetActiveReturnsFalse(t *testing.T) {
+ if err := testCellRendererToggleSetActive(false); err != nil {
+ t.Error(err)
+ }
+}
+
+func TestCellRendererToggle_WhenSetActiveTrue_ExpectGetActiveReturnsTrue(t *testing.T) {
+ if err := testCellRendererToggleSetActive(true); err != nil {
+ t.Error(err)
+ }
+}
+
+func testCellRendererToggleSetActivatable(set bool) error {
+ renderer, err := CellRendererToggleNew()
+ if err != nil {
+ return err
+ }
+
+ renderer.SetActivatable(set)
+ if exp, act := set, renderer.GetActivatable(); act != exp {
+ return fmt.Errorf("Expected GetActivatable(): %v; Got: %v", exp, act)
+ }
+ return nil
+}
+
+func TestCellRendererToggle_WhenSetActivatableFalse_ExpectGetActivatableReturnsFalse(t *testing.T) {
+ if err := testCellRendererToggleSetActivatable(false); err != nil {
+ t.Error(err)
+ }
+}
+
+func TestCellRendererToggle_WhenSetActivatableTrue_ExpectGetActivatableReturnsTrue(t *testing.T) {
+ if err := testCellRendererToggleSetActivatable(true); err != nil {
+ t.Error(err)
+ }
+}
+
+func setupListStore() *ListStore {
+ ls, err := ListStoreNew(glib.TYPE_STRING)
+ if err != nil {
+ log.Fatal("Unexpected err:", err)
+ }
+ return ls
+}
+
+func getLastIter(ls *ListStore) (*TreeIter, bool) {
+ iter, listIsntEmpty := ls.GetIterFirst()
+ if !listIsntEmpty {
+ return iter, listIsntEmpty
+ }
+
+ for {
+ temp := *iter
+ last := &temp
+ if !ls.IterNext(iter) {
+ return last, true
+ }
+ }
+
+ panic("Shouldn't get here")
+}
+
+// TestListStoreRemoveLastInvalidIterator tests that when a ListStore stores
+// one item and it is removed, the iterator becomes invalid.
+func TestListStoreRemoveLastInvalidIterator(t *testing.T) {
+ ls := setupListStore()
+
+ iter := ls.Append()
+
+ if iterValid := ls.Remove(iter); iterValid {
+ t.Fatal("Remove() returned true (iter valid); expected false (iter invalid)")
+ }
+}
+
+func TestListStoreInsertBefore(t *testing.T) {
+ ls := setupListStore()
+
+ // Given 1 iter is already in the liststore
+ initialIter := ls.Append()
+
+ // When another iter is inserted before it
+ newIter := ls.InsertBefore(initialIter)
+
+ // Expect the newly-inserted iter is first iter in list
+ firstIter, listIsntEmpty := ls.GetIterFirst()
+ if !listIsntEmpty {
+ t.Fatal("Unexpected: liststore is empty")
+ }
+
+ if *firstIter != *newIter {
+ t.Fatal("Expected the new iter added to front of list")
+ }
+}
+
+// When 'sibling' parameter is nil, the new iter should be appended to the liststore
+func TestListStoreInsertBefore_WhenNilSibling(t *testing.T) {
+ ls := setupListStore()
+
+ // Given 2 iters in liststore
+ ls.Append()
+ ls.Append()
+
+ // When 'sibling' parameter of InsertBefore() is nil...
+ newIter := ls.InsertBefore(nil)
+
+ // Then expect newly-inserted iter is the first iter in list
+ lastIter, listIsntEmpty := getLastIter(ls)
+ if !listIsntEmpty {
+ t.Fatal("Unexpected: liststore is empty")
+ }
+
+ if *lastIter != *newIter {
+ t.Fatal("Expected the new iter added to end of list")
+ }
+}
+
+func TestListStoreInsertAfter(t *testing.T) {
+ ls := setupListStore()
+
+ // Given 1 iter in liststore
+ sibling := ls.Append()
+
+ // When InsertAfter(sibling)
+ newIter := ls.InsertAfter(sibling)
+
+ // Then expect newly-inserted iter is the last iter in list
+ lastIter, listIsntEmpty := getLastIter(ls)
+ if !listIsntEmpty {
+ t.Fatal("Unexpected: liststore is empty")
+ }
+
+ if *lastIter != *newIter {
+ t.Fatal("Expected the new iter added to end of list")
+ }
+}
+
+// When 'sibling' parameter is nil, the new iter should be prepended to the liststore
+func TestListStoreInsertAfter_WhenNilSibling(t *testing.T) {
+ ls := setupListStore()
+
+ // Given 2 iters in liststore
+ ls.Append()
+ ls.Append()
+
+ // When InsertAfter(nil)
+ newIter := ls.InsertAfter(nil)
+
+ // Then expect newly-inserted iter is the first iter in the list
+ first, listIsntEmpty := ls.GetIterFirst()
+ if !listIsntEmpty {
+ t.Fatal("Unexpected: liststore is empty")
+ }
+
+ if *first != *newIter {
+ t.Fatal("Expected the new iter was prepended to liststore")
+ }
+}
+
+func TestBuilder(t *testing.T) {
+ builder, err := BuilderNew()
+ if err != nil {
+ t.Error("Unable to create builder")
+ }
+
+ str := `
+<interface>
+ <object class="GtkDialog" id="dialog1">
+ <child internal-child="vbox">
+ <object class="GtkBox" id="vbox1">
+ <property name="border-width">10</property>
+ <child internal-child="action_area">
+ <object class="GtkButtonBox" id="hbuttonbox1">
+ <property name="border-width">20</property>
+ <child>
+ <object class="GtkButton" id="ok_button">
+ <property name="label">gtk-ok</property>
+ <property name="use-stock">TRUE</property>
+ <signal name="clicked" handler="ok_button_clicked"/>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+</interface>
+`
+
+ err = builder.AddFromString(str)
+ if err != nil {
+ t.Error("Unable to add from string")
+ }
+
+ widget, err := builder.GetObject("ok_button")
+ if err != nil {
+ t.Error("Unable to get widget from string")
+ }
+
+ button, ok := widget.(*Button)
+ if !ok {
+ t.Error("Unable to cast to gtk.Button")
+ }
+
+ l, err := button.GetLabel()
+ if err != nil {
+ t.Error("Unable to get button label")
+ }
+
+ if l != "gtk-ok" {
+ t.Errorf("Label has the wrong value: %q", l)
+ }
+
+ done := make(chan bool)
+
+ builder.ConnectSignals(map[string]interface{}{
+ "ok_button_clicked": func() {
+ done <- true
+ },
+ })
+
+ go button.Emit("clicked")
+
+ select {
+ case <-done:
+ case <-time.After(1 * time.Second):
+ t.Error("Failed to call callback")
+ }
+}
+
+func TestTextTagEvent(t *testing.T) {
+ textTag, err := TextTagNew("mytexttag")
+ if err != nil {
+ t.Error("could not create text tag")
+ }
+
+ evk := gdk.EventKeyNew()
+
+ var iter TextIter
+ ok := textTag.Event(textTag.Object, evk.Event, &iter)
+
+ if ok {
+ t.Error("event should not have been handled")
+ }
+
+ textTag.Connect("event", func() bool {
+ return true
+ })
+
+ ok = textTag.Event(textTag.Object, evk.Event, &iter)
+
+ if !ok {
+ t.Error("event should have been handled")
+ }
+
+}