Skip to content

Commit

Permalink
Implement soft tab (#25)
Browse files Browse the repository at this point in the history
* Implement soft tab

* Remove named argument to support python 3.3
  • Loading branch information
Ahhhhmed committed Apr 30, 2018
1 parent 5a4bffb commit 75d1710
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 16 deletions.
2 changes: 1 addition & 1 deletion homotopy/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ def main():
homotopy = Homotopy(args.language)

if args.tabsize:
homotopy.set_indent(" "*args.tabsize)
homotopy.enable_soft_tab(args.tabsize)

if args.cursor:
homotopy.enable_cursor_marker()
Expand Down
25 changes: 19 additions & 6 deletions homotopy/homotopy.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@ def __init__(self, language):
:param language: Language
"""
self.user_path = []
self.indent = '\t'
self.soft_tab = False
self.soft_tab_size = 4
self.put_cursor_marker = False
self.language = language

Expand All @@ -34,13 +35,20 @@ def clear_user_lib(self):
"""
self.user_path.clear()

def set_indent(self, indent):
def enable_soft_tab(self, tab_size):
"""
Set indent sequence used for indentation instead of tab.
Enable soft tabs and set tab size.
:param indent: Indent sequence
:param tab_size: Tab size
"""
self.indent = indent
self.soft_tab = True
self.soft_tab_size = tab_size

def disable_soft_tab(self):
"""
Disable soft tabs.
"""
self.soft_tab = False

def enable_cursor_marker(self):
"""
Expand Down Expand Up @@ -87,4 +95,9 @@ def compile(self, snippet_text):
syntax_tree = parser_instance.parse(preprocessed_text)
compiled_snippet = compiler_instance.compile(syntax_tree)

return indent_manager_instance.indent_base(compiled_snippet)
result = indent_manager_instance.indent_base(compiled_snippet)

if self.soft_tab:
result = result.expandtabs(self.soft_tab_size)

return result
23 changes: 16 additions & 7 deletions test/testHomotopy.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@ def setUp(self):

def test_init(self):
self.assertEqual([], self.homotopy_instance.user_path)
self.assertEqual('\t', self.homotopy_instance.indent)
self.assertEqual(False, self.homotopy_instance.soft_tab)
self.assertEqual(4, self.homotopy_instance.soft_tab_size)
self.assertEqual(False, self.homotopy_instance.put_cursor_marker)
self.assertEqual("c++", self.homotopy_instance.language)

Expand All @@ -31,9 +32,15 @@ def test_clear_user_lib(self):
self.homotopy_instance.clear_user_lib()
self.assertEqual([], self.homotopy_instance.user_path)

def test_set_indent(self):
self.homotopy_instance.set_indent("test")
self.assertEqual("test", self.homotopy_instance.indent)
def test_enable_soft_tabs(self):
self.homotopy_instance.enable_soft_tab(2)
self.assertEqual(True, self.homotopy_instance.soft_tab)
self.assertEqual(2, self.homotopy_instance.soft_tab_size)

def test_disable_soft_tabs(self):
self.homotopy_instance.enable_soft_tab(2)
self.homotopy_instance.disable_soft_tab()
self.assertEqual(False, self.homotopy_instance.soft_tab)

def test_enable_cursor_marker(self):
self.homotopy_instance.enable_cursor_marker()
Expand Down Expand Up @@ -73,7 +80,7 @@ def test_compile(
mock_indent_manager_instance.indent_base = MagicMock(side_effect=lambda x: x)
mock_indent_manager.return_value = mock_indent_manager_instance
mock_provider.return_value = "mock_provider"
compile_method.return_value = "compile_method_output"
compile_method.return_value = "\tcompile_method_output"
compile_init.return_value = None
parser_parse.return_value = "parse_method_output"
parser_init.return_value = None
Expand All @@ -84,7 +91,9 @@ def test_compile(
self.homotopy_instance.enable_cursor_marker()
self.homotopy_instance.add_lib_folder("test_folder")

self.assertEqual("compile_method_output", self.homotopy_instance.compile("test_snippet"))
self.homotopy_instance.enable_soft_tab(1)

self.assertEqual(" compile_method_output", self.homotopy_instance.compile("test_snippet"))

mock_provider.assert_called_once_with("c++", ["test_folder", Homotopy.stdlib_path])
compile_method.assert_called_once_with("parse_method_output")
Expand All @@ -95,4 +104,4 @@ def test_compile(
preprocessor_expand_decorators.assert_called_once_with("test_snippet")
preprocessor_init.assert_called_once_with("mock_provider")
mock_indent_manager_instance.take_base_indent.assert_called_once_with("test_snippet")
mock_indent_manager_instance.indent_base.assert_called_once_with("compile_method_output")
mock_indent_manager_instance.indent_base.assert_called_once_with("\tcompile_method_output")
4 changes: 2 additions & 2 deletions test/testMain.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,11 @@ def test_main(self):
mock_compile.assert_called_once_with("invalid_snippet")

with patch("homotopy.Homotopy.compile", return_value="") as mock_compile:
with patch("homotopy.Homotopy.set_indent") as mock_set_indent:
with patch("homotopy.Homotopy.enable_soft_tab") as mock_enable_soft_tab:
with patch("sys.argv", ["testing", "-t", "3", "c++", "invalid_snippet"]):
homotopy.__main__.main()

mock_set_indent.assert_called_once_with(" ")
mock_enable_soft_tab.assert_called_once_with(3)
mock_compile.assert_called_once_with("invalid_snippet")

with patch("homotopy.Homotopy.compile", return_value="") as mock_compile:
Expand Down

0 comments on commit 75d1710

Please sign in to comment.