291 lines
12 KiB
Elm
291 lines
12 KiB
Elm
module MaintTest exposing (suite)
|
|
|
|
import Expect
|
|
import File exposing (File, FileStatus(..), defaultDir, withName, withParentPath, withStatus)
|
|
import Fixtures exposing (allDirs, dir1, dir2, dir3, dir4, dir5, filteredDir1, filteredDir2, filteredDir3, filteredDir4, filteredDir5, model, windowsDir)
|
|
import Main exposing (Model, defaultModel, filterDestinationDirectories, pathElements, select, truncateConcatenatedNames, windowsPathSep)
|
|
import Test exposing (Test, describe, test)
|
|
|
|
|
|
suite : Test
|
|
suite =
|
|
describe "Main module"
|
|
[ describe "filterDestinationDirectories"
|
|
[ test "identifies filenames containing a given string" <|
|
|
\_ ->
|
|
let
|
|
expected : List File
|
|
expected =
|
|
[ { dir1 | satisfiesFilter = True }
|
|
, dir2
|
|
, dir3
|
|
, { dir4 | satisfiesFilter = True }
|
|
, dir5
|
|
]
|
|
|
|
filteredModel : Model
|
|
filteredModel =
|
|
{ model
|
|
| destinationDirectoryFilter = "dirn"
|
|
, destinationSubdirectories = allDirs
|
|
}
|
|
|> filterDestinationDirectories
|
|
in
|
|
Expect.equal expected filteredModel.destinationSubdirectories
|
|
, test "identifies parent path containing a given string" <|
|
|
\_ ->
|
|
let
|
|
expected : List File
|
|
expected =
|
|
[ dir1
|
|
, dir2
|
|
, dir3
|
|
, { dir4 | satisfiesFilter = True }
|
|
, { dir5 | satisfiesFilter = True }
|
|
]
|
|
|
|
filteredModel : Model
|
|
filteredModel =
|
|
{ model
|
|
| destinationDirectoryFilter = "ext"
|
|
, destinationSubdirectories = allDirs
|
|
}
|
|
|> filterDestinationDirectories
|
|
in
|
|
Expect.equal expected filteredModel.destinationSubdirectories
|
|
, describe "pathElements"
|
|
[ test "pathElements returns the list of nested path and their names" <|
|
|
\_ ->
|
|
let
|
|
elements : List File
|
|
elements =
|
|
pathElements defaultModel [] <| dir5.parentPath ++ defaultModel.pathSeparator ++ dir5.name
|
|
|
|
expected : List File
|
|
expected =
|
|
[ defaultDir
|
|
|> withName "some"
|
|
|> withParentPath "/"
|
|
, defaultDir
|
|
|> withName "path"
|
|
|> withParentPath "/some"
|
|
, defaultDir
|
|
|> withName "extended"
|
|
|> withParentPath "/some/path"
|
|
, defaultDir
|
|
|> withName "dir5"
|
|
|> withParentPath "/some/path/extended"
|
|
]
|
|
in
|
|
Expect.equal expected elements
|
|
, test "pathElements returns the list of nested path and their names under Windows" <|
|
|
\_ ->
|
|
let
|
|
elements : List File
|
|
elements =
|
|
pathElements windowsModel [] <|
|
|
windowsDir.parentPath
|
|
++ windowsModel.pathSeparator
|
|
++ windowsDir.name
|
|
|
|
expected : List File
|
|
expected =
|
|
[ defaultDir
|
|
|> withName "some"
|
|
|> withParentPath "C:"
|
|
, defaultDir
|
|
|> withName "path"
|
|
|> withParentPath "C:\\some"
|
|
, defaultDir
|
|
|> withName "extended"
|
|
|> withParentPath "C:\\some\\path"
|
|
, defaultDir
|
|
|> withName "windows dir"
|
|
|> withParentPath "C:\\some\\path\\extended"
|
|
]
|
|
|
|
windowsModel : Model
|
|
windowsModel =
|
|
{ defaultModel | pathSeparator = windowsPathSep }
|
|
in
|
|
Expect.equal expected elements
|
|
, test "pathElements ignores ." <|
|
|
\_ ->
|
|
let
|
|
elements : List File
|
|
elements =
|
|
pathElements defaultModel [] "."
|
|
|
|
expected : List File
|
|
expected =
|
|
[]
|
|
in
|
|
Expect.equal expected elements
|
|
]
|
|
, test "truncate returns a list of files whose cumulated name length does not exceed given size" <|
|
|
\_ ->
|
|
let
|
|
actual : List File
|
|
actual =
|
|
truncateConcatenatedNames 22 allDirs
|
|
|
|
expected : List File
|
|
expected =
|
|
[ dir3
|
|
, dir4
|
|
, dir5
|
|
]
|
|
in
|
|
Expect.equal expected actual
|
|
]
|
|
, describe "select"
|
|
[ test "select selects only the clicked file when neither CTRL or SHIFT are pressed" <|
|
|
\_ ->
|
|
let
|
|
actual : List File
|
|
actual =
|
|
select model allDirs dir3
|
|
|
|
expected : List File
|
|
expected =
|
|
[ dir1
|
|
, dir2
|
|
, dir3 |> withStatus Selected
|
|
, dir4
|
|
, dir5
|
|
]
|
|
in
|
|
Expect.equal expected actual
|
|
, test "select unselects the clicked file when neither CTRL or SHIFT are pressed" <|
|
|
\_ ->
|
|
let
|
|
actual : List File
|
|
actual =
|
|
select model
|
|
[ dir1
|
|
, dir2
|
|
, clickedFile
|
|
, dir4
|
|
, dir5
|
|
]
|
|
dir3
|
|
|
|
clickedFile : File
|
|
clickedFile =
|
|
dir3 |> withStatus Selected
|
|
|
|
expected : List File
|
|
expected =
|
|
allDirs
|
|
in
|
|
Expect.equal expected actual
|
|
, test "select adds the clicked file to the current selection if it is unselected and CTRL is pressed" <|
|
|
\_ ->
|
|
let
|
|
actual : List File
|
|
actual =
|
|
select
|
|
{ model | isControlPressed = True }
|
|
[ dir1
|
|
, dir2
|
|
, clickedFile
|
|
, dir4
|
|
, dir5
|
|
]
|
|
dir4
|
|
|
|
clickedFile : File
|
|
clickedFile =
|
|
dir3 |> withStatus Selected
|
|
|
|
expected : List File
|
|
expected =
|
|
[ dir1
|
|
, dir2
|
|
, dir3 |> withStatus Selected
|
|
, dir4 |> withStatus Selected
|
|
, dir5
|
|
]
|
|
in
|
|
Expect.equal expected actual
|
|
, test "select removes the clicked file from the current selection if it is selected and CTRL is pressed" <|
|
|
\_ ->
|
|
let
|
|
actual : List File
|
|
actual =
|
|
select
|
|
{ model | isControlPressed = True }
|
|
[ dir1
|
|
, dir2
|
|
, dir3 |> withStatus Selected
|
|
, clickedFile
|
|
, dir5
|
|
]
|
|
clickedFile
|
|
|
|
clickedFile : File
|
|
clickedFile =
|
|
dir4 |> withStatus Selected
|
|
|
|
expected : List File
|
|
expected =
|
|
[ dir1
|
|
, dir2
|
|
, dir3 |> withStatus Selected
|
|
, dir4
|
|
, dir5
|
|
]
|
|
in
|
|
Expect.equal expected actual
|
|
, test "select selects the file range from the first selected to the clicked file when it is after and SHIFT is pressed" <|
|
|
\_ ->
|
|
let
|
|
actual : List File
|
|
actual =
|
|
select
|
|
{ model | isShiftPressed = True }
|
|
[ filteredDir1
|
|
, filteredDir2 |> withStatus Selected
|
|
, filteredDir3
|
|
, filteredDir4
|
|
, filteredDir5
|
|
]
|
|
filteredDir4
|
|
|
|
expected : List File
|
|
expected =
|
|
[ filteredDir1
|
|
, filteredDir2 |> withStatus Selected
|
|
, filteredDir3 |> withStatus Selected
|
|
, filteredDir4 |> withStatus Selected
|
|
, filteredDir5
|
|
]
|
|
in
|
|
Expect.equal expected actual
|
|
, test "select selects the file range from the clicked file to the last selected when it is before and SHIFT is pressed" <|
|
|
\_ ->
|
|
let
|
|
actual : List File
|
|
actual =
|
|
select
|
|
{ model | isShiftPressed = True }
|
|
[ filteredDir1
|
|
, filteredDir2
|
|
, filteredDir3
|
|
, filteredDir4 |> withStatus Selected
|
|
, filteredDir5
|
|
]
|
|
filteredDir2
|
|
|
|
expected : List File
|
|
expected =
|
|
[ filteredDir1
|
|
, filteredDir2 |> withStatus Selected
|
|
, filteredDir3 |> withStatus Selected
|
|
, filteredDir4 |> withStatus Selected
|
|
, filteredDir5
|
|
]
|
|
in
|
|
Expect.equal expected actual
|
|
]
|
|
]
|