public function testPermissionOverride()
 {
     $readonly = new \AJXP_Permission("r");
     $writeonly = new \AJXP_Permission("w");
     $readwrite = new \AJXP_Permission("rw");
     $deny = new \AJXP_Permission("d");
     $empty = new \AJXP_Permission();
     $this->isRW($writeonly->override($readonly));
     $this->isRW($readonly->override($writeonly));
     $this->isRW($readwrite->override($readonly));
     $this->isRW($readwrite->override($writeonly));
     $this->isRW($readonly->override($readwrite));
     $this->isRW($writeonly->override($readwrite));
     $this->isDenied($deny->override($readonly));
     $this->isDenied($deny->override($writeonly));
     $this->isDenied($deny->override($readwrite));
     $this->isDenied($empty->override($readonly));
     $this->isDenied($empty->override($writeonly));
     $this->isDenied($empty->override($readwrite));
     $this->isRW($writeonly->override($readonly));
 }
 /**
  * Initialize an empty mask, or from a serializedForm.
  * @param array|null $serializedForm
  */
 function __construct($serializedForm = null)
 {
     if ($serializedForm != null) {
         foreach ($serializedForm as $path => $permissionValue) {
             $path = AJXP_Utils::sanitize(AJXP_Utils::securePath($path), AJXP_SANITIZE_DIRNAME);
             if (!is_array($permissionValue) || $permissionValue["children"]) {
                 continue;
             }
             $perm = new AJXP_Permission();
             if ($permissionValue["read"]) {
                 $perm->setRead();
             }
             if ($permissionValue["write"]) {
                 $perm->setWrite();
             }
             if ($permissionValue["deny"]) {
                 $perm->setDeny();
             }
             if ($perm->isEmpty()) {
                 continue;
             }
             $this->updateBranch($path, $perm);
         }
     }
 }
 /**
  * Override this permission value with the one passed in parameter
  * @param AJXP_Permission $perm
  * @return AJXP_Permission
  */
 function override($perm)
 {
     $newPerm = $perm->getCopy();
     if ($this->denies()) {
         $newPerm->setDeny();
     } else {
         if ($this->canRead()) {
             $newPerm->setRead();
         }
         if ($this->canWrite()) {
             $newPerm->setWrite();
         }
     }
     return $newPerm;
 }