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({ ...@@ -26,9 +26,9 @@ Polymer({
}, },
}, },
/** @return {!CrInputElement} */ /** @return {!HTMLInputElement} */
get pageSelector() { get pageSelector() {
return /** @type {!CrInputElement} */ (this.$.pageselector); return /** @type {!HTMLInputElement} */ (this.$.pageselector);
}, },
pageNoCommitted() { pageNoCommitted() {
......
...@@ -4,6 +4,16 @@ ...@@ -4,6 +4,16 @@
import {FittingType} from './constants.js'; 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 // Parses the open pdf parameters passed in the url to set initial viewport
// settings for opening the pdf. // settings for opening the pdf.
export class OpenPdfParamsParser { export class OpenPdfParamsParser {
...@@ -23,7 +33,7 @@ export class OpenPdfParamsParser { ...@@ -23,7 +33,7 @@ export class OpenPdfParamsParser {
* Parse zoom parameter of open PDF parameters. The PDF should be opened at * Parse zoom parameter of open PDF parameters. The PDF should be opened at
* the specified zoom level. * the specified zoom level.
* @param {string} paramValue zoom value. * @param {string} paramValue zoom value.
* @return {Object} Map with zoom parameters (zoom and position). * @return {!OpenPdfParams} Map with zoom parameters (zoom and position).
* @private * @private
*/ */
parseZoomParam_(paramValue) { parseZoomParam_(paramValue) {
...@@ -55,7 +65,7 @@ export class OpenPdfParamsParser { ...@@ -55,7 +65,7 @@ export class OpenPdfParamsParser {
* Parse view parameter of open PDF parameters. The PDF should be opened at * Parse view parameter of open PDF parameters. The PDF should be opened at
* the specified fitting type mode and position. * the specified fitting type mode and position.
* @param {string} paramValue view value. * @param {string} paramValue view value.
* @return {Object} Map with view parameters (view and viewPosition). * @return {!OpenPdfParams} Map with view parameters (view and viewPosition).
* @private * @private
*/ */
parseViewParam_(paramValue) { parseViewParam_(paramValue) {
...@@ -128,7 +138,8 @@ export class OpenPdfParamsParser { ...@@ -128,7 +138,8 @@ export class OpenPdfParamsParser {
* See http://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/ * See http://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/
* pdfs/pdf_open_parameters.pdf for details. * pdfs/pdf_open_parameters.pdf for details.
* @param {string} url that needs to be parsed. * @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) { getViewportFromUrlParams(url, callback) {
const params = {}; const params = {};
......
...@@ -16,19 +16,18 @@ js_type_check("closure_compile") { ...@@ -16,19 +16,18 @@ js_type_check("closure_compile") {
":basic_plugin_test", ":basic_plugin_test",
":basic_test", ":basic_test",
":beep_test", ":beep_test",
":bookmarks_test",
#":bookmarks_test",
":download_controls_test", ":download_controls_test",
":gesture_detector_test", ":gesture_detector_test",
":layout_test", ":layout_test",
":material_elements_test",
#":material_elements_test",
#":metrics_test", #":metrics_test",
#":navigator_test", #":navigator_test",
":nobeep_test", ":nobeep_test",
":page_change_test", ":page_change_test",
":params_parser_test",
#":params_parser_test",
#":printing_icon_test", #":printing_icon_test",
#":redirects_fail_test", #":redirects_fail_test",
":test_util", ":test_util",
...@@ -72,6 +71,16 @@ js_library("beep_test") { ...@@ -72,6 +71,16 @@ js_library("beep_test") {
externs_list = [ "$externs_path/test.js" ] 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") { js_library("gesture_detector_test") {
deps = [ deps = [
"//chrome/browser/resources/pdf:gesture_detector", "//chrome/browser/resources/pdf:gesture_detector",
...@@ -88,6 +97,20 @@ js_library("layout_test") { ...@@ -88,6 +97,20 @@ js_library("layout_test") {
externs_list = [ "$externs_path/test.js" ] 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") { js_library("download_controls_test") {
deps = [ deps = [
":test_util", ":test_util",
...@@ -117,6 +140,14 @@ js_library("page_change_test") { ...@@ -117,6 +140,14 @@ js_library("page_change_test") {
externs_list = [ "$externs_path/test.js" ] 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") { js_library("test_util") {
deps = [ deps = [
"//chrome/browser/resources/pdf:viewport", "//chrome/browser/resources/pdf:viewport",
......
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
// found in the LICENSE file. // found in the LICENSE file.
import {PDFScriptingAPI} from 'chrome-extension://mhjfbmdgcfjbbpaeojofohoefgiehjai/pdf_scripting_api.js'; 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 {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
import {createBookmarksForTest} from './test_util.js'; import {createBookmarksForTest} from './test_util.js';
...@@ -13,6 +14,8 @@ const tests = [ ...@@ -13,6 +14,8 @@ const tests = [
* test-bookmarks-with-zoom.pdf. * test-bookmarks-with-zoom.pdf.
*/ */
function testHasCorrectBookmarks() { function testHasCorrectBookmarks() {
const viewer = /** @type {!PDFViewerElement} */ (
document.body.querySelector('#viewer'));
const bookmarks = viewer.bookmarks; const bookmarks = viewer.bookmarks;
// Load all relevant bookmarks. // Load all relevant bookmarks.
...@@ -62,21 +65,23 @@ const tests = [ ...@@ -62,21 +65,23 @@ const tests = [
* test-bookmarks-with-zoom.pdf. * test-bookmarks-with-zoom.pdf.
*/ */
function testFollowBookmark() { function testFollowBookmark() {
const viewer = /** @type {!PDFViewerElement} */ (
document.body.querySelector('#viewer'));
const bookmarkContent = createBookmarksForTest(); const bookmarkContent = createBookmarksForTest();
bookmarkContent.bookmarks = viewer.bookmarks; bookmarkContent.bookmarks = viewer.bookmarks;
document.body.appendChild(bookmarkContent); document.body.appendChild(bookmarkContent);
flush(); flush();
const rootBookmarks = const rootBookmarks = /** @type {!NodeList<!ViewerBookmarkElement>} */ (
bookmarkContent.shadowRoot.querySelectorAll('viewer-bookmark'); bookmarkContent.shadowRoot.querySelectorAll('viewer-bookmark'));
chrome.test.assertEq(3, rootBookmarks.length, 'three root bookmarks'); chrome.test.assertEq(3, rootBookmarks.length, 'three root bookmarks');
rootBookmarks[0].$.expand.click(); rootBookmarks[0].$.expand.click();
flush(); flush();
const subBookmarks = const subBookmarks = /** @type {!NodeList<!ViewerBookmarkElement>} */ (
rootBookmarks[0].shadowRoot.querySelectorAll('viewer-bookmark'); rootBookmarks[0].shadowRoot.querySelectorAll('viewer-bookmark'));
chrome.test.assertEq(1, subBookmarks.length, 'one sub bookmark'); chrome.test.assertEq(1, subBookmarks.length, 'one sub bookmark');
let lastPageChange; let lastPageChange;
...@@ -106,6 +111,16 @@ const tests = [ ...@@ -106,6 +111,16 @@ const tests = [
lastUriNavigation = e.detail.uri; 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) { function testTapTarget(tapTarget, expectedEvent) {
lastPageChange = undefined; lastPageChange = undefined;
lastXChange = undefined; lastXChange = undefined;
......
...@@ -39,7 +39,8 @@ const tests = [ ...@@ -39,7 +39,8 @@ const tests = [
*/ */
function testPageSelectorChange() { function testPageSelectorChange() {
document.body.innerHTML = ''; document.body.innerHTML = '';
const selector = document.createElement('viewer-page-selector'); const selector = /** @type {!ViewerPageSelectorElement} */ (
document.createElement('viewer-page-selector'));
selector.docLength = 1234; selector.docLength = 1234;
document.body.appendChild(selector); document.body.appendChild(selector);
...@@ -81,10 +82,11 @@ const tests = [ ...@@ -81,10 +82,11 @@ const tests = [
*/ */
function testPageSelectorDocLength() { function testPageSelectorDocLength() {
document.body.innerHTML = ''; document.body.innerHTML = '';
const selector = document.createElement('viewer-page-selector'); const selector = /** @type {!ViewerPageSelectorElement} */ (
document.createElement('viewer-page-selector'));
selector.docLength = 1234; selector.docLength = 1234;
document.body.appendChild(selector); document.body.appendChild(selector);
chrome.test.assertEq('1234', selector.$.pagelength.textContent); chrome.test.assertEq('1234', selector.$$('#pagelength').textContent);
chrome.test.assertEq( chrome.test.assertEq(
'4', selector.style.getPropertyValue('--page-length-digits')); '4', selector.style.getPropertyValue('--page-length-digits'));
chrome.test.succeed(); chrome.test.succeed();
...@@ -95,7 +97,8 @@ const tests = [ ...@@ -95,7 +97,8 @@ const tests = [
*/ */
function testToolbarDropdownShowHide() { function testToolbarDropdownShowHide() {
document.body.innerHTML = ''; document.body.innerHTML = '';
const dropdown = document.createElement('viewer-toolbar-dropdown'); const dropdown = /** @type {!ViewerToolbarDropdownElement} */ (
document.createElement('viewer-toolbar-dropdown'));
dropdown.header = 'Test Menu'; dropdown.header = 'Test Menu';
dropdown.closedIcon = 'closedIcon'; dropdown.closedIcon = 'closedIcon';
dropdown.openIcon = 'openIcon'; dropdown.openIcon = 'openIcon';
...@@ -171,10 +174,13 @@ const tests = [ ...@@ -171,10 +174,13 @@ const tests = [
*/ */
function testZoomToolbarToggle() { function testZoomToolbarToggle() {
document.body.innerHTML = ''; document.body.innerHTML = '';
const zoomToolbar = document.createElement('viewer-zoom-toolbar'); const zoomToolbar = /** @type {!ViewerZoomToolbarElement} */ (
document.createElement('viewer-zoom-toolbar'));
document.body.appendChild(zoomToolbar); document.body.appendChild(zoomToolbar);
const fitButton = zoomToolbar.$['fit-button']; const fitButton =
const button = fitButton.$$('cr-icon-button'); /** @type {!ViewerZoomButtonElement} */ (zoomToolbar.$['fit-button']);
const button =
/** @type {!CrIconButtonElement} */ (fitButton.$$('cr-icon-button'));
const fitWidthIcon = 'fullscreen'; const fitWidthIcon = 'fullscreen';
const fitPageIcon = 'fullscreen-exit'; const fitPageIcon = 'fullscreen-exit';
...@@ -189,33 +195,33 @@ const tests = [ ...@@ -189,33 +195,33 @@ const tests = [
// Tap 1: Fire fit-to-changed(FIT_TO_PAGE), show fit-to-width. // Tap 1: Fire fit-to-changed(FIT_TO_PAGE), show fit-to-width.
button.click(); button.click();
fitToEventChecker.assertEvent(FittingType.FIT_TO_PAGE, true); fitToEventChecker.assertEvent(FittingType.FIT_TO_PAGE);
chrome.test.assertTrue(button.ironIcon.endsWith(fitWidthIcon)); chrome.test.assertTrue(button.ironIcon.endsWith(fitWidthIcon));
// Tap 2: Fire fit-to-changed(FIT_TO_WIDTH), show fit-to-page. // Tap 2: Fire fit-to-changed(FIT_TO_WIDTH), show fit-to-page.
button.click(); button.click();
fitToEventChecker.assertEvent(FittingType.FIT_TO_WIDTH, true); fitToEventChecker.assertEvent(FittingType.FIT_TO_WIDTH);
chrome.test.assertTrue(button.ironIcon.endsWith(fitPageIcon)); chrome.test.assertTrue(button.ironIcon.endsWith(fitPageIcon));
// Tap 3: Fire fit-to-changed(FIT_TO_PAGE) again. // Tap 3: Fire fit-to-changed(FIT_TO_PAGE) again.
button.click(); button.click();
fitToEventChecker.assertEvent(FittingType.FIT_TO_PAGE, true); fitToEventChecker.assertEvent(FittingType.FIT_TO_PAGE);
chrome.test.assertTrue(button.ironIcon.endsWith(fitWidthIcon)); chrome.test.assertTrue(button.ironIcon.endsWith(fitWidthIcon));
// Do the same as above, but with fitToggleFromHotKey(). // Do the same as above, but with fitToggleFromHotKey().
zoomToolbar.fitToggleFromHotKey(); zoomToolbar.fitToggleFromHotKey();
fitToEventChecker.assertEvent(FittingType.FIT_TO_WIDTH, true); fitToEventChecker.assertEvent(FittingType.FIT_TO_WIDTH);
chrome.test.assertTrue(button.ironIcon.endsWith(fitPageIcon)); chrome.test.assertTrue(button.ironIcon.endsWith(fitPageIcon));
zoomToolbar.fitToggleFromHotKey(); zoomToolbar.fitToggleFromHotKey();
fitToEventChecker.assertEvent(FittingType.FIT_TO_PAGE, true); fitToEventChecker.assertEvent(FittingType.FIT_TO_PAGE);
chrome.test.assertTrue(button.ironIcon.endsWith(fitWidthIcon)); chrome.test.assertTrue(button.ironIcon.endsWith(fitWidthIcon));
zoomToolbar.fitToggleFromHotKey(); zoomToolbar.fitToggleFromHotKey();
fitToEventChecker.assertEvent(FittingType.FIT_TO_WIDTH, true); fitToEventChecker.assertEvent(FittingType.FIT_TO_WIDTH);
chrome.test.assertTrue(button.ironIcon.endsWith(fitPageIcon)); chrome.test.assertTrue(button.ironIcon.endsWith(fitPageIcon));
// Tap 4: Fire fit-to-changed(FIT_TO_PAGE) again. // Tap 4: Fire fit-to-changed(FIT_TO_PAGE) again.
button.click(); button.click();
fitToEventChecker.assertEvent(FittingType.FIT_TO_PAGE, true); fitToEventChecker.assertEvent(FittingType.FIT_TO_PAGE);
chrome.test.assertTrue(button.ironIcon.endsWith(fitWidthIcon)); chrome.test.assertTrue(button.ironIcon.endsWith(fitWidthIcon));
chrome.test.succeed(); 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