packages feed

jvm-binary-0.4.0: test/Language/JVM/ClassFileSpec.hs

{-# LANGUAGE RecordWildCards   #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
{-# OPTIONS_GHC -fno-warn-name-shadowing #-}
{-# LANGUAGE FlexibleInstances #-}
module Language.JVM.ClassFileSpec where

import           SpecHelper

import           Language.JVM

import           Language.JVM.Attribute.BootstrapMethodsSpec ()
import           Language.JVM.AttributeSpec                  ()
import           Language.JVM.ConstantSpec                   ()
import           Language.JVM.FieldSpec                      ()
import           Language.JVM.MethodSpec                     ()
import           Language.JVM.UtilsSpec                      ()

spec :: Spec
spec =
  it "can do a roundtrip" $ property $ prop_roundtrip_ClassFile

prop_roundtrip_ClassFile :: ClassFile High -> Property
prop_roundtrip_ClassFile = isoRoundtrip

instance Arbitrary (ClassAttributes High) where
  arbitrary = pure $ ClassAttributes [] [] [] [] []

instance Arbitrary (ClassFile High) where
  arbitrary = ClassFile
    <$> arbitrary
    <*> arbitrary
    <*> arbitrary
    <*> (pure ())
    <*> arbitrary
    <*> arbitrary
    <*> arbitrary
    <*> arbitrary
    <*> (resize 2 arbitrary)
    <*> (resize 2 arbitrary)
    <*> arbitrary

  shrink ClassFile{..} = do
    cInterfaces <- shrink cInterfaces
    cAttributes <- shrink cAttributes
    cMethods' <- shrink cMethods'
    cFields' <- shrink cFields'
    return $ClassFile {..}