content: {-|
  Copyright  :  (C) 2019, QBayLogic B.V.
  License    :  BSD2 (see the file LICENSE)
  Maintainer :  QBayLogic B.V. <devops@qbaylogic.com>
  -}
  {-# LANGUAGE QuasiQuotes #-}
  
  module Clash.Tests.Util.Interpolate where
  
  import qualified Clash.Util.Interpolate as I
  
  import Test.Tasty
  import Test.Tasty.HUnit
  
  test1, test2, test3, test4, test5, test6, test7, test8, test9 :: String
  test1 = [I.i| Simple |]
  test2 = [I.i|
    Single line
  |]
  test3 = [I.i|
  
    Surrounded by newlines
  
  |]
  test4 = [I.i|
    One
    Two
    Three
  |]
  test5 = [I.i|
    One
      Two
    Three
  |]
  test6 = [I.i|
    #{test5}
  |]
  
  test7 = [I.i|
    The big test:
  
    #{test5}
  |]
  
  test8 = [I.i|
    looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong word
  |]
  
  data SomeRecord = SomeRecord { getField :: Int }
  someRecord :: SomeRecord
  someRecord = SomeRecord 5
  -- test that we can escape closing '}'
  test9 = [I.i| #{ "\\" ++ show (getField someRecord { getField=6*7
                                                    \}
                                )
                 }
              |]
  
  tests :: TestTree
  tests =
    testGroup
      "Clash.Tests.Core.Util.Interpolation"
      [ testCase "test1" $ "Simple" @=? test1
      , testCase "test2" $ "Single line" @=? test2
      , testCase "test3" $ "Surrounded by newlines" @=? test3
      , testCase "test4" $ "One Two Three" @=? test4
      , testCase "test5" $ "One\n  Two\nThree" @=? test5
      , testCase "test6" $ test5 @=? test6
      , testCase "test7" $ test7 @?= ("The big test:\n\n" ++ test5)
      , testCase "test8" $ test8 @?= "looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong \nword"
      , testCase "test9" $ test9 @?= "\\42"
      ]
  