nirum-0.4.0: test/Nirum/Targets/PythonSpec.hs
{-# LANGUAGE OverloadedLists #-}
{-# LANGUAGE ScopedTypeVariables #-}
module Nirum.Targets.PythonSpec where
import qualified Data.Map.Strict as M
import System.FilePath ((</>))
import Test.Hspec.Meta
import Nirum.Constructs.Module (Module (Module))
import Nirum.Package.Metadata (Target (compilePackage))
import Nirum.Targets.Python
( Source (Source)
, parseModulePath
)
import Nirum.Targets.Python.CodeGenSpec hiding (spec)
spec :: Spec
spec = do
describe "compilePackage" $ do
it "returns a Map of file paths and their contents to generate" $ do
let (Source pkg _) = makeDummySource $ Module [] Nothing
files = compilePackage pkg
directoryStructure =
[ "src-py2" </> "foo" </> "__init__.py"
, "src-py2" </> "foo" </> "bar" </> "__init__.py"
, "src-py2" </> "qux" </> "__init__.py"
, "src" </> "foo" </> "__init__.py"
, "src" </> "foo" </> "bar" </> "__init__.py"
, "src" </> "qux" </> "__init__.py"
, "setup.py"
, "MANIFEST.in"
]
M.keysSet files `shouldBe` directoryStructure
it "creates an emtpy Python package directory if necessary" $ do
let (Source pkg _) = makeDummySource' ["test"] (Module [] Nothing)
[]
files = compilePackage pkg
directoryStructure =
[ "src-py2" </> "test" </> "__init__.py"
, "src-py2" </> "test" </> "foo" </> "__init__.py"
, "src-py2" </> "test" </> "foo" </> "bar" </> "__init__.py"
, "src-py2" </> "test" </> "qux" </> "__init__.py"
, "src" </> "test" </> "__init__.py"
, "src" </> "test" </> "foo" </> "__init__.py"
, "src" </> "test" </> "foo" </> "bar" </> "__init__.py"
, "src" </> "test" </> "qux" </> "__init__.py"
, "setup.py"
, "MANIFEST.in"
]
M.keysSet files `shouldBe` directoryStructure
it "generates renamed package dirs if renames are configured" $ do
let (Source pkg _) = makeDummySource' [] (Module [] Nothing)
[(["foo"], ["quz"])]
files = compilePackage pkg
directoryStructure =
[ "src-py2" </> "quz" </> "__init__.py"
, "src-py2" </> "quz" </> "bar" </> "__init__.py"
, "src-py2" </> "qux" </> "__init__.py"
, "src" </> "quz" </> "__init__.py"
, "src" </> "quz" </> "bar" </> "__init__.py"
, "src" </> "qux" </> "__init__.py"
, "setup.py"
, "MANIFEST.in"
]
M.keysSet files `shouldBe` directoryStructure
let (Source pkg' _) = makeDummySource' [] (Module [] Nothing)
[(["foo", "bar"], ["bar"])]
files' = compilePackage pkg'
directoryStructure' =
[ "src-py2" </> "foo" </> "__init__.py"
, "src-py2" </> "bar" </> "__init__.py"
, "src-py2" </> "qux" </> "__init__.py"
, "src" </> "foo" </> "__init__.py"
, "src" </> "bar" </> "__init__.py"
, "src" </> "qux" </> "__init__.py"
, "setup.py"
, "MANIFEST.in"
]
M.keysSet files' `shouldBe` directoryStructure'
specify "parseModulePath" $ do
parseModulePath "" `shouldBe` Nothing
parseModulePath "foo" `shouldBe` Just ["foo"]
parseModulePath "foo.bar" `shouldBe` Just ["foo", "bar"]
parseModulePath "foo.bar-baz" `shouldBe` Just ["foo", "bar-baz"]
parseModulePath "foo." `shouldBe` Nothing
parseModulePath "foo.bar." `shouldBe` Nothing
parseModulePath ".foo" `shouldBe` Nothing
parseModulePath ".foo.bar" `shouldBe` Nothing
parseModulePath "foo..bar" `shouldBe` Nothing
parseModulePath "foo.bar>" `shouldBe` Nothing
parseModulePath "foo.bar-" `shouldBe` Nothing