From f596490a1b8c31b65600bb435a81d5505a8ed255 Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Fri, 23 Jun 2023 12:21:58 +0200 Subject: [PATCH] Add a unit-test to check that the *official* PDF.js-viewer API exposes the expected functionality Until now we've not actually had *any* tests that ensure that the *official* PDF.js-viewer API exposes the intended functionality, which means that things can easily break accidentally. *Please note:* This unit-test cannot (easily) be run in Node.js-environments, since the `external/webL10n/l10n.js` file contains various browser-specific functionality. --- test/unit/jasmine-boot.js | 1 + test/unit/pdf_viewer.component_spec.js | 74 ++++++++++++++++++++++++++ web/pdf_viewer.component.js | 10 ++-- 3 files changed, 81 insertions(+), 4 deletions(-) create mode 100644 test/unit/pdf_viewer.component_spec.js diff --git a/test/unit/jasmine-boot.js b/test/unit/jasmine-boot.js index 5166390ab..5dd27a67d 100644 --- a/test/unit/jasmine-boot.js +++ b/test/unit/jasmine-boot.js @@ -78,6 +78,7 @@ async function initializePDFJS(callback) { "pdfjs-test/unit/pdf_find_utils_spec.js", "pdfjs-test/unit/pdf_history_spec.js", "pdfjs-test/unit/pdf_spec.js", + "pdfjs-test/unit/pdf_viewer.component_spec.js", "pdfjs-test/unit/pdf_viewer_spec.js", "pdfjs-test/unit/primitives_spec.js", "pdfjs-test/unit/scripting_spec.js", diff --git a/test/unit/pdf_viewer.component_spec.js b/test/unit/pdf_viewer.component_spec.js new file mode 100644 index 000000000..b6b19c935 --- /dev/null +++ b/test/unit/pdf_viewer.component_spec.js @@ -0,0 +1,74 @@ +/* Copyright 2023 Mozilla Foundation + * + * 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. + */ + +import { + LinkTarget, + PDFLinkService, + SimpleLinkService, +} from "../../web/pdf_link_service.js"; +import { + parseQueryString, + ProgressBar, + RenderingStates, + ScrollMode, + SpreadMode, +} from "../../web/ui_utils.js"; +import { AnnotationLayerBuilder } from "../../web/annotation_layer_builder.js"; +import { DownloadManager } from "../../web/download_manager.js"; +import { EventBus } from "../../web/event_utils.js"; +import { GenericL10n } from "../../web/genericl10n.js"; +import { NullL10n } from "../../web/l10n_utils.js"; +import { PDFFindController } from "../../web/pdf_find_controller.js"; +import { PDFHistory } from "../../web/pdf_history.js"; +import { PDFPageView } from "../../web/pdf_page_view.js"; +import { PDFScriptingManager } from "../../web/pdf_scripting_manager.js"; +import { PDFSinglePageViewer } from "../../web/pdf_single_page_viewer.js"; +import { PDFViewer } from "../../web/pdf_viewer.js"; +import { StructTreeLayerBuilder } from "../../web/struct_tree_layer_builder.js"; +import { TextLayerBuilder } from "../../web/text_layer_builder.js"; +import { XfaLayerBuilder } from "../../web/xfa_layer_builder.js"; + +describe("pdfviewer_api", function () { + it("checks that the *official* PDF.js-viewer API exposes the expected functionality", async function () { + const pdfviewerAPI = await import("../../web/pdf_viewer.component.js"); + + // The imported Object contains an (automatically) inserted Symbol, + // hence we copy the data to allow using a simple comparison below. + expect({ ...pdfviewerAPI }).toEqual({ + AnnotationLayerBuilder, + DownloadManager, + EventBus, + GenericL10n, + LinkTarget, + NullL10n, + parseQueryString, + PDFFindController, + PDFHistory, + PDFLinkService, + PDFPageView, + PDFScriptingManager, + PDFSinglePageViewer, + PDFViewer, + ProgressBar, + RenderingStates, + ScrollMode, + SimpleLinkService, + SpreadMode, + StructTreeLayerBuilder, + TextLayerBuilder, + XfaLayerBuilder, + }); + }); +}); diff --git a/web/pdf_viewer.component.js b/web/pdf_viewer.component.js index 330c76aa2..ff60cb931 100644 --- a/web/pdf_viewer.component.js +++ b/web/pdf_viewer.component.js @@ -40,10 +40,12 @@ import { StructTreeLayerBuilder } from "./struct_tree_layer_builder.js"; import { TextLayerBuilder } from "./text_layer_builder.js"; import { XfaLayerBuilder } from "./xfa_layer_builder.js"; -// eslint-disable-next-line no-unused-vars -const pdfjsVersion = PDFJSDev.eval("BUNDLE_VERSION"); -// eslint-disable-next-line no-unused-vars -const pdfjsBuild = PDFJSDev.eval("BUNDLE_BUILD"); +/* eslint-disable-next-line no-unused-vars */ +const pdfjsVersion = + typeof PDFJSDev !== "undefined" ? PDFJSDev.eval("BUNDLE_VERSION") : void 0; +/* eslint-disable-next-line no-unused-vars */ +const pdfjsBuild = + typeof PDFJSDev !== "undefined" ? PDFJSDev.eval("BUNDLE_BUILD") : void 0; export { AnnotationLayerBuilder,