def test_use_babel_passes_keyword_args(self):
        layout = BaseLayout(self.create_dummy(), self.create_dummy(),
                            self.builder)
        self.assertEqual(layout.get_packages_latex(), '')

        layout.use_package('babel', options='foo')
        self.assertEqual(layout.get_packages_latex(),
                         '\\usepackage[foo]{babel}\n')

        layout.use_babel('bar')
        self.assertEqual(layout.get_packages_latex(),
                         '\\usepackage[bar]{babel}\n')

        layout.use_babel('baz', append_options=True)
        self.assertEqual(layout.get_packages_latex(),
                         '\\usepackage[bar, baz]{babel}\n')
    def test_use_package_bad_package_name(self):
        layout = BaseLayout(self.create_dummy(), self.create_dummy(),
                            self.builder)

        with self.assertRaises(ValueError) as cm:
            layout.use_package(None)

        self.assertEqual(
            str(cm.exception),
            'Package name should be a string, got None (NoneType)')

        with self.assertRaises(ValueError) as cm:
            layout.use_package(5)

        self.assertEqual(
            str(cm.exception),
            'Package name should be a string, got 5 (int)')
    def test_use_package_conflicting_order(self):
        # Using use_package with conflicting orders should raise exceptions

        layout = BaseLayout(self.create_dummy(), self.create_dummy(),
                            self.builder)
        self.assertEqual(layout.get_packages_latex(), '')

        # insert_after itself
        with self.assertRaises(ConflictingUsePackageOrder) as cm:
            layout.use_package('foo', insert_after='foo')

        self.assertEqual(
            str(cm.exception),
            'Cannot insert "foo" after itself (insert_after="foo").')

        self.assertEqual(layout.get_packages_latex(), '')

        # recursive conflicting order
        layout.use_package('baz', insert_after='foo')
        layout.use_package('foo', insert_after='bar')
        with self.assertRaises(ConflictingUsePackageOrder) as cm:
            layout.use_package('bar', insert_after='baz')

        self.assertEqual(
            str(cm.exception),
            'Conflicting order: bar after baz after foo after bar.')
    def test_use_package_order(self):
        # use_package in combination with insert_after
        # should also work when the "other" package is not yet registered.

        layout = BaseLayout(self.create_dummy(), self.create_dummy(),
                            self.builder)
        self.assertEqual(layout.get_packages_latex(), '')

        # test insert_after
        layout.use_package('dcolumn', insert_after='color')
        layout.use_package('color')
        layout.use_package('colortbl')

        self.assertEqual(
            layout.get_packages_latex(),
            '\\usepackage{color}\n'
            '\\usepackage{dcolumn}\n'
            '\\usepackage{colortbl}\n')

        layout.remove_package('*')
        self.assertEqual(layout.get_packages_latex(), '')
    def test_remove_package(self):
        layout = BaseLayout(self.create_dummy(), self.create_dummy(),
                            self.builder)
        self.assertEqual(layout.get_packages_latex(), '')

        layout.use_package('color')
        layout.use_package('colortbl')
        layout.use_package('dcolumn')

        self.assertEqual(
            layout.get_packages_latex(),
            '\\usepackage{color}\n'
            '\\usepackage{colortbl}\n'
            '\\usepackage{dcolumn}\n')

        layout.remove_package('color')
        self.assertEqual(
            layout.get_packages_latex(),
            '\\usepackage{colortbl}\n'
            '\\usepackage{dcolumn}\n')

        layout.remove_package('*')
        self.assertEqual(layout.get_packages_latex(), '')
    def test_use_package(self):
        layout = BaseLayout(self.create_dummy(), self.create_dummy(),
                            self.builder)

        self.assertEqual(layout.get_packages_latex(), '')

        layout.use_package('inputenc', 'utf8')
        self.assertEqual(layout.get_packages_latex(),
                         '\\usepackage[utf8]{inputenc}\n')

        layout.use_package(u'titlesec', 'noindentafter',
                           insert_after='inputenc')
        self.assertEqual(layout.get_packages_latex(),
                         '\\usepackage[utf8]{inputenc}\n'
                         '\\usepackage[noindentafter]{titlesec}\n')

        layout.use_package('titlesec', 'largestsep')
        self.assertEqual(
            layout.get_packages_latex(),
            '\\usepackage[utf8]{inputenc}\n'
            '\\usepackage[noindentafter, largestsep]{titlesec}\n')

        layout.use_package('titlesec', 'largestsep')
        self.assertEqual(
            layout.get_packages_latex(),
            '\\usepackage[utf8]{inputenc}\n'
            '\\usepackage[noindentafter, largestsep]{titlesec}\n')

        layout.use_package('titlesec', options='', append_options=False)
        self.assertEqual(
            layout.get_packages_latex(),
            '\\usepackage[utf8]{inputenc}\n'
            '\\usepackage{titlesec}\n')

        # clear use-package list
        layout._packages = []

        layout.use_package('hyperref')
        layout.use_package('hyperref', options='colorlinks=false')
        layout.use_package('hyperref')
        self.assertEqual(
            layout.get_packages_latex(),
            '\\usepackage[colorlinks=false]{hyperref}\n')