(var runTest (lambda (name func) ((require "tape") name (lambda (t) (func t) ((. t end)))))) ; Automatically end tests (var eslc (lambda (code) (var fullCode ; wrap in a call (+ "(macro camelify (require \"./index.js\")) (camelify " code ")")) (return ((require "eslisp") fullCode)))) (macro test (lambda (name body) (return `(runTest ,name (lambda (t) ,@body))))) ; - - - (test "var" (((. t equals) (eslc "what-is-this") "whatIsThis;"))) (test "number" (((. t equals) (eslc "34") "34;"))) (test "string" (((. t equals) (eslc "\"hi\"") "'hi';"))) (test "call" (((. t equals) (eslc "(what-is-this)") "whatIsThis();"))) (test "nested" (((. t equals) (eslc "(a (a-b 2))") "a(aB(2));"))) (test "capitals" (((. t equals) (eslc "inner-HTML") "innerHTML;"))) (test "many dashes" (((. t equals) (eslc "hey------there") "heyThere;"))) (test "many statements" (((. t equals) (eslc "(a-b) (c-d)") "aB();\ncD();"))) (test "underscores kept" (((. t equals) (eslc "a_b") "a_b;"))) (test "kept leading and trailing" (((. t equals) (eslc "(macro -a- (lambda () (return 'a))) (-a-)") "a;"))) (test "kept in numbers" (((. t equals) (eslc "-42") "-42;"))) (test "kept in plain dashes" (((. t equals) (eslc "(- (-- a) -1)") "--a - -1;"))) (test "preserves unquote-splicing atom" (((. t equals) (eslc "(macro wrap (lambda (x) (return `(foo ,@x)))) (wrap (a b))") "foo(a, b);"))) (test "also works on invalid names if transformed later" (((. t equals) (eslc "(macro x (lambda () (return `a))) (f (x a-b.c))") "f(a);"))) (test "no-op" (((. t equals) (eslc "(whatIsThis (whatElse what))") "whatIsThis(whatElse(what));")))