Skip to content

Commit

Permalink
changed Model.path handling a bit, first behavioral test
Browse files Browse the repository at this point in the history
  • Loading branch information
KenjiTakahashi committed Feb 20, 2013
1 parent 3f86329 commit 05aad46
Show file tree
Hide file tree
Showing 6 changed files with 73 additions and 27 deletions.
4 changes: 2 additions & 2 deletions td/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -152,13 +152,13 @@ def initAdd(self, subparsers):
add.add_argument('-c', '--comment')
add.set_defaults(func=self.add)

def initEdit(self):
def initEdit(self, subparsers):
"""Initializes e(dit) cli arguments.
:subparsers: Argparse subparser to attach to.
"""
edit = self.subparsers.add_parser(
edit = subparsers.add_parser(
'e', aliases=['edit'],
help="edit existing item (also used for reparenting)"
)
Expand Down
29 changes: 13 additions & 16 deletions td/model.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,15 +72,14 @@ def _build(subtree):
def load(func):
"""@decorator: Loads data before executing :func:."""
def aux(self, *args, **kwargs):
path = hasattr(self, 'path') and self.path or os.getcwd()
if hasattr(self, 'gpath'):
gpath = self.gpath
else:
gpath = os.path.expanduser('~/.tdrc')
path = (hasattr(self, 'path') and self.path
or os.path.join(os.getcwd(), '.td'))
gpath = (hasattr(self, 'gpath') and self.gpath
or os.path.expanduser('~/.tdrc'))
try:
data = json.loads(open(os.path.join(path, '.td')).read())
data = json.loads(open(path).read())
except IOError:
data = devtodo(path)
data = devtodo(os.path.dirname(path))
if data is not None:
self[:] = data
self.refs = dict()
Expand All @@ -105,20 +104,18 @@ def save(func):
"""
def aux(self, *args, **kwargs):
out = func(self, *args, **kwargs)
path = hasattr(self, 'path') and self.path or os.getcwd()
npath = os.path.join(path, '.td')
if hasattr(self, 'gpath'):
gpath = self.gpath
else:
gpath = os.path.expanduser('~/.tdrc')
if os.path.exists(npath):
shutil.copy2(npath, os.path.join(path, '.td~'))
path = (hasattr(self, 'path') and self.path
or os.path.join(os.getcwd(), '.td'))
gpath = (hasattr(self, 'gpath') and self.gpath
or os.path.expanduser('~/.tdrc'))
if os.path.exists(path):
shutil.copy2(path, os.path.join(os.path.dirname(path), '.td~'))
self.data = self._modifyInternal(
sort=self.options.get('sort') or self.globalOptions.get('sort'),
purge=self.options.get('purge') or self.globalOptions.get('purge'),
done=self.options.get('done') or self.globalOptions.get('done')
)
open(npath, 'w').write(
open(path, 'w').write(
json.dumps({
'items': self.data,
'refs': self.refs,
Expand Down
1 change: 1 addition & 0 deletions tests/data/tdtest1
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"items": [["test", 3, "", false, []]], "refs": {}, "options": {}}
21 changes: 21 additions & 0 deletions tests/mocks.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@


import logging
import sys
from io import StringIO


class HandlerMock(logging.Handler):
Expand All @@ -30,3 +32,22 @@ def emit(self, record):

def assertLogged(self, message):
assert self.message == message


class StdoutMock(object):
def __init__(self):
sys.stdout = StringIO()
self.argv = sys.argv

def undo(self):
sys.argv = self.argv
sys.stdout = sys.__stdout__

def resetArgv(self):
sys.argv = ['td']

def setArgv(self, *args):
sys.argv.extend(*args)

def assertEqual(self, msg):
assert msg == sys.stdout.getvalue()
31 changes: 29 additions & 2 deletions tests/test_main.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,11 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.


from tests.mocks import HandlerMock
from td.main import Arg
import os
import colorama
from tests.mocks import HandlerMock, StdoutMock
from td.main import Arg, run
from td.model import Model


class Test_getPattern(object):
Expand Down Expand Up @@ -88,3 +91,27 @@ def test_passing_too_much_data(self):
def test_passing_invalid_index_name_with_done(self):
self.arg._getPattern("nema=.*", done=True)
self.handler.assertLogged('Invalid field name: nema')

def test_empty_should_stay_empty(self):
result = self.arg._getPattern(None)
assert result is None


class TestBehaviour(object):
def setUp(self):
self.mock = StdoutMock()
Model.path = os.path.join(os.getcwd(), 'tests', 'data', 'tdtest1')

def tearDown(self):
self.mock.undo()

def test_display_whole_list(self):
self.mock.resetArgv()
run()
result = "{}{}{}{}{}{}\n".format(
colorama.Style.RESET_ALL,
colorama.Fore.WHITE,
colorama.Style.BRIGHT,
1, '.', 'test'
)
self.mock.assertEqual(result)
14 changes: 7 additions & 7 deletions tests/test_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,13 +26,14 @@ class ModelTest(object):
def setUp(self):
self.model = Model()
path = os.path.join(os.getcwd(), 'tests')
self.model.setPath(path)
self.model.setPath(os.path.join(path, '.td'))
self.model.gpath = os.path.join(path, '.tdrc')
self.tmppath = os.path.join(path, '.td~')

def tearDown(self):
try:
os.remove(os.path.join(self.model.path, '.td'))
os.remove(os.path.join(self.model.path, '.td~'))
os.remove(self.model.path)
os.remove(self.tmppath)
os.remove(self.model.gpath)
except OSError:
pass
Expand All @@ -42,9 +43,8 @@ class TestBackup(ModelTest):
def test_should_create_backup_when_file_exists(self):
self.model.add("testname1")
self.model.add("testname2")
path = os.path.join(self.model.path, '.td~')
assert os.path.exists(path)
assert json.loads(open(path).read()) == {
assert os.path.exists(self.tmppath)
assert json.loads(open(self.tmppath).read()) == {
'items': [["testname1", 3, "", False, []]],
'refs': {},
'options': {}
Expand Down Expand Up @@ -426,7 +426,7 @@ def setUp(self):

def getNewModel(self):
model = Model()
model.setPath(os.path.join(os.getcwd(), 'tests'))
model.setPath(os.path.join(os.getcwd(), 'tests', '.td'))
return model

def test_sort(self):
Expand Down

0 comments on commit 05aad46

Please sign in to comment.