From 13f8e668dc00c459f77bab1a9170195b053a6101 Mon Sep 17 00:00:00 2001 From: Manuel Ebert Date: Fri, 19 Jul 2013 12:44:39 +0200 Subject: [PATCH] Mock stdin --- features/core.feature | 9 ++++++++- features/steps/core.py | 33 ++++++++++++++++++++++++++++++--- jrnl/jrnl.py | 2 -- jrnl/util.py | 10 +++++----- tests/test_jrnl.py | 33 --------------------------------- 5 files changed, 43 insertions(+), 44 deletions(-) delete mode 100644 tests/test_jrnl.py diff --git a/features/core.feature b/features/core.feature index b56c2f4a..7e495ef9 100644 --- a/features/core.feature +++ b/features/core.feature @@ -4,7 +4,7 @@ Feature: Basic reading and writing to a journal Given we use the config "basic.json" When we run "jrnl -n 2" Then we should get no error - And the output should be + and the output should be """ 2013-06-09 15:39 My first entry. | Everything is alright @@ -27,3 +27,10 @@ Feature: Basic reading and writing to a journal When we run "jrnl -n 1" Then the output should contain "🌞" and the output should contain "🐘" + + Scenario: Writing an entry at the prompt + Given we use the config "basic.json" + When we run "jrnl" and enter "25 jul 2013: I saw Elvis. He's alive." + Then we should get no error + and the journal should contain "2013-07-25 09:00 I saw Elvis." + and the journal should contain "He's alive." diff --git a/features/steps/core.py b/features/steps/core.py index a4fa5c55..5687e3c9 100644 --- a/features/steps/core.py +++ b/features/steps/core.py @@ -1,16 +1,36 @@ from behave import * -from jrnl import Journal, jrnl +from jrnl import jrnl import os +import sys +import json +import StringIO + +def read_journal(journal_name="default"): + with open(jrnl.CONFIG_PATH) as config_file: + config = json.load(config_file) + with open(config['journals'][journal_name]) as journal_file: + journal = journal_file.read() + return journal @given('we use the config "{config_file}"') def set_config(context, config_file): full_path = os.path.join("features/configs", config_file) jrnl.CONFIG_PATH = os.path.abspath(full_path) +@when('we run "{command}" and enter') +@when('we run "{command}" and enter "{inputs}"') +def run_with_input(context, command, inputs=None): + text = inputs or context.text + args = command.split()[1:] + buffer = StringIO.StringIO(text.strip()) + jrnl.util.STDIN = buffer + jrnl.cli(args) + @when('we run "{command}"') def run(context, command): args = command.split()[1:] - jrnl.cli(args) + jrnl.cli(args or None) + @then('we should get no error') def no_error(context): @@ -24,7 +44,14 @@ def check_output(context): assert line_text.strip() == line_out.strip() @then('the output should contain "{text}"') -def check_output(context, text): +def check_output_inline(context, text): out = context.stdout_capture.getvalue() print out assert text in out + +@then('the journal should contain "{text}"') +@then('journal {journal_name} should contain "{text}"') +def check_journal_content(context, text, journal_name="default"): + journal = read_journal(journal_name) + assert text in journal + diff --git a/jrnl/jrnl.py b/jrnl/jrnl.py index 45df7a9c..3eba8700 100755 --- a/jrnl/jrnl.py +++ b/jrnl/jrnl.py @@ -149,8 +149,6 @@ def cli(manual_args=None): mode_compose, mode_export = guess_mode(args, config) # open journal file or folder - - if os.path.isdir(config['journal']) and ( config['journal'].endswith(".dayone") or \ config['journal'].endswith(".dayone/")): journal = Journal.DayOne(**config) diff --git a/jrnl/util.py b/jrnl/util.py index 9ed4e1f6..5f7f0c52 100644 --- a/jrnl/util.py +++ b/jrnl/util.py @@ -4,14 +4,14 @@ import sys import os from tzlocal import get_localzone +STDIN = sys.stdin +STDOUT = sys.stdout + __cached_tz = None def py23_input(msg): - if sys.version_info[0] == 3: - try: return input(msg) - except SyntaxError: return "" - else: - return raw_input(msg) + STDOUT.write(msg) + return STDIN.readline().strip() def get_local_timezone(): """Returns the Olson identifier of the local timezone. diff --git a/tests/test_jrnl.py b/tests/test_jrnl.py deleted file mode 100644 index 8280fe6e..00000000 --- a/tests/test_jrnl.py +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env python -# encoding: utf-8 - -import unittest - -class TestClasses(unittest.TestCase): - """Test the behavior of the classes. - - tests related to the Journal and the Entry Classes which can - be tested withouth command-line interaction - """ - - def setUp(self): - pass - - def test_colon_in_textbody(self): - """colons should not cause problems in the text body""" - pass - - -class TestCLI(unittest.TestCase): - """test the command-line interaction part of the program""" - - def setUp(self): - pass - - def test_something(self): - """first test""" - pass - - -if __name__ == '__main__': - unittest.main()