object_goslice_test.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. package goja
  2. import "testing"
  3. func TestGoSliceBasic(t *testing.T) {
  4. const SCRIPT = `
  5. var sum = 0;
  6. for (var i = 0; i < a.length; i++) {
  7. sum += a[i];
  8. }
  9. sum;
  10. `
  11. r := New()
  12. r.Set("a", []interface{}{1, 2, 3, 4})
  13. v, err := r.RunString(SCRIPT)
  14. if err != nil {
  15. t.Fatal(err)
  16. }
  17. if i := v.ToInteger(); i != 10 {
  18. t.Fatalf("Expected 10, got: %d", i)
  19. }
  20. }
  21. func TestGoSliceIn(t *testing.T) {
  22. const SCRIPT = `
  23. var idx = "";
  24. for (var i in a) {
  25. idx += i;
  26. }
  27. idx;
  28. `
  29. r := New()
  30. r.Set("a", []interface{}{1, 2, 3, 4})
  31. v, err := r.RunString(SCRIPT)
  32. if err != nil {
  33. t.Fatal(err)
  34. }
  35. if i := v.String(); i != "0123" {
  36. t.Fatalf("Expected '0123', got: '%s'", i)
  37. }
  38. }
  39. func TestGoSliceExpand(t *testing.T) {
  40. const SCRIPT = `
  41. var l = a.length;
  42. for (var i = 0; i < l; i++) {
  43. a[l + i] = a[i] * 2;
  44. }
  45. var sum = 0;
  46. for (var i = 0; i < a.length; i++) {
  47. sum += a[i];
  48. }
  49. sum;
  50. `
  51. r := New()
  52. a := []interface{}{int64(1), int64(2), int64(3), int64(4)}
  53. r.Set("a", &a)
  54. v, err := r.RunString(SCRIPT)
  55. if err != nil {
  56. t.Fatal(err)
  57. }
  58. sum := int64(0)
  59. for _, v := range a {
  60. sum += v.(int64)
  61. }
  62. if i := v.ToInteger(); i != sum {
  63. t.Fatalf("Expected %d, got: %d", sum, i)
  64. }
  65. }
  66. func TestGoSliceProto(t *testing.T) {
  67. const SCRIPT = `
  68. a.join(",")
  69. `
  70. r := New()
  71. a := []interface{}{1, 2, 3, 4}
  72. r.Set("a", a)
  73. ret, err := r.RunString(SCRIPT)
  74. if err != nil {
  75. t.Fatal(err)
  76. }
  77. if s := ret.String(); s != "1,2,3,4" {
  78. t.Fatalf("Unexpected result: '%s'", s)
  79. }
  80. }