Skip to content
Snippets Groups Projects
js_test.go 3.43 KiB
Newer Older
  • Learn to ignore specific revisions
  • Richard Musiol's avatar
    Richard Musiol committed
    // Copyright 2018 The Go Authors. All rights reserved.
    // Use of this source code is governed by a BSD-style
    // license that can be found in the LICENSE file.
    
    // +build js,wasm
    
    package js_test
    
    import (
    	"syscall/js"
    	"testing"
    )
    
    var dummys = js.Global.Call("eval", `({
    	someBool: true,
    	someString: "abc\u1234",
    	someInt: 42,
    	someFloat: 42.123,
    	someArray: [41, 42, 43],
    	add: function(a, b) {
    		return a + b;
    	},
    })`)
    
    func TestBool(t *testing.T) {
    	want := true
    	o := dummys.Get("someBool")
    	if got := o.Bool(); got != want {
    		t.Errorf("got %#v, want %#v", got, want)
    	}
    	dummys.Set("otherBool", want)
    	if got := dummys.Get("otherBool").Bool(); got != want {
    		t.Errorf("got %#v, want %#v", got, want)
    	}
    }
    
    func TestString(t *testing.T) {
    	want := "abc\u1234"
    	o := dummys.Get("someString")
    	if got := o.String(); got != want {
    		t.Errorf("got %#v, want %#v", got, want)
    	}
    	dummys.Set("otherString", want)
    	if got := dummys.Get("otherString").String(); got != want {
    		t.Errorf("got %#v, want %#v", got, want)
    	}
    }
    
    func TestInt(t *testing.T) {
    	want := 42
    	o := dummys.Get("someInt")
    	if got := o.Int(); got != want {
    		t.Errorf("got %#v, want %#v", got, want)
    	}
    	dummys.Set("otherInt", want)
    	if got := dummys.Get("otherInt").Int(); got != want {
    		t.Errorf("got %#v, want %#v", got, want)
    	}
    }
    
    
    func TestIntConversion(t *testing.T) {
    	testIntConversion(t, 0)
    	testIntConversion(t, 1)
    	testIntConversion(t, -1)
    	testIntConversion(t, 1<<20)
    	testIntConversion(t, -1<<20)
    	testIntConversion(t, 1<<40)
    	testIntConversion(t, -1<<40)
    	testIntConversion(t, 1<<60)
    	testIntConversion(t, -1<<60)
    }
    
    func testIntConversion(t *testing.T, want int) {
    	if got := js.ValueOf(want).Int(); got != want {
    		t.Errorf("got %#v, want %#v", got, want)
    	}
    }
    
    
    Richard Musiol's avatar
    Richard Musiol committed
    func TestFloat(t *testing.T) {
    	want := 42.123
    	o := dummys.Get("someFloat")
    	if got := o.Float(); got != want {
    		t.Errorf("got %#v, want %#v", got, want)
    	}
    	dummys.Set("otherFloat", want)
    	if got := dummys.Get("otherFloat").Float(); got != want {
    		t.Errorf("got %#v, want %#v", got, want)
    	}
    }
    
    func TestUndefined(t *testing.T) {
    	dummys.Set("test", js.Undefined)
    	if dummys == js.Undefined || dummys.Get("test") != js.Undefined || dummys.Get("xyz") != js.Undefined {
    		t.Errorf("js.Undefined expected")
    	}
    }
    
    func TestNull(t *testing.T) {
    	dummys.Set("test1", nil)
    	dummys.Set("test2", js.Null)
    	if dummys == js.Null || dummys.Get("test1") != js.Null || dummys.Get("test2") != js.Null {
    		t.Errorf("js.Null expected")
    	}
    }
    
    func TestLength(t *testing.T) {
    	if got := dummys.Get("someArray").Length(); got != 3 {
    		t.Errorf("got %#v, want %#v", got, 3)
    	}
    }
    
    func TestIndex(t *testing.T) {
    	if got := dummys.Get("someArray").Index(1).Int(); got != 42 {
    		t.Errorf("got %#v, want %#v", got, 42)
    	}
    }
    
    func TestSetIndex(t *testing.T) {
    	dummys.Get("someArray").SetIndex(2, 99)
    	if got := dummys.Get("someArray").Index(2).Int(); got != 99 {
    		t.Errorf("got %#v, want %#v", got, 99)
    	}
    }
    
    func TestCall(t *testing.T) {
    	var i int64 = 40
    	if got := dummys.Call("add", i, 2).Int(); got != 42 {
    		t.Errorf("got %#v, want %#v", got, 42)
    	}
    	if got := dummys.Call("add", js.Global.Call("eval", "40"), 2).Int(); got != 42 {
    		t.Errorf("got %#v, want %#v", got, 42)
    	}
    }
    
    func TestInvoke(t *testing.T) {
    	var i int64 = 40
    	if got := dummys.Get("add").Invoke(i, 2).Int(); got != 42 {
    		t.Errorf("got %#v, want %#v", got, 42)
    	}
    }
    
    func TestNew(t *testing.T) {
    	if got := js.Global.Get("Array").New(42).Length(); got != 42 {
    		t.Errorf("got %#v, want %#v", got, 42)
    	}
    }