elm-review/tests/NoListLiteralsConcatTest.elm
2020-04-05 09:57:34 +02:00

155 lines
4.8 KiB
Elm

module NoListLiteralsConcatTest exposing (all)
import NoListLiteralsConcat exposing (rule)
import Review.Test exposing (ReviewResult)
import Test exposing (Test, describe, test)
testRule : String -> ReviewResult
testRule string =
"module A exposing (..)\n\n"
++ string
|> Review.Test.run rule
all : Test
all =
describe "NoListLiteralsConcat"
[ usingPlusPlusTests
]
message : String
message =
"Expression could be simplified to be a single List"
details : List String
details =
[ "Try moving all the elements into a single list." ]
usingPlusPlusTests : Test
usingPlusPlusTests =
describe "Using (++)"
[ test "should not report a single list literal" <|
\() ->
testRule """
a = []
b = [1]
c = [ "string", "foo", "bar" ]
"""
|> Review.Test.expectNoErrors
, test "should report concatenating two list literals" <|
\() ->
testRule """
a = [ 1 ] ++ [ 2, 3 ]
"""
|> Review.Test.expectErrors
[ Review.Test.error
{ message = message
, details = details
, under = "[ 1 ] ++ [ 2, 3 ]"
}
]
, test "should report concatenating two list literals, even they contain variables" <|
\() ->
testRule """
a = [ a, 1 ] ++ [ b, 2 ]
"""
|> Review.Test.expectErrors
[ Review.Test.error
{ message = message
, details = details
, under = "[ a, 1 ] ++ [ b, 2 ]"
}
]
, test "should report concatenating an empty list and something" <|
\() ->
testRule """
a = [] ++ something
"""
|> Review.Test.expectErrors
[ Review.Test.error
{ message = message
, details = details
, under = "[]"
}
]
, test "should report concatenating something and an empty list" <|
\() ->
testRule """
a = something ++ []
"""
|> Review.Test.expectErrors
[ Review.Test.error
{ message = message
, details = details
, under = "[]"
}
]
, test "should not report using :: to a variable or expression" <|
\() ->
testRule """
a = 1 :: list
b = 1 :: foo bar
"""
|> Review.Test.expectNoErrors
, test "should report using :: to a list literal" <|
\() ->
testRule """
a = 1 :: [ 2, 3]
"""
|> Review.Test.expectErrors
[ Review.Test.error
{ message = message
, details = details
, under = "1 :: [ 2, 3]"
}
]
, test "should not report List.concat that contains a variable or expression" <|
\() ->
testRule """
a = List.concat [ foo, bar ]
b = List.concat [ [ 1 ], foo ]
c = List.concat [ foo, [ 1 ] ]
"""
|> Review.Test.expectNoErrors
, test "should report List.concat with no items" <|
\() ->
testRule """
a = List.concat []
"""
|> Review.Test.expectErrors
[ Review.Test.error
{ message = message
, details = details
, under = "List.concat []"
}
]
, test "should report List.concat with a single item" <|
\() ->
testRule """
a = List.concat [ a ]
"""
|> Review.Test.expectErrors
[ Review.Test.error
{ message = message
, details = details
, under = "List.concat [ a ]"
}
]
, test "should report List.concat that only contains list literals" <|
\() ->
testRule """
a = List.concat [ [ 1, 2, 3 ], [ 4, 5, 6] ]
"""
|> Review.Test.expectErrors
[ Review.Test.error
{ message = message
, details = details
, under = "List.concat [ [ 1, 2, 3 ], [ 4, 5, 6] ]"
}
]
]