def test_bundle_defer_async(self):
        registry = getUtility(IRegistry)

        bundles = registry.collectionOfInterface(
            IBundleRegistry,
            prefix="plone.bundles"
        )
        bundle = bundles.add('foobar')
        bundle.name = 'foobar'
        bundle.jscompilation = 'foobar.js'
        bundle.csscompilation = 'foobar.css'
        bundle.resources = ['foobar']

        view = ScriptsView(self.app, self.app.REQUEST, None, None)
        view.get_cooked_bundles = lambda: [('foobar', bundle)]

        import Products.CMFPlone.resources.browser
        path = os.path.dirname(Products.CMFPlone.resources.browser.__file__)
        view.index = ViewPageTemplateFile('scripts.pt', path)
        view.update()

        self.assertTrue('async="async"' not in view.index(view))
        self.assertTrue('defer="defer"' not in view.index(view))

        bundle.load_async = True
        bundle.load_defer = False
        self.assertTrue('async="async"' in view.index(view))
        self.assertTrue('defer="defer"' not in view.index(view))

        bundle.load_async = False
        bundle.load_defer = True
        self.assertTrue('async="async"' not in view.index(view))
        self.assertTrue('defer="defer"' in view.index(view))

        bundle.load_async = True
        bundle.load_defer = True

        self.assertTrue('async="async"' in view.index(view))
        self.assertTrue('defer="defer"' in view.index(view))

        bundle.load_async = False
        bundle.load_defer = False

        self.assertTrue('async="async"' not in view.index(view))
        self.assertTrue('defer="defer"' not in view.index(view))