123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- package goja
- import "testing"
- func TestGoMapReflectGetSet(t *testing.T) {
- const SCRIPT = `
- m.c = m.a + m.b;
- `
- vm := New()
- m := map[string]string{
- "a": "4",
- "b": "2",
- }
- vm.Set("m", m)
- _, err := vm.RunString(SCRIPT)
- if err != nil {
- t.Fatal(err)
- }
- if c := m["c"]; c != "42" {
- t.Fatalf("Unexpected value: '%s'", c)
- }
- }
- func TestGoMapReflectIntKey(t *testing.T) {
- const SCRIPT = `
- m[2] = m[0] + m[1];
- `
- vm := New()
- m := map[int]int{
- 0: 40,
- 1: 2,
- }
- vm.Set("m", m)
- _, err := vm.RunString(SCRIPT)
- if err != nil {
- t.Fatal(err)
- }
- if c := m[2]; c != 42 {
- t.Fatalf("Unexpected value: '%d'", c)
- }
- }
- func TestGoMapReflectDelete(t *testing.T) {
- const SCRIPT = `
- delete m.a;
- `
- vm := New()
- m := map[string]string{
- "a": "4",
- "b": "2",
- }
- vm.Set("m", m)
- _, err := vm.RunString(SCRIPT)
- if err != nil {
- t.Fatal(err)
- }
- if _, exists := m["a"]; exists {
- t.Fatal("a still exists")
- }
- if b := m["b"]; b != "2" {
- t.Fatalf("Unexpected b: '%s'", b)
- }
- }
- func TestGoMapReflectJSON(t *testing.T) {
- const SCRIPT = `
- function f(m) {
- return JSON.stringify(m);
- }
- `
- vm := New()
- m := map[string]string{
- "t": "42",
- }
- _, err := vm.RunString(SCRIPT)
- if err != nil {
- t.Fatal(err)
- }
- f := vm.Get("f")
- if call, ok := AssertFunction(f); ok {
- v, err := call(nil, ([]Value{vm.ToValue(m)})...)
- if err != nil {
- t.Fatal(err)
- }
- if !v.StrictEquals(asciiString(`{"t":"42"}`)) {
- t.Fatalf("Unexpected value: %v", v)
- }
- } else {
- t.Fatalf("Not a function: %v", f)
- }
- }
- func TestGoMapReflectProto(t *testing.T) {
- const SCRIPT = `
- m.hasOwnProperty("t");
- `
- vm := New()
- m := map[string]string{
- "t": "42",
- }
- vm.Set("m", m)
- v, err := vm.RunString(SCRIPT)
- if err != nil {
- t.Fatal(err)
- }
- if !v.StrictEquals(valueTrue) {
- t.Fatalf("Expected true, got %v", v)
- }
- }
- type gomapReflect_noMethods map[string]interface{}
- type gomapReflect_withMethods map[string]interface{}
- func (m gomapReflect_withMethods) Method() bool {
- return true
- }
- func TestGoMapReflectNoMethods(t *testing.T) {
- const SCRIPT = `
- typeof m === "object" && m.hasOwnProperty("t") && m.t === 42;
- `
- vm := New()
- m := make(gomapReflect_noMethods)
- m["t"] = 42
- vm.Set("m", m)
- v, err := vm.RunString(SCRIPT)
- if err != nil {
- t.Fatal(err)
- }
- if !v.StrictEquals(valueTrue) {
- t.Fatalf("Expected true, got %v", v)
- }
- }
- func TestGoMapReflectWithMethods(t *testing.T) {
- const SCRIPT = `
- typeof m === "object" && !m.hasOwnProperty("t") && m.hasOwnProperty("Method") && m.Method();
- `
- vm := New()
- m := make(gomapReflect_withMethods)
- m["t"] = 42
- vm.Set("m", m)
- v, err := vm.RunString(SCRIPT)
- if err != nil {
- t.Fatal(err)
- }
- if !v.StrictEquals(valueTrue) {
- t.Fatalf("Expected true, got %v", v)
- }
- }
|