{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
module Test.WebDriverWrapper.Constants (chromeDriverArchiveDirectory, chromeDriverArchivePath, chromeDriverArchIndex, chromeDriverVersionsUrl, chromeDriverPath, geckoDriverPath, defaultPath, defaultSeleniumJarUrl, desiredPlatform, getGeckoDriverDownloadUrl, geckoDriverVersionSource, downloadPath, geckoArchivePath, fileFormat, seleniumPath, seleniumLogPath) where
import Data.String.Interpolate (i)
import qualified System.Info as SI
import System.Directory (getXdgDirectory, XdgDirectory (XdgData))
import System.FilePath ((</>))
defaultPath :: IO FilePath
defaultPath :: IO FilePath
defaultPath = XdgDirectory -> FilePath -> IO FilePath
getXdgDirectory XdgDirectory
XdgData FilePath
"haskell-webdriver-wrapper"
downloadPath :: IO FilePath
downloadPath :: IO FilePath
downloadPath = (FilePath -> FilePath -> FilePath
</> FilePath
desiredPlatform) (FilePath -> FilePath) -> IO FilePath -> IO FilePath
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IO FilePath
defaultPath
geckoArchivePath :: IO FilePath
geckoArchivePath :: IO FilePath
geckoArchivePath = (FilePath -> FilePath -> FilePath
</> FilePath
archive) (FilePath -> FilePath) -> IO FilePath -> IO FilePath
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IO FilePath
downloadPath
where
archive :: FilePath
archive = FilePath
"geckodriver" FilePath -> FilePath -> FilePath
forall a. Semigroup a => a -> a -> a
<> FilePath
fileFormat
geckoDriverPath :: IO FilePath
geckoDriverPath :: IO FilePath
geckoDriverPath = (FilePath -> FilePath -> FilePath
</> FilePath
"geckodriver") (FilePath -> FilePath) -> IO FilePath -> IO FilePath
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IO FilePath
downloadPath
chromeDriverArchivePath :: IO FilePath
chromeDriverArchivePath :: IO FilePath
chromeDriverArchivePath = (FilePath -> FilePath -> FilePath
</> FilePath
"chromedriver.zip") (FilePath -> FilePath) -> IO FilePath -> IO FilePath
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IO FilePath
downloadPath
chromeDriverArchiveDirectory :: IO FilePath
chromeDriverArchiveDirectory :: IO FilePath
chromeDriverArchiveDirectory = (FilePath -> FilePath -> FilePath
</> FilePath
chromeDriverRelativeZipPath) (FilePath -> FilePath) -> IO FilePath -> IO FilePath
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IO FilePath
downloadPath
chromeDriverPath :: IO FilePath
chromeDriverPath :: IO FilePath
chromeDriverPath = (FilePath -> FilePath -> FilePath
</> FilePath
"chromedriver") (FilePath -> FilePath) -> IO FilePath -> IO FilePath
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IO FilePath
downloadPath
seleniumPath :: IO FilePath
seleniumPath :: IO FilePath
seleniumPath = (FilePath -> FilePath -> FilePath
</> FilePath
"selenium.jar") (FilePath -> FilePath) -> IO FilePath -> IO FilePath
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IO FilePath
downloadPath
seleniumLogPath :: IO FilePath
seleniumLogPath :: IO FilePath
seleniumLogPath = (FilePath -> FilePath -> FilePath
</> FilePath
"selenium.log") (FilePath -> FilePath) -> IO FilePath -> IO FilePath
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IO FilePath
defaultPath
defaultSeleniumJarUrl :: String
defaultSeleniumJarUrl :: FilePath
defaultSeleniumJarUrl = FilePath
"https://selenium-release.storage.googleapis.com/3.141/selenium-server-standalone-3.141.59.jar"
geckoDriverVersionSource :: String
geckoDriverVersionSource :: FilePath
geckoDriverVersionSource = FilePath
"https://api.github.com/repos/mozilla/geckodriver/releases/latest"
getGeckoDriverDownloadUrl :: String -> String
getGeckoDriverDownloadUrl :: FilePath -> FilePath
getGeckoDriverDownloadUrl FilePath
version = [i|https://github.com/mozilla/geckodriver/releases/download/#{version}/geckodriver-#{version}-#{platform}#{format}|]
where
platform :: FilePath
platform = FilePath
desiredPlatform
format :: FilePath
format = FilePath
fileFormat
chromeDriverVersionsUrl :: String
chromeDriverVersionsUrl :: FilePath
chromeDriverVersionsUrl = FilePath
"https://googlechromelabs.github.io/chrome-for-testing/known-good-versions-with-downloads.json"
fileFormat :: String
fileFormat :: FilePath
fileFormat = case FilePath
SI.os of
FilePath
"windows" -> FilePath
".zip"
FilePath
"mingw32" -> FilePath
".zip"
FilePath
"darwrin" -> FilePath
".tar.gz"
FilePath
"linux" -> FilePath
".tar.gz"
FilePath
_ -> FilePath
".tar.gz"
desiredPlatform :: String
desiredPlatform :: FilePath
desiredPlatform = case (FilePath
SI.os, FilePath
SI.arch) of
(FilePath
"windows", FilePath
"x86_64") -> FilePath
"win64"
(FilePath
"windows", FilePath
"aarch64") -> FilePath
"win-aarch64"
(FilePath
"windows", FilePath
"i386") -> FilePath
"win32"
(FilePath
"mingw32", FilePath
"x86_64") -> FilePath
"win64"
(FilePath
"mingw32", FilePath
"aarch64") -> FilePath
"win-aarch64"
(FilePath
"mingw32", FilePath
"i386") -> FilePath
"win32"
(FilePath
"darwin", FilePath
"x86_64") -> FilePath
"macos"
(FilePath
"darwin", FilePath
"aarch64") -> FilePath
"macos-aarch64"
(FilePath
"linux", FilePath
"x86_64") -> FilePath
"linux64"
(FilePath
"linux", FilePath
"aarch64") -> FilePath
"linux-aarch64"
(FilePath
"linux", FilePath
"i386") -> FilePath
"linux32"
(FilePath, FilePath)
_ -> FilePath
"linux64"
chromeDriverArchIndex :: Int
chromeDriverArchIndex :: Int
chromeDriverArchIndex = case (FilePath
SI.os, FilePath
SI.arch) of
(FilePath
"linux", FilePath
"x86_64") -> Int
0
(FilePath
"darwin", FilePath
"aarch64") -> Int
1
(FilePath
"darwin", FilePath
"x86_64") -> Int
2
(FilePath
"windows", FilePath
"i386") -> Int
3
(FilePath
"mingw32", FilePath
"i386") -> Int
3
(FilePath
"windows", FilePath
"x86_64") -> Int
4
(FilePath, FilePath)
_ -> Int
0
chromeDriverRelativeZipPath :: FilePath
chromeDriverRelativeZipPath :: FilePath
chromeDriverRelativeZipPath = FilePath
"chromedriver-" FilePath -> FilePath -> FilePath
forall a. Semigroup a => a -> a -> a
<> case (FilePath
SI.os, FilePath
SI.arch) of
(FilePath
"linux", FilePath
"x86_64") -> FilePath
"linux64"
(FilePath
"darwin", FilePath
"aarch64") -> FilePath
"mac-arm64"
(FilePath
"darwin", FilePath
"x86_64") -> FilePath
"max-x64"
(FilePath
"windows", FilePath
"i386") -> FilePath
"win32"
(FilePath
"mingw32", FilePath
"i386") -> FilePath
"win32"
(FilePath
"windows", FilePath
"x86_64") -> FilePath
"win64"
(FilePath, FilePath)
_ -> FilePath
"linux64"