module Interpreter.Function.SprintfSpec (spec, main) where import Helpers main :: IO () main = hspec spec fname = "sprintf" checkSuccess :: [Expression] -> Text -> Expectation checkSuccess = checkExprsSuccess fname checkError :: [Expression] -> String -> Expectation checkError = checkExprsError fname spec :: Spec spec = do it "should fail with no argument" (checkError [] "Expects a string as its first argument") it "should succeed with one argument" (checkSuccess ["hello"] "hello") -- puppet sprintf accepts one arg it "should work with multiple arguments" (checkSuccess ["hello %s %s", "world", "!"] "hello world !") it "should work with one string argument" (checkSuccess ["hello %s", "world"] "hello world" ) it "should work with one int argument" (checkSuccess ["hello %d", 10] "hello 10" ) it "should fail if arg is not provided" (checkError ["hello %s"] "not enough arguments") it "should fail when a wrong format instruction is used" (checkError ["hello %d", "world"] "Don't know how to convert this to a number" ) it "should fail when a wrong format instruction is used" (checkError ["hello %f", "world"] "Don't know how to convert this to a number" ) it "should work with one int argument" (checkSuccess ["hello %f", 1.0] "hello 1.0" ) it "should work with one int argument" (checkSuccess ["hello %.1f", 1.23] "hello 1.2" ) it "should pad with zeroes" (checkSuccess ["hello %03d", 10] "hello 010") it "should pad with spaces" (checkSuccess ["hello % 3d", 10] "hello 10") it "should format integers" (checkSuccess ["%+05d", 23] "+0023") it "should format floats" (checkSuccess ["%+.2f", 2.7182818284590451] "+2.72") it "should format large floats" (pendingWith "Minor formatting difference" >> checkSuccess ["%+.2e", 27182818284590451] "+2.72e+16") it "should work with " (checkSuccess ["%5d" , 5] " 5") it "should work with 0" (checkSuccess ["%05d" , 5] "00005") it "should work with - " (checkSuccess ["%-5d" , 5] "5 ") it "should work with -0" (checkSuccess ["%-05d" , 5] "5 ") it "should work with + " (checkSuccess ["%+5d" , 5] " +5") it "should work with + 0" (checkSuccess ["%+05d" , 5] "+0005") it "should work with +- " (checkSuccess ["%+-5d" , 5] "+5 ") it "should work with +-0" (checkSuccess ["%+-05d", 5] "+5 ") it "should perform more complex formatting" (pendingWith "# is not yet supported" >> checkSuccess [ "<%.8s:%#5o %#8X (%-8s)>", "overlongstring", 23, 48879, "foo" ] "")