Exemplo n.º 1
0
 /**
  * Generates code required to embed the player.
  *
  * @param moodle_url[] $urls
  * @param string $name
  * @param int $width
  * @param int $height
  * @param array $options
  * @return string
  */
 public function embed($urls, $name, $width, $height, $options)
 {
     global $CFG;
     require_once $CFG->libdir . '/filelib.php';
     $sources = array();
     $mediamanager = core_media_manager::instance();
     $datasetup = [];
     $text = null;
     $isaudio = null;
     $hastracks = false;
     $hasposter = false;
     if (array_key_exists(core_media_manager::OPTION_ORIGINAL_TEXT, $options) && preg_match('/^<(video|audio)\\b/i', $options[core_media_manager::OPTION_ORIGINAL_TEXT], $matches)) {
         // Original text already had media tag - get some data from it.
         $text = $options[core_media_manager::OPTION_ORIGINAL_TEXT];
         $isaudio = strtolower($matches[1]) === 'audio';
         $hastracks = preg_match('/<track\\b/i', $text);
         $hasposter = self::get_attribute($text, 'poster') !== null;
     }
     // Currently Flash in VideoJS does not support responsive layout. If Flash is enabled try to guess
     // if HTML5 player will be engaged for the user and then set it to responsive.
     $responsive = get_config('media_videojs', 'useflash') && !$this->youtube ? null : true;
     // Build list of source tags.
     foreach ($urls as $url) {
         $extension = $mediamanager->get_extension($url);
         $mimetype = $mediamanager->get_mimetype($url);
         if ($mimetype === 'video/quicktime' && (core_useragent::is_chrome() || core_useragent::is_edge())) {
             // Fix for VideoJS/Chrome bug https://github.com/videojs/video.js/issues/423 .
             $mimetype = 'video/mp4';
         }
         $source = html_writer::empty_tag('source', array('src' => $url, 'type' => $mimetype));
         $sources[] = $source;
         if ($isaudio === null) {
             $isaudio = in_array('.' . $extension, file_get_typegroup('extension', 'audio'));
         }
         if ($responsive === null) {
             $responsive = core_useragent::supports_html5($extension);
         }
     }
     $sources = implode("\n", $sources);
     // Find the title, prevent double escaping.
     $title = $this->get_name($name, $urls);
     $title = preg_replace(['/&amp;/', '/&gt;/', '/&lt;/'], ['&', '>', '<'], $title);
     // Ensure JS is loaded. This will also load language strings and populate $this->language with the current language.
     $this->load_amd_module();
     if ($this->youtube) {
         $this->load_amd_module('Youtube');
         $datasetup[] = '"techOrder": ["youtube"]';
         $datasetup[] = '"sources": [{"type": "video/youtube", "src":"' . $urls[0] . '"}]';
         $sources = '';
         // Do not specify <source> tags - it may confuse browser.
         $isaudio = false;
         // Just in case.
     }
     // Add a language.
     if ($this->language) {
         $datasetup[] = '"language": "' . $this->language . '"';
     }
     // Set responsive option.
     if ($responsive) {
         $datasetup[] = '"fluid": true';
     }
     if ($isaudio && !$hastracks) {
         // We don't need a full screen toggle for the audios (except when tracks are present).
         $datasetup[] = '"controlBar": {"fullscreenToggle": false}';
     }
     if ($isaudio && !$height && !$hastracks && !$hasposter) {
         // Hide poster area for audios without tracks or poster.
         // See discussion on https://github.com/videojs/video.js/issues/2777 .
         // Maybe TODO: if there are only chapter tracks we still don't need poster area.
         $datasetup[] = '"aspectRatio": "1:0"';
     }
     // Attributes for the video/audio tag.
     static $playercounter = 1;
     $attributes = ['data-setup' => '{' . join(', ', $datasetup) . '}', 'id' => 'id_videojs_' . $playercounter++, 'class' => get_config('media_videojs', $isaudio ? 'audiocssclass' : 'videocssclass')];
     if (!$responsive) {
         // Note we ignore limitsize setting if not responsive.
         parent::pick_video_size($width, $height);
         $attributes += ['width' => $width] + ($height ? ['height' => $height] : []);
     }
     if ($text !== null) {
         // Original text already had media tag - add necessary attributes and replace sources
         // with the supported URLs only.
         if (($class = self::get_attribute($text, 'class')) !== null) {
             $attributes['class'] .= ' ' . $class;
         }
         $text = self::remove_attributes($text, ['id', 'width', 'height', 'class']);
         if (self::get_attribute($text, 'title') === null) {
             $attributes['title'] = $title;
         }
         $text = self::add_attributes($text, $attributes);
         $text = self::replace_sources($text, $sources);
     } else {
         // Create <video> or <audio> tag with necessary attributes and all sources.
         // We don't want fallback to another player because list_supported_urls() is already smart.
         // Otherwise we could end up with nested <audio> or <video> tags. Fallback to link only.
         $attributes += ['preload' => 'auto', 'controls' => 'true', 'title' => $title];
         $text = html_writer::tag($isaudio ? 'audio' : 'video', $sources . self::LINKPLACEHOLDER, $attributes);
     }
     // Limit the width of the video if width is specified.
     // We do not do it in the width attributes of the video because it does not work well
     // together with responsive behavior.
     if ($responsive) {
         self::pick_video_size($width, $height);
         if ($width) {
             $text = html_writer::div($text, null, ['style' => 'max-width:' . $width . 'px;']);
         }
     }
     return html_writer::div($text, 'mediaplugin mediaplugin_videojs');
 }
