externals); unset($CONFIG->externals_map); } /** * Called after each test object. */ public function __destruct() { // all __destruct() code should go above here parent::__destruct(); } /** * Test elgg_instanceof() */ public function testElggInstanceOf() { $entity = new \ElggObject(); $entity->subtype = 'test_subtype'; $entity->save(); $this->assertTrue(elgg_instanceof($entity)); $this->assertTrue(elgg_instanceof($entity, 'object')); $this->assertTrue(elgg_instanceof($entity, 'object', 'test_subtype')); $this->assertFalse(elgg_instanceof($entity, 'object', 'invalid_subtype')); $this->assertFalse(elgg_instanceof($entity, 'user', 'test_subtype')); $entity->delete(); $bad_entity = false; $this->assertFalse(elgg_instanceof($bad_entity)); $this->assertFalse(elgg_instanceof($bad_entity, 'object')); $this->assertFalse(elgg_instanceof($bad_entity, 'object', 'test_subtype')); remove_subtype('object', 'test_subtype'); } /** * Test elgg_normalize_url() */ public function testElggNormalizeURL() { $conversions = array( 'http://example.com' => 'http://example.com', 'https://example.com' => 'https://example.com', 'http://example-time.com' => 'http://example-time.com', '//example.com' => '//example.com', 'ftp://example.com/file' => 'ftp://example.com/file', 'mailto:brett@elgg.org' => 'mailto:brett@elgg.org', 'javascript:alert("test")' => 'javascript:alert("test")', 'app://endpoint' => 'app://endpoint', 'example.com' => 'http://example.com', 'example.com/subpage' => 'http://example.com/subpage', 'page/handler' => elgg_get_site_url() . 'page/handler', 'page/handler?p=v&p2=v2' => elgg_get_site_url() . 'page/handler?p=v&p2=v2', 'mod/plugin/file.php' => elgg_get_site_url() . 'mod/plugin/file.php', 'mod/plugin/file.php?p=v&p2=v2' => elgg_get_site_url() . 'mod/plugin/file.php?p=v&p2=v2', 'rootfile.php' => elgg_get_site_url() . 'rootfile.php', 'rootfile.php?p=v&p2=v2' => elgg_get_site_url() . 'rootfile.php?p=v&p2=v2', '/page/handler' => elgg_get_site_url() . 'page/handler', '/page/handler?p=v&p2=v2' => elgg_get_site_url() . 'page/handler?p=v&p2=v2', '/mod/plugin/file.php' => elgg_get_site_url() . 'mod/plugin/file.php', '/mod/plugin/file.php?p=v&p2=v2' => elgg_get_site_url() . 'mod/plugin/file.php?p=v&p2=v2', '/rootfile.php' => elgg_get_site_url() . 'rootfile.php', '/rootfile.php?p=v&p2=v2' => elgg_get_site_url() . 'rootfile.php?p=v&p2=v2', ); foreach ($conversions as $input => $output) { $this->assertIdentical($output, elgg_normalize_url($input)); } } /** * Test elgg_http_url_is_identical() */ public function testHttpUrlIsIdentical() { $tests = array( 'http://example.com' => 'http://example.com', 'https://example.com' => 'https://example.com', 'http://example-time.com' => 'http://example-time.com', '//example.com' => '//example.com', 'ftp://example.com/file' => 'ftp://example.com/file', 'mailto:brett@elgg.org' => 'mailto:brett@elgg.org', 'javascript:alert("test")' => 'javascript:alert("test")', 'app://endpoint' => 'app://endpoint', 'example.com' => 'http://example.com', 'example.com/subpage' => 'http://example.com/subpage', 'page/handler' => elgg_get_site_url() . 'page/handler', 'page/handler?p=v&p2=v2' => elgg_get_site_url() . 'page/handler?p=v&p2=v2', 'mod/plugin/file.php' => elgg_get_site_url() . 'mod/plugin/file.php', 'mod/plugin/file.php?p=v&p2=v2' => elgg_get_site_url() . 'mod/plugin/file.php?p=v&p2=v2', 'search?foo.bar' => elgg_get_site_url() . 'search?foo.bar', 'rootfile.php' => elgg_get_site_url() . 'rootfile.php', 'rootfile.php?p=v&p2=v2' => elgg_get_site_url() . 'rootfile.php?p=v&p2=v2', '/page/handler' => elgg_get_site_url() . 'page/handler', '/page/handler?p=v&p2=v2' => elgg_get_site_url() . 'page/handler?p=v&p2=v2', '/mod/plugin/file.php' => elgg_get_site_url() . 'mod/plugin/file.php', '/mod/plugin/file.php?p=v&p2=v2' => elgg_get_site_url() . 'mod/plugin/file.php?p=v&p2=v2', '/rootfile.php' => elgg_get_site_url() . 'rootfile.php', '/rootfile.php?p=v&p2=v2' => elgg_get_site_url() . 'rootfile.php?p=v&p2=v2', ); foreach ($tests as $input => $output) { $this->assertTrue(elgg_http_url_is_identical($output, $input), "Failed to determine URLs as identical for: '$output' and '$input'"); $this->assertTrue(elgg_http_url_is_identical($input, $output), "Failed to determine URLs as identical for: '$input' and '$output'"); } } /** * Test elgg_http_url_is_identical() for $ignore_params parameter handling */ public function testHttpUrlIsIdenticalIgnoreParamsHandling() { $tests = array( array('page/handler', elgg_get_site_url() . 'page/handler', array('p', 'p2'), true), array('page/handler?p=v&p2=q2', elgg_get_site_url() . 'page/handler?p=q&p2=v2', array('p', 'p2'), true), array('/rootfile.php', elgg_get_site_url() . 'rootfile.php?param=23', array('param'), true), array('/rootfile.php?p=v&p2=v2', elgg_get_site_url() . 'rootfile.php?p=v&p2=q', array('p', 'p2'), true), array('mod/plugin/file.php?other_param=123', elgg_get_site_url() . 'mod/plugin/file.php', array('q', 'p2'), false), array('/rootfile.php', elgg_get_site_url() . 'rootfile.php?param=23', array(), false), ); foreach ($tests as $test) { list($url1, $url2, $ignore_params, $result) = $test; $this->assertIdentical(elgg_http_url_is_identical($url1, $url2, $ignore_params), $result, "Failed to determine URLs as " . ($result ? 'identical' : 'different') . " for: '$url1', '$url2' and ignore params set to " . print_r($ignore_params, true)); $this->assertIdentical(elgg_http_url_is_identical($url2, $url1, $ignore_params), $result, "Failed to determine URLs as " . ($result ? 'identical' : 'different') . " for: '$url2', '$url1' and ignore params set to " . print_r($ignore_params, true)); } } /** * Test elgg_format_element() */ public function testElggFormatElement() { $tests = array( 'a & b' => array( 'tag_name' => 'span', 'text' => 'a & b', '_msg' => 'Basic formatting, span recognized as non-void element', ), 'a & & b' => array( 'tag_name' => 'span', 'text' => 'a & & b', 'opts' => array('encode_text' => true), '_msg' => 'HTML escaping, does not double encode', ), 'a × b' => array( 'tag_name' => 'span', 'text' => 'a × b', 'opts' => array('encode_text' => true, 'double_encode' => true), '_msg' => 'HTML escaping double encodes', ), '' => array( 'tag_name' => 'IMG', 'attrs' => array('src' => 'a & b'), 'text' => 'should not appear', '_msg' => 'IMG recognized as void element, text ignored', ), '' => array( 'tag_name' => 'foo', 'opts' => array('is_void' => true, 'is_xml' => true), '_msg' => 'XML syntax for self-closing elements', ), ); foreach ($tests as $expected => $vars) { $tag_name = $vars['tag_name']; $text = isset($vars['text']) ? $vars['text'] : null; $opts = isset($vars['opts']) ? $vars['opts'] : array(); $attrs = isset($vars['attrs']) ? $vars['attrs'] : array(); $message = isset($vars['_msg']) ? $vars['_msg'] : null; unset($vars['tag_name'], $vars['text'], $vars['_msg']); $this->assertEqual(elgg_format_element($tag_name, $attrs, $text, $opts), $expected, $message); } try { elgg_format_element(array()); $this->fail('Failed to throw exception'); } catch (InvalidArgumentException $e) { $this->pass(); } } /** * Test elgg_register_js() */ public function testElggRegisterJS() { global $CONFIG; // specify name $result = elgg_register_js('key', 'http://test1.com', 'footer'); $this->assertTrue($result); $this->assertTrue(isset($CONFIG->externals_map['js']['key'])); $item = $CONFIG->externals_map['js']['key']; $this->assertTrue($CONFIG->externals['js']->contains($item)); $priority = $CONFIG->externals['js']->getPriority($item); $this->assertTrue($priority !== false); $item = $CONFIG->externals['js']->getElement($priority); $this->assertIdentical('http://test1.com', $item->url); // send a bad url $result = elgg_register_js('bad', null); $this->assertFalse($result); } /** * Test elgg_register_css() */ public function testElggRegisterCSS() { global $CONFIG; // specify name $result = elgg_register_css('key', 'http://test1.com'); $this->assertTrue($result); $this->assertTrue(isset($CONFIG->externals_map['css']['key'])); $item = $CONFIG->externals_map['css']['key']; $this->assertTrue($CONFIG->externals['css']->contains($item)); $priority = $CONFIG->externals['css']->getPriority($item); $this->assertTrue($priority !== false); $item = $CONFIG->externals['css']->getElement($priority); $this->assertIdentical('http://test1.com', $item->url); } /** * Test elgg_unregister_js() */ public function testElggUnregisterJS() { global $CONFIG; $base = trim(elgg_get_site_url(), "/"); $urls = array('id1' => "$base/urla", 'id2' => "$base/urlb", 'id3' => "$base/urlc"); foreach ($urls as $id => $url) { elgg_register_js($id, $url); } $result = elgg_unregister_js('id1'); $this->assertTrue($result); $js = $CONFIG->externals['js']; $elements = $js->getElements(); $this->assertFalse(isset($CONFIG->externals_map['js']['id1'])); foreach ($elements as $element) { if (isset($element->name)) { $this->assertFalse($element->name == 'id1'); } } $result = elgg_unregister_js('id1'); $this->assertFalse($result); $result = elgg_unregister_js('', 'does_not_exist'); $this->assertFalse($result); $result = elgg_unregister_js('id2'); $elements = $js->getElements(); $this->assertFalse(isset($CONFIG->externals_map['js']['id2'])); foreach ($elements as $element) { if (isset($element->name)) { $this->assertFalse($element->name == 'id2'); } } $this->assertTrue(isset($CONFIG->externals_map['js']['id3'])); $priority = $CONFIG->externals['js']->getPriority($CONFIG->externals_map['js']['id3']); $this->assertTrue($priority !== false); $item = $CONFIG->externals['js']->getElement($priority); $this->assertIdentical($urls['id3'], $item->url); } /** * Test elgg_load_js() */ public function testElggLoadJS() { global $CONFIG; // load before register elgg_load_js('key'); $result = elgg_register_js('key', 'http://test1.com', 'footer'); $this->assertTrue($result); $js_urls = elgg_get_loaded_js('footer'); $this->assertIdentical(array(500 => 'http://test1.com'), $js_urls); } /** * Test elgg_get_loaded_js() */ public function testElggGetJS() { global $CONFIG; $base = trim(elgg_get_site_url(), "/"); $urls = array( 'id1' => "$base/urla", 'id2' => "$base/urlb", 'id3' => "$base/urlc" ); foreach ($urls as $id => $url) { elgg_register_js($id, $url); elgg_load_js($id); } $js_urls = elgg_get_loaded_js('head'); $this->assertIdentical($js_urls[500], $urls['id1']); $this->assertIdentical($js_urls[501], $urls['id2']); $this->assertIdentical($js_urls[502], $urls['id3']); $js_urls = elgg_get_loaded_js('footer'); $this->assertIdentical(array(), $js_urls); } /** * Test elgg_get_friendly_time() */ public function testElggGetFriendlyTime() { $current_time = time(); $offsets = array( '0' => elgg_echo('friendlytime:justnow'), '-120' => elgg_echo('friendlytime:minutes', array('2')), '-60' => elgg_echo('friendlytime:minutes:singular'), '-10800' => elgg_echo('friendlytime:hours', array('3')), '-86400' => elgg_echo('friendlytime:days:singular'), '120' => elgg_echo('friendlytime:future:minutes', array('2')), '86400' => elgg_echo('friendlytime:future:days:singular'), ); foreach ($offsets as $num_seconds => $friendlytime) { $this->assertIdentical(elgg_get_friendly_time($current_time + $num_seconds, $current_time), $friendlytime); } } }