diff --git a/os/src/Path.scala b/os/src/Path.scala index c4e3fad9..9b200b41 100644 --- a/os/src/Path.scala +++ b/os/src/Path.scala @@ -35,15 +35,18 @@ object PathChunk extends PathChunkMacros { } }.reverse private[os] def segmentsFromStringLiteralValidation(literal: String): Array[String] = { - val stringSegments = segmentsFromString(literal) - val validSegmnts = reduceUps(validLiteralSegments(stringSegments)) - val sanitizedLiteral = validSegmnts.mkString("/") - if (validSegmnts.isEmpty) throw InvalidSegment( - literal, - s"Literal path sequence [$literal] doesn't affect path being formed, please remove it" - ) - if (literal != sanitizedLiteral) throw NonCanonicalLiteral(literal, sanitizedLiteral) - stringSegments + if (literal == ".") Array.empty + else { + val stringSegments = segmentsFromString(literal) + val validSegments = reduceUps(validLiteralSegments(stringSegments)) + val sanitizedLiteral = validSegments.mkString("/") + if (validSegments.isEmpty) throw InvalidSegment( + literal, + s"Literal path sequence [$literal] doesn't affect path being formed, please remove it" + ) + if (literal != sanitizedLiteral) throw NonCanonicalLiteral(literal, sanitizedLiteral) + stringSegments + } } private def validLiteralSegments(segments: Array[String]): Array[String] = { val AllowedLiteralSegment = ".." diff --git a/os/test/src/PathTests.scala b/os/test/src/PathTests.scala index 85a27611..77c1e248 100644 --- a/os/test/src/PathTests.scala +++ b/os/test/src/PathTests.scala @@ -60,6 +60,9 @@ object PathTests extends TestSuite { assert(root / "hello" / ".." / "world" == root / "hello" / os.up / "world") assert(root / "hello" / "../world" == root / "hello" / os.up / "world") } + test("literal [.]") { + assert(root / "." == root) + } test("Compile errors") { @@ -122,13 +125,11 @@ object PathTests extends TestSuite { compileError("""root / "//foo/" """).check("", nonCanonicalLiteral("//foo/", "foo")) compileError(""" rel / "src" / "" """).check("", removeLiteralErr("")) - compileError(""" rel / "src" / "." """).check("", removeLiteralErr(".")) compileError(""" root / "src/" """).check("", nonCanonicalLiteral("src/", "src")) compileError(""" root / "src/." """).check("", nonCanonicalLiteral("src/.", "src")) compileError(""" root / "" """).check("", removeLiteralErr("")) - compileError(""" root / "." """).check("", removeLiteralErr(".")) } }