content: module Interpreter.Function.LookupSpec (spec, main) where
  
  import Helpers
  
  main :: IO ()
  main = hspec spec
  
  fname :: Text
  fname = "lookup"
  
  expectedErrMsg :: String
  expectedErrMsg = "Wrong set of arguments"
  
  -- See dummyFacts defined in Pure.hs
  testkey :: Expression
  testkey = "foo"
  
  expectedValue :: Text
  expectedValue = "dummy"
  
  checkSuccess :: [Expression] -> Text -> Expectation
  checkSuccess = checkExprsSuccess fname
  
  checkError :: [Expression] -> String -> Expectation
  checkError = checkExprsError fname
  
  boolDatatype, stringDatatype :: Expression
  boolDatatype = Terminal (UDataType UDTBoolean)
  stringDatatype = Terminal (UDataType (UDTString Nothing Nothing))
  
  spec :: Spec
  spec = do
    it "should fail with no argument" (checkError [] expectedErrMsg)
    it "should succeed with one argument" (checkSuccess [testkey] expectedValue)
    it "should succeed with 4 arguments" (checkSuccess [testkey, stringDatatype, "unique", "default"] expectedValue)
    it "should fail with an unknown merge strategy" (checkError [testkey, stringDatatype, "joe", "default"] "Unknown merge strategy")
    it "should succeed with two arguments, the second one being a datatype" (checkSuccess [testkey, stringDatatype] expectedValue)
    it "should fail when the type mismatched" (checkError [testkey, boolDatatype] "Datatype mismatched")
    it "should fail with two arguments both strings" (checkError [testkey, "default"] expectedErrMsg)
  