forked from pool/python-eradicate
Accepting request 1112072 from devel:languages:python
- update to 2.3.0: * This is the last release with Python2 support: * True Windows support * New console script OBS-URL: https://build.opensuse.org/request/show/1112072 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python-eradicate?expand=0&rev=5
This commit is contained in:
@@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:aac7384ab25b1bf21c4c012de9b4bf8398945a14c98c911545b2ea50ab558014
|
||||
size 6007
|
||||
3
eradicate-2.3.0.tar.gz
Normal file
3
eradicate-2.3.0.tar.gz
Normal file
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:06df115be3b87d0fc1c483db22a2ebb12bcf40585722810d809cc770f5031c37
|
||||
size 8536
|
||||
@@ -1,3 +1,11 @@
|
||||
-------------------------------------------------------------------
|
||||
Mon Sep 18 19:58:36 UTC 2023 - Dirk Müller <dmueller@suse.com>
|
||||
|
||||
- update to 2.3.0:
|
||||
* This is the last release with Python2 support:
|
||||
* True Windows support
|
||||
* New console script
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Tue Jun 13 09:06:31 UTC 2023 - ecsos <ecsos@opensuse.org>
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#
|
||||
# spec file for package python-eradicate
|
||||
#
|
||||
# Copyright (c) 2022 SUSE LLC
|
||||
# Copyright (c) 2023 SUSE LLC
|
||||
#
|
||||
# All modifications and additions to the file contributed by third parties
|
||||
# remain the property of their copyright owners, unless otherwise agreed
|
||||
@@ -18,14 +18,13 @@
|
||||
|
||||
%{?sle15_python_module_pythons}
|
||||
Name: python-eradicate
|
||||
Version: 2.1.0
|
||||
Version: 2.3.0
|
||||
Release: 0
|
||||
Summary: Python utility for removing commented-out code
|
||||
License: MIT
|
||||
Group: Development/Languages/Python
|
||||
URL: https://github.com/myint/eradicate
|
||||
Source: https://files.pythonhosted.org/packages/source/e/eradicate/eradicate-%{version}.tar.gz
|
||||
Source1: https://raw.githubusercontent.com/myint/eradicate/v%{version}/test_eradicate.py
|
||||
BuildRequires: %{python_module setuptools}
|
||||
BuildRequires: fdupes
|
||||
BuildRequires: python-rpm-macros
|
||||
@@ -44,7 +43,6 @@ which is valid Python syntax, but is probably not code.)
|
||||
|
||||
%prep
|
||||
%setup -q -n eradicate-%{version}
|
||||
cp %{SOURCE1} .
|
||||
|
||||
%build
|
||||
%python_build
|
||||
|
||||
@@ -1,598 +0,0 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
"""Test suite for eradicate."""
|
||||
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import contextlib
|
||||
import io
|
||||
import subprocess
|
||||
import sys
|
||||
import tempfile
|
||||
import unittest
|
||||
try: # pragma: no cover
|
||||
import mock
|
||||
except ModuleNotFoundError: # pragma: no cover
|
||||
import unittest.mock as mock
|
||||
import re
|
||||
|
||||
import eradicate
|
||||
|
||||
|
||||
class UnitTests(unittest.TestCase):
|
||||
|
||||
def test_comment_contains_code(self):
|
||||
self.assertFalse(eradicate.Eradicator().comment_contains_code(
|
||||
'#'))
|
||||
|
||||
self.assertFalse(eradicate.Eradicator().comment_contains_code(
|
||||
'# This is a (real) comment.'))
|
||||
|
||||
self.assertFalse(eradicate.Eradicator().comment_contains_code(
|
||||
'# 123'))
|
||||
|
||||
self.assertFalse(eradicate.Eradicator().comment_contains_code(
|
||||
'# 123.1'))
|
||||
|
||||
self.assertFalse(eradicate.Eradicator().comment_contains_code(
|
||||
'# 1, 2, 3'))
|
||||
|
||||
self.assertFalse(eradicate.Eradicator().comment_contains_code(
|
||||
'x = 1 # x = 1'))
|
||||
|
||||
self.assertFalse(eradicate.Eradicator().comment_contains_code(
|
||||
'# pylint: disable=redefined-outer-name'))
|
||||
|
||||
self.assertFalse(eradicate.Eradicator().comment_contains_code(
|
||||
'# Issue #999: This is not code'))
|
||||
|
||||
self.assertTrue(eradicate.Eradicator().comment_contains_code(
|
||||
'# x = 1'))
|
||||
|
||||
self.assertTrue(eradicate.Eradicator().comment_contains_code(
|
||||
'#from foo import eradicate'))
|
||||
|
||||
self.assertTrue(eradicate.Eradicator().comment_contains_code(
|
||||
'#import eradicate'))
|
||||
|
||||
self.assertTrue(eradicate.Eradicator().comment_contains_code(
|
||||
'#"key": value,'))
|
||||
|
||||
self.assertTrue(eradicate.Eradicator().comment_contains_code(
|
||||
'#"key": "value",'))
|
||||
|
||||
self.assertTrue(eradicate.Eradicator().comment_contains_code(
|
||||
'#"key": 1 + 1,'))
|
||||
|
||||
self.assertTrue(eradicate.Eradicator().comment_contains_code(
|
||||
"#'key': 1 + 1,"))
|
||||
|
||||
self.assertTrue(eradicate.Eradicator().comment_contains_code(
|
||||
'#"key": {'))
|
||||
|
||||
self.assertTrue(eradicate.Eradicator().comment_contains_code(
|
||||
'#}'))
|
||||
|
||||
self.assertTrue(eradicate.Eradicator().comment_contains_code(
|
||||
'#} )]'))
|
||||
|
||||
self.assertTrue(eradicate.Eradicator().comment_contains_code(
|
||||
'#},'))
|
||||
|
||||
def test_comment_contains_code_with_print(self):
|
||||
self.assertTrue(eradicate.Eradicator().comment_contains_code(
|
||||
'#print'))
|
||||
|
||||
self.assertTrue(eradicate.Eradicator().comment_contains_code(
|
||||
'#print(1)'))
|
||||
|
||||
self.assertTrue(eradicate.Eradicator().comment_contains_code(
|
||||
'#print 1'))
|
||||
|
||||
self.assertFalse(eradicate.Eradicator().comment_contains_code(
|
||||
'#to print'))
|
||||
|
||||
def test_comment_contains_code_with_return(self):
|
||||
self.assertTrue(eradicate.Eradicator().comment_contains_code(
|
||||
'#return x'))
|
||||
|
||||
self.assertFalse(eradicate.Eradicator().comment_contains_code(
|
||||
'#to return'))
|
||||
|
||||
def test_comment_contains_code_with_multi_line(self):
|
||||
self.assertTrue(eradicate.Eradicator().comment_contains_code(
|
||||
'#def foo():'))
|
||||
|
||||
self.assertTrue(eradicate.Eradicator().comment_contains_code(
|
||||
'#else:'))
|
||||
|
||||
self.assertTrue(eradicate.Eradicator().comment_contains_code(
|
||||
'# else : '))
|
||||
|
||||
self.assertTrue(eradicate.Eradicator().comment_contains_code(
|
||||
'# "foo %d" % \\'))
|
||||
|
||||
self.assertTrue(eradicate.Eradicator().comment_contains_code(
|
||||
'#elif True:'))
|
||||
|
||||
self.assertTrue(eradicate.Eradicator().comment_contains_code(
|
||||
'#x = foo('))
|
||||
|
||||
self.assertTrue(eradicate.Eradicator().comment_contains_code(
|
||||
'#except Exception:'))
|
||||
|
||||
self.assertFalse(eradicate.Eradicator().comment_contains_code(
|
||||
'# this is = to that :('))
|
||||
|
||||
self.assertFalse(eradicate.Eradicator().comment_contains_code(
|
||||
'#else'))
|
||||
|
||||
self.assertFalse(eradicate.Eradicator().comment_contains_code(
|
||||
'#or else:'))
|
||||
|
||||
self.assertFalse(eradicate.Eradicator().comment_contains_code(
|
||||
'#else True:'))
|
||||
|
||||
def test_comment_contains_code_with_sentences(self):
|
||||
self.assertFalse(eradicate.Eradicator().comment_contains_code(
|
||||
'#code is good'))
|
||||
|
||||
def test_comment_contains_code_with_encoding(self):
|
||||
self.assertFalse(eradicate.Eradicator().comment_contains_code(
|
||||
'# coding=utf-8'))
|
||||
|
||||
self.assertFalse(eradicate.Eradicator().comment_contains_code(
|
||||
'#coding= utf-8'))
|
||||
|
||||
self.assertFalse(eradicate.Eradicator().comment_contains_code(
|
||||
'# coding: utf-8'))
|
||||
|
||||
self.assertFalse(eradicate.Eradicator().comment_contains_code(
|
||||
'# encoding: utf8'))
|
||||
|
||||
self.assertTrue(eradicate.Eradicator().comment_contains_code(
|
||||
'# codings=utf-8'))
|
||||
|
||||
def test_comment_contains_code_with_default_whitelist(self):
|
||||
self.assertFalse(eradicate.Eradicator().comment_contains_code(
|
||||
'# pylint: disable=A0123'))
|
||||
|
||||
self.assertFalse(eradicate.Eradicator().comment_contains_code(
|
||||
'# pylint:disable=A0123'))
|
||||
|
||||
self.assertFalse(eradicate.Eradicator().comment_contains_code(
|
||||
'# pylint: disable = A0123'))
|
||||
|
||||
self.assertFalse(eradicate.Eradicator().comment_contains_code(
|
||||
'# pylint:disable = A0123'))
|
||||
|
||||
self.assertFalse(eradicate.Eradicator().comment_contains_code(
|
||||
'# pyright: reportErrorName=true'))
|
||||
|
||||
self.assertFalse(eradicate.Eradicator().comment_contains_code(
|
||||
'# noqa'))
|
||||
|
||||
self.assertFalse(eradicate.Eradicator().comment_contains_code(
|
||||
'# NOQA'))
|
||||
|
||||
self.assertFalse(eradicate.Eradicator().comment_contains_code(
|
||||
'# noqa: A123'))
|
||||
|
||||
self.assertFalse(eradicate.Eradicator().comment_contains_code(
|
||||
'# noqa:A123'))
|
||||
|
||||
self.assertFalse(eradicate.Eradicator().comment_contains_code(
|
||||
'# nosec'))
|
||||
|
||||
self.assertFalse(eradicate.Eradicator().comment_contains_code(
|
||||
'# fmt: on'))
|
||||
|
||||
self.assertFalse(eradicate.Eradicator().comment_contains_code(
|
||||
'# fmt: off'))
|
||||
|
||||
self.assertFalse(eradicate.Eradicator().comment_contains_code(
|
||||
'# fmt:on'))
|
||||
|
||||
self.assertFalse(eradicate.Eradicator().comment_contains_code(
|
||||
'# fmt:off'))
|
||||
|
||||
self.assertFalse(eradicate.Eradicator().comment_contains_code(
|
||||
'# isort: on'))
|
||||
|
||||
self.assertFalse(eradicate.Eradicator().comment_contains_code(
|
||||
'# isort:on'))
|
||||
|
||||
self.assertFalse(eradicate.Eradicator().comment_contains_code(
|
||||
'# isort: off'))
|
||||
|
||||
self.assertFalse(eradicate.Eradicator().comment_contains_code(
|
||||
'# isort:off'))
|
||||
|
||||
self.assertFalse(eradicate.Eradicator().comment_contains_code(
|
||||
'# isort: skip'))
|
||||
|
||||
self.assertFalse(eradicate.Eradicator().comment_contains_code(
|
||||
'# isort:skip'))
|
||||
|
||||
self.assertFalse(eradicate.Eradicator().comment_contains_code(
|
||||
'# isort: skip_file'))
|
||||
|
||||
self.assertFalse(eradicate.Eradicator().comment_contains_code(
|
||||
'# isort:skip_file'))
|
||||
|
||||
self.assertFalse(eradicate.Eradicator().comment_contains_code(
|
||||
'# isort: split'))
|
||||
|
||||
self.assertFalse(eradicate.Eradicator().comment_contains_code(
|
||||
'# isort:split'))
|
||||
|
||||
self.assertFalse(eradicate.Eradicator().comment_contains_code(
|
||||
'# isort: dont-add-imports'))
|
||||
|
||||
self.assertFalse(eradicate.Eradicator().comment_contains_code(
|
||||
'# isort:dont-add-imports'))
|
||||
|
||||
self.assertFalse(eradicate.Eradicator().comment_contains_code(
|
||||
'# isort: dont-add-imports: ["import os"]'))
|
||||
|
||||
self.assertFalse(eradicate.Eradicator().comment_contains_code(
|
||||
'# isort:dont-add-imports: ["import os"]'))
|
||||
|
||||
self.assertFalse(eradicate.Eradicator().comment_contains_code(
|
||||
'# isort: dont-add-imports:["import os"]'))
|
||||
|
||||
self.assertFalse(eradicate.Eradicator().comment_contains_code(
|
||||
'# isort:dont-add-imports:["import os"]'))
|
||||
|
||||
self.assertFalse(eradicate.Eradicator().comment_contains_code(
|
||||
'# type: ignore'))
|
||||
|
||||
self.assertFalse(eradicate.Eradicator().comment_contains_code(
|
||||
'# type:ignore'))
|
||||
|
||||
self.assertFalse(eradicate.Eradicator().comment_contains_code(
|
||||
'# type: ignore[import]'))
|
||||
|
||||
self.assertFalse(eradicate.Eradicator().comment_contains_code(
|
||||
'# type:ignore[import]'))
|
||||
|
||||
self.assertFalse(eradicate.Eradicator().comment_contains_code(
|
||||
'# TODO: Do that'))
|
||||
|
||||
self.assertFalse(eradicate.Eradicator().comment_contains_code(
|
||||
'# FIXME: Fix that'))
|
||||
|
||||
self.assertFalse(eradicate.Eradicator().comment_contains_code(
|
||||
'# XXX: What ever'))
|
||||
|
||||
|
||||
def test_commented_out_code_line_numbers(self):
|
||||
self.assertEqual(
|
||||
[1, 3],
|
||||
list(eradicate.Eradicator().commented_out_code_line_numbers(
|
||||
"""\
|
||||
# print(5)
|
||||
# This is a comment.
|
||||
# x = 1
|
||||
|
||||
y = 1 # x = 3
|
||||
|
||||
# The below is another comment.
|
||||
# 3 / 2 + 21
|
||||
""")))
|
||||
|
||||
def test_commented_out_code_line_numbers_with_errors(self):
|
||||
self.assertEqual(
|
||||
[1, 3],
|
||||
list(eradicate.Eradicator().commented_out_code_line_numbers(
|
||||
"""\
|
||||
# print(5)
|
||||
# This is a comment.
|
||||
# x = 1
|
||||
|
||||
y = 1 # x = 3
|
||||
|
||||
# The below is another comment.
|
||||
# 3 / 2 + 21
|
||||
def foo():
|
||||
1
|
||||
2
|
||||
""")))
|
||||
|
||||
def test_commented_out_code_line_numbers_with_with_statement(self):
|
||||
self.assertEqual(
|
||||
[1, 2],
|
||||
list(eradicate.Eradicator().commented_out_code_line_numbers("""\
|
||||
# with open('filename', 'w') as out_file:
|
||||
# json.dump(objects, out_file)
|
||||
#
|
||||
""")))
|
||||
|
||||
def test_commented_out_code_line_numbers_with_for_statement(self):
|
||||
self.assertEqual(
|
||||
[1, 2],
|
||||
list(eradicate.Eradicator().commented_out_code_line_numbers("""\
|
||||
# for x in y:
|
||||
# oops = x.ham
|
||||
""")))
|
||||
|
||||
def test_filter_commented_out_code(self):
|
||||
self.assertEqual(
|
||||
"""\
|
||||
# This is a comment.
|
||||
|
||||
y = 1 # x = 3
|
||||
|
||||
# The below is another comment.
|
||||
# 3 / 2 + 21
|
||||
""",
|
||||
''.join(eradicate.Eradicator().filter_commented_out_code(
|
||||
"""\
|
||||
# print(5)
|
||||
# This is a comment.
|
||||
# x = 1
|
||||
|
||||
y = 1 # x = 3
|
||||
|
||||
# The below is another comment.
|
||||
# 3 / 2 + 21
|
||||
# try:
|
||||
# x = 1
|
||||
# finally:
|
||||
# x = 0
|
||||
""")))
|
||||
|
||||
def test_filter_commented_out_code_should_avoid_escaped_newlines(self):
|
||||
line = """\
|
||||
if False: \\
|
||||
# print(3)
|
||||
print(2)
|
||||
print(3)
|
||||
"""
|
||||
self.assertEqual(
|
||||
line,
|
||||
''.join(eradicate.Eradicator().filter_commented_out_code(line)))
|
||||
|
||||
def test_filter_commented_out_code_with_larger_example(self):
|
||||
self.assertEqual(
|
||||
"""\
|
||||
# This is a comment.
|
||||
|
||||
y = 1 # x = 3
|
||||
|
||||
# The below is another comment.
|
||||
# 3 / 2 + 21
|
||||
""",
|
||||
''.join(eradicate.Eradicator().filter_commented_out_code(
|
||||
"""\
|
||||
# print(5)
|
||||
# This is a comment.
|
||||
# x = 1
|
||||
|
||||
y = 1 # x = 3
|
||||
|
||||
# The below is another comment.
|
||||
# 3 / 2 + 21
|
||||
""")))
|
||||
|
||||
def test_filter_commented_out_code_without_aggressive(self):
|
||||
code = """\
|
||||
# iterate through choices inside of parenthesis (separated by '|'):
|
||||
|
||||
# if the Optional takes a value, format is:
|
||||
# -s ARGS, --long ARGS
|
||||
"""
|
||||
self.assertEqual(
|
||||
code,
|
||||
''.join(eradicate.Eradicator().filter_commented_out_code(code,
|
||||
aggressive=False)))
|
||||
|
||||
def test_filter_commented_out_code_with_annotation(self):
|
||||
self.assertEqual(
|
||||
'\n\n\n',
|
||||
''.join(eradicate.Eradicator().filter_commented_out_code("""\
|
||||
# class CommentedClass(object):
|
||||
# def __init__(self, prop: int) -> None:
|
||||
# self.property = prop
|
||||
|
||||
# def __str__(self) -> str:
|
||||
# return self.__class__.__name__
|
||||
|
||||
# def set_prop(self, prop: int):
|
||||
# self.prop = prop
|
||||
|
||||
# def get_prop(self):
|
||||
# return self.prop
|
||||
""")))
|
||||
|
||||
def test_detect_encoding_with_bad_encoding(self):
|
||||
with temporary_file('# -*- coding: blah -*-\n') as filename:
|
||||
self.assertEqual('latin-1',
|
||||
eradicate.Eradicator().detect_encoding(filename))
|
||||
|
||||
def test_extend_whitelist(self):
|
||||
eradicator = eradicate.Eradicator()
|
||||
eradicator.update_whitelist(["foo"], True)
|
||||
self.assertTrue(
|
||||
eradicator.WHITELIST_REGEX == re.compile(
|
||||
r'|'.join(list(eradicator.DEFAULT_WHITELIST) + ["foo"]), flags=re.IGNORECASE
|
||||
)
|
||||
)
|
||||
|
||||
def test_update_whitelist(self):
|
||||
eradicator = eradicate.Eradicator()
|
||||
eradicator.update_whitelist(["foo"], False)
|
||||
self.assertTrue(eradicator.WHITELIST_REGEX == re.compile("foo", flags=re.IGNORECASE))
|
||||
|
||||
|
||||
class SystemTests(unittest.TestCase):
|
||||
|
||||
def test_diff(self):
|
||||
with temporary_file("""\
|
||||
# x * 3 == False
|
||||
# x is a variable
|
||||
""") as filename:
|
||||
output_file = io.StringIO()
|
||||
eradicate.main(argv=['my_fake_program', filename],
|
||||
standard_out=output_file,
|
||||
standard_error=None)
|
||||
self.assertEqual("""\
|
||||
@@ -1,2 +1 @@
|
||||
-# x * 3 == False
|
||||
# x is a variable
|
||||
""", '\n'.join(output_file.getvalue().split('\n')[2:]))
|
||||
|
||||
def test_recursive(self):
|
||||
with temporary_directory() as directory:
|
||||
|
||||
with temporary_file("""\
|
||||
# x * 3 == False
|
||||
# x is a variable
|
||||
""", directory=directory):
|
||||
|
||||
output_file = io.StringIO()
|
||||
eradicate.main(argv=['my_fake_program',
|
||||
'--recursive',
|
||||
directory],
|
||||
standard_out=output_file,
|
||||
standard_error=None)
|
||||
self.assertEqual("""\
|
||||
@@ -1,2 +1 @@
|
||||
-# x * 3 == False
|
||||
# x is a variable
|
||||
""", '\n'.join(output_file.getvalue().split('\n')[2:]))
|
||||
|
||||
def test_ignore_hidden_directories(self):
|
||||
with temporary_directory() as directory:
|
||||
with temporary_directory(prefix='.',
|
||||
directory=directory) as inner_directory:
|
||||
|
||||
with temporary_file("""\
|
||||
# x * 3 == False
|
||||
# x is a variable
|
||||
""", directory=inner_directory):
|
||||
|
||||
output_file = io.StringIO()
|
||||
eradicate.main(argv=['my_fake_program',
|
||||
'--recursive',
|
||||
directory],
|
||||
standard_out=output_file,
|
||||
standard_error=None)
|
||||
self.assertEqual(
|
||||
'',
|
||||
output_file.getvalue().strip())
|
||||
|
||||
def test_in_place(self):
|
||||
with temporary_file("""\
|
||||
# x * 3 == False
|
||||
# x is a variable
|
||||
""") as filename:
|
||||
output_file = io.StringIO()
|
||||
eradicate.main(argv=['my_fake_program', '--in-place', filename],
|
||||
standard_out=output_file,
|
||||
standard_error=None)
|
||||
with open(filename) as f:
|
||||
self.assertEqual("""\
|
||||
# x is a variable
|
||||
""", f.read())
|
||||
|
||||
def test_with_missing_file(self):
|
||||
output_file = io.StringIO()
|
||||
ignore = StubFile()
|
||||
eradicate.main(argv=['my_fake_program', '--in-place', '.fake'],
|
||||
standard_out=output_file,
|
||||
standard_error=ignore)
|
||||
self.assertFalse(output_file.getvalue())
|
||||
|
||||
def test_returns_error_code_if_requested(self):
|
||||
with temporary_file("""\
|
||||
# x * 3 == False
|
||||
# x is a variable
|
||||
""") as filename:
|
||||
output_file = io.StringIO()
|
||||
result = eradicate.main(argv=['my_fake_program', filename, "-e"],
|
||||
standard_out=output_file,
|
||||
standard_error=None)
|
||||
self.assertTrue(result)
|
||||
|
||||
def test_returns_None_if_no_error_request(self):
|
||||
with temporary_file("""\
|
||||
# x * 3 == False
|
||||
# x is a variable
|
||||
""") as filename:
|
||||
output_file = io.StringIO()
|
||||
result = eradicate.main(argv=['my_fake_program', filename],
|
||||
standard_out=output_file,
|
||||
standard_error=None)
|
||||
self.assertTrue(result is None)
|
||||
|
||||
def test_end_to_end(self):
|
||||
with temporary_file("""\
|
||||
# x * 3 == False
|
||||
# x is a variable
|
||||
""") as filename:
|
||||
process = subprocess.Popen([sys.executable,
|
||||
'./eradicate', filename],
|
||||
stdout=subprocess.PIPE)
|
||||
self.assertEqual("""\
|
||||
@@ -1,2 +1 @@
|
||||
-# x * 3 == False
|
||||
# x is a variable
|
||||
""", '\n'.join(process.communicate()[0].decode().split('\n')[2:]))
|
||||
|
||||
def test_whitelist(self):
|
||||
mock_update = mock.Mock()
|
||||
with mock.patch.object(eradicate.Eradicator, 'update_whitelist', mock_update):
|
||||
with temporary_file("# empty") as filename:
|
||||
result = eradicate.main(argv=['my_fake_program', '--whitelist', 'foo# bar', filename],
|
||||
standard_out=None,
|
||||
standard_error=None)
|
||||
self.assertTrue(result is None)
|
||||
mock_update.assert_called_once_with(["foo", " bar"], False)
|
||||
|
||||
def test_whitelist_extend(self):
|
||||
mock_update = mock.Mock()
|
||||
with mock.patch.object(eradicate.Eradicator, 'update_whitelist', mock_update):
|
||||
with temporary_file("# empty") as filename:
|
||||
result = eradicate.main(argv=['my_fake_program', '--whitelist-extend', 'foo #bar', filename],
|
||||
standard_out=None,
|
||||
standard_error=None)
|
||||
self.assertTrue(result is None)
|
||||
mock_update.assert_called_once_with(["foo ", "bar"], True)
|
||||
|
||||
|
||||
@contextlib.contextmanager
|
||||
def temporary_file(contents, directory='.', prefix=''):
|
||||
"""Write contents to temporary file and yield it."""
|
||||
f = tempfile.NamedTemporaryFile(suffix='.py', prefix=prefix,
|
||||
delete=False, dir=directory)
|
||||
try:
|
||||
f.write(contents.encode())
|
||||
f.close()
|
||||
yield f.name
|
||||
finally:
|
||||
import os
|
||||
os.remove(f.name)
|
||||
|
||||
|
||||
@contextlib.contextmanager
|
||||
def temporary_directory(directory='.', prefix=''):
|
||||
"""Create temporary directory and yield its path."""
|
||||
temp_directory = tempfile.mkdtemp(prefix=prefix, dir=directory)
|
||||
try:
|
||||
yield temp_directory
|
||||
finally:
|
||||
import shutil
|
||||
shutil.rmtree(temp_directory)
|
||||
|
||||
|
||||
class StubFile(object):
|
||||
|
||||
"""Fake file that ignores everything."""
|
||||
|
||||
def write(*_):
|
||||
"""Ignore."""
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user