123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715 |
- # Copyright (c) Twisted Matrix Laboratories.
- # See LICENSE for details.
- """
- Tests for L{incremental.update}.
- """
- from __future__ import division, absolute_import
- import sys
- import os
- import datetime
- from twisted.python.filepath import FilePath
- from twisted.python.compat import NativeStringIO
- from twisted.trial.unittest import TestCase
- from incremental.update import _run, run
- class NonCreatedUpdateTests(TestCase):
- def setUp(self):
- self.srcdir = FilePath(self.mktemp())
- self.srcdir.makedirs()
- packagedir = self.srcdir.child('inctestpkg')
- packagedir.makedirs()
- packagedir.child('__init__.py').setContent(b"""
- from incremental import Version
- introduced_in = Version('inctestpkg', 'NEXT', 0, 0).short()
- next_released_version = "inctestpkg NEXT"
- """)
- self.getcwd = lambda: self.srcdir.path
- self.packagedir = packagedir
- class Date(object):
- year = 2016
- month = 8
- self.date = Date()
- def test_create(self):
- """
- `incremental.update package --create` initialises the version.
- """
- self.assertFalse(self.packagedir.child("_version.py").exists())
- out = []
- _run('inctestpkg', path=None, newversion=None, patch=False, rc=False,
- dev=False, create=True, _date=self.date, _getcwd=self.getcwd,
- _print=out.append)
- self.assertTrue(self.packagedir.child("_version.py").exists())
- self.assertEqual(self.packagedir.child("_version.py").getContent(),
- b'''"""
- Provides inctestpkg version information.
- """
- # This file is auto-generated! Do not edit!
- # Use `python -m incremental.update inctestpkg` to change this file.
- from incremental import Version
- __version__ = Version('inctestpkg', 16, 8, 0)
- __all__ = ["__version__"]
- ''')
- class MissingTests(TestCase):
- def setUp(self):
- self.srcdir = FilePath(self.mktemp())
- self.srcdir.makedirs()
- self.srcdir.child('srca').makedirs()
- packagedir = self.srcdir.child('srca').child('inctestpkg')
- packagedir.makedirs()
- packagedir.child('__init__.py').setContent(b"""
- from incremental import Version
- introduced_in = Version('inctestpkg', 'NEXT', 0, 0).short()
- next_released_version = "inctestpkg NEXT"
- """)
- packagedir.child('_version.py').setContent(b"""
- from incremental import Version
- __version__ = Version('inctestpkg', 1, 2, 3)
- __all__ = ["__version__"]
- """)
- self.getcwd = lambda: self.srcdir.path
- self.packagedir = packagedir
- class Date(object):
- year = 2016
- month = 8
- self.date = Date()
- def test_path(self):
- """
- `incremental.update package --dev` raises and quits if it can't find
- the package.
- """
- out = []
- with self.assertRaises(ValueError):
- _run(u'inctestpkg', path=None, newversion=None,
- patch=False, rc=False, dev=True, create=False,
- _date=self.date, _getcwd=self.getcwd, _print=out.append)
- class CreatedUpdateInSrcTests(TestCase):
- def setUp(self):
- self.srcdir = FilePath(self.mktemp())
- self.srcdir.makedirs()
- self.srcdir.child('src').makedirs()
- packagedir = self.srcdir.child('src').child('inctestpkg')
- packagedir.makedirs()
- packagedir.child('__init__.py').setContent(b"""
- from incremental import Version
- introduced_in = Version('inctestpkg', 'NEXT', 0, 0).short()
- next_released_version = "inctestpkg NEXT"
- """)
- packagedir.child('_version.py').setContent(b"""
- from incremental import Version
- __version__ = Version('inctestpkg', 1, 2, 3)
- __all__ = ["__version__"]
- """)
- self.getcwd = lambda: self.srcdir.path
- self.packagedir = packagedir
- class Date(object):
- year = 2016
- month = 8
- self.date = Date()
- def test_path(self):
- """
- `incremental.update package --path=<path> --dev` increments the dev
- version of the package on the given path
- """
- out = []
- _run(u'inctestpkg', path=None, newversion=None,
- patch=False, rc=False, dev=True, create=False, _date=self.date,
- _getcwd=self.getcwd, _print=out.append)
- self.assertTrue(self.packagedir.child("_version.py").exists())
- self.assertEqual(self.packagedir.child("_version.py").getContent(),
- b'''"""
- Provides inctestpkg version information.
- """
- # This file is auto-generated! Do not edit!
- # Use `python -m incremental.update inctestpkg` to change this file.
- from incremental import Version
- __version__ = Version('inctestpkg', 1, 2, 3, dev=0)
- __all__ = ["__version__"]
- ''')
- _run(u'inctestpkg', path=None, newversion=None,
- patch=False, rc=False, dev=True, create=False, _date=self.date,
- _getcwd=self.getcwd, _print=out.append)
- self.assertTrue(self.packagedir.child("_version.py").exists())
- self.assertEqual(self.packagedir.child("_version.py").getContent(),
- b'''"""
- Provides inctestpkg version information.
- """
- # This file is auto-generated! Do not edit!
- # Use `python -m incremental.update inctestpkg` to change this file.
- from incremental import Version
- __version__ = Version('inctestpkg', 1, 2, 3, dev=1)
- __all__ = ["__version__"]
- ''')
- class CreatedUpdateTests(TestCase):
- maxDiff = None
- def setUp(self):
- self.srcdir = FilePath(self.mktemp())
- self.srcdir.makedirs()
- packagedir = self.srcdir.child('inctestpkg')
- packagedir.makedirs()
- packagedir.child('__init__.py').setContent(b"""
- from incremental import Version
- introduced_in = Version('inctestpkg', 'NEXT', 0, 0).short()
- next_released_version = "inctestpkg NEXT"
- """)
- packagedir.child('_version.py').setContent(b"""
- from incremental import Version
- __version__ = Version('inctestpkg', 1, 2, 3)
- __all__ = ["__version__"]
- """)
- self.getcwd = lambda: self.srcdir.path
- self.packagedir = packagedir
- class Date(object):
- year = 2016
- month = 8
- self.date = Date()
- def test_path(self):
- """
- `incremental.update package --path=<path> --dev` increments the dev
- version of the package on the given path
- """
- out = []
- _run(u'inctestpkg', path=self.packagedir.path, newversion=None,
- patch=False, rc=False, dev=True, create=False, _date=self.date,
- _print=out.append)
- self.assertTrue(self.packagedir.child("_version.py").exists())
- self.assertEqual(self.packagedir.child("_version.py").getContent(),
- b'''"""
- Provides inctestpkg version information.
- """
- # This file is auto-generated! Do not edit!
- # Use `python -m incremental.update inctestpkg` to change this file.
- from incremental import Version
- __version__ = Version('inctestpkg', 1, 2, 3, dev=0)
- __all__ = ["__version__"]
- ''')
- def test_dev(self):
- """
- `incremental.update package --dev` increments the dev version.
- """
- out = []
- _run(u'inctestpkg', path=None, newversion=None, patch=False, rc=False,
- dev=True, create=False, _date=self.date, _getcwd=self.getcwd,
- _print=out.append)
- self.assertTrue(self.packagedir.child("_version.py").exists())
- self.assertEqual(self.packagedir.child("_version.py").getContent(),
- b'''"""
- Provides inctestpkg version information.
- """
- # This file is auto-generated! Do not edit!
- # Use `python -m incremental.update inctestpkg` to change this file.
- from incremental import Version
- __version__ = Version('inctestpkg', 1, 2, 3, dev=0)
- __all__ = ["__version__"]
- ''')
- def test_patch(self):
- """
- `incremental.update package --patch` increments the patch version.
- """
- out = []
- _run(u'inctestpkg', path=None, newversion=None, patch=True, rc=False,
- dev=False, create=False, _date=self.date, _getcwd=self.getcwd,
- _print=out.append)
- self.assertEqual(self.packagedir.child("_version.py").getContent(),
- b'''"""
- Provides inctestpkg version information.
- """
- # This file is auto-generated! Do not edit!
- # Use `python -m incremental.update inctestpkg` to change this file.
- from incremental import Version
- __version__ = Version('inctestpkg', 1, 2, 4)
- __all__ = ["__version__"]
- ''')
- self.assertEqual(self.packagedir.child("__init__.py").getContent(),
- b"""
- from incremental import Version
- introduced_in = Version('inctestpkg', 1, 2, 4).short()
- next_released_version = "inctestpkg 1.2.4"
- """)
- def test_patch_with_prerelease_and_dev(self):
- """
- `incremental.update package --patch` increments the patch version, and
- disregards any old prerelease/dev versions.
- """
- self.packagedir.child('_version.py').setContent(b"""
- from incremental import Version
- __version__ = Version('inctestpkg', 1, 2, 3, release_candidate=1, dev=2)
- __all__ = ["__version__"]
- """)
- out = []
- _run(u'inctestpkg', path=None, newversion=None, patch=True, rc=False,
- dev=False, create=False, _date=self.date, _getcwd=self.getcwd,
- _print=out.append)
- self.assertEqual(self.packagedir.child("_version.py").getContent(),
- b'''"""
- Provides inctestpkg version information.
- """
- # This file is auto-generated! Do not edit!
- # Use `python -m incremental.update inctestpkg` to change this file.
- from incremental import Version
- __version__ = Version('inctestpkg', 1, 2, 4)
- __all__ = ["__version__"]
- ''')
- def test_rc_patch(self):
- """
- `incremental.update package --patch --rc` increments the patch
- version and makes it a release candidate.
- """
- out = []
- _run(u'inctestpkg', path=None, newversion=None, patch=True, rc=True,
- dev=False, create=False, _date=self.date, _getcwd=self.getcwd,
- _print=out.append)
- self.assertEqual(self.packagedir.child("_version.py").getContent(),
- b'''"""
- Provides inctestpkg version information.
- """
- # This file is auto-generated! Do not edit!
- # Use `python -m incremental.update inctestpkg` to change this file.
- from incremental import Version
- __version__ = Version('inctestpkg', 1, 2, 4, release_candidate=1)
- __all__ = ["__version__"]
- ''')
- self.assertEqual(self.packagedir.child("__init__.py").getContent(),
- b"""
- from incremental import Version
- introduced_in = Version('inctestpkg', 1, 2, 4, release_candidate=1).short()
- next_released_version = "inctestpkg 1.2.4rc1"
- """)
- def test_rc_with_existing_rc(self):
- """
- `incremental.update package --rc` increments the rc version if the
- existing version is an rc, and discards any dev version.
- """
- self.packagedir.child('_version.py').setContent(b"""
- from incremental import Version
- __version__ = Version('inctestpkg', 1, 2, 3, release_candidate=1, dev=2)
- __all__ = ["__version__"]
- """)
- out = []
- _run(u'inctestpkg', path=None, newversion=None, patch=False, rc=True,
- dev=False, create=False, _date=self.date, _getcwd=self.getcwd,
- _print=out.append)
- self.assertEqual(self.packagedir.child("_version.py").getContent(),
- b'''"""
- Provides inctestpkg version information.
- """
- # This file is auto-generated! Do not edit!
- # Use `python -m incremental.update inctestpkg` to change this file.
- from incremental import Version
- __version__ = Version('inctestpkg', 1, 2, 3, release_candidate=2)
- __all__ = ["__version__"]
- ''')
- self.assertEqual(self.packagedir.child("__init__.py").getContent(),
- b"""
- from incremental import Version
- introduced_in = Version('inctestpkg', 1, 2, 3, release_candidate=2).short()
- next_released_version = "inctestpkg 1.2.3rc2"
- """)
- def test_rc_with_no_rc(self):
- """
- `incremental.update package --rc`, when the package is not a release
- candidate, will issue a new major/minor rc, and disregards the micro
- and dev.
- """
- self.packagedir.child('_version.py').setContent(b"""
- from incremental import Version
- __version__ = Version('inctestpkg', 1, 2, 3, dev=2)
- __all__ = ["__version__"]
- """)
- out = []
- _run(u'inctestpkg', path=None, newversion=None, patch=False, rc=True,
- dev=False, create=False, _date=self.date, _getcwd=self.getcwd,
- _print=out.append)
- self.assertEqual(self.packagedir.child("_version.py").getContent(),
- b'''"""
- Provides inctestpkg version information.
- """
- # This file is auto-generated! Do not edit!
- # Use `python -m incremental.update inctestpkg` to change this file.
- from incremental import Version
- __version__ = Version('inctestpkg', 16, 8, 0, release_candidate=1)
- __all__ = ["__version__"]
- ''')
- self.assertEqual(self.packagedir.child("__init__.py").getContent(),
- b"""
- from incremental import Version
- introduced_in = Version('inctestpkg', 16, 8, 0, release_candidate=1).short()
- next_released_version = "inctestpkg 16.8.0rc1"
- """)
- def test_full_with_rc(self):
- """
- `incremental.update package`, when the package is a release
- candidate, will issue the major/minor, sans release candidate or dev.
- """
- out = []
- _run(u'inctestpkg', path=None, newversion=None, patch=False, rc=True,
- dev=False, create=False, _date=self.date, _getcwd=self.getcwd,
- _print=out.append)
- self.assertEqual(self.packagedir.child("_version.py").getContent(),
- b'''"""
- Provides inctestpkg version information.
- """
- # This file is auto-generated! Do not edit!
- # Use `python -m incremental.update inctestpkg` to change this file.
- from incremental import Version
- __version__ = Version('inctestpkg', 16, 8, 0, release_candidate=1)
- __all__ = ["__version__"]
- ''')
- self.assertEqual(self.packagedir.child("__init__.py").getContent(),
- b"""
- from incremental import Version
- introduced_in = Version('inctestpkg', 16, 8, 0, release_candidate=1).short()
- next_released_version = "inctestpkg 16.8.0rc1"
- """)
- _run(u'inctestpkg', path=None, newversion=None, patch=False, rc=False,
- dev=False, create=False, _date=self.date, _getcwd=self.getcwd,
- _print=out.append)
- self.assertEqual(self.packagedir.child("_version.py").getContent(),
- b'''"""
- Provides inctestpkg version information.
- """
- # This file is auto-generated! Do not edit!
- # Use `python -m incremental.update inctestpkg` to change this file.
- from incremental import Version
- __version__ = Version('inctestpkg', 16, 8, 0)
- __all__ = ["__version__"]
- ''')
- self.assertEqual(self.packagedir.child("__init__.py").getContent(),
- b"""
- from incremental import Version
- introduced_in = Version('inctestpkg', 16, 8, 0).short()
- next_released_version = "inctestpkg 16.8.0"
- """)
- def test_full_without_rc(self):
- """
- `incremental.update package`, when the package is NOT a release
- candidate, will raise an error.
- """
- out = []
- with self.assertRaises(ValueError) as e:
- _run(u'inctestpkg', path=None, newversion=None, patch=False,
- rc=False, dev=False, create=False, _date=self.date,
- _getcwd=self.getcwd, _print=out.append)
- self.assertEqual(
- e.exception.args[0],
- "You need to issue a rc before updating the major/minor")
- def test_no_mix_newversion(self):
- """
- The `--newversion` flag can't be mixed with --patch, --rc, or --dev.
- """
- out = []
- with self.assertRaises(ValueError) as e:
- _run(u'inctestpkg', path=None, newversion="1", patch=True,
- rc=False, dev=False, create=False, _date=self.date,
- _getcwd=self.getcwd, _print=out.append)
- self.assertEqual(e.exception.args[0], "Only give --newversion")
- with self.assertRaises(ValueError) as e:
- _run(u'inctestpkg', path=None, newversion="1", patch=False,
- rc=True, dev=False, create=False, _date=self.date,
- _getcwd=self.getcwd, _print=out.append)
- self.assertEqual(e.exception.args[0], "Only give --newversion")
- with self.assertRaises(ValueError) as e:
- _run(u'inctestpkg', path=None, newversion="1", patch=False,
- rc=False, dev=True, create=False, _date=self.date,
- _getcwd=self.getcwd, _print=out.append)
- self.assertEqual(e.exception.args[0], "Only give --newversion")
- def test_no_mix_dev(self):
- """
- The `--dev` flag can't be mixed with --patch, or --rc.
- """
- out = []
- with self.assertRaises(ValueError) as e:
- _run(u'inctestpkg', path=None, newversion=None, patch=True,
- rc=False, dev=True, create=False, _date=self.date,
- _getcwd=self.getcwd, _print=out.append)
- self.assertEqual(e.exception.args[0], "Only give --dev")
- with self.assertRaises(ValueError) as e:
- _run(u'inctestpkg', path=None, newversion=None, patch=False,
- rc=True, dev=True, create=False, _date=self.date,
- _getcwd=self.getcwd, _print=out.append)
- self.assertEqual(e.exception.args[0], "Only give --dev")
- def test_no_mix_create(self):
- """
- The `--create` flag can't be mixed with --patch, --rc, --dev, or
- --newversion.
- """
- out = []
- with self.assertRaises(ValueError) as e:
- _run(u'inctestpkg', path=None, newversion=None, patch=True,
- rc=False, dev=False, create=True, _date=self.date,
- _getcwd=self.getcwd, _print=out.append)
- self.assertEqual(e.exception.args[0], "Only give --create")
- with self.assertRaises(ValueError) as e:
- _run(u'inctestpkg', path=None, newversion="1", patch=False,
- rc=False, dev=False, create=True, _date=self.date,
- _getcwd=self.getcwd, _print=out.append)
- self.assertEqual(e.exception.args[0], "Only give --create")
- with self.assertRaises(ValueError) as e:
- _run(u'inctestpkg', path=None, newversion=None, patch=False,
- rc=True, dev=False, create=True, _date=self.date,
- _getcwd=self.getcwd, _print=out.append)
- self.assertEqual(e.exception.args[0], "Only give --create")
- with self.assertRaises(ValueError) as e:
- _run(u'inctestpkg', path=None, newversion=None, patch=False,
- rc=False, dev=True, create=True, _date=self.date,
- _getcwd=self.getcwd, _print=out.append)
- self.assertEqual(e.exception.args[0], "Only give --create")
- def test_newversion(self):
- """
- `incremental.update package --newversion=1.2.3rc1dev3`, will set that
- version in the package.
- """
- out = []
- _run(u'inctestpkg', path=None, newversion="1.2.3rc1dev3", patch=False,
- rc=False, dev=False, create=False, _date=self.date,
- _getcwd=self.getcwd, _print=out.append)
- self.assertEqual(self.packagedir.child("_version.py").getContent(),
- b'''"""
- Provides inctestpkg version information.
- """
- # This file is auto-generated! Do not edit!
- # Use `python -m incremental.update inctestpkg` to change this file.
- from incremental import Version
- __version__ = Version('inctestpkg', 1, 2, 3, release_candidate=1, dev=3)
- __all__ = ["__version__"]
- ''')
- self.assertEqual(self.packagedir.child("__init__.py").getContent(),
- (b"""
- from incremental import Version
- introduced_in = Version('inctestpkg', 1, 2, 3, """
- b"""release_candidate=1, dev=3).short()
- next_released_version = "inctestpkg 1.2.3rc1dev3"
- """))
- def test_newversion_bare(self):
- """
- `incremental.update package --newversion=1`, will set that
- version in the package.
- """
- out = []
- _run(u'inctestpkg', path=None, newversion="1", patch=False,
- rc=False, dev=False, create=False, _date=self.date,
- _getcwd=self.getcwd, _print=out.append)
- self.assertEqual(self.packagedir.child("_version.py").getContent(),
- b'''"""
- Provides inctestpkg version information.
- """
- # This file is auto-generated! Do not edit!
- # Use `python -m incremental.update inctestpkg` to change this file.
- from incremental import Version
- __version__ = Version('inctestpkg', 1, 0, 0)
- __all__ = ["__version__"]
- ''')
- self.assertEqual(self.packagedir.child("__init__.py").getContent(),
- b"""
- from incremental import Version
- introduced_in = Version('inctestpkg', 1, 0, 0).short()
- next_released_version = "inctestpkg 1.0.0"
- """)
- class ScriptTests(TestCase):
- def setUp(self):
- self.srcdir = FilePath(self.mktemp())
- self.srcdir.makedirs()
- self.srcdir.child('src').makedirs()
- packagedir = self.srcdir.child('src').child('inctestpkg')
- packagedir.makedirs()
- packagedir.child('__init__.py').setContent(b"""
- from incremental import Version
- introduced_in = Version('inctestpkg', 'NEXT', 0, 0).short()
- next_released_version = "inctestpkg NEXT"
- """)
- packagedir.child('_version.py').setContent(b"""
- from incremental import Version
- __version__ = Version('inctestpkg', 1, 2, 3)
- __all__ = ["__version__"]
- """)
- self.getcwd = lambda: self.srcdir.path
- self.packagedir = packagedir
- class Date(object):
- year = 2016
- month = 8
- class DateModule(object):
- def today(self):
- return Date()
- self.date = DateModule()
- def test_run(self):
- """
- Calling run() with no args will cause it to print help.
- """
- stringio = NativeStringIO()
- self.patch(sys, 'stdout', stringio)
- with self.assertRaises(SystemExit) as e:
- run(["--help"])
- self.assertEqual(e.exception.args[0], 0)
- self.assertIn("Show this message and exit", stringio.getvalue())
- def test_insufficient_args(self):
- """
- Calling run() with no args will cause it to print help.
- """
- stringio = NativeStringIO()
- self.patch(sys, 'stdout', stringio)
- self.patch(os, 'getcwd', self.getcwd)
- self.patch(datetime, 'date', self.date)
- with self.assertRaises(SystemExit) as e:
- run(["inctestpkg", "--rc"])
- self.assertEqual(e.exception.args[0], 0)
- self.assertIn("Updating codebase", stringio.getvalue())
- self.assertEqual(self.packagedir.child("_version.py").getContent(),
- b'''"""
- Provides inctestpkg version information.
- """
- # This file is auto-generated! Do not edit!
- # Use `python -m incremental.update inctestpkg` to change this file.
- from incremental import Version
- __version__ = Version('inctestpkg', 16, 8, 0, release_candidate=1)
- __all__ = ["__version__"]
- ''')
- self.assertEqual(self.packagedir.child("__init__.py").getContent(),
- b"""
- from incremental import Version
- introduced_in = Version('inctestpkg', 16, 8, 0, release_candidate=1).short()
- next_released_version = "inctestpkg 16.8.0rc1"
- """)
|