forked from mirrors/gecko-dev
		
	 7e23a4287f
			
		
	
	
		7e23a4287f
		
	
	
	
	
		
			
			The trickiest bits are the PrintTargetCG ones, the rest is just plumbing and cleanups and tests, but let me know if you want those to be split out, can do. The GTK change to nsPrintSettingsGTK::GetResolution is a no-op (we only read resolution on windows), but I did that because we assume that it doesn't fail and GTK returns a sane default anyways. Differential Revision: https://phabricator.services.mozilla.com/D142199
		
			
				
	
	
		
			125 lines
		
	
	
	
		
			3.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			125 lines
		
	
	
	
		
			3.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /* Any copyright is dedicated to the Public Domain.
 | |
|    http://creativecommons.org/publicdomain/zero/1.0/ */
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| add_task(async function testPDFPrinterSettings() {
 | |
|   await PrintHelper.withTestPage(async helper => {
 | |
|     // Set some bad prefs
 | |
|     await SpecialPowers.pushPrefEnv({
 | |
|       set: [
 | |
|         ["print.print_to_file", false],
 | |
|         ["print.print_in_color", false],
 | |
|         ["print.printer_Mozilla_Save_to_PDF.print_to_file", false],
 | |
|         ["print.printer_Mozilla_Save_to_PDF.print_in_color", false],
 | |
|       ],
 | |
|     });
 | |
| 
 | |
|     await helper.startPrint();
 | |
|     await helper.awaitAnimationFrame();
 | |
| 
 | |
|     // Verify we end up with sane settings
 | |
|     let { settings } = helper;
 | |
| 
 | |
|     ok(
 | |
|       settings.outputDestination == Ci.nsIPrintSettings.kOutputDestinationFile,
 | |
|       "Check the current settings have file destination"
 | |
|     );
 | |
|     ok(
 | |
|       settings.printInColor,
 | |
|       "Check the current settings have a truthy printInColor for the PDF printer"
 | |
|     );
 | |
|     is(
 | |
|       settings.outputFormat,
 | |
|       Ci.nsIPrintSettings.kOutputFormatPDF,
 | |
|       "The PDF printer has the correct outputFormat"
 | |
|     );
 | |
| 
 | |
|     await helper.closeDialog();
 | |
|     await SpecialPowers.popPrefEnv();
 | |
|   });
 | |
| });
 | |
| 
 | |
| add_task(async function testPDFCancel() {
 | |
|   await PrintHelper.withTestPage(async helper => {
 | |
|     await helper.startPrint();
 | |
|     helper.mockFilePickerCancel();
 | |
|     let form = helper.doc.querySelector("#print");
 | |
| 
 | |
|     // retrieve all elements other than cancel button
 | |
|     let elements = [];
 | |
|     for (let element of form.elements) {
 | |
|       if (element.name != "cancel") {
 | |
|         elements.push(element);
 | |
|       }
 | |
|     }
 | |
|     let getDisabledStates = () => elements.map(el => el.disabled);
 | |
|     let initialDisabledStates = getDisabledStates();
 | |
| 
 | |
|     ok(
 | |
|       initialDisabledStates.some(disabled => !disabled),
 | |
|       "At least one enabled form element before submitting"
 | |
|     );
 | |
|     let getShownDisabledStates = new Promise(resolve => {
 | |
|       MockFilePicker.showCallback = () => resolve(getDisabledStates());
 | |
|     });
 | |
| 
 | |
|     EventUtils.sendKey("return", helper.win);
 | |
| 
 | |
|     let shownDisabledStates = await getShownDisabledStates;
 | |
|     ok(shownDisabledStates, "Got disabled states while shown");
 | |
|     ok(
 | |
|       shownDisabledStates.every(disabled => disabled),
 | |
|       "All elements were disabled when showing picker"
 | |
|     );
 | |
|     let cancelButton = helper.doc.querySelector(`button[name="cancel"]`);
 | |
|     ok(!cancelButton.disabled, "Cancel button is still enabled");
 | |
| 
 | |
|     let saveButton = form.querySelector("#print-button");
 | |
|     await BrowserTestUtils.waitForAttributeRemoval("disabled", saveButton);
 | |
|     helper.assertDialogOpen();
 | |
| 
 | |
|     is(
 | |
|       getDisabledStates().every(
 | |
|         (disabledState, index) => disabledState === initialDisabledStates[index]
 | |
|       ),
 | |
|       true,
 | |
|       "Previous disabled states match after returning to preview"
 | |
|     );
 | |
| 
 | |
|     // Close the dialog with Escape.
 | |
|     await helper.withClosingFn(() => {
 | |
|       EventUtils.synthesizeKey("VK_ESCAPE", {}, helper.win);
 | |
|     });
 | |
| 
 | |
|     helper.assertDialogClosed();
 | |
|   });
 | |
| });
 | |
| 
 | |
| add_task(async function testPDFFile() {
 | |
|   await PrintHelper.withTestPage(async helper => {
 | |
|     await helper.startPrint();
 | |
| 
 | |
|     helper.mockFilePicker("pdfFile.pdf");
 | |
|     let filePath = PathUtils.join(
 | |
|       Services.dirsvc.get("TmpD", Ci.nsIFile).path,
 | |
|       "pdfFile.pdf"
 | |
|     );
 | |
| 
 | |
|     await helper.withClosingFn(() => {
 | |
|       EventUtils.sendKey("return", helper.win);
 | |
|     });
 | |
| 
 | |
|     try {
 | |
|       Services.prefs.getStringPref(
 | |
|         "print.printer_Mozilla_Save_to_PDF.print_to_filename"
 | |
|       );
 | |
|       ok(false, "Should have cleared the filename pref");
 | |
|     } catch (ex) {
 | |
|       ok(true, "Cleared the filename pref");
 | |
|     }
 | |
| 
 | |
|     is(await IOUtils.exists(filePath), true, "Saved pdf file exists");
 | |
|     ok(await IOUtils.read(filePath), "Saved pdf file is not empty");
 | |
|   });
 | |
| });
 |