{-# LANGUAGE OverloadedStrings #-} module Test.Parser.Rfc2616 where -------------------------------------------------------------------------------- import Data.Attoparsec import Data.ByteString as W import qualified Data.ByteString.Char8 as C import Test.Parser.Parser import Test.HUnit -------------------------------------------------------------------------------- import Network.Parser.RfcCommon import Network.Parser.Rfc2234 import Network.Parser.Rfc2616 import Network.Types -------------------------------------------------------------------------------- -- Data parseGetData = C.concat [ "GET /favicon.ico HTTP/1.1\r\n" , "Host: 0.0.0.0=5000\r\n" , "User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9) Gecko/2008061015 Firefox/3.0\r\n" , "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n" , "Accept-Language: en-us,en;q=0.5\r\n" , "Accept-Encoding: gzip,deflate\r\n" , "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n" , "Keep-Alive: 300\r\n" , "Connection: keep-alive\r\n" , "\r\n" ] tests = TestList $ fmap TestCase lst lst = [test_octet, test_char, test_upalpha, test_loalpha, test_lws, test_quotedString, test_requestline, test_requestline2] -- Tests test_octet = ae "octet" (Just 48) (aP octet "01") test_char = ae "char" (Just 65) (aP char "AbC") test_upalpha = ae "upalpha" (Just 66) (aP upalpha "Ba") test_loalpha = ae "loalpha" (Just 122) (aP loalpha "zE") test_lws = ae "lws" (Just 32) (aP lws "\n\t asd") test_quotedString = ae "quotedString" (p "Take this") (aP quotedString "\"Take this\"") test_requestline = ae "requestLine" (Just (GET, Asterisk, http11)) (aP requestLine "GET * HTTP/1.1\n") test_requestline2 = ae "requestLine" (Just (GET, AbsolutePath "/index.html", http11)) (aP requestLine "GET /index.html HTTP/1.1\n") test_requestline3 = ae "requestLine" (Just (GET, RelativeRef URI { uriScheme = "" , uriAuthority = Nothing , uriPath = "/my.cgi" , uriQuery = "?foo=bar&john=doe" , uriFragment = ""} , http11)) (aP requestLine "GET /my.cgi?foo=bar&john=doe HTTP/1.1\n") test_request = ae "request" (Just Request { rqMethod = GET , rqUri = AbsolutePath "/favicon.ico" , rqVersion = http11 , rqHeaders = [ ("Host","0.0.0.0=5000") , ("User-Agent","Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9) Gecko/2008061015 Firefox/3.0") , ("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8") , ("Accept-Language","en-us,en;q=0.5") , ("Accept-Encoding","gzip,deflate") , ("Accept-Charset","ISO-8859-1,utf-8;q=0.7,*;q=0.7") , ("Keep-Alive","300") , ("Connection","keep-alive")] , rqBody = ""}) (aP request parseGetData)