{-# LANGUAGE OverloadedLists #-} module Interpreter.ClassSpec (spec) where import Test.Hspec import Control.Lens import qualified Data.Text as Text import Helpers spec = do describe "Class" $ do it "should work when using several include statements" $ pureCatalog (Text.unlines ["class foo {}", "include foo", "include foo"]) `shouldSatisfy` (has _Right) it "should work when using class before include" $ pureCatalog (Text.unlines ["class foo {}", "class { 'foo': }", "include foo"]) `shouldSatisfy` (has _Right) it "should fail when using include before class" $ pureCatalog (Text.unlines ["class foo {}", "include foo", "class { 'foo': }" ]) `shouldSatisfy` (has _Left) it "should fail if the class is not defined" $ pureCatalog (Text.unlines ["include foo"]) `shouldSatisfy` (has _Left) describe "Parameters" $ do it "should fail when declaring a class with an unknown params" $ pureCatalog (Text.unlines ["class foo ($param0){}", "class {'foo': param1 => 1 }"]) `shouldSatisfy` (has _Left) it "should succeed when declaring a class with a correct param" $ pureCatalog (Text.unlines ["class foo ($param0){}", "class {'foo': param0 => 1 }"]) `shouldSatisfy` (has _Right) it "should fail when the type of the attribute is wrong" $ do pureCatalog (Text.unlines ["class foo (String $param0){}", "class {'foo': param0 => 1 }"]) `shouldSatisfy` (has _Left) it "should fail when declaring with a missing param" $ do pureCatalog (Text.unlines ["class foo ($param0){}", "class {'foo': }"]) `shouldSatisfy` (has _Left) it "should succeed with missing param and an optional type" $ do pureCatalog (Text.unlines ["class foo (Optional[String] $param0){}", "class {'foo': }"]) `shouldSatisfy` (has _Right)