From 730e86d661fdfdb8b87918bee3f7c5cb04e8be94 Mon Sep 17 00:00:00 2001 From: Dan Stillman Date: Thu, 9 Jun 2022 03:00:54 -0400 Subject: [PATCH] fx-compat: Restore tests and test using actual Zotero executable The test runner now uses the Zotero executable from `zotero-standalone-build/staging` rather than the Firefox from `zotero-standalone-build/xulrunner`. Along with testing the actual program, this restores visible UI updates during tests, which should make debugging various things easier. We can also now remove anything related to Zotero being an extension. Many tests are still broken, but this at least lets us start running them. --- chrome/content/zotero/xpcom/debug.js | 2 +- chrome/content/zotero/xpcom/schema.js | 12 ++++--- chrome/content/zotero/xpcom/zotero.js | 14 ++++++-- test/chrome.manifest | 8 ++--- test/components/zotero-unit.js | 4 +-- test/content/support.js | 9 +++--- test/runtests.sh | 46 ++++++++++++--------------- 7 files changed, 51 insertions(+), 44 deletions(-) diff --git a/chrome/content/zotero/xpcom/debug.js b/chrome/content/zotero/xpcom/debug.js index b716b94c08..4ea75d8f1c 100644 --- a/chrome/content/zotero/xpcom/debug.js +++ b/chrome/content/zotero/xpcom/debug.js @@ -73,7 +73,7 @@ Zotero.Debug = new function () { if (Zotero.isStandalone) { // Enable dump() from window (non-XPCOM) scopes when terminal or viewer logging is enabled. // (These will always go to the terminal, even in viewer mode.) - Zotero.Prefs.set('browser.dom.window.dump.enabled', _console || _consoleViewer, true); + Zotero.Prefs.set('browser.dom.window.dump.enabled', _console || _consoleViewer || Zotero.test, true); if (_consoleViewer) { setTimeout(function () { diff --git a/chrome/content/zotero/xpcom/schema.js b/chrome/content/zotero/xpcom/schema.js index 2e30445a45..ed4a753405 100644 --- a/chrome/content/zotero/xpcom/schema.js +++ b/chrome/content/zotero/xpcom/schema.js @@ -105,7 +105,9 @@ Zotero.Schema = new function(){ Zotero.debug('Database does not exist -- creating\n'); return _initializeSchema() .then(function() { - (Zotero.isStandalone ? Zotero.uiReadyPromise : Zotero.initializationPromise) + // Don't load bundled files until after UI is ready, unless this is a test run, + // in which case tests can run without a window open + (!Zotero.test ? Zotero.uiReadyPromise : Zotero.initializationPromise) .delay(1000) .then(async function () { await this.updateBundledFiles(); @@ -294,9 +296,8 @@ Zotero.Schema = new function(){ // Reset sync queue tries if new version await _checkClientVersion(); - // In Standalone, don't load bundled files until after UI is ready. In Firefox, load them as - // soon initialization is done so that translation works before the Zotero pane is opened. - (Zotero.isStandalone ? Zotero.uiReadyPromise : Zotero.initializationPromise) + // See above + (!Zotero.test ? Zotero.uiReadyPromise : Zotero.initializationPromise) .then(() => { setTimeout(async function () { try { @@ -847,11 +848,12 @@ Zotero.Schema = new function(){ await Zotero.SearchConditions.init(); // Update item type menus in every open window + // TODO: Remove? Zotero.Schema.schemaUpdatePromise.then(function () { var enumerator = Services.wm.getEnumerator("navigator:browser"); while (enumerator.hasMoreElements()) { let win = enumerator.getNext(); - win.document.getElementById('zotero-editpane-item-box').buildItemTypeMenu(); + //win.document.getElementById('zotero-editpane-item-box').buildItemTypeMenu(); } }); } diff --git a/chrome/content/zotero/xpcom/zotero.js b/chrome/content/zotero/xpcom/zotero.js index be41816dff..386a0b0980 100644 --- a/chrome/content/zotero/xpcom/zotero.js +++ b/chrome/content/zotero/xpcom/zotero.js @@ -54,7 +54,16 @@ Services.scriptloader.loadSubScript("resource://zotero/polyfill.js"); this.startupError; Object.defineProperty(this, 'startupErrorHandler', { get: () => _startupErrorHandler, - enumerable: true + enumerable: true, + configurable: true + }); + Object.defineProperty(this, 'resourcesDir', { + get: () => { + // AChrome is app/chrome + return FileUtils.getDir('AChrom', []).parent.parent.path; + }, + enumerable: true, + configurable: true }); this.version; this.platform; @@ -107,7 +116,8 @@ Services.scriptloader.loadSubScript("resource://zotero/polyfill.js"); this.unlockDeferred.resolve(); } }, - enumerable: true + enumerable: true, + configurable: true } ); diff --git a/test/chrome.manifest b/test/chrome.manifest index 7885787e74..2a3ff974a6 100644 --- a/test/chrome.manifest +++ b/test/chrome.manifest @@ -1,7 +1,7 @@ -content zotero-unit content/ -resource zotero-unit resource/ -resource zotero-unit-tests tests/ +content zotero-unit test/content/ +resource zotero-unit test/resource/ +resource zotero-unit-tests test/tests/ -component {b8570031-be5e-46e8-9785-38cd50a5d911} components/zotero-unit.js +component {b8570031-be5e-46e8-9785-38cd50a5d911} test/components/zotero-unit.js contract @mozilla.org/commandlinehandler/general-startup;1?type=zotero-unit {b8570031-be5e-46e8-9785-38cd50a5d911} category command-line-handler m-zotero-unit @mozilla.org/commandlinehandler/general-startup;1?type=zotero-unit diff --git a/test/components/zotero-unit.js b/test/components/zotero-unit.js index cb703212cd..354f1ae250 100644 --- a/test/components/zotero-unit.js +++ b/test/components/zotero-unit.js @@ -23,7 +23,7 @@ ***** END LICENSE BLOCK ***** */ -Components.utils.import("resource://gre/modules/XPCOMUtils.jsm"); +Components.utils.import("resource://gre/modules/ComponentUtils.jsm"); function ZoteroUnit() { this.wrappedJSObject = this; @@ -56,4 +56,4 @@ ZoteroUnit.prototype = { }; -var NSGetFactory = XPCOMUtils.generateNSGetFactory([ZoteroUnit]); +var NSGetFactory = ComponentUtils.generateNSGetFactory([ZoteroUnit]); diff --git a/test/content/support.js b/test/content/support.js index 574eaeff5e..6fa3e9b8ca 100644 --- a/test/content/support.js +++ b/test/content/support.js @@ -557,11 +557,10 @@ function initPDFToolsPath() { * (i.e., test/tests/data) */ function getTestDataDirectory() { - var resource = Services.io.getProtocolHandler("resource"). - QueryInterface(Components.interfaces.nsIResProtocolHandler), - resURI = Services.io.newURI("resource://zotero-unit-tests/data", null, null); - return Services.io.newURI(resource.resolveURI(resURI), null, null). - QueryInterface(Components.interfaces.nsIFileURL).file; + var file = Zotero.File.pathToFile(Zotero.resourcesDir); + file.append('tests'); + file.append('data'); + return file; } function getTestDataUrl(path) { diff --git a/test/runtests.sh b/test/runtests.sh index d306b69049..b0be5a650a 100755 --- a/test/runtests.sh +++ b/test/runtests.sh @@ -15,18 +15,18 @@ function makePath { eval $__assignTo="'$__path'" } -if [ -z "$FX_EXECUTABLE" ]; then +if [ -z "$Z_EXECUTABLE" ]; then if [ "`uname`" == "Darwin" ]; then - FX_EXECUTABLE="$( dirname "$ROOT_DIR" )/zotero-standalone-build/xulrunner/Firefox.app/Contents/MacOS/firefox" + Z_EXECUTABLE="$( dirname "$ROOT_DIR" )/zotero-standalone-build/staging/Zotero.app/Contents/MacOS/zotero" else - FX_EXECUTABLE="$( dirname "$ROOT_DIR" )/zotero-standalone-build/xulrunner/firefox-x86_64/firefox" + Z_EXECUTABLE="$( dirname "$ROOT_DIR" )/zotero-standalone-build/staging/Zotero-x86_64/zotero" fi fi if [ -z "$DISPLAY" ]; then - FX_ARGS="" + Z_ARGS="" else - FX_ARGS="--class=ZTestFirefox" + Z_ARGS="--class=ZTestFirefox" fi function usage { @@ -42,7 +42,7 @@ Options -h display this help -s TEST start at the given test -t generate test data and quit - -x FX_EXECUTABLE path to Firefox executable (default: $FX_EXECUTABLE) + -x EXECUTABLE path to Zotero executable (default: $Z_EXECUTABLE) TESTS set of tests to run (default: all) DONE exit 1 @@ -53,10 +53,10 @@ DEBUG_LEVEL=5 while getopts "bcd:e:fg:hs:tx:" opt; do case $opt in b) - FX_ARGS="$FX_ARGS -ZoteroSkipBundledFiles" + Z_ARGS="$Z_ARGS -ZoteroSkipBundledFiles" ;; c) - FX_ARGS="$FX_ARGS -jsconsole -noquit" + Z_ARGS="$Z_ARGS -jsconsole -noquit" ;; d) DEBUG=true @@ -66,10 +66,10 @@ while getopts "bcd:e:fg:hs:tx:" opt; do if [[ -z "$OPTARG" ]] || [[ ${OPTARG:0:1} = "-" ]]; then usage fi - FX_ARGS="$FX_ARGS -stopAtTestFile $OPTARG" + Z_ARGS="$Z_ARGS -stopAtTestFile $OPTARG" ;; f) - FX_ARGS="$FX_ARGS -bail" + Z_ARGS="$Z_ARGS -bail" ;; g) GREP="$OPTARG" @@ -81,13 +81,13 @@ while getopts "bcd:e:fg:hs:tx:" opt; do if [[ -z "$OPTARG" ]] || [[ ${OPTARG:0:1} = "-" ]]; then usage fi - FX_ARGS="$FX_ARGS -startAtTestFile $OPTARG" + Z_ARGS="$Z_ARGS -startAtTestFile $OPTARG" ;; t) - FX_ARGS="$FX_ARGS -makeTestData" + Z_ARGS="$Z_ARGS -makeTestData" ;; x) - FX_EXECUTABLE="$OPTARG" + Z_EXECUTABLE="$OPTARG" ;; *) usage @@ -115,13 +115,9 @@ ulimit -n 4096 # Set up profile directory TEMPDIR="`mktemp -d 2>/dev/null || mktemp -d -t 'zotero-unit'`" PROFILE="$TEMPDIR/profile" -mkdir -p "$PROFILE/extensions" +mkdir -p "$PROFILE" makePath ZOTERO_PATH "$ROOT_DIR/build" -echo "$ZOTERO_PATH" > "$PROFILE/extensions/zotero@chnm.gmu.edu" - -makePath ZOTERO_UNIT_PATH "$ZOTERO_PATH/test" -echo "$ZOTERO_UNIT_PATH" > "$PROFILE/extensions/zotero-unit@zotero.org" # Create data directory mkdir "$TEMPDIR/Zotero" @@ -144,9 +140,7 @@ if [ ! -f "$PDF_TOOLS_CACHE_DIR/$PDF_TOOLS_VERSION" ]; then fi cp -R $PDF_TOOLS_CACHE_DIR $PDF_TOOLS_DIR -# Add default prefs, which are apparently no longer read from extensions in Firefox 60 -cat "$ZOTERO_PATH/defaults/preferences/zotero.js" | sed 's/^pref/user_pref/g' > "$PROFILE/prefs.js" - +touch "$PROFILE/prefs.js" cat <> "$PROFILE/prefs.js" user_pref("app.update.enabled", false); user_pref("extensions.autoDisableScopes", 0); @@ -181,11 +175,11 @@ EOF # -v flag on Windows makes Firefox process hang if [ -z $IS_CYGWIN ]; then - echo "`MOZ_NO_REMOTE=1 NO_EM_RESTART=1 \"$FX_EXECUTABLE\" -v`" + echo "`MOZ_NO_REMOTE=1 NO_EM_RESTART=1 \"$Z_EXECUTABLE\" -v`" fi if [ -n "$CI" ]; then - FX_ARGS="$FX_ARGS -ZoteroAutomatedTest -ZoteroTestTimeout 15000" + Z_ARGS="$Z_ARGS -ZoteroAutomatedTest -ZoteroTestTimeout 15000" fi # Clean up on exit @@ -201,9 +195,11 @@ if [[ -z "$CI" ]] && ! ps | grep scripts/build.js | grep -v grep > /dev/null; th echo fi +ZOTERO_INCLUDE_TESTS=1 $( dirname "$ROOT_DIR" )/zotero-standalone-build/scripts/dir_build -q + makePath FX_PROFILE "$PROFILE" -MOZ_NO_REMOTE=1 NO_EM_RESTART=1 "$FX_EXECUTABLE" -profile "$FX_PROFILE" \ - -chrome chrome://zotero-unit/content/runtests.html -test "$TESTS" -grep "$GREP" -ZoteroTest $FX_ARGS +MOZ_NO_REMOTE=1 NO_EM_RESTART=1 "$Z_EXECUTABLE" -profile "$FX_PROFILE" -jsconsole \ + -chrome chrome://zotero-unit/content/runtests.html -test "$TESTS" -grep "$GREP" -ZoteroTest $Z_ARGS # Check for success test -e "$PROFILE/success"