packages feed

qute-cli-0.1.0: test/KTest.hs

-- SPDX-FileCopyrightText: 2026 Sören Tempel <soeren+git@soeren-tempel.net>
--
-- SPDX-License-Identifier: GPL-3.0-only
{-# LANGUAGE OverloadedStrings #-}

module KTest (ktestTests) where

import Data.Binary (decode, encode)
import Data.ByteString.Lazy qualified as BL
import Data.KTest
import Test.Tasty
import Test.Tasty.HUnit

rawDecode :: FilePath -> IO (KTest, BL.ByteString)
rawDecode fp = do
  content <- BL.readFile fp
  pure (decode content, content)

------------------------------------------------------------------------

ktestTests :: TestTree
ktestTests =
  testGroup
    "KTest"
    [ testCase "single-variable.ktest" $ do
        (ktest, content) <- rawDecode "test/testdata/single-variable.ktest"

        let expected =
              KTest
                { ktArgs = ["shift-test.bc"],
                  ktObjs =
                    [ KTestObj
                        { objName = "x",
                          objBytes = "\NUL\NUL\NUL\NUL"
                        }
                    ]
                }

        ktest @?= expected
        encode expected @?= content,
      testCase "multiple-variables.ktest" $ do
        (ktest, content) <- rawDecode "test/testdata/multiple-variables.ktest"

        let expected =
              KTest
                { ktArgs = ["main.bc"],
                  ktObjs =
                    [ KTestObj "first" "\NUL\NUL\NUL@",
                      KTestObj "second" "\SOH\NUL\NUL@"
                    ]
                }

        ktest @?= expected
        encode expected @?= content
    ]