@@ -414,35 +414,41 @@ Zotero_TranslatorTester.prototype._runTestsRecursively = function(testDoneCallba
414414 * @param {Object } test - Test to execute
415415 * @param {Function } testDoneCallback - A callback to be executed when test is complete
416416 */
417- Zotero_TranslatorTester . prototype . fetchPageAndRunTest = function ( test , testDoneCallback ) {
417+ Zotero_TranslatorTester . prototype . fetchPageAndRunTest = async function ( test , testDoneCallback ) {
418418 // Scaffold
419419 if ( Zotero . isFx ) {
420- let browser = Zotero . HTTP . loadDocuments (
421- test . url ,
422- ( doc ) => {
423- if ( test . defer ) {
424- Zotero . debug ( "Waiting " + ( Zotero_TranslatorTester . DEFER_DELAY / 1000 )
425- + " second(s) for page content to settle" ) ;
426- }
427- setTimeout ( ( ) => {
428- // Use cookies from document in translator HTTP requests
429- this . _cookieSandbox = new Zotero . CookieSandbox ( null , test . url , doc . cookie ) ;
430-
431- this . runTest ( test , doc , function ( obj , test , status , message ) {
432- Zotero . Browser . deleteHiddenBrowser ( browser ) ;
433- testDoneCallback ( obj , test , status , message ) ;
434- } ) ;
435- } , test . defer ? Zotero_TranslatorTester . DEFER_DELAY : 0 ) ;
436- } ,
437- null ,
438- ( e ) => {
439- Zotero . Browser . deleteHiddenBrowser ( browser ) ;
440- testDoneCallback ( this , test , "failed" , "Translation failed to initialize: " + e ) ;
441- } ,
442- true
443- ) ;
444- browser . docShell . allowMetaRedirects = true ;
445- return
420+ const { HiddenBrowser } = ChromeUtils . import ( "chrome://zotero/content/HiddenBrowser.jsm" ) ;
421+ const { RemoteTranslate } = ChromeUtils . import ( "chrome://zotero/content/RemoteTranslate.jsm" ) ;
422+ let browser = await HiddenBrowser . create ( test . url , {
423+ requireSuccessfulStatus : true ,
424+ docShell : { allowMetaRedirects : true }
425+ } ) ;
426+ let translate = new RemoteTranslate ( ) ;
427+ try {
428+ if ( test . defer ) {
429+ Zotero . debug ( "Waiting " + ( Zotero_TranslatorTester . DEFER_DELAY / 1000 )
430+ + " second(s) for page content to settle" ) ;
431+ await Zotero . Promise . delay ( Zotero_TranslatorTester . DEFER_DELAY ) ;
432+ }
433+ else {
434+ // Wait just a bit for things to settle
435+ await Zotero . Promise . delay ( 100 ) ;
436+ }
437+
438+ await translate . setBrowser ( browser ) ;
439+ await translate . setTranslatorProvider ( this . translatorProvider ) ;
440+ translate . setTranslator ( this . translator ) ;
441+ translate . setHandler ( "debug" , ( _ , obj ) => this . _debug ( this , obj ) ) ;
442+ translate . setHandler ( "error" , ( _ , err ) => this . _debug ( this , err ) ) ;
443+ let { test : newTest , status, message } = await translate . runTest ( test ) ;
444+ translate . dispose ( ) ;
445+ testDoneCallback ( this , newTest , status , message ) ;
446+ }
447+ finally {
448+ HiddenBrowser . destroy ( browser ) ;
449+ translate . dispose ( ) ;
450+ }
451+ return ;
446452 }
447453
448454 if ( typeof process === 'object' && process + '' === '[object process]' ) {
@@ -609,6 +615,11 @@ Zotero_TranslatorTester.prototype._checkResult = function(test, translate, retur
609615 testDoneCallback ( this , test , "failed" , "Translation failed; examine debug output for errors" ) ;
610616 return ;
611617 }
618+
619+ // Save items. This makes it easier to correct tests automatically.
620+ test . itemsReturned = test . items === "multiple"
621+ ? "multiple"
622+ : translate . newItems . map ( item => Zotero_TranslatorTester . _sanitizeItem ( item ) ) ;
612623
613624 if ( ! translate . newItems . length ) {
614625 testDoneCallback ( this , test , "failed" , "Translation failed: no items returned" ) ;
@@ -629,14 +640,6 @@ Zotero_TranslatorTester.prototype._checkResult = function(test, translate, retur
629640 // Show diff
630641 this . _debug ( this , "TranslatorTester: Data mismatch detected:" ) ;
631642 this . _debug ( this , Zotero_TranslatorTester . _generateDiff ( testItem , translatedItem ) ) ;
632-
633- // Save items. This makes it easier to correct tests automatically.
634- var m = translate . newItems . length ;
635- test . itemsReturned = new Array ( m ) ;
636- for ( var j = 0 ; j < m ; j ++ ) {
637- test . itemsReturned [ j ] = Zotero_TranslatorTester . _sanitizeItem ( translate . newItems [ i ] ) ;
638- }
639-
640643 testDoneCallback ( this , test , "unknown" , "Item " + i + " does not match" ) ;
641644 return ;
642645 }
@@ -663,7 +666,7 @@ Zotero_TranslatorTester.prototype.newTest = async function (doc, testReadyCallba
663666 }
664667 translate . setDocument ( doc ) ;
665668 // Use cookies from document
666- if ( doc . cookie ) {
669+ if ( doc . cookie && Zotero . CookieSandbox ) {
667670 translate . setCookieSandbox ( new Zotero . CookieSandbox (
668671 null ,
669672 doc . location . href ,
0 commit comments