Exemplo n.º 2
0
 /**
  * @dataProvider user_agents_providers
  */
 public function test_useragent_chrome($useragent, $tests)
 {
     // Setup the core_useragent instance.
     core_useragent::instance(true, $useragent);
     if (isset($tests['is_chrome']) && $tests['is_chrome']) {
         $this->assertTrue(core_useragent::is_chrome(), "Browser was not identified as a chrome browser");
         $this->assertTrue(core_useragent::check_chrome_version());
     } else {
         $this->assertFalse(core_useragent::is_chrome(), "Browser was incorrectly identified as a chrome browser");
         $this->assertFalse(core_useragent::check_chrome_version());
     }
     $versions = array('7' => false, '8' => false, '10' => false, '39' => false);
     if (isset($tests['check_chrome_version'])) {
         // The test provider has overwritten some of the above checks.
         // Must use the '+' operator, because array_merge will incorrectly rewrite the array keys for integer-based indexes.
         $versions = $tests['check_chrome_version'] + $versions;
     }
     foreach ($versions as $version => $result) {
         $this->assertEquals($result, core_useragent::check_chrome_version($version), "Version incorrectly determined for Chrome version '{$version}'");
     }
 }
Exemplo n.º 3
0
 /**
  * Modifies $_SERVER['HTTP_USER_AGENT'] manually to check if check_browser_version
  * works as expected.
  */
 public function test_check_browser_version()
 {
     core_useragent::instance(true, $this->user_agents['Safari']['412']['Mac OS X']);
     $this->assertTrue(core_useragent::is_safari());
     $this->assertTrue(core_useragent::check_safari_version());
     $this->assertTrue(core_useragent::is_webkit());
     $this->assertTrue(core_useragent::check_webkit_version());
     $this->assertTrue(core_useragent::check_safari_version('312'));
     $this->assertFalse(core_useragent::check_safari_version('500'));
     $this->assertFalse(core_useragent::is_chrome());
     $this->assertFalse(core_useragent::check_chrome_version());
     $this->assertFalse(core_useragent::is_safari_ios());
     $this->assertFalse(core_useragent::check_safari_ios_version());
     core_useragent::instance(true, $this->user_agents['Safari iOS']['528']['iPhone']);
     $this->assertTrue(core_useragent::is_safari_ios());
     $this->assertTrue(core_useragent::check_safari_ios_version());
     $this->assertTrue(core_useragent::is_webkit());
     $this->assertTrue(core_useragent::check_webkit_version());
     $this->assertTrue(core_useragent::check_safari_ios_version('527'));
     $this->assertFalse(core_useragent::check_safari_ios_version(590));
     $this->assertFalse(core_useragent::check_safari_version('312'));
     $this->assertFalse(core_useragent::check_safari_version('500'));
     $this->assertFalse(core_useragent::is_chrome());
     $this->assertFalse(core_useragent::check_chrome_version());
     core_useragent::instance(true, $this->user_agents['WebKit Android']['530']['Nexus']);
     $this->assertTrue(core_useragent::is_webkit());
     $this->assertTrue(core_useragent::check_webkit_version());
     $this->assertTrue(core_useragent::check_webkit_android_version('527'));
     $this->assertFalse(core_useragent::check_webkit_android_version(590));
     $this->assertFalse(core_useragent::is_safari());
     $this->assertFalse(core_useragent::check_safari_version());
     $this->assertFalse(core_useragent::is_chrome());
     $this->assertFalse(core_useragent::check_chrome_version());
     core_useragent::instance(true, $this->user_agents['WebKit Android']['537']['Samsung GT-9505']);
     $this->assertTrue(core_useragent::is_webkit());
     $this->assertTrue(core_useragent::check_webkit_version());
     $this->assertTrue(core_useragent::check_webkit_android_version('527'));
     $this->assertTrue(core_useragent::is_chrome());
     $this->assertTrue(core_useragent::check_chrome_version());
     $this->assertFalse(core_useragent::check_webkit_android_version(590));
     $this->assertFalse(core_useragent::is_safari());
     $this->assertFalse(core_useragent::check_safari_version());
     core_useragent::instance(true, $this->user_agents['WebKit Android']['537']['Nexus 5']);
     $this->assertTrue(core_useragent::is_webkit());
     $this->assertTrue(core_useragent::check_webkit_version());
     $this->assertTrue(core_useragent::check_webkit_android_version('527'));
     $this->assertTrue(core_useragent::is_chrome());
     $this->assertTrue(core_useragent::check_chrome_version());
     $this->assertFalse(core_useragent::check_webkit_android_version(590));
     $this->assertFalse(core_useragent::is_safari());
     $this->assertFalse(core_useragent::check_safari_version());
     core_useragent::instance(true, $this->user_agents['Chrome']['8']['Mac OS X']);
     $this->assertTrue(core_useragent::is_chrome());
     $this->assertTrue(core_useragent::check_chrome_version());
     $this->assertTrue(core_useragent::is_webkit());
     $this->assertTrue(core_useragent::check_webkit_version());
     $this->assertTrue(core_useragent::check_chrome_version(8));
     $this->assertFalse(core_useragent::check_chrome_version(10));
     $this->assertFalse(core_useragent::check_safari_version('1'));
     core_useragent::instance(true, $this->user_agents['Opera']['9.0']['Windows XP']);
     $this->assertTrue(core_useragent::is_opera());
     $this->assertTrue(core_useragent::check_opera_version());
     $this->assertTrue(core_useragent::check_opera_version('8.0'));
     $this->assertFalse(core_useragent::check_opera_version('10.0'));
     core_useragent::instance(true, $this->user_agents['MSIE']['6.0']['Windows XP SP2']);
     $this->assertTrue(core_useragent::is_ie());
     $this->assertTrue(core_useragent::check_ie_version());
     $this->assertTrue(core_useragent::check_ie_version('5.0'));
     $this->assertFalse(core_useragent::check_ie_compatibility_view());
     $this->assertFalse(core_useragent::check_ie_version('7.0'));
     core_useragent::instance(true, $this->user_agents['MSIE']['5.0']['Windows 98']);
     $this->assertFalse(core_useragent::is_ie());
     $this->assertFalse(core_useragent::check_ie_version());
     $this->assertTrue(core_useragent::check_ie_version(0));
     $this->assertTrue(core_useragent::check_ie_version('5.0'));
     $this->assertFalse(core_useragent::check_ie_compatibility_view());
     $this->assertFalse(core_useragent::check_ie_version('7.0'));
     core_useragent::instance(true, $this->user_agents['MSIE']['9.0']['Windows 7']);
     $this->assertTrue(core_useragent::is_ie());
     $this->assertTrue(core_useragent::check_ie_version());
     $this->assertTrue(core_useragent::check_ie_version(0));
     $this->assertTrue(core_useragent::check_ie_version('5.0'));
     $this->assertTrue(core_useragent::check_ie_version('9.0'));
     $this->assertFalse(core_useragent::check_ie_compatibility_view());
     $this->assertFalse(core_useragent::check_ie_version('10'));
     core_useragent::instance(true, $this->user_agents['MSIE']['9.0i']['Windows 7']);
     $this->assertTrue(core_useragent::is_ie());
     $this->assertTrue(core_useragent::check_ie_version());
     $this->assertTrue(core_useragent::check_ie_version(0));
     $this->assertTrue(core_useragent::check_ie_version('5.0'));
     $this->assertTrue(core_useragent::check_ie_version('9.0'));
     $this->assertTrue(core_useragent::check_ie_compatibility_view());
     $this->assertFalse(core_useragent::check_ie_version('10'));
     core_useragent::instance(true, $this->user_agents['MSIE']['10.0']['Windows 8']);
     $this->assertTrue(core_useragent::is_ie());
     $this->assertTrue(core_useragent::check_ie_version());
     $this->assertTrue(core_useragent::check_ie_version(0));
     $this->assertTrue(core_useragent::check_ie_version('5.0'));
     $this->assertTrue(core_useragent::check_ie_version('9.0'));
     $this->assertTrue(core_useragent::check_ie_version('10'));
     $this->assertFalse(core_useragent::check_ie_compatibility_view());
     $this->assertFalse(core_useragent::check_ie_version('11'));
     core_useragent::instance(true, $this->user_agents['MSIE']['10.0i']['Windows 8']);
     $this->assertTrue(core_useragent::is_ie());
     $this->assertTrue(core_useragent::check_ie_version());
     $this->assertTrue(core_useragent::check_ie_version(0));
     $this->assertTrue(core_useragent::check_ie_version('5.0'));
     $this->assertTrue(core_useragent::check_ie_version('9.0'));
     $this->assertTrue(core_useragent::check_ie_version('10'));
     $this->assertTrue(core_useragent::check_ie_compatibility_view());
     $this->assertFalse(core_useragent::check_ie_version('11'));
     core_useragent::instance(true, $this->user_agents['MSIE']['11.0']['Windows 8.1']);
     $this->assertTrue(core_useragent::is_ie());
     $this->assertTrue(core_useragent::check_ie_version());
     $this->assertTrue(core_useragent::check_ie_version(0));
     $this->assertTrue(core_useragent::check_ie_version('5.0'));
     $this->assertTrue(core_useragent::check_ie_version('9.0'));
     $this->assertTrue(core_useragent::check_ie_version('10'));
     $this->assertTrue(core_useragent::check_ie_version('11'));
     $this->assertFalse(core_useragent::check_ie_compatibility_view());
     $this->assertFalse(core_useragent::check_ie_version('12'));
     core_useragent::instance(true, $this->user_agents['MSIE']['11.0i']['Windows 8.1']);
     $this->assertTrue(core_useragent::is_ie());
     $this->assertTrue(core_useragent::check_ie_version());
     $this->assertTrue(core_useragent::check_ie_version(0));
     $this->assertTrue(core_useragent::check_ie_version('5.0'));
     $this->assertTrue(core_useragent::check_ie_version('9.0'));
     $this->assertTrue(core_useragent::check_ie_version('10'));
     $this->assertTrue(core_useragent::check_ie_version('11'));
     $this->assertTrue(core_useragent::check_ie_compatibility_view());
     $this->assertFalse(core_useragent::check_ie_version('12'));
     core_useragent::instance(true, $this->user_agents['Firefox']['2.0']['Windows XP']);
     $this->assertTrue(core_useragent::is_firefox());
     $this->assertTrue(core_useragent::check_firefox_version());
     $this->assertTrue(core_useragent::check_firefox_version('1.5'));
     $this->assertFalse(core_useragent::check_firefox_version('3.0'));
     $this->assertTrue(core_useragent::check_gecko_version('2'));
     $this->assertTrue(core_useragent::check_gecko_version(20030516));
     $this->assertTrue(core_useragent::check_gecko_version(20051106));
     $this->assertTrue(core_useragent::check_gecko_version(2006010100));
     core_useragent::instance(true, $this->user_agents['Firefox']['1.0.6']['Windows XP']);
     $this->assertTrue(core_useragent::is_firefox());
     $this->assertTrue(core_useragent::check_firefox_version());
     $this->assertTrue(core_useragent::check_gecko_version('1'));
     $this->assertFalse(core_useragent::check_gecko_version(20030516));
     $this->assertFalse(core_useragent::check_gecko_version(20051106));
     $this->assertFalse(core_useragent::check_gecko_version(2006010100));
     $this->assertFalse(core_useragent::check_firefox_version('1.5'));
     $this->assertFalse(core_useragent::check_firefox_version('3.0'));
     $this->assertFalse(core_useragent::check_gecko_version('2'));
     core_useragent::instance(true, $this->user_agents['Firefox']['2.0']['Windows XP']);
     $this->assertTrue(core_useragent::is_firefox());
     $this->assertTrue(core_useragent::check_firefox_version());
     $this->assertTrue(core_useragent::check_firefox_version('1.5'));
     $this->assertTrue(core_useragent::check_gecko_version('1'));
     $this->assertTrue(core_useragent::check_gecko_version('2'));
     $this->assertTrue(core_useragent::check_gecko_version(20030516));
     $this->assertTrue(core_useragent::check_gecko_version(20051106));
     $this->assertTrue(core_useragent::check_gecko_version(2006010100));
     $this->assertFalse(core_useragent::check_firefox_version('3.0'));
     core_useragent::instance(true, $this->user_agents['Firefox']['3.6']['Linux']);
     $this->assertTrue(core_useragent::is_firefox());
     $this->assertTrue(core_useragent::check_firefox_version());
     $this->assertTrue(core_useragent::check_firefox_version('1.5'));
     $this->assertTrue(core_useragent::check_firefox_version('3.0'));
     $this->assertTrue(core_useragent::check_gecko_version('2'));
     $this->assertTrue(core_useragent::check_gecko_version('3.6'));
     $this->assertTrue(core_useragent::check_gecko_version(20030516));
     $this->assertTrue(core_useragent::check_gecko_version(20051106));
     $this->assertTrue(core_useragent::check_gecko_version(2006010100));
     $this->assertFalse(core_useragent::check_firefox_version('4'));
     $this->assertFalse(core_useragent::check_firefox_version('10'));
     core_useragent::instance(true, $this->user_agents['Firefox']['3.6']['Linux']);
     $this->assertTrue(core_useragent::is_firefox());
     $this->assertTrue(core_useragent::check_firefox_version());
     $this->assertTrue(core_useragent::check_firefox_version('1.5'));
     $this->assertTrue(core_useragent::check_firefox_version('3.0'));
     $this->assertTrue(core_useragent::check_gecko_version('2'));
     $this->assertTrue(core_useragent::check_gecko_version('3.6'));
     $this->assertTrue(core_useragent::check_gecko_version(20030516));
     $this->assertTrue(core_useragent::check_gecko_version(20051106));
     $this->assertTrue(core_useragent::check_gecko_version(2006010100));
     $this->assertFalse(core_useragent::check_firefox_version('4'));
     $this->assertFalse(core_useragent::check_firefox_version('10'));
     $this->assertFalse(core_useragent::check_firefox_version('18'));
     $this->assertFalse(core_useragent::check_gecko_version('4'));
     core_useragent::instance(true, $this->user_agents['Firefox']['15.0a2']['Windows']);
     $this->assertTrue(core_useragent::is_firefox());
     $this->assertTrue(core_useragent::check_firefox_version());
     $this->assertTrue(core_useragent::check_firefox_version('1.5'));
     $this->assertTrue(core_useragent::check_firefox_version('3.0'));
     $this->assertTrue(core_useragent::check_gecko_version('2'));
     $this->assertTrue(core_useragent::check_gecko_version('3.6'));
     $this->assertTrue(core_useragent::check_gecko_version('15.0'));
     $this->assertTrue(core_useragent::check_gecko_version(20030516));
     $this->assertTrue(core_useragent::check_gecko_version(20051106));
     $this->assertTrue(core_useragent::check_gecko_version(2006010100));
     $this->assertTrue(core_useragent::check_firefox_version('4'));
     $this->assertTrue(core_useragent::check_firefox_version('10'));
     $this->assertTrue(core_useragent::check_firefox_version('15'));
     $this->assertFalse(core_useragent::check_firefox_version('18'));
     $this->assertFalse(core_useragent::check_gecko_version('18'));
     core_useragent::instance(true, $this->user_agents['Firefox']['18.0']['Mac OS X']);
     $this->assertTrue(core_useragent::is_firefox());
     $this->assertTrue(core_useragent::check_firefox_version());
     $this->assertTrue(core_useragent::check_firefox_version('1.5'));
     $this->assertTrue(core_useragent::check_firefox_version('3.0'));
     $this->assertTrue(core_useragent::check_gecko_version('2'));
     $this->assertTrue(core_useragent::check_gecko_version('3.6'));
     $this->assertTrue(core_useragent::check_gecko_version('15.0'));
     $this->assertTrue(core_useragent::check_gecko_version('18.0'));
     $this->assertTrue(core_useragent::check_gecko_version(20030516));
     $this->assertTrue(core_useragent::check_gecko_version(20051106));
     $this->assertTrue(core_useragent::check_gecko_version(2006010100));
     $this->assertTrue(core_useragent::check_firefox_version('4'));
     $this->assertTrue(core_useragent::check_firefox_version('10'));
     $this->assertTrue(core_useragent::check_firefox_version('15'));
     $this->assertTrue(core_useragent::check_firefox_version('18'));
     $this->assertFalse(core_useragent::check_firefox_version('19'));
     $this->assertFalse(core_useragent::check_gecko_version('19'));
     core_useragent::instance(true, $this->user_agents['SeaMonkey']['2.0']['Windows']);
     $this->assertTrue(core_useragent::check_gecko_version('2'));
     $this->assertTrue(core_useragent::check_gecko_version(20030516));
     $this->assertTrue(core_useragent::check_gecko_version(20051106));
     $this->assertTrue(core_useragent::check_gecko_version(2006010100));
     $this->assertFalse(core_useragent::check_gecko_version('3.6'));
     $this->assertFalse(core_useragent::check_gecko_version('4.0'));
     $this->assertFalse(core_useragent::is_firefox());
     $this->assertFalse(core_useragent::check_firefox_version());
     core_useragent::instance(true, $this->user_agents['SeaMonkey']['2.1']['Linux']);
     $this->assertTrue(core_useragent::check_gecko_version('2'));
     $this->assertTrue(core_useragent::check_gecko_version('3.6'));
     $this->assertTrue(core_useragent::check_gecko_version('4.0'));
     $this->assertTrue(core_useragent::check_gecko_version(20030516));
     $this->assertTrue(core_useragent::check_gecko_version(20051106));
     $this->assertTrue(core_useragent::check_gecko_version(2006010100));
     $this->assertTrue(core_useragent::is_firefox());
     $this->assertTrue(core_useragent::check_firefox_version());
     $this->assertTrue(core_useragent::check_firefox_version(4.0));
     $this->assertFalse(core_useragent::check_firefox_version(5));
     $this->assertFalse(core_useragent::check_gecko_version('18.0'));
 }
Exemplo n.º 4
0
 /**
  * Modifies $_SERVER['HTTP_USER_AGENT'] manually to check if check_browser_version
  * works as expected.
  */
 public function test_check_browser_version()
 {
     core_useragent::instance(true, $this->user_agents['Safari']['412']['Mac OS X']);
     $this->assertTrue(core_useragent::is_safari());
     $this->assertTrue(core_useragent::check_safari_version());
     $this->assertTrue(core_useragent::is_webkit());
     $this->assertTrue(core_useragent::check_webkit_version());
     $this->assertTrue(core_useragent::check_safari_version('312'));
     $this->assertFalse(core_useragent::check_safari_version('500'));
     $this->assertFalse(core_useragent::is_chrome());
     $this->assertFalse(core_useragent::check_chrome_version());
     $this->assertFalse(core_useragent::is_safari_ios());
     $this->assertFalse(core_useragent::check_safari_ios_version());
     $this->assertFalse(core_useragent::is_msword());
     core_useragent::instance(true, $this->user_agents['Safari iOS']['528']['iPhone']);
     $this->assertTrue(core_useragent::is_safari_ios());
     $this->assertTrue(core_useragent::check_safari_ios_version());
     $this->assertTrue(core_useragent::is_webkit());
     $this->assertTrue(core_useragent::check_webkit_version());
     $this->assertTrue(core_useragent::check_safari_ios_version('527'));
     $this->assertFalse(core_useragent::check_safari_ios_version(590));
     $this->assertFalse(core_useragent::check_safari_version('312'));
     $this->assertFalse(core_useragent::check_safari_version('500'));
     $this->assertFalse(core_useragent::is_chrome());
     $this->assertFalse(core_useragent::check_chrome_version());
     $this->assertFalse(core_useragent::is_msword());
     core_useragent::instance(true, $this->user_agents['WebKit Android']['530']['Nexus']);
     $this->assertTrue(core_useragent::is_webkit());
     $this->assertTrue(core_useragent::check_webkit_version());
     $this->assertTrue(core_useragent::check_webkit_android_version('527'));
     $this->assertFalse(core_useragent::check_webkit_android_version(590));
     $this->assertFalse(core_useragent::is_safari());
     $this->assertFalse(core_useragent::check_safari_version());
     $this->assertFalse(core_useragent::is_chrome());
     $this->assertFalse(core_useragent::check_chrome_version());
     $this->assertFalse(core_useragent::is_msword());
     core_useragent::instance(true, $this->user_agents['WebKit Android']['537']['Samsung GT-9505']);
     $this->assertTrue(core_useragent::is_webkit());
     $this->assertTrue(core_useragent::check_webkit_version());
     $this->assertTrue(core_useragent::check_webkit_android_version('527'));
     $this->assertTrue(core_useragent::is_chrome());
     $this->assertTrue(core_useragent::check_chrome_version());
     $this->assertFalse(core_useragent::check_webkit_android_version(590));
     $this->assertFalse(core_useragent::is_safari());
     $this->assertFalse(core_useragent::check_safari_version());
     core_useragent::instance(true, $this->user_agents['WebKit Android']['537']['Nexus 5']);
     $this->assertTrue(core_useragent::is_webkit());
     $this->assertTrue(core_useragent::check_webkit_version());
     $this->assertTrue(core_useragent::check_webkit_android_version('527'));
     $this->assertTrue(core_useragent::is_chrome());
     $this->assertTrue(core_useragent::check_chrome_version());
     $this->assertFalse(core_useragent::check_webkit_android_version(590));
     $this->assertFalse(core_useragent::is_safari());
     $this->assertFalse(core_useragent::check_safari_version());
     core_useragent::instance(true, $this->user_agents['Chrome']['8']['Mac OS X']);
     $this->assertTrue(core_useragent::is_chrome());
     $this->assertTrue(core_useragent::check_chrome_version());
     $this->assertTrue(core_useragent::is_webkit());
     $this->assertTrue(core_useragent::check_webkit_version());
     $this->assertTrue(core_useragent::check_chrome_version(8));
     $this->assertFalse(core_useragent::check_chrome_version(10));
     $this->assertFalse(core_useragent::check_safari_version('1'));
     $this->assertFalse(core_useragent::is_msword());
     core_useragent::instance(true, $this->user_agents['Opera']['9.0']['Windows XP']);
     $this->assertTrue(core_useragent::is_opera());
     $this->assertTrue(core_useragent::check_opera_version());
     $this->assertTrue(core_useragent::check_opera_version('8.0'));
     $this->assertFalse(core_useragent::check_opera_version('10.0'));
     $this->assertFalse(core_useragent::is_msword());
     core_useragent::instance(true, $this->user_agents['MSIE']['6.0']['Windows XP SP2']);
     $this->assertTrue(core_useragent::is_ie());
     $this->assertTrue(core_useragent::check_ie_version());
     $this->assertTrue(core_useragent::check_ie_version('5.0'));
     $this->assertFalse(core_useragent::check_ie_compatibility_view());
     $this->assertFalse(core_useragent::check_ie_version('7.0'));
     $this->assertFalse(core_useragent::is_msword());
     core_useragent::instance(true, $this->user_agents['MSIE']['5.0']['Windows 98']);
     $this->assertFalse(core_useragent::is_ie());
     $this->assertFalse(core_useragent::check_ie_version());
     $this->assertTrue(core_useragent::check_ie_version(0));
     $this->assertTrue(core_useragent::check_ie_version('5.0'));
     $this->assertFalse(core_useragent::check_ie_compatibility_view());
     $this->assertFalse(core_useragent::check_ie_version('7.0'));
     $this->assertFalse(core_useragent::is_msword());
     core_useragent::instance(true, $this->user_agents['MSIE']['7.0']['Windows XP SP2']);
     $this->assertTrue(core_useragent::is_ie());
     $this->assertTrue(core_useragent::check_ie_version());
     $this->assertTrue(core_useragent::check_ie_version('7.0'));
     $this->assertFalse(core_useragent::check_ie_compatibility_view());
     $this->assertFalse(core_useragent::check_ie_version('8.0'));
     $this->assertFalse(core_useragent::is_msword());
     core_useragent::instance(true, $this->user_agents['MSIE']['7.0b']['Windows XP']);
     $this->assertTrue(core_useragent::is_ie());
     $this->assertTrue(core_useragent::check_ie_version());
     $this->assertTrue(core_useragent::check_ie_version('7.0'));
     $this->assertFalse(core_useragent::check_ie_compatibility_view());
     $this->assertFalse(core_useragent::check_ie_version('8.0'));
     $this->assertFalse(core_useragent::is_msword());
     core_useragent::instance(true, $this->user_agents['MSIE']['9.0']['Windows 7']);
     $this->assertTrue(core_useragent::is_ie());
     $this->assertTrue(core_useragent::check_ie_version());
     $this->assertTrue(core_useragent::check_ie_version(0));
     $this->assertTrue(core_useragent::check_ie_version('5.0'));
     $this->assertTrue(core_useragent::check_ie_version('9.0'));
     $this->assertFalse(core_useragent::check_ie_compatibility_view());
     $this->assertFalse(core_useragent::check_ie_version('10'));
     $this->assertFalse(core_useragent::is_msword());
     core_useragent::instance(true, $this->user_agents['MSIE']['9.0i']['Windows 7']);
     $this->assertTrue(core_useragent::is_ie());
     $this->assertTrue(core_useragent::check_ie_version());
     $this->assertTrue(core_useragent::check_ie_version(0));
     $this->assertTrue(core_useragent::check_ie_version('5.0'));
     $this->assertTrue(core_useragent::check_ie_version('9.0'));
     $this->assertTrue(core_useragent::check_ie_compatibility_view());
     $this->assertFalse(core_useragent::check_ie_version('10'));
     $this->assertFalse(core_useragent::is_msword());
     core_useragent::instance(true, $this->user_agents['MSIE']['10.0']['Windows 8']);
     $this->assertTrue(core_useragent::is_ie());
     $this->assertTrue(core_useragent::check_ie_version());
     $this->assertTrue(core_useragent::check_ie_version(0));
     $this->assertTrue(core_useragent::check_ie_version('5.0'));
     $this->assertTrue(core_useragent::check_ie_version('9.0'));
     $this->assertTrue(core_useragent::check_ie_version('10'));
     $this->assertFalse(core_useragent::check_ie_compatibility_view());
     $this->assertFalse(core_useragent::check_ie_version('11'));
     $this->assertFalse(core_useragent::is_msword());
     core_useragent::instance(true, $this->user_agents['MSIE']['10.0i']['Windows 8']);
     $this->assertTrue(core_useragent::is_ie());
     $this->assertTrue(core_useragent::check_ie_version());
     $this->assertTrue(core_useragent::check_ie_version(0));
     $this->assertTrue(core_useragent::check_ie_version('5.0'));
     $this->assertTrue(core_useragent::check_ie_version('9.0'));
     $this->assertTrue(core_useragent::check_ie_version('10'));
     $this->assertTrue(core_useragent::check_ie_compatibility_view());
     $this->assertFalse(core_useragent::check_ie_version('11'));
     $this->assertFalse(core_useragent::is_msword());
     core_useragent::instance(true, $this->user_agents['MSIE']['11.0']['Windows 8.1']);
     $this->assertTrue(core_useragent::is_ie());
     $this->assertTrue(core_useragent::check_ie_version());
     $this->assertTrue(core_useragent::check_ie_version(0));
     $this->assertTrue(core_useragent::check_ie_version('5.0'));
     $this->assertTrue(core_useragent::check_ie_version('9.0'));
     $this->assertTrue(core_useragent::check_ie_version('10'));
     $this->assertTrue(core_useragent::check_ie_version('11'));
     $this->assertFalse(core_useragent::check_ie_compatibility_view());
     $this->assertFalse(core_useragent::check_ie_version('12'));
     $this->assertFalse(core_useragent::is_msword());
     core_useragent::instance(true, $this->user_agents['MSIE']['11.0i']['Windows 8.1']);
     $this->assertTrue(core_useragent::is_ie());
     $this->assertTrue(core_useragent::check_ie_version());
     $this->assertTrue(core_useragent::check_ie_version(0));
     $this->assertTrue(core_useragent::check_ie_version('5.0'));
     $this->assertTrue(core_useragent::check_ie_version('9.0'));
     $this->assertTrue(core_useragent::check_ie_version('10'));
     $this->assertTrue(core_useragent::check_ie_version('11'));
     $this->assertTrue(core_useragent::check_ie_compatibility_view());
     $this->assertFalse(core_useragent::check_ie_version('12'));
     $this->assertFalse(core_useragent::is_msword());
     core_useragent::instance(true, $this->user_agents['Firefox']['2.0']['Windows XP']);
     $this->assertTrue(core_useragent::is_firefox());
     $this->assertTrue(core_useragent::check_firefox_version());
     $this->assertTrue(core_useragent::check_firefox_version('1.5'));
     $this->assertFalse(core_useragent::check_firefox_version('3.0'));
     $this->assertTrue(core_useragent::check_gecko_version('2'));
     $this->assertTrue(core_useragent::check_gecko_version(20030516));
     $this->assertTrue(core_useragent::check_gecko_version(20051106));
     $this->assertTrue(core_useragent::check_gecko_version(2006010100));
     $this->assertFalse(core_useragent::is_msword());
     core_useragent::instance(true, $this->user_agents['Firefox']['1.0.6']['Windows XP']);
     $this->assertTrue(core_useragent::is_firefox());
     $this->assertTrue(core_useragent::check_firefox_version());
     $this->assertTrue(core_useragent::check_gecko_version('1'));
     $this->assertFalse(core_useragent::check_gecko_version(20030516));
     $this->assertFalse(core_useragent::check_gecko_version(20051106));
     $this->assertFalse(core_useragent::check_gecko_version(2006010100));
     $this->assertFalse(core_useragent::check_firefox_version('1.5'));
     $this->assertFalse(core_useragent::check_firefox_version('3.0'));
     $this->assertFalse(core_useragent::check_gecko_version('2'));
     $this->assertFalse(core_useragent::is_msword());
     core_useragent::instance(true, $this->user_agents['Firefox']['2.0']['Windows XP']);
     $this->assertTrue(core_useragent::is_firefox());
     $this->assertTrue(core_useragent::check_firefox_version());
     $this->assertTrue(core_useragent::check_firefox_version('1.5'));
     $this->assertTrue(core_useragent::check_gecko_version('1'));
     $this->assertTrue(core_useragent::check_gecko_version('2'));
     $this->assertTrue(core_useragent::check_gecko_version(20030516));
     $this->assertTrue(core_useragent::check_gecko_version(20051106));
     $this->assertTrue(core_useragent::check_gecko_version(2006010100));
     $this->assertFalse(core_useragent::check_firefox_version('3.0'));
     $this->assertFalse(core_useragent::is_msword());
     core_useragent::instance(true, $this->user_agents['Firefox']['3.6']['Linux']);
     $this->assertTrue(core_useragent::is_firefox());
     $this->assertTrue(core_useragent::check_firefox_version());
     $this->assertTrue(core_useragent::check_firefox_version('1.5'));
     $this->assertTrue(core_useragent::check_firefox_version('3.0'));
     $this->assertTrue(core_useragent::check_gecko_version('2'));
     $this->assertTrue(core_useragent::check_gecko_version('3.6'));
     $this->assertTrue(core_useragent::check_gecko_version(20030516));
     $this->assertTrue(core_useragent::check_gecko_version(20051106));
     $this->assertTrue(core_useragent::check_gecko_version(2006010100));
     $this->assertFalse(core_useragent::check_firefox_version('4'));
     $this->assertFalse(core_useragent::check_firefox_version('10'));
     $this->assertFalse(core_useragent::is_msword());
     core_useragent::instance(true, $this->user_agents['Firefox']['3.6']['Linux']);
     $this->assertTrue(core_useragent::is_firefox());
     $this->assertTrue(core_useragent::check_firefox_version());
     $this->assertTrue(core_useragent::check_firefox_version('1.5'));
     $this->assertTrue(core_useragent::check_firefox_version('3.0'));
     $this->assertTrue(core_useragent::check_gecko_version('2'));
     $this->assertTrue(core_useragent::check_gecko_version('3.6'));
     $this->assertTrue(core_useragent::check_gecko_version(20030516));
     $this->assertTrue(core_useragent::check_gecko_version(20051106));
     $this->assertTrue(core_useragent::check_gecko_version(2006010100));
     $this->assertFalse(core_useragent::check_firefox_version('4'));
     $this->assertFalse(core_useragent::check_firefox_version('10'));
     $this->assertFalse(core_useragent::check_firefox_version('18'));
     $this->assertFalse(core_useragent::check_gecko_version('4'));
     $this->assertFalse(core_useragent::is_msword());
     core_useragent::instance(true, $this->user_agents['Firefox']['15.0a2']['Windows']);
     $this->assertTrue(core_useragent::is_firefox());
     $this->assertTrue(core_useragent::check_firefox_version());
     $this->assertTrue(core_useragent::check_firefox_version('1.5'));
     $this->assertTrue(core_useragent::check_firefox_version('3.0'));
     $this->assertTrue(core_useragent::check_gecko_version('2'));
     $this->assertTrue(core_useragent::check_gecko_version('3.6'));
     $this->assertTrue(core_useragent::check_gecko_version('15.0'));
     $this->assertTrue(core_useragent::check_gecko_version(20030516));
     $this->assertTrue(core_useragent::check_gecko_version(20051106));
     $this->assertTrue(core_useragent::check_gecko_version(2006010100));
     $this->assertTrue(core_useragent::check_firefox_version('4'));
     $this->assertTrue(core_useragent::check_firefox_version('10'));
     $this->assertTrue(core_useragent::check_firefox_version('15'));
     $this->assertFalse(core_useragent::check_firefox_version('18'));
     $this->assertFalse(core_useragent::check_gecko_version('18'));
     $this->assertFalse(core_useragent::is_msword());
     core_useragent::instance(true, $this->user_agents['Firefox']['18.0']['Mac OS X']);
     $this->assertTrue(core_useragent::is_firefox());
     $this->assertTrue(core_useragent::check_firefox_version());
     $this->assertTrue(core_useragent::check_firefox_version('1.5'));
     $this->assertTrue(core_useragent::check_firefox_version('3.0'));
     $this->assertTrue(core_useragent::check_gecko_version('2'));
     $this->assertTrue(core_useragent::check_gecko_version('3.6'));
     $this->assertTrue(core_useragent::check_gecko_version('15.0'));
     $this->assertTrue(core_useragent::check_gecko_version('18.0'));
     $this->assertTrue(core_useragent::check_gecko_version(20030516));
     $this->assertTrue(core_useragent::check_gecko_version(20051106));
     $this->assertTrue(core_useragent::check_gecko_version(2006010100));
     $this->assertTrue(core_useragent::check_firefox_version('4'));
     $this->assertTrue(core_useragent::check_firefox_version('10'));
     $this->assertTrue(core_useragent::check_firefox_version('15'));
     $this->assertTrue(core_useragent::check_firefox_version('18'));
     $this->assertFalse(core_useragent::check_firefox_version('19'));
     $this->assertFalse(core_useragent::check_gecko_version('19'));
     $this->assertFalse(core_useragent::is_msword());
     core_useragent::instance(true, $this->user_agents['SeaMonkey']['2.0']['Windows']);
     $this->assertTrue(core_useragent::check_gecko_version('2'));
     $this->assertTrue(core_useragent::check_gecko_version(20030516));
     $this->assertTrue(core_useragent::check_gecko_version(20051106));
     $this->assertTrue(core_useragent::check_gecko_version(2006010100));
     $this->assertFalse(core_useragent::check_gecko_version('3.6'));
     $this->assertFalse(core_useragent::check_gecko_version('4.0'));
     $this->assertFalse(core_useragent::is_firefox());
     $this->assertFalse(core_useragent::check_firefox_version());
     $this->assertFalse(core_useragent::is_msword());
     core_useragent::instance(true, $this->user_agents['SeaMonkey']['2.1']['Linux']);
     $this->assertTrue(core_useragent::check_gecko_version('2'));
     $this->assertTrue(core_useragent::check_gecko_version('3.6'));
     $this->assertTrue(core_useragent::check_gecko_version('4.0'));
     $this->assertTrue(core_useragent::check_gecko_version(20030516));
     $this->assertTrue(core_useragent::check_gecko_version(20051106));
     $this->assertTrue(core_useragent::check_gecko_version(2006010100));
     $this->assertTrue(core_useragent::is_firefox());
     $this->assertTrue(core_useragent::check_firefox_version());
     $this->assertTrue(core_useragent::check_firefox_version(4.0));
     $this->assertFalse(core_useragent::check_firefox_version(5));
     $this->assertFalse(core_useragent::check_gecko_version('18.0'));
     $this->assertFalse(core_useragent::is_msword());
     // We're not really interested in what MS Word gets identified as beyond MS Word itself.
     core_useragent::instance(true, $this->user_agents['MS Word']['2010']['Windows 7']);
     $this->assertTrue(core_useragent::is_msword());
     core_useragent::instance(true, $this->user_agents['MS Word']['2010']['Mac OS X']);
     $this->assertTrue(core_useragent::is_msword());
     // Outlook should not be considered to be MS Word.
     core_useragent::instance(true, $this->user_agents['MS Outlook']['2010']['Windows 7']);
     $this->assertFalse(core_useragent::is_msword());
     // Meridio should not be considered to be MS Word.
     core_useragent::instance(true, $this->user_agents['Meridio']['5.0.251']['Windows XP']);
     $this->assertFalse(core_useragent::is_msword());
 }