bittorrent-0.0.0.3: tests/Data/Torrent/MagnetSpec.hs
{-# OPTIONS -fno-warn-orphans #-}
module Data.Torrent.MagnetSpec (spec) where
import Control.Applicative
import Data.Maybe
import Data.Monoid
import Test.Hspec
import Test.QuickCheck
import Test.QuickCheck.Instances ()
import Network.URI
import Data.Torrent.InfoHash
import Data.Torrent.Magnet
import Data.Torrent.InfoHashSpec ()
instance Arbitrary URIAuth where
arbitrary = URIAuth <$> arbitrary <*> arbitrary <*> arbitrary
instance Arbitrary URI where
arbitrary
= pure $ fromJust $ parseURI "http://ietf.org/1737.txt?a=1&b=h#123"
instance Arbitrary Magnet where
arbitrary = Magnet <$> arbitrary <*> arbitrary
<*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
<*> arbitrary <*> arbitrary <*> pure mempty
magnetEncoding :: Magnet -> Bool
magnetEncoding m = parseMagnet (renderMagnet m) == Just m
spec :: Spec
spec = do
describe "Magnet" $ do
it "properly encoded" $ property $ magnetEncoding
it "parse base32" $ do
let magnet = "magnet:?xt=urn:btih:CT76LXJDDCH5LS2TUHKH6EUJ3NYKX4Y6"
let ih = InfoHash "\DC4\255\229\221#\CAN\143\213\203S\161\212\DEL\DC2\137\219p\171\243\RS"
parseMagnet magnet `shouldBe` Just (nullMagnet ih)
it "parse base16" $ do
let magnet = "magnet:?xt=urn:btih:0123456789abcdef0123456789abcdef01234567"
let ih = InfoHash "\SOH#Eg\137\171\205\239\SOH#Eg\137\171\205\239\SOH#Eg"
parseMagnet magnet `shouldBe` Just (nullMagnet ih)