250 lines
9.4 KiB
Elm
250 lines
9.4 KiB
Elm
module FileTest exposing (suite)
|
|
|
|
import Expect
|
|
import File exposing (File, FileStatus(..), extendSelectionToNext, extendSelectionToPrevious, selectNext, selectPrevious, selectSimilar, withStatus)
|
|
import Fixtures exposing (filteredDir1, filteredDir2, filteredDir3, filteredDir4, filteredDir5, filteredDir6, filteredDir7, filteredDir8)
|
|
import Iso8601
|
|
import Json.Decode exposing (Decoder, decodeString)
|
|
import Test exposing (Test, describe, test)
|
|
import Time exposing (millisToPosix)
|
|
|
|
|
|
suite : Test
|
|
suite =
|
|
describe "File module"
|
|
[ test "selectNext selects the next file" <|
|
|
\_ ->
|
|
let
|
|
actual : List File
|
|
actual =
|
|
selectNext
|
|
[ filteredDir1
|
|
, filteredDir2 |> withStatus Selected
|
|
, filteredDir3
|
|
, filteredDir4
|
|
, filteredDir5
|
|
]
|
|
|
|
expected : List File
|
|
expected =
|
|
[ filteredDir1
|
|
, filteredDir2
|
|
, filteredDir3 |> withStatus Selected
|
|
, filteredDir4
|
|
, filteredDir5
|
|
]
|
|
in
|
|
Expect.equal expected actual
|
|
, test "selectNext does nothing when the currently selected file is the last" <|
|
|
\_ ->
|
|
let
|
|
actual : List File
|
|
actual =
|
|
selectNext expected
|
|
|
|
expected : List File
|
|
expected =
|
|
[ filteredDir1
|
|
, filteredDir2
|
|
, filteredDir3
|
|
, filteredDir4
|
|
, filteredDir5 |> withStatus Selected
|
|
]
|
|
in
|
|
Expect.equal expected actual
|
|
, test "selectNext selects the last file in a list when none is selected" <|
|
|
\_ ->
|
|
let
|
|
actual : List File
|
|
actual =
|
|
selectNext
|
|
[ filteredDir1
|
|
, filteredDir2
|
|
, filteredDir3
|
|
, filteredDir4
|
|
, filteredDir5
|
|
]
|
|
|
|
expected : List File
|
|
expected =
|
|
[ filteredDir1
|
|
, filteredDir2
|
|
, filteredDir3
|
|
, filteredDir4
|
|
, filteredDir5 |> withStatus Selected
|
|
]
|
|
in
|
|
Expect.equal expected actual
|
|
, test "selectPrevious selects the previous file in a list when there is one" <|
|
|
\_ ->
|
|
let
|
|
actual : List File
|
|
actual =
|
|
selectPrevious
|
|
[ filteredDir1
|
|
, filteredDir2
|
|
, filteredDir3
|
|
, filteredDir4 |> withStatus Selected
|
|
, filteredDir5
|
|
]
|
|
|
|
expected : List File
|
|
expected =
|
|
[ filteredDir1
|
|
, filteredDir2
|
|
, filteredDir3 |> withStatus Selected
|
|
, filteredDir4
|
|
, filteredDir5
|
|
]
|
|
in
|
|
Expect.equal expected actual
|
|
, test "selectPrevious does nothing when the currently selected file is the first" <|
|
|
\_ ->
|
|
let
|
|
actual : List File
|
|
actual =
|
|
selectPrevious expected
|
|
|
|
expected : List File
|
|
expected =
|
|
[ filteredDir1 |> withStatus Selected
|
|
, filteredDir2
|
|
, filteredDir3
|
|
, filteredDir4
|
|
, filteredDir5
|
|
]
|
|
in
|
|
Expect.equal expected actual
|
|
, test "selectPrevious selects the first file in a list when none is selected" <|
|
|
\_ ->
|
|
let
|
|
actual : List File
|
|
actual =
|
|
selectPrevious
|
|
[ filteredDir1
|
|
, filteredDir2
|
|
, filteredDir3
|
|
, filteredDir4
|
|
, filteredDir5
|
|
]
|
|
|
|
expected : List File
|
|
expected =
|
|
[ filteredDir1 |> withStatus Selected
|
|
, filteredDir2
|
|
, filteredDir3
|
|
, filteredDir4
|
|
, filteredDir5
|
|
]
|
|
in
|
|
Expect.equal expected actual
|
|
, test "extendSelectionToNext selects the next file after the first selected" <|
|
|
\_ ->
|
|
let
|
|
actual : List File
|
|
actual =
|
|
extendSelectionToNext
|
|
[ filteredDir1
|
|
, filteredDir2 |> withStatus Selected
|
|
, filteredDir3
|
|
, filteredDir4
|
|
, filteredDir5
|
|
]
|
|
|
|
expected : List File
|
|
expected =
|
|
[ filteredDir1
|
|
, filteredDir2 |> withStatus Selected
|
|
, filteredDir3 |> withStatus Selected
|
|
, filteredDir4
|
|
, filteredDir5
|
|
]
|
|
in
|
|
Expect.equal expected actual
|
|
, test "extendSelectionToPrevious selects the file before the first selected" <|
|
|
\_ ->
|
|
let
|
|
actual : List File
|
|
actual =
|
|
extendSelectionToPrevious
|
|
[ filteredDir1
|
|
, filteredDir2
|
|
, filteredDir3 |> withStatus Selected
|
|
, filteredDir4
|
|
, filteredDir5
|
|
]
|
|
|
|
expected : List File
|
|
expected =
|
|
[ filteredDir1
|
|
, filteredDir2 |> withStatus Selected
|
|
, filteredDir3 |> withStatus Selected
|
|
, filteredDir4
|
|
, filteredDir5
|
|
]
|
|
in
|
|
Expect.equal expected actual
|
|
, test "selectSimilar selects the files with a name looking like the given one" <|
|
|
\_ ->
|
|
let
|
|
actual : List File
|
|
actual =
|
|
selectSimilar
|
|
filteredDir6
|
|
10
|
|
[ filteredDir1
|
|
, filteredDir6 |> withStatus Selected
|
|
, filteredDir2
|
|
, filteredDir7
|
|
, filteredDir3
|
|
, filteredDir8
|
|
, filteredDir4 |> withStatus Selected
|
|
, filteredDir5
|
|
]
|
|
|
|
expected : List File
|
|
expected =
|
|
[ filteredDir1
|
|
, filteredDir6 |> withStatus Selected
|
|
, filteredDir2
|
|
, filteredDir7 |> withStatus Selected
|
|
, filteredDir3
|
|
, filteredDir8 |> withStatus Selected
|
|
, filteredDir4
|
|
, filteredDir5
|
|
]
|
|
in
|
|
Expect.equal expected actual
|
|
, test "filerDecoder is able to decode a file descriptor" <|
|
|
\_ ->
|
|
let
|
|
actual : File
|
|
actual =
|
|
"""
|
|
{
|
|
"DirPath": "/Users/pascal",
|
|
"IsDir": true,
|
|
"ModTime": "2025-12-16T19:43:08.307Z",
|
|
"Mode": 16832,
|
|
"Name": "Music",
|
|
"Size": 256
|
|
}
|
|
"""
|
|
|> decodeString File.fileDecoder
|
|
|> Result.toMaybe
|
|
|> Maybe.withDefault Fixtures.dir1
|
|
|
|
expected : File
|
|
expected =
|
|
{ parentPath = "/Users/pascal"
|
|
, isDir = True
|
|
, modTime = millisToPosix 1765914188307
|
|
, mode = 16832
|
|
, name = "Music"
|
|
, satisfiesFilter = False
|
|
, status = Unselected
|
|
, size = 256
|
|
}
|
|
in
|
|
Expect.equal expected actual
|
|
]
|