github.com/goplusjs/gopherjs@v1.2.6-0.20211206034512-f187917453b8/compiler/natives/src/encoding/gob/gob_test.go (about)

     1  // +build js
     2  
     3  package gob
     4  
     5  import (
     6  	"bytes"
     7  	"reflect"
     8  	"testing"
     9  )
    10  
    11  // TODO: TestEndToEnd override can be removed once the bug with Marr field is fixed.
    12  func TestEndToEnd(t *testing.T) {
    13  	type T2 struct {
    14  		T string
    15  	}
    16  	type T3 struct {
    17  		X float64
    18  		Z *int
    19  	}
    20  	type T1 struct {
    21  		A, B, C  int
    22  		M        map[string]*float64
    23  		M2       map[int]T3
    24  		Mstring  map[string]string
    25  		Mintptr  map[int]*int
    26  		Mcomp    map[complex128]complex128
    27  		Marr     map[[2]string][2]*float64
    28  		EmptyMap map[string]int // to check that we receive a non-nil map.
    29  		N        *[3]float64
    30  		Strs     *[2]string
    31  		Int64s   *[]int64
    32  		RI       complex64
    33  		S        string
    34  		Y        []byte
    35  		T        *T2
    36  	}
    37  	pi := 3.14159
    38  	e := 2.71828
    39  	two := 2.0
    40  	meaning := 42
    41  	fingers := 5
    42  	s1 := "string1"
    43  	s2 := "string2"
    44  	var comp1 complex128 = complex(1.0, 1.0)
    45  	var comp2 complex128 = complex(1.0, 1.0)
    46  	var arr1 [2]string
    47  	arr1[0] = s1
    48  	arr1[1] = s2
    49  	var arr2 [2]string
    50  	arr2[0] = s2
    51  	arr2[1] = s1
    52  	var floatArr1 [2]*float64
    53  	floatArr1[0] = &pi
    54  	floatArr1[1] = &e
    55  	var floatArr2 [2]*float64
    56  	floatArr2[0] = &e
    57  	floatArr2[1] = &two
    58  	t1 := &T1{
    59  		A:       17,
    60  		B:       18,
    61  		C:       -5,
    62  		M:       map[string]*float64{"pi": &pi, "e": &e},
    63  		M2:      map[int]T3{4: T3{X: pi, Z: &meaning}, 10: T3{X: e, Z: &fingers}},
    64  		Mstring: map[string]string{"pi": "3.14", "e": "2.71"},
    65  		Mintptr: map[int]*int{meaning: &fingers, fingers: &meaning},
    66  		Mcomp:   map[complex128]complex128{comp1: comp2, comp2: comp1},
    67  		// TODO: Fix this problem:
    68  		// 	TypeError: dst.$set is not a function
    69  		// 	    at typedmemmove (/github.com/gopherjs/gopherjs/reflect.go:487:3)
    70  		//Marr:     map[[2]string][2]*float64{arr1: floatArr1, arr2: floatArr2},
    71  		EmptyMap: make(map[string]int),
    72  		N:        &[3]float64{1.5, 2.5, 3.5},
    73  		Strs:     &[2]string{s1, s2},
    74  		Int64s:   &[]int64{77, 89, 123412342134},
    75  		RI:       17 - 23i,
    76  		S:        "Now is the time",
    77  		Y:        []byte("hello, sailor"),
    78  		T:        &T2{"this is T2"},
    79  	}
    80  	b := new(bytes.Buffer)
    81  	err := NewEncoder(b).Encode(t1)
    82  	if err != nil {
    83  		t.Error("encode:", err)
    84  	}
    85  	var _t1 T1
    86  	err = NewDecoder(b).Decode(&_t1)
    87  	if err != nil {
    88  		t.Fatal("decode:", err)
    89  	}
    90  	if !reflect.DeepEqual(t1, &_t1) {
    91  		t.Errorf("encode expected %v got %v", *t1, _t1)
    92  	}
    93  	// Be absolutely sure the received map is non-nil.
    94  	if t1.EmptyMap == nil {
    95  		t.Errorf("nil map sent")
    96  	}
    97  	if _t1.EmptyMap == nil {
    98  		t.Errorf("nil map received")
    99  	}
   100  }
   101  
   102  func TestTypeRace(t *testing.T) {
   103  	// encoding/gob currently uses nosync. This test uses sync.WaitGroup and
   104  	// cannot succeed when nosync is used.
   105  	t.Skip("using nosync")
   106  }