language-js-0.3.0: t/Test/Iteration.hs
module Test.Iteration where
import Test.Hspec
import Test.Helpers
testIteration = do
shouldBe (testStatement "while (1) {}")
"Right (SWhile [LN \"1\"] (SBlock []))"
-- break is allowed here
shouldBe (testStatement "while (1) {break}")
"Right (SWhile [LN \"1\"] (SBlock [SBreak Nothing]))"
shouldBe (testStatement "while (1) {\nbreak\n;}")
"Right (SWhile [LN \"1\"] (SBlock [SBreak Nothing]))"
shouldBe (testStatement "while (1) x = 1")
"Right (SWhile [LN \"1\"] (SExp (Assignment \"=\" (LI \"x\") (LN \"1\"))))"
shouldBe (testStatement "do {} while (1)")
"Right (SDoWhile (SBlock []) [LN \"1\"])"
shouldBe (testStatement "do {break} while (1)")
"Right (SDoWhile (SBlock [SBreak Nothing]) [LN \"1\"])"
shouldBe (testStatement "do x = 1; while (1)")
"Right (SDoWhile (SExp (Assignment \"=\" (LI \"x\") (LN \"1\"))) [LN \"1\"])"
shouldBe (testStatement "for (;;) {}")
"Right (SFor (ForRegular Nothing Nothing Nothing) (SBlock []))"
shouldBe (testStatement "for (;;) {break}")
"Right (SFor (ForRegular Nothing Nothing Nothing) (SBlock [SBreak Nothing]))"
shouldBe (testStatement "for (;;) x = 1")
"Right (SFor (ForRegular Nothing Nothing Nothing) (SExp (Assignment \"=\" (LI \"x\") (LN \"1\"))))"
shouldBe (testStatement "for (x;;) x = 1")
"Right (SFor (ForRegular (Just (BindVar (LI \"x\") Nothing)) Nothing Nothing) (SExp (Assignment \"=\" (LI \"x\") (LN \"1\"))))"
shouldBe (testStatement "for (x;;x++) x = 1")
"Right (SFor (ForRegular (Just (BindVar (LI \"x\") Nothing)) Nothing (Just (UnaryUpdate \"++\" False (LI \"x\")))) (SExp (Assignment \"=\" (LI \"x\") (LN \"1\"))))"
shouldBe (testStatement "for (x;;x+=1) x = 1")
"Right (SFor (ForRegular (Just (BindVar (LI \"x\") Nothing)) Nothing (Just (Assignment \"+=\" (LI \"x\") (LN \"1\")))) (SExp (Assignment \"=\" (LI \"x\") (LN \"1\"))))"
shouldBe (testStatement "for (;x&&y;) {}")
"Right (SFor (ForRegular Nothing (Just (Operation \"&&\" (LI \"x\") (LI \"y\"))) Nothing) (SBlock []))"
shouldBe (testStatement "for (x in a) {}")
"Right (SFor (ForIn (BindVar (LI \"x\") Nothing) (LI \"a\")) (SBlock []))"
shouldBe (testStatement "for (let x in a) {}")
"Right (SFor (ForInV \"let\" (BindVar (LI \"x\") Nothing) (LI \"a\")) (SBlock []))"
shouldBe (testStatement "for (x of a) {}")
"Right (SFor (ForOf (BindVar (LI \"x\") Nothing) (LI \"a\")) (SBlock []))"
shouldBe (testStatement "for (let x of a) {}")
"Right (SFor (ForOfV \"let\" (BindVar (LI \"x\") Nothing) (LI \"a\")) (SBlock []))"