jsre_test.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. package jsre
  2. import (
  3. "io/ioutil"
  4. "os"
  5. "testing"
  6. "time"
  7. "github.com/robertkrimen/otto"
  8. )
  9. type testNativeObjectBinding struct{}
  10. type msg struct {
  11. Msg string
  12. }
  13. func (no *testNativeObjectBinding) TestMethod(call otto.FunctionCall) otto.Value {
  14. m, err := call.Argument(0).ToString()
  15. if err != nil {
  16. return otto.UndefinedValue()
  17. }
  18. v, _ := call.Otto.ToValue(&msg{m})
  19. return v
  20. }
  21. func TestExec(t *testing.T) {
  22. jsre := New("/tmp")
  23. ioutil.WriteFile("/tmp/test.js", []byte(`msg = "testMsg"`), os.ModePerm)
  24. err := jsre.Exec("test.js")
  25. if err != nil {
  26. t.Errorf("expected no error, got %v", err)
  27. }
  28. val, err := jsre.Run("msg")
  29. if err != nil {
  30. t.Errorf("expected no error, got %v", err)
  31. }
  32. if !val.IsString() {
  33. t.Errorf("expected string value, got %v", val)
  34. }
  35. exp := "testMsg"
  36. got, _ := val.ToString()
  37. if exp != got {
  38. t.Errorf("expected '%v', got '%v'", exp, got)
  39. }
  40. jsre.Stop(false)
  41. }
  42. func TestNatto(t *testing.T) {
  43. jsre := New("/tmp")
  44. ioutil.WriteFile("/tmp/test.js", []byte(`setTimeout(function(){msg = "testMsg"}, 1);`), os.ModePerm)
  45. err := jsre.Exec("test.js")
  46. if err != nil {
  47. t.Errorf("expected no error, got %v", err)
  48. }
  49. time.Sleep(time.Millisecond * 10)
  50. val, err := jsre.Run("msg")
  51. if err != nil {
  52. t.Errorf("expected no error, got %v", err)
  53. }
  54. if !val.IsString() {
  55. t.Errorf("expected string value, got %v", val)
  56. }
  57. exp := "testMsg"
  58. got, _ := val.ToString()
  59. if exp != got {
  60. t.Errorf("expected '%v', got '%v'", exp, got)
  61. }
  62. jsre.Stop(false)
  63. }
  64. func TestBind(t *testing.T) {
  65. jsre := New("/tmp")
  66. jsre.Bind("no", &testNativeObjectBinding{})
  67. val, err := jsre.Run(`no.TestMethod("testMsg")`)
  68. if err != nil {
  69. t.Errorf("expected no error, got %v", err)
  70. }
  71. pp, err := jsre.PrettyPrint(val)
  72. if err != nil {
  73. t.Errorf("expected no error, got %v", err)
  74. }
  75. t.Logf("no: %v", pp)
  76. jsre.Stop(false)
  77. }
  78. func TestLoadScript(t *testing.T) {
  79. jsre := New("/tmp")
  80. ioutil.WriteFile("/tmp/test.js", []byte(`msg = "testMsg"`), os.ModePerm)
  81. _, err := jsre.Run(`loadScript("test.js")`)
  82. if err != nil {
  83. t.Errorf("expected no error, got %v", err)
  84. }
  85. val, err := jsre.Run("msg")
  86. if err != nil {
  87. t.Errorf("expected no error, got %v", err)
  88. }
  89. if !val.IsString() {
  90. t.Errorf("expected string value, got %v", val)
  91. }
  92. exp := "testMsg"
  93. got, _ := val.ToString()
  94. if exp != got {
  95. t.Errorf("expected '%v', got '%v'", exp, got)
  96. }
  97. jsre.Stop(false)
  98. }