public function test_basics()
 {
     $fs = new _fs_testProtectedMethods(__DIR__ . '/files');
     $this->assertEquals('/', $fs->cwd);
     $this->assertEquals(__DIR__ . '/files', $fs->realcwd);
     // just the directory name for CWD (no leading slash)
     $validCwd = new crazedsanity\filesystem\FileSystem(__DIR__);
     $this->assertEquals($validCwd->cd("files"), 1);
     $this->assertEquals(__DIR__ . '/files', $validCwd->realcwd);
     $this->assertEquals('/files', $validCwd->cwd, "invalid cwd... " . ToolBox::debug_print($validCwd, 0));
     $this->assertTrue(is_dir(__DIR__ . '/files'), "required directory does not exist");
     //use a leading slash in CWD
     $validCwd2 = new crazedsanity\filesystem\FileSystem(__DIR__);
     $this->assertEquals($validCwd2->cd('/files'), 1);
     $this->assertEquals(__DIR__ . '/files', $validCwd2->realcwd);
     $this->assertEquals('/files', $validCwd2->cwd);
     $invalidCwd = new FileSystem(__DIR__, '/xDoEsn0tEx15t');
     $this->assertEquals('/', $invalidCwd->cwd);
     $this->assertEquals(__DIR__, $invalidCwd->realcwd);
     $this->assertEquals($invalidCwd->root, $invalidCwd->realcwd);
     $validModes = array('r', 'r+', 'w', 'w+', 'a', 'a+', 'x', 'x+', 'c', 'c+');
     $invalidModes = array('b', 'b+', 'd', 'd+', 'e', 'e+');
     $testMe = new FileSystem(__DIR__);
     foreach ($validModes as $x) {
         //				$testMe = new FileSystem(__DIR__, null, $x, "failed to test valid mode (". $x ."), dir=(". __DIR__ .")");
         $testMe->setMode($x);
         $this->assertEquals($x, $testMe->mode);
     }
     foreach ($invalidModes as $x) {
         $testMe->mode = "r+";
         try {
             $this->assertNotEquals($x, $testMe->mode);
         } catch (InvalidArgumentException $e) {
             $this->assertTrue((bool) preg_match('~invalid mode~', $e->getMessage()));
         }
         $this->assertEquals('r+', $testMe->mode);
     }
 }