skip joinDot test if second name is absolute

This commit is contained in:
Mitchell Rosen 2021-10-13 12:39:59 -04:00
parent 4628280032
commit 7aee1e9d61
2 changed files with 33 additions and 28 deletions

View File

@ -17,28 +17,28 @@ test =
scope "name" $
tests
[ scope "unsafeFromString" $
tests [
scope "." do
expectEqual' (isAbsolute ".") False
expectEqual' (segments ".") ("." :| [])
ok,
scope ".." do
expectEqual' (isAbsolute "..") True
expectEqual' (segments "..") ("." :| [])
ok,
scope "foo.bar" do
expectEqual' (isAbsolute "foo.bar") False
expectEqual' (segments "foo.bar") ("foo" :| ["bar"])
ok,
scope ".foo.bar" do
expectEqual' (isAbsolute ".foo.bar") True
expectEqual' (segments ".foo.bar") ("foo" :| ["bar"])
ok,
scope "foo.." do
expectEqual' (isAbsolute "foo..") False
expectEqual' (segments "foo..") ("foo" :| ["."])
ok
],
tests
[ scope "." do
expectEqual' (isAbsolute ".") False
expectEqual' (segments ".") ("." :| [])
ok,
scope ".." do
expectEqual' (isAbsolute "..") True
expectEqual' (segments "..") ("." :| [])
ok,
scope "foo.bar" do
expectEqual' (isAbsolute "foo.bar") False
expectEqual' (segments "foo.bar") ("foo" :| ["bar"])
ok,
scope ".foo.bar" do
expectEqual' (isAbsolute ".foo.bar") True
expectEqual' (segments ".foo.bar") ("foo" :| ["bar"])
ok,
scope "foo.." do
expectEqual' (isAbsolute "foo..") False
expectEqual' (segments "foo..") ("foo" :| ["."])
ok
],
scope "suffixes" $
tests
[ scope "one namespace" $ expectEqual (suffixes "bar") ["bar"],
@ -149,7 +149,9 @@ test =
scope "joinDot" do
n1 <- rname
n2 <- rname
old (Name.joinDot n1 n2) `expectEqual` Name.oldJoinDot (old n1) (old n2)
if Name.isAbsolute n2
then skip
else old (Name.joinDot n1 n2) `expectEqual` Name.oldJoinDot (old n1) (old n2)
scope "makeAbsolute" do
n1 <- rname

View File

@ -138,7 +138,11 @@ joinDot :: HasCallStack => Name -> Name -> Name
joinDot n1@(Name p0 ss0) n2@(Name p1 ss1) =
case p1 of
Relative -> Name p0 (ss1 <> ss0)
Absolute -> error ("joinDot " ++ show n1 ++ " " ++ show n2)
Absolute ->
error $
reportBug
"E261635"
("joinDot: second name cannot be absolute. (name 1 = " ++ show n1 ++ ", name 2 = " ++ show n2 ++ ")")
makeAbsolute :: Name -> Name
makeAbsolute (Name _ ss) =
@ -375,10 +379,9 @@ unsafeFromText = \case
go name =
if ".." `Text.isSuffixOf` name
then "." :| split (Text.dropEnd 2 name)
else
case split name of
[] -> error "empty name"
s : ss -> s :| ss
else case split name of
[] -> error "empty name"
s : ss -> s :| ss
split :: Text -> [NameSegment]
split =