2020/manual/manualTest.js (247 lines of code) (raw):

/** * @license * Copyright 2018 Google Inc. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ 'use strict'; /** * MSE Conformance Test Suite. * @class */ var ManualTest = function() { const YOUTUBE_BASE_URL = 'https://www.youtube.com/tv'; const DASH_PLAYER_URL = 'https://ytlr-cert.appspot.com/demoplayer/2020/dash-player.html?manifest_url=assets/'; var testVersion = 'Current Editor\'s Draft'; var demoVideoLink = DASH_PLAYER_URL + 'waymo_vp9_opus.mpd'; if (harnessConfig.novp9) { demoVideoLink = DASH_PLAYER_URL + 'waymo_h264_aac.mpd'; } var tests = []; var info = 'Spec Version: ' + testVersion + ' | Default Timeout: ' + TestBase.timeout + 'ms'; var fields = ['passes', 'failures', 'timeouts']; var createManualTest = function(testId, name, category, link, description = '', passingCriteria = '', instruction = '', mandatory = true) { var t = createTest(name, category, mandatory, testId, 'Manual Tests', '', passingCriteria, instruction, true, link, description); t.prototype.index = tests.length; t.prototype.title = link; t.prototype.start = function() { location.href = link; }; tests.push(t); return t; }; var ref = encodeURIComponent(window.location.href.split('#')[0]); var createUrlwithRefererParam = function(baseUrl) { return util.createUrlwithParams(baseUrl, ['referer=' + ref]); }; var createYTDeeplink = function(params) { var params_array = []; for (var key in params) { params_array.push(key + '=' + params[key]); } var url = YOUTUBE_BASE_URL + '?' + params_array.join('&'); return url; }; createManualTest('21.1.1.1', '12H Endurance', 'In-APP', createYTDeeplink({ list: 'PLT2JIu9jdshr-q6fs7BCqAygvTHwnZUIt' }), 'Testing that the device can play back 12 hours of continuous video.'); createManualTest('21.1.2.1', 'LiveDRM', 'In-APP', createYTDeeplink({ list: 'PLT2JIu9jdshrFoCo9B81bRwsToEazVdpj' }), 'Testing that Live videos using DRM display properly. '); createManualTest('21.1.3.1', 'FPS (Cobalt)', 'In-APP', createYTDeeplink({ list: 'stats', env_showUIStats: 1, env_useZylon: 'false', }), 'Testing that the platform can sustain 60fps during UI navigation. '); createManualTest('21.1.4.1', 'FPS (Webkit)', 'In-APP', createYTDeeplink({ list: 'fps', env_showFPS: 1, env_useZylon: 'false', }), 'Testing that the platform can sustain 60fps during UI navigation. '); createManualTest('21.1.5.1', 'HDR - 1', 'In-APP', createYTDeeplink({ v: 'Ss75O8yllyc', list: 'PLT2JIu9jdshorooZOhIZJNIxa5hAVnToP' }), 'Testing that HDR10 is supported.'); createManualTest('21.1.6.1', 'HDR - 2', 'In-APP', createYTDeeplink({ v: '5w58p6iVhPc' }), 'Testing that HLG is supported. '); createManualTest('21.1.7.1', '60FPS + devicePixelRatio', 'In-APP', createYTDeeplink({ v: 'aqz-KE-bpKQ', list: 'PLT2JIu9jdshoBsbCTUq15c1554EoRNhj3' }), 'Testing that the device can properly play back content at ' + '60fps up to 4k (if supported)'); createManualTest('21.1.8.1', '3D Video', 'In-APP', createYTDeeplink({ list: 'PLT2JIu9jdshqvVr-ZdjndoIYn_HggixZI' }), 'Testing that 3D content is appropriately rendered if supported.'); createManualTest('21.1.9.1', 'WebSpeech', 'In-APP', createYTDeeplink({ env_supportsVoiceSearch: 1 }), 'Parameter to enable Voice Search within YouTube. Required for ' + 'all devices with microphones. '); createManualTest('21.1.10.2', '21:9 Aspect Ratio', 'In-APP', createYTDeeplink({ v: 'L9szn1QQfas' }), 'Testing that 21:9 content is rendered properly (Not cropped, ' + 'stretched or zoomed)'); createManualTest('21.1.11.1', '4:3 Aspect Ratio', 'In-APP', createYTDeeplink({ v: 'MJ62hh0a9U4' }), 'Testing that 4:3 content is rendered properly (Not cropped, ' + 'stretched or zoomed)'); createManualTest('21.1.12.1', '16:9 Aspect Ratio', 'In-APP', createYTDeeplink({ v: 'yaqe1qesQ8c' }), 'Testing that 16:9 content is rendered properly (Not cropped, ' + 'stretched or zoomed)'); createManualTest('21.1.13.1', '17:30 Aspect Ratio', 'In-APP', createYTDeeplink({ v: '-NfJS30FrXQ' }), 'Testing that 17:30 content is rendered properly (Not cropped, ' + 'stretched or zoomed)'); createManualTest('21.1.14.1', 'High Bitrate', 'In-APP', createYTDeeplink({ v: 'n2hMafme3e0' }), 'Testing that higher bitrate content is decoded and displayed ' + 'properly.'); createManualTest('21.1.15.1', 'Audio Sync', 'In-APP', createYTDeeplink({ v: 'cJsyMmC76aM' }), 'Testing that AV sync is properly maintained during video' + ' playback. '); createManualTest('21.1.16.1', 'Live Channel', 'In-APP', createYTDeeplink({ c: 'UC4R8DWoMoI7CAwX8_LjQHig' }), 'Testing that LIve content displays properly.'); createManualTest( '21.1.17.1', 'Device Authentication', 'In-APP', createYTDeeplink({ show_signature_verification_watermark: 1, cert_scope: harnessConfig.cert_scope, sig: harnessConfig.sig, start_time: harnessConfig.start_time }), 'Testing that the device has a valid Lightweight Auth Key.'); createManualTest('21.2.1.1', 'Cert Performance', 'In-APP Performance', createYTDeeplink({ loader: 'certperf' }), 'Testing device performance for normal in-app usage ' + 'against technical specs'); createManualTest('21.2.2.1', '12 Hours Key Input Stress', 'In-APP Performance', createYTDeeplink({ automationRoutine: 'airstreamBrowseRoutine', env_useZylon: 'false' }), 'Testing 12 hours in-app D-pad navigation browse endurance'); createManualTest('21.2.3.1', '4 Hours Browse Watch', 'In-APP Performance', createYTDeeplink({ automationRoutine: 'deviceCertRoutine', env_useZylon: 'false' }), 'Testing 4 hours in-app navigation and watch endurance '); createManualTest('21.2.4.1', 'System Overlay', 'In-APP Performance', createYTDeeplink({ automationRoutine: 'deviceCertRoutine', env_showUIStats: 'true', env_useZylon: 'false' }), 'Testing in-app focus/blur performance degration'); createManualTest('21.3.1.1', 'Adaptive Bit Rate', 'Media', demoVideoLink, 'Testing MediaSource Extension\'s Adaptive Bitrate playback.'); createManualTest('21.3.2.2', 'Dual Video', 'Media', 'manual/dual_video.html', 'Testing dual video playback, one DRM and one 15fps non-DRM'); createManualTest('21.3.3.1', 'Resizing', 'Media', 'manual/resizing.html', 'Testing video resizing and graphics layer alignment. '); createManualTest('21.3.4.1', 'Current Time', 'Media', 'https://www.youtube.com/tv?env_showUIStats=true#/watch/video/' + 'idle?v=RgodTgI2EDo&resume', 'Testing that the video.currentTime is accurate within ' + '32ms of a paused frame of video. '); createManualTest('21.4.1.1', '0.25x', 'Playback Rate', demoVideoLink + '&playbackRate=0.25', 'Testing that deeplinking into a video playback with a' + ' playbackRate set actually plays at the specified rate.'); createManualTest('21.4.2.1', '0.5x', 'Playback Rate', demoVideoLink + '&playbackRate=0.5', 'Testing that deeplinking into a video playback with a ' + 'playbackRate set actually plays at the specified rate.'); createManualTest('21.4.8.1', '0.75x', 'Playback Rate', demoVideoLink + '&playbackRate=0.75', 'Testing that deeplinking into a video playback with a ' + 'playbackRate set actually plays at the specified rate.'); createManualTest('21.4.3.1', '1.0x', 'Playback Rate', demoVideoLink + '&playbackRate=1.0', 'Testing that deeplinking into a video playback with a' + ' playbackRate set actually plays at the specified rate.'); createManualTest('21.4.4.1', '1.25x', 'Playback Rate', demoVideoLink + '&playbackRate=1.25', 'Testing that deeplinking into a video playback with a ' + 'playbackRate set actually plays at the specified rate.'); createManualTest('21.4.5.1', '1.5x', 'Playback Rate', demoVideoLink + '&playbackRate=1.5', 'Testing that deeplinking into a video playback with a ' + 'playbackRate set actually plays at the specified rate.'); createManualTest('21.4.9.1', '1.75x', 'Playback Rate', demoVideoLink + '&playbackRate=1.75', 'Testing that deeplinking into a video playback with a ' + 'playbackRate set actually plays at the specified rate.'); createManualTest('21.4.6.1', '2.0x', 'Playback Rate', demoVideoLink + '&playbackRate=2.0', 'Testing that deeplinking into a video playback with a' + ' playbackRate set actually plays at the specified rate.'); createManualTest('21.4.7.1', 'Runtime Change', 'Playback Rate', demoVideoLink, 'Testing that after starting a video with a playbackRate of ' + '1.0, subsequent changes of playbackRate to other values are respected.'); createManualTest('21.5.1.1', 'Widevine', 'DRM', 'manual/widevine_license_request.html', 'Testing that the Widevine settings meet the requirements ' + 'for identification of the device and OEMCrypto version.'); createManualTest('21.5.2.1', 'DRM', 'DRM', 'https://ytlr-cert.appspot.com/demoplayer/2020/dash-player.html?' + 'manifest_url=assets/oops_cenc_pssh.mpd', 'Testing the combination of MediaSource Adaptive Bitrate' + ' playback and DRM.'); createManualTest('21.5.3.1', 'Purchased Movie #1', 'DRM', 'https://www.youtube.com/tv?env_isVideoInfoVisible=1&v=MeFoUwes8nE', ''); createManualTest('21.5.4.1', 'Purchased Movie #2', 'DRM', 'https://www.youtube.com/watch?env_isVideoInfoVisible=1&v=iNvUS1dnwfw', ''); createManualTest('21.5.5.1', 'VP9 Subsample', 'DRM', 'https://ytlr-cert.appspot.com/demoplayer/2020/dash-player.html?' + 'manifest_url=assets/sintel_vp9_subsample.mpd', 'Testing DRM Widevine & VP9'); createManualTest('21.6.1.1', 'Non-animated WebP', 'WebP', 'manual/webp.html', 'Testing that WebP images can be properly decoded and ' + 'displayed on the device.'); createManualTest('21.6.2.1', 'Animated WebP', 'WebP', 'manual/' + 'webp_animated.html', 'Testing that animated WebP images can be properly decoded ' + 'and displayed on the device, at a framerate of 10fps. '); createManualTest('21.6.3.1', 'YouTube App with WebP', 'WebP', 'https://www.youtube.com/tv?env_supportsAnimatedWebp=true#/', 'Parameter that forces WebP thumbnails within the YouTube ' + 'application. '); createManualTest('21.7.1.1', 'Map-To-Mesh 720P', 'Spherical - Cobalt', 'manual/mtm720.html', 'Testing that Cobalt\'s Map-to-Mesh feature appropriately ' + 'decodes video to textures. Used for 360 video. '); createManualTest('21.7.2.1', 'Map-To-Mesh 1080P', 'Spherical - Cobalt', 'manual/mtm1080.html', 'Testing that Cobalt\'s Map-to-Mesh feature appropriately ' + 'decodes video to textures. Used for 360 video. '); createManualTest('21.7.3.1', 'Map-To-Mesh 1440P', 'Spherical - Cobalt', 'manual/mtm1440.html', 'Testing that Cobalt\'s Map-to-Mesh feature appropriately ' + 'decodes video to textures. Used for 360 video. '); createManualTest('21.7.4.1', 'Map-To-Mesh 2160P', 'Spherical - Cobalt', 'manual/mtm2160.html', 'Testing that Cobalt\'s Map-to-Mesh feature appropriately ' + 'decodes video to textures. Used for 360 video. '); createManualTest('21.999.1.1', 'Key Event', 'ETC', 'manual/key_event.html', 'Testing that the keyrepeat rate of the platform is ' + 'appropriately set, per the requirements.'); createManualTest('21.999.2.1', 'Fetch API', 'ETC', createUrlwithRefererParam( 'https://qual-e.appspot.com/fetch.html'), 'This tests that the Fetch API works properly. This page is ' + 'provided for debugging.'); createManualTest('21.999.3.1', 'Web Audio', 'ETC', 'manual/web_audio.' + 'html', 'Testing that WebAudio works properly and can play audio ' + 'while video playback occurs. '); createManualTest('21.999.4.1', 'Cookie', 'ETC', 'manual/cookie.html', 'Testing that Cookies are stored properly and persist until ' + 'cleared.\n' + 'This test relies on Cookies being set, and remaining persistently in ' + 'storage until they expire.'); createManualTest('21.999.5.1', 'Fonts', 'ETC', 'manual/fonts.html', 'Testing that all required font formats are supported by ' + 'the device.'); createManualTest('21.999.6.1', 'Localization', 'ETC', 'manual/localization.html', 'Testing that the platform supports the required fonts to ' + 'display all languages required.'); createManualTest('21.999.7.1', 'Page Visibility API', 'ETC', 'manual/page_visibility.html', 'Testing that the Cobalt Application Lifecycle is appropriately ' + 'implemented on the platform. '); createManualTest('21.999.8.1', 'Captions API', 'ETC', 'manual/caption.html', 'Testing that the platform system settings supports closed captions ' + 'is correctly linked with Cobalt settings'); return { tests: tests, info: info, fields: fields, viewType: 'default' }; }; try { exports.getTest = ManualTest; } catch (e) { // do nothing, this function is not supposed to work for browser, but it's for // Node js to generate json file instead. }