def test_does_not_rebuild_secondary_domain_pot_files(self):
        fshelpers.create_structure(self.tempdir, {
                'foo/foo/__init__.py': '_("Foo")',
                'foo/foo/locales/bar.pot': fshelpers.asset('empty.pot')})

        potfile = (self.tempdir, 'foo/foo/locales/bar.pot')
        self.assertEquals({}, pohelpers.messages(*potfile))
        synchronize(self.tempdir)
        self.assertEquals({}, pohelpers.messages(*potfile))
    def test_path_comments_are_relative_in_potfile(self):
        fshelpers.create_structure(self.tempdir, {
                'foo/foo/__init__.py': '_("Foo")',
                'foo/foo/locales/foo.pot': fshelpers.asset('empty.pot')})

        potfile = (self.tempdir, 'foo/foo/locales/foo.pot')
        self.assertEquals({}, pohelpers.messages(*potfile))
        synchronize(self.tempdir)
        self.assertEquals({'Foo': ['./foo/__init__.py:1']},
                          pohelpers.message_references(*potfile))
    def test_does_not_rebuild_secondary_domain_pot_files(self):
        fshelpers.create_structure(
            self.tempdir, {
                'foo/foo/__init__.py': '_("Foo")',
                'foo/foo/locales/bar.pot': fshelpers.asset('empty.pot')
            })

        potfile = (self.tempdir, 'foo/foo/locales/bar.pot')
        self.assertEquals({}, pohelpers.messages(*potfile))
        synchronize(self.tempdir)
        self.assertEquals({}, pohelpers.messages(*potfile))
    def test_path_comments_are_relative_in_potfile(self):
        fshelpers.create_structure(
            self.tempdir, {
                'foo/foo/__init__.py': '_("Foo")',
                'foo/foo/locales/foo.pot': fshelpers.asset('empty.pot')
            })

        potfile = (self.tempdir, 'foo/foo/locales/foo.pot')
        self.assertEquals({}, pohelpers.messages(*potfile))
        synchronize(self.tempdir)
        self.assertEquals({'Foo': ['./foo/__init__.py:1']},
                          pohelpers.message_references(*potfile))
    def test_merges_manual_pot_files(self):
        fshelpers.create_structure(self.tempdir, {
                'foo/foo/__init__.py': '_("Foo")',
                'foo/foo/locales/foo.pot': fshelpers.asset('empty.pot'),
                'foo/foo/locales/foo-manual.pot': fshelpers.asset(
                    'foo.pot'),
                'foo/foo/locales/de/LC_MESSAGES/foo.po': fshelpers.asset(
                    'empty.po'),
                })

        synchronize(self.tempdir, output=None)
        pofile = (self.tempdir, 'foo/foo/locales/de/LC_MESSAGES/foo.po')
        self.assertEquals({'Foo': '',
                           'Login': ''}, pohelpers.messages(*pofile))
    def test_creates_selected_languages_when_missing(self):
        fshelpers.create_structure(self.tempdir, {
                'foo/foo/locales/bar.pot': fshelpers.asset('foo.pot')})

        enpath = os.path.join(self.tempdir,
                              'foo/foo/locales/en/LC_MESSAGES/bar.po')

        synchronize(self.tempdir, output=None)
        self.assertFalse(os.path.exists(enpath),
                         'A sync without selecting languages should'
                         ' not create new languages.')

        synchronize(self.tempdir, languages=['en'], output=None)
        self.assertTrue(os.path.exists(enpath),
                        'A sync with selecting languages should'
                        ' create missing languages.')

        self.assertEquals({'Login': ''}, pohelpers.messages(enpath))
    def test_syncs_only_selected_languages(self):
        fshelpers.create_structure(self.tempdir, {
                'foo/foo/locales/bar.pot': fshelpers.asset('foo.pot'),
                'foo/foo/locales/en/LC_MESSAGES/bar.po': fshelpers.asset(
                    'empty.po'),
                'foo/foo/locales/de/LC_MESSAGES/bar.po': fshelpers.asset(
                    'empty.po'),
                })

        en = (self.tempdir, 'foo/foo/locales/en/LC_MESSAGES/bar.po')
        de = (self.tempdir, 'foo/foo/locales/de/LC_MESSAGES/bar.po')
        self.assertEquals({}, pohelpers.messages(*en))
        self.assertEquals({}, pohelpers.messages(*de))

        synchronize(self.tempdir, languages=['en'], output=None)

        self.assertEquals({'Login': ''}, pohelpers.messages(*en))
        self.assertEquals({}, pohelpers.messages(*de))
    def test_syncs_po_files_of_existing_languages(self):
        fshelpers.create_structure(self.tempdir, {
                'foo/foo/__init__.py': '_("Foo")',
                'foo/foo/locales/foo.pot': fshelpers.asset('empty.pot'),
                'foo/foo/locales/de/LC_MESSAGES/foo.po': fshelpers.asset(
                    'empty.po'),
                })


        pofile = (self.tempdir, 'foo/foo/locales/de/LC_MESSAGES/foo.po')
        self.assertEquals({}, pohelpers.messages(*pofile))

        output = StringIO()
        synchronize(self.tempdir, output=output)

        self.assertEquals({'Foo': ''}, pohelpers.messages(*pofile))
        self.assertRegexpMatches(output.getvalue(),
                                 r'\/foo.po: 1 added, 0 removed')
    def test_does_not_sync_manual_pot_files(self):
        fshelpers.create_structure(self.tempdir, {
                'foo/foo/__init__.py': '_("Foo")',
                'foo/foo/locales/foo.pot': fshelpers.asset('empty.pot'),
                'foo/foo/locales/foo-manual.pot': fshelpers.asset(
                    'empty.pot'),
                'foo/foo/locales/de/LC_MESSAGES/foo.po': fshelpers.asset(
                    'foo-de.po'),
                })

        synchronize(self.tempdir, languages=['de'], output=None)

        self.assertItemsEqual(
            ['foo/foo/__init__.py',
             'foo/foo/locales/foo.pot',
             'foo/foo/locales/foo-manual.pot',
             'foo/foo/locales/de/LC_MESSAGES/foo.po'],
            fshelpers.files(self.tempdir))
    def test_merges_manual_pot_files(self):
        fshelpers.create_structure(
            self.tempdir, {
                'foo/foo/__init__.py':
                '_("Foo")',
                'foo/foo/locales/foo.pot':
                fshelpers.asset('empty.pot'),
                'foo/foo/locales/foo-manual.pot':
                fshelpers.asset('foo.pot'),
                'foo/foo/locales/de/LC_MESSAGES/foo.po':
                fshelpers.asset('empty.po'),
            })

        synchronize(self.tempdir, output=None)
        pofile = (self.tempdir, 'foo/foo/locales/de/LC_MESSAGES/foo.po')
        self.assertEquals({
            'Foo': '',
            'Login': ''
        }, pohelpers.messages(*pofile))
    def test_creates_selected_languages_when_missing(self):
        fshelpers.create_structure(
            self.tempdir,
            {'foo/foo/locales/bar.pot': fshelpers.asset('foo.pot')})

        enpath = os.path.join(self.tempdir,
                              'foo/foo/locales/en/LC_MESSAGES/bar.po')

        synchronize(self.tempdir, output=None)
        self.assertFalse(
            os.path.exists(enpath), 'A sync without selecting languages should'
            ' not create new languages.')

        synchronize(self.tempdir, languages=['en'], output=None)
        self.assertTrue(
            os.path.exists(enpath), 'A sync with selecting languages should'
            ' create missing languages.')

        self.assertEquals({'Login': ''}, pohelpers.messages(enpath))
    def test_syncs_only_selected_languages(self):
        fshelpers.create_structure(
            self.tempdir, {
                'foo/foo/locales/bar.pot':
                fshelpers.asset('foo.pot'),
                'foo/foo/locales/en/LC_MESSAGES/bar.po':
                fshelpers.asset('empty.po'),
                'foo/foo/locales/de/LC_MESSAGES/bar.po':
                fshelpers.asset('empty.po'),
            })

        en = (self.tempdir, 'foo/foo/locales/en/LC_MESSAGES/bar.po')
        de = (self.tempdir, 'foo/foo/locales/de/LC_MESSAGES/bar.po')
        self.assertEquals({}, pohelpers.messages(*en))
        self.assertEquals({}, pohelpers.messages(*de))

        synchronize(self.tempdir, languages=['en'], output=None)

        self.assertEquals({'Login': ''}, pohelpers.messages(*en))
        self.assertEquals({}, pohelpers.messages(*de))
    def test_syncs_po_files_of_existing_languages(self):
        fshelpers.create_structure(
            self.tempdir, {
                'foo/foo/__init__.py':
                '_("Foo")',
                'foo/foo/locales/foo.pot':
                fshelpers.asset('empty.pot'),
                'foo/foo/locales/de/LC_MESSAGES/foo.po':
                fshelpers.asset('empty.po'),
            })

        pofile = (self.tempdir, 'foo/foo/locales/de/LC_MESSAGES/foo.po')
        self.assertEquals({}, pohelpers.messages(*pofile))

        output = StringIO()
        synchronize(self.tempdir, output=output)

        self.assertEquals({'Foo': ''}, pohelpers.messages(*pofile))
        self.assertRegexpMatches(output.getvalue(),
                                 r'\/foo.po: 1 added, 0 removed')
    def test_does_not_sync_manual_pot_files(self):
        fshelpers.create_structure(
            self.tempdir, {
                'foo/foo/__init__.py':
                '_("Foo")',
                'foo/foo/locales/foo.pot':
                fshelpers.asset('empty.pot'),
                'foo/foo/locales/foo-manual.pot':
                fshelpers.asset('empty.pot'),
                'foo/foo/locales/de/LC_MESSAGES/foo.po':
                fshelpers.asset('foo-de.po'),
            })

        synchronize(self.tempdir, languages=['de'], output=None)

        self.assertItemsEqual([
            'foo/foo/__init__.py', 'foo/foo/locales/foo.pot',
            'foo/foo/locales/foo-manual.pot',
            'foo/foo/locales/de/LC_MESSAGES/foo.po'
        ], fshelpers.files(self.tempdir))