blob: 1640be268fa63a90f75c8766f3a3dc251f0e1dd1 [file] [log] [blame]
# Copyright 2012 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
import tempfile
import time
from portage import os
from portage import shutil
from portage.tests import TestCase
from repoman.utilities import UpdateChangeLog
class RepomanEchangelogTestCase(TestCase):
def setUp(self):
super(RepomanEchangelogTestCase, self).setUp()
self.tmpdir = tempfile.mkdtemp(prefix='repoman.echangelog.')
self.skel_changelog = os.path.join(self.tmpdir, 'skel.ChangeLog')
skel = [
'# ChangeLog for <CATEGORY>/<PACKAGE_NAME>\n',
'# Copyright 1999-2000 Gentoo Foundation; Distributed under the GPL v2\n',
'# $Header: $\n'
]
self._writelines(self.skel_changelog, skel)
self.cat = 'mycat'
self.pkg = 'mypkg'
self.pkgdir = os.path.join(self.tmpdir, self.cat, self.pkg)
os.makedirs(self.pkgdir)
self.header_pkg = '# ChangeLog for %s/%s\n' % (self.cat, self.pkg)
self.header_copyright = '# Copyright 1999-%s Gentoo Foundation; Distributed under the GPL v2\n' % \
time.strftime('%Y', time.gmtime())
self.header_cvs = '# $Header: $\n'
self.changelog = os.path.join(self.pkgdir, 'ChangeLog')
self.user = 'Testing User <portage@gentoo.org>'
def tearDown(self):
super(RepomanEchangelogTestCase, self).tearDown()
shutil.rmtree(self.tmpdir)
def _readlines(self, file):
with open(file, 'r') as f:
return f.readlines()
def _writelines(self, file, data):
with open(file, 'w') as f:
f.writelines(data)
def testRejectRootUser(self):
self.assertEqual(UpdateChangeLog(self.pkgdir, 'me <root@gentoo.org>', '', '', '', '', quiet=True), None)
def testMissingSkelFile(self):
# Test missing ChangeLog, but with empty skel (i.e. do nothing).
UpdateChangeLog(self.pkgdir, self.user, 'test!', '/does/not/exist', self.cat, self.pkg, quiet=True)
actual_cl = self._readlines(self.changelog)
self.assertTrue(len(actual_cl[0]) > 0)
def testEmptyChangeLog(self):
# Make sure we do the right thing with a 0-byte ChangeLog
open(self.changelog, 'w').close()
UpdateChangeLog(self.pkgdir, self.user, 'test!', self.skel_changelog, self.cat, self.pkg, quiet=True)
actual_cl = self._readlines(self.changelog)
self.assertEqual(actual_cl[0], self.header_pkg)
self.assertEqual(actual_cl[1], self.header_copyright)
self.assertEqual(actual_cl[2], self.header_cvs)
def testCopyrightUpdate(self):
# Make sure updating the copyright line works
UpdateChangeLog(self.pkgdir, self.user, 'test!', self.skel_changelog, self.cat, self.pkg, quiet=True)
actual_cl = self._readlines(self.changelog)
self.assertEqual(actual_cl[1], self.header_copyright)
def testSkelHeader(self):
# Test skel.ChangeLog -> ChangeLog
UpdateChangeLog(self.pkgdir, self.user, 'test!', self.skel_changelog, self.cat, self.pkg, quiet=True)
actual_cl = self._readlines(self.changelog)
self.assertEqual(actual_cl[0], self.header_pkg)
self.assertNotEqual(actual_cl[-1], '\n')
def testExistingGoodHeader(self):
# Test existing ChangeLog (correct values)
self._writelines(self.changelog, [self.header_pkg])
UpdateChangeLog(self.pkgdir, self.user, 'test!', self.skel_changelog, self.cat, self.pkg, quiet=True)
actual_cl = self._readlines(self.changelog)
self.assertEqual(actual_cl[0], self.header_pkg)
def testExistingBadHeader(self):
# Test existing ChangeLog (wrong values)
self._writelines(self.changelog, ['# ChangeLog for \n'])
UpdateChangeLog(self.pkgdir, self.user, 'test!', self.skel_changelog, self.cat, self.pkg, quiet=True)
actual_cl = self._readlines(self.changelog)
self.assertEqual(actual_cl[0], self.header_pkg)
def testTrailingNewlines(self):
# Make sure trailing newlines get chomped.
self._writelines(self.changelog, ['#\n', 'foo\n', '\n', 'bar\n', '\n', '\n'])
UpdateChangeLog(self.pkgdir, self.user, 'test!', self.skel_changelog, self.cat, self.pkg, quiet=True)
actual_cl = self._readlines(self.changelog)
self.assertNotEqual(actual_cl[-1], '\n')