Commit 8545033d authored by dpapad's avatar dpapad Committed by Commit Bot

PDF Viewer: JS type-checking for more tests.

Specifically:
 - bookmarks_test
 - material_elements_test
 - params_parser_test

Bug: 1000989
Change-Id: Ife9caa747482afe05eed471f4a70f85fa77e7cf9
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2321243
Auto-Submit: dpapad <dpapad@chromium.org>
Reviewed-by: default avatarRebekah Potter <rbpotter@chromium.org>
Commit-Queue: dpapad <dpapad@chromium.org>
Cr-Commit-Position: refs/heads/master@{#792268}
parent b5443388
......@@ -26,9 +26,9 @@ Polymer({
},
},
/** @return {!CrInputElement} */
/** @return {!HTMLInputElement} */
get pageSelector() {
return /** @type {!CrInputElement} */ (this.$.pageselector);
return /** @type {!HTMLInputElement} */ (this.$.pageselector);
},
pageNoCommitted() {
......
......@@ -4,6 +4,16 @@
import {FittingType} from './constants.js';
/**
* @typedef {{
* url: (string|undefined),
* zoom: (number|undefined),
* view: (!FittingType|undefined),
* viewPosition: ({x: number, y: number}|undefined)
* }}
*/
let OpenPdfParams;
// Parses the open pdf parameters passed in the url to set initial viewport
// settings for opening the pdf.
export class OpenPdfParamsParser {
......@@ -23,7 +33,7 @@ export class OpenPdfParamsParser {
* Parse zoom parameter of open PDF parameters. The PDF should be opened at
* the specified zoom level.
* @param {string} paramValue zoom value.
* @return {Object} Map with zoom parameters (zoom and position).
* @return {!OpenPdfParams} Map with zoom parameters (zoom and position).
* @private
*/
parseZoomParam_(paramValue) {
......@@ -55,7 +65,7 @@ export class OpenPdfParamsParser {
* Parse view parameter of open PDF parameters. The PDF should be opened at
* the specified fitting type mode and position.
* @param {string} paramValue view value.
* @return {Object} Map with view parameters (view and viewPosition).
* @return {!OpenPdfParams} Map with view parameters (view and viewPosition).
* @private
*/
parseViewParam_(paramValue) {
......@@ -128,7 +138,8 @@ export class OpenPdfParamsParser {
* See http://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/
* pdfs/pdf_open_parameters.pdf for details.
* @param {string} url that needs to be parsed.
* @param {Function} callback function to be called with viewport info.
* @param {function(!OpenPdfParams)} callback function to be called with
* viewport info.
*/
getViewportFromUrlParams(url, callback) {
const params = {};
......
......@@ -16,19 +16,18 @@ js_type_check("closure_compile") {
":basic_plugin_test",
":basic_test",
":beep_test",
#":bookmarks_test",
":bookmarks_test",
":download_controls_test",
":gesture_detector_test",
":layout_test",
":material_elements_test",
#":material_elements_test",
#":metrics_test",
#":navigator_test",
":nobeep_test",
":page_change_test",
":params_parser_test",
#":params_parser_test",
#":printing_icon_test",
#":redirects_fail_test",
":test_util",
......@@ -72,6 +71,16 @@ js_library("beep_test") {
externs_list = [ "$externs_path/test.js" ]
}
js_library("bookmarks_test") {
deps = [
":test_util",
"//chrome/browser/resources/pdf:pdf_scripting_api",
"//chrome/browser/resources/pdf:pdf_viewer",
"//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled",
]
externs_list = [ "$externs_path/test.js" ]
}
js_library("gesture_detector_test") {
deps = [
"//chrome/browser/resources/pdf:gesture_detector",
......@@ -88,6 +97,20 @@ js_library("layout_test") {
externs_list = [ "$externs_path/test.js" ]
}
js_library("material_elements_test") {
deps = [
":test_util",
"//chrome/browser/resources/pdf:constants",
"//chrome/browser/resources/pdf/elements:viewer-page-selector",
"//chrome/browser/resources/pdf/elements:viewer-toolbar-dropdown",
"//chrome/browser/resources/pdf/elements:viewer-zoom-button",
"//chrome/browser/resources/pdf/elements:viewer-zoom-toolbar",
"//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled",
"//ui/webui/resources/cr_elements/cr_icon_button:cr_icon_button.m",
]
externs_list = [ "$externs_path/test.js" ]
}
js_library("download_controls_test") {
deps = [
":test_util",
......@@ -117,6 +140,14 @@ js_library("page_change_test") {
externs_list = [ "$externs_path/test.js" ]
}
js_library("params_parser_test") {
deps = [
"//chrome/browser/resources/pdf:open_pdf_params_parser",
"//chrome/browser/resources/pdf:pdf_scripting_api",
]
externs_list = [ "$externs_path/test.js" ]
}
js_library("test_util") {
deps = [
"//chrome/browser/resources/pdf:viewport",
......
......@@ -3,6 +3,7 @@
// found in the LICENSE file.
import {PDFScriptingAPI} from 'chrome-extension://mhjfbmdgcfjbbpaeojofohoefgiehjai/pdf_scripting_api.js';
import {PDFViewerElement} from 'chrome-extension://mhjfbmdgcfjbbpaeojofohoefgiehjai/pdf_viewer.js';
import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
import {createBookmarksForTest} from './test_util.js';
......@@ -13,6 +14,8 @@ const tests = [
* test-bookmarks-with-zoom.pdf.
*/
function testHasCorrectBookmarks() {
const viewer = /** @type {!PDFViewerElement} */ (
document.body.querySelector('#viewer'));
const bookmarks = viewer.bookmarks;
// Load all relevant bookmarks.
......@@ -62,21 +65,23 @@ const tests = [
* test-bookmarks-with-zoom.pdf.
*/
function testFollowBookmark() {
const viewer = /** @type {!PDFViewerElement} */ (
document.body.querySelector('#viewer'));
const bookmarkContent = createBookmarksForTest();
bookmarkContent.bookmarks = viewer.bookmarks;
document.body.appendChild(bookmarkContent);
flush();
const rootBookmarks =
bookmarkContent.shadowRoot.querySelectorAll('viewer-bookmark');
const rootBookmarks = /** @type {!NodeList<!ViewerBookmarkElement>} */ (
bookmarkContent.shadowRoot.querySelectorAll('viewer-bookmark'));
chrome.test.assertEq(3, rootBookmarks.length, 'three root bookmarks');
rootBookmarks[0].$.expand.click();
flush();
const subBookmarks =
rootBookmarks[0].shadowRoot.querySelectorAll('viewer-bookmark');
const subBookmarks = /** @type {!NodeList<!ViewerBookmarkElement>} */ (
rootBookmarks[0].shadowRoot.querySelectorAll('viewer-bookmark'));
chrome.test.assertEq(1, subBookmarks.length, 'one sub bookmark');
let lastPageChange;
......@@ -106,6 +111,16 @@ const tests = [
lastUriNavigation = e.detail.uri;
});
/**
* @param {!HTMLElement} tapTarget
* @param {!{
* page: (number|undefined),
* uri: (string|undefined),
* x: (number|undefined),
* y: (number|undefined),
* zoom: (number|undefined)
* }} expectedEvent
*/
function testTapTarget(tapTarget, expectedEvent) {
lastPageChange = undefined;
lastXChange = undefined;
......
......@@ -39,7 +39,8 @@ const tests = [
*/
function testPageSelectorChange() {
document.body.innerHTML = '';
const selector = document.createElement('viewer-page-selector');
const selector = /** @type {!ViewerPageSelectorElement} */ (
document.createElement('viewer-page-selector'));
selector.docLength = 1234;
document.body.appendChild(selector);
......@@ -81,10 +82,11 @@ const tests = [
*/
function testPageSelectorDocLength() {
document.body.innerHTML = '';
const selector = document.createElement('viewer-page-selector');
const selector = /** @type {!ViewerPageSelectorElement} */ (
document.createElement('viewer-page-selector'));
selector.docLength = 1234;
document.body.appendChild(selector);
chrome.test.assertEq('1234', selector.$.pagelength.textContent);
chrome.test.assertEq('1234', selector.$$('#pagelength').textContent);
chrome.test.assertEq(
'4', selector.style.getPropertyValue('--page-length-digits'));
chrome.test.succeed();
......@@ -95,7 +97,8 @@ const tests = [
*/
function testToolbarDropdownShowHide() {
document.body.innerHTML = '';
const dropdown = document.createElement('viewer-toolbar-dropdown');
const dropdown = /** @type {!ViewerToolbarDropdownElement} */ (
document.createElement('viewer-toolbar-dropdown'));
dropdown.header = 'Test Menu';
dropdown.closedIcon = 'closedIcon';
dropdown.openIcon = 'openIcon';
......@@ -171,10 +174,13 @@ const tests = [
*/
function testZoomToolbarToggle() {
document.body.innerHTML = '';
const zoomToolbar = document.createElement('viewer-zoom-toolbar');
const zoomToolbar = /** @type {!ViewerZoomToolbarElement} */ (
document.createElement('viewer-zoom-toolbar'));
document.body.appendChild(zoomToolbar);
const fitButton = zoomToolbar.$['fit-button'];
const button = fitButton.$$('cr-icon-button');
const fitButton =
/** @type {!ViewerZoomButtonElement} */ (zoomToolbar.$['fit-button']);
const button =
/** @type {!CrIconButtonElement} */ (fitButton.$$('cr-icon-button'));
const fitWidthIcon = 'fullscreen';
const fitPageIcon = 'fullscreen-exit';
......@@ -189,33 +195,33 @@ const tests = [
// Tap 1: Fire fit-to-changed(FIT_TO_PAGE), show fit-to-width.
button.click();
fitToEventChecker.assertEvent(FittingType.FIT_TO_PAGE, true);
fitToEventChecker.assertEvent(FittingType.FIT_TO_PAGE);
chrome.test.assertTrue(button.ironIcon.endsWith(fitWidthIcon));
// Tap 2: Fire fit-to-changed(FIT_TO_WIDTH), show fit-to-page.
button.click();
fitToEventChecker.assertEvent(FittingType.FIT_TO_WIDTH, true);
fitToEventChecker.assertEvent(FittingType.FIT_TO_WIDTH);
chrome.test.assertTrue(button.ironIcon.endsWith(fitPageIcon));
// Tap 3: Fire fit-to-changed(FIT_TO_PAGE) again.
button.click();
fitToEventChecker.assertEvent(FittingType.FIT_TO_PAGE, true);
fitToEventChecker.assertEvent(FittingType.FIT_TO_PAGE);
chrome.test.assertTrue(button.ironIcon.endsWith(fitWidthIcon));
// Do the same as above, but with fitToggleFromHotKey().
zoomToolbar.fitToggleFromHotKey();
fitToEventChecker.assertEvent(FittingType.FIT_TO_WIDTH, true);
fitToEventChecker.assertEvent(FittingType.FIT_TO_WIDTH);
chrome.test.assertTrue(button.ironIcon.endsWith(fitPageIcon));
zoomToolbar.fitToggleFromHotKey();
fitToEventChecker.assertEvent(FittingType.FIT_TO_PAGE, true);
fitToEventChecker.assertEvent(FittingType.FIT_TO_PAGE);
chrome.test.assertTrue(button.ironIcon.endsWith(fitWidthIcon));
zoomToolbar.fitToggleFromHotKey();
fitToEventChecker.assertEvent(FittingType.FIT_TO_WIDTH, true);
fitToEventChecker.assertEvent(FittingType.FIT_TO_WIDTH);
chrome.test.assertTrue(button.ironIcon.endsWith(fitPageIcon));
// Tap 4: Fire fit-to-changed(FIT_TO_PAGE) again.
button.click();
fitToEventChecker.assertEvent(FittingType.FIT_TO_PAGE, true);
fitToEventChecker.assertEvent(FittingType.FIT_TO_PAGE);
chrome.test.assertTrue(button.ironIcon.endsWith(fitWidthIcon));
chrome.test.succeed();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment