import Data.String.Utils (split)
import Network.URI (
URI(..),
+ URIAuth(..),
parseAbsoluteURI,
parseURIReference,
relativeTo,
- uriRegName,
+ uriRegName
)
import Test.HUnit (Assertion, assertEqual)
import Test.Framework (Test, testGroup)
import Test.Framework.Providers.HUnit (testCase)
-import Text.Regex.Posix
+import Text.Regex.Posix ((=~))
-- Distinguish between URLs (Strings) and URIs as provided by the
-- Network.URI module.
let reverse_components = reverse components in
case reverse_components of
[] -> Nothing
- (x:xs) -> Just x
+ (x:_) -> Just x
where
parse_result = parseURIReference url
make_absolute_uri relative_uri =
relativeTo relative_uri base_uri
where
- base_uri = URI { uriScheme = "https://",
- uriAuthority = "lwn.net",
+ base_auth = URIAuth { uriUserInfo = "",
+ uriRegName = "lwn.net",
+ uriPort = "" }
+ base_uri = URI { uriScheme = "https:",
+ uriAuthority = Just base_auth,
uriPath = "/",
uriQuery = "",
uriFragment = "" }
let abs_result = make_absolute_uri relative_uri in
case abs_result of
Nothing -> Nothing
- Just abs_uri -> show abs_uri
+ Just abs_uri -> Just $ show abs_uri
where
- parse_result = parseURIReference url
-
+ parse_result = parseURIReference relative_url
+-- | Like 'make_absolute_url', except returns its input instead of
+-- 'Nothing' if the absolution fails.
+try_make_absolute_url :: URL -> URL
+try_make_absolute_url url =
+ case make_absolute_url url of
+ Nothing -> url
+ Just abs_url -> abs_url
-- | A List of LWN URLs to use during testing.
lwn_urls :: [URL]