Dispatcher =& new TestShellMockShellDispatcher(); $this->Shell =& new TestShell($this->Dispatcher); } /** * tearDown method * * @return void * @access public */ function tearDown() { ClassRegistry::flush(); } /** * testConstruct method * * @return void * @access public */ function testConstruct() { $this->assertIsA($this->Shell->Dispatch, 'TestShellMockShellDispatcher'); $this->assertEqual($this->Shell->name, 'TestShell'); $this->assertEqual($this->Shell->alias, 'TestShell'); } /** * testInitialize method * * @return void * @access public */ function testInitialize() { App::build(array( 'plugins' => array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'plugins' . DS), 'models' => array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'models' . DS) ), true); $this->Shell->uses = array('TestPlugin.TestPluginPost'); $this->Shell->initialize(); $this->assertTrue(isset($this->Shell->TestPluginPost)); $this->assertIsA($this->Shell->TestPluginPost, 'TestPluginPost'); $this->assertEqual($this->Shell->modelClass, 'TestPluginPost'); $this->Shell->uses = array('Comment'); $this->Shell->initialize(); $this->assertTrue(isset($this->Shell->Comment)); $this->assertIsA($this->Shell->Comment, 'Comment'); $this->assertEqual($this->Shell->modelClass, 'Comment'); $this->Shell->uses = true; $this->Shell->initialize(); $this->assertTrue(isset($this->Shell->AppModel)); $this->assertIsA($this->Shell->AppModel, 'AppModel'); App::build(); } /** * testOut method * * @return void * @access public */ function testOut() { $this->Shell->Dispatch->expectAt(0, 'stdout', array('Just a test', true)); $this->Shell->out('Just a test'); $this->Shell->Dispatch->expectAt(1, 'stdout', array("Just\na\ntest\n", true)); $this->Shell->out(array('Just', 'a', 'test')); } /** * testIn method * * @return void * @access public */ function testIn() { $this->Shell->Dispatch->setReturnValueAt(0, 'getInput', 'n'); $this->Shell->Dispatch->expectAt(0, 'getInput', array('Just a test?', array('y', 'n'), 'n')); $result = $this->Shell->in('Just a test?', array('y', 'n'), 'n'); $this->assertEqual($result, 'n'); $this->Shell->Dispatch->setReturnValueAt(1, 'getInput', 'Y'); $this->Shell->Dispatch->expectAt(1, 'getInput', array('Just a test?', array('y', 'n'), 'n')); $result = $this->Shell->in('Just a test?', array('y', 'n'), 'n'); $this->assertEqual($result, 'Y'); $this->Shell->Dispatch->setReturnValueAt(2, 'getInput', 'y'); $this->Shell->Dispatch->expectAt(2, 'getInput', array('Just a test?', 'y,n', 'n')); $result = $this->Shell->in('Just a test?', 'y,n', 'n'); $this->assertEqual($result, 'y'); $this->Shell->Dispatch->setReturnValueAt(3, 'getInput', 'y'); $this->Shell->Dispatch->expectAt(3, 'getInput', array('Just a test?', 'y/n', 'n')); $result = $this->Shell->in('Just a test?', 'y/n', 'n'); $this->assertEqual($result, 'y'); $this->Shell->Dispatch->setReturnValueAt(4, 'getInput', 'y'); $this->Shell->Dispatch->expectAt(4, 'getInput', array('Just a test?', 'y', 'y')); $result = $this->Shell->in('Just a test?', 'y', 'y'); $this->assertEqual($result, 'y'); $this->Shell->interactive = false; $result = $this->Shell->in('Just a test?', 'y/n', 'n'); $this->assertEqual($result, 'n'); } /** * testLoadTasks method * * @return void * @access public */ function testLoadTasks() { $this->assertTrue($this->Shell->loadTasks()); $this->Shell->tasks = null; $this->assertTrue($this->Shell->loadTasks()); $this->Shell->tasks = false; $this->assertTrue($this->Shell->loadTasks()); $this->Shell->tasks = true; $this->assertTrue($this->Shell->loadTasks()); $this->Shell->tasks = array(); $this->assertTrue($this->Shell->loadTasks()); // Fatal Error // $this->Shell->tasks = 'TestIDontExist'; // $this->assertFalse($this->Shell->loadTasks()); // $this->assertFalse(isset($this->Shell->TestIDontExist)); $this->Shell->tasks = 'TestApple'; $this->assertTrue($this->Shell->loadTasks()); $this->assertIsA($this->Shell->TestApple, 'TestAppleTask'); $this->Shell->tasks = 'TestBanana'; $this->assertTrue($this->Shell->loadTasks()); $this->assertIsA($this->Shell->TestApple, 'TestAppleTask'); $this->assertIsA($this->Shell->TestBanana, 'TestBananaTask'); unset($this->Shell->ShellTestApple, $this->Shell->TestBanana); $this->Shell->tasks = array('TestApple', 'TestBanana'); $this->assertTrue($this->Shell->loadTasks()); $this->assertIsA($this->Shell->TestApple, 'TestAppleTask'); $this->assertIsA($this->Shell->TestBanana, 'TestBananaTask'); } /** * testShortPath method * * @return void * @access public */ function testShortPath() { $path = $expected = DS . 'tmp' . DS . 'ab' . DS . 'cd'; $this->assertEqual($this->Shell->shortPath($path), $expected); $path = $expected = DS . 'tmp' . DS . 'ab' . DS . 'cd' . DS ; $this->assertEqual($this->Shell->shortPath($path), $expected); $path = $expected = DS . 'tmp' . DS . 'ab' . DS . 'index.php'; $this->assertEqual($this->Shell->shortPath($path), $expected); // Shell::shortPath needs Folder::realpath // $path = DS . 'tmp' . DS . 'ab' . DS . '..' . DS . 'cd'; // $expected = DS . 'tmp' . DS . 'cd'; // $this->assertEqual($this->Shell->shortPath($path), $expected); $path = DS . 'tmp' . DS . 'ab' . DS . DS . 'cd'; $expected = DS . 'tmp' . DS . 'ab' . DS . 'cd'; $this->assertEqual($this->Shell->shortPath($path), $expected); $path = 'tmp' . DS . 'ab'; $expected = 'tmp' . DS . 'ab'; $this->assertEqual($this->Shell->shortPath($path), $expected); $path = 'tmp' . DS . 'ab'; $expected = 'tmp' . DS . 'ab'; $this->assertEqual($this->Shell->shortPath($path), $expected); $path = APP; $expected = DS . basename(APP) . DS; $this->assertEqual($this->Shell->shortPath($path), $expected); $path = APP . 'index.php'; $expected = DS . basename(APP) . DS . 'index.php'; $this->assertEqual($this->Shell->shortPath($path), $expected); } /** * testCreateFile method * * @return void * @access public */ function testCreateFile() { $this->skipIf(DIRECTORY_SEPARATOR === '\\', '%s Not supported on Windows'); $path = TMP . 'shell_test'; $file = $path . DS . 'file1.php'; new Folder($path, true); $this->Shell->interactive = false; $contents = ""; $result = $this->Shell->createFile($file, $contents); $this->assertTrue($result); $this->assertTrue(file_exists($file)); $this->assertEqual(file_get_contents($file), $contents); $contents = ""; $result = $this->Shell->createFile($file, $contents); $this->assertTrue($result); $this->assertTrue(file_exists($file)); $this->assertEqual(file_get_contents($file), $contents); $this->Shell->interactive = true; $this->Shell->Dispatch->setReturnValueAt(0, 'getInput', 'n'); $this->Shell->Dispatch->expectAt(1, 'stdout', array('File exists, overwrite?', '*')); $contents = ""; $result = $this->Shell->createFile($file, $contents); $this->assertFalse($result); $this->assertTrue(file_exists($file)); $this->assertNotEqual(file_get_contents($file), $contents); $this->Shell->Dispatch->setReturnValueAt(1, 'getInput', 'y'); $this->Shell->Dispatch->expectAt(3, 'stdout', array('File exists, overwrite?', '*')); $result = $this->Shell->createFile($file, $contents); $this->assertTrue($result); $this->assertTrue(file_exists($file)); $this->assertEqual(file_get_contents($file), $contents); $Folder = new Folder($path); $Folder->delete(); } /** * testCreateFileWindows method * * @return void * @access public */ function testCreateFileWindows() { $this->skipUnless(DIRECTORY_SEPARATOR === '\\', '%s Supported on Windows only'); $path = TMP . 'shell_test'; $file = $path . DS . 'file1.php'; new Folder($path, true); $this->Shell->interactive = false; $contents = ""; $result = $this->Shell->createFile($file, $contents); $this->assertTrue($result); $this->assertTrue(file_exists($file)); $this->assertEqual(file_get_contents($file), $contents); $contents = ""; $result = $this->Shell->createFile($file, $contents); $this->assertTrue($result); $this->assertTrue(file_exists($file)); $this->assertEqual(file_get_contents($file), $contents); $this->Shell->interactive = true; $this->Shell->Dispatch->setReturnValueAt(0, 'getInput', 'n'); $this->Shell->Dispatch->expectAt(1, 'stdout', array('File exists, overwrite?')); $contents = ""; $result = $this->Shell->createFile($file, $contents); $this->assertFalse($result); $this->assertTrue(file_exists($file)); $this->assertNotEqual(file_get_contents($file), $contents); $this->Shell->Dispatch->setReturnValueAt(1, 'getInput', 'y'); $this->Shell->Dispatch->expectAt(3, 'stdout', array('File exists, overwrite?')); $result = $this->Shell->createFile($file, $contents); $this->assertTrue($result); $this->assertTrue(file_exists($file)); $this->assertEqual(file_get_contents($file), $contents); $Folder = new Folder($path); $Folder->delete(); } } ?>