Skip to content

Commit

Permalink
Merge pull request #3396 from daddykotex/dfrancoeur/3388-posix
Browse files Browse the repository at this point in the history
add/remove on PosixPermissions
  • Loading branch information
mpilquist authored Mar 8, 2024
2 parents 952deba + 0765d91 commit 5c965aa
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 0 deletions.
6 changes: 6 additions & 0 deletions io/shared/src/main/scala/fs2/io/file/Permissions.scala
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,12 @@ import PosixPermission._
*/
final class PosixPermissions private (val value: Int) extends Permissions {

def add(p: PosixPermission): PosixPermissions =
new PosixPermissions(value | p.value)

def remove(p: PosixPermission): PosixPermissions =
new PosixPermissions(value ^ p.value)

override def equals(that: Any): Boolean = that match {
case other: PosixPermissions => value == other.value
case _ => false
Expand Down
24 changes: 24 additions & 0 deletions io/shared/src/test/scala/fs2/io/file/PosixPermissionsSuite.scala
Original file line number Diff line number Diff line change
Expand Up @@ -59,4 +59,28 @@ class PosixPermissionsSuite extends Fs2IoSuite {
assertEquals(PosixPermissions.fromString("rwx"), None)
assertEquals(PosixPermissions.fromString("rwxrwxrw?"), None)
}

test("add/remove all") {
case class TC(p: PosixPermission, adding: String, removing: String)
val all = Seq(
TC(PosixPermission.OwnerRead, "400", "377"),
TC(PosixPermission.OwnerWrite, "600", "177"),
TC(PosixPermission.OwnerExecute, "700", "077"),
TC(PosixPermission.GroupRead, "740", "037"),
TC(PosixPermission.GroupWrite, "760", "017"),
TC(PosixPermission.GroupExecute, "770", "007"),
TC(PosixPermission.OthersRead, "774", "003"),
TC(PosixPermission.OthersWrite, "776", "001"),
TC(PosixPermission.OthersExecute, "777", "000")
)
var goingUp = PosixPermissions.fromInt(0).get
var goingDown = PosixPermissions.fromInt(511).get
all.foreach { case TC(p, adding, removing) =>
goingUp = goingUp.add(p)
assertEquals(goingUp, PosixPermissions.fromOctal(adding).get)

goingDown = goingDown.remove(p)
assertEquals(goingDown, PosixPermissions.fromOctal(removing).get)
}
}
}

0 comments on commit 5c965aa

Please sign in to comment.