packages feed

ribosome-host-0.9.9.9: test/Ribosome/Host/Test/ApiInfoTest.hs

module Ribosome.Host.Test.ApiInfoTest where

import Polysemy.Test (Hedgehog, UnitTest, assertLeft, assertRight, evalEither, runTestAuto, (===))

import Ribosome.Host.Data.ApiInfo (apiInfo, functions, types)
import Ribosome.Host.Data.ApiType (
  ApiPrim (Boolean, Dictionary, Float, Integer, LuaRef, Object, String, Void),
  ApiType (Array, Ext, Prim),
  parseApiType,
  )

checkType ::
  Member (Hedgehog IO) r =>
  ApiType ->
  ByteString ->
  Sem r ()
checkType target spec =
  assertRight target (parseApiType spec)

test_parseType :: UnitTest
test_parseType =
  runTestAuto do
    checkType (Array (Prim Integer) (Just 5)) "ArrayOf(Integer, 5)"
    checkType (Array (Array (Ext "Buffer") (Just 2)) (Just 3)) "ArrayOf(ArrayOf(Buffer, 2), 3)"
    checkType (Array (Prim Boolean) Nothing) "ArrayOf(Boolean)"
    checkType (Array (Prim Object) Nothing) "Array"
    checkType (Prim Float) "Float"
    checkType (Prim String) "String"
    checkType (Prim Dictionary) "Dictionary"
    checkType (Prim Object) "Object"
    checkType (Prim Void) "void"
    checkType (Prim LuaRef) "LuaRef"
    assertLeft "Parsed (Prim Boolean) but got leftovers: s" (parseApiType "Booleans")
    info <- evalEither =<< embed apiInfo
    246 === length (functions info)
    3 === length (types info)