cheat/tests/tests.py

71 lines
2.9 KiB
Python

import os
import sys
from StringIO import StringIO
from mock import patch
from nose.tools import assert_equals, assert_true, assert_false, assert_raises
class TestCheatSheets(object):
def setUp(self):
self.cheatpath = os.path.join(
os.path.dirname(__file__), '.cheats')
os.environ['CHEATPATH'] = self.cheatpath
os.environ['DEFAULT_CHEAT_DIR'] = ''
import imp
self.cheat = imp.load_source('cheat', './cheat')
self.cheatsheets = self.cheat.CheatSheets()
# Change stdout for testing.
# It would be preferable to make CheatSheets more testable.
self.out = StringIO()
sys.stdout = self.out
assert_true(self.cheatpath in self.cheatsheets.dirs)
def test_display_foobar_cheat_sheet(self):
# There should be a testing cheatsheet called '-test-foobar'.
cheatfile = '-test-foobar'
expected = 'binbat'
cheatfile_path = os.path.join(self.cheatpath, cheatfile)
assert_true(os.path.exists(cheatfile_path))
# The content of '-test-foobar' should start with 'binbat'.
# CheatSheets.display_sheet() may add extra "pretty" formatting, so
# for this test, we only care that only the first set of characters
# match.
assert_equals(None, self.cheatsheets.display_sheet(cheatfile))
assert_equals(expected, self.out.getvalue()[0:len(expected)])
assert_true(cheatfile in self.cheatsheets.sheets)
def test_display_missing_cheat_sheet_file(self):
cheatfile = '-test-missing_file'
cheatfile_path = os.path.join(self.cheatpath, cheatfile)
# Verify that test file is indeed missing.
assert_false(os.path.exists(cheatfile_path))
# Verify that missing cheatfile is not in our cheatsheet.sheets.
assert_false(cheatfile in self.cheatsheets.sheets)
with assert_raises(KeyError):
self.cheatsheets.display_sheet(cheatfile)
@patch('cheat.CheatSheets.vim_view', return_value=None)
def test_vim_view_call(self, vim_view):
cheatfile = '-test-vim_crypted'
cheatfile_path = os.path.join(self.cheatpath, cheatfile)
assert_true(os.path.exists(cheatfile_path))
assert_true(self.cheatsheets.is_vim_crypted(cheatfile_path))
assert_false(vim_view.called)
self.cheatsheets.display_sheet(cheatfile)
vim_view.assert_called_with(cheatfile_path)
def test_is_vim_crypted(self):
# This test file is clear text.
clear_cheatfile = '-test-foobar'
clear_cheatfile_path = os.path.join(self.cheatpath, clear_cheatfile)
assert_false(self.cheatsheets.is_vim_crypted(clear_cheatfile_path))
# This file is "Vim Encrypted" with the pass phrase "passphrase".
vimcrypted_cheatfile = '-test-vim_crypted'
vimcrypted_cheatfile_path = os.path.join(
self.cheatpath, vimcrypted_cheatfile)
assert_true(self.cheatsheets.is_vim_crypted(vimcrypted_cheatfile_path))