/**
* Tests that `Libraries::map()` and `Libraries::unmap()`
*
*/
public function testMapUnmap()
{
$testApp = Libraries::get(true, 'resources') . '/tmp/tests/test_app';
mkdir($testApp, 0777, true);
Libraries::add('test_app', array('path' => $testApp));
mkdir($testApp . '/lib', 0777);
mkdir($testApp . '/_patch', 0777);
file_put_contents($testApp . '/lib/LibTest.php', "<?php namespace test_app\\lib;\n\n\t\t\tclass LibTest{ public function testMe() {\n\t\t\t\treturn 'core class';\n\t\t\t}}");
file_put_contents($testApp . '/_patch/PatchedLibTest.php', "<?php namespace test_app\\lib;\n\n\t\t\tclass LibTest{ public function testMe() {\n\t\t\t\treturn 'patched class';\n\t\t\t}}");
$expected = $result = Libraries::realPath($testApp . '/lib/LibTest.php');
$result = Libraries::path('test_app\\lib\\LibTest');
$this->assertEqual($expected, $result);
Libraries::map(array('test_app\\lib\\LibTest' => $testApp . '/_patch/PatchedLibTest.php'));
$expected = $result = Libraries::realPath($testApp . '/_patch/PatchedLibTest.php');
$result = Libraries::path('test_app\\lib\\LibTest');
Libraries::unmap(array('test_app\\lib\\LibTest'));
$expected = $result = Libraries::realPath($testApp . '/lib/LibTest.php');
$result = Libraries::path('test_app\\lib\\LibTest');
$this->assertEqual($expected, $result);
Libraries::map(array('test_app\\lib\\LibTest' => $testApp . '/_patch/PatchedLibTest.php'));
Libraries::unmap('test_app\\lib\\LibTest');
$expected = $result = Libraries::realPath($testApp . '/lib/LibTest.php');
$result = Libraries::path('test_app\\lib\\LibTest');
Libraries::map(array('test_app\\lib\\LibTest' => $testApp . '/_patch/PatchedLibTest.php'));
$object = new \test_app\lib\LibTest();
$result = $object->testMe();
$this->assertEqual('patched class', $result);
$this->_cleanUp();
}