packages feed

hlibsass-0.1.9.0: tests/Main.hs

{-# LANGUAGE BangPatterns #-}
{-# LANGUAGE CPP          #-}
import           Bindings.Libsass
import           Foreign
import           Foreign.C
import           Test.Hspec

simpleCompile :: String -> IO String
simpleCompile str = do
    cstr <- newCString str
    ctx <- sass_make_data_context cstr
    status <- sass_compile_data_context ctx
    if status /= 0
        then do
            sass_delete_data_context ctx
            return ""
        else do
            cres <- sass_context_get_output_string (castPtr ctx)
            !res <- peekCString cres
            sass_delete_data_context ctx
            return res

sampleInput :: String
sampleInput = "foo { margin: 21px * 2; }"

sampleOutput :: String
sampleOutput = "foo {\n  margin: 42px; }\n"

main :: IO ()
main = hspec $
  describe "Libsass" $ do
    it "should correctly compile simple expression" $
        simpleCompile sampleInput `shouldReturn` sampleOutput

#ifndef EXTERNAL_LIBSASS
    it "should report correct version" $ do
        str <- peekCString libsass_version
        str `shouldBe` "3.6.3"
#endif

    it "should support quoted strings" $ withCString "sample" $ \cstr -> do
        str <- sass_make_qstring cstr
        sass_string_is_quoted str `shouldReturn` True

    it "should correctly combine two SassValues" $ withCString "" $ \unit -> do
        val1 <- sass_make_number 1.0 unit
        val2 <- sass_make_number 2.0 unit
        val3 <- sass_value_op (fromIntegral $ fromEnum SassAdd) val1 val2
        result <- sass_number_get_value val3
        sass_delete_value val1
        sass_delete_value val2
        sass_delete_value val3
        result `shouldBe` 3.0