packages feed

second-transfer-0.7.1.0: tests/tests-hs-src/Tests/Utils.hs

{-# LANGUAGE OverloadedStrings #-}
module Tests.Utils where


import qualified Data.ByteString                  as B

import           Test.HUnit

import           SecondTransfer                         (Headers)
import           SecondTransfer.Utils.HTTPHeaders 
import           SecondTransfer.Http1.Parse    (locateCRLFs)


testLowercaseHeaders :: Test
testLowercaseHeaders = TestCase $ do 
    let 
        irregular = [
            ("A", "B"),
            ("C-D", "D")
            ] :: Headers
        regular = lowercaseHeaders irregular
    assertEqual "lowercase" regular [
        ("a", "B"),
        ("c-d", "D")
        ]
    assertEqual "test-lowercase-1" (headersAreLowercase irregular) False
    assertEqual "test-lowercase-2" (headersAreLowercase regular) True


testCRLFLocate :: Test 
testCRLFLocate = TestCase $ do 
    let 
        input_text = "hello\r\nworld"
        (positions, length_, lastchar) = locateCRLFs 0 [] 0 input_text
    assertEqual "position-is-5.position" (head positions) 5
    assertEqual "position-is-5.length" length_ (B.length input_text)
    assertEqual "position-is-5.lastchar" lastchar (fromIntegral . fromEnum $ 'd')


    let 
        input_text_2 = "hello\r\nworld\r\n\r\n"
        (positions, length_, lastchar) = locateCRLFs 0 [] 0 input_text_2
    assertEqual "many-positions.position" positions [14,12,5]
    assertEqual "many-positions.length" length_ (B.length input_text_2)
    assertEqual "many-positions.lastchar" lastchar (fromIntegral . fromEnum $ '\n')


testReplaceHostByAuthority :: Test 
testReplaceHostByAuthority = TestCase $ do 
    let 
        headers_pre = [
            ("A", "B"),
            ("C-D", "D"),
            ("Host", "D")
            ] :: Headers
        regular = toList. replaceHostByAuthority . fromList . lowercaseHeaders $ headers_pre
    -- Do not pass in headers with uppercase
    assertEqual "replace-host-by-authority" 
        [
            (":authority", "D"),
            ("a", "B"),
            ("c-d", "D")
        ]
        regular