Skip to content

Commit

Permalink
Merge pull request #744 from alichtman/exit-after-no-text-entry
Browse files Browse the repository at this point in the history
Exit jrnl if no text entered into editor
  • Loading branch information
wren authored Nov 19, 2019
2 parents 03e8723 + 7fbb5db commit 0bd94c7
Show file tree
Hide file tree
Showing 4 changed files with 53 additions and 3 deletions.
13 changes: 13 additions & 0 deletions features/core.feature
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,19 @@ Feature: Basic reading and writing to a journal
When we run "jrnl -n 1"
Then the output should contain "2013-07-23 09:00 A cold and stormy day."

Scenario: Writing an empty entry from the editor
Given we use the config "editor.yaml"
When we open the editor and enter ""
Then we should see the message "[Nothing saved to file]"

Scenario: Writing an empty entry from the command line
Given we use the config "basic.yaml"
When we run "jrnl" and enter ""
Then the output should be
"""
"""

Scenario: Filtering for dates
Given we use the config "basic.yaml"
When we run "jrnl -on 2013-06-10 --short"
Expand Down
12 changes: 12 additions & 0 deletions features/data/configs/editor.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
default_hour: 9
default_minute: 0
editor: "vim"
encrypt: false
highlight: true
journals:
default: features/journals/simple.journal
linewrap: 80
tagsymbols: "@"
template: false
timeformat: "%Y-%m-%d %H:%M"
indent_character: "|"
27 changes: 26 additions & 1 deletion features/steps/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ def get_password(self, servicename, username):
def delete_password(self, servicename, username, password):
self.keys[servicename][username] = None


# set the keyring for keyring lib
keyring.set_keyring(TestKeyring())

Expand Down Expand Up @@ -66,6 +67,24 @@ def set_config(context, config_file):
cf.write("version: {}".format(__version__))


@when('we open the editor and enter ""')
@when('we open the editor and enter "{text}"')
def open_editor_and_enter(context, text=""):
text = (text or context.text)
def _mock_editor_function(command):
tmpfile = command[-1]
with open(tmpfile, "w+") as f:
if text is not None:
f.write(text)
else:
f.write("")

return tmpfile

with patch('subprocess.call', side_effect=_mock_editor_function):
run(context, "jrnl")


def _mock_getpass(inputs):
def prompt_return(prompt="Password: "):
print(prompt)
Expand All @@ -82,12 +101,18 @@ def prompt_return(prompt=""):


@when('we run "{command}" and enter')
@when('we run "{command}" and enter ""')
@when('we run "{command}" and enter "{inputs1}"')
@when('we run "{command}" and enter "{inputs1}" and "{inputs2}"')
def run_with_input(context, command, inputs1="", inputs2=""):
# create an iterator through all inputs. These inputs will be fed one by one
# to the mocked calls for 'input()', 'util.getpass()' and 'sys.stdin.read()'
text = iter((inputs1, inputs2)) if inputs1 else iter(context.text.split("\n"))
if inputs1:
text = iter((inputs1, inputs2))
elif context.text:
text = iter(context.text.split("\n"))
else:
text = iter(("", ""))
args = ushlex(command)[1:]
with patch("builtins.input", side_effect=_mock_input(text)) as mock_input:
with patch("jrnl.util.getpass", side_effect=_mock_getpass(text)) as mock_getpass:
Expand Down
4 changes: 2 additions & 2 deletions jrnl/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,7 @@ def run(manual_args=None):

log.debug('Using journal "%s"', journal_name)
mode_compose, mode_export, mode_import = guess_mode(args, config)

# How to quit writing?
if "win32" in sys.platform:
_exit_multiline_code = "on a blank line, press Ctrl+Z and then Enter"
Expand Down Expand Up @@ -206,7 +206,7 @@ def run(manual_args=None):
if raw:
args.text = [raw]
else:
mode_compose = False
sys.exit()

# This is where we finally open the journal!
try:
Expand Down

0 comments on commit 0bd94c7

Please sign in to comment.