module Parsing.Spec (spec) where import Control.Effect import Data.AST import Data.Blob import Data.ByteString.Char8 (pack) import Data.Duration import Data.Language import Data.Maybe import Data.Source import Language.JSON.Grammar (Grammar) import Parsing.TreeSitter import Semantic.Config import SpecHelpers import System.Timeout import TreeSitter.JSON spec :: Spec spec = parallel $ do describe "parseToAST" $ do let source = toJSONSource $ take 10000 [1..] let largeBlob = sourceBlob "large.json" JSON source it "returns a result when the timeout does not expire" $ do let timeout = fromMicroseconds 0 -- Zero microseconds indicates no timeout let parseTask = parseToAST timeout tree_sitter_json largeBlob :: TaskEff (Maybe (AST [] Grammar)) result <- runTaskOrDie parseTask (isJust result) `shouldBe` True it "returns nothing when the timeout expires" $ do let timeout = fromMicroseconds 1000 let parseTask = parseToAST timeout tree_sitter_json largeBlob :: TaskEff (Maybe (AST [] Grammar)) result <- runTaskOrDie parseTask (isNothing result) `shouldBe` True toJSONSource :: Show a => a -> Source toJSONSource = fromUTF8 . pack . show