Source code for aiida.cmdline.utils.test_multiline

# -*- coding: utf-8 -*-
###########################################################################
# Copyright (c), The AiiDA team. All rights reserved.                     #
# This file is part of the AiiDA code.                                    #
#                                                                         #
# The code is hosted on GitHub at https://github.com/aiidateam/aiida_core #
# For further information on the license, see the LICENSE.txt file        #
# For further information please visit http://www.aiida.net               #
###########################################################################
"""Unit tests for editing pre and post bash scripts, comments, etc."""
from __future__ import division
from __future__ import print_function
from __future__ import absolute_import
import os
import unittest

from click.testing import CliRunner

from aiida.cmdline.utils.multi_line_input import edit_pre_post, edit_comment


[docs]class TestMultilineInput(unittest.TestCase): """Test functions for editing pre and post bash scripts, comments, etc."""
[docs] def setUp(self): ## Sleep 1 is needed because on some filesystems (e.g. some pre 10.13 Mac) the ## filesystem returns the time with a precision of 1 second, and ## click uses the timestamp to decide if the file was re-saved or not. editor_cmd = 'sleep 1 ; vim -c "g!/^#=/s/$/Test" -cwq' # appends Test to # every line that does NOT start with '#=' characters os.environ['EDITOR'] = editor_cmd os.environ['VISUAL'] = editor_cmd self.runner = CliRunner()
[docs] def test_pre_post(self): result = edit_pre_post(summary={'Param 1': 'Value 1', 'Param 2': 'Value 1'}) self.assertEqual(result[0], 'Test\nTest\nTest') self.assertEqual(result[1], 'Test\nTest\nTest')
[docs] def test_edit_pre_post(self): result = edit_pre_post(pre='OldPre', post='OldPost') self.assertEqual(result[0], 'Test\nOldPreTest\nTest') self.assertEqual(result[1], 'Test\nOldPostTest\nTest')
[docs] def test_edit_pre_post_comment(self): """Test that lines starting with '#=' are ignored and are not ignored if they start with any other character""" result = edit_pre_post(pre='OldPre\n#=Delete me', post='OldPost #=Dont delete me') self.assertEqual(result[0], 'Test\nOldPreTest\nTest') self.assertEqual(result[1], 'Test\nOldPost #=Dont delete meTest\nTest')
[docs] def test_edit_pre_bash_comment(self): """Test that bash comments starting with '#' are NOT deleted""" result = edit_pre_post(pre='OldPre\n# Dont delete me', post='OldPost # Dont delete me') self.assertEqual(result[0], 'Test\nOldPreTest\n# Dont delete meTest\nTest') self.assertEqual(result[1], 'Test\nOldPost # Dont delete meTest\nTest')
[docs] def test_new_comment(self): new_comment = edit_comment() self.assertEqual(new_comment, 'Test')
[docs] def test_edit_comment(self): old_comment = 'OldComment' new_comment = edit_comment(old_cmt=old_comment) self.assertEqual(new_comment, old_comment + 'Test')