def test_command_line_replace(self): """Check simple replacement via command line.""" file_base_name = os.path.basename(self.file_name) massedit.command_line( [ "massedit.py", "-w", "-e", "re.sub('Dutch', 'Guido', line)", "-w", "-s", self.workspace.top_dir, file_base_name, ] ) with io.open(self.file_name, "r") as new_file: new_lines = new_file.readlines() original_lines = zen.splitlines(True) self.assertEqual(len(new_lines), len(original_lines)) n_lines = len(new_lines) for line in range(n_lines): if line != 16: self.assertEqual(new_lines[line - 1], original_lines[line - 1]) else: expected_line_16 = "Although that way may not be obvious " + "at first unless you're Guido.\n" self.assertEqual(new_lines[line - 1], expected_line_16)
def test_preserve_permissions(self): """Test that the exec bit is preserved when processing file.""" import stat def is_executable(file_name): """Check if the file has the exec bit set.""" return stat.S_IXUSR & os.stat(file_name)[stat.ST_MODE] > 0 self.assertFalse(is_executable(self.file_name)) mode = os.stat(self.file_name)[stat.ST_MODE] | stat.S_IEXEC # Windows supports READ and WRITE, but not EXEC bit. os.chmod(self.file_name, mode) self.assertTrue(is_executable(self.file_name)) file_base_name = os.path.basename(self.file_name) massedit.command_line( [ "massedit.py", "-w", "-e", "re.sub('Dutch', 'Guido', line)", "-w", "-s", self.workspace.top_dir, file_base_name, ] ) statinfo = os.stat(self.file_name) self.assertEqual(statinfo.st_mode, mode)
def test_command_line_replace(self): """Check simple replacement via command line.""" file_base_name = os.path.basename(self.file_name) massedit.command_line( [ "massedit.py", "-w", "-e", "re.sub('Dutch', 'Guido', line)", "-w", "-s", self.workspace.top_dir, file_base_name, ] ) with io.open(self.file_name, "r") as new_file: new_lines = new_file.readlines() original_lines = zen.splitlines(True) self.assertEqual(len(new_lines), len(original_lines)) n_lines = len(new_lines) for line in range(n_lines): if line != 16: self.assertEqual(new_lines[line - 1], original_lines[line - 1]) else: expected_line_16 = ( "Although that way may not be obvious " + "at first unless you're Guido.\n" ) self.assertEqual(new_lines[line - 1], expected_line_16)
def test_process_subdirectory(self): """Check that the editor works correctly in subdirectories.""" arguments = ["-r", "-s", self.workspace.top_dir, "-w", "-e", "re.sub('text', 'blah blah', line)", "*.txt"] processed_files = massedit.command_line(arguments) self.assertEqual(processed_files, [self.file_name]) with io.open(self.file_name) as fh: new_lines = fh.readlines() self.assertEqual(new_lines, ["some blah blah"])
def test_maxdepth_one(self): """Check that specifying -m 1 prevents modifiction to subdir.""" arguments = ['-r', '-s', self.directory, '-i', '-e', "re.sub('text', 'blah blah', line)", '-m', '0', '*.txt'] processed_files = massedit.command_line(arguments) self.assertEqual(processed_files, []) with open(self.file_name) as fh: new_lines = fh.readlines() self.assertEqual(new_lines, ['some text'])
def test_process_subdirectory(self): """Check that the editor works correctly in subdirectories.""" arguments = ['-r', '-s', self.directory, '-i', '-e', "re.sub('text', 'blah blah', line)", '*.txt'] processed_files = massedit.command_line(arguments) self.assertEqual(processed_files, [self.file_name]) with open(self.file_name) as fh: new_lines = fh.readlines() self.assertEqual(new_lines, ['some blah blah'])
def test_maxdepth_one(self): """Check that specifying -m 1 prevents modifiction to subdir.""" arguments = ["-r", "-s", self.workspace.top_dir, "-w", "-e", "re.sub('text', 'blah blah', line)", "-m", "0", "*.txt"] processed_files = massedit.command_line(arguments) self.assertEqual(processed_files, []) with io.open(self.file_name) as fh: new_lines = fh.readlines() self.assertEqual(new_lines, ["some text"])
def test_maxdepth_one(self): """Checks that specifying -m 1 prevents modifiction to subdir.""" arguments = ["-r", "-s", self.directory, "-w", "-e", "re.sub('text', 'blah blah', line)", "-m", "0", "*.txt"] processed_files = massedit.command_line(arguments) self.assertEqual(processed_files, []) with open(self.file_name) as fh: new_lines = fh.readlines() self.assertEqual(new_lines, ["some text"])
def test_maxdepth_one(self): """Check that specifying -m 1 prevents modifiction to subdir.""" arguments = ["-r", "-s", self.workspace.top_dir, "-w", "-e", "re.sub('text', 'blah blah', line)", "-m", "0", "*.txt"] processed_files = massedit.command_line(arguments) self.assertEqual(processed_files, []) for ii, file_name in enumerate(self.file_names): with io.open(file_name) as fh: new_lines = fh.readlines() self.assertEqual(new_lines, ["some text " + unicode(ii)])
def test_command_line_replace(self): """Check simple replacement via command line.""" file_base_name = os.path.basename(self.file_name) massedit.command_line(['massedit.py', '-i', '-e', "re.sub('Dutch', 'Guido', line)", '-i', '-s', self.start_directory, file_base_name]) with open(self.file_name, 'r') as new_file: new_lines = new_file.readlines() original_lines = self.text.splitlines(True) self.assertEqual(len(new_lines), len(original_lines)) n_lines = len(new_lines) for line in range(n_lines): if line != 16: self.assertEqual(new_lines[line - 1], original_lines[line - 1]) else: expected_line_16 = \ 'Although that way may not be obvious ' + \ "at first unless you're Guido.\n" self.assertEqual(new_lines[line - 1], expected_line_16)
def test_absolute_path_arg(self): """Check dry run via command line with single file name argument.""" out_file_name = self.workspace.get_file() arguments = ["massedit.py", "-e", "re.sub('Dutch', 'Guido', line)", "-o", out_file_name, self.file_name] processed = massedit.command_line(arguments) self.assertEqual(processed, [os.path.abspath(self.file_name)]) with io.open(self.file_name, "r") as updated_file: new_lines = updated_file.readlines() original_lines = zen.splitlines(True) self.assertEqual(original_lines, new_lines) self.assertTrue(os.path.exists(out_file_name)) os.unlink(out_file_name)
def test_absolute_path_arg(self): """Check dry run via command line with single file name argument.""" out_file_name = tempfile.mktemp() arguments = ['massedit.py', '-e', "re.sub('Dutch', 'Guido', line)", '-o', out_file_name, self.file_name] processed = massedit.command_line(arguments) self.assertEqual(processed, [os.path.abspath(self.file_name)]) with open(self.file_name, 'r') as updated_file: new_lines = updated_file.readlines() original_lines = self.text.splitlines(True) self.assertEqual(original_lines, new_lines) self.assertTrue(os.path.exists(out_file_name)) os.unlink(out_file_name)
def test_command_line_check(self): """Check dry run via command line with start directory option.""" out_file_name = tempfile.mktemp() basename = os.path.basename(self.file_name) arguments = ['test', '-e', "re.sub('Dutch', 'Guido', line)", '-o', out_file_name, '-s', self.start_directory, basename] processed = massedit.command_line(arguments) self.assertEqual(processed, [os.path.abspath(self.file_name)]) with open(self.file_name, 'r') as updated_file: new_lines = updated_file.readlines() original_lines = self.text.splitlines(True) self.assertEqual(original_lines, new_lines) self.assertTrue(os.path.exists(out_file_name)) os.unlink(out_file_name)
def test_command_line_check(self): """Check dry run via command line with start workspace option.""" out_file_name = self.workspace.get_file() basename = os.path.basename(self.file_name) arguments = ["test", "-e", "re.sub('Dutch', 'Guido', line)", "-o", out_file_name, "-s", self.workspace.top_dir, basename] processed = massedit.command_line(arguments) self.assertEqual(processed, [os.path.abspath(self.file_name)]) with io.open(self.file_name, "r") as updated_file: new_lines = updated_file.readlines() original_lines = zen.splitlines(True) self.assertEqual(original_lines, new_lines) self.assertTrue(os.path.exists(out_file_name)) os.unlink(out_file_name)
def test_process_subdirectory(self): """Check that the editor works correctly in subdirectories.""" arguments = [ "-r", "-s", self.workspace.top_dir, "-w", "-e", "re.sub('text', 'blah blah', line)", "*.txt", ] processed_files = massedit.command_line(arguments) self.assertEqual(sorted(processed_files), sorted(self.file_names)) for ii, file_name in enumerate(self.file_names): with io.open(file_name) as fh: new_lines = fh.readlines() self.assertEqual(new_lines, ["some blah blah " + unicode(ii)])
def test_generate_fixer(self, mock_open): """Generate a fixer template file with --generate option.""" cmd = 'massedit.py --generate fixer.py' massedit.command_line(cmd.split()) mock_open.assert_called_with('fixer.py', 'w+') mock_open().write.assert_called_with(massedit.fixer_template)
def test_from_stdin(self, stdout_, _): """A simple dash reads input test from stdin.""" # Note that double quotes will be interpreted by Python below. cmd = """massedit.py -e line.replace("text","test") -w -""" massedit.command_line(cmd.split()) self.assertEqual("some example test", stdout_.getvalue())