def export_library(self,
                       translator,
                       displayOptions={},
                       collection=None,
                       output=None,
                       expected=None,
                       resetCache=False):
        assert not displayOptions.get(
            'keepUpdated', False) or output  # Auto-export needs a destination
        displayOptions['Normalize'] = True

        if translator.startswith('id:'):
            translator = translator[len('id:'):]
        else:
            translator = self.translators.byName[translator].translatorID

        found = self.execute(
            'return await Zotero.BetterBibTeX.TestSupport.exportLibrary(translatorID, displayOptions, path, collection)',
            translatorID=translator,
            displayOptions=displayOptions,
            path=output,
            collection=collection)
        if resetCache:
            self.execute('Zotero.BetterBibTeX.TestSupport.resetCache()')

        if expected is None: return

        if output:
            with open(output) as f:
                found = f.read()

        expected_file = expected
        expected, loaded_file = self.load(expected_file, True)
        exported = self.exported(loaded_file, found)

        if expected_file.endswith('.csl.json'):
            assert_equal_diff(
                json.dumps(expected, sort_keys=True, indent='  '),
                json.dumps(json.loads(found), sort_keys=True, indent='  '))

        elif expected_file.endswith('.csl.yml'):
            assert_equal_diff(serialize(expected),
                              serialize(yaml.load(io.StringIO(found))))

        elif expected_file.endswith('.json'):
            # TODO: clean lib and test against schema

            expected = Library(expected)
            found = Library(json.loads(found, object_pairs_hook=OrderedDict))
            assert_equal_diff(serialize(expected), serialize(found))

        else:
            assert_equal_diff(expected.strip(), found.strip())

        self.exported(exported)
    def export_library(self,
                       translator,
                       displayOptions={},
                       collection=None,
                       output=None,
                       expected=None,
                       resetCache=False):
        assert not displayOptions.get(
            'keepUpdated', False) or output  # Auto-export needs a destination

        if translator.startswith('id:'):
            translator = translator[len('id:'):]
        else:
            translator = self.translators.byName[translator].translatorID

        found = self.execute(
            'return await Zotero.BetterBibTeX.TestSupport.exportLibrary(translatorID, displayOptions, path, collection)',
            translatorID=translator,
            displayOptions=displayOptions,
            path=output,
            collection=collection)
        if resetCache:
            self.execute('Zotero.BetterBibTeX.TestSupport.resetCache()')

        if expected is None: return

        if output:
            with open(output) as f:
                found = f.read()

        expected, ext = self.expand_expected(expected)
        loaded(expected)
        exported = os.path.join(
            EXPORTED,
            os.path.basename(os.path.dirname(expected)) + '-' +
            os.path.basename(expected))

        with open(expected) as f:
            expected = f.read()

        if ext == '.csl.json':
            with open(exported, 'w') as f:
                f.write(found)
            assert_equal_diff(serialize(json.loads(expected)),
                              serialize(json.loads(found)))
            os.remove(exported)
            return

        elif ext == '.csl.yml':
            with open(exported, 'w') as f:
                f.write(found)
            assert_equal_diff(serialize(yaml.load(io.StringIO(expected))),
                              serialize(yaml.load(io.StringIO(found))))
            os.remove(exported)
            return

        elif ext == '.json':
            with open(exported, 'w') as f:
                f.write(found)

            found = Library(json.loads(found))
            expected = Library(json.loads(expected))

            assert_equal_diff(serialize(expected), serialize(found))

            os.remove(exported)
            return

        with open(exported, 'w') as f:
            f.write(found)
        expected = expected.strip()
        found = found.strip()

        assert_equal_diff(expected, found)
        os.remove(exported)
        return