From 95a128c3ead1550b36519cff07add9e1dc82beec Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Tue, 10 Jan 2023 19:07:23 -0500 Subject: [PATCH 001/139] build: bump version --- CHANGES.rst | 6 ++++++ coverage/version.py | 4 ++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index 628999113..82c80efb3 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -17,6 +17,12 @@ development at the same time, such as 4.5.x and 5.0. .. Version 9.8.1 — 2027-07-27 .. -------------------------- +Unreleased +---------- + +Nothing yet. + + .. _changes_7-0-5: Version 7.0.5 — 2023-01-10 diff --git a/coverage/version.py b/coverage/version.py index b20b5568f..e6a1b9f3e 100644 --- a/coverage/version.py +++ b/coverage/version.py @@ -8,8 +8,8 @@ # version_info: same semantics as sys.version_info. # _dev: the .devN suffix if any. -version_info = (7, 0, 5, "final", 0) -_dev = 0 +version_info = (7, 0, 6, "alpha", 0) +_dev = 1 def _make_version( From 8fba8f18806b10e3713c124db538976527b7514d Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Thu, 12 Jan 2023 07:13:36 -0500 Subject: [PATCH 002/139] mypy: html.py The squishiness of IndexInfoDict.nums is frustrating. --- coverage/html.py | 86 +++++++++++++++++++++++++++++++----------------- tox.ini | 8 +++-- 2 files changed, 60 insertions(+), 34 deletions(-) diff --git a/coverage/html.py b/coverage/html.py index b10bab245..9e1b11b20 100644 --- a/coverage/html.py +++ b/coverage/html.py @@ -12,10 +12,10 @@ import shutil from dataclasses import dataclass -from typing import Iterable, List, Optional, TYPE_CHECKING +from typing import Any, Dict, Iterable, List, Optional, Tuple, TYPE_CHECKING, cast import coverage -from coverage.data import add_data_to_hash +from coverage.data import CoverageData, add_data_to_hash from coverage.exceptions import NoDataError from coverage.files import flat_rootname from coverage.misc import ensure_dir, file_be_gone, Hasher, isolate_module, format_local_datetime @@ -25,10 +25,27 @@ from coverage.templite import Templite from coverage.types import TLineNo, TMorf + if TYPE_CHECKING: + # To avoid circular imports: from coverage import Coverage from coverage.plugins import FileReporter + # To be able to use 3.8 typing features, and still run on 3.7: + from typing import TypedDict + + class IndexInfoDict(TypedDict): + """Information for each file, to render the index file.""" + nums: Numbers + html_filename: str + relative_filename: str + + class FileInfoDict(TypedDict): + """Summary of the information from last rendering, to avoid duplicate work.""" + hash: str + index: IndexInfoDict + + os = isolate_module(os) @@ -56,7 +73,7 @@ def write_html(fname: str, html: str) -> None: @dataclass class LineData: """The data for each source line of HTML output.""" - tokens: str + tokens: List[Tuple[str, str]] number: TLineNo category: str statement: bool @@ -65,6 +82,10 @@ class LineData: context_list: List[str] short_annotations: List[str] long_annotations: List[str] + html: str = "" + annotate: Optional[str] = None + annotate_long: Optional[str] = None + css_class: str = "" @dataclass @@ -201,8 +222,8 @@ def __init__(self, cov: Coverage) -> None: self.data = self.coverage.get_data() self.has_arcs = self.data.has_arcs() - self.file_summaries = [] - self.all_files_nums = [] + self.file_summaries: List[IndexInfoDict] = [] + self.all_files_nums: List[Numbers] = [] self.incr = IncrementalChecker(self.directory) self.datagen = HtmlDataGeneration(self.coverage) self.totals = Numbers(precision=self.config.precision) @@ -274,7 +295,7 @@ def report(self, morfs: Optional[Iterable[TMorf]]) -> float: if not self.all_files_nums: raise NoDataError("No data to report.") - self.totals = sum(self.all_files_nums) + self.totals = cast(Numbers, sum(self.all_files_nums)) # Write the index file. if files_to_report: @@ -308,9 +329,10 @@ def make_local_static_report_files(self) -> None: # The user may have extra CSS they want copied. if self.extra_css: + assert self.config.extra_css is not None shutil.copyfile(self.config.extra_css, os.path.join(self.directory, self.extra_css)) - def should_report_file(self, ftr): + def should_report_file(self, ftr: FileToReport) -> bool: """Determine if we'll report this file.""" # Get the numbers for this file. nums = ftr.analysis.numbers @@ -333,7 +355,7 @@ def should_report_file(self, ftr): return True - def write_html_file(self, ftr, prev_html, next_html): + def write_html_file(self, ftr: FileToReport, prev_html: str, next_html: str) -> None: """Generate an HTML file for one source file.""" self.make_directory() @@ -346,16 +368,16 @@ def write_html_file(self, ftr, prev_html, next_html): file_data = self.datagen.data_for_file(ftr.fr, ftr.analysis) for ldata in file_data.lines: # Build the HTML for the line. - html = [] + html_parts = [] for tok_type, tok_text in ldata.tokens: if tok_type == "ws": - html.append(escape(tok_text)) + html_parts.append(escape(tok_text)) else: tok_html = escape(tok_text) or ' ' - html.append( + html_parts.append( f'<span class="{tok_type}">{tok_html}</span>' ) - ldata.html = ''.join(html) + ldata.html = ''.join(html_parts) if ldata.short_annotations: # 202F is NARROW NO-BREAK SPACE. @@ -384,7 +406,9 @@ def write_html_file(self, ftr, prev_html, next_html): css_classes = [] if ldata.category: - css_classes.append(self.template_globals['category'][ldata.category]) + css_classes.append( + self.template_globals['category'][ldata.category] # type: ignore[index] + ) ldata.css_class = ' '.join(css_classes) or "pln" html_path = os.path.join(self.directory, ftr.html_filename) @@ -396,7 +420,7 @@ def write_html_file(self, ftr, prev_html, next_html): write_html(html_path, html) # Save this file's information for the index file. - index_info = { + index_info: IndexInfoDict = { 'nums': ftr.analysis.numbers, 'html_filename': ftr.html_filename, 'relative_filename': ftr.fr.relative_filename(), @@ -404,7 +428,7 @@ def write_html_file(self, ftr, prev_html, next_html): self.file_summaries.append(index_info) self.incr.set_index_info(ftr.rootname, index_info) - def index_file(self, first_html, final_html): + def index_file(self, first_html: str, final_html: str) -> None: """Write the index.html file for this report.""" self.make_directory() index_tmpl = Templite(read_data("index.html"), self.template_globals) @@ -440,7 +464,6 @@ class IncrementalChecker: STATUS_FILE = "status.json" STATUS_FORMAT = 2 - # pylint: disable=wrong-spelling-in-comment,useless-suppression # The data looks like: # # { @@ -468,14 +491,14 @@ class IncrementalChecker: # } # } - def __init__(self, directory): + def __init__(self, directory: str) -> None: self.directory = directory self.reset() def reset(self) -> None: """Initialize to empty. Causes all files to be reported.""" self.globals = '' - self.files = {} + self.files: Dict[str, FileInfoDict] = {} def read(self) -> None: """Read the information we stored last time.""" @@ -507,7 +530,8 @@ def write(self) -> None: status_file = os.path.join(self.directory, self.STATUS_FILE) files = {} for filename, fileinfo in self.files.items(): - fileinfo['index']['nums'] = fileinfo['index']['nums'].init_args() + index = fileinfo['index'] + index['nums'] = index['nums'].init_args() # type: ignore[typeddict-item] files[filename] = fileinfo status = { @@ -519,7 +543,7 @@ def write(self) -> None: with open(status_file, "w") as fout: json.dump(status, fout, separators=(',', ':')) - def check_global_data(self, *data): + def check_global_data(self, *data: Any) -> None: """Check the global data that can affect incremental reporting.""" m = Hasher() for d in data: @@ -529,7 +553,7 @@ def check_global_data(self, *data): self.reset() self.globals = these_globals - def can_skip_file(self, data, fr, rootname): + def can_skip_file(self, data: CoverageData, fr: FileReporter, rootname: str) -> bool: """Can we skip reporting this file? `data` is a CoverageData object, `fr` is a `FileReporter`, and @@ -549,26 +573,26 @@ def can_skip_file(self, data, fr, rootname): self.set_file_hash(rootname, this_hash) return False - def file_hash(self, fname): + def file_hash(self, fname: str) -> str: """Get the hash of `fname`'s contents.""" - return self.files.get(fname, {}).get('hash', '') + return self.files.get(fname, {}).get('hash', '') # type: ignore[call-overload] - def set_file_hash(self, fname, val): + def set_file_hash(self, fname: str, val: str) -> None: """Set the hash of `fname`'s contents.""" - self.files.setdefault(fname, {})['hash'] = val + self.files.setdefault(fname, {})['hash'] = val # type: ignore[typeddict-item] - def index_info(self, fname): + def index_info(self, fname: str) -> IndexInfoDict: """Get the information for index.html for `fname`.""" - return self.files.get(fname, {}).get('index', {}) + return self.files.get(fname, {}).get('index', {}) # type: ignore - def set_index_info(self, fname, info): + def set_index_info(self, fname: str, info: IndexInfoDict) -> None: """Set the information for index.html for `fname`.""" - self.files.setdefault(fname, {})['index'] = info + self.files.setdefault(fname, {})['index'] = info # type: ignore[typeddict-item] # Helpers for templates and generating HTML -def escape(t): +def escape(t: str) -> str: """HTML-escape the text in `t`. This is only suitable for HTML text, not attributes. @@ -578,6 +602,6 @@ def escape(t): return t.replace("&", "&").replace("<", "<") -def pair(ratio): +def pair(ratio: Tuple[int, int]) -> str: """Format a pair of numbers so JavaScript can read them in an attribute.""" return "%s %s" % ratio diff --git a/tox.ini b/tox.ini index 5a5bfc90d..d14fd535a 100644 --- a/tox.ini +++ b/tox.ini @@ -90,6 +90,8 @@ commands = twine check dist/* [testenv:mypy] +basepython = python3.8 + deps = -r requirements/mypy.pip @@ -98,11 +100,11 @@ setenv = C1=coverage/__init__.py coverage/__main__.py coverage/annotate.py coverage/bytecode.py C2=coverage/cmdline.py coverage/collector.py coverage/config.py coverage/context.py coverage/control.py C3=coverage/data.py coverage/debug.py coverage/disposition.py coverage/env.py coverage/exceptions.py coverage/execfile.py - C4=coverage/files.py coverage/inorout.py coverage/jsonreport.py coverage/lcovreport.py coverage/misc.py coverage/multiproc.py coverage/numbits.py + C4=coverage/files.py coverage/html.py coverage/inorout.py coverage/jsonreport.py coverage/lcovreport.py coverage/misc.py coverage/multiproc.py coverage/numbits.py C5=coverage/parser.py coverage/phystokens.py coverage/plugin.py coverage/plugin_support.py coverage/python.py C6=coverage/report.py coverage/results.py coverage/sqldata.py coverage/summary.py C7=coverage/templite.py coverage/tomlconfig.py coverage/types.py coverage/version.py coverage/xmlreport.py - # not done yet: html.py pytracer.py + # not done yet: pytracer.py TYPEABLE_C={env:C1} {env:C2} {env:C3} {env:C4} {env:C5} {env:C6} {env:C7} T1=tests/conftest.py tests/coveragetest.py tests/goldtest.py tests/helpers.py tests/mixins.py tests/osinfo.py T2=tests/test_annotate.py tests/test_api.py tests/test_arcs.py tests/test_cmdline.py tests/test_collector.py tests/test_concurrency.py @@ -117,7 +119,7 @@ setenv = commands = # PYVERSIONS - mypy --python-version=3.7 {env:TYPEABLE} + mypy --python-version=3.8 {env:TYPEABLE} mypy --python-version=3.12 {env:TYPEABLE} [gh-actions] From 460dd98dae56d26f0611a0f6dc9c24e44435958f Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Thu, 12 Jan 2023 10:44:15 -0500 Subject: [PATCH 003/139] mypy: pytracer.py, the last file in coverage/ --- coverage/collector.py | 6 ++--- coverage/pytracer.py | 59 ++++++++++++++++++++++++++----------------- coverage/types.py | 12 ++++----- tox.ini | 3 +-- 4 files changed, 45 insertions(+), 35 deletions(-) diff --git a/coverage/collector.py b/coverage/collector.py index ab743ee38..22471504f 100644 --- a/coverage/collector.py +++ b/coverage/collector.py @@ -232,7 +232,7 @@ def _clear_data(self) -> None: def reset(self) -> None: """Clear collected data, and prepare to collect more.""" # The trace data we are collecting. - self.data: TTraceData = {} # type: ignore[assignment] + self.data: TTraceData = {} # A dictionary mapping file names to file tracer plugin names that will # handle them. @@ -310,12 +310,12 @@ def _start_tracer(self) -> TTraceFn: # # New in 3.12: threading.settrace_all_threads: https://github.com/python/cpython/pull/96681 - def _installation_trace(self, frame: FrameType, event: str, arg: Any) -> TTraceFn: + def _installation_trace(self, frame: FrameType, event: str, arg: Any) -> Optional[TTraceFn]: """Called on new threads, installs the real tracer.""" # Remove ourselves as the trace function. sys.settrace(None) # Install the real tracer. - fn = self._start_tracer() + fn: Optional[TTraceFn] = self._start_tracer() # Invoke the real trace function with the current event, to be sure # not to lose an event. if fn: diff --git a/coverage/pytracer.py b/coverage/pytracer.py index 94d2ecdcd..326c50ba8 100644 --- a/coverage/pytracer.py +++ b/coverage/pytracer.py @@ -8,12 +8,16 @@ import atexit import dis import sys +import threading -from types import FrameType -from typing import Any, Callable, Dict, Optional +from types import FrameType, ModuleType +from typing import Any, Callable, Dict, List, Optional, Set, Tuple, cast from coverage import env -from coverage.types import TFileDisposition, TTraceData, TTraceFn, TTracer, TWarnFn +from coverage.types import ( + TArc, TFileDisposition, TLineNo, TTraceData, TTraceFileData, TTraceFn, + TTracer, TWarnFn, +) # We need the YIELD_VALUE opcode below, in a comparison-friendly form. RESUME = dis.opmap.get('RESUME') @@ -59,16 +63,16 @@ def __init__(self) -> None: self.warn: TWarnFn # The threading module to use, if any. - self.threading = None + self.threading: Optional[ModuleType] = None - self.cur_file_data = None - self.last_line = 0 # int, but uninitialized. + self.cur_file_data: Optional[TTraceFileData] = None + self.last_line: TLineNo = 0 self.cur_file_name: Optional[str] = None self.context: Optional[str] = None self.started_context = False - self.data_stack = [] - self.thread = None + self.data_stack: List[Tuple[Optional[TTraceFileData], Optional[str], TLineNo, bool]] = [] + self.thread: Optional[threading.Thread] = None self.stopped = False self._activity = False @@ -78,7 +82,7 @@ def __init__(self) -> None: # Cache a bound method on the instance, so that we don't have to # re-create a bound method object all the time. - self._cached_bound_method_trace = self._trace + self._cached_bound_method_trace: TTraceFn = self._trace def __repr__(self) -> str: me = id(self) @@ -109,7 +113,13 @@ def log(self, marker: str, *args: Any) -> None: f.write(stack) f.write("\n") - def _trace(self, frame: FrameType, event: str, arg_unused: Any) -> Optional[TTraceFn]: + def _trace( + self, + frame: FrameType, + event: str, + arg: Any, # pylint: disable=unused-argument + lineno: Optional[TLineNo] = None, # pylint: disable=unused-argument + ) -> Optional[TTraceFn]: """The trace function passed to sys.settrace.""" if THIS_FILE in frame.f_code.co_filename: @@ -164,7 +174,7 @@ def _trace(self, frame: FrameType, event: str, arg_unused: Any) -> Optional[TTra # Improve tracing performance: when calling a function, both caller # and callee are often within the same file. if that's the case, we # don't have to re-check whether to trace the corresponding - # function (which is a little bit espensive since it involves + # function (which is a little bit expensive since it involves # dictionary lookups). This optimization is only correct if we # didn't start a context. filename = frame.f_code.co_filename @@ -180,7 +190,7 @@ def _trace(self, frame: FrameType, event: str, arg_unused: Any) -> Optional[TTra tracename = disp.source_filename assert tracename is not None if tracename not in self.data: - self.data[tracename] = set() + self.data[tracename] = set() # type: ignore[assignment] self.cur_file_data = self.data[tracename] else: frame.f_trace_lines = False @@ -206,13 +216,13 @@ def _trace(self, frame: FrameType, event: str, arg_unused: Any) -> Optional[TTra elif event == 'line': # Record an executed line. if self.cur_file_data is not None: - lineno = frame.f_lineno + flineno: TLineNo = frame.f_lineno if self.trace_arcs: - self.cur_file_data.add((self.last_line, lineno)) + cast(Set[TArc], self.cur_file_data).add((self.last_line, flineno)) else: - self.cur_file_data.add(lineno) - self.last_line = lineno + cast(Set[TLineNo], self.cur_file_data).add(flineno) + self.last_line = flineno elif event == 'return': if self.trace_arcs and self.cur_file_data: @@ -240,7 +250,7 @@ def _trace(self, frame: FrameType, event: str, arg_unused: Any) -> Optional[TTra real_return = True if real_return: first = frame.f_code.co_firstlineno - self.cur_file_data.add((self.last_line, -first)) + cast(Set[TArc], self.cur_file_data).add((self.last_line, -first)) # Leaving this function, pop the filename stack. self.cur_file_data, self.cur_file_name, self.last_line, self.started_context = ( @@ -248,6 +258,7 @@ def _trace(self, frame: FrameType, event: str, arg_unused: Any) -> Optional[TTra ) # Leaving a context? if self.started_context: + assert self.switch_context is not None self.context = None self.switch_context(None) return self._cached_bound_method_trace @@ -284,12 +295,14 @@ def stop(self) -> None: # right thread. self.stopped = True - if self.threading and self.thread.ident != self.threading.current_thread().ident: - # Called on a different thread than started us: we can't unhook - # ourselves, but we've set the flag that we should stop, so we - # won't do any more tracing. - #self.log("~", "stopping on different threads") - return + if self.threading: + assert self.thread is not None + if self.thread.ident != self.threading.current_thread().ident: + # Called on a different thread than started us: we can't unhook + # ourselves, but we've set the flag that we should stop, so we + # won't do any more tracing. + #self.log("~", "stopping on different threads") + return if self.warn: # PyPy clears the trace function before running atexit functions, diff --git a/coverage/types.py b/coverage/types.py index a45b831e8..736269e06 100644 --- a/coverage/types.py +++ b/coverage/types.py @@ -32,8 +32,8 @@ def __call__( frame: FrameType, event: str, arg: Any, - lineno: Optional[int] = None # Our own twist, see collector.py - ) -> TTraceFn: + lineno: Optional[TLineNo] = None # Our own twist, see collector.py + ) -> Optional[TTraceFn]: ... ## Coverage.py tracing @@ -63,11 +63,9 @@ class TFileDisposition(Protocol): # - If measuring arcs in the C tracer, the values are sets of packed arcs (two # line numbers combined into one integer). -TTraceData = Union[ - Dict[str, Set[TLineNo]], - Dict[str, Set[TArc]], - Dict[str, Set[int]], -] +TTraceFileData = Union[Set[TLineNo], Set[TArc], Set[int]] + +TTraceData = Dict[str, TTraceFileData] class TTracer(Protocol): """Either CTracer or PyTracer.""" diff --git a/tox.ini b/tox.ini index d14fd535a..e42773abd 100644 --- a/tox.ini +++ b/tox.ini @@ -101,10 +101,9 @@ setenv = C2=coverage/cmdline.py coverage/collector.py coverage/config.py coverage/context.py coverage/control.py C3=coverage/data.py coverage/debug.py coverage/disposition.py coverage/env.py coverage/exceptions.py coverage/execfile.py C4=coverage/files.py coverage/html.py coverage/inorout.py coverage/jsonreport.py coverage/lcovreport.py coverage/misc.py coverage/multiproc.py coverage/numbits.py - C5=coverage/parser.py coverage/phystokens.py coverage/plugin.py coverage/plugin_support.py coverage/python.py + C5=coverage/parser.py coverage/phystokens.py coverage/plugin.py coverage/plugin_support.py coverage/python.py coverage/pytracer.py C6=coverage/report.py coverage/results.py coverage/sqldata.py coverage/summary.py C7=coverage/templite.py coverage/tomlconfig.py coverage/types.py coverage/version.py coverage/xmlreport.py - # not done yet: pytracer.py TYPEABLE_C={env:C1} {env:C2} {env:C3} {env:C4} {env:C5} {env:C6} {env:C7} T1=tests/conftest.py tests/coveragetest.py tests/goldtest.py tests/helpers.py tests/mixins.py tests/osinfo.py T2=tests/test_annotate.py tests/test_api.py tests/test_arcs.py tests/test_cmdline.py tests/test_collector.py tests/test_concurrency.py From a15b90268f37d5f3a06b28ecb9277e636b493b1d Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Thu, 12 Jan 2023 10:47:08 -0500 Subject: [PATCH 004/139] mypy: progress on test_plugins.py --- coverage/config.py | 5 +++-- coverage/plugin_support.py | 7 ++++--- coverage/types.py | 7 +++++++ tests/test_plugins.py | 19 ++++++++++++------- 4 files changed, 26 insertions(+), 12 deletions(-) diff --git a/coverage/config.py b/coverage/config.py index ee30b8a43..046c1b00c 100644 --- a/coverage/config.py +++ b/coverage/config.py @@ -20,7 +20,8 @@ from coverage.misc import isolate_module, human_sorted_items, substitute_variables from coverage.tomlconfig import TomlConfigParser, TomlDecodeError from coverage.types import ( - TConfigurable, TConfigSectionIn, TConfigValueIn, TConfigSectionOut, TConfigValueOut, + TConfigurable, TConfigSectionIn, TConfigValueIn, TConfigSectionOut, + TConfigValueOut, TPluginConfig, ) os = isolate_module(os) @@ -166,7 +167,7 @@ def getregexlist(self, section: str, option: str) -> List[str]: ] -class CoverageConfig(TConfigurable): +class CoverageConfig(TConfigurable, TPluginConfig): """Coverage.py configuration. The attributes of this class are the various settings that control the diff --git a/coverage/plugin_support.py b/coverage/plugin_support.py index 62985a066..4ed02c5c0 100644 --- a/coverage/plugin_support.py +++ b/coverage/plugin_support.py @@ -12,11 +12,12 @@ from types import FrameType from typing import Any, Dict, Iterable, Iterator, List, Optional, Set, Tuple, Union -from coverage.config import CoverageConfig from coverage.exceptions import PluginError from coverage.misc import isolate_module from coverage.plugin import CoveragePlugin, FileTracer, FileReporter -from coverage.types import TArc, TConfigurable, TDebugCtl, TLineNo, TSourceTokenLines +from coverage.types import ( + TArc, TConfigurable, TDebugCtl, TLineNo, TPluginConfig, TSourceTokenLines, +) os = isolate_module(os) @@ -38,7 +39,7 @@ def __init__(self) -> None: def load_plugins( cls, modules: Iterable[str], - config: CoverageConfig, + config: TPluginConfig, debug: Optional[TDebugCtl] = None, ) -> Plugins: """Load plugins from `modules`. diff --git a/coverage/types.py b/coverage/types.py index 736269e06..3d21ac9d0 100644 --- a/coverage/types.py +++ b/coverage/types.py @@ -136,6 +136,13 @@ def set_option(self, option_name: str, value: Union[TConfigValueIn, TConfigSecti """ +class TPluginConfig(Protocol): + """Something that can provide options to a plugin.""" + + def get_plugin_options(self, plugin: str) -> TConfigSectionOut: + """Get the options for a plugin.""" + + ## Parsing TMorf = Union[ModuleType, str] diff --git a/tests/test_plugins.py b/tests/test_plugins.py index 866fab871..ab1f6b5fe 100644 --- a/tests/test_plugins.py +++ b/tests/test_plugins.py @@ -3,10 +3,14 @@ """Tests for plugins.""" +from __future__ import annotations + import inspect import io import math import os.path + +from typing import Any, Dict, List from xml.etree import ElementTree import pytest @@ -17,6 +21,7 @@ from coverage.data import line_counts, sorted_lines from coverage.exceptions import CoverageWarning, NoSource, PluginError from coverage.misc import import_local_file +from coverage.types import TConfigSectionOut, TPluginConfig import coverage.plugin @@ -24,18 +29,18 @@ from tests.helpers import CheckUniqueFilenames, swallow_warnings -class FakeConfig: +class FakeConfig(TPluginConfig): """A fake config for use in tests.""" - def __init__(self, plugin, options) -> None: + def __init__(self, plugin: str, options: Dict[str, Any]) -> None: self.plugin = plugin self.options = options - self.asked_for = [] + self.asked_for: List[str] = [] - def get_plugin_options(self, module): - """Just return the options for `module` if this is the right module.""" - self.asked_for.append(module) - if module == self.plugin: + def get_plugin_options(self, plugin: str) -> TConfigSectionOut: + """Just return the options for `plugin` if this is the right module.""" + self.asked_for.append(plugin) + if plugin == self.plugin: return self.options else: return {} From ff554c16cdf23dd8c263e23fdbda51bdb4f4526e Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Thu, 12 Jan 2023 10:47:39 -0500 Subject: [PATCH 005/139] mypy: all of coverage/ is checkable now --- tox.ini | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/tox.ini b/tox.ini index e42773abd..26efddeb3 100644 --- a/tox.ini +++ b/tox.ini @@ -97,14 +97,6 @@ deps = setenv = {[testenv]setenv} - C1=coverage/__init__.py coverage/__main__.py coverage/annotate.py coverage/bytecode.py - C2=coverage/cmdline.py coverage/collector.py coverage/config.py coverage/context.py coverage/control.py - C3=coverage/data.py coverage/debug.py coverage/disposition.py coverage/env.py coverage/exceptions.py coverage/execfile.py - C4=coverage/files.py coverage/html.py coverage/inorout.py coverage/jsonreport.py coverage/lcovreport.py coverage/misc.py coverage/multiproc.py coverage/numbits.py - C5=coverage/parser.py coverage/phystokens.py coverage/plugin.py coverage/plugin_support.py coverage/python.py coverage/pytracer.py - C6=coverage/report.py coverage/results.py coverage/sqldata.py coverage/summary.py - C7=coverage/templite.py coverage/tomlconfig.py coverage/types.py coverage/version.py coverage/xmlreport.py - TYPEABLE_C={env:C1} {env:C2} {env:C3} {env:C4} {env:C5} {env:C6} {env:C7} T1=tests/conftest.py tests/coveragetest.py tests/goldtest.py tests/helpers.py tests/mixins.py tests/osinfo.py T2=tests/test_annotate.py tests/test_api.py tests/test_arcs.py tests/test_cmdline.py tests/test_collector.py tests/test_concurrency.py T3=tests/test_config.py tests/test_context.py tests/test_coverage.py tests/test_data.py tests/test_debug.py tests/test_execfile.py @@ -114,7 +106,7 @@ setenv = T7=tests/test_summary.py tests/test_templite.py tests/test_testing.py tests/test_venv.py tests/test_version.py tests/test_xml.py # not done yet: test_plugins.py TYPEABLE_T={env:T1} {env:T2} {env:T3} {env:T4} {env:T5} {env:T6} {env:T7} - TYPEABLE={env:TYPEABLE_C} {env:TYPEABLE_T} + TYPEABLE=coverage {env:TYPEABLE_T} commands = # PYVERSIONS From a5aeec363e2f50312007ef40903f1dcaae0b5133 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Thu, 12 Jan 2023 20:23:09 -0500 Subject: [PATCH 006/139] mypy: test_plugins.py --- tests/test_plugins.py | 66 ++++++++++++++++++++++++++----------------- tox.ini | 3 +- 2 files changed, 41 insertions(+), 28 deletions(-) diff --git a/tests/test_plugins.py b/tests/test_plugins.py index ab1f6b5fe..25233516d 100644 --- a/tests/test_plugins.py +++ b/tests/test_plugins.py @@ -10,18 +10,18 @@ import math import os.path -from typing import Any, Dict, List +from typing import Any, Dict, List, Optional from xml.etree import ElementTree import pytest import coverage -from coverage import env +from coverage import Coverage, env from coverage.control import Plugins from coverage.data import line_counts, sorted_lines from coverage.exceptions import CoverageWarning, NoSource, PluginError from coverage.misc import import_local_file -from coverage.types import TConfigSectionOut, TPluginConfig +from coverage.types import TConfigSectionOut, TLineNo, TPluginConfig import coverage.plugin @@ -29,6 +29,12 @@ from tests.helpers import CheckUniqueFilenames, swallow_warnings +class NullConfig(TPluginConfig): + """A plugin configure thing when we don't really need one.""" + def get_plugin_options(self, plugin: str) -> TConfigSectionOut: + return {} + + class FakeConfig(TPluginConfig): """A fake config for use in tests.""" @@ -84,8 +90,8 @@ def coverage_init(reg, options): plugins = list(Plugins.load_plugins(["plugin1"], config)) assert len(plugins) == 1 - assert plugins[0].this_is == "me" - assert plugins[0].options == {'a': 'hello'} + assert plugins[0].this_is == "me" # type: ignore + assert plugins[0].options == {'a': 'hello'} # type: ignore assert config.asked_for == ['plugin1'] def test_importing_and_configuring_more_than_one(self) -> None: @@ -115,9 +121,9 @@ def coverage_init(reg, options): plugins = list(Plugins.load_plugins(["plugin1", "plugin2"], config)) assert len(plugins) == 2 - assert plugins[0].this_is == "me" - assert plugins[0].options == {'a': 'hello'} - assert plugins[1].options == {} + assert plugins[0].this_is == "me" # type: ignore + assert plugins[0].options == {'a': 'hello'} # type: ignore + assert plugins[1].options == {} # type: ignore assert config.asked_for == ['plugin1', 'plugin2'] # The order matters... @@ -125,13 +131,13 @@ def coverage_init(reg, options): plugins = list(Plugins.load_plugins(["plugin2", "plugin1"], config)) assert len(plugins) == 2 - assert plugins[0].options == {} - assert plugins[1].this_is == "me" - assert plugins[1].options == {'a': 'second'} + assert plugins[0].options == {} # type: ignore + assert plugins[1].this_is == "me" # type: ignore + assert plugins[1].options == {'a': 'second'} # type: ignore def test_cant_import(self) -> None: with pytest.raises(ImportError, match="No module named '?plugin_not_there'?"): - _ = Plugins.load_plugins(["plugin_not_there"], None) + _ = Plugins.load_plugins(["plugin_not_there"], NullConfig()) def test_plugin_must_define_coverage_init(self) -> None: self.make_file("no_plugin.py", """\ @@ -140,7 +146,7 @@ def test_plugin_must_define_coverage_init(self) -> None: """) msg_pat = "Plugin module 'no_plugin' didn't define a coverage_init function" with pytest.raises(PluginError, match=msg_pat): - list(Plugins.load_plugins(["no_plugin"], None)) + list(Plugins.load_plugins(["no_plugin"], NullConfig())) class PluginTest(CoverageTest): @@ -316,7 +322,7 @@ def test_plugin1(self) -> None: _, statements, _, _ = cov.analysis(zzfile) assert statements == [105, 106, 107, 205, 206, 207] - def make_render_and_caller(self): + def make_render_and_caller(self) -> None: """Make the render.py and caller.py files we need.""" # plugin2 emulates a dynamic tracing plugin: the caller's locals # are examined to determine the source file and line number. @@ -352,7 +358,7 @@ def helper(x): # will try to read the actual source files, so make some # source files. - def lines(n): + def lines(n: int) -> str: """Make a string with n lines of text.""" return "".join("line %d\n" % i for i in range(n)) @@ -582,7 +588,7 @@ def coverage_init(reg, options): class BadFileTracerTest(FileTracerTest): """Test error handling around file tracer plugins.""" - def run_plugin(self, module_name): + def run_plugin(self, module_name: str) -> Coverage: """Run a plugin with the given module_name. Uses a few fixed Python files. @@ -614,7 +620,14 @@ def g(x): cov.save() # pytest-cov does a save after stop, so we'll do it too. return cov - def run_bad_plugin(self, module_name, plugin_name, our_error=True, excmsg=None, excmsgs=None): + def run_bad_plugin( + self, + module_name: str, + plugin_name: str, + our_error: bool = True, + excmsg: Optional[str] = None, + excmsgs: Optional[List[str]] = None, + ) -> None: """Run a file, and see that the plugin failed. `module_name` and `plugin_name` is the module and name of the plugin to @@ -636,7 +649,7 @@ def run_bad_plugin(self, module_name, plugin_name, our_error=True, excmsg=None, self.run_plugin(module_name) stderr = self.stderr() - stderr += "".join(w.message.args[0] for w in warns) + stderr += "".join(str(w.message) for w in warns) if our_error: # The exception we're causing should only appear once. assert stderr.count("# Oh noes!") == 1 @@ -647,9 +660,9 @@ def run_bad_plugin(self, module_name, plugin_name, our_error=True, excmsg=None, # or: # Disabling plug-in '...' due to an exception: print([str(w) for w in warns.list]) - warns = [w for w in warns.list if issubclass(w.category, CoverageWarning)] - assert len(warns) == 1 - warnmsg = warns[0].message.args[0] + warnings = [w for w in warns.list if issubclass(w.category, CoverageWarning)] + assert len(warnings) == 1 + warnmsg = str(warnings[0].message) assert f"Disabling plug-in '{module_name}.{plugin_name}' due to " in warnmsg if excmsg: @@ -943,6 +956,7 @@ def test_configurer_plugin(self) -> None: cov.start() cov.stop() # pragma: nested excluded = cov.get_option("report:exclude_lines") + assert isinstance(excluded, list) assert "pragma: custom" in excluded assert "pragma: or whatever" in excluded @@ -950,7 +964,7 @@ def test_configurer_plugin(self) -> None: class DynamicContextPluginTest(CoverageTest): """Tests of plugins that implement `dynamic_context`.""" - def make_plugin_capitalized_testnames(self, filename): + def make_plugin_capitalized_testnames(self, filename: str) -> None: """Create a dynamic context plugin that capitalizes the part after 'test_'.""" self.make_file(filename, """\ from coverage import CoveragePlugin @@ -967,7 +981,7 @@ def coverage_init(reg, options): reg.add_dynamic_context(Plugin()) """) - def make_plugin_track_render(self, filename): + def make_plugin_track_render(self, filename: str) -> None: """Make a dynamic context plugin that tracks 'render_' functions.""" self.make_file(filename, """\ from coverage import CoveragePlugin @@ -1022,7 +1036,7 @@ def build_full_html(): return html """) - def run_all_functions(self, cov, suite_name): # pragma: nested + def run_all_functions(self, cov: Coverage, suite_name: str) -> None: # pragma: nested """Run all functions in `suite_name` under coverage.""" cov.start() suite = import_local_file(suite_name) @@ -1104,7 +1118,7 @@ def test_plugin_with_test_function(self) -> None: ] assert expected == sorted(data.measured_contexts()) - def assert_context_lines(context, lines): + def assert_context_lines(context: str, lines: List[TLineNo]) -> None: data.set_query_context(context) assert lines == sorted_lines(data, filenames['rendering.py']) @@ -1142,7 +1156,7 @@ def test_multiple_plugins(self) -> None: ] assert expected == sorted(data.measured_contexts()) - def assert_context_lines(context, lines): + def assert_context_lines(context: str, lines: List[TLineNo]) -> None: data.set_query_context(context) assert lines == sorted_lines(data, filenames['rendering.py']) diff --git a/tox.ini b/tox.ini index 26efddeb3..133dfd7c4 100644 --- a/tox.ini +++ b/tox.ini @@ -102,9 +102,8 @@ setenv = T3=tests/test_config.py tests/test_context.py tests/test_coverage.py tests/test_data.py tests/test_debug.py tests/test_execfile.py T4=tests/test_filereporter.py tests/test_files.py tests/test_goldtest.py tests/test_html.py tests/test_json.py tests/test_lcov.py T5=tests/test_misc.py tests/test_mixins.py tests/test_numbits.py tests/test_oddball.py tests/test_parser.py tests/test_phystokens.py - T6=tests/test_process.py tests/test_python.py tests/test_report.py tests/test_results.py tests/test_setup.py + T6=tests/test_plugins.py tests/test_process.py tests/test_python.py tests/test_report.py tests/test_results.py tests/test_setup.py T7=tests/test_summary.py tests/test_templite.py tests/test_testing.py tests/test_venv.py tests/test_version.py tests/test_xml.py - # not done yet: test_plugins.py TYPEABLE_T={env:T1} {env:T2} {env:T3} {env:T4} {env:T5} {env:T6} {env:T7} TYPEABLE=coverage {env:TYPEABLE_T} From b5b223723fd1aeaa8ed650b8440b4b8c08f8e378 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Thu, 12 Jan 2023 20:51:58 -0500 Subject: [PATCH 007/139] mypy: all of coverage/ and tests/ are checked --- CHANGES.rst | 2 +- pyproject.toml | 1 + tests/modules/plugins/a_plugin.py | 10 +++++- tests/modules/plugins/another.py | 11 ++++-- tests/modules/process_test/try_execfile.py | 14 +++++--- tests/plugin1.py | 35 ++++++++++++------- tests/plugin2.py | 40 +++++++++++++++------- tests/plugin_config.py | 15 ++++++-- tox.ini | 10 +----- 9 files changed, 91 insertions(+), 47 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index 82c80efb3..dc05aa19e 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -20,7 +20,7 @@ development at the same time, such as 4.5.x and 5.0. Unreleased ---------- -Nothing yet. +- Typing: all product and test code has type annotations. .. _changes_7-0-5: diff --git a/pyproject.toml b/pyproject.toml index 561ff9f77..90c4f0800 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -26,4 +26,5 @@ warn_unused_ignores = true exclude = """(?x)( ^coverage/fullcoverage/encodings\\.py$ # can't import things into it. + | ^tests/balance_xdist_plugin\\.py$ # not part of our test suite. )""" diff --git a/tests/modules/plugins/a_plugin.py b/tests/modules/plugins/a_plugin.py index 0cc96e5af..2122e869f 100644 --- a/tests/modules/plugins/a_plugin.py +++ b/tests/modules/plugins/a_plugin.py @@ -1,11 +1,19 @@ """A plugin for tests to reference.""" +from __future__ import annotations + +from typing import Any + from coverage import CoveragePlugin +from coverage.plugin_support import Plugins class Plugin(CoveragePlugin): pass -def coverage_init(reg, options): +def coverage_init( + reg: Plugins, + options: Any, # pylint: disable=unused-argument +) -> None: reg.add_file_tracer(Plugin()) diff --git a/tests/modules/plugins/another.py b/tests/modules/plugins/another.py index dfe03c973..a61459031 100644 --- a/tests/modules/plugins/another.py +++ b/tests/modules/plugins/another.py @@ -3,12 +3,19 @@ """A plugin for tests to reference.""" -from coverage import CoveragePlugin +from __future__ import annotations + +from typing import Any +from coverage import CoveragePlugin +from coverage.plugin_support import Plugins class Plugin(CoveragePlugin): pass -def coverage_init(reg, options): +def coverage_init( + reg: Plugins, + options: Any, # pylint: disable=unused-argument +) -> None: reg.add_file_tracer(Plugin()) diff --git a/tests/modules/process_test/try_execfile.py b/tests/modules/process_test/try_execfile.py index 2c741662b..ad97a23b9 100644 --- a/tests/modules/process_test/try_execfile.py +++ b/tests/modules/process_test/try_execfile.py @@ -20,17 +20,21 @@ """ +from __future__ import annotations + import itertools import json import os import sys +from typing import Any, List + # sys.path varies by execution environments. Coverage.py uses setuptools to # make console scripts, which means pkg_resources is imported. pkg_resources # removes duplicate entries from sys.path. So we do that too, since the extra # entries don't affect the running of the program. -def same_file(p1, p2): +def same_file(p1: str, p2: str) -> bool: """Determine if `p1` and `p2` refer to the same existing file.""" if not p1: return not p2 @@ -45,9 +49,9 @@ def same_file(p1, p2): norm2 = os.path.normcase(os.path.normpath(p2)) return norm1 == norm2 -def without_same_files(filenames): +def without_same_files(filenames: List[str]) -> List[str]: """Return the list `filenames` with duplicates (by same_file) removed.""" - reduced = [] + reduced: List[str] = [] for filename in filenames: if not any(same_file(filename, other) for other in reduced): reduced.append(filename) @@ -59,7 +63,7 @@ def without_same_files(filenames): import __main__ -def my_function(a): +def my_function(a: Any) -> str: """A function to force execution of module-level values.""" return f"my_fn({a!r})" @@ -71,7 +75,7 @@ def my_function(a): # A more compact ad-hoc grouped-by-first-letter list of builtins. CLUMPS = "ABC,DEF,GHI,JKLMN,OPQR,ST,U,VWXYZ_,ab,cd,efg,hij,lmno,pqr,stuvwxyz".split(",") -def word_group(w): +def word_group(w: str) -> int: """Figure out which CLUMP the first letter of w is in.""" for i, clump in enumerate(CLUMPS): if w[0] in clump: diff --git a/tests/plugin1.py b/tests/plugin1.py index 3283fbdae..4848eaff5 100644 --- a/tests/plugin1.py +++ b/tests/plugin1.py @@ -3,28 +3,34 @@ """A file tracer plugin for test_plugins.py to import.""" +from __future__ import annotations + import os.path -import coverage +from types import FrameType +from typing import Any, Optional, Set, Tuple, Union +from coverage import CoveragePlugin, FileReporter, FileTracer +from coverage.plugin_support import Plugins +from coverage.types import TLineNo -class Plugin(coverage.CoveragePlugin): +class Plugin(CoveragePlugin): """A file tracer plugin to import, so that it isn't in the test's current directory.""" - def file_tracer(self, filename): + def file_tracer(self, filename: str) -> Optional[FileTracer]: """Trace only files named xyz.py""" if "xyz.py" in filename: - return FileTracer(filename) + return MyFileTracer(filename) return None - def file_reporter(self, filename): - return FileReporter(filename) + def file_reporter(self, filename: str) -> Union[FileReporter, str]: + return MyFileReporter(filename) -class FileTracer(coverage.FileTracer): +class MyFileTracer(FileTracer): """A FileTracer emulating a simple static plugin.""" - def __init__(self, filename): + def __init__(self, filename: str) -> None: """Claim that */*xyz.py was actually sourced from /src/*ABC.zz""" self._filename = filename self._source_filename = os.path.join( @@ -32,21 +38,24 @@ def __init__(self, filename): os.path.basename(filename.replace("xyz.py", "ABC.zz")) ) - def source_filename(self): + def source_filename(self) -> str: return self._source_filename - def line_number_range(self, frame): + def line_number_range(self, frame: FrameType) -> Tuple[TLineNo, TLineNo]: """Map the line number X to X05,X06,X07.""" lineno = frame.f_lineno return lineno*100+5, lineno*100+7 -class FileReporter(coverage.FileReporter): +class MyFileReporter(FileReporter): """Dead-simple FileReporter.""" - def lines(self): + def lines(self) -> Set[TLineNo]: return {105, 106, 107, 205, 206, 207} -def coverage_init(reg, options): # pylint: disable=unused-argument +def coverage_init( + reg: Plugins, + options: Any, # pylint: disable=unused-argument +) -> None: """Called by coverage to initialize the plugins here.""" reg.add_file_tracer(Plugin()) diff --git a/tests/plugin2.py b/tests/plugin2.py index 60d16206b..5cb8fbb6f 100644 --- a/tests/plugin2.py +++ b/tests/plugin2.py @@ -3,9 +3,16 @@ """A file tracer plugin for test_plugins.py to import.""" +from __future__ import annotations + import os.path -import coverage +from types import FrameType +from typing import Any, Optional, Set, Tuple + +from coverage import CoveragePlugin, FileReporter, FileTracer +from coverage.plugin_support import Plugins +from coverage.types import TLineNo try: import third.render # pylint: disable=unused-import @@ -16,43 +23,50 @@ pass -class Plugin(coverage.CoveragePlugin): +class Plugin(CoveragePlugin): """A file tracer plugin for testing.""" - def file_tracer(self, filename): + def file_tracer(self, filename: str) -> Optional[FileTracer]: if "render.py" in filename: return RenderFileTracer() return None - def file_reporter(self, filename): - return FileReporter(filename) + def file_reporter(self, filename: str) -> FileReporter: + return MyFileReporter(filename) -class RenderFileTracer(coverage.FileTracer): +class RenderFileTracer(FileTracer): """A FileTracer using information from the caller.""" - def has_dynamic_source_filename(self): + def has_dynamic_source_filename(self) -> bool: return True - def dynamic_source_filename(self, filename, frame): + def dynamic_source_filename( + self, + filename: str, + frame: FrameType, + ) -> Optional[str]: if frame.f_code.co_name != "render": return None - source_filename = os.path.abspath(frame.f_locals['filename']) + source_filename: str = os.path.abspath(frame.f_locals['filename']) return source_filename - def line_number_range(self, frame): + def line_number_range(self, frame: FrameType) -> Tuple[TLineNo, TLineNo]: lineno = frame.f_locals['linenum'] return lineno, lineno+1 -class FileReporter(coverage.FileReporter): +class MyFileReporter(FileReporter): """A goofy file reporter.""" - def lines(self): + def lines(self) -> Set[TLineNo]: # Goofy test arrangement: claim that the file has as many lines as the # number in its name. num = os.path.basename(self.filename).split(".")[0].split("_")[1] return set(range(1, int(num)+1)) -def coverage_init(reg, options): # pylint: disable=unused-argument +def coverage_init( + reg: Plugins, + options: Any, # pylint: disable=unused-argument +) -> None: """Called by coverage to initialize the plugins here.""" reg.add_file_tracer(Plugin()) diff --git a/tests/plugin_config.py b/tests/plugin_config.py index c4d3cf65b..bb6893e3e 100644 --- a/tests/plugin_config.py +++ b/tests/plugin_config.py @@ -3,20 +3,29 @@ """A configuring plugin for test_plugins.py to import.""" +from __future__ import annotations + +from typing import Any, List, cast + import coverage +from coverage.plugin_support import Plugins +from coverage.types import TConfigurable class Plugin(coverage.CoveragePlugin): """A configuring plugin for testing.""" - def configure(self, config): + def configure(self, config: TConfigurable) -> None: """Configure all the things!""" opt_name = "report:exclude_lines" - exclude_lines = config.get_option(opt_name) + exclude_lines = cast(List[str], config.get_option(opt_name)) exclude_lines.append(r"pragma: custom") exclude_lines.append(r"pragma: or whatever") config.set_option(opt_name, exclude_lines) -def coverage_init(reg, options): # pylint: disable=unused-argument +def coverage_init( + reg: Plugins, + options: Any, # pylint: disable=unused-argument +) -> None: """Called by coverage to initialize the plugins here.""" reg.add_configurer(Plugin()) diff --git a/tox.ini b/tox.ini index 133dfd7c4..03293b85d 100644 --- a/tox.ini +++ b/tox.ini @@ -97,15 +97,7 @@ deps = setenv = {[testenv]setenv} - T1=tests/conftest.py tests/coveragetest.py tests/goldtest.py tests/helpers.py tests/mixins.py tests/osinfo.py - T2=tests/test_annotate.py tests/test_api.py tests/test_arcs.py tests/test_cmdline.py tests/test_collector.py tests/test_concurrency.py - T3=tests/test_config.py tests/test_context.py tests/test_coverage.py tests/test_data.py tests/test_debug.py tests/test_execfile.py - T4=tests/test_filereporter.py tests/test_files.py tests/test_goldtest.py tests/test_html.py tests/test_json.py tests/test_lcov.py - T5=tests/test_misc.py tests/test_mixins.py tests/test_numbits.py tests/test_oddball.py tests/test_parser.py tests/test_phystokens.py - T6=tests/test_plugins.py tests/test_process.py tests/test_python.py tests/test_report.py tests/test_results.py tests/test_setup.py - T7=tests/test_summary.py tests/test_templite.py tests/test_testing.py tests/test_venv.py tests/test_version.py tests/test_xml.py - TYPEABLE_T={env:T1} {env:T2} {env:T3} {env:T4} {env:T5} {env:T6} {env:T7} - TYPEABLE=coverage {env:TYPEABLE_T} + TYPEABLE=coverage tests commands = # PYVERSIONS From 2be37e3d695af882ccedd71168f82ffd12bca961 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Thu, 12 Jan 2023 21:01:14 -0500 Subject: [PATCH 008/139] mypy: turn on disallow_untyped_calls --- coverage/data.py | 1 + coverage/xmlreport.py | 23 ++++++++++++++--------- pyproject.toml | 2 +- 3 files changed, 16 insertions(+), 10 deletions(-) diff --git a/coverage/data.py b/coverage/data.py index ee4f007dd..c737d5939 100644 --- a/coverage/data.py +++ b/coverage/data.py @@ -35,6 +35,7 @@ def line_counts(data: CoverageData, fullpath: bool = False) -> Dict[str, int]: """ summ = {} + filename_fn: Callable[[str], str] if fullpath: # pylint: disable=unnecessary-lambda-assignment filename_fn = lambda f: f diff --git a/coverage/xmlreport.py b/coverage/xmlreport.py index 86fdc18f2..6867f2e92 100644 --- a/coverage/xmlreport.py +++ b/coverage/xmlreport.py @@ -12,7 +12,7 @@ import xml.dom.minidom from dataclasses import dataclass -from typing import Dict, IO, Iterable, Optional, TYPE_CHECKING, cast +from typing import Any, Dict, IO, Iterable, Optional, TYPE_CHECKING, cast from coverage import __url__, __version__, files from coverage.misc import isolate_module, human_sorted, human_sorted_items @@ -48,6 +48,11 @@ class PackageData: branches: int +def appendChild(parent: Any, child: Any) -> None: + """Append a child to a parent, in a way mypy will shut up about.""" + parent.appendChild(child) + + class XmlReporter: """A reporter for writing Cobertura-style XML coverage results.""" @@ -103,9 +108,9 @@ def report(self, morfs: Optional[Iterable[TMorf]], outfile: Optional[IO[str]] = # Populate the XML DOM with the source info. for path in human_sorted(self.source_paths): xsource = self.xml_out.createElement("source") - xsources.appendChild(xsource) + appendChild(xsources, xsource) txt = self.xml_out.createTextNode(path) - xsource.appendChild(txt) + appendChild(xsource, txt) lnum_tot, lhits_tot = 0, 0 bnum_tot, bhits_tot = 0, 0 @@ -116,11 +121,11 @@ def report(self, morfs: Optional[Iterable[TMorf]], outfile: Optional[IO[str]] = # Populate the XML DOM with the package info. for pkg_name, pkg_data in human_sorted_items(self.packages.items()): xpackage = self.xml_out.createElement("package") - xpackages.appendChild(xpackage) + appendChild(xpackages, xpackage) xclasses = self.xml_out.createElement("classes") - xpackage.appendChild(xclasses) + appendChild(xpackage, xclasses) for _, class_elt in human_sorted_items(pkg_data.elements.items()): - xclasses.appendChild(class_elt) + appendChild(xclasses, class_elt) xpackage.setAttribute("name", pkg_name.replace(os.sep, '.')) xpackage.setAttribute("line-rate", rate(pkg_data.hits, pkg_data.lines)) if has_arcs: @@ -187,10 +192,10 @@ def xml_file(self, fr: FileReporter, analysis: Analysis, has_arcs: bool) -> None xclass: xml.dom.minidom.Element = self.xml_out.createElement("class") - xclass.appendChild(self.xml_out.createElement("methods")) + appendChild(xclass, self.xml_out.createElement("methods")) xlines = self.xml_out.createElement("lines") - xclass.appendChild(xlines) + appendChild(xclass, xlines) xclass.setAttribute("name", os.path.relpath(rel_name, dirname)) xclass.setAttribute("filename", rel_name.replace("\\", "/")) @@ -219,7 +224,7 @@ def xml_file(self, fr: FileReporter, analysis: Analysis, has_arcs: bool) -> None if line in missing_branch_arcs: annlines = ["exit" if b < 0 else str(b) for b in missing_branch_arcs[line]] xline.setAttribute("missing-branches", ",".join(annlines)) - xlines.appendChild(xline) + appendChild(xlines, xline) class_lines = len(analysis.statements) class_hits = class_lines - len(analysis.missing) diff --git a/pyproject.toml b/pyproject.toml index 90c4f0800..4f2b59368 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -11,7 +11,7 @@ check_untyped_defs = true disallow_any_generics = true disallow_incomplete_defs = true disallow_subclassing_any = true -disallow_untyped_calls = false +disallow_untyped_calls = true disallow_untyped_decorators = false disallow_untyped_defs = true follow_imports = "silent" From b059a67fd1fe5d514f7c283f5ab99052e1cea15f Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Thu, 12 Jan 2023 21:02:54 -0500 Subject: [PATCH 009/139] mypy: turn on disallow_untyped_decorators --- pyproject.toml | 3 +-- tests/test_oddball.py | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 4f2b59368..b21ba3b76 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -6,13 +6,12 @@ requires = ['setuptools'] build-backend = 'setuptools.build_meta' [tool.mypy] -# mypy settings started from https://quantlane.com/blog/type-checking-large-codebase/ check_untyped_defs = true disallow_any_generics = true disallow_incomplete_defs = true disallow_subclassing_any = true disallow_untyped_calls = true -disallow_untyped_decorators = false +disallow_untyped_decorators = true disallow_untyped_defs = true follow_imports = "silent" ignore_missing_imports = true diff --git a/tests/test_oddball.py b/tests/test_oddball.py index 23e3ce9d0..e4147dc6c 100644 --- a/tests/test_oddball.py +++ b/tests/test_oddball.py @@ -155,7 +155,7 @@ class MemoryLeakTest(CoverageTest): It may still fail occasionally, especially on PyPy. """ - @flaky + @flaky # type: ignore[misc] @pytest.mark.skipif(not env.C_TRACER, reason="Only the C tracer has refcounting issues") def test_for_leaks(self) -> None: # Our original bad memory leak only happened on line numbers > 255, so From 685f682b2ed33c6fbcfafa4deb38d1c798a14b45 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Fri, 13 Jan 2023 06:58:11 -0500 Subject: [PATCH 010/139] chore: make upgrade --- doc/requirements.pip | 128 ++++++++++++++--- requirements/dev.pip | 245 ++++++++++++++++++++++---------- requirements/kit.pip | 45 +++--- requirements/light-threads.pip | 6 +- requirements/lint.pip | 251 +++++++++++++++++++++++---------- requirements/pip-tools.pip | 39 +++-- requirements/pip.pip | 6 +- requirements/pytest.pip | 24 ++-- requirements/tox.pip | 18 +-- 9 files changed, 522 insertions(+), 240 deletions(-) diff --git a/doc/requirements.pip b/doc/requirements.pip index c8a729e2f..539175ff4 100644 --- a/doc/requirements.pip +++ b/doc/requirements.pip @@ -4,9 +4,9 @@ # # make upgrade # -alabaster==0.7.12 \ - --hash=sha256:446438bdcca0e05bd45ea2de1668c1d9b032e1a9154c2c259092d77031ddd359 \ - --hash=sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02 +alabaster==0.7.13 \ + --hash=sha256:1ee19aca801bbabb5ba3f5f258e4422dfa86f82f3e9cefb0859b283cdd7f62a3 \ + --hash=sha256:a27a4a084d5e690e16e01e03ad2b2e552c61a65469419b907243193de1a84ae2 # via sphinx babel==2.11.0 \ --hash=sha256:1ad3eca1c885218f6dce2ab67291178944f810a10a9b5f3cb8382a5a232b64fe \ @@ -16,9 +16,95 @@ certifi==2022.12.7 \ --hash=sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3 \ --hash=sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18 # via requests -charset-normalizer==2.1.1 \ - --hash=sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845 \ - --hash=sha256:83e9a75d1911279afd89352c68b45348559d1fc0506b054b346651b5e7fee29f +charset-normalizer==3.0.1 \ + --hash=sha256:00d3ffdaafe92a5dc603cb9bd5111aaa36dfa187c8285c543be562e61b755f6b \ + --hash=sha256:024e606be3ed92216e2b6952ed859d86b4cfa52cd5bc5f050e7dc28f9b43ec42 \ + --hash=sha256:0298eafff88c99982a4cf66ba2efa1128e4ddaca0b05eec4c456bbc7db691d8d \ + --hash=sha256:02a51034802cbf38db3f89c66fb5d2ec57e6fe7ef2f4a44d070a593c3688667b \ + --hash=sha256:083c8d17153ecb403e5e1eb76a7ef4babfc2c48d58899c98fcaa04833e7a2f9a \ + --hash=sha256:0a11e971ed097d24c534c037d298ad32c6ce81a45736d31e0ff0ad37ab437d59 \ + --hash=sha256:0bf2dae5291758b6f84cf923bfaa285632816007db0330002fa1de38bfcb7154 \ + --hash=sha256:0c0a590235ccd933d9892c627dec5bc7511ce6ad6c1011fdf5b11363022746c1 \ + --hash=sha256:0f438ae3532723fb6ead77e7c604be7c8374094ef4ee2c5e03a3a17f1fca256c \ + --hash=sha256:109487860ef6a328f3eec66f2bf78b0b72400280d8f8ea05f69c51644ba6521a \ + --hash=sha256:11b53acf2411c3b09e6af37e4b9005cba376c872503c8f28218c7243582df45d \ + --hash=sha256:12db3b2c533c23ab812c2b25934f60383361f8a376ae272665f8e48b88e8e1c6 \ + --hash=sha256:14e76c0f23218b8f46c4d87018ca2e441535aed3632ca134b10239dfb6dadd6b \ + --hash=sha256:16a8663d6e281208d78806dbe14ee9903715361cf81f6d4309944e4d1e59ac5b \ + --hash=sha256:292d5e8ba896bbfd6334b096e34bffb56161c81408d6d036a7dfa6929cff8783 \ + --hash=sha256:2c03cc56021a4bd59be889c2b9257dae13bf55041a3372d3295416f86b295fb5 \ + --hash=sha256:2e396d70bc4ef5325b72b593a72c8979999aa52fb8bcf03f701c1b03e1166918 \ + --hash=sha256:2edb64ee7bf1ed524a1da60cdcd2e1f6e2b4f66ef7c077680739f1641f62f555 \ + --hash=sha256:31a9ddf4718d10ae04d9b18801bd776693487cbb57d74cc3458a7673f6f34639 \ + --hash=sha256:356541bf4381fa35856dafa6a965916e54bed415ad8a24ee6de6e37deccf2786 \ + --hash=sha256:358a7c4cb8ba9b46c453b1dd8d9e431452d5249072e4f56cfda3149f6ab1405e \ + --hash=sha256:37f8febc8ec50c14f3ec9637505f28e58d4f66752207ea177c1d67df25da5aed \ + --hash=sha256:39049da0ffb96c8cbb65cbf5c5f3ca3168990adf3551bd1dee10c48fce8ae820 \ + --hash=sha256:39cf9ed17fe3b1bc81f33c9ceb6ce67683ee7526e65fde1447c772afc54a1bb8 \ + --hash=sha256:3ae1de54a77dc0d6d5fcf623290af4266412a7c4be0b1ff7444394f03f5c54e3 \ + --hash=sha256:3b590df687e3c5ee0deef9fc8c547d81986d9a1b56073d82de008744452d6541 \ + --hash=sha256:3e45867f1f2ab0711d60c6c71746ac53537f1684baa699f4f668d4c6f6ce8e14 \ + --hash=sha256:3fc1c4a2ffd64890aebdb3f97e1278b0cc72579a08ca4de8cd2c04799a3a22be \ + --hash=sha256:4457ea6774b5611f4bed5eaa5df55f70abde42364d498c5134b7ef4c6958e20e \ + --hash=sha256:44ba614de5361b3e5278e1241fda3dc1838deed864b50a10d7ce92983797fa76 \ + --hash=sha256:4a8fcf28c05c1f6d7e177a9a46a1c52798bfe2ad80681d275b10dcf317deaf0b \ + --hash=sha256:4b0d02d7102dd0f997580b51edc4cebcf2ab6397a7edf89f1c73b586c614272c \ + --hash=sha256:502218f52498a36d6bf5ea77081844017bf7982cdbe521ad85e64cabee1b608b \ + --hash=sha256:503e65837c71b875ecdd733877d852adbc465bd82c768a067badd953bf1bc5a3 \ + --hash=sha256:5995f0164fa7df59db4746112fec3f49c461dd6b31b841873443bdb077c13cfc \ + --hash=sha256:59e5686dd847347e55dffcc191a96622f016bc0ad89105e24c14e0d6305acbc6 \ + --hash=sha256:601f36512f9e28f029d9481bdaf8e89e5148ac5d89cffd3b05cd533eeb423b59 \ + --hash=sha256:608862a7bf6957f2333fc54ab4399e405baad0163dc9f8d99cb236816db169d4 \ + --hash=sha256:62595ab75873d50d57323a91dd03e6966eb79c41fa834b7a1661ed043b2d404d \ + --hash=sha256:70990b9c51340e4044cfc394a81f614f3f90d41397104d226f21e66de668730d \ + --hash=sha256:71140351489970dfe5e60fc621ada3e0f41104a5eddaca47a7acb3c1b851d6d3 \ + --hash=sha256:72966d1b297c741541ca8cf1223ff262a6febe52481af742036a0b296e35fa5a \ + --hash=sha256:74292fc76c905c0ef095fe11e188a32ebd03bc38f3f3e9bcb85e4e6db177b7ea \ + --hash=sha256:761e8904c07ad053d285670f36dd94e1b6ab7f16ce62b9805c475b7aa1cffde6 \ + --hash=sha256:772b87914ff1152b92a197ef4ea40efe27a378606c39446ded52c8f80f79702e \ + --hash=sha256:79909e27e8e4fcc9db4addea88aa63f6423ebb171db091fb4373e3312cb6d603 \ + --hash=sha256:7e189e2e1d3ed2f4aebabd2d5b0f931e883676e51c7624826e0a4e5fe8a0bf24 \ + --hash=sha256:7eb33a30d75562222b64f569c642ff3dc6689e09adda43a082208397f016c39a \ + --hash=sha256:81d6741ab457d14fdedc215516665050f3822d3e56508921cc7239f8c8e66a58 \ + --hash=sha256:8499ca8f4502af841f68135133d8258f7b32a53a1d594aa98cc52013fff55678 \ + --hash=sha256:84c3990934bae40ea69a82034912ffe5a62c60bbf6ec5bc9691419641d7d5c9a \ + --hash=sha256:87701167f2a5c930b403e9756fab1d31d4d4da52856143b609e30a1ce7160f3c \ + --hash=sha256:88600c72ef7587fe1708fd242b385b6ed4b8904976d5da0893e31df8b3480cb6 \ + --hash=sha256:8ac7b6a045b814cf0c47f3623d21ebd88b3e8cf216a14790b455ea7ff0135d18 \ + --hash=sha256:8b8af03d2e37866d023ad0ddea594edefc31e827fee64f8de5611a1dbc373174 \ + --hash=sha256:8c7fe7afa480e3e82eed58e0ca89f751cd14d767638e2550c77a92a9e749c317 \ + --hash=sha256:8eade758719add78ec36dc13201483f8e9b5d940329285edcd5f70c0a9edbd7f \ + --hash=sha256:911d8a40b2bef5b8bbae2e36a0b103f142ac53557ab421dc16ac4aafee6f53dc \ + --hash=sha256:93ad6d87ac18e2a90b0fe89df7c65263b9a99a0eb98f0a3d2e079f12a0735837 \ + --hash=sha256:95dea361dd73757c6f1c0a1480ac499952c16ac83f7f5f4f84f0658a01b8ef41 \ + --hash=sha256:9ab77acb98eba3fd2a85cd160851816bfce6871d944d885febf012713f06659c \ + --hash=sha256:9cb3032517f1627cc012dbc80a8ec976ae76d93ea2b5feaa9d2a5b8882597579 \ + --hash=sha256:9cf4e8ad252f7c38dd1f676b46514f92dc0ebeb0db5552f5f403509705e24753 \ + --hash=sha256:9d9153257a3f70d5f69edf2325357251ed20f772b12e593f3b3377b5f78e7ef8 \ + --hash=sha256:a152f5f33d64a6be73f1d30c9cc82dfc73cec6477ec268e7c6e4c7d23c2d2291 \ + --hash=sha256:a16418ecf1329f71df119e8a65f3aa68004a3f9383821edcb20f0702934d8087 \ + --hash=sha256:a60332922359f920193b1d4826953c507a877b523b2395ad7bc716ddd386d866 \ + --hash=sha256:a8d0fc946c784ff7f7c3742310cc8a57c5c6dc31631269876a88b809dbeff3d3 \ + --hash=sha256:ab5de034a886f616a5668aa5d098af2b5385ed70142090e2a31bcbd0af0fdb3d \ + --hash=sha256:c22d3fe05ce11d3671297dc8973267daa0f938b93ec716e12e0f6dee81591dc1 \ + --hash=sha256:c2ac1b08635a8cd4e0cbeaf6f5e922085908d48eb05d44c5ae9eabab148512ca \ + --hash=sha256:c512accbd6ff0270939b9ac214b84fb5ada5f0409c44298361b2f5e13f9aed9e \ + --hash=sha256:c75ffc45f25324e68ab238cb4b5c0a38cd1c3d7f1fb1f72b5541de469e2247db \ + --hash=sha256:c95a03c79bbe30eec3ec2b7f076074f4281526724c8685a42872974ef4d36b72 \ + --hash=sha256:cadaeaba78750d58d3cc6ac4d1fd867da6fc73c88156b7a3212a3cd4819d679d \ + --hash=sha256:cd6056167405314a4dc3c173943f11249fa0f1b204f8b51ed4bde1a9cd1834dc \ + --hash=sha256:db72b07027db150f468fbada4d85b3b2729a3db39178abf5c543b784c1254539 \ + --hash=sha256:df2c707231459e8a4028eabcd3cfc827befd635b3ef72eada84ab13b52e1574d \ + --hash=sha256:e62164b50f84e20601c1ff8eb55620d2ad25fb81b59e3cd776a1902527a788af \ + --hash=sha256:e696f0dd336161fca9adbb846875d40752e6eba585843c768935ba5c9960722b \ + --hash=sha256:eaa379fcd227ca235d04152ca6704c7cb55564116f8bc52545ff357628e10602 \ + --hash=sha256:ebea339af930f8ca5d7a699b921106c6e29c617fe9606fa7baa043c1cdae326f \ + --hash=sha256:f4c39b0e3eac288fedc2b43055cfc2ca7a60362d0e5e87a637beac5d801ef478 \ + --hash=sha256:f5057856d21e7586765171eac8b9fc3f7d44ef39425f85dbcccb13b3ebea806c \ + --hash=sha256:f6f45710b4459401609ebebdbcfb34515da4fc2aa886f95107f556ac69a9147e \ + --hash=sha256:f97e83fa6c25693c7a35de154681fcc257c1c41b38beb0304b9c4d2d9e164479 \ + --hash=sha256:f9d0c5c045a3ca9bedfc35dca8526798eb91a07aa7a2c0fee134c6c6f321cbd7 \ + --hash=sha256:ff6f3db31555657f3163b15a6b7c6938d08df7adbfc9dd13d9d19edad678f1e8 # via requests cogapp==3.3.0 \ --hash=sha256:1be95183f70282422d594fa42426be6923070a4bd8335621f6347f3aeee81db0 \ @@ -42,9 +128,9 @@ imagesize==1.4.1 \ --hash=sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b \ --hash=sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a # via sphinx -importlib-metadata==5.2.0 \ - --hash=sha256:0eafa39ba42bf225fc00e67f701d71f85aead9f878569caf13c3724f704b970f \ - --hash=sha256:404d48d62bba0b7a77ff9d405efd91501bef2e67ff4ace0bed40a0cf28c3c7cd +importlib-metadata==6.0.0 \ + --hash=sha256:7efb448ec9a5e313a57655d35aa54cd3e01b7e1fbcf72dce1bf06119420f5bad \ + --hash=sha256:e354bedeb60efa6affdcc8ae121b73544a7aa74156d047311948f6d711cd378d # via # sphinx # sphinxcontrib-spelling @@ -98,9 +184,9 @@ markupsafe==2.1.1 \ --hash=sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a \ --hash=sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7 # via jinja2 -packaging==22.0 \ - --hash=sha256:2198ec20bd4c017b8f9717e00f0c8714076fc2fd93816750ab48e2c41de2cfd3 \ - --hash=sha256:957e2148ba0e1a3b282772e791ef1d8083648bc131c8ab0c1feba110ce1146c3 +packaging==23.0 \ + --hash=sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2 \ + --hash=sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97 # via sphinx pyenchant==3.2.2 \ --hash=sha256:1cf830c6614362a78aab78d50eaf7c6c93831369c52e1bb64ffae1df0341e637 \ @@ -110,17 +196,17 @@ pyenchant==3.2.2 \ # via # -r doc/requirements.in # sphinxcontrib-spelling -pygments==2.13.0 \ - --hash=sha256:56a8508ae95f98e2b9bdf93a6be5ae3f7d8af858b43e02c5a2ff083726be40c1 \ - --hash=sha256:f643f331ab57ba3c9d89212ee4a2dabc6e94f117cf4eefde99a0574720d14c42 +pygments==2.14.0 \ + --hash=sha256:b3ed06a9e8ac9a9aae5a6f5dbe78a8a58655d17b43b93c078f094ddc476ae297 \ + --hash=sha256:fa7bd7bd2771287c0de303af8bfdfc731f51bd2c6a47ab69d117138893b82717 # via sphinx pytz==2022.7 \ --hash=sha256:7ccfae7b4b2c067464a6733c6261673fdb8fd1be905460396b97a073e9fa683a \ --hash=sha256:93007def75ae22f7cd991c84e02d434876818661f8df9ad5df9e950ff4e52cfd # via babel -requests==2.28.1 \ - --hash=sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983 \ - --hash=sha256:8fefa2a1a1365bf5520aac41836fbee479da67864514bdb821f31ce07ce65349 +requests==2.28.2 \ + --hash=sha256:64299f4909223da747622c030b781c0d7811e359c37124b4bd368fb8c6518baa \ + --hash=sha256:98b1b2782e3c6c4904938b84c0eb932721069dfdb9134313beff7c83c2df24bf # via sphinx six==1.16.0 \ --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ @@ -196,9 +282,9 @@ typing-extensions==4.4.0 \ --hash=sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa \ --hash=sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e # via importlib-metadata -urllib3==1.26.13 \ - --hash=sha256:47cc05d99aaa09c9e72ed5809b60e7ba354e64b59c9c173ac3018642d8bb41fc \ - --hash=sha256:c083dd0dce68dbfbe1129d5271cb90f9447dea7d52097c6e0126120c521ddea8 +urllib3==1.26.14 \ + --hash=sha256:076907bf8fd355cde77728471316625a4d2f7e713c125f51953bb5b3eecf4f72 \ + --hash=sha256:75edcdc2f7d85b137124a6c3c9fc3933cdeaa12ecb9a6a959f22797a0feca7e1 # via requests zipp==3.11.0 \ --hash=sha256:83a28fcb75844b5c0cdaf5aa4003c2d728c77e05f5aeabe8e95e56727005fbaa \ diff --git a/requirements/dev.pip b/requirements/dev.pip index e0a085888..ffe07c03a 100644 --- a/requirements/dev.pip +++ b/requirements/dev.pip @@ -4,9 +4,9 @@ # # make upgrade # -astroid==2.12.13 \ - --hash=sha256:10e0ad5f7b79c435179d0d0f0df69998c4eef4597534aae44910db060baeb907 \ - --hash=sha256:1493fe8bd3dfd73dc35bd53c9d5b6e49ead98497c47b2307662556a5692d29d7 +astroid==2.13.2 \ + --hash=sha256:3bc7834720e1a24ca797fd785d77efb14f7a28ee8e635ef040b6e2d80ccb3303 \ + --hash=sha256:8f6a8d40c4ad161d6fc419545ae4b2f275ed86d1c989c97825772120842ee0d2 # via pylint attrs==22.2.0 \ --hash=sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836 \ @@ -19,17 +19,103 @@ bleach==5.0.1 \ --hash=sha256:085f7f33c15bd408dd9b17a4ad77c577db66d76203e5984b1bd59baeee948b2a \ --hash=sha256:0d03255c47eb9bd2f26aa9bb7f2107732e7e8fe195ca2f64709fcf3b0a4a085c # via readme-renderer -build==0.9.0 \ - --hash=sha256:1a07724e891cbd898923145eb7752ee7653674c511378eb9c7691aab1612bc3c \ - --hash=sha256:38a7a2b7a0bdc61a42a0a67509d88c71ecfc37b393baba770fae34e20929ff69 +build==0.10.0 \ + --hash=sha256:af266720050a66c893a6096a2f410989eeac74ff9a68ba194b3f6473e8e26171 \ + --hash=sha256:d5b71264afdb5951d6704482aac78de887c80691c52b88a9ad195983ca2c9269 # via check-manifest certifi==2022.12.7 \ --hash=sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3 \ --hash=sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18 # via requests -charset-normalizer==2.1.1 \ - --hash=sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845 \ - --hash=sha256:83e9a75d1911279afd89352c68b45348559d1fc0506b054b346651b5e7fee29f +charset-normalizer==3.0.1 \ + --hash=sha256:00d3ffdaafe92a5dc603cb9bd5111aaa36dfa187c8285c543be562e61b755f6b \ + --hash=sha256:024e606be3ed92216e2b6952ed859d86b4cfa52cd5bc5f050e7dc28f9b43ec42 \ + --hash=sha256:0298eafff88c99982a4cf66ba2efa1128e4ddaca0b05eec4c456bbc7db691d8d \ + --hash=sha256:02a51034802cbf38db3f89c66fb5d2ec57e6fe7ef2f4a44d070a593c3688667b \ + --hash=sha256:083c8d17153ecb403e5e1eb76a7ef4babfc2c48d58899c98fcaa04833e7a2f9a \ + --hash=sha256:0a11e971ed097d24c534c037d298ad32c6ce81a45736d31e0ff0ad37ab437d59 \ + --hash=sha256:0bf2dae5291758b6f84cf923bfaa285632816007db0330002fa1de38bfcb7154 \ + --hash=sha256:0c0a590235ccd933d9892c627dec5bc7511ce6ad6c1011fdf5b11363022746c1 \ + --hash=sha256:0f438ae3532723fb6ead77e7c604be7c8374094ef4ee2c5e03a3a17f1fca256c \ + --hash=sha256:109487860ef6a328f3eec66f2bf78b0b72400280d8f8ea05f69c51644ba6521a \ + --hash=sha256:11b53acf2411c3b09e6af37e4b9005cba376c872503c8f28218c7243582df45d \ + --hash=sha256:12db3b2c533c23ab812c2b25934f60383361f8a376ae272665f8e48b88e8e1c6 \ + --hash=sha256:14e76c0f23218b8f46c4d87018ca2e441535aed3632ca134b10239dfb6dadd6b \ + --hash=sha256:16a8663d6e281208d78806dbe14ee9903715361cf81f6d4309944e4d1e59ac5b \ + --hash=sha256:292d5e8ba896bbfd6334b096e34bffb56161c81408d6d036a7dfa6929cff8783 \ + --hash=sha256:2c03cc56021a4bd59be889c2b9257dae13bf55041a3372d3295416f86b295fb5 \ + --hash=sha256:2e396d70bc4ef5325b72b593a72c8979999aa52fb8bcf03f701c1b03e1166918 \ + --hash=sha256:2edb64ee7bf1ed524a1da60cdcd2e1f6e2b4f66ef7c077680739f1641f62f555 \ + --hash=sha256:31a9ddf4718d10ae04d9b18801bd776693487cbb57d74cc3458a7673f6f34639 \ + --hash=sha256:356541bf4381fa35856dafa6a965916e54bed415ad8a24ee6de6e37deccf2786 \ + --hash=sha256:358a7c4cb8ba9b46c453b1dd8d9e431452d5249072e4f56cfda3149f6ab1405e \ + --hash=sha256:37f8febc8ec50c14f3ec9637505f28e58d4f66752207ea177c1d67df25da5aed \ + --hash=sha256:39049da0ffb96c8cbb65cbf5c5f3ca3168990adf3551bd1dee10c48fce8ae820 \ + --hash=sha256:39cf9ed17fe3b1bc81f33c9ceb6ce67683ee7526e65fde1447c772afc54a1bb8 \ + --hash=sha256:3ae1de54a77dc0d6d5fcf623290af4266412a7c4be0b1ff7444394f03f5c54e3 \ + --hash=sha256:3b590df687e3c5ee0deef9fc8c547d81986d9a1b56073d82de008744452d6541 \ + --hash=sha256:3e45867f1f2ab0711d60c6c71746ac53537f1684baa699f4f668d4c6f6ce8e14 \ + --hash=sha256:3fc1c4a2ffd64890aebdb3f97e1278b0cc72579a08ca4de8cd2c04799a3a22be \ + --hash=sha256:4457ea6774b5611f4bed5eaa5df55f70abde42364d498c5134b7ef4c6958e20e \ + --hash=sha256:44ba614de5361b3e5278e1241fda3dc1838deed864b50a10d7ce92983797fa76 \ + --hash=sha256:4a8fcf28c05c1f6d7e177a9a46a1c52798bfe2ad80681d275b10dcf317deaf0b \ + --hash=sha256:4b0d02d7102dd0f997580b51edc4cebcf2ab6397a7edf89f1c73b586c614272c \ + --hash=sha256:502218f52498a36d6bf5ea77081844017bf7982cdbe521ad85e64cabee1b608b \ + --hash=sha256:503e65837c71b875ecdd733877d852adbc465bd82c768a067badd953bf1bc5a3 \ + --hash=sha256:5995f0164fa7df59db4746112fec3f49c461dd6b31b841873443bdb077c13cfc \ + --hash=sha256:59e5686dd847347e55dffcc191a96622f016bc0ad89105e24c14e0d6305acbc6 \ + --hash=sha256:601f36512f9e28f029d9481bdaf8e89e5148ac5d89cffd3b05cd533eeb423b59 \ + --hash=sha256:608862a7bf6957f2333fc54ab4399e405baad0163dc9f8d99cb236816db169d4 \ + --hash=sha256:62595ab75873d50d57323a91dd03e6966eb79c41fa834b7a1661ed043b2d404d \ + --hash=sha256:70990b9c51340e4044cfc394a81f614f3f90d41397104d226f21e66de668730d \ + --hash=sha256:71140351489970dfe5e60fc621ada3e0f41104a5eddaca47a7acb3c1b851d6d3 \ + --hash=sha256:72966d1b297c741541ca8cf1223ff262a6febe52481af742036a0b296e35fa5a \ + --hash=sha256:74292fc76c905c0ef095fe11e188a32ebd03bc38f3f3e9bcb85e4e6db177b7ea \ + --hash=sha256:761e8904c07ad053d285670f36dd94e1b6ab7f16ce62b9805c475b7aa1cffde6 \ + --hash=sha256:772b87914ff1152b92a197ef4ea40efe27a378606c39446ded52c8f80f79702e \ + --hash=sha256:79909e27e8e4fcc9db4addea88aa63f6423ebb171db091fb4373e3312cb6d603 \ + --hash=sha256:7e189e2e1d3ed2f4aebabd2d5b0f931e883676e51c7624826e0a4e5fe8a0bf24 \ + --hash=sha256:7eb33a30d75562222b64f569c642ff3dc6689e09adda43a082208397f016c39a \ + --hash=sha256:81d6741ab457d14fdedc215516665050f3822d3e56508921cc7239f8c8e66a58 \ + --hash=sha256:8499ca8f4502af841f68135133d8258f7b32a53a1d594aa98cc52013fff55678 \ + --hash=sha256:84c3990934bae40ea69a82034912ffe5a62c60bbf6ec5bc9691419641d7d5c9a \ + --hash=sha256:87701167f2a5c930b403e9756fab1d31d4d4da52856143b609e30a1ce7160f3c \ + --hash=sha256:88600c72ef7587fe1708fd242b385b6ed4b8904976d5da0893e31df8b3480cb6 \ + --hash=sha256:8ac7b6a045b814cf0c47f3623d21ebd88b3e8cf216a14790b455ea7ff0135d18 \ + --hash=sha256:8b8af03d2e37866d023ad0ddea594edefc31e827fee64f8de5611a1dbc373174 \ + --hash=sha256:8c7fe7afa480e3e82eed58e0ca89f751cd14d767638e2550c77a92a9e749c317 \ + --hash=sha256:8eade758719add78ec36dc13201483f8e9b5d940329285edcd5f70c0a9edbd7f \ + --hash=sha256:911d8a40b2bef5b8bbae2e36a0b103f142ac53557ab421dc16ac4aafee6f53dc \ + --hash=sha256:93ad6d87ac18e2a90b0fe89df7c65263b9a99a0eb98f0a3d2e079f12a0735837 \ + --hash=sha256:95dea361dd73757c6f1c0a1480ac499952c16ac83f7f5f4f84f0658a01b8ef41 \ + --hash=sha256:9ab77acb98eba3fd2a85cd160851816bfce6871d944d885febf012713f06659c \ + --hash=sha256:9cb3032517f1627cc012dbc80a8ec976ae76d93ea2b5feaa9d2a5b8882597579 \ + --hash=sha256:9cf4e8ad252f7c38dd1f676b46514f92dc0ebeb0db5552f5f403509705e24753 \ + --hash=sha256:9d9153257a3f70d5f69edf2325357251ed20f772b12e593f3b3377b5f78e7ef8 \ + --hash=sha256:a152f5f33d64a6be73f1d30c9cc82dfc73cec6477ec268e7c6e4c7d23c2d2291 \ + --hash=sha256:a16418ecf1329f71df119e8a65f3aa68004a3f9383821edcb20f0702934d8087 \ + --hash=sha256:a60332922359f920193b1d4826953c507a877b523b2395ad7bc716ddd386d866 \ + --hash=sha256:a8d0fc946c784ff7f7c3742310cc8a57c5c6dc31631269876a88b809dbeff3d3 \ + --hash=sha256:ab5de034a886f616a5668aa5d098af2b5385ed70142090e2a31bcbd0af0fdb3d \ + --hash=sha256:c22d3fe05ce11d3671297dc8973267daa0f938b93ec716e12e0f6dee81591dc1 \ + --hash=sha256:c2ac1b08635a8cd4e0cbeaf6f5e922085908d48eb05d44c5ae9eabab148512ca \ + --hash=sha256:c512accbd6ff0270939b9ac214b84fb5ada5f0409c44298361b2f5e13f9aed9e \ + --hash=sha256:c75ffc45f25324e68ab238cb4b5c0a38cd1c3d7f1fb1f72b5541de469e2247db \ + --hash=sha256:c95a03c79bbe30eec3ec2b7f076074f4281526724c8685a42872974ef4d36b72 \ + --hash=sha256:cadaeaba78750d58d3cc6ac4d1fd867da6fc73c88156b7a3212a3cd4819d679d \ + --hash=sha256:cd6056167405314a4dc3c173943f11249fa0f1b204f8b51ed4bde1a9cd1834dc \ + --hash=sha256:db72b07027db150f468fbada4d85b3b2729a3db39178abf5c543b784c1254539 \ + --hash=sha256:df2c707231459e8a4028eabcd3cfc827befd635b3ef72eada84ab13b52e1574d \ + --hash=sha256:e62164b50f84e20601c1ff8eb55620d2ad25fb81b59e3cd776a1902527a788af \ + --hash=sha256:e696f0dd336161fca9adbb846875d40752e6eba585843c768935ba5c9960722b \ + --hash=sha256:eaa379fcd227ca235d04152ca6704c7cb55564116f8bc52545ff357628e10602 \ + --hash=sha256:ebea339af930f8ca5d7a699b921106c6e29c617fe9606fa7baa043c1cdae326f \ + --hash=sha256:f4c39b0e3eac288fedc2b43055cfc2ca7a60362d0e5e87a637beac5d801ef478 \ + --hash=sha256:f5057856d21e7586765171eac8b9fc3f7d44ef39425f85dbcccb13b3ebea806c \ + --hash=sha256:f6f45710b4459401609ebebdbcfb34515da4fc2aa886f95107f556ac69a9147e \ + --hash=sha256:f97e83fa6c25693c7a35de154681fcc257c1c41b38beb0304b9c4d2d9e164479 \ + --hash=sha256:f9d0c5c045a3ca9bedfc35dca8526798eb91a07aa7a2c0fee134c6c6f321cbd7 \ + --hash=sha256:ff6f3db31555657f3163b15a6b7c6938d08df7adbfc9dd13d9d19edad678f1e8 # via requests check-manifest==0.49 \ --hash=sha256:058cd30057714c39b96ce4d83f254fc770e3145c7b1932b5940b4e3efb5521ef \ @@ -151,38 +237,37 @@ greenlet==2.0.1 \ --hash=sha256:f6327b6907b4cb72f650a5b7b1be23a2aab395017aa6f1adb13069d66360eb3f \ --hash=sha256:fb412b7db83fe56847df9c47b6fe3f13911b06339c2aa02dcc09dce8bbf582cd # via -r requirements/dev.in -hypothesis==6.61.0 \ - --hash=sha256:7bb22d22e35db99d5724bbf5bdc686b46add94a0f228bf1be249c47ec46b9c7f \ - --hash=sha256:fbf7da30aea839d88898f74bcc027f0f997060498a8a7605880688c8a2166215 +hypothesis==6.62.0 \ + --hash=sha256:76f1141e8237f6dd0780a171bec5d6aec873208ccc27b5f9753d4cccd8904272 \ + --hash=sha256:e250da77878460f74b53039493a7a18d6fc137b0b77791b382b6a0f4ada9144e # via -r requirements/pytest.pip idna==3.4 \ --hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 \ --hash=sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2 # via requests -importlib-metadata==5.2.0 \ - --hash=sha256:0eafa39ba42bf225fc00e67f701d71f85aead9f878569caf13c3724f704b970f \ - --hash=sha256:404d48d62bba0b7a77ff9d405efd91501bef2e67ff4ace0bed40a0cf28c3c7cd +importlib-metadata==6.0.0 \ + --hash=sha256:7efb448ec9a5e313a57655d35aa54cd3e01b7e1fbcf72dce1bf06119420f5bad \ + --hash=sha256:e354bedeb60efa6affdcc8ae121b73544a7aa74156d047311948f6d711cd378d # via # -r requirements/pip.pip # -r requirements/pytest.pip # build # keyring - # pep517 # pluggy # pytest # tox # twine # virtualenv -importlib-resources==5.10.1 \ - --hash=sha256:32bb095bda29741f6ef0e5278c42df98d135391bee5f932841efc0041f748dc3 \ - --hash=sha256:c09b067d82e72c66f4f8eb12332f5efbebc9b007c0b6c40818108c9870adc363 +importlib-resources==5.10.2 \ + --hash=sha256:7d543798b0beca10b6a01ac7cafda9f822c54db9e8376a6bf57e0cbd74d486b6 \ + --hash=sha256:e4a96c8cc0339647ff9a5e0550d9f276fc5a01ffa276012b58ec108cfd7b8484 # via # -r requirements/tox.pip # keyring # tox-gh-actions -iniconfig==1.1.1 \ - --hash=sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3 \ - --hash=sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32 +iniconfig==2.0.0 \ + --hash=sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3 \ + --hash=sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374 # via # -r requirements/pytest.pip # pytest @@ -202,26 +287,43 @@ keyring==23.13.1 \ --hash=sha256:771ed2a91909389ed6148631de678f82ddc73737d85a927f382a8a1b157898cd \ --hash=sha256:ba2e15a9b35e21908d0aaf4e0a47acc52d6ae33444df0da2b49d41a46ef6d678 # via twine -lazy-object-proxy==1.8.0 \ - --hash=sha256:0c1c7c0433154bb7c54185714c6929acc0ba04ee1b167314a779b9025517eada \ - --hash=sha256:14010b49a2f56ec4943b6cf925f597b534ee2fe1f0738c84b3bce0c1a11ff10d \ - --hash=sha256:4e2d9f764f1befd8bdc97673261b8bb888764dfdbd7a4d8f55e4fbcabb8c3fb7 \ - --hash=sha256:4fd031589121ad46e293629b39604031d354043bb5cdf83da4e93c2d7f3389fe \ - --hash=sha256:5b51d6f3bfeb289dfd4e95de2ecd464cd51982fe6f00e2be1d0bf94864d58acd \ - --hash=sha256:6850e4aeca6d0df35bb06e05c8b934ff7c533734eb51d0ceb2d63696f1e6030c \ - --hash=sha256:6f593f26c470a379cf7f5bc6db6b5f1722353e7bf937b8d0d0b3fba911998858 \ - --hash=sha256:71d9ae8a82203511a6f60ca5a1b9f8ad201cac0fc75038b2dc5fa519589c9288 \ - --hash=sha256:7e1561626c49cb394268edd00501b289053a652ed762c58e1081224c8d881cec \ - --hash=sha256:8f6ce2118a90efa7f62dd38c7dbfffd42f468b180287b748626293bf12ed468f \ - --hash=sha256:ae032743794fba4d171b5b67310d69176287b5bf82a21f588282406a79498891 \ - --hash=sha256:afcaa24e48bb23b3be31e329deb3f1858f1f1df86aea3d70cb5c8578bfe5261c \ - --hash=sha256:b70d6e7a332eb0217e7872a73926ad4fdc14f846e85ad6749ad111084e76df25 \ - --hash=sha256:c219a00245af0f6fa4e95901ed28044544f50152840c5b6a3e7b2568db34d156 \ - --hash=sha256:ce58b2b3734c73e68f0e30e4e725264d4d6be95818ec0a0be4bb6bf9a7e79aa8 \ - --hash=sha256:d176f392dbbdaacccf15919c77f526edf11a34aece58b55ab58539807b85436f \ - --hash=sha256:e20bfa6db17a39c706d24f82df8352488d2943a3b7ce7d4c22579cb89ca8896e \ - --hash=sha256:eac3a9a5ef13b332c059772fd40b4b1c3d45a3a2b05e33a361dee48e54a4dad0 \ - --hash=sha256:eb329f8d8145379bf5dbe722182410fe8863d186e51bf034d2075eb8d85ee25b +lazy-object-proxy==1.9.0 \ + --hash=sha256:09763491ce220c0299688940f8dc2c5d05fd1f45af1e42e636b2e8b2303e4382 \ + --hash=sha256:0a891e4e41b54fd5b8313b96399f8b0e173bbbfc03c7631f01efbe29bb0bcf82 \ + --hash=sha256:189bbd5d41ae7a498397287c408617fe5c48633e7755287b21d741f7db2706a9 \ + --hash=sha256:18b78ec83edbbeb69efdc0e9c1cb41a3b1b1ed11ddd8ded602464c3fc6020494 \ + --hash=sha256:1aa3de4088c89a1b69f8ec0dcc169aa725b0ff017899ac568fe44ddc1396df46 \ + --hash=sha256:212774e4dfa851e74d393a2370871e174d7ff0ebc980907723bb67d25c8a7c30 \ + --hash=sha256:2d0daa332786cf3bb49e10dc6a17a52f6a8f9601b4cf5c295a4f85854d61de63 \ + --hash=sha256:5f83ac4d83ef0ab017683d715ed356e30dd48a93746309c8f3517e1287523ef4 \ + --hash=sha256:659fb5809fa4629b8a1ac5106f669cfc7bef26fbb389dda53b3e010d1ac4ebae \ + --hash=sha256:660c94ea760b3ce47d1855a30984c78327500493d396eac4dfd8bd82041b22be \ + --hash=sha256:66a3de4a3ec06cd8af3f61b8e1ec67614fbb7c995d02fa224813cb7afefee701 \ + --hash=sha256:721532711daa7db0d8b779b0bb0318fa87af1c10d7fe5e52ef30f8eff254d0cd \ + --hash=sha256:7322c3d6f1766d4ef1e51a465f47955f1e8123caee67dd641e67d539a534d006 \ + --hash=sha256:79a31b086e7e68b24b99b23d57723ef7e2c6d81ed21007b6281ebcd1688acb0a \ + --hash=sha256:81fc4d08b062b535d95c9ea70dbe8a335c45c04029878e62d744bdced5141586 \ + --hash=sha256:8fa02eaab317b1e9e03f69aab1f91e120e7899b392c4fc19807a8278a07a97e8 \ + --hash=sha256:9090d8e53235aa280fc9239a86ae3ea8ac58eff66a705fa6aa2ec4968b95c821 \ + --hash=sha256:946d27deaff6cf8452ed0dba83ba38839a87f4f7a9732e8f9fd4107b21e6ff07 \ + --hash=sha256:9990d8e71b9f6488e91ad25f322898c136b008d87bf852ff65391b004da5e17b \ + --hash=sha256:9cd077f3d04a58e83d04b20e334f678c2b0ff9879b9375ed107d5d07ff160171 \ + --hash=sha256:9e7551208b2aded9c1447453ee366f1c4070602b3d932ace044715d89666899b \ + --hash=sha256:9f5fa4a61ce2438267163891961cfd5e32ec97a2c444e5b842d574251ade27d2 \ + --hash=sha256:b40387277b0ed2d0602b8293b94d7257e17d1479e257b4de114ea11a8cb7f2d7 \ + --hash=sha256:bfb38f9ffb53b942f2b5954e0f610f1e721ccebe9cce9025a38c8ccf4a5183a4 \ + --hash=sha256:cbf9b082426036e19c6924a9ce90c740a9861e2bdc27a4834fd0a910742ac1e8 \ + --hash=sha256:d9e25ef10a39e8afe59a5c348a4dbf29b4868ab76269f81ce1674494e2565a6e \ + --hash=sha256:db1c1722726f47e10e0b5fdbf15ac3b8adb58c091d12b3ab713965795036985f \ + --hash=sha256:e7c21c95cae3c05c14aafffe2865bbd5e377cfc1348c4f7751d9dc9a48ca4bda \ + --hash=sha256:e8c6cfb338b133fbdbc5cfaa10fe3c6aeea827db80c978dbd13bc9dd8526b7d4 \ + --hash=sha256:ea806fd4c37bf7e7ad82537b0757999264d5f70c45468447bb2b91afdbe73a6e \ + --hash=sha256:edd20c5a55acb67c7ed471fa2b5fb66cb17f61430b7a6b9c3b4a1e40293b1671 \ + --hash=sha256:f0117049dd1d5635bbff65444496c90e0baa48ea405125c088e93d9cf4525b11 \ + --hash=sha256:f0705c376533ed2a9e5e97aacdbfe04cecd71e0aa84c7c0595d02ef93b6e4455 \ + --hash=sha256:f12ad7126ae0c98d601a7ee504c1122bcef553d1d5e0c3bfa77b16b3968d2734 \ + --hash=sha256:f2457189d8257dd41ae9b434ba33298aec198e30adf2dcdaaa3a28b9994f6adb \ + --hash=sha256:f699ac1c768270c9e384e4cbd268d6e67aebcfae6cd623b4d7c3bfde5a35db59 # via astroid libsass==0.22.0 \ --hash=sha256:081e256ab3c5f3f09c7b8dea3bf3bf5e64a97c6995fd9eea880639b3f93a9f9a \ @@ -238,9 +340,9 @@ more-itertools==9.0.0 \ --hash=sha256:250e83d7e81d0c87ca6bd942e6aeab8cc9daa6096d12c5308f3f92fa5e5c1f41 \ --hash=sha256:5a6257e40878ef0520b1803990e3e22303a41b5714006c32a3fd8304b26ea1ab # via jaraco-classes -packaging==22.0 \ - --hash=sha256:2198ec20bd4c017b8f9717e00f0c8714076fc2fd93816750ab48e2c41de2cfd3 \ - --hash=sha256:957e2148ba0e1a3b282772e791ef1d8083648bc131c8ab0c1feba110ce1146c3 +packaging==23.0 \ + --hash=sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2 \ + --hash=sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97 # via # -r requirements/pytest.pip # -r requirements/tox.pip @@ -252,17 +354,13 @@ parso==0.8.3 \ --hash=sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0 \ --hash=sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75 # via jedi -pep517==0.13.0 \ - --hash=sha256:4ba4446d80aed5b5eac6509ade100bff3e7943a8489de249654a5ae9b33ee35b \ - --hash=sha256:ae69927c5c172be1add9203726d4b84cf3ebad1edcd5f71fcdc746e66e829f59 - # via build pip==22.3.1 \ --hash=sha256:65fd48317359f3af8e593943e6ae1506b66325085ea64b706a998c6e83eeaf38 \ --hash=sha256:908c78e6bc29b676ede1c4d57981d490cb892eb45cd8c214ab6298125119e077 # via -r requirements/pip.pip -pkginfo==1.9.2 \ - --hash=sha256:ac03e37e4d601aaee40f8087f63fc4a2a6c9814dda2c8fa6aab1b1829653bdfa \ - --hash=sha256:d580059503f2f4549ad6e4c106d7437356dbd430e2c7df99ee1efe03d75f691e +pkginfo==1.9.6 \ + --hash=sha256:4b7a555a6d5a22169fcc9cf7bfd78d296b0361adad412a346c1226849af5e546 \ + --hash=sha256:8fd5896e8718a4372f0ea9cc9d96f6417c9b986e23a4d116dda26b62cc29d046 # via twine platformdirs==2.6.2 \ --hash=sha256:83c8f6d04389165de7c9b6f0c682439697887bca0aa2f1c87ef1826be3584490 \ @@ -289,17 +387,21 @@ py==1.11.0 \ # via # -r requirements/tox.pip # tox -pygments==2.13.0 \ - --hash=sha256:56a8508ae95f98e2b9bdf93a6be5ae3f7d8af858b43e02c5a2ff083726be40c1 \ - --hash=sha256:f643f331ab57ba3c9d89212ee4a2dabc6e94f117cf4eefde99a0574720d14c42 +pygments==2.14.0 \ + --hash=sha256:b3ed06a9e8ac9a9aae5a6f5dbe78a8a58655d17b43b93c078f094ddc476ae297 \ + --hash=sha256:fa7bd7bd2771287c0de303af8bfdfc731f51bd2c6a47ab69d117138893b82717 # via # pudb # readme-renderer # rich -pylint==2.15.9 \ - --hash=sha256:18783cca3cfee5b83c6c5d10b3cdb66c6594520ffae61890858fe8d932e1c6b4 \ - --hash=sha256:349c8cd36aede4d50a0754a8c0218b43323d13d5d88f4b2952ddfe3e169681eb +pylint==2.15.10 \ + --hash=sha256:9df0d07e8948a1c3ffa3b6e2d7e6e63d9fb457c5da5b961ed63106594780cc7e \ + --hash=sha256:b3dc5ef7d33858f297ac0d06cc73862f01e4f2e74025ec3eff347ce0bc60baf5 # via -r requirements/dev.in +pyproject-hooks==1.0.0 \ + --hash=sha256:283c11acd6b928d2f6a7c73fa0d01cb2bdc5f07c57a2eeb6e83d5e56b97976f8 \ + --hash=sha256:f271b298b97f5955d53fb12b72c1fb1948c22c1a6b70b315c54cedaca0264ef5 + # via build pytest==7.2.0 \ --hash=sha256:892f933d339f068883b6fd5a459f03d85bfcb355e4981e146d2c7616c21fef71 \ --hash=sha256:c4014eb40e10f11f355ad4e3c2fb2c6c6d1919c73f3b5a433de4708202cade59 @@ -316,9 +418,9 @@ readme-renderer==37.3 \ # via # -r requirements/dev.in # twine -requests==2.28.1 \ - --hash=sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983 \ - --hash=sha256:8fefa2a1a1365bf5520aac41836fbee479da67864514bdb821f31ce07ce65349 +requests==2.28.2 \ + --hash=sha256:64299f4909223da747622c030b781c0d7811e359c37124b4bd368fb8c6518baa \ + --hash=sha256:98b1b2782e3c6c4904938b84c0eb932721069dfdb9134313beff7c83c2df24bf # via # -r requirements/dev.in # requests-toolbelt @@ -331,13 +433,13 @@ rfc3986==2.0.0 \ --hash=sha256:50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd \ --hash=sha256:97aacf9dbd4bfd829baad6e6309fa6573aaf1be3f6fa735c8ab05e46cecb261c # via twine -rich==12.6.0 \ - --hash=sha256:a4eb26484f2c82589bd9a17c73d32a010b1e29d89f1604cd9bf3a2097b81bb5e \ - --hash=sha256:ba3a3775974105c221d31141f2c116f4fd65c5ceb0698657a11e9f295ec93fd0 +rich==13.0.1 \ + --hash=sha256:25f83363f636995627a99f6e4abc52ed0970ebbd544960cc63cbb43aaac3d6f0 \ + --hash=sha256:41fe1d05f433b0f4724cda8345219213d2bfa472ef56b2f64f415b5b94d51b04 # via twine -setuptools==65.6.3 \ - --hash=sha256:57f6f22bde4e042978bcd50176fdb381d7c21a9efa4041202288d3737a0c6a54 \ - --hash=sha256:a7620757bf984b58deaf32fc8a4577a9bbc0850cf92c20e1ce41c38c19e5fb75 +setuptools==65.7.0 \ + --hash=sha256:4d3c92fac8f1118bb77a22181355e29c239cabfe2b9effdaa665c66b711136d7 \ + --hash=sha256:8ab4f1dbf2b4a65f7eec5ad0c620e84c34111a68d3349833494b9088212214dd # via check-manifest six==1.16.0 \ --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ @@ -360,8 +462,8 @@ tomli==2.0.1 \ # -r requirements/tox.pip # build # check-manifest - # pep517 # pylint + # pyproject-hooks # pytest # tox tomlkit==0.11.6 \ @@ -419,9 +521,9 @@ typing-extensions==4.4.0 \ # platformdirs # pylint # rich -urllib3==1.26.13 \ - --hash=sha256:47cc05d99aaa09c9e72ed5809b60e7ba354e64b59c9c173ac3018642d8bb41fc \ - --hash=sha256:c083dd0dce68dbfbe1129d5271cb90f9447dea7d52097c6e0126120c521ddea8 +urllib3==1.26.14 \ + --hash=sha256:076907bf8fd355cde77728471316625a4d2f7e713c125f51953bb5b3eecf4f72 \ + --hash=sha256:75edcdc2f7d85b137124a6c3c9fc3933cdeaa12ecb9a6a959f22797a0feca7e1 # via # requests # twine @@ -518,4 +620,3 @@ zipp==3.11.0 \ # -r requirements/pytest.pip # importlib-metadata # importlib-resources - # pep517 diff --git a/requirements/kit.pip b/requirements/kit.pip index b2408a122..30f2b2cc9 100644 --- a/requirements/kit.pip +++ b/requirements/kit.pip @@ -8,17 +8,17 @@ auditwheel==5.3.0 \ --hash=sha256:1da1af54de5badd10149250c257a799be003fd976794716f17914e3d4b4a9fc9 \ --hash=sha256:d0be87b5b6fb767eacf1ea4afa3292574cb0f4473a3c0ba55bc9dff1d0b5a333 # via -r requirements/kit.in -bashlex==0.16 \ - --hash=sha256:dc6f017e49ce2d0fe30ad9f5206da9cd13ded073d365688c9fda525354e8c373 \ - --hash=sha256:ff89fc743ccdef978792784d74d698a9236a862939bb4af471c0c3faf92c21bb +bashlex==0.17 \ + --hash=sha256:0ad04403637f64f7836da46c125f9023a2518be418595322309f20ddc1db6cc0 \ + --hash=sha256:2aed062438e10ee89742bc80969793cd9ee4a3fab6cfb2365e43731aabd21010 # via cibuildwheel bracex==2.3.post1 \ --hash=sha256:351b7f20d56fb9ea91f9b9e9e7664db466eb234188c175fd943f8f755c807e73 \ --hash=sha256:e7b23fc8b2cd06d3dec0692baabecb249dda94e06a617901ff03a6c56fd71693 # via cibuildwheel -build==0.9.0 \ - --hash=sha256:1a07724e891cbd898923145eb7752ee7653674c511378eb9c7691aab1612bc3c \ - --hash=sha256:38a7a2b7a0bdc61a42a0a67509d88c71ecfc37b393baba770fae34e20929ff69 +build==0.10.0 \ + --hash=sha256:af266720050a66c893a6096a2f410989eeac74ff9a68ba194b3f6473e8e26171 \ + --hash=sha256:d5b71264afdb5951d6704482aac78de887c80691c52b88a9ad195983ca2c9269 # via -r requirements/kit.in certifi==2022.12.7 \ --hash=sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3 \ @@ -36,23 +36,18 @@ filelock==3.9.0 \ --hash=sha256:7b319f24340b51f55a2bf7a12ac0755a9b03e718311dac567a0f4f7fabd2f5de \ --hash=sha256:f58d535af89bb9ad5cd4df046f741f8553a418c01a7856bf0d173bbc9f6bd16d # via cibuildwheel -importlib-metadata==5.2.0 \ - --hash=sha256:0eafa39ba42bf225fc00e67f701d71f85aead9f878569caf13c3724f704b970f \ - --hash=sha256:404d48d62bba0b7a77ff9d405efd91501bef2e67ff4ace0bed40a0cf28c3c7cd +importlib-metadata==6.0.0 \ + --hash=sha256:7efb448ec9a5e313a57655d35aa54cd3e01b7e1fbcf72dce1bf06119420f5bad \ + --hash=sha256:e354bedeb60efa6affdcc8ae121b73544a7aa74156d047311948f6d711cd378d # via # auditwheel # build - # pep517 -packaging==22.0 \ - --hash=sha256:2198ec20bd4c017b8f9717e00f0c8714076fc2fd93816750ab48e2c41de2cfd3 \ - --hash=sha256:957e2148ba0e1a3b282772e791ef1d8083648bc131c8ab0c1feba110ce1146c3 +packaging==23.0 \ + --hash=sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2 \ + --hash=sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97 # via # build # cibuildwheel -pep517==0.13.0 \ - --hash=sha256:4ba4446d80aed5b5eac6509ade100bff3e7943a8489de249654a5ae9b33ee35b \ - --hash=sha256:ae69927c5c172be1add9203726d4b84cf3ebad1edcd5f71fcdc746e66e829f59 - # via build platformdirs==2.6.2 \ --hash=sha256:83c8f6d04389165de7c9b6f0c682439697887bca0aa2f1c87ef1826be3584490 \ --hash=sha256:e1fea1fe471b9ff8332e229df3cb7de4f53eeea4998d3b6bfff542115e998bd2 @@ -61,9 +56,13 @@ pyelftools==0.29 \ --hash=sha256:519f38cf412f073b2d7393aa4682b0190fa901f7c3fa0bff2b82d537690c7fc1 \ --hash=sha256:ec761596aafa16e282a31de188737e5485552469ac63b60cfcccf22263fd24ff # via auditwheel -setuptools==65.6.3 \ - --hash=sha256:57f6f22bde4e042978bcd50176fdb381d7c21a9efa4041202288d3737a0c6a54 \ - --hash=sha256:a7620757bf984b58deaf32fc8a4577a9bbc0850cf92c20e1ce41c38c19e5fb75 +pyproject-hooks==1.0.0 \ + --hash=sha256:283c11acd6b928d2f6a7c73fa0d01cb2bdc5f07c57a2eeb6e83d5e56b97976f8 \ + --hash=sha256:f271b298b97f5955d53fb12b72c1fb1948c22c1a6b70b315c54cedaca0264ef5 + # via build +setuptools==65.7.0 \ + --hash=sha256:4d3c92fac8f1118bb77a22181355e29c239cabfe2b9effdaa665c66b711136d7 \ + --hash=sha256:8ab4f1dbf2b4a65f7eec5ad0c620e84c34111a68d3349833494b9088212214dd # via -r requirements/kit.in tomli==2.0.1 \ --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ @@ -71,7 +70,7 @@ tomli==2.0.1 \ # via # build # cibuildwheel - # pep517 + # pyproject-hooks typing-extensions==4.4.0 \ --hash=sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa \ --hash=sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e @@ -86,6 +85,4 @@ wheel==0.38.4 \ zipp==3.11.0 \ --hash=sha256:83a28fcb75844b5c0cdaf5aa4003c2d728c77e05f5aeabe8e95e56727005fbaa \ --hash=sha256:a7a22e05929290a67401440b39690ae6563279bced5f314609d9d03798f56766 - # via - # importlib-metadata - # pep517 + # via importlib-metadata diff --git a/requirements/light-threads.pip b/requirements/light-threads.pip index 95a376186..c7175d41b 100644 --- a/requirements/light-threads.pip +++ b/requirements/light-threads.pip @@ -201,9 +201,9 @@ pycparser==2.21 \ --hash=sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9 \ --hash=sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206 # via cffi -setuptools==65.6.3 \ - --hash=sha256:57f6f22bde4e042978bcd50176fdb381d7c21a9efa4041202288d3737a0c6a54 \ - --hash=sha256:a7620757bf984b58deaf32fc8a4577a9bbc0850cf92c20e1ce41c38c19e5fb75 +setuptools==65.7.0 \ + --hash=sha256:4d3c92fac8f1118bb77a22181355e29c239cabfe2b9effdaa665c66b711136d7 \ + --hash=sha256:8ab4f1dbf2b4a65f7eec5ad0c620e84c34111a68d3349833494b9088212214dd # via # gevent # zope-event diff --git a/requirements/lint.pip b/requirements/lint.pip index 81ce22e62..eace8bb6c 100644 --- a/requirements/lint.pip +++ b/requirements/lint.pip @@ -4,13 +4,13 @@ # # make upgrade # -alabaster==0.7.12 \ - --hash=sha256:446438bdcca0e05bd45ea2de1668c1d9b032e1a9154c2c259092d77031ddd359 \ - --hash=sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02 +alabaster==0.7.13 \ + --hash=sha256:1ee19aca801bbabb5ba3f5f258e4422dfa86f82f3e9cefb0859b283cdd7f62a3 \ + --hash=sha256:a27a4a084d5e690e16e01e03ad2b2e552c61a65469419b907243193de1a84ae2 # via sphinx -astroid==2.12.13 \ - --hash=sha256:10e0ad5f7b79c435179d0d0f0df69998c4eef4597534aae44910db060baeb907 \ - --hash=sha256:1493fe8bd3dfd73dc35bd53c9d5b6e49ead98497c47b2307662556a5692d29d7 +astroid==2.13.2 \ + --hash=sha256:3bc7834720e1a24ca797fd785d77efb14f7a28ee8e635ef040b6e2d80ccb3303 \ + --hash=sha256:8f6a8d40c4ad161d6fc419545ae4b2f275ed86d1c989c97825772120842ee0d2 # via pylint attrs==22.2.0 \ --hash=sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836 \ @@ -27,17 +27,103 @@ bleach==5.0.1 \ --hash=sha256:085f7f33c15bd408dd9b17a4ad77c577db66d76203e5984b1bd59baeee948b2a \ --hash=sha256:0d03255c47eb9bd2f26aa9bb7f2107732e7e8fe195ca2f64709fcf3b0a4a085c # via readme-renderer -build==0.9.0 \ - --hash=sha256:1a07724e891cbd898923145eb7752ee7653674c511378eb9c7691aab1612bc3c \ - --hash=sha256:38a7a2b7a0bdc61a42a0a67509d88c71ecfc37b393baba770fae34e20929ff69 +build==0.10.0 \ + --hash=sha256:af266720050a66c893a6096a2f410989eeac74ff9a68ba194b3f6473e8e26171 \ + --hash=sha256:d5b71264afdb5951d6704482aac78de887c80691c52b88a9ad195983ca2c9269 # via check-manifest certifi==2022.12.7 \ --hash=sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3 \ --hash=sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18 # via requests -charset-normalizer==2.1.1 \ - --hash=sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845 \ - --hash=sha256:83e9a75d1911279afd89352c68b45348559d1fc0506b054b346651b5e7fee29f +charset-normalizer==3.0.1 \ + --hash=sha256:00d3ffdaafe92a5dc603cb9bd5111aaa36dfa187c8285c543be562e61b755f6b \ + --hash=sha256:024e606be3ed92216e2b6952ed859d86b4cfa52cd5bc5f050e7dc28f9b43ec42 \ + --hash=sha256:0298eafff88c99982a4cf66ba2efa1128e4ddaca0b05eec4c456bbc7db691d8d \ + --hash=sha256:02a51034802cbf38db3f89c66fb5d2ec57e6fe7ef2f4a44d070a593c3688667b \ + --hash=sha256:083c8d17153ecb403e5e1eb76a7ef4babfc2c48d58899c98fcaa04833e7a2f9a \ + --hash=sha256:0a11e971ed097d24c534c037d298ad32c6ce81a45736d31e0ff0ad37ab437d59 \ + --hash=sha256:0bf2dae5291758b6f84cf923bfaa285632816007db0330002fa1de38bfcb7154 \ + --hash=sha256:0c0a590235ccd933d9892c627dec5bc7511ce6ad6c1011fdf5b11363022746c1 \ + --hash=sha256:0f438ae3532723fb6ead77e7c604be7c8374094ef4ee2c5e03a3a17f1fca256c \ + --hash=sha256:109487860ef6a328f3eec66f2bf78b0b72400280d8f8ea05f69c51644ba6521a \ + --hash=sha256:11b53acf2411c3b09e6af37e4b9005cba376c872503c8f28218c7243582df45d \ + --hash=sha256:12db3b2c533c23ab812c2b25934f60383361f8a376ae272665f8e48b88e8e1c6 \ + --hash=sha256:14e76c0f23218b8f46c4d87018ca2e441535aed3632ca134b10239dfb6dadd6b \ + --hash=sha256:16a8663d6e281208d78806dbe14ee9903715361cf81f6d4309944e4d1e59ac5b \ + --hash=sha256:292d5e8ba896bbfd6334b096e34bffb56161c81408d6d036a7dfa6929cff8783 \ + --hash=sha256:2c03cc56021a4bd59be889c2b9257dae13bf55041a3372d3295416f86b295fb5 \ + --hash=sha256:2e396d70bc4ef5325b72b593a72c8979999aa52fb8bcf03f701c1b03e1166918 \ + --hash=sha256:2edb64ee7bf1ed524a1da60cdcd2e1f6e2b4f66ef7c077680739f1641f62f555 \ + --hash=sha256:31a9ddf4718d10ae04d9b18801bd776693487cbb57d74cc3458a7673f6f34639 \ + --hash=sha256:356541bf4381fa35856dafa6a965916e54bed415ad8a24ee6de6e37deccf2786 \ + --hash=sha256:358a7c4cb8ba9b46c453b1dd8d9e431452d5249072e4f56cfda3149f6ab1405e \ + --hash=sha256:37f8febc8ec50c14f3ec9637505f28e58d4f66752207ea177c1d67df25da5aed \ + --hash=sha256:39049da0ffb96c8cbb65cbf5c5f3ca3168990adf3551bd1dee10c48fce8ae820 \ + --hash=sha256:39cf9ed17fe3b1bc81f33c9ceb6ce67683ee7526e65fde1447c772afc54a1bb8 \ + --hash=sha256:3ae1de54a77dc0d6d5fcf623290af4266412a7c4be0b1ff7444394f03f5c54e3 \ + --hash=sha256:3b590df687e3c5ee0deef9fc8c547d81986d9a1b56073d82de008744452d6541 \ + --hash=sha256:3e45867f1f2ab0711d60c6c71746ac53537f1684baa699f4f668d4c6f6ce8e14 \ + --hash=sha256:3fc1c4a2ffd64890aebdb3f97e1278b0cc72579a08ca4de8cd2c04799a3a22be \ + --hash=sha256:4457ea6774b5611f4bed5eaa5df55f70abde42364d498c5134b7ef4c6958e20e \ + --hash=sha256:44ba614de5361b3e5278e1241fda3dc1838deed864b50a10d7ce92983797fa76 \ + --hash=sha256:4a8fcf28c05c1f6d7e177a9a46a1c52798bfe2ad80681d275b10dcf317deaf0b \ + --hash=sha256:4b0d02d7102dd0f997580b51edc4cebcf2ab6397a7edf89f1c73b586c614272c \ + --hash=sha256:502218f52498a36d6bf5ea77081844017bf7982cdbe521ad85e64cabee1b608b \ + --hash=sha256:503e65837c71b875ecdd733877d852adbc465bd82c768a067badd953bf1bc5a3 \ + --hash=sha256:5995f0164fa7df59db4746112fec3f49c461dd6b31b841873443bdb077c13cfc \ + --hash=sha256:59e5686dd847347e55dffcc191a96622f016bc0ad89105e24c14e0d6305acbc6 \ + --hash=sha256:601f36512f9e28f029d9481bdaf8e89e5148ac5d89cffd3b05cd533eeb423b59 \ + --hash=sha256:608862a7bf6957f2333fc54ab4399e405baad0163dc9f8d99cb236816db169d4 \ + --hash=sha256:62595ab75873d50d57323a91dd03e6966eb79c41fa834b7a1661ed043b2d404d \ + --hash=sha256:70990b9c51340e4044cfc394a81f614f3f90d41397104d226f21e66de668730d \ + --hash=sha256:71140351489970dfe5e60fc621ada3e0f41104a5eddaca47a7acb3c1b851d6d3 \ + --hash=sha256:72966d1b297c741541ca8cf1223ff262a6febe52481af742036a0b296e35fa5a \ + --hash=sha256:74292fc76c905c0ef095fe11e188a32ebd03bc38f3f3e9bcb85e4e6db177b7ea \ + --hash=sha256:761e8904c07ad053d285670f36dd94e1b6ab7f16ce62b9805c475b7aa1cffde6 \ + --hash=sha256:772b87914ff1152b92a197ef4ea40efe27a378606c39446ded52c8f80f79702e \ + --hash=sha256:79909e27e8e4fcc9db4addea88aa63f6423ebb171db091fb4373e3312cb6d603 \ + --hash=sha256:7e189e2e1d3ed2f4aebabd2d5b0f931e883676e51c7624826e0a4e5fe8a0bf24 \ + --hash=sha256:7eb33a30d75562222b64f569c642ff3dc6689e09adda43a082208397f016c39a \ + --hash=sha256:81d6741ab457d14fdedc215516665050f3822d3e56508921cc7239f8c8e66a58 \ + --hash=sha256:8499ca8f4502af841f68135133d8258f7b32a53a1d594aa98cc52013fff55678 \ + --hash=sha256:84c3990934bae40ea69a82034912ffe5a62c60bbf6ec5bc9691419641d7d5c9a \ + --hash=sha256:87701167f2a5c930b403e9756fab1d31d4d4da52856143b609e30a1ce7160f3c \ + --hash=sha256:88600c72ef7587fe1708fd242b385b6ed4b8904976d5da0893e31df8b3480cb6 \ + --hash=sha256:8ac7b6a045b814cf0c47f3623d21ebd88b3e8cf216a14790b455ea7ff0135d18 \ + --hash=sha256:8b8af03d2e37866d023ad0ddea594edefc31e827fee64f8de5611a1dbc373174 \ + --hash=sha256:8c7fe7afa480e3e82eed58e0ca89f751cd14d767638e2550c77a92a9e749c317 \ + --hash=sha256:8eade758719add78ec36dc13201483f8e9b5d940329285edcd5f70c0a9edbd7f \ + --hash=sha256:911d8a40b2bef5b8bbae2e36a0b103f142ac53557ab421dc16ac4aafee6f53dc \ + --hash=sha256:93ad6d87ac18e2a90b0fe89df7c65263b9a99a0eb98f0a3d2e079f12a0735837 \ + --hash=sha256:95dea361dd73757c6f1c0a1480ac499952c16ac83f7f5f4f84f0658a01b8ef41 \ + --hash=sha256:9ab77acb98eba3fd2a85cd160851816bfce6871d944d885febf012713f06659c \ + --hash=sha256:9cb3032517f1627cc012dbc80a8ec976ae76d93ea2b5feaa9d2a5b8882597579 \ + --hash=sha256:9cf4e8ad252f7c38dd1f676b46514f92dc0ebeb0db5552f5f403509705e24753 \ + --hash=sha256:9d9153257a3f70d5f69edf2325357251ed20f772b12e593f3b3377b5f78e7ef8 \ + --hash=sha256:a152f5f33d64a6be73f1d30c9cc82dfc73cec6477ec268e7c6e4c7d23c2d2291 \ + --hash=sha256:a16418ecf1329f71df119e8a65f3aa68004a3f9383821edcb20f0702934d8087 \ + --hash=sha256:a60332922359f920193b1d4826953c507a877b523b2395ad7bc716ddd386d866 \ + --hash=sha256:a8d0fc946c784ff7f7c3742310cc8a57c5c6dc31631269876a88b809dbeff3d3 \ + --hash=sha256:ab5de034a886f616a5668aa5d098af2b5385ed70142090e2a31bcbd0af0fdb3d \ + --hash=sha256:c22d3fe05ce11d3671297dc8973267daa0f938b93ec716e12e0f6dee81591dc1 \ + --hash=sha256:c2ac1b08635a8cd4e0cbeaf6f5e922085908d48eb05d44c5ae9eabab148512ca \ + --hash=sha256:c512accbd6ff0270939b9ac214b84fb5ada5f0409c44298361b2f5e13f9aed9e \ + --hash=sha256:c75ffc45f25324e68ab238cb4b5c0a38cd1c3d7f1fb1f72b5541de469e2247db \ + --hash=sha256:c95a03c79bbe30eec3ec2b7f076074f4281526724c8685a42872974ef4d36b72 \ + --hash=sha256:cadaeaba78750d58d3cc6ac4d1fd867da6fc73c88156b7a3212a3cd4819d679d \ + --hash=sha256:cd6056167405314a4dc3c173943f11249fa0f1b204f8b51ed4bde1a9cd1834dc \ + --hash=sha256:db72b07027db150f468fbada4d85b3b2729a3db39178abf5c543b784c1254539 \ + --hash=sha256:df2c707231459e8a4028eabcd3cfc827befd635b3ef72eada84ab13b52e1574d \ + --hash=sha256:e62164b50f84e20601c1ff8eb55620d2ad25fb81b59e3cd776a1902527a788af \ + --hash=sha256:e696f0dd336161fca9adbb846875d40752e6eba585843c768935ba5c9960722b \ + --hash=sha256:eaa379fcd227ca235d04152ca6704c7cb55564116f8bc52545ff357628e10602 \ + --hash=sha256:ebea339af930f8ca5d7a699b921106c6e29c617fe9606fa7baa043c1cdae326f \ + --hash=sha256:f4c39b0e3eac288fedc2b43055cfc2ca7a60362d0e5e87a637beac5d801ef478 \ + --hash=sha256:f5057856d21e7586765171eac8b9fc3f7d44ef39425f85dbcccb13b3ebea806c \ + --hash=sha256:f6f45710b4459401609ebebdbcfb34515da4fc2aa886f95107f556ac69a9147e \ + --hash=sha256:f97e83fa6c25693c7a35de154681fcc257c1c41b38beb0304b9c4d2d9e164479 \ + --hash=sha256:f9d0c5c045a3ca9bedfc35dca8526798eb91a07aa7a2c0fee134c6c6f321cbd7 \ + --hash=sha256:ff6f3db31555657f3163b15a6b7c6938d08df7adbfc9dd13d9d19edad678f1e8 # via requests check-manifest==0.49 \ --hash=sha256:058cd30057714c39b96ce4d83f254fc770e3145c7b1932b5940b4e3efb5521ef \ @@ -165,9 +251,9 @@ greenlet==2.0.1 \ --hash=sha256:f6327b6907b4cb72f650a5b7b1be23a2aab395017aa6f1adb13069d66360eb3f \ --hash=sha256:fb412b7db83fe56847df9c47b6fe3f13911b06339c2aa02dcc09dce8bbf582cd # via -r requirements/dev.in -hypothesis==6.61.0 \ - --hash=sha256:7bb22d22e35db99d5724bbf5bdc686b46add94a0f228bf1be249c47ec46b9c7f \ - --hash=sha256:fbf7da30aea839d88898f74bcc027f0f997060498a8a7605880688c8a2166215 +hypothesis==6.62.0 \ + --hash=sha256:76f1141e8237f6dd0780a171bec5d6aec873208ccc27b5f9753d4cccd8904272 \ + --hash=sha256:e250da77878460f74b53039493a7a18d6fc137b0b77791b382b6a0f4ada9144e # via -r requirements/pytest.pip idna==3.4 \ --hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 \ @@ -177,15 +263,14 @@ imagesize==1.4.1 \ --hash=sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b \ --hash=sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a # via sphinx -importlib-metadata==5.2.0 \ - --hash=sha256:0eafa39ba42bf225fc00e67f701d71f85aead9f878569caf13c3724f704b970f \ - --hash=sha256:404d48d62bba0b7a77ff9d405efd91501bef2e67ff4ace0bed40a0cf28c3c7cd +importlib-metadata==6.0.0 \ + --hash=sha256:7efb448ec9a5e313a57655d35aa54cd3e01b7e1fbcf72dce1bf06119420f5bad \ + --hash=sha256:e354bedeb60efa6affdcc8ae121b73544a7aa74156d047311948f6d711cd378d # via # -r requirements/pip.pip # -r requirements/pytest.pip # build # keyring - # pep517 # pluggy # pytest # sphinx @@ -193,16 +278,16 @@ importlib-metadata==5.2.0 \ # tox # twine # virtualenv -importlib-resources==5.10.1 \ - --hash=sha256:32bb095bda29741f6ef0e5278c42df98d135391bee5f932841efc0041f748dc3 \ - --hash=sha256:c09b067d82e72c66f4f8eb12332f5efbebc9b007c0b6c40818108c9870adc363 +importlib-resources==5.10.2 \ + --hash=sha256:7d543798b0beca10b6a01ac7cafda9f822c54db9e8376a6bf57e0cbd74d486b6 \ + --hash=sha256:e4a96c8cc0339647ff9a5e0550d9f276fc5a01ffa276012b58ec108cfd7b8484 # via # -r requirements/tox.pip # keyring # tox-gh-actions -iniconfig==1.1.1 \ - --hash=sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3 \ - --hash=sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32 +iniconfig==2.0.0 \ + --hash=sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3 \ + --hash=sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374 # via # -r requirements/pytest.pip # pytest @@ -226,26 +311,43 @@ keyring==23.13.1 \ --hash=sha256:771ed2a91909389ed6148631de678f82ddc73737d85a927f382a8a1b157898cd \ --hash=sha256:ba2e15a9b35e21908d0aaf4e0a47acc52d6ae33444df0da2b49d41a46ef6d678 # via twine -lazy-object-proxy==1.8.0 \ - --hash=sha256:0c1c7c0433154bb7c54185714c6929acc0ba04ee1b167314a779b9025517eada \ - --hash=sha256:14010b49a2f56ec4943b6cf925f597b534ee2fe1f0738c84b3bce0c1a11ff10d \ - --hash=sha256:4e2d9f764f1befd8bdc97673261b8bb888764dfdbd7a4d8f55e4fbcabb8c3fb7 \ - --hash=sha256:4fd031589121ad46e293629b39604031d354043bb5cdf83da4e93c2d7f3389fe \ - --hash=sha256:5b51d6f3bfeb289dfd4e95de2ecd464cd51982fe6f00e2be1d0bf94864d58acd \ - --hash=sha256:6850e4aeca6d0df35bb06e05c8b934ff7c533734eb51d0ceb2d63696f1e6030c \ - --hash=sha256:6f593f26c470a379cf7f5bc6db6b5f1722353e7bf937b8d0d0b3fba911998858 \ - --hash=sha256:71d9ae8a82203511a6f60ca5a1b9f8ad201cac0fc75038b2dc5fa519589c9288 \ - --hash=sha256:7e1561626c49cb394268edd00501b289053a652ed762c58e1081224c8d881cec \ - --hash=sha256:8f6ce2118a90efa7f62dd38c7dbfffd42f468b180287b748626293bf12ed468f \ - --hash=sha256:ae032743794fba4d171b5b67310d69176287b5bf82a21f588282406a79498891 \ - --hash=sha256:afcaa24e48bb23b3be31e329deb3f1858f1f1df86aea3d70cb5c8578bfe5261c \ - --hash=sha256:b70d6e7a332eb0217e7872a73926ad4fdc14f846e85ad6749ad111084e76df25 \ - --hash=sha256:c219a00245af0f6fa4e95901ed28044544f50152840c5b6a3e7b2568db34d156 \ - --hash=sha256:ce58b2b3734c73e68f0e30e4e725264d4d6be95818ec0a0be4bb6bf9a7e79aa8 \ - --hash=sha256:d176f392dbbdaacccf15919c77f526edf11a34aece58b55ab58539807b85436f \ - --hash=sha256:e20bfa6db17a39c706d24f82df8352488d2943a3b7ce7d4c22579cb89ca8896e \ - --hash=sha256:eac3a9a5ef13b332c059772fd40b4b1c3d45a3a2b05e33a361dee48e54a4dad0 \ - --hash=sha256:eb329f8d8145379bf5dbe722182410fe8863d186e51bf034d2075eb8d85ee25b +lazy-object-proxy==1.9.0 \ + --hash=sha256:09763491ce220c0299688940f8dc2c5d05fd1f45af1e42e636b2e8b2303e4382 \ + --hash=sha256:0a891e4e41b54fd5b8313b96399f8b0e173bbbfc03c7631f01efbe29bb0bcf82 \ + --hash=sha256:189bbd5d41ae7a498397287c408617fe5c48633e7755287b21d741f7db2706a9 \ + --hash=sha256:18b78ec83edbbeb69efdc0e9c1cb41a3b1b1ed11ddd8ded602464c3fc6020494 \ + --hash=sha256:1aa3de4088c89a1b69f8ec0dcc169aa725b0ff017899ac568fe44ddc1396df46 \ + --hash=sha256:212774e4dfa851e74d393a2370871e174d7ff0ebc980907723bb67d25c8a7c30 \ + --hash=sha256:2d0daa332786cf3bb49e10dc6a17a52f6a8f9601b4cf5c295a4f85854d61de63 \ + --hash=sha256:5f83ac4d83ef0ab017683d715ed356e30dd48a93746309c8f3517e1287523ef4 \ + --hash=sha256:659fb5809fa4629b8a1ac5106f669cfc7bef26fbb389dda53b3e010d1ac4ebae \ + --hash=sha256:660c94ea760b3ce47d1855a30984c78327500493d396eac4dfd8bd82041b22be \ + --hash=sha256:66a3de4a3ec06cd8af3f61b8e1ec67614fbb7c995d02fa224813cb7afefee701 \ + --hash=sha256:721532711daa7db0d8b779b0bb0318fa87af1c10d7fe5e52ef30f8eff254d0cd \ + --hash=sha256:7322c3d6f1766d4ef1e51a465f47955f1e8123caee67dd641e67d539a534d006 \ + --hash=sha256:79a31b086e7e68b24b99b23d57723ef7e2c6d81ed21007b6281ebcd1688acb0a \ + --hash=sha256:81fc4d08b062b535d95c9ea70dbe8a335c45c04029878e62d744bdced5141586 \ + --hash=sha256:8fa02eaab317b1e9e03f69aab1f91e120e7899b392c4fc19807a8278a07a97e8 \ + --hash=sha256:9090d8e53235aa280fc9239a86ae3ea8ac58eff66a705fa6aa2ec4968b95c821 \ + --hash=sha256:946d27deaff6cf8452ed0dba83ba38839a87f4f7a9732e8f9fd4107b21e6ff07 \ + --hash=sha256:9990d8e71b9f6488e91ad25f322898c136b008d87bf852ff65391b004da5e17b \ + --hash=sha256:9cd077f3d04a58e83d04b20e334f678c2b0ff9879b9375ed107d5d07ff160171 \ + --hash=sha256:9e7551208b2aded9c1447453ee366f1c4070602b3d932ace044715d89666899b \ + --hash=sha256:9f5fa4a61ce2438267163891961cfd5e32ec97a2c444e5b842d574251ade27d2 \ + --hash=sha256:b40387277b0ed2d0602b8293b94d7257e17d1479e257b4de114ea11a8cb7f2d7 \ + --hash=sha256:bfb38f9ffb53b942f2b5954e0f610f1e721ccebe9cce9025a38c8ccf4a5183a4 \ + --hash=sha256:cbf9b082426036e19c6924a9ce90c740a9861e2bdc27a4834fd0a910742ac1e8 \ + --hash=sha256:d9e25ef10a39e8afe59a5c348a4dbf29b4868ab76269f81ce1674494e2565a6e \ + --hash=sha256:db1c1722726f47e10e0b5fdbf15ac3b8adb58c091d12b3ab713965795036985f \ + --hash=sha256:e7c21c95cae3c05c14aafffe2865bbd5e377cfc1348c4f7751d9dc9a48ca4bda \ + --hash=sha256:e8c6cfb338b133fbdbc5cfaa10fe3c6aeea827db80c978dbd13bc9dd8526b7d4 \ + --hash=sha256:ea806fd4c37bf7e7ad82537b0757999264d5f70c45468447bb2b91afdbe73a6e \ + --hash=sha256:edd20c5a55acb67c7ed471fa2b5fb66cb17f61430b7a6b9c3b4a1e40293b1671 \ + --hash=sha256:f0117049dd1d5635bbff65444496c90e0baa48ea405125c088e93d9cf4525b11 \ + --hash=sha256:f0705c376533ed2a9e5e97aacdbfe04cecd71e0aa84c7c0595d02ef93b6e4455 \ + --hash=sha256:f12ad7126ae0c98d601a7ee504c1122bcef553d1d5e0c3bfa77b16b3968d2734 \ + --hash=sha256:f2457189d8257dd41ae9b434ba33298aec198e30adf2dcdaaa3a28b9994f6adb \ + --hash=sha256:f699ac1c768270c9e384e4cbd268d6e67aebcfae6cd623b4d7c3bfde5a35db59 # via astroid libsass==0.22.0 \ --hash=sha256:081e256ab3c5f3f09c7b8dea3bf3bf5e64a97c6995fd9eea880639b3f93a9f9a \ @@ -308,9 +410,9 @@ more-itertools==9.0.0 \ --hash=sha256:250e83d7e81d0c87ca6bd942e6aeab8cc9daa6096d12c5308f3f92fa5e5c1f41 \ --hash=sha256:5a6257e40878ef0520b1803990e3e22303a41b5714006c32a3fd8304b26ea1ab # via jaraco-classes -packaging==22.0 \ - --hash=sha256:2198ec20bd4c017b8f9717e00f0c8714076fc2fd93816750ab48e2c41de2cfd3 \ - --hash=sha256:957e2148ba0e1a3b282772e791ef1d8083648bc131c8ab0c1feba110ce1146c3 +packaging==23.0 \ + --hash=sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2 \ + --hash=sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97 # via # -r requirements/pytest.pip # -r requirements/tox.pip @@ -323,17 +425,13 @@ parso==0.8.3 \ --hash=sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0 \ --hash=sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75 # via jedi -pep517==0.13.0 \ - --hash=sha256:4ba4446d80aed5b5eac6509ade100bff3e7943a8489de249654a5ae9b33ee35b \ - --hash=sha256:ae69927c5c172be1add9203726d4b84cf3ebad1edcd5f71fcdc746e66e829f59 - # via build pip==22.3.1 \ --hash=sha256:65fd48317359f3af8e593943e6ae1506b66325085ea64b706a998c6e83eeaf38 \ --hash=sha256:908c78e6bc29b676ede1c4d57981d490cb892eb45cd8c214ab6298125119e077 # via -r requirements/pip.pip -pkginfo==1.9.2 \ - --hash=sha256:ac03e37e4d601aaee40f8087f63fc4a2a6c9814dda2c8fa6aab1b1829653bdfa \ - --hash=sha256:d580059503f2f4549ad6e4c106d7437356dbd430e2c7df99ee1efe03d75f691e +pkginfo==1.9.6 \ + --hash=sha256:4b7a555a6d5a22169fcc9cf7bfd78d296b0361adad412a346c1226849af5e546 \ + --hash=sha256:8fd5896e8718a4372f0ea9cc9d96f6417c9b986e23a4d116dda26b62cc29d046 # via twine platformdirs==2.6.2 \ --hash=sha256:83c8f6d04389165de7c9b6f0c682439697887bca0aa2f1c87ef1826be3584490 \ @@ -368,18 +466,22 @@ pyenchant==3.2.2 \ # via # -r doc/requirements.in # sphinxcontrib-spelling -pygments==2.13.0 \ - --hash=sha256:56a8508ae95f98e2b9bdf93a6be5ae3f7d8af858b43e02c5a2ff083726be40c1 \ - --hash=sha256:f643f331ab57ba3c9d89212ee4a2dabc6e94f117cf4eefde99a0574720d14c42 +pygments==2.14.0 \ + --hash=sha256:b3ed06a9e8ac9a9aae5a6f5dbe78a8a58655d17b43b93c078f094ddc476ae297 \ + --hash=sha256:fa7bd7bd2771287c0de303af8bfdfc731f51bd2c6a47ab69d117138893b82717 # via # pudb # readme-renderer # rich # sphinx -pylint==2.15.9 \ - --hash=sha256:18783cca3cfee5b83c6c5d10b3cdb66c6594520ffae61890858fe8d932e1c6b4 \ - --hash=sha256:349c8cd36aede4d50a0754a8c0218b43323d13d5d88f4b2952ddfe3e169681eb +pylint==2.15.10 \ + --hash=sha256:9df0d07e8948a1c3ffa3b6e2d7e6e63d9fb457c5da5b961ed63106594780cc7e \ + --hash=sha256:b3dc5ef7d33858f297ac0d06cc73862f01e4f2e74025ec3eff347ce0bc60baf5 # via -r requirements/dev.in +pyproject-hooks==1.0.0 \ + --hash=sha256:283c11acd6b928d2f6a7c73fa0d01cb2bdc5f07c57a2eeb6e83d5e56b97976f8 \ + --hash=sha256:f271b298b97f5955d53fb12b72c1fb1948c22c1a6b70b315c54cedaca0264ef5 + # via build pytest==7.2.0 \ --hash=sha256:892f933d339f068883b6fd5a459f03d85bfcb355e4981e146d2c7616c21fef71 \ --hash=sha256:c4014eb40e10f11f355ad4e3c2fb2c6c6d1919c73f3b5a433de4708202cade59 @@ -400,9 +502,9 @@ readme-renderer==37.3 \ # via # -r requirements/dev.in # twine -requests==2.28.1 \ - --hash=sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983 \ - --hash=sha256:8fefa2a1a1365bf5520aac41836fbee479da67864514bdb821f31ce07ce65349 +requests==2.28.2 \ + --hash=sha256:64299f4909223da747622c030b781c0d7811e359c37124b4bd368fb8c6518baa \ + --hash=sha256:98b1b2782e3c6c4904938b84c0eb932721069dfdb9134313beff7c83c2df24bf # via # -r requirements/dev.in # requests-toolbelt @@ -416,13 +518,13 @@ rfc3986==2.0.0 \ --hash=sha256:50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd \ --hash=sha256:97aacf9dbd4bfd829baad6e6309fa6573aaf1be3f6fa735c8ab05e46cecb261c # via twine -rich==12.6.0 \ - --hash=sha256:a4eb26484f2c82589bd9a17c73d32a010b1e29d89f1604cd9bf3a2097b81bb5e \ - --hash=sha256:ba3a3775974105c221d31141f2c116f4fd65c5ceb0698657a11e9f295ec93fd0 +rich==13.0.1 \ + --hash=sha256:25f83363f636995627a99f6e4abc52ed0970ebbd544960cc63cbb43aaac3d6f0 \ + --hash=sha256:41fe1d05f433b0f4724cda8345219213d2bfa472ef56b2f64f415b5b94d51b04 # via twine -setuptools==65.6.3 \ - --hash=sha256:57f6f22bde4e042978bcd50176fdb381d7c21a9efa4041202288d3737a0c6a54 \ - --hash=sha256:a7620757bf984b58deaf32fc8a4577a9bbc0850cf92c20e1ce41c38c19e5fb75 +setuptools==65.7.0 \ + --hash=sha256:4d3c92fac8f1118bb77a22181355e29c239cabfe2b9effdaa665c66b711136d7 \ + --hash=sha256:8ab4f1dbf2b4a65f7eec5ad0c620e84c34111a68d3349833494b9088212214dd # via check-manifest six==1.16.0 \ --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ @@ -499,8 +601,8 @@ tomli==2.0.1 \ # -r requirements/tox.pip # build # check-manifest - # pep517 # pylint + # pyproject-hooks # pytest # tox tomlkit==0.11.6 \ @@ -571,9 +673,9 @@ typing-extensions==4.4.0 \ # platformdirs # pylint # rich -urllib3==1.26.13 \ - --hash=sha256:47cc05d99aaa09c9e72ed5809b60e7ba354e64b59c9c173ac3018642d8bb41fc \ - --hash=sha256:c083dd0dce68dbfbe1129d5271cb90f9447dea7d52097c6e0126120c521ddea8 +urllib3==1.26.14 \ + --hash=sha256:076907bf8fd355cde77728471316625a4d2f7e713c125f51953bb5b3eecf4f72 \ + --hash=sha256:75edcdc2f7d85b137124a6c3c9fc3933cdeaa12ecb9a6a959f22797a0feca7e1 # via # requests # twine @@ -670,4 +772,3 @@ zipp==3.11.0 \ # -r requirements/pytest.pip # importlib-metadata # importlib-resources - # pep517 diff --git a/requirements/pip-tools.pip b/requirements/pip-tools.pip index 98f0fe55a..b2ca4b36c 100644 --- a/requirements/pip-tools.pip +++ b/requirements/pip-tools.pip @@ -4,28 +4,23 @@ # # make upgrade # -build==0.9.0 \ - --hash=sha256:1a07724e891cbd898923145eb7752ee7653674c511378eb9c7691aab1612bc3c \ - --hash=sha256:38a7a2b7a0bdc61a42a0a67509d88c71ecfc37b393baba770fae34e20929ff69 +build==0.10.0 \ + --hash=sha256:af266720050a66c893a6096a2f410989eeac74ff9a68ba194b3f6473e8e26171 \ + --hash=sha256:d5b71264afdb5951d6704482aac78de887c80691c52b88a9ad195983ca2c9269 # via pip-tools click==8.1.3 \ --hash=sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e \ --hash=sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48 # via pip-tools -importlib-metadata==5.2.0 \ - --hash=sha256:0eafa39ba42bf225fc00e67f701d71f85aead9f878569caf13c3724f704b970f \ - --hash=sha256:404d48d62bba0b7a77ff9d405efd91501bef2e67ff4ace0bed40a0cf28c3c7cd +importlib-metadata==6.0.0 \ + --hash=sha256:7efb448ec9a5e313a57655d35aa54cd3e01b7e1fbcf72dce1bf06119420f5bad \ + --hash=sha256:e354bedeb60efa6affdcc8ae121b73544a7aa74156d047311948f6d711cd378d # via # build # click - # pep517 -packaging==22.0 \ - --hash=sha256:2198ec20bd4c017b8f9717e00f0c8714076fc2fd93816750ab48e2c41de2cfd3 \ - --hash=sha256:957e2148ba0e1a3b282772e791ef1d8083648bc131c8ab0c1feba110ce1146c3 - # via build -pep517==0.13.0 \ - --hash=sha256:4ba4446d80aed5b5eac6509ade100bff3e7943a8489de249654a5ae9b33ee35b \ - --hash=sha256:ae69927c5c172be1add9203726d4b84cf3ebad1edcd5f71fcdc746e66e829f59 +packaging==23.0 \ + --hash=sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2 \ + --hash=sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97 # via build pip==22.3.1 \ --hash=sha256:65fd48317359f3af8e593943e6ae1506b66325085ea64b706a998c6e83eeaf38 \ @@ -35,16 +30,20 @@ pip-tools==6.12.1 \ --hash=sha256:88efb7b29a923ffeac0713e6f23ef8529cc6175527d42b93f73756cc94387293 \ --hash=sha256:f0c0c0ec57b58250afce458e2e6058b1f30a4263db895b7d72fd6311bf1dc6f7 # via -r requirements/pip-tools.in -setuptools==65.6.3 \ - --hash=sha256:57f6f22bde4e042978bcd50176fdb381d7c21a9efa4041202288d3737a0c6a54 \ - --hash=sha256:a7620757bf984b58deaf32fc8a4577a9bbc0850cf92c20e1ce41c38c19e5fb75 +pyproject-hooks==1.0.0 \ + --hash=sha256:283c11acd6b928d2f6a7c73fa0d01cb2bdc5f07c57a2eeb6e83d5e56b97976f8 \ + --hash=sha256:f271b298b97f5955d53fb12b72c1fb1948c22c1a6b70b315c54cedaca0264ef5 + # via build +setuptools==65.7.0 \ + --hash=sha256:4d3c92fac8f1118bb77a22181355e29c239cabfe2b9effdaa665c66b711136d7 \ + --hash=sha256:8ab4f1dbf2b4a65f7eec5ad0c620e84c34111a68d3349833494b9088212214dd # via pip-tools tomli==2.0.1 \ --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f # via # build - # pep517 + # pyproject-hooks typing-extensions==4.4.0 \ --hash=sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa \ --hash=sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e @@ -56,6 +55,4 @@ wheel==0.38.4 \ zipp==3.11.0 \ --hash=sha256:83a28fcb75844b5c0cdaf5aa4003c2d728c77e05f5aeabe8e95e56727005fbaa \ --hash=sha256:a7a22e05929290a67401440b39690ae6563279bced5f314609d9d03798f56766 - # via - # importlib-metadata - # pep517 + # via importlib-metadata diff --git a/requirements/pip.pip b/requirements/pip.pip index d78354631..e48340d14 100644 --- a/requirements/pip.pip +++ b/requirements/pip.pip @@ -12,9 +12,9 @@ filelock==3.9.0 \ --hash=sha256:7b319f24340b51f55a2bf7a12ac0755a9b03e718311dac567a0f4f7fabd2f5de \ --hash=sha256:f58d535af89bb9ad5cd4df046f741f8553a418c01a7856bf0d173bbc9f6bd16d # via virtualenv -importlib-metadata==5.2.0 \ - --hash=sha256:0eafa39ba42bf225fc00e67f701d71f85aead9f878569caf13c3724f704b970f \ - --hash=sha256:404d48d62bba0b7a77ff9d405efd91501bef2e67ff4ace0bed40a0cf28c3c7cd +importlib-metadata==6.0.0 \ + --hash=sha256:7efb448ec9a5e313a57655d35aa54cd3e01b7e1fbcf72dce1bf06119420f5bad \ + --hash=sha256:e354bedeb60efa6affdcc8ae121b73544a7aa74156d047311948f6d711cd378d # via virtualenv pip==22.3.1 \ --hash=sha256:65fd48317359f3af8e593943e6ae1506b66325085ea64b706a998c6e83eeaf38 \ diff --git a/requirements/pytest.pip b/requirements/pytest.pip index 78e6d2c29..0419cd587 100644 --- a/requirements/pytest.pip +++ b/requirements/pytest.pip @@ -28,23 +28,23 @@ flaky==3.7.0 \ --hash=sha256:3ad100780721a1911f57a165809b7ea265a7863305acb66708220820caf8aa0d \ --hash=sha256:d6eda73cab5ae7364504b7c44670f70abed9e75f77dd116352f662817592ec9c # via -r requirements/pytest.in -hypothesis==6.61.0 \ - --hash=sha256:7bb22d22e35db99d5724bbf5bdc686b46add94a0f228bf1be249c47ec46b9c7f \ - --hash=sha256:fbf7da30aea839d88898f74bcc027f0f997060498a8a7605880688c8a2166215 +hypothesis==6.62.0 \ + --hash=sha256:76f1141e8237f6dd0780a171bec5d6aec873208ccc27b5f9753d4cccd8904272 \ + --hash=sha256:e250da77878460f74b53039493a7a18d6fc137b0b77791b382b6a0f4ada9144e # via -r requirements/pytest.in -importlib-metadata==5.2.0 \ - --hash=sha256:0eafa39ba42bf225fc00e67f701d71f85aead9f878569caf13c3724f704b970f \ - --hash=sha256:404d48d62bba0b7a77ff9d405efd91501bef2e67ff4ace0bed40a0cf28c3c7cd +importlib-metadata==6.0.0 \ + --hash=sha256:7efb448ec9a5e313a57655d35aa54cd3e01b7e1fbcf72dce1bf06119420f5bad \ + --hash=sha256:e354bedeb60efa6affdcc8ae121b73544a7aa74156d047311948f6d711cd378d # via # pluggy # pytest -iniconfig==1.1.1 \ - --hash=sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3 \ - --hash=sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32 +iniconfig==2.0.0 \ + --hash=sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3 \ + --hash=sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374 # via pytest -packaging==22.0 \ - --hash=sha256:2198ec20bd4c017b8f9717e00f0c8714076fc2fd93816750ab48e2c41de2cfd3 \ - --hash=sha256:957e2148ba0e1a3b282772e791ef1d8083648bc131c8ab0c1feba110ce1146c3 +packaging==23.0 \ + --hash=sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2 \ + --hash=sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97 # via pytest pluggy==1.0.0 \ --hash=sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159 \ diff --git a/requirements/tox.pip b/requirements/tox.pip index ad39b10a1..9601384ef 100644 --- a/requirements/tox.pip +++ b/requirements/tox.pip @@ -18,20 +18,20 @@ filelock==3.9.0 \ # via # tox # virtualenv -importlib-metadata==5.2.0 \ - --hash=sha256:0eafa39ba42bf225fc00e67f701d71f85aead9f878569caf13c3724f704b970f \ - --hash=sha256:404d48d62bba0b7a77ff9d405efd91501bef2e67ff4ace0bed40a0cf28c3c7cd +importlib-metadata==6.0.0 \ + --hash=sha256:7efb448ec9a5e313a57655d35aa54cd3e01b7e1fbcf72dce1bf06119420f5bad \ + --hash=sha256:e354bedeb60efa6affdcc8ae121b73544a7aa74156d047311948f6d711cd378d # via # pluggy # tox # virtualenv -importlib-resources==5.10.1 \ - --hash=sha256:32bb095bda29741f6ef0e5278c42df98d135391bee5f932841efc0041f748dc3 \ - --hash=sha256:c09b067d82e72c66f4f8eb12332f5efbebc9b007c0b6c40818108c9870adc363 +importlib-resources==5.10.2 \ + --hash=sha256:7d543798b0beca10b6a01ac7cafda9f822c54db9e8376a6bf57e0cbd74d486b6 \ + --hash=sha256:e4a96c8cc0339647ff9a5e0550d9f276fc5a01ffa276012b58ec108cfd7b8484 # via tox-gh-actions -packaging==22.0 \ - --hash=sha256:2198ec20bd4c017b8f9717e00f0c8714076fc2fd93816750ab48e2c41de2cfd3 \ - --hash=sha256:957e2148ba0e1a3b282772e791ef1d8083648bc131c8ab0c1feba110ce1146c3 +packaging==23.0 \ + --hash=sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2 \ + --hash=sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97 # via tox platformdirs==2.6.2 \ --hash=sha256:83c8f6d04389165de7c9b6f0c682439697887bca0aa2f1c87ef1826be3584490 \ From d91907e262e2d8ed46bffbbb234f3e372edd9ce1 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Fri, 13 Jan 2023 07:00:21 -0500 Subject: [PATCH 011/139] build: improved `make diff-upgrade` to see changes better --- Makefile | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 5bca7c53d..6e2ee44f5 100644 --- a/Makefile +++ b/Makefile @@ -99,7 +99,13 @@ upgrade: ## Update the *.pip files with the latest packages satisfying *.in $(PIP_COMPILE) -o requirements/mypy.pip requirements/mypy.in diff_upgrade: ## Summarize the last `make upgrade` - @git diff -U0 | grep -v '^@' | grep == | sort -k1.2,1.99 -k1.1,1.1r -u + # The sort flags sort by the package name first, then by the -/+, and + # sort by version numbers, so we get a summary with lines like this: + # -bashlex==0.16 \ + # +bashlex==0.17 \ + # -build==0.9.0 \ + # +build==0.10.0 \ + @git diff -U0 | grep -v '^@' | grep == | sort -k1.2,1.99 -k1.1,1.1r -u -V ##@ Pre-builds for prepping the code From 7b95cc447e932b16b2dd0c75579fd04186602ac3 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Fri, 13 Jan 2023 07:20:04 -0500 Subject: [PATCH 012/139] build: oops, don't want make comments on the terminal --- Makefile | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Makefile b/Makefile index 6e2ee44f5..50d0a5074 100644 --- a/Makefile +++ b/Makefile @@ -99,12 +99,12 @@ upgrade: ## Update the *.pip files with the latest packages satisfying *.in $(PIP_COMPILE) -o requirements/mypy.pip requirements/mypy.in diff_upgrade: ## Summarize the last `make upgrade` - # The sort flags sort by the package name first, then by the -/+, and - # sort by version numbers, so we get a summary with lines like this: - # -bashlex==0.16 \ - # +bashlex==0.17 \ - # -build==0.9.0 \ - # +build==0.10.0 \ + @# The sort flags sort by the package name first, then by the -/+, and + @# sort by version numbers, so we get a summary with lines like this: + @# -bashlex==0.16 + @# +bashlex==0.17 + @# -build==0.9.0 + @# +build==0.10.0 @git diff -U0 | grep -v '^@' | grep == | sort -k1.2,1.99 -k1.1,1.1r -u -V ##@ Pre-builds for prepping the code From 24cf494264842e94bd33d73850408219d4d17f10 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Fri, 13 Jan 2023 08:59:01 -0500 Subject: [PATCH 013/139] build: COVERAGE_QUIETER seems to have no effect anymore I don't remember exactly what output what being suppressed, but setting this or not seems to make no difference anymore. --- setup.py | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/setup.py b/setup.py index dd7676013..abd7b2780 100644 --- a/setup.py +++ b/setup.py @@ -14,20 +14,6 @@ from distutils.core import Extension # pylint: disable=wrong-import-order from setuptools.command.build_ext import build_ext # pylint: disable=wrong-import-order from distutils import errors # pylint: disable=wrong-import-order -import distutils.log # pylint: disable=wrong-import-order - -# $set_env.py: COVERAGE_QUIETER - Set to remove some noise from test output. -if bool(int(os.getenv("COVERAGE_QUIETER", "0"))): - # Distutils has its own mini-logging code, and it sets the level too high. - # When I ask for --quiet when running tests, I don't want to see warnings. - old_set_verbosity = distutils.log.set_verbosity - def better_set_verbosity(v): - """--quiet means no warnings!""" - if v <= 0: - distutils.log.set_threshold(distutils.log.ERROR) - else: - old_set_verbosity(v) - distutils.log.set_verbosity = better_set_verbosity # Get or massage our metadata. We exec coverage/version.py so we can avoid # importing the product code into setup.py. From 0667611a82eac81818f40173acfca22a35fc1d9d Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Fri, 13 Jan 2023 15:15:46 -0500 Subject: [PATCH 014/139] docs: tweak quickstart to make basic step clearer --- doc/index.rst | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/doc/index.rst b/doc/index.rst index 47fe4f1f0..309cba594 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -61,11 +61,17 @@ Getting started is easy: For more details, see :ref:`install`. #. Use ``coverage run`` to run your test suite and gather data. However you - normally run your test suite, you can run your test runner under coverage. - If your test runner command starts with "python", just replace the initial - "python" with "coverage run". + normally run your test suite, you can use your test runner under coverage. - Instructions for specific test runners: + .. tip:: + If your test runner command starts with "python", just replace the initial + "python" with "coverage run". + + ``python something.py`` becomes ``coverage run something.py`` + + ``python -m amodule`` becomes ``coverage run -m amodule`` + + Other instructions for specific test runners: - **pytest** From 468a7fc5fcbdc6ccac1cf1a726f079a558c76ad7 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Mon, 16 Jan 2023 09:28:39 -0500 Subject: [PATCH 015/139] build: switch from tox-gh-actions to tox-gh, and tox 4 --- requirements/pins.pip | 3 --- requirements/tox.in | 2 +- tox.ini | 17 +++++++++-------- 3 files changed, 10 insertions(+), 12 deletions(-) diff --git a/requirements/pins.pip b/requirements/pins.pip index 846cf51fa..4ecea4264 100644 --- a/requirements/pins.pip +++ b/requirements/pins.pip @@ -6,6 +6,3 @@ # docutils has been going through some turmoil. Different packages require it, # but have different pins. This seems to satisfy them all: #docutils>=0.17,<0.18 - -tox<4 -tox-gh-actions<3 diff --git a/requirements/tox.in b/requirements/tox.in index 50b4711ce..da8890181 100644 --- a/requirements/tox.in +++ b/requirements/tox.in @@ -7,7 +7,7 @@ # "make upgrade" turns this into requirements/tox.pip. tox -tox-gh-actions +tox-gh # Tox has a windows-only dependency on colorama: # https://github.com/tox-dev/tox/blob/master/setup.cfg#L44 diff --git a/tox.ini b/tox.ini index 03293b85d..3592ec134 100644 --- a/tox.ini +++ b/tox.ini @@ -104,13 +104,14 @@ commands = mypy --python-version=3.8 {env:TYPEABLE} mypy --python-version=3.12 {env:TYPEABLE} -[gh-actions] +[gh] +# https://pypi.org/project/tox-gh/ # PYVERSIONS python = - 3.7: py37 - 3.8: py38 - 3.9: py39 - 3.10: py310 - 3.11: py311 - 3.12: py312 - pypy-3: pypy3 + 3.7 = py37 + 3.8 = py38 + 3.9 = py39 + 3.10 = py310 + 3.11 = py311 + 3.12 = py312 + pypy-3 = pypy3 From 976d2ffefb9e74bb2b4c80a2cb45b330629bb2ab Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Mon, 16 Jan 2023 09:32:06 -0500 Subject: [PATCH 016/139] chore: make upgrade --- doc/requirements.pip | 6 +-- requirements/dev.pip | 77 ++++++++++++++++++-------------- requirements/kit.pip | 6 +-- requirements/light-threads.pip | 12 ++--- requirements/lint.pip | 80 +++++++++++++++++++--------------- requirements/mypy.pip | 12 ++--- requirements/pip-tools.pip | 6 +-- requirements/pytest.pip | 12 ++--- requirements/tox.pip | 57 +++++++++++++----------- 9 files changed, 149 insertions(+), 119 deletions(-) diff --git a/doc/requirements.pip b/doc/requirements.pip index 539175ff4..488094f4d 100644 --- a/doc/requirements.pip +++ b/doc/requirements.pip @@ -200,9 +200,9 @@ pygments==2.14.0 \ --hash=sha256:b3ed06a9e8ac9a9aae5a6f5dbe78a8a58655d17b43b93c078f094ddc476ae297 \ --hash=sha256:fa7bd7bd2771287c0de303af8bfdfc731f51bd2c6a47ab69d117138893b82717 # via sphinx -pytz==2022.7 \ - --hash=sha256:7ccfae7b4b2c067464a6733c6261673fdb8fd1be905460396b97a073e9fa683a \ - --hash=sha256:93007def75ae22f7cd991c84e02d434876818661f8df9ad5df9e950ff4e52cfd +pytz==2022.7.1 \ + --hash=sha256:01a0681c4b9684a28304615eba55d1ab31ae00bf68ec157ec3708a8182dbbcd0 \ + --hash=sha256:78f4f37d8198e0627c5f1143240bb0206b8691d8d7ac6d78fee88b78733f8c4a # via babel requests==2.28.2 \ --hash=sha256:64299f4909223da747622c030b781c0d7811e359c37124b4bd368fb8c6518baa \ diff --git a/requirements/dev.pip b/requirements/dev.pip index ffe07c03a..4057d2498 100644 --- a/requirements/dev.pip +++ b/requirements/dev.pip @@ -23,10 +23,22 @@ build==0.10.0 \ --hash=sha256:af266720050a66c893a6096a2f410989eeac74ff9a68ba194b3f6473e8e26171 \ --hash=sha256:d5b71264afdb5951d6704482aac78de887c80691c52b88a9ad195983ca2c9269 # via check-manifest +cachetools==5.2.1 \ + --hash=sha256:5991bc0e08a1319bb618d3195ca5b6bc76646a49c21d55962977197b301cc1fe \ + --hash=sha256:8462eebf3a6c15d25430a8c27c56ac61340b2ecf60c9ce57afc2b97e450e47da + # via + # -r requirements/tox.pip + # tox certifi==2022.12.7 \ --hash=sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3 \ --hash=sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18 # via requests +chardet==5.1.0 \ + --hash=sha256:0d62712b956bc154f85fb0a266e2a3c5913c2967e00348701b32411d6def31e5 \ + --hash=sha256:362777fb014af596ad31334fde1e8c327dfdb076e1960d1694662d46a6917ab9 + # via + # -r requirements/tox.pip + # tox charset-normalizer==3.0.1 \ --hash=sha256:00d3ffdaafe92a5dc603cb9bd5111aaa36dfa187c8285c543be562e61b755f6b \ --hash=sha256:024e606be3ed92216e2b6952ed859d86b4cfa52cd5bc5f050e7dc28f9b43ec42 \ @@ -131,6 +143,7 @@ colorama==0.4.6 \ # via # -r requirements/pytest.pip # -r requirements/tox.pip + # tox commonmark==0.9.1 \ --hash=sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60 \ --hash=sha256:da2f38c92590f83de410ba1a3cbceafbc74fee9def35f9251ba9a971d6d66fd9 @@ -237,9 +250,9 @@ greenlet==2.0.1 \ --hash=sha256:f6327b6907b4cb72f650a5b7b1be23a2aab395017aa6f1adb13069d66360eb3f \ --hash=sha256:fb412b7db83fe56847df9c47b6fe3f13911b06339c2aa02dcc09dce8bbf582cd # via -r requirements/dev.in -hypothesis==6.62.0 \ - --hash=sha256:76f1141e8237f6dd0780a171bec5d6aec873208ccc27b5f9753d4cccd8904272 \ - --hash=sha256:e250da77878460f74b53039493a7a18d6fc137b0b77791b382b6a0f4ada9144e +hypothesis==6.62.1 \ + --hash=sha256:7d1e2f9871e6509662da317adf9b4aabd6b38280fb6c7930aa4f574d2ed25150 \ + --hash=sha256:d00a4a9c54b0b8b4570fe1abe42395807a973b4a507e6718309800e6f84e160d # via -r requirements/pytest.pip idna==3.4 \ --hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 \ @@ -261,10 +274,7 @@ importlib-metadata==6.0.0 \ importlib-resources==5.10.2 \ --hash=sha256:7d543798b0beca10b6a01ac7cafda9f822c54db9e8376a6bf57e0cbd74d486b6 \ --hash=sha256:e4a96c8cc0339647ff9a5e0550d9f276fc5a01ffa276012b58ec108cfd7b8484 - # via - # -r requirements/tox.pip - # keyring - # tox-gh-actions + # via keyring iniconfig==2.0.0 \ --hash=sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3 \ --hash=sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374 @@ -348,6 +358,7 @@ packaging==23.0 \ # -r requirements/tox.pip # build # pudb + # pyproject-api # pytest # tox parso==0.8.3 \ @@ -369,6 +380,7 @@ platformdirs==2.6.2 \ # -r requirements/pip.pip # -r requirements/tox.pip # pylint + # tox # virtualenv pluggy==1.0.0 \ --hash=sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159 \ @@ -381,12 +393,6 @@ pluggy==1.0.0 \ pudb==2022.1.3 \ --hash=sha256:58e83ada9e19ffe92c1fdc78ae5458ef91aeb892a5b8f0e7379e6fa61e0e664a # via -r requirements/dev.in -py==1.11.0 \ - --hash=sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719 \ - --hash=sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378 - # via - # -r requirements/tox.pip - # tox pygments==2.14.0 \ --hash=sha256:b3ed06a9e8ac9a9aae5a6f5dbe78a8a58655d17b43b93c078f094ddc476ae297 \ --hash=sha256:fa7bd7bd2771287c0de303af8bfdfc731f51bd2c6a47ab69d117138893b82717 @@ -398,13 +404,19 @@ pylint==2.15.10 \ --hash=sha256:9df0d07e8948a1c3ffa3b6e2d7e6e63d9fb457c5da5b961ed63106594780cc7e \ --hash=sha256:b3dc5ef7d33858f297ac0d06cc73862f01e4f2e74025ec3eff347ce0bc60baf5 # via -r requirements/dev.in +pyproject-api==1.4.0 \ + --hash=sha256:ac85c1f82e0291dbae5a7739dbb9a990e11ee4034c9b5599ea714f07a24ecd71 \ + --hash=sha256:c34226297781efdd1ba4dfb74ce21076d9a8360e2125ea31803c1a02c76b2460 + # via + # -r requirements/tox.pip + # tox pyproject-hooks==1.0.0 \ --hash=sha256:283c11acd6b928d2f6a7c73fa0d01cb2bdc5f07c57a2eeb6e83d5e56b97976f8 \ --hash=sha256:f271b298b97f5955d53fb12b72c1fb1948c22c1a6b70b315c54cedaca0264ef5 # via build -pytest==7.2.0 \ - --hash=sha256:892f933d339f068883b6fd5a459f03d85bfcb355e4981e146d2c7616c21fef71 \ - --hash=sha256:c4014eb40e10f11f355ad4e3c2fb2c6c6d1919c73f3b5a433de4708202cade59 +pytest==7.2.1 \ + --hash=sha256:c7c6ca206e93355074ae32f7403e8ea12163b1163c976fee7d4d84027c162be5 \ + --hash=sha256:d45e0952f3727241918b8fd0f376f5ff6b301cc0777c6f9a556935c92d8a7d42 # via # -r requirements/pytest.pip # pytest-xdist @@ -433,21 +445,18 @@ rfc3986==2.0.0 \ --hash=sha256:50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd \ --hash=sha256:97aacf9dbd4bfd829baad6e6309fa6573aaf1be3f6fa735c8ab05e46cecb261c # via twine -rich==13.0.1 \ - --hash=sha256:25f83363f636995627a99f6e4abc52ed0970ebbd544960cc63cbb43aaac3d6f0 \ - --hash=sha256:41fe1d05f433b0f4724cda8345219213d2bfa472ef56b2f64f415b5b94d51b04 +rich==13.1.0 \ + --hash=sha256:81c73a30b144bbcdedc13f4ea0b6ffd7fdc3b0d3cc259a9402309c8e4aee1964 \ + --hash=sha256:f846bff22a43e8508aebf3f0f2410ce1c6f4cde429098bd58d91fde038c57299 # via twine -setuptools==65.7.0 \ - --hash=sha256:4d3c92fac8f1118bb77a22181355e29c239cabfe2b9effdaa665c66b711136d7 \ - --hash=sha256:8ab4f1dbf2b4a65f7eec5ad0c620e84c34111a68d3349833494b9088212214dd +setuptools==66.0.0 \ + --hash=sha256:a78d01d1e2c175c474884671dde039962c9d74c7223db7369771fcf6e29ceeab \ + --hash=sha256:bd6eb2d6722568de6d14b87c44a96fac54b2a45ff5e940e639979a3d1792adb6 # via check-manifest six==1.16.0 \ --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 - # via - # -r requirements/tox.pip - # bleach - # tox + # via bleach sortedcontainers==2.4.0 \ --hash=sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88 \ --hash=sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0 @@ -463,6 +472,7 @@ tomli==2.0.1 \ # build # check-manifest # pylint + # pyproject-api # pyproject-hooks # pytest # tox @@ -470,15 +480,15 @@ tomlkit==0.11.6 \ --hash=sha256:07de26b0d8cfc18f871aec595fda24d95b08fef89d147caa861939f37230bf4b \ --hash=sha256:71b952e5721688937fb02cf9d354dbcf0785066149d2855e44531ebdd2b65d73 # via pylint -tox==3.28.0 \ - --hash=sha256:57b5ab7e8bb3074edc3c0c0b4b192a4f3799d3723b2c5b76f1fa9f2d40316eea \ - --hash=sha256:d0d28f3fe6d6d7195c27f8b054c3e99d5451952b54abdae673b71609a581f640 +tox==4.3.1 \ + --hash=sha256:3b4c8bb7f281989b5ea2c39e862711ef2dbd15fedbf0c5f64e7c04c7d8cd8957 \ + --hash=sha256:df2bf3c8329d1bc23a618329480ddefc0400af42804f801599b2ec38914f6309 # via # -r requirements/tox.pip - # tox-gh-actions -tox-gh-actions==2.12.0 \ - --hash=sha256:5214db422a3297854db14fe814d59bd95674b7c577793bf406e7832dabeca03d \ - --hash=sha256:7a8aa62cd616b0e74c7db204bc44bbd603574f468f00c4ba3a2a3c87de8cf514 + # tox-gh +tox-gh==1.0.0 \ + --hash=sha256:9cfbaa927946887d53bc19ae86621f4e5dc8516f3771ba4e74daeb1a1775efcd \ + --hash=sha256:bda94ac15dbb62ef1e517672c05f8039faad5afaf9d1b4c9fa32d07f18027571 # via -r requirements/tox.pip twine==4.0.2 \ --hash=sha256:929bc3c280033347a00f847236564d1c52a3e61b1ac2516c97c48f3ceab756d8 \ @@ -521,6 +531,7 @@ typing-extensions==4.4.0 \ # platformdirs # pylint # rich + # tox urllib3==1.26.14 \ --hash=sha256:076907bf8fd355cde77728471316625a4d2f7e713c125f51953bb5b3eecf4f72 \ --hash=sha256:75edcdc2f7d85b137124a6c3c9fc3933cdeaa12ecb9a6a959f22797a0feca7e1 diff --git a/requirements/kit.pip b/requirements/kit.pip index 30f2b2cc9..7d21afec7 100644 --- a/requirements/kit.pip +++ b/requirements/kit.pip @@ -60,9 +60,9 @@ pyproject-hooks==1.0.0 \ --hash=sha256:283c11acd6b928d2f6a7c73fa0d01cb2bdc5f07c57a2eeb6e83d5e56b97976f8 \ --hash=sha256:f271b298b97f5955d53fb12b72c1fb1948c22c1a6b70b315c54cedaca0264ef5 # via build -setuptools==65.7.0 \ - --hash=sha256:4d3c92fac8f1118bb77a22181355e29c239cabfe2b9effdaa665c66b711136d7 \ - --hash=sha256:8ab4f1dbf2b4a65f7eec5ad0c620e84c34111a68d3349833494b9088212214dd +setuptools==66.0.0 \ + --hash=sha256:a78d01d1e2c175c474884671dde039962c9d74c7223db7369771fcf6e29ceeab \ + --hash=sha256:bd6eb2d6722568de6d14b87c44a96fac54b2a45ff5e940e639979a3d1792adb6 # via -r requirements/kit.in tomli==2.0.1 \ --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ diff --git a/requirements/light-threads.pip b/requirements/light-threads.pip index c7175d41b..983bd3a87 100644 --- a/requirements/light-threads.pip +++ b/requirements/light-threads.pip @@ -70,9 +70,9 @@ cffi==1.15.1 \ --hash=sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01 \ --hash=sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0 # via -r requirements/light-threads.in -dnspython==2.2.1 \ - --hash=sha256:0f7569a4a6ff151958b64304071d370daa3243d15941a7beedf0c9fe5105603e \ - --hash=sha256:a851e51367fb93e9e1361732c1d60dab63eff98712e503ea7d92e6eccb109b4f +dnspython==2.3.0 \ + --hash=sha256:224e32b03eb46be70e12ef6d64e0be123a64e621ab4c0822ff6d450d52a540b9 \ + --hash=sha256:89141536394f909066cabd112e3e1a37e4e654db00a25308b0f130bc3152eb46 # via eventlet eventlet==0.33.2 \ --hash=sha256:82c382c2a2c712f1a8320378a9120ac9589d9f1131c36a63780f0b8504afa5bc \ @@ -201,9 +201,9 @@ pycparser==2.21 \ --hash=sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9 \ --hash=sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206 # via cffi -setuptools==65.7.0 \ - --hash=sha256:4d3c92fac8f1118bb77a22181355e29c239cabfe2b9effdaa665c66b711136d7 \ - --hash=sha256:8ab4f1dbf2b4a65f7eec5ad0c620e84c34111a68d3349833494b9088212214dd +setuptools==66.0.0 \ + --hash=sha256:a78d01d1e2c175c474884671dde039962c9d74c7223db7369771fcf6e29ceeab \ + --hash=sha256:bd6eb2d6722568de6d14b87c44a96fac54b2a45ff5e940e639979a3d1792adb6 # via # gevent # zope-event diff --git a/requirements/lint.pip b/requirements/lint.pip index eace8bb6c..7c32c8890 100644 --- a/requirements/lint.pip +++ b/requirements/lint.pip @@ -31,10 +31,22 @@ build==0.10.0 \ --hash=sha256:af266720050a66c893a6096a2f410989eeac74ff9a68ba194b3f6473e8e26171 \ --hash=sha256:d5b71264afdb5951d6704482aac78de887c80691c52b88a9ad195983ca2c9269 # via check-manifest +cachetools==5.2.1 \ + --hash=sha256:5991bc0e08a1319bb618d3195ca5b6bc76646a49c21d55962977197b301cc1fe \ + --hash=sha256:8462eebf3a6c15d25430a8c27c56ac61340b2ecf60c9ce57afc2b97e450e47da + # via + # -r requirements/tox.pip + # tox certifi==2022.12.7 \ --hash=sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3 \ --hash=sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18 # via requests +chardet==5.1.0 \ + --hash=sha256:0d62712b956bc154f85fb0a266e2a3c5913c2967e00348701b32411d6def31e5 \ + --hash=sha256:362777fb014af596ad31334fde1e8c327dfdb076e1960d1694662d46a6917ab9 + # via + # -r requirements/tox.pip + # tox charset-normalizer==3.0.1 \ --hash=sha256:00d3ffdaafe92a5dc603cb9bd5111aaa36dfa187c8285c543be562e61b755f6b \ --hash=sha256:024e606be3ed92216e2b6952ed859d86b4cfa52cd5bc5f050e7dc28f9b43ec42 \ @@ -142,6 +154,7 @@ colorama==0.4.6 \ # -r requirements/pytest.pip # -r requirements/tox.pip # sphinx-autobuild + # tox commonmark==0.9.1 \ --hash=sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60 \ --hash=sha256:da2f38c92590f83de410ba1a3cbceafbc74fee9def35f9251ba9a971d6d66fd9 @@ -251,9 +264,9 @@ greenlet==2.0.1 \ --hash=sha256:f6327b6907b4cb72f650a5b7b1be23a2aab395017aa6f1adb13069d66360eb3f \ --hash=sha256:fb412b7db83fe56847df9c47b6fe3f13911b06339c2aa02dcc09dce8bbf582cd # via -r requirements/dev.in -hypothesis==6.62.0 \ - --hash=sha256:76f1141e8237f6dd0780a171bec5d6aec873208ccc27b5f9753d4cccd8904272 \ - --hash=sha256:e250da77878460f74b53039493a7a18d6fc137b0b77791b382b6a0f4ada9144e +hypothesis==6.62.1 \ + --hash=sha256:7d1e2f9871e6509662da317adf9b4aabd6b38280fb6c7930aa4f574d2ed25150 \ + --hash=sha256:d00a4a9c54b0b8b4570fe1abe42395807a973b4a507e6718309800e6f84e160d # via -r requirements/pytest.pip idna==3.4 \ --hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 \ @@ -281,10 +294,7 @@ importlib-metadata==6.0.0 \ importlib-resources==5.10.2 \ --hash=sha256:7d543798b0beca10b6a01ac7cafda9f822c54db9e8376a6bf57e0cbd74d486b6 \ --hash=sha256:e4a96c8cc0339647ff9a5e0550d9f276fc5a01ffa276012b58ec108cfd7b8484 - # via - # -r requirements/tox.pip - # keyring - # tox-gh-actions + # via keyring iniconfig==2.0.0 \ --hash=sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3 \ --hash=sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374 @@ -418,6 +428,7 @@ packaging==23.0 \ # -r requirements/tox.pip # build # pudb + # pyproject-api # pytest # sphinx # tox @@ -440,6 +451,7 @@ platformdirs==2.6.2 \ # -r requirements/pip.pip # -r requirements/tox.pip # pylint + # tox # virtualenv pluggy==1.0.0 \ --hash=sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159 \ @@ -452,12 +464,6 @@ pluggy==1.0.0 \ pudb==2022.1.3 \ --hash=sha256:58e83ada9e19ffe92c1fdc78ae5458ef91aeb892a5b8f0e7379e6fa61e0e664a # via -r requirements/dev.in -py==1.11.0 \ - --hash=sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719 \ - --hash=sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378 - # via - # -r requirements/tox.pip - # tox pyenchant==3.2.2 \ --hash=sha256:1cf830c6614362a78aab78d50eaf7c6c93831369c52e1bb64ffae1df0341e637 \ --hash=sha256:5a636832987eaf26efe971968f4d1b78e81f62bca2bde0a9da210c7de43c3bce \ @@ -478,13 +484,19 @@ pylint==2.15.10 \ --hash=sha256:9df0d07e8948a1c3ffa3b6e2d7e6e63d9fb457c5da5b961ed63106594780cc7e \ --hash=sha256:b3dc5ef7d33858f297ac0d06cc73862f01e4f2e74025ec3eff347ce0bc60baf5 # via -r requirements/dev.in +pyproject-api==1.4.0 \ + --hash=sha256:ac85c1f82e0291dbae5a7739dbb9a990e11ee4034c9b5599ea714f07a24ecd71 \ + --hash=sha256:c34226297781efdd1ba4dfb74ce21076d9a8360e2125ea31803c1a02c76b2460 + # via + # -r requirements/tox.pip + # tox pyproject-hooks==1.0.0 \ --hash=sha256:283c11acd6b928d2f6a7c73fa0d01cb2bdc5f07c57a2eeb6e83d5e56b97976f8 \ --hash=sha256:f271b298b97f5955d53fb12b72c1fb1948c22c1a6b70b315c54cedaca0264ef5 # via build -pytest==7.2.0 \ - --hash=sha256:892f933d339f068883b6fd5a459f03d85bfcb355e4981e146d2c7616c21fef71 \ - --hash=sha256:c4014eb40e10f11f355ad4e3c2fb2c6c6d1919c73f3b5a433de4708202cade59 +pytest==7.2.1 \ + --hash=sha256:c7c6ca206e93355074ae32f7403e8ea12163b1163c976fee7d4d84027c162be5 \ + --hash=sha256:d45e0952f3727241918b8fd0f376f5ff6b301cc0777c6f9a556935c92d8a7d42 # via # -r requirements/pytest.pip # pytest-xdist @@ -492,9 +504,9 @@ pytest-xdist==3.1.0 \ --hash=sha256:40fdb8f3544921c5dfcd486ac080ce22870e71d82ced6d2e78fa97c2addd480c \ --hash=sha256:70a76f191d8a1d2d6be69fc440cdf85f3e4c03c08b520fd5dc5d338d6cf07d89 # via -r requirements/pytest.pip -pytz==2022.7 \ - --hash=sha256:7ccfae7b4b2c067464a6733c6261673fdb8fd1be905460396b97a073e9fa683a \ - --hash=sha256:93007def75ae22f7cd991c84e02d434876818661f8df9ad5df9e950ff4e52cfd +pytz==2022.7.1 \ + --hash=sha256:01a0681c4b9684a28304615eba55d1ab31ae00bf68ec157ec3708a8182dbbcd0 \ + --hash=sha256:78f4f37d8198e0627c5f1143240bb0206b8691d8d7ac6d78fee88b78733f8c4a # via babel readme-renderer==37.3 \ --hash=sha256:cd653186dfc73055656f090f227f5cb22a046d7f71a841dfa305f55c9a513273 \ @@ -518,22 +530,20 @@ rfc3986==2.0.0 \ --hash=sha256:50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd \ --hash=sha256:97aacf9dbd4bfd829baad6e6309fa6573aaf1be3f6fa735c8ab05e46cecb261c # via twine -rich==13.0.1 \ - --hash=sha256:25f83363f636995627a99f6e4abc52ed0970ebbd544960cc63cbb43aaac3d6f0 \ - --hash=sha256:41fe1d05f433b0f4724cda8345219213d2bfa472ef56b2f64f415b5b94d51b04 +rich==13.1.0 \ + --hash=sha256:81c73a30b144bbcdedc13f4ea0b6ffd7fdc3b0d3cc259a9402309c8e4aee1964 \ + --hash=sha256:f846bff22a43e8508aebf3f0f2410ce1c6f4cde429098bd58d91fde038c57299 # via twine -setuptools==65.7.0 \ - --hash=sha256:4d3c92fac8f1118bb77a22181355e29c239cabfe2b9effdaa665c66b711136d7 \ - --hash=sha256:8ab4f1dbf2b4a65f7eec5ad0c620e84c34111a68d3349833494b9088212214dd +setuptools==66.0.0 \ + --hash=sha256:a78d01d1e2c175c474884671dde039962c9d74c7223db7369771fcf6e29ceeab \ + --hash=sha256:bd6eb2d6722568de6d14b87c44a96fac54b2a45ff5e940e639979a3d1792adb6 # via check-manifest six==1.16.0 \ --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 # via - # -r requirements/tox.pip # bleach # livereload - # tox snowballstemmer==2.2.0 \ --hash=sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1 \ --hash=sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a @@ -602,6 +612,7 @@ tomli==2.0.1 \ # build # check-manifest # pylint + # pyproject-api # pyproject-hooks # pytest # tox @@ -622,15 +633,15 @@ tornado==6.2 \ --hash=sha256:d3a2f5999215a3a06a4fc218026cd84c61b8b2b40ac5296a6db1f1451ef04c1e \ --hash=sha256:e5f923aa6a47e133d1cf87d60700889d7eae68988704e20c75fb2d65677a8e4b # via livereload -tox==3.28.0 \ - --hash=sha256:57b5ab7e8bb3074edc3c0c0b4b192a4f3799d3723b2c5b76f1fa9f2d40316eea \ - --hash=sha256:d0d28f3fe6d6d7195c27f8b054c3e99d5451952b54abdae673b71609a581f640 +tox==4.3.1 \ + --hash=sha256:3b4c8bb7f281989b5ea2c39e862711ef2dbd15fedbf0c5f64e7c04c7d8cd8957 \ + --hash=sha256:df2bf3c8329d1bc23a618329480ddefc0400af42804f801599b2ec38914f6309 # via # -r requirements/tox.pip - # tox-gh-actions -tox-gh-actions==2.12.0 \ - --hash=sha256:5214db422a3297854db14fe814d59bd95674b7c577793bf406e7832dabeca03d \ - --hash=sha256:7a8aa62cd616b0e74c7db204bc44bbd603574f468f00c4ba3a2a3c87de8cf514 + # tox-gh +tox-gh==1.0.0 \ + --hash=sha256:9cfbaa927946887d53bc19ae86621f4e5dc8516f3771ba4e74daeb1a1775efcd \ + --hash=sha256:bda94ac15dbb62ef1e517672c05f8039faad5afaf9d1b4c9fa32d07f18027571 # via -r requirements/tox.pip twine==4.0.2 \ --hash=sha256:929bc3c280033347a00f847236564d1c52a3e61b1ac2516c97c48f3ceab756d8 \ @@ -673,6 +684,7 @@ typing-extensions==4.4.0 \ # platformdirs # pylint # rich + # tox urllib3==1.26.14 \ --hash=sha256:076907bf8fd355cde77728471316625a4d2f7e713c125f51953bb5b3eecf4f72 \ --hash=sha256:75edcdc2f7d85b137124a6c3c9fc3933cdeaa12ecb9a6a959f22797a0feca7e1 diff --git a/requirements/mypy.pip b/requirements/mypy.pip index d36cf2d4b..16648b773 100644 --- a/requirements/mypy.pip +++ b/requirements/mypy.pip @@ -32,9 +32,9 @@ flaky==3.7.0 \ --hash=sha256:3ad100780721a1911f57a165809b7ea265a7863305acb66708220820caf8aa0d \ --hash=sha256:d6eda73cab5ae7364504b7c44670f70abed9e75f77dd116352f662817592ec9c # via -r requirements/pytest.pip -hypothesis==6.62.0 \ - --hash=sha256:76f1141e8237f6dd0780a171bec5d6aec873208ccc27b5f9753d4cccd8904272 \ - --hash=sha256:e250da77878460f74b53039493a7a18d6fc137b0b77791b382b6a0f4ada9144e +hypothesis==6.62.1 \ + --hash=sha256:7d1e2f9871e6509662da317adf9b4aabd6b38280fb6c7930aa4f574d2ed25150 \ + --hash=sha256:d00a4a9c54b0b8b4570fe1abe42395807a973b4a507e6718309800e6f84e160d # via -r requirements/pytest.pip importlib-metadata==6.0.0 \ --hash=sha256:7efb448ec9a5e313a57655d35aa54cd3e01b7e1fbcf72dce1bf06119420f5bad \ @@ -97,9 +97,9 @@ pluggy==1.0.0 \ # via # -r requirements/pytest.pip # pytest -pytest==7.2.0 \ - --hash=sha256:892f933d339f068883b6fd5a459f03d85bfcb355e4981e146d2c7616c21fef71 \ - --hash=sha256:c4014eb40e10f11f355ad4e3c2fb2c6c6d1919c73f3b5a433de4708202cade59 +pytest==7.2.1 \ + --hash=sha256:c7c6ca206e93355074ae32f7403e8ea12163b1163c976fee7d4d84027c162be5 \ + --hash=sha256:d45e0952f3727241918b8fd0f376f5ff6b301cc0777c6f9a556935c92d8a7d42 # via # -r requirements/pytest.pip # pytest-xdist diff --git a/requirements/pip-tools.pip b/requirements/pip-tools.pip index b2ca4b36c..4884bbf18 100644 --- a/requirements/pip-tools.pip +++ b/requirements/pip-tools.pip @@ -34,9 +34,9 @@ pyproject-hooks==1.0.0 \ --hash=sha256:283c11acd6b928d2f6a7c73fa0d01cb2bdc5f07c57a2eeb6e83d5e56b97976f8 \ --hash=sha256:f271b298b97f5955d53fb12b72c1fb1948c22c1a6b70b315c54cedaca0264ef5 # via build -setuptools==65.7.0 \ - --hash=sha256:4d3c92fac8f1118bb77a22181355e29c239cabfe2b9effdaa665c66b711136d7 \ - --hash=sha256:8ab4f1dbf2b4a65f7eec5ad0c620e84c34111a68d3349833494b9088212214dd +setuptools==66.0.0 \ + --hash=sha256:a78d01d1e2c175c474884671dde039962c9d74c7223db7369771fcf6e29ceeab \ + --hash=sha256:bd6eb2d6722568de6d14b87c44a96fac54b2a45ff5e940e639979a3d1792adb6 # via pip-tools tomli==2.0.1 \ --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ diff --git a/requirements/pytest.pip b/requirements/pytest.pip index 0419cd587..a57e8ae61 100644 --- a/requirements/pytest.pip +++ b/requirements/pytest.pip @@ -28,9 +28,9 @@ flaky==3.7.0 \ --hash=sha256:3ad100780721a1911f57a165809b7ea265a7863305acb66708220820caf8aa0d \ --hash=sha256:d6eda73cab5ae7364504b7c44670f70abed9e75f77dd116352f662817592ec9c # via -r requirements/pytest.in -hypothesis==6.62.0 \ - --hash=sha256:76f1141e8237f6dd0780a171bec5d6aec873208ccc27b5f9753d4cccd8904272 \ - --hash=sha256:e250da77878460f74b53039493a7a18d6fc137b0b77791b382b6a0f4ada9144e +hypothesis==6.62.1 \ + --hash=sha256:7d1e2f9871e6509662da317adf9b4aabd6b38280fb6c7930aa4f574d2ed25150 \ + --hash=sha256:d00a4a9c54b0b8b4570fe1abe42395807a973b4a507e6718309800e6f84e160d # via -r requirements/pytest.in importlib-metadata==6.0.0 \ --hash=sha256:7efb448ec9a5e313a57655d35aa54cd3e01b7e1fbcf72dce1bf06119420f5bad \ @@ -50,9 +50,9 @@ pluggy==1.0.0 \ --hash=sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159 \ --hash=sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3 # via pytest -pytest==7.2.0 \ - --hash=sha256:892f933d339f068883b6fd5a459f03d85bfcb355e4981e146d2c7616c21fef71 \ - --hash=sha256:c4014eb40e10f11f355ad4e3c2fb2c6c6d1919c73f3b5a433de4708202cade59 +pytest==7.2.1 \ + --hash=sha256:c7c6ca206e93355074ae32f7403e8ea12163b1163c976fee7d4d84027c162be5 \ + --hash=sha256:d45e0952f3727241918b8fd0f376f5ff6b301cc0777c6f9a556935c92d8a7d42 # via # -r requirements/pytest.in # pytest-xdist diff --git a/requirements/tox.pip b/requirements/tox.pip index 9601384ef..221e9b9f7 100644 --- a/requirements/tox.pip +++ b/requirements/tox.pip @@ -4,10 +4,20 @@ # # make upgrade # +cachetools==5.2.1 \ + --hash=sha256:5991bc0e08a1319bb618d3195ca5b6bc76646a49c21d55962977197b301cc1fe \ + --hash=sha256:8462eebf3a6c15d25430a8c27c56ac61340b2ecf60c9ce57afc2b97e450e47da + # via tox +chardet==5.1.0 \ + --hash=sha256:0d62712b956bc154f85fb0a266e2a3c5913c2967e00348701b32411d6def31e5 \ + --hash=sha256:362777fb014af596ad31334fde1e8c327dfdb076e1960d1694662d46a6917ab9 + # via tox colorama==0.4.6 \ --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \ --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 - # via -r requirements/tox.in + # via + # -r requirements/tox.in + # tox distlib==0.3.6 \ --hash=sha256:14bad2d9b04d3a36127ac97f30b12a19268f211063d8f8ee4f47108896e11b46 \ --hash=sha256:f35c4b692542ca110de7ef0bea44d73981caeb34ca0b9b6b2e6d7790dda8f80e @@ -25,43 +35,41 @@ importlib-metadata==6.0.0 \ # pluggy # tox # virtualenv -importlib-resources==5.10.2 \ - --hash=sha256:7d543798b0beca10b6a01ac7cafda9f822c54db9e8376a6bf57e0cbd74d486b6 \ - --hash=sha256:e4a96c8cc0339647ff9a5e0550d9f276fc5a01ffa276012b58ec108cfd7b8484 - # via tox-gh-actions packaging==23.0 \ --hash=sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2 \ --hash=sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97 - # via tox + # via + # pyproject-api + # tox platformdirs==2.6.2 \ --hash=sha256:83c8f6d04389165de7c9b6f0c682439697887bca0aa2f1c87ef1826be3584490 \ --hash=sha256:e1fea1fe471b9ff8332e229df3cb7de4f53eeea4998d3b6bfff542115e998bd2 - # via virtualenv + # via + # tox + # virtualenv pluggy==1.0.0 \ --hash=sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159 \ --hash=sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3 # via tox -py==1.11.0 \ - --hash=sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719 \ - --hash=sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378 - # via tox -six==1.16.0 \ - --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ - --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 +pyproject-api==1.4.0 \ + --hash=sha256:ac85c1f82e0291dbae5a7739dbb9a990e11ee4034c9b5599ea714f07a24ecd71 \ + --hash=sha256:c34226297781efdd1ba4dfb74ce21076d9a8360e2125ea31803c1a02c76b2460 # via tox tomli==2.0.1 \ --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f - # via tox -tox==3.28.0 \ - --hash=sha256:57b5ab7e8bb3074edc3c0c0b4b192a4f3799d3723b2c5b76f1fa9f2d40316eea \ - --hash=sha256:d0d28f3fe6d6d7195c27f8b054c3e99d5451952b54abdae673b71609a581f640 + # via + # pyproject-api + # tox +tox==4.3.1 \ + --hash=sha256:3b4c8bb7f281989b5ea2c39e862711ef2dbd15fedbf0c5f64e7c04c7d8cd8957 \ + --hash=sha256:df2bf3c8329d1bc23a618329480ddefc0400af42804f801599b2ec38914f6309 # via # -r requirements/tox.in - # tox-gh-actions -tox-gh-actions==2.12.0 \ - --hash=sha256:5214db422a3297854db14fe814d59bd95674b7c577793bf406e7832dabeca03d \ - --hash=sha256:7a8aa62cd616b0e74c7db204bc44bbd603574f468f00c4ba3a2a3c87de8cf514 + # tox-gh +tox-gh==1.0.0 \ + --hash=sha256:9cfbaa927946887d53bc19ae86621f4e5dc8516f3771ba4e74daeb1a1775efcd \ + --hash=sha256:bda94ac15dbb62ef1e517672c05f8039faad5afaf9d1b4c9fa32d07f18027571 # via -r requirements/tox.in typing-extensions==4.4.0 \ --hash=sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa \ @@ -69,6 +77,7 @@ typing-extensions==4.4.0 \ # via # importlib-metadata # platformdirs + # tox virtualenv==20.17.1 \ --hash=sha256:ce3b1684d6e1a20a3e5ed36795a97dfc6af29bc3970ca8dab93e11ac6094b3c4 \ --hash=sha256:f8b927684efc6f1cc206c9db297a570ab9ad0e51c16fa9e45487d36d1905c058 @@ -76,6 +85,4 @@ virtualenv==20.17.1 \ zipp==3.11.0 \ --hash=sha256:83a28fcb75844b5c0cdaf5aa4003c2d728c77e05f5aeabe8e95e56727005fbaa \ --hash=sha256:a7a22e05929290a67401440b39690ae6563279bced5f314609d9d03798f56766 - # via - # importlib-metadata - # importlib-resources + # via importlib-metadata From 5488ab8d1ec74e6c69b827eaf68dd53af23633b3 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Mon, 16 Jan 2023 09:42:07 -0500 Subject: [PATCH 017/139] build: dnspython has a problem at the moment, pin it --- requirements/light-threads.pip | 10 ++++++---- requirements/pins.pip | 4 ++++ 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/requirements/light-threads.pip b/requirements/light-threads.pip index 983bd3a87..35ba83bd9 100644 --- a/requirements/light-threads.pip +++ b/requirements/light-threads.pip @@ -70,10 +70,12 @@ cffi==1.15.1 \ --hash=sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01 \ --hash=sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0 # via -r requirements/light-threads.in -dnspython==2.3.0 \ - --hash=sha256:224e32b03eb46be70e12ef6d64e0be123a64e621ab4c0822ff6d450d52a540b9 \ - --hash=sha256:89141536394f909066cabd112e3e1a37e4e654db00a25308b0f130bc3152eb46 - # via eventlet +dnspython==2.2.1 \ + --hash=sha256:0f7569a4a6ff151958b64304071d370daa3243d15941a7beedf0c9fe5105603e \ + --hash=sha256:a851e51367fb93e9e1361732c1d60dab63eff98712e503ea7d92e6eccb109b4f + # via + # -c requirements/pins.pip + # eventlet eventlet==0.33.2 \ --hash=sha256:82c382c2a2c712f1a8320378a9120ac9589d9f1131c36a63780f0b8504afa5bc \ --hash=sha256:96039b9389dbb4431b1c0a6e42ea1326628cc7ad63a6280b02947f111d3d8e04 diff --git a/requirements/pins.pip b/requirements/pins.pip index 4ecea4264..4f9c00c58 100644 --- a/requirements/pins.pip +++ b/requirements/pins.pip @@ -6,3 +6,7 @@ # docutils has been going through some turmoil. Different packages require it, # but have different pins. This seems to satisfy them all: #docutils>=0.17,<0.18 + +# https://github.com/rthalley/dnspython/issues/885 +# https://github.com/eventlet/eventlet/issues/781 +dnspython<2.3.0 From 177eedde098fcfb65a569245471969db7ce51f45 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Mon, 16 Jan 2023 10:15:44 -0500 Subject: [PATCH 018/139] build: tox 4.3.0 borked environment substitution, pin it --- requirements/dev.pip | 6 +++--- requirements/lint.pip | 6 +++--- requirements/pins.pip | 3 +++ requirements/tox.pip | 6 +++--- 4 files changed, 12 insertions(+), 9 deletions(-) diff --git a/requirements/dev.pip b/requirements/dev.pip index 4057d2498..d3ed2e3f7 100644 --- a/requirements/dev.pip +++ b/requirements/dev.pip @@ -480,9 +480,9 @@ tomlkit==0.11.6 \ --hash=sha256:07de26b0d8cfc18f871aec595fda24d95b08fef89d147caa861939f37230bf4b \ --hash=sha256:71b952e5721688937fb02cf9d354dbcf0785066149d2855e44531ebdd2b65d73 # via pylint -tox==4.3.1 \ - --hash=sha256:3b4c8bb7f281989b5ea2c39e862711ef2dbd15fedbf0c5f64e7c04c7d8cd8957 \ - --hash=sha256:df2bf3c8329d1bc23a618329480ddefc0400af42804f801599b2ec38914f6309 +tox==4.2.8 \ + --hash=sha256:7c31940d755355210151e8bef23feab3d714a8a4795e513c454ff0baccd995b1 \ + --hash=sha256:e9d5006a533d280e2ca26e3ca61052ffa55a65b683486f92d12563a14a9b7a4f # via # -r requirements/tox.pip # tox-gh diff --git a/requirements/lint.pip b/requirements/lint.pip index 7c32c8890..b5c4875fe 100644 --- a/requirements/lint.pip +++ b/requirements/lint.pip @@ -633,9 +633,9 @@ tornado==6.2 \ --hash=sha256:d3a2f5999215a3a06a4fc218026cd84c61b8b2b40ac5296a6db1f1451ef04c1e \ --hash=sha256:e5f923aa6a47e133d1cf87d60700889d7eae68988704e20c75fb2d65677a8e4b # via livereload -tox==4.3.1 \ - --hash=sha256:3b4c8bb7f281989b5ea2c39e862711ef2dbd15fedbf0c5f64e7c04c7d8cd8957 \ - --hash=sha256:df2bf3c8329d1bc23a618329480ddefc0400af42804f801599b2ec38914f6309 +tox==4.2.8 \ + --hash=sha256:7c31940d755355210151e8bef23feab3d714a8a4795e513c454ff0baccd995b1 \ + --hash=sha256:e9d5006a533d280e2ca26e3ca61052ffa55a65b683486f92d12563a14a9b7a4f # via # -r requirements/tox.pip # tox-gh diff --git a/requirements/pins.pip b/requirements/pins.pip index 4f9c00c58..7f882af96 100644 --- a/requirements/pins.pip +++ b/requirements/pins.pip @@ -10,3 +10,6 @@ # https://github.com/rthalley/dnspython/issues/885 # https://github.com/eventlet/eventlet/issues/781 dnspython<2.3.0 + +# https://github.com/tox-dev/tox/issues/2869 +tox<4.3.0 diff --git a/requirements/tox.pip b/requirements/tox.pip index 221e9b9f7..fed2d32bd 100644 --- a/requirements/tox.pip +++ b/requirements/tox.pip @@ -61,9 +61,9 @@ tomli==2.0.1 \ # via # pyproject-api # tox -tox==4.3.1 \ - --hash=sha256:3b4c8bb7f281989b5ea2c39e862711ef2dbd15fedbf0c5f64e7c04c7d8cd8957 \ - --hash=sha256:df2bf3c8329d1bc23a618329480ddefc0400af42804f801599b2ec38914f6309 +tox==4.2.8 \ + --hash=sha256:7c31940d755355210151e8bef23feab3d714a8a4795e513c454ff0baccd995b1 \ + --hash=sha256:e9d5006a533d280e2ca26e3ca61052ffa55a65b683486f92d12563a14a9b7a4f # via # -r requirements/tox.in # tox-gh From 2e447cac7034557e0bcb10c003d798c360355e47 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Mon, 16 Jan 2023 12:22:49 -0500 Subject: [PATCH 019/139] build: tox fixed the bug in 4.3.2 https://github.com/tox-dev/tox/pull/2873 --- requirements/pins.pip | 3 --- 1 file changed, 3 deletions(-) diff --git a/requirements/pins.pip b/requirements/pins.pip index 7f882af96..4f9c00c58 100644 --- a/requirements/pins.pip +++ b/requirements/pins.pip @@ -10,6 +10,3 @@ # https://github.com/rthalley/dnspython/issues/885 # https://github.com/eventlet/eventlet/issues/781 dnspython<2.3.0 - -# https://github.com/tox-dev/tox/issues/2869 -tox<4.3.0 From bf309d2af30507188cf40405041c5826560d3664 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Mon, 16 Jan 2023 12:27:33 -0500 Subject: [PATCH 020/139] chore: make upgrade --- requirements/dev.pip | 6 +++--- requirements/lint.pip | 6 +++--- requirements/tox.pip | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/requirements/dev.pip b/requirements/dev.pip index d3ed2e3f7..44e765c60 100644 --- a/requirements/dev.pip +++ b/requirements/dev.pip @@ -480,9 +480,9 @@ tomlkit==0.11.6 \ --hash=sha256:07de26b0d8cfc18f871aec595fda24d95b08fef89d147caa861939f37230bf4b \ --hash=sha256:71b952e5721688937fb02cf9d354dbcf0785066149d2855e44531ebdd2b65d73 # via pylint -tox==4.2.8 \ - --hash=sha256:7c31940d755355210151e8bef23feab3d714a8a4795e513c454ff0baccd995b1 \ - --hash=sha256:e9d5006a533d280e2ca26e3ca61052ffa55a65b683486f92d12563a14a9b7a4f +tox==4.3.2 \ + --hash=sha256:59855a58c16b9f7b13d0ee96f74d6a9ce70368b54dca05f112aabaaa94ebc91d \ + --hash=sha256:95bc7bf7d959563a29775a18a6fc5794724124d8212fa1ec3b81e0ff579fb710 # via # -r requirements/tox.pip # tox-gh diff --git a/requirements/lint.pip b/requirements/lint.pip index b5c4875fe..06d5ee2f7 100644 --- a/requirements/lint.pip +++ b/requirements/lint.pip @@ -633,9 +633,9 @@ tornado==6.2 \ --hash=sha256:d3a2f5999215a3a06a4fc218026cd84c61b8b2b40ac5296a6db1f1451ef04c1e \ --hash=sha256:e5f923aa6a47e133d1cf87d60700889d7eae68988704e20c75fb2d65677a8e4b # via livereload -tox==4.2.8 \ - --hash=sha256:7c31940d755355210151e8bef23feab3d714a8a4795e513c454ff0baccd995b1 \ - --hash=sha256:e9d5006a533d280e2ca26e3ca61052ffa55a65b683486f92d12563a14a9b7a4f +tox==4.3.2 \ + --hash=sha256:59855a58c16b9f7b13d0ee96f74d6a9ce70368b54dca05f112aabaaa94ebc91d \ + --hash=sha256:95bc7bf7d959563a29775a18a6fc5794724124d8212fa1ec3b81e0ff579fb710 # via # -r requirements/tox.pip # tox-gh diff --git a/requirements/tox.pip b/requirements/tox.pip index fed2d32bd..7accaabe0 100644 --- a/requirements/tox.pip +++ b/requirements/tox.pip @@ -61,9 +61,9 @@ tomli==2.0.1 \ # via # pyproject-api # tox -tox==4.2.8 \ - --hash=sha256:7c31940d755355210151e8bef23feab3d714a8a4795e513c454ff0baccd995b1 \ - --hash=sha256:e9d5006a533d280e2ca26e3ca61052ffa55a65b683486f92d12563a14a9b7a4f +tox==4.3.2 \ + --hash=sha256:59855a58c16b9f7b13d0ee96f74d6a9ce70368b54dca05f112aabaaa94ebc91d \ + --hash=sha256:95bc7bf7d959563a29775a18a6fc5794724124d8212fa1ec3b81e0ff579fb710 # via # -r requirements/tox.in # tox-gh From ec4701f937d2b91fcd61491812595939caf6bbe2 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Mon, 16 Jan 2023 10:54:28 -0500 Subject: [PATCH 021/139] build(docs): this version needs to stay up to date --- .readthedocs.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.readthedocs.yml b/.readthedocs.yml index 8c96c02fd..48d6b434d 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -17,6 +17,7 @@ formats: - pdf python: + # PYVERSIONS version: 3.7 install: - requirements: doc/requirements.pip From be1e1ae8ca619c92ed84ab0a01c95f71a48e5284 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Mon, 16 Jan 2023 13:48:00 -0500 Subject: [PATCH 022/139] build: use scriv to create GitHub releases --- CHANGES.rst | 3 +- Makefile | 4 +- ci/ghrel_template.md.j2 | 5 ++ ci/github_releases.py | 146 ---------------------------------------- doc/changes.rst | 2 +- doc/requirements.in | 1 + pyproject.toml | 8 +++ 7 files changed, 19 insertions(+), 150 deletions(-) create mode 100644 ci/ghrel_template.md.j2 delete mode 100644 ci/github_releases.py diff --git a/CHANGES.rst b/CHANGES.rst index dc05aa19e..d845d8848 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -22,6 +22,7 @@ Unreleased - Typing: all product and test code has type annotations. +.. scriv-start-here .. _changes_7-0-5: @@ -965,7 +966,7 @@ Version 5.3 — 2020-09-13 .. _issue 1011: https://github.com/nedbat/coveragepy/issues/1011 -.. endchangesinclude +.. scriv-end-here Older changes ------------- diff --git a/Makefile b/Makefile index 50d0a5074..a3028b8bf 100644 --- a/Makefile +++ b/Makefile @@ -253,8 +253,8 @@ relnotes_json: $(RELNOTES_JSON) ## Convert changelog to JSON for further parsin $(RELNOTES_JSON): $(CHANGES_MD) $(DOCBIN)/python ci/parse_relnotes.py tmp/rst_rst/changes.md $(RELNOTES_JSON) -github_releases: $(RELNOTES_JSON) ## Update GitHub releases. - $(DOCBIN)/python ci/github_releases.py $(RELNOTES_JSON) $(REPO_OWNER) +github_releases: $(DOCBIN) ## Update GitHub releases. + $(DOCBIN)/python -m scriv github-release comment_on_fixes: $(RELNOTES_JSON) ## Add a comment to issues that were fixed. python ci/comment_on_fixes.py $(REPO_OWNER) diff --git a/ci/ghrel_template.md.j2 b/ci/ghrel_template.md.j2 new file mode 100644 index 000000000..9d626bcab --- /dev/null +++ b/ci/ghrel_template.md.j2 @@ -0,0 +1,5 @@ +<!-- for use with scriv to create GitHub releases. --> +{{body}} + +:arrow_right: PyPI page: [coverage {{version}}](https://pypi.org/project/coverage/{{version}}). +:arrow_right: To install: `python3 -m pip install coverage=={{version}}` diff --git a/ci/github_releases.py b/ci/github_releases.py deleted file mode 100644 index 5ba3d5229..000000000 --- a/ci/github_releases.py +++ /dev/null @@ -1,146 +0,0 @@ -# Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0 -# For details: https://github.com/nedbat/coveragepy/blob/master/NOTICE.txt - -"""Upload release notes into GitHub releases.""" - -import json -import shlex -import subprocess -import sys - -import pkg_resources -import requests - - -RELEASES_URL = "https://api.github.com/repos/{repo}/releases" - -def run_command(cmd): - """ - Run a command line (with no shell). - - Returns a tuple: - bool: true if the command succeeded. - str: the output of the command. - - """ - proc = subprocess.run( - shlex.split(cmd), - shell=False, - check=False, - stdout=subprocess.PIPE, - stderr=subprocess.STDOUT, - ) - output = proc.stdout.decode("utf-8") - succeeded = proc.returncode == 0 - return succeeded, output - -def does_tag_exist(tag_name): - """ - Does `tag_name` exist as a tag in git? - """ - return run_command(f"git rev-parse --verify {tag_name}")[0] - -def check_ok(resp): - """ - Check that the Requests response object was successful. - - Raise an exception if not. - """ - if not resp: - print(f"text: {resp.text!r}") - resp.raise_for_status() - -def github_paginated(session, url): - """ - Get all the results from a paginated GitHub url. - """ - while True: - resp = session.get(url) - check_ok(resp) - yield from resp.json() - next_link = resp.links.get("next", None) - if not next_link: - break - url = next_link["url"] - -def get_releases(session, repo): - """ - Get all the releases from a name/project repo. - - Returns: - A dict mapping tag names to release dictionaries. - """ - url = RELEASES_URL.format(repo=repo) - releases = { r['tag_name']: r for r in github_paginated(session, url) } - return releases - -RELEASE_BODY_FMT = """\ -{relnote_text} - -:arrow_right:\xa0 PyPI page: [coverage {version}](https://pypi.org/project/coverage/{version}). -:arrow_right:\xa0 To install: `python3 -m pip install coverage=={version}` -""" - -def release_for_relnote(relnote): - """ - Turn a release note dict into the data needed by GitHub for a release. - """ - relnote_text = relnote["text"] - tag = version = relnote["version"] - body = RELEASE_BODY_FMT.format(relnote_text=relnote_text, version=version) - return { - "tag_name": tag, - "name": version, - "body": body, - "draft": False, - "prerelease": relnote["prerelease"], - } - -def create_release(session, repo, release_data): - """ - Create a new GitHub release. - """ - print(f"Creating {release_data['name']}") - resp = session.post(RELEASES_URL.format(repo=repo), json=release_data) - check_ok(resp) - -def update_release(session, url, release_data): - """ - Update an existing GitHub release. - """ - print(f"Updating {release_data['name']}") - resp = session.patch(url, json=release_data) - check_ok(resp) - -def update_github_releases(json_filename, repo): - """ - Read the json file, and create or update releases in GitHub. - """ - gh_session = requests.Session() - releases = get_releases(gh_session, repo) - if 0: # if you need to delete all the releases! - for release in releases.values(): - print(release["tag_name"]) - resp = gh_session.delete(release["url"]) - check_ok(resp) - return - - with open(json_filename) as jf: - relnotes = json.load(jf) - relnotes.sort(key=lambda rel: pkg_resources.parse_version(rel["version"])) - for relnote in relnotes: - tag = relnote["version"] - if not does_tag_exist(tag): - continue - release_data = release_for_relnote(relnote) - exists = tag in releases - if not exists: - create_release(gh_session, repo, release_data) - else: - release = releases[tag] - if release["body"] != release_data["body"]: - url = release["url"] - update_release(gh_session, url, release_data) - -if __name__ == "__main__": - update_github_releases(*sys.argv[1:3]) diff --git a/doc/changes.rst b/doc/changes.rst index da0f45aef..7f2df6181 100644 --- a/doc/changes.rst +++ b/doc/changes.rst @@ -6,7 +6,7 @@ .. The recent changes from the top-level file: .. include:: ../CHANGES.rst - :end-before: endchangesinclude + :end-before: scriv-end-here .. Older changes here: diff --git a/doc/requirements.in b/doc/requirements.in index 12aba6cc1..42eca4052 100644 --- a/doc/requirements.in +++ b/doc/requirements.in @@ -9,6 +9,7 @@ cogapp #doc8 pyenchant +scriv # for writing GitHub releases sphinx sphinx-autobuild sphinx_rtd_theme diff --git a/pyproject.toml b/pyproject.toml index b21ba3b76..e11a5af1d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -27,3 +27,11 @@ exclude = """(?x)( ^coverage/fullcoverage/encodings\\.py$ # can't import things into it. | ^tests/balance_xdist_plugin\\.py$ # not part of our test suite. )""" + +[tool.scriv] +# Changelog management: https://pypi.org/project/scriv/ +format = "rst" +output_file = "CHANGES.rst" +insert_marker = "scriv-start-here" +end_marker = "scriv-end-here" +ghrel_template = "file: ci/ghrel_template.md.j2" From 56f4f20abfb7e11793e54ed94712abdcc66d6964 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Mon, 16 Jan 2023 13:50:13 -0500 Subject: [PATCH 023/139] chore: make upgrade --- doc/requirements.pip | 27 +++++++++++++++++++++++++-- requirements/kit.pip | 6 +++--- requirements/lint.pip | 21 ++++++++++++++++++++- 3 files changed, 48 insertions(+), 6 deletions(-) diff --git a/doc/requirements.pip b/doc/requirements.pip index 488094f4d..b93edbf5b 100644 --- a/doc/requirements.pip +++ b/doc/requirements.pip @@ -8,6 +8,10 @@ alabaster==0.7.13 \ --hash=sha256:1ee19aca801bbabb5ba3f5f258e4422dfa86f82f3e9cefb0859b283cdd7f62a3 \ --hash=sha256:a27a4a084d5e690e16e01e03ad2b2e552c61a65469419b907243193de1a84ae2 # via sphinx +attrs==22.2.0 \ + --hash=sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836 \ + --hash=sha256:c9227bfc2f01993c03f68db37d1d15c9690188323c067c641f1a35ca58185f99 + # via scriv babel==2.11.0 \ --hash=sha256:1ad3eca1c885218f6dce2ab67291178944f810a10a9b5f3cb8382a5a232b64fe \ --hash=sha256:5ef4b3226b0180dedded4229651c8b0e1a3a6a2837d45a073272f313e4cf97f6 @@ -106,6 +110,16 @@ charset-normalizer==3.0.1 \ --hash=sha256:f9d0c5c045a3ca9bedfc35dca8526798eb91a07aa7a2c0fee134c6c6f321cbd7 \ --hash=sha256:ff6f3db31555657f3163b15a6b7c6938d08df7adbfc9dd13d9d19edad678f1e8 # via requests +click==8.1.3 \ + --hash=sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e \ + --hash=sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48 + # via + # click-log + # scriv +click-log==0.4.0 \ + --hash=sha256:3970f8570ac54491237bcdb3d8ab5e3eef6c057df29f8c3d1151a51a9c23b975 \ + --hash=sha256:a43e394b528d52112af599f2fc9e4b7cf3c15f94e53581f74fa6867e68c91756 + # via scriv cogapp==3.3.0 \ --hash=sha256:1be95183f70282422d594fa42426be6923070a4bd8335621f6347f3aeee81db0 \ --hash=sha256:8b5b5f6063d8ee231961c05da010cb27c30876b2279e23ad0eae5f8f09460d50 @@ -132,12 +146,15 @@ importlib-metadata==6.0.0 \ --hash=sha256:7efb448ec9a5e313a57655d35aa54cd3e01b7e1fbcf72dce1bf06119420f5bad \ --hash=sha256:e354bedeb60efa6affdcc8ae121b73544a7aa74156d047311948f6d711cd378d # via + # click # sphinx # sphinxcontrib-spelling jinja2==3.1.2 \ --hash=sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852 \ --hash=sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61 - # via sphinx + # via + # scriv + # sphinx livereload==2.6.3 \ --hash=sha256:776f2f865e59fde56490a56bcc6773b6917366bce0c267c60ee8aaf1a0959869 \ --hash=sha256:ad4ac6f53b2d62bb6ce1a5e6e96f1f00976a32348afedcb4b6d68df2a1d346e4 @@ -207,7 +224,13 @@ pytz==2022.7.1 \ requests==2.28.2 \ --hash=sha256:64299f4909223da747622c030b781c0d7811e359c37124b4bd368fb8c6518baa \ --hash=sha256:98b1b2782e3c6c4904938b84c0eb932721069dfdb9134313beff7c83c2df24bf - # via sphinx + # via + # scriv + # sphinx +scriv==1.1.0 \ + --hash=sha256:1064101623e318d906d91f7e1405c97af414c67f0c7da8ee4d08eaa523b735eb \ + --hash=sha256:f2670624b2c44cdf34224c8b032b71a00a41b78e9f587140da6dd0b010e66b75 + # via -r doc/requirements.in six==1.16.0 \ --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 diff --git a/requirements/kit.pip b/requirements/kit.pip index 7d21afec7..ae6f4c393 100644 --- a/requirements/kit.pip +++ b/requirements/kit.pip @@ -24,9 +24,9 @@ certifi==2022.12.7 \ --hash=sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3 \ --hash=sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18 # via cibuildwheel -cibuildwheel==2.11.4 \ - --hash=sha256:0252d41c0fb50d5e073c4c046582bc67b674ee0c6e3539e77d24af1fd779dffa \ - --hash=sha256:1df40e26e7097a69db6b4cb1b4e89f26f89b20ef6e4c48cf598444d0b8c4c079 +cibuildwheel==2.12.0 \ + --hash=sha256:3d75d58f8e9909f2c9fe4923d03682e9ae27a45d38deba2a76b757114bdcf361 \ + --hash=sha256:510b13a5cc8d854a82c1a6fa819c874b1f6a3064b90e31fda7b7a649bc8e80af # via -r requirements/kit.in colorama==0.4.6 \ --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \ diff --git a/requirements/lint.pip b/requirements/lint.pip index 06d5ee2f7..210cc40d7 100644 --- a/requirements/lint.pip +++ b/requirements/lint.pip @@ -19,6 +19,7 @@ attrs==22.2.0 \ # -r requirements/pytest.pip # hypothesis # pytest + # scriv babel==2.11.0 \ --hash=sha256:1ad3eca1c885218f6dce2ab67291178944f810a10a9b5f3cb8382a5a232b64fe \ --hash=sha256:5ef4b3226b0180dedded4229651c8b0e1a3a6a2837d45a073272f313e4cf97f6 @@ -141,6 +142,16 @@ check-manifest==0.49 \ --hash=sha256:058cd30057714c39b96ce4d83f254fc770e3145c7b1932b5940b4e3efb5521ef \ --hash=sha256:64a640445542cf226919657c7b78d02d9c1ca5b1c25d7e66e0e1ff325060f416 # via -r requirements/dev.in +click==8.1.3 \ + --hash=sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e \ + --hash=sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48 + # via + # click-log + # scriv +click-log==0.4.0 \ + --hash=sha256:3970f8570ac54491237bcdb3d8ab5e3eef6c057df29f8c3d1151a51a9c23b975 \ + --hash=sha256:a43e394b528d52112af599f2fc9e4b7cf3c15f94e53581f74fa6867e68c91756 + # via scriv cogapp==3.3.0 \ --hash=sha256:1be95183f70282422d594fa42426be6923070a4bd8335621f6347f3aeee81db0 \ --hash=sha256:8b5b5f6063d8ee231961c05da010cb27c30876b2279e23ad0eae5f8f09460d50 @@ -283,6 +294,7 @@ importlib-metadata==6.0.0 \ # -r requirements/pip.pip # -r requirements/pytest.pip # build + # click # keyring # pluggy # pytest @@ -316,7 +328,9 @@ jedi==0.18.2 \ jinja2==3.1.2 \ --hash=sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852 \ --hash=sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61 - # via sphinx + # via + # scriv + # sphinx keyring==23.13.1 \ --hash=sha256:771ed2a91909389ed6148631de678f82ddc73737d85a927f382a8a1b157898cd \ --hash=sha256:ba2e15a9b35e21908d0aaf4e0a47acc52d6ae33444df0da2b49d41a46ef6d678 @@ -520,6 +534,7 @@ requests==2.28.2 \ # via # -r requirements/dev.in # requests-toolbelt + # scriv # sphinx # twine requests-toolbelt==0.10.1 \ @@ -534,6 +549,10 @@ rich==13.1.0 \ --hash=sha256:81c73a30b144bbcdedc13f4ea0b6ffd7fdc3b0d3cc259a9402309c8e4aee1964 \ --hash=sha256:f846bff22a43e8508aebf3f0f2410ce1c6f4cde429098bd58d91fde038c57299 # via twine +scriv==1.1.0 \ + --hash=sha256:1064101623e318d906d91f7e1405c97af414c67f0c7da8ee4d08eaa523b735eb \ + --hash=sha256:f2670624b2c44cdf34224c8b032b71a00a41b78e9f587140da6dd0b010e66b75 + # via -r doc/requirements.in setuptools==66.0.0 \ --hash=sha256:a78d01d1e2c175c474884671dde039962c9d74c7223db7369771fcf6e29ceeab \ --hash=sha256:bd6eb2d6722568de6d14b87c44a96fac54b2a45ff5e940e639979a3d1792adb6 From 6c1437e7d4cc1656faa9a9b12ea7d15c16a4d872 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Mon, 16 Jan 2023 19:01:35 -0500 Subject: [PATCH 024/139] docs: remove mentions of the testing-in-python mailing list. The list is defunct, and not a good place to get help. --- .github/ISSUE_TEMPLATE/config.yml | 3 --- doc/faq.rst | 15 ++++++++------- doc/index.rst | 5 +++-- 3 files changed, 11 insertions(+), 12 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 433310b17..5c7bfc9d2 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -8,9 +8,6 @@ contact_links: - name: Frequently Asked Questions url: https://coverage.readthedocs.io/en/latest/faq.html about: Some common problems are described here. - - name: Testing in Python mailing list - url: http://lists.idyll.org/listinfo/testing-in-python - about: Ask questions about using coverage.py here. - name: Tidelift security contact url: https://tidelift.com/security about: Please report security vulnerabilities here. diff --git a/doc/faq.rst b/doc/faq.rst index b8c2758c5..849f132c0 100644 --- a/doc/faq.rst +++ b/doc/faq.rst @@ -130,9 +130,9 @@ __ https://nedbatchelder.com/blog/200710/flaws_in_coverage_measurement.html .. _trialcoverage: https://pypi.org/project/trialcoverage/ - - `pytest-coverage`_ + - `pytest-cov`_ - .. _pytest-coverage: https://pypi.org/project/pytest-coverage/ + .. _pytest-cov: https://pypi.org/project/pytest-cov/ - `django-coverage`_ for use with Django. @@ -142,10 +142,11 @@ __ https://nedbatchelder.com/blog/200710/flaws_in_coverage_measurement.html Q: Where can I get more help with coverage.py? .............................................. -You can discuss coverage.py or get help using it on the `Testing In Python`_ -mailing list. +You can discuss coverage.py or get help using it on the `Python discussion +forums`_. If you ping me (``@nedbat``), there's a higher chance I'll see the +post. -.. _Testing In Python: http://lists.idyll.org/listinfo/testing-in-python +.. _Python discussion forums: https://discuss.python.org/ Bug reports are gladly accepted at the `GitHub issue tracker`_. @@ -164,6 +165,6 @@ Coverage.py was originally written by `Gareth Rees`_. Since 2004, `Ned Batchelder`_ has extended and maintained it with the help of `many others`_. The :ref:`change history <changes>` has all the details. -.. _Gareth Rees: http://garethrees.org/ +.. _Gareth Rees: http://garethrees.org/ .. _Ned Batchelder: https://nedbatchelder.com -.. _many others: https://github.com/nedbat/coveragepy/blob/master/CONTRIBUTORS.txt +.. _many others: https://github.com/nedbat/coveragepy/blob/master/CONTRIBUTORS.txt diff --git a/doc/index.rst b/doc/index.rst index 309cba594..62acaebb9 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -188,9 +188,10 @@ Getting help ------------ If the :ref:`FAQ <faq>` doesn't answer your question, you can discuss -coverage.py or get help using it on the `Testing In Python`_ mailing list. +coverage.py or get help using it on the `Python discussion forums`_. If you +ping me (``@nedbat``), there's a higher chance I'll see the post. -.. _Testing In Python: http://lists.idyll.org/listinfo/testing-in-python +.. _Python discussion forums: https://discuss.python.org/ Bug reports are gladly accepted at the `GitHub issue tracker`_. GitHub also hosts the `code repository`_. From 0fbb52f63965ce7150c4952b82e935a1b3bffad7 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Tue, 17 Jan 2023 07:27:39 -0500 Subject: [PATCH 025/139] build: unpin dnspython with a var to fix eventlet --- requirements/pins.pip | 4 ---- tox.ini | 3 +++ 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/requirements/pins.pip b/requirements/pins.pip index 4f9c00c58..4ecea4264 100644 --- a/requirements/pins.pip +++ b/requirements/pins.pip @@ -6,7 +6,3 @@ # docutils has been going through some turmoil. Different packages require it, # but have different pins. This seems to satisfy them all: #docutils>=0.17,<0.18 - -# https://github.com/rthalley/dnspython/issues/885 -# https://github.com/eventlet/eventlet/issues/781 -dnspython<2.3.0 diff --git a/tox.ini b/tox.ini index 3592ec134..debe60013 100644 --- a/tox.ini +++ b/tox.ini @@ -29,6 +29,9 @@ setenv = # For some tests, we need .pyc files written in the current directory, # so override any local setting. PYTHONPYCACHEPREFIX= + # https://github.com/rthalley/dnspython/issues/885 + # https://github.com/eventlet/eventlet/issues/781 + EVENTLET_NO_GREENDNS=yes commands = # Create tests/zipmods.zip From 8dc1e621a8a1e61a3ccbb19fde636f67a9455206 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Tue, 17 Jan 2023 07:30:34 -0500 Subject: [PATCH 026/139] chore: make upgrade --- requirements/dev.pip | 6 +++--- requirements/light-threads.pip | 10 ++++------ requirements/lint.pip | 6 +++--- requirements/tox.pip | 6 +++--- 4 files changed, 13 insertions(+), 15 deletions(-) diff --git a/requirements/dev.pip b/requirements/dev.pip index 44e765c60..4696b6b97 100644 --- a/requirements/dev.pip +++ b/requirements/dev.pip @@ -480,9 +480,9 @@ tomlkit==0.11.6 \ --hash=sha256:07de26b0d8cfc18f871aec595fda24d95b08fef89d147caa861939f37230bf4b \ --hash=sha256:71b952e5721688937fb02cf9d354dbcf0785066149d2855e44531ebdd2b65d73 # via pylint -tox==4.3.2 \ - --hash=sha256:59855a58c16b9f7b13d0ee96f74d6a9ce70368b54dca05f112aabaaa94ebc91d \ - --hash=sha256:95bc7bf7d959563a29775a18a6fc5794724124d8212fa1ec3b81e0ff579fb710 +tox==4.3.3 \ + --hash=sha256:81a13521b3e32b30db4dafb746a34ccd39f78ad393c83760adb67b011b3ef96f \ + --hash=sha256:9bb952285333da6ce5066f935e815ca8c11da6b67a6b732235be8213fbd10efb # via # -r requirements/tox.pip # tox-gh diff --git a/requirements/light-threads.pip b/requirements/light-threads.pip index 35ba83bd9..983bd3a87 100644 --- a/requirements/light-threads.pip +++ b/requirements/light-threads.pip @@ -70,12 +70,10 @@ cffi==1.15.1 \ --hash=sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01 \ --hash=sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0 # via -r requirements/light-threads.in -dnspython==2.2.1 \ - --hash=sha256:0f7569a4a6ff151958b64304071d370daa3243d15941a7beedf0c9fe5105603e \ - --hash=sha256:a851e51367fb93e9e1361732c1d60dab63eff98712e503ea7d92e6eccb109b4f - # via - # -c requirements/pins.pip - # eventlet +dnspython==2.3.0 \ + --hash=sha256:224e32b03eb46be70e12ef6d64e0be123a64e621ab4c0822ff6d450d52a540b9 \ + --hash=sha256:89141536394f909066cabd112e3e1a37e4e654db00a25308b0f130bc3152eb46 + # via eventlet eventlet==0.33.2 \ --hash=sha256:82c382c2a2c712f1a8320378a9120ac9589d9f1131c36a63780f0b8504afa5bc \ --hash=sha256:96039b9389dbb4431b1c0a6e42ea1326628cc7ad63a6280b02947f111d3d8e04 diff --git a/requirements/lint.pip b/requirements/lint.pip index 210cc40d7..8ae457059 100644 --- a/requirements/lint.pip +++ b/requirements/lint.pip @@ -652,9 +652,9 @@ tornado==6.2 \ --hash=sha256:d3a2f5999215a3a06a4fc218026cd84c61b8b2b40ac5296a6db1f1451ef04c1e \ --hash=sha256:e5f923aa6a47e133d1cf87d60700889d7eae68988704e20c75fb2d65677a8e4b # via livereload -tox==4.3.2 \ - --hash=sha256:59855a58c16b9f7b13d0ee96f74d6a9ce70368b54dca05f112aabaaa94ebc91d \ - --hash=sha256:95bc7bf7d959563a29775a18a6fc5794724124d8212fa1ec3b81e0ff579fb710 +tox==4.3.3 \ + --hash=sha256:81a13521b3e32b30db4dafb746a34ccd39f78ad393c83760adb67b011b3ef96f \ + --hash=sha256:9bb952285333da6ce5066f935e815ca8c11da6b67a6b732235be8213fbd10efb # via # -r requirements/tox.pip # tox-gh diff --git a/requirements/tox.pip b/requirements/tox.pip index 7accaabe0..e96abae2f 100644 --- a/requirements/tox.pip +++ b/requirements/tox.pip @@ -61,9 +61,9 @@ tomli==2.0.1 \ # via # pyproject-api # tox -tox==4.3.2 \ - --hash=sha256:59855a58c16b9f7b13d0ee96f74d6a9ce70368b54dca05f112aabaaa94ebc91d \ - --hash=sha256:95bc7bf7d959563a29775a18a6fc5794724124d8212fa1ec3b81e0ff579fb710 +tox==4.3.3 \ + --hash=sha256:81a13521b3e32b30db4dafb746a34ccd39f78ad393c83760adb67b011b3ef96f \ + --hash=sha256:9bb952285333da6ce5066f935e815ca8c11da6b67a6b732235be8213fbd10efb # via # -r requirements/tox.in # tox-gh From 0b1e74c2302995d5dea526da5f1d807eab7602ee Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Tue, 17 Jan 2023 18:21:28 -0500 Subject: [PATCH 027/139] build: eventlet 0.33.3 says they fixed the problem --- tox.ini | 3 --- 1 file changed, 3 deletions(-) diff --git a/tox.ini b/tox.ini index debe60013..3592ec134 100644 --- a/tox.ini +++ b/tox.ini @@ -29,9 +29,6 @@ setenv = # For some tests, we need .pyc files written in the current directory, # so override any local setting. PYTHONPYCACHEPREFIX= - # https://github.com/rthalley/dnspython/issues/885 - # https://github.com/eventlet/eventlet/issues/781 - EVENTLET_NO_GREENDNS=yes commands = # Create tests/zipmods.zip From 82c263814e57e1d790cbe1c00bd1c724b9ca8e3c Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Tue, 17 Jan 2023 18:22:01 -0500 Subject: [PATCH 028/139] chore: make upgrade to get eventlet 0.33.3 --- doc/requirements.pip | 92 +++++++++++++++++-------------- requirements/dev.pip | 6 +-- requirements/light-threads.pip | 6 +-- requirements/lint.pip | 98 +++++++++++++++++++--------------- requirements/tox.pip | 6 +-- 5 files changed, 114 insertions(+), 94 deletions(-) diff --git a/doc/requirements.pip b/doc/requirements.pip index b93edbf5b..c084ea8ca 100644 --- a/doc/requirements.pip +++ b/doc/requirements.pip @@ -159,47 +159,57 @@ livereload==2.6.3 \ --hash=sha256:776f2f865e59fde56490a56bcc6773b6917366bce0c267c60ee8aaf1a0959869 \ --hash=sha256:ad4ac6f53b2d62bb6ce1a5e6e96f1f00976a32348afedcb4b6d68df2a1d346e4 # via sphinx-autobuild -markupsafe==2.1.1 \ - --hash=sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003 \ - --hash=sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88 \ - --hash=sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5 \ - --hash=sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7 \ - --hash=sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a \ - --hash=sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603 \ - --hash=sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1 \ - --hash=sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135 \ - --hash=sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247 \ - --hash=sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6 \ - --hash=sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601 \ - --hash=sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77 \ - --hash=sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02 \ - --hash=sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e \ - --hash=sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63 \ - --hash=sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f \ - --hash=sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980 \ - --hash=sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b \ - --hash=sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812 \ - --hash=sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff \ - --hash=sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96 \ - --hash=sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1 \ - --hash=sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925 \ - --hash=sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a \ - --hash=sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6 \ - --hash=sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e \ - --hash=sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f \ - --hash=sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4 \ - --hash=sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f \ - --hash=sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3 \ - --hash=sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c \ - --hash=sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a \ - --hash=sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417 \ - --hash=sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a \ - --hash=sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a \ - --hash=sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37 \ - --hash=sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452 \ - --hash=sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933 \ - --hash=sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a \ - --hash=sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7 +markupsafe==2.1.2 \ + --hash=sha256:0576fe974b40a400449768941d5d0858cc624e3249dfd1e0c33674e5c7ca7aed \ + --hash=sha256:085fd3201e7b12809f9e6e9bc1e5c96a368c8523fad5afb02afe3c051ae4afcc \ + --hash=sha256:090376d812fb6ac5f171e5938e82e7f2d7adc2b629101cec0db8b267815c85e2 \ + --hash=sha256:0b462104ba25f1ac006fdab8b6a01ebbfbce9ed37fd37fd4acd70c67c973e460 \ + --hash=sha256:137678c63c977754abe9086a3ec011e8fd985ab90631145dfb9294ad09c102a7 \ + --hash=sha256:1bea30e9bf331f3fef67e0a3877b2288593c98a21ccb2cf29b74c581a4eb3af0 \ + --hash=sha256:22152d00bf4a9c7c83960521fc558f55a1adbc0631fbb00a9471e097b19d72e1 \ + --hash=sha256:22731d79ed2eb25059ae3df1dfc9cb1546691cc41f4e3130fe6bfbc3ecbbecfa \ + --hash=sha256:2298c859cfc5463f1b64bd55cb3e602528db6fa0f3cfd568d3605c50678f8f03 \ + --hash=sha256:28057e985dace2f478e042eaa15606c7efccb700797660629da387eb289b9323 \ + --hash=sha256:2e7821bffe00aa6bd07a23913b7f4e01328c3d5cc0b40b36c0bd81d362faeb65 \ + --hash=sha256:2ec4f2d48ae59bbb9d1f9d7efb9236ab81429a764dedca114f5fdabbc3788013 \ + --hash=sha256:340bea174e9761308703ae988e982005aedf427de816d1afe98147668cc03036 \ + --hash=sha256:40627dcf047dadb22cd25ea7ecfe9cbf3bbbad0482ee5920b582f3809c97654f \ + --hash=sha256:40dfd3fefbef579ee058f139733ac336312663c6706d1163b82b3003fb1925c4 \ + --hash=sha256:4cf06cdc1dda95223e9d2d3c58d3b178aa5dacb35ee7e3bbac10e4e1faacb419 \ + --hash=sha256:50c42830a633fa0cf9e7d27664637532791bfc31c731a87b202d2d8ac40c3ea2 \ + --hash=sha256:55f44b440d491028addb3b88f72207d71eeebfb7b5dbf0643f7c023ae1fba619 \ + --hash=sha256:608e7073dfa9e38a85d38474c082d4281f4ce276ac0010224eaba11e929dd53a \ + --hash=sha256:63ba06c9941e46fa389d389644e2d8225e0e3e5ebcc4ff1ea8506dce646f8c8a \ + --hash=sha256:65608c35bfb8a76763f37036547f7adfd09270fbdbf96608be2bead319728fcd \ + --hash=sha256:665a36ae6f8f20a4676b53224e33d456a6f5a72657d9c83c2aa00765072f31f7 \ + --hash=sha256:6d6607f98fcf17e534162f0709aaad3ab7a96032723d8ac8750ffe17ae5a0666 \ + --hash=sha256:7313ce6a199651c4ed9d7e4cfb4aa56fe923b1adf9af3b420ee14e6d9a73df65 \ + --hash=sha256:7668b52e102d0ed87cb082380a7e2e1e78737ddecdde129acadb0eccc5423859 \ + --hash=sha256:7df70907e00c970c60b9ef2938d894a9381f38e6b9db73c5be35e59d92e06625 \ + --hash=sha256:7e007132af78ea9df29495dbf7b5824cb71648d7133cf7848a2a5dd00d36f9ff \ + --hash=sha256:835fb5e38fd89328e9c81067fd642b3593c33e1e17e2fdbf77f5676abb14a156 \ + --hash=sha256:8bca7e26c1dd751236cfb0c6c72d4ad61d986e9a41bbf76cb445f69488b2a2bd \ + --hash=sha256:8db032bf0ce9022a8e41a22598eefc802314e81b879ae093f36ce9ddf39ab1ba \ + --hash=sha256:99625a92da8229df6d44335e6fcc558a5037dd0a760e11d84be2260e6f37002f \ + --hash=sha256:9cad97ab29dfc3f0249b483412c85c8ef4766d96cdf9dcf5a1e3caa3f3661cf1 \ + --hash=sha256:a4abaec6ca3ad8660690236d11bfe28dfd707778e2442b45addd2f086d6ef094 \ + --hash=sha256:a6e40afa7f45939ca356f348c8e23048e02cb109ced1eb8420961b2f40fb373a \ + --hash=sha256:a6f2fcca746e8d5910e18782f976489939d54a91f9411c32051b4aab2bd7c513 \ + --hash=sha256:a806db027852538d2ad7555b203300173dd1b77ba116de92da9afbc3a3be3eed \ + --hash=sha256:abcabc8c2b26036d62d4c746381a6f7cf60aafcc653198ad678306986b09450d \ + --hash=sha256:b8526c6d437855442cdd3d87eede9c425c4445ea011ca38d937db299382e6fa3 \ + --hash=sha256:bb06feb762bade6bf3c8b844462274db0c76acc95c52abe8dbed28ae3d44a147 \ + --hash=sha256:c0a33bc9f02c2b17c3ea382f91b4db0e6cde90b63b296422a939886a7a80de1c \ + --hash=sha256:c4a549890a45f57f1ebf99c067a4ad0cb423a05544accaf2b065246827ed9603 \ + --hash=sha256:ca244fa73f50a800cf8c3ebf7fd93149ec37f5cb9596aa8873ae2c1d23498601 \ + --hash=sha256:cf877ab4ed6e302ec1d04952ca358b381a882fbd9d1b07cccbfd61783561f98a \ + --hash=sha256:d9d971ec1e79906046aa3ca266de79eac42f1dbf3612a05dc9368125952bd1a1 \ + --hash=sha256:da25303d91526aac3672ee6d49a2f3db2d9502a4a60b55519feb1a4c7714e07d \ + --hash=sha256:e55e40ff0cc8cc5c07996915ad367fa47da6b3fc091fdadca7f5403239c5fec3 \ + --hash=sha256:f03a532d7dee1bed20bc4884194a16160a2de9ffc6354b3878ec9682bb623c54 \ + --hash=sha256:f1cd098434e83e656abf198f103a8207a8187c0fc110306691a2e94a78d0abb2 \ + --hash=sha256:f2bfb563d0211ce16b63c7cb9395d2c682a23187f54c3d79bfec33e6705473c6 \ + --hash=sha256:f8ffb705ffcf5ddd0e80b65ddf7bed7ee4f5a441ea7d3419e861a12eaf41af58 # via jinja2 packaging==23.0 \ --hash=sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2 \ diff --git a/requirements/dev.pip b/requirements/dev.pip index 4696b6b97..c2f80a446 100644 --- a/requirements/dev.pip +++ b/requirements/dev.pip @@ -480,9 +480,9 @@ tomlkit==0.11.6 \ --hash=sha256:07de26b0d8cfc18f871aec595fda24d95b08fef89d147caa861939f37230bf4b \ --hash=sha256:71b952e5721688937fb02cf9d354dbcf0785066149d2855e44531ebdd2b65d73 # via pylint -tox==4.3.3 \ - --hash=sha256:81a13521b3e32b30db4dafb746a34ccd39f78ad393c83760adb67b011b3ef96f \ - --hash=sha256:9bb952285333da6ce5066f935e815ca8c11da6b67a6b732235be8213fbd10efb +tox==4.3.4 \ + --hash=sha256:84ee61b27dc983cb5b5d9ef93af10ce54a0e3992df73335fcdf3e8a3d3453a93 \ + --hash=sha256:f5ac33b55de2f8764cff260661eb1257107a21c4819714b04f14669991aa7772 # via # -r requirements/tox.pip # tox-gh diff --git a/requirements/light-threads.pip b/requirements/light-threads.pip index 983bd3a87..65e0b7db5 100644 --- a/requirements/light-threads.pip +++ b/requirements/light-threads.pip @@ -74,9 +74,9 @@ dnspython==2.3.0 \ --hash=sha256:224e32b03eb46be70e12ef6d64e0be123a64e621ab4c0822ff6d450d52a540b9 \ --hash=sha256:89141536394f909066cabd112e3e1a37e4e654db00a25308b0f130bc3152eb46 # via eventlet -eventlet==0.33.2 \ - --hash=sha256:82c382c2a2c712f1a8320378a9120ac9589d9f1131c36a63780f0b8504afa5bc \ - --hash=sha256:96039b9389dbb4431b1c0a6e42ea1326628cc7ad63a6280b02947f111d3d8e04 +eventlet==0.33.3 \ + --hash=sha256:722803e7eadff295347539da363d68ae155b8b26ae6a634474d0a920be73cfda \ + --hash=sha256:e43b9ae05ba4bb477a10307699c9aff7ff86121b2640f9184d29059f5a687df8 # via -r requirements/light-threads.in gevent==22.10.2 \ --hash=sha256:018f93de7d5318d2fb440f846839a4464738468c3476d5c9cf7da45bb71c18bd \ diff --git a/requirements/lint.pip b/requirements/lint.pip index 8ae457059..5493a9f68 100644 --- a/requirements/lint.pip +++ b/requirements/lint.pip @@ -384,47 +384,57 @@ livereload==2.6.3 \ --hash=sha256:776f2f865e59fde56490a56bcc6773b6917366bce0c267c60ee8aaf1a0959869 \ --hash=sha256:ad4ac6f53b2d62bb6ce1a5e6e96f1f00976a32348afedcb4b6d68df2a1d346e4 # via sphinx-autobuild -markupsafe==2.1.1 \ - --hash=sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003 \ - --hash=sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88 \ - --hash=sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5 \ - --hash=sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7 \ - --hash=sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a \ - --hash=sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603 \ - --hash=sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1 \ - --hash=sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135 \ - --hash=sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247 \ - --hash=sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6 \ - --hash=sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601 \ - --hash=sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77 \ - --hash=sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02 \ - --hash=sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e \ - --hash=sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63 \ - --hash=sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f \ - --hash=sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980 \ - --hash=sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b \ - --hash=sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812 \ - --hash=sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff \ - --hash=sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96 \ - --hash=sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1 \ - --hash=sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925 \ - --hash=sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a \ - --hash=sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6 \ - --hash=sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e \ - --hash=sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f \ - --hash=sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4 \ - --hash=sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f \ - --hash=sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3 \ - --hash=sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c \ - --hash=sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a \ - --hash=sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417 \ - --hash=sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a \ - --hash=sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a \ - --hash=sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37 \ - --hash=sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452 \ - --hash=sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933 \ - --hash=sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a \ - --hash=sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7 +markupsafe==2.1.2 \ + --hash=sha256:0576fe974b40a400449768941d5d0858cc624e3249dfd1e0c33674e5c7ca7aed \ + --hash=sha256:085fd3201e7b12809f9e6e9bc1e5c96a368c8523fad5afb02afe3c051ae4afcc \ + --hash=sha256:090376d812fb6ac5f171e5938e82e7f2d7adc2b629101cec0db8b267815c85e2 \ + --hash=sha256:0b462104ba25f1ac006fdab8b6a01ebbfbce9ed37fd37fd4acd70c67c973e460 \ + --hash=sha256:137678c63c977754abe9086a3ec011e8fd985ab90631145dfb9294ad09c102a7 \ + --hash=sha256:1bea30e9bf331f3fef67e0a3877b2288593c98a21ccb2cf29b74c581a4eb3af0 \ + --hash=sha256:22152d00bf4a9c7c83960521fc558f55a1adbc0631fbb00a9471e097b19d72e1 \ + --hash=sha256:22731d79ed2eb25059ae3df1dfc9cb1546691cc41f4e3130fe6bfbc3ecbbecfa \ + --hash=sha256:2298c859cfc5463f1b64bd55cb3e602528db6fa0f3cfd568d3605c50678f8f03 \ + --hash=sha256:28057e985dace2f478e042eaa15606c7efccb700797660629da387eb289b9323 \ + --hash=sha256:2e7821bffe00aa6bd07a23913b7f4e01328c3d5cc0b40b36c0bd81d362faeb65 \ + --hash=sha256:2ec4f2d48ae59bbb9d1f9d7efb9236ab81429a764dedca114f5fdabbc3788013 \ + --hash=sha256:340bea174e9761308703ae988e982005aedf427de816d1afe98147668cc03036 \ + --hash=sha256:40627dcf047dadb22cd25ea7ecfe9cbf3bbbad0482ee5920b582f3809c97654f \ + --hash=sha256:40dfd3fefbef579ee058f139733ac336312663c6706d1163b82b3003fb1925c4 \ + --hash=sha256:4cf06cdc1dda95223e9d2d3c58d3b178aa5dacb35ee7e3bbac10e4e1faacb419 \ + --hash=sha256:50c42830a633fa0cf9e7d27664637532791bfc31c731a87b202d2d8ac40c3ea2 \ + --hash=sha256:55f44b440d491028addb3b88f72207d71eeebfb7b5dbf0643f7c023ae1fba619 \ + --hash=sha256:608e7073dfa9e38a85d38474c082d4281f4ce276ac0010224eaba11e929dd53a \ + --hash=sha256:63ba06c9941e46fa389d389644e2d8225e0e3e5ebcc4ff1ea8506dce646f8c8a \ + --hash=sha256:65608c35bfb8a76763f37036547f7adfd09270fbdbf96608be2bead319728fcd \ + --hash=sha256:665a36ae6f8f20a4676b53224e33d456a6f5a72657d9c83c2aa00765072f31f7 \ + --hash=sha256:6d6607f98fcf17e534162f0709aaad3ab7a96032723d8ac8750ffe17ae5a0666 \ + --hash=sha256:7313ce6a199651c4ed9d7e4cfb4aa56fe923b1adf9af3b420ee14e6d9a73df65 \ + --hash=sha256:7668b52e102d0ed87cb082380a7e2e1e78737ddecdde129acadb0eccc5423859 \ + --hash=sha256:7df70907e00c970c60b9ef2938d894a9381f38e6b9db73c5be35e59d92e06625 \ + --hash=sha256:7e007132af78ea9df29495dbf7b5824cb71648d7133cf7848a2a5dd00d36f9ff \ + --hash=sha256:835fb5e38fd89328e9c81067fd642b3593c33e1e17e2fdbf77f5676abb14a156 \ + --hash=sha256:8bca7e26c1dd751236cfb0c6c72d4ad61d986e9a41bbf76cb445f69488b2a2bd \ + --hash=sha256:8db032bf0ce9022a8e41a22598eefc802314e81b879ae093f36ce9ddf39ab1ba \ + --hash=sha256:99625a92da8229df6d44335e6fcc558a5037dd0a760e11d84be2260e6f37002f \ + --hash=sha256:9cad97ab29dfc3f0249b483412c85c8ef4766d96cdf9dcf5a1e3caa3f3661cf1 \ + --hash=sha256:a4abaec6ca3ad8660690236d11bfe28dfd707778e2442b45addd2f086d6ef094 \ + --hash=sha256:a6e40afa7f45939ca356f348c8e23048e02cb109ced1eb8420961b2f40fb373a \ + --hash=sha256:a6f2fcca746e8d5910e18782f976489939d54a91f9411c32051b4aab2bd7c513 \ + --hash=sha256:a806db027852538d2ad7555b203300173dd1b77ba116de92da9afbc3a3be3eed \ + --hash=sha256:abcabc8c2b26036d62d4c746381a6f7cf60aafcc653198ad678306986b09450d \ + --hash=sha256:b8526c6d437855442cdd3d87eede9c425c4445ea011ca38d937db299382e6fa3 \ + --hash=sha256:bb06feb762bade6bf3c8b844462274db0c76acc95c52abe8dbed28ae3d44a147 \ + --hash=sha256:c0a33bc9f02c2b17c3ea382f91b4db0e6cde90b63b296422a939886a7a80de1c \ + --hash=sha256:c4a549890a45f57f1ebf99c067a4ad0cb423a05544accaf2b065246827ed9603 \ + --hash=sha256:ca244fa73f50a800cf8c3ebf7fd93149ec37f5cb9596aa8873ae2c1d23498601 \ + --hash=sha256:cf877ab4ed6e302ec1d04952ca358b381a882fbd9d1b07cccbfd61783561f98a \ + --hash=sha256:d9d971ec1e79906046aa3ca266de79eac42f1dbf3612a05dc9368125952bd1a1 \ + --hash=sha256:da25303d91526aac3672ee6d49a2f3db2d9502a4a60b55519feb1a4c7714e07d \ + --hash=sha256:e55e40ff0cc8cc5c07996915ad367fa47da6b3fc091fdadca7f5403239c5fec3 \ + --hash=sha256:f03a532d7dee1bed20bc4884194a16160a2de9ffc6354b3878ec9682bb623c54 \ + --hash=sha256:f1cd098434e83e656abf198f103a8207a8187c0fc110306691a2e94a78d0abb2 \ + --hash=sha256:f2bfb563d0211ce16b63c7cb9395d2c682a23187f54c3d79bfec33e6705473c6 \ + --hash=sha256:f8ffb705ffcf5ddd0e80b65ddf7bed7ee4f5a441ea7d3419e861a12eaf41af58 # via jinja2 mccabe==0.7.0 \ --hash=sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325 \ @@ -652,9 +662,9 @@ tornado==6.2 \ --hash=sha256:d3a2f5999215a3a06a4fc218026cd84c61b8b2b40ac5296a6db1f1451ef04c1e \ --hash=sha256:e5f923aa6a47e133d1cf87d60700889d7eae68988704e20c75fb2d65677a8e4b # via livereload -tox==4.3.3 \ - --hash=sha256:81a13521b3e32b30db4dafb746a34ccd39f78ad393c83760adb67b011b3ef96f \ - --hash=sha256:9bb952285333da6ce5066f935e815ca8c11da6b67a6b732235be8213fbd10efb +tox==4.3.4 \ + --hash=sha256:84ee61b27dc983cb5b5d9ef93af10ce54a0e3992df73335fcdf3e8a3d3453a93 \ + --hash=sha256:f5ac33b55de2f8764cff260661eb1257107a21c4819714b04f14669991aa7772 # via # -r requirements/tox.pip # tox-gh diff --git a/requirements/tox.pip b/requirements/tox.pip index e96abae2f..202228c76 100644 --- a/requirements/tox.pip +++ b/requirements/tox.pip @@ -61,9 +61,9 @@ tomli==2.0.1 \ # via # pyproject-api # tox -tox==4.3.3 \ - --hash=sha256:81a13521b3e32b30db4dafb746a34ccd39f78ad393c83760adb67b011b3ef96f \ - --hash=sha256:9bb952285333da6ce5066f935e815ca8c11da6b67a6b732235be8213fbd10efb +tox==4.3.4 \ + --hash=sha256:84ee61b27dc983cb5b5d9ef93af10ce54a0e3992df73335fcdf3e8a3d3453a93 \ + --hash=sha256:f5ac33b55de2f8764cff260661eb1257107a21c4819714b04f14669991aa7772 # via # -r requirements/tox.in # tox-gh From c51ac463f07e31c87b20f50bd7e6445e4e4e83a2 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Sun, 22 Jan 2023 07:29:47 -0500 Subject: [PATCH 029/139] docs: explain how to use ``--debug=trace`` --- doc/cmd.rst | 3 ++- doc/faq.rst | 16 ++++++++++++++++ doc/trouble.rst | 4 ++-- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/doc/cmd.rst b/doc/cmd.rst index c1f52ee74..b86650a06 100644 --- a/doc/cmd.rst +++ b/doc/cmd.rst @@ -1057,6 +1057,7 @@ a comma-separated list of these options, or in the :ref:`config_run_debug` section of the .coveragerc file. The debug output goes to stderr, unless the ``COVERAGE_DEBUG_FILE`` environment -variable names a different file, which will be appended to. +variable names a different file, which will be appended to. This can be useful +because many test runners capture output, which could hide important details. ``COVERAGE_DEBUG_FILE`` accepts the special names ``stdout`` and ``stderr`` to write to those destinations. diff --git a/doc/faq.rst b/doc/faq.rst index 849f132c0..8252eeb98 100644 --- a/doc/faq.rst +++ b/doc/faq.rst @@ -11,6 +11,22 @@ FAQ and other help Frequently asked questions -------------------------- +Q: Why are some of my files not measured? +......................................... + +Coverage.py has a number of mechanisms for deciding which files to measure and +which to skip. If your files aren't being measured, use the ``--debug=trace`` +:ref:`option <cmd_run_debug>`, also settable as ``[run] debug=trace`` in the +:ref:`settings file <config_run_debug>`, or as ``COVERAGE_DEBUG=trace`` in an +environment variable. + +This will write a line for each file considered, indicating whether it is +traced or not, and if not, why not. Be careful though: the output might be +swallowed by your test runner. If so, a ``COVERAGE_DEBUG_FILE=/tmp/cov.out`` +environemnt variable can direct the output to a file insttead to ensure you see +everything. + + Q: Why do unexecutable lines show up as executed? ................................................. diff --git a/doc/trouble.rst b/doc/trouble.rst index 9c371df19..8776e6f89 100644 --- a/doc/trouble.rst +++ b/doc/trouble.rst @@ -25,8 +25,8 @@ bug tracker`_ directly to see if there is some mention of it. Things that don't work ---------------------- -There are a number of popular modules, packages, and libraries that prevent -coverage.py from working properly: +There are a few modules or functions that prevent coverage.py from working +properly: * `execv`_, or one of its variants. These end the current program and replace it with a new one. This doesn't save the collected coverage data, so your From 5f65d87b14245d4523bc866a75a16b6c55a7ce70 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Sun, 22 Jan 2023 09:08:09 -0500 Subject: [PATCH 030/139] feat: the debug output file can be specified in the config file. #1319 --- CHANGES.rst | 6 ++++ coverage/config.py | 2 ++ coverage/control.py | 6 ++-- coverage/debug.py | 70 +++++++++++++++++++++++++++++++-------------- doc/cmd.rst | 11 +++---- doc/config.rst | 9 ++++++ tests/test_debug.py | 66 +++++++++++++++++++++++++++++++++--------- 7 files changed, 126 insertions(+), 44 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index d845d8848..185f20bff 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -20,8 +20,14 @@ development at the same time, such as 4.5.x and 5.0. Unreleased ---------- +- Added: the debug output file can now be specified with ``[run] debug_file`` + in the configuration file. Closes `issue 1319`_. + - Typing: all product and test code has type annotations. +.. _issue 1319: https://github.com/nedbat/coveragepy/issues/1319 + + .. scriv-start-here .. _changes_7-0-5: diff --git a/coverage/config.py b/coverage/config.py index 046c1b00c..e15d2affc 100644 --- a/coverage/config.py +++ b/coverage/config.py @@ -199,6 +199,7 @@ def __init__(self) -> None: self.cover_pylib = False self.data_file = ".coverage" self.debug: List[str] = [] + self.debug_file: Optional[str] = None self.disable_warnings: List[str] = [] self.dynamic_context: Optional[str] = None self.parallel = False @@ -375,6 +376,7 @@ def copy(self) -> CoverageConfig: ('cover_pylib', 'run:cover_pylib', 'boolean'), ('data_file', 'run:data_file'), ('debug', 'run:debug', 'list'), + ('debug_file', 'run:debug_file'), ('disable_warnings', 'run:disable_warnings', 'list'), ('dynamic_context', 'run:dynamic_context'), ('parallel', 'run:parallel', 'boolean'), diff --git a/coverage/control.py b/coverage/control.py index d37c77e38..78e0c70e6 100644 --- a/coverage/control.py +++ b/coverage/control.py @@ -303,10 +303,8 @@ def _init(self) -> None: self._inited = True - # Create and configure the debugging controller. COVERAGE_DEBUG_FILE - # is an environment variable, the name of a file to append debug logs - # to. - self._debug = DebugControl(self.config.debug, self._debug_file) + # Create and configure the debugging controller. + self._debug = DebugControl(self.config.debug, self._debug_file, self.config.debug_file) if "multiprocessing" in (self.config.concurrency or ()): # Multi-processing uses parallel for the subprocesses, so also use diff --git a/coverage/debug.py b/coverage/debug.py index 29dd1e7f3..d1f27cd84 100644 --- a/coverage/debug.py +++ b/coverage/debug.py @@ -39,7 +39,12 @@ class DebugControl: show_repr_attr = False # For AutoReprMixin - def __init__(self, options: Iterable[str], output: Optional[IO[str]]) -> None: + def __init__( + self, + options: Iterable[str], + output: Optional[IO[str]], + file_name: Optional[str] = None, + ) -> None: """Configure the options and output file for debugging.""" self.options = list(options) + FORCED_DEBUG self.suppress_callers = False @@ -49,6 +54,7 @@ def __init__(self, options: Iterable[str], output: Optional[IO[str]]) -> None: filters.append(add_pid_and_tid) self.output = DebugOutputFile.get_one( output, + file_name=file_name, show_process=self.should('process'), filters=filters, ) @@ -306,13 +312,11 @@ def __init__( if hasattr(os, 'getppid'): self.write(f"New process: pid: {os.getpid()!r}, parent pid: {os.getppid()!r}\n") - SYS_MOD_NAME = '$coverage.debug.DebugOutputFile.the_one' - SINGLETON_ATTR = 'the_one_and_is_interim' - @classmethod def get_one( cls, fileobj: Optional[IO[str]] = None, + file_name: Optional[str] = None, show_process: bool = True, filters: Iterable[Callable[[str], str]] = (), interim: bool = False, @@ -321,9 +325,9 @@ def get_one( If `fileobj` is provided, then a new DebugOutputFile is made with it. - If `fileobj` isn't provided, then a file is chosen - (COVERAGE_DEBUG_FILE, or stderr), and a process-wide singleton - DebugOutputFile is made. + If `fileobj` isn't provided, then a file is chosen (`file_name` if + provided, or COVERAGE_DEBUG_FILE, or stderr), and a process-wide + singleton DebugOutputFile is made. `show_process` controls whether the debug file adds process-level information, and filters is a list of other message filters to apply. @@ -338,27 +342,49 @@ def get_one( # Make DebugOutputFile around the fileobj passed. return cls(fileobj, show_process, filters) - # Because of the way igor.py deletes and re-imports modules, - # this class can be defined more than once. But we really want - # a process-wide singleton. So stash it in sys.modules instead of - # on a class attribute. Yes, this is aggressively gross. - singleton_module = sys.modules.get(cls.SYS_MOD_NAME) - the_one, is_interim = getattr(singleton_module, cls.SINGLETON_ATTR, (None, True)) + the_one, is_interim = cls._get_singleton_data() if the_one is None or is_interim: - if fileobj is None: - debug_file_name = os.environ.get("COVERAGE_DEBUG_FILE", FORCED_DEBUG_FILE) - if debug_file_name in ("stdout", "stderr"): - fileobj = getattr(sys, debug_file_name) - elif debug_file_name: - fileobj = open(debug_file_name, "a") + if file_name is not None: + fileobj = open(file_name, "a", encoding="utf-8") + else: + file_name = os.environ.get("COVERAGE_DEBUG_FILE", FORCED_DEBUG_FILE) + if file_name in ("stdout", "stderr"): + fileobj = getattr(sys, file_name) + elif file_name: + fileobj = open(file_name, "a", encoding="utf-8") else: fileobj = sys.stderr the_one = cls(fileobj, show_process, filters) - singleton_module = types.ModuleType(cls.SYS_MOD_NAME) - setattr(singleton_module, cls.SINGLETON_ATTR, (the_one, interim)) - sys.modules[cls.SYS_MOD_NAME] = singleton_module + cls._set_singleton_data(the_one, interim) return the_one + # Because of the way igor.py deletes and re-imports modules, + # this class can be defined more than once. But we really want + # a process-wide singleton. So stash it in sys.modules instead of + # on a class attribute. Yes, this is aggressively gross. + + SYS_MOD_NAME = '$coverage.debug.DebugOutputFile.the_one' + SINGLETON_ATTR = 'the_one_and_is_interim' + + @classmethod + def _set_singleton_data(cls, the_one: DebugOutputFile, interim: bool) -> None: + """Set the one DebugOutputFile to rule them all.""" + singleton_module = types.ModuleType(cls.SYS_MOD_NAME) + setattr(singleton_module, cls.SINGLETON_ATTR, (the_one, interim)) + sys.modules[cls.SYS_MOD_NAME] = singleton_module + + @classmethod + def _get_singleton_data(cls) -> Tuple[Optional[DebugOutputFile], bool]: + """Get the one DebugOutputFile.""" + singleton_module = sys.modules.get(cls.SYS_MOD_NAME) + return getattr(singleton_module, cls.SINGLETON_ATTR, (None, True)) + + @classmethod + def _del_singleton_data(cls) -> None: + """Delete the one DebugOutputFile, just for tests to use.""" + if cls.SYS_MOD_NAME in sys.modules: + del sys.modules[cls.SYS_MOD_NAME] + def write(self, text: str) -> None: """Just like file.write, but filter through all our filters.""" assert self.outfile is not None diff --git a/doc/cmd.rst b/doc/cmd.rst index b86650a06..0704e940a 100644 --- a/doc/cmd.rst +++ b/doc/cmd.rst @@ -1056,8 +1056,9 @@ Debug options can also be set with the ``COVERAGE_DEBUG`` environment variable, a comma-separated list of these options, or in the :ref:`config_run_debug` section of the .coveragerc file. -The debug output goes to stderr, unless the ``COVERAGE_DEBUG_FILE`` environment -variable names a different file, which will be appended to. This can be useful -because many test runners capture output, which could hide important details. -``COVERAGE_DEBUG_FILE`` accepts the special names ``stdout`` and ``stderr`` to -write to those destinations. +The debug output goes to stderr, unless the :ref:`config_run_debug_file` +setting or the ``COVERAGE_DEBUG_FILE`` environment variable names a different +file, which will be appended to. This can be useful because many test runners +capture output, which could hide important details. ``COVERAGE_DEBUG_FILE`` +accepts the special names ``stdout`` and ``stderr`` to write to those +destinations. diff --git a/doc/config.rst b/doc/config.rst index 90949506a..8e3d885be 100644 --- a/doc/config.rst +++ b/doc/config.rst @@ -203,6 +203,15 @@ include a short string at the end, the name of the warning. See <cmd_run_debug>` for details. +.. _config_run_debug_file: + +[run] debug_file +................ + +(string) A file name to write debug output to. See :ref:`the run --debug +option <cmd_run_debug>` for details. + + .. _config_run_dynamic_context: [run] dynamic_context diff --git a/tests/test_debug.py b/tests/test_debug.py index 38b70f28c..c2d9efe34 100644 --- a/tests/test_debug.py +++ b/tests/test_debug.py @@ -17,8 +17,10 @@ import coverage from coverage import env -from coverage.debug import filter_text, info_formatter, info_header, short_id, short_stack -from coverage.debug import clipped_repr +from coverage.debug import ( + DebugOutputFile, + clipped_repr, filter_text, info_formatter, info_header, short_id, short_stack, +) from tests.coveragetest import CoverageTest from tests.helpers import re_line, re_lines, re_lines_text @@ -186,17 +188,7 @@ def test_debug_config(self) -> None: def test_debug_sys(self) -> None: out_text = self.f1_debug_output(["sys"]) - - labels = """ - coverage_version coverage_module coverage_paths stdlib_paths third_party_paths - tracer configs_attempted config_file configs_read data_file - python platform implementation executable - pid cwd path environment command_line cover_match pylib_match - """.split() - for label in labels: - label_pat = fr"^\s*{label}: " - msg = f"Incorrect lines for {label!r}" - assert 1 == len(re_lines(label_pat, out_text)), msg + assert_good_debug_sys(out_text) def test_debug_sys_ctracer(self) -> None: out_text = self.f1_debug_output(["sys"]) @@ -216,6 +208,54 @@ def test_debug_pybehave(self) -> None: assert vtuple[:5] == sys.version_info +def assert_good_debug_sys(out_text: str) -> None: + """Assert that `str` is good output for debug=sys.""" + labels = """ + coverage_version coverage_module coverage_paths stdlib_paths third_party_paths + tracer configs_attempted config_file configs_read data_file + python platform implementation executable + pid cwd path environment command_line cover_match pylib_match + """.split() + for label in labels: + label_pat = fr"^\s*{label}: " + msg = f"Incorrect lines for {label!r}" + assert 1 == len(re_lines(label_pat, out_text)), msg + + +class DebugOutputTest(CoverageTest): + """Tests that we can direct debug output where we want.""" + + def setUp(self) -> None: + super().setUp() + # DebugOutputFile aggressively tries to start just one output file. We + # need to manually force it to make a new one. + DebugOutputFile._del_singleton_data() + + def debug_sys(self) -> None: + """Run just enough coverage to get full debug=sys output.""" + cov = coverage.Coverage(debug=["sys"]) + cov.start() + cov.stop() + + def test_stderr_default(self) -> None: + self.debug_sys() + assert_good_debug_sys(self.stderr()) + + def test_envvar(self) -> None: + self.set_environ("COVERAGE_DEBUG_FILE", "debug.out") + self.debug_sys() + assert self.stderr() == "" + with open("debug.out") as f: + assert_good_debug_sys(f.read()) + + def test_config_file(self) -> None: + self.make_file(".coveragerc", "[run]\ndebug_file = lotsa_info.txt") + self.debug_sys() + assert self.stderr() == "" + with open("lotsa_info.txt") as f: + assert_good_debug_sys(f.read()) + + def f_one(*args: Any, **kwargs: Any) -> str: """First of the chain of functions for testing `short_stack`.""" return f_two(*args, **kwargs) From ff127f8cfb122680c3de289b98f30c36d2eda7fb Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Sun, 22 Jan 2023 12:54:16 -0500 Subject: [PATCH 031/139] build: igor tweaks for scriv start marker --- igor.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/igor.py b/igor.py index 70ec3529c..c02e14bfa 100644 --- a/igor.py +++ b/igor.py @@ -413,6 +413,7 @@ def update_file(fname, pattern, replacement): fobj.write(new_text) UNRELEASED = "Unreleased\n----------" +SCRIV_START = ".. scriv-start-here\n\n" def do_edit_for_release(): """Edit a few files in preparation for a release.""" @@ -430,7 +431,8 @@ def do_edit_for_release(): rule = "-" * len(title) new_head = f".. _changes_{facts.anchor}:\n\n{title}\n{rule}" - update_file("CHANGES.rst", re.escape(UNRELEASED), new_head) + update_file("CHANGES.rst", re.escape(SCRIV_START), "") + update_file("CHANGES.rst", re.escape(UNRELEASED), SCRIV_START + new_head) # doc/conf.py new_conf = textwrap.dedent(f"""\ @@ -454,8 +456,8 @@ def do_bump_version(): # CHANGES.rst update_file( "CHANGES.rst", - r"(?m)^\.\. _changes_", - f"{UNRELEASED}\n\nNothing yet.\n\n\n.. _changes_", + re.escape(SCRIV_START), + f"{UNRELEASED}\n\nNothing yet.\n\n\n" + SCRIV_START, ) # coverage/version.py From e1ae48eccb45bd439f7f7a696b09f1a7bd565dea Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Sun, 22 Jan 2023 13:39:19 -0500 Subject: [PATCH 032/139] test: more tests of debug output control --- coverage/debug.py | 4 ++-- tests/test_debug.py | 15 ++++++++++++--- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/coverage/debug.py b/coverage/debug.py index d1f27cd84..122339597 100644 --- a/coverage/debug.py +++ b/coverage/debug.py @@ -279,7 +279,7 @@ def filter_text(text: str, filters: Iterable[Callable[[str], str]]) -> str: return text + ending -class CwdTracker: # pragma: debugging +class CwdTracker: """A class to add cwd info to debug messages.""" def __init__(self) -> None: self.cwd: Optional[str] = None @@ -293,7 +293,7 @@ def filter(self, text: str) -> str: return text -class DebugOutputFile: # pragma: debugging +class DebugOutputFile: """A file-like object that includes pid and cwd information.""" def __init__( self, diff --git a/tests/test_debug.py b/tests/test_debug.py index c2d9efe34..60a7b10a4 100644 --- a/tests/test_debug.py +++ b/tests/test_debug.py @@ -239,22 +239,31 @@ def debug_sys(self) -> None: def test_stderr_default(self) -> None: self.debug_sys() - assert_good_debug_sys(self.stderr()) + out, err = self.stdouterr() + assert out == "" + assert_good_debug_sys(err) def test_envvar(self) -> None: self.set_environ("COVERAGE_DEBUG_FILE", "debug.out") self.debug_sys() - assert self.stderr() == "" + assert self.stdouterr() == ("", "") with open("debug.out") as f: assert_good_debug_sys(f.read()) def test_config_file(self) -> None: self.make_file(".coveragerc", "[run]\ndebug_file = lotsa_info.txt") self.debug_sys() - assert self.stderr() == "" + assert self.stdouterr() == ("", "") with open("lotsa_info.txt") as f: assert_good_debug_sys(f.read()) + def test_stdout_alias(self) -> None: + self.set_environ("COVERAGE_DEBUG_FILE", "stdout") + self.debug_sys() + out, err = self.stdouterr() + assert err == "" + assert_good_debug_sys(out) + def f_one(*args: Any, **kwargs: Any) -> str: """First of the chain of functions for testing `short_stack`.""" From 61f6ee5c3b2f99a02c3b5988123e74e1d3dbc8ba Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Sun, 22 Jan 2023 16:15:35 -0500 Subject: [PATCH 033/139] fix: make tracing messages easier to understand --- coverage/inorout.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/coverage/inorout.py b/coverage/inorout.py index d5ca938f7..babaa3d80 100644 --- a/coverage/inorout.py +++ b/coverage/inorout.py @@ -313,7 +313,7 @@ def nope(disp: TFileDisposition, reason: str) -> TFileDisposition: return disp if original_filename.startswith('<'): - return nope(disp, "not a real original file name") + return nope(disp, "original file name is not real") if frame is not None: # Compiled Python files have two file names: frame.f_code.co_filename is @@ -345,7 +345,7 @@ def nope(disp: TFileDisposition, reason: str) -> TFileDisposition: # file names like "<string>", "<doctest readme.txt[0]>", or # "<exec_function>". Don't ever trace these executions, since we # can't do anything with the data later anyway. - return nope(disp, "not a real file name") + return nope(disp, "file name is not real") canonical = canonical_filename(filename) disp.canonical_filename = canonical From 674204fc958f30815fe482fe1ed36d01eb74c489 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Tue, 24 Jan 2023 10:23:27 -0500 Subject: [PATCH 034/139] test: more flexibility in setting a static context locally --- igor.py | 2 ++ metacov.ini | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/igor.py b/igor.py index c02e14bfa..248b93f5c 100644 --- a/igor.py +++ b/igor.py @@ -163,6 +163,8 @@ def run_tests_with_coverage(tracer, *runner_args): os.environ['COVERAGE_HOME'] = os.getcwd() context = os.environ.get('COVERAGE_CONTEXT') if context: + if context[0] == "$": + context = os.environ[context[1:]] os.environ['COVERAGE_CONTEXT'] = context + "." + tracer # Create the .pth file that will let us measure coverage in sub-processes. diff --git a/metacov.ini b/metacov.ini index 787553f91..884babf7e 100644 --- a/metacov.ini +++ b/metacov.ini @@ -16,7 +16,7 @@ source = ${COVERAGE_HOME-.}/tests # $set_env.py: COVERAGE_DYNCTX - Set to 'test_function' for who-tests-what dynamic_context = ${COVERAGE_DYNCTX-none} -# $set_env.py: COVERAGE_CONTEXT - Set to a static context for this run +# $set_env.py: COVERAGE_CONTEXT - Static context for this run (or $ENV_VAR like $TOX_ENV_NAME) context = ${COVERAGE_CONTEXT-none} [report] From 4cc32922685c6971275f522304b3754ad1a233c1 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Mon, 23 Jan 2023 19:44:41 -0500 Subject: [PATCH 035/139] perf: avoid needless sql operations. #1538 If the set of arcs is empty, skip the SQL operations. We also need to allow setting a file tracer for an unmeasured file, to avoid the Cython problem whose fix caused the performance issue in the first place. TBH, I don't know why we had to prevent file tracers on unmeasured files. Perhaps pytest-cov has changed to avoid the behavior that caused problems. --- CHANGES.rst | 9 ++++++++- coverage/sqldata.py | 16 +++++++--------- tests/test_data.py | 18 ++++++++---------- 3 files changed, 23 insertions(+), 20 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index 185f20bff..745564c52 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -20,13 +20,20 @@ development at the same time, such as 4.5.x and 5.0. Unreleased ---------- +- Performance: fixed a slow-down with dynamic contexts that appeared in 6.4.3, + closing `issue 1538`_. Hopefully this doesn't break the `Cython change`_ + that fixed `issue 972`_. Thanks to Mathieu Kniewallner for the deep + investigative work and comprehensive issue report. + - Added: the debug output file can now be specified with ``[run] debug_file`` in the configuration file. Closes `issue 1319`_. - Typing: all product and test code has type annotations. +.. _Cython change: https://github.com/nedbat/coveragepy/pull/1347 +.. _issue 972: https://github.com/nedbat/coveragepy/issues/972 .. _issue 1319: https://github.com/nedbat/coveragepy/issues/1319 - +.. _issue 1538: https://github.com/nedbat/coveragepy/issues/1538 .. scriv-start-here diff --git a/coverage/sqldata.py b/coverage/sqldata.py index da66ad099..1cb8abe47 100644 --- a/coverage/sqldata.py +++ b/coverage/sqldata.py @@ -528,6 +528,8 @@ def add_arcs(self, arc_data: Mapping[str, Collection[TArc]]) -> None: with self._connect() as con: self._set_context_id() for filename, arcs in arc_data.items(): + if not arcs: + continue file_id = self._file_id(filename, add=True) data = [(file_id, self._current_context_id, fromno, tono) for fromno, tono in arcs] con.executemany_void( @@ -571,12 +573,7 @@ def add_file_tracers(self, file_tracers: Mapping[str, str]) -> None: self._start_using() with self._connect() as con: for filename, plugin_name in file_tracers.items(): - file_id = self._file_id(filename) - if file_id is None: - raise DataError( - f"Can't add file tracer data for unmeasured file '{filename}'" - ) - + file_id = self._file_id(filename, add=True) existing_plugin = self.file_tracer(filename) if existing_plugin: if existing_plugin != plugin_name: @@ -1213,10 +1210,9 @@ def execute_one(self, sql: str, parameters: Iterable[Any] = ()) -> Optional[Tupl else: raise AssertionError(f"SQL {sql!r} shouldn't return {len(rows)} rows") - def _executemany(self, sql: str, data: Iterable[Any]) -> sqlite3.Cursor: + def _executemany(self, sql: str, data: List[Any]) -> sqlite3.Cursor: """Same as :meth:`python:sqlite3.Connection.executemany`.""" if self.debug.should("sql"): - data = list(data) final = ":" if self.debug.should("sqldata") else "" self.debug.write(f"Executing many {sql!r} with {len(data)} rows{final}") if self.debug.should("sqldata"): @@ -1233,7 +1229,9 @@ def _executemany(self, sql: str, data: Iterable[Any]) -> sqlite3.Cursor: def executemany_void(self, sql: str, data: Iterable[Any]) -> None: """Same as :meth:`python:sqlite3.Connection.executemany` when you don't need the cursor.""" - self._executemany(sql, data).close() + data = list(data) + if data: + self._executemany(sql, data).close() def executescript(self, script: str) -> None: """Same as :meth:`python:sqlite3.Connection.executescript`.""" diff --git a/tests/test_data.py b/tests/test_data.py index ab4e03f70..5953ba36e 100644 --- a/tests/test_data.py +++ b/tests/test_data.py @@ -187,6 +187,14 @@ def test_ok_to_add_arcs_twice(self) -> None: assert_line_counts(covdata, SUMMARY_3_4) assert_measured_files(covdata, MEASURED_FILES_3_4) + def test_ok_to_add_empty_arcs(self) -> None: + covdata = DebugCoverageData() + covdata.add_arcs(ARCS_3) + covdata.add_arcs(ARCS_4) + covdata.add_arcs(dict.fromkeys(ARCS_3, set())) + assert_line_counts(covdata, SUMMARY_3_4) + assert_measured_files(covdata, MEASURED_FILES_3_4) + @pytest.mark.parametrize("klass", [CoverageData, DebugCoverageData]) def test_cant_add_arcs_with_lines(self, klass: TCoverageData) -> None: covdata = klass() @@ -350,16 +358,6 @@ def test_ok_to_set_empty_file_tracer(self) -> None: assert covdata.file_tracer("p1.foo") == "p1.plugin" assert covdata.file_tracer("main.py") == "" - def test_cant_file_tracer_unmeasured_files(self) -> None: - covdata = DebugCoverageData() - msg = "Can't add file tracer data for unmeasured file 'p1.foo'" - with pytest.raises(DataError, match=msg): - covdata.add_file_tracers({"p1.foo": "p1.plugin"}) - - covdata.add_lines({"p2.html": [10, 11, 12]}) - with pytest.raises(DataError, match=msg): - covdata.add_file_tracers({"p1.foo": "p1.plugin"}) - def test_cant_change_file_tracer_name(self) -> None: covdata = DebugCoverageData() covdata.add_lines({"p1.foo": [1, 2, 3]}) From 36712f4eb500b4b0db4ae7b152462ae49e326f0c Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Tue, 24 Jan 2023 19:35:32 -0500 Subject: [PATCH 036/139] docs: prep for 7.1.0 --- CHANGES.rst | 18 ++++++++++-------- coverage/version.py | 4 ++-- doc/conf.py | 6 +++--- 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index 745564c52..fa01b701e 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -17,17 +17,21 @@ development at the same time, such as 4.5.x and 5.0. .. Version 9.8.1 — 2027-07-27 .. -------------------------- -Unreleased ----------- +.. scriv-start-here + +.. _changes_7-1-0: -- Performance: fixed a slow-down with dynamic contexts that appeared in 6.4.3, - closing `issue 1538`_. Hopefully this doesn't break the `Cython change`_ - that fixed `issue 972`_. Thanks to Mathieu Kniewallner for the deep - investigative work and comprehensive issue report. +Version 7.1.0 — 2023-01-24 +-------------------------- - Added: the debug output file can now be specified with ``[run] debug_file`` in the configuration file. Closes `issue 1319`_. +- Performance: fixed a slowdown with dynamic contexts that's been around since + 6.4.3. The fix closes `issue 1538`_. Thankfully this doesn't break the + `Cython change`_ that fixed `issue 972`_. Thanks to Mathieu Kniewallner for + the deep investigative work and comprehensive issue report. + - Typing: all product and test code has type annotations. .. _Cython change: https://github.com/nedbat/coveragepy/pull/1347 @@ -35,8 +39,6 @@ Unreleased .. _issue 1319: https://github.com/nedbat/coveragepy/issues/1319 .. _issue 1538: https://github.com/nedbat/coveragepy/issues/1538 -.. scriv-start-here - .. _changes_7-0-5: Version 7.0.5 — 2023-01-10 diff --git a/coverage/version.py b/coverage/version.py index e6a1b9f3e..6f6375b67 100644 --- a/coverage/version.py +++ b/coverage/version.py @@ -8,8 +8,8 @@ # version_info: same semantics as sys.version_info. # _dev: the .devN suffix if any. -version_info = (7, 0, 6, "alpha", 0) -_dev = 1 +version_info = (7, 1, 0, "final", 0) +_dev = 0 def _make_version( diff --git a/doc/conf.py b/doc/conf.py index b321144e9..39601fab2 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -65,11 +65,11 @@ # @@@ editable copyright = "2009–2023, Ned Batchelder" # pylint: disable=redefined-builtin # The short X.Y.Z version. -version = "7.0.5" +version = "7.1.0" # The full version, including alpha/beta/rc tags. -release = "7.0.5" +release = "7.1.0" # The date of release, in "monthname day, year" format. -release_date = "January 10, 2023" +release_date = "January 24, 2023" # @@@ end rst_epilog = """ From 32fd81ebaf523c6c13626099349138791c414b80 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Tue, 24 Jan 2023 19:38:19 -0500 Subject: [PATCH 037/139] docs: sample HTML for 7.1.0 --- doc/sample_html/d_7b071bdc2a35fa80___init___py.html | 8 ++++---- doc/sample_html/d_7b071bdc2a35fa80___main___py.html | 8 ++++---- doc/sample_html/d_7b071bdc2a35fa80_backward_py.html | 8 ++++---- doc/sample_html/d_7b071bdc2a35fa80_cogapp_py.html | 8 ++++---- doc/sample_html/d_7b071bdc2a35fa80_makefiles_py.html | 8 ++++---- doc/sample_html/d_7b071bdc2a35fa80_test_cogapp_py.html | 8 ++++---- doc/sample_html/d_7b071bdc2a35fa80_test_makefiles_py.html | 8 ++++---- .../d_7b071bdc2a35fa80_test_whiteutils_py.html | 8 ++++---- doc/sample_html/d_7b071bdc2a35fa80_whiteutils_py.html | 8 ++++---- doc/sample_html/index.html | 8 ++++---- doc/sample_html/status.json | 2 +- 11 files changed, 41 insertions(+), 41 deletions(-) diff --git a/doc/sample_html/d_7b071bdc2a35fa80___init___py.html b/doc/sample_html/d_7b071bdc2a35fa80___init___py.html index 18bdc7adb..7d2c3e89e 100644 --- a/doc/sample_html/d_7b071bdc2a35fa80___init___py.html +++ b/doc/sample_html/d_7b071bdc2a35fa80___init___py.html @@ -66,8 +66,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80___main___py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.0.5</a>, - created at 2023-01-10 18:17 -0500 + <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.1.0</a>, + created at 2023-01-24 19:37 -0500 </p> <aside class="hidden"> <button type="button" class="button_next_chunk" data-shortcut="j"/> @@ -99,8 +99,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80___main___py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.0.5</a>, - created at 2023-01-10 18:17 -0500 + <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.1.0</a>, + created at 2023-01-24 19:37 -0500 </p> </div> </footer> diff --git a/doc/sample_html/d_7b071bdc2a35fa80___main___py.html b/doc/sample_html/d_7b071bdc2a35fa80___main___py.html index 5de5b8ae8..d5bc36c7f 100644 --- a/doc/sample_html/d_7b071bdc2a35fa80___main___py.html +++ b/doc/sample_html/d_7b071bdc2a35fa80___main___py.html @@ -66,8 +66,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80_backward_py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.0.5</a>, - created at 2023-01-10 18:17 -0500 + <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.1.0</a>, + created at 2023-01-24 19:37 -0500 </p> <aside class="hidden"> <button type="button" class="button_next_chunk" data-shortcut="j"/> @@ -95,8 +95,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80_backward_py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.0.5</a>, - created at 2023-01-10 18:17 -0500 + <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.1.0</a>, + created at 2023-01-24 19:37 -0500 </p> </div> </footer> diff --git a/doc/sample_html/d_7b071bdc2a35fa80_backward_py.html b/doc/sample_html/d_7b071bdc2a35fa80_backward_py.html index 6809a15d7..e0f2f0a03 100644 --- a/doc/sample_html/d_7b071bdc2a35fa80_backward_py.html +++ b/doc/sample_html/d_7b071bdc2a35fa80_backward_py.html @@ -66,8 +66,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80_cogapp_py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.0.5</a>, - created at 2023-01-10 18:17 -0500 + <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.1.0</a>, + created at 2023-01-24 19:37 -0500 </p> <aside class="hidden"> <button type="button" class="button_next_chunk" data-shortcut="j"/> @@ -132,8 +132,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80_cogapp_py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.0.5</a>, - created at 2023-01-10 18:17 -0500 + <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.1.0</a>, + created at 2023-01-24 19:37 -0500 </p> </div> </footer> diff --git a/doc/sample_html/d_7b071bdc2a35fa80_cogapp_py.html b/doc/sample_html/d_7b071bdc2a35fa80_cogapp_py.html index a89c0d333..428edad9b 100644 --- a/doc/sample_html/d_7b071bdc2a35fa80_cogapp_py.html +++ b/doc/sample_html/d_7b071bdc2a35fa80_cogapp_py.html @@ -66,8 +66,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80_makefiles_py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.0.5</a>, - created at 2023-01-10 18:17 -0500 + <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.1.0</a>, + created at 2023-01-24 19:37 -0500 </p> <aside class="hidden"> <button type="button" class="button_next_chunk" data-shortcut="j"/> @@ -935,8 +935,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80_makefiles_py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.0.5</a>, - created at 2023-01-10 18:17 -0500 + <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.1.0</a>, + created at 2023-01-24 19:37 -0500 </p> </div> </footer> diff --git a/doc/sample_html/d_7b071bdc2a35fa80_makefiles_py.html b/doc/sample_html/d_7b071bdc2a35fa80_makefiles_py.html index a0df838f4..9ceb57e9f 100644 --- a/doc/sample_html/d_7b071bdc2a35fa80_makefiles_py.html +++ b/doc/sample_html/d_7b071bdc2a35fa80_makefiles_py.html @@ -66,8 +66,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80_test_cogapp_py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.0.5</a>, - created at 2023-01-10 18:17 -0500 + <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.1.0</a>, + created at 2023-01-24 19:37 -0500 </p> <aside class="hidden"> <button type="button" class="button_next_chunk" data-shortcut="j"/> @@ -136,8 +136,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80_test_cogapp_py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.0.5</a>, - created at 2023-01-10 18:17 -0500 + <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.1.0</a>, + created at 2023-01-24 19:37 -0500 </p> </div> </footer> diff --git a/doc/sample_html/d_7b071bdc2a35fa80_test_cogapp_py.html b/doc/sample_html/d_7b071bdc2a35fa80_test_cogapp_py.html index 20bc0b096..d925934f3 100644 --- a/doc/sample_html/d_7b071bdc2a35fa80_test_cogapp_py.html +++ b/doc/sample_html/d_7b071bdc2a35fa80_test_cogapp_py.html @@ -66,8 +66,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80_test_makefiles_py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.0.5</a>, - created at 2023-01-10 18:17 -0500 + <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.1.0</a>, + created at 2023-01-24 19:37 -0500 </p> <aside class="hidden"> <button type="button" class="button_next_chunk" data-shortcut="j"/> @@ -2723,8 +2723,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80_test_makefiles_py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.0.5</a>, - created at 2023-01-10 18:17 -0500 + <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.1.0</a>, + created at 2023-01-24 19:37 -0500 </p> </div> </footer> diff --git a/doc/sample_html/d_7b071bdc2a35fa80_test_makefiles_py.html b/doc/sample_html/d_7b071bdc2a35fa80_test_makefiles_py.html index ed2c0c42c..daa0f0eb0 100644 --- a/doc/sample_html/d_7b071bdc2a35fa80_test_makefiles_py.html +++ b/doc/sample_html/d_7b071bdc2a35fa80_test_makefiles_py.html @@ -66,8 +66,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80_test_whiteutils_py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.0.5</a>, - created at 2023-01-10 18:17 -0500 + <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.1.0</a>, + created at 2023-01-24 19:37 -0500 </p> <aside class="hidden"> <button type="button" class="button_next_chunk" data-shortcut="j"/> @@ -212,8 +212,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80_test_whiteutils_py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.0.5</a>, - created at 2023-01-10 18:17 -0500 + <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.1.0</a>, + created at 2023-01-24 19:37 -0500 </p> </div> </footer> diff --git a/doc/sample_html/d_7b071bdc2a35fa80_test_whiteutils_py.html b/doc/sample_html/d_7b071bdc2a35fa80_test_whiteutils_py.html index 3f9c115e1..8d0118cc0 100644 --- a/doc/sample_html/d_7b071bdc2a35fa80_test_whiteutils_py.html +++ b/doc/sample_html/d_7b071bdc2a35fa80_test_whiteutils_py.html @@ -66,8 +66,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80_whiteutils_py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.0.5</a>, - created at 2023-01-10 18:17 -0500 + <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.1.0</a>, + created at 2023-01-24 19:37 -0500 </p> <aside class="hidden"> <button type="button" class="button_next_chunk" data-shortcut="j"/> @@ -191,8 +191,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80_whiteutils_py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.0.5</a>, - created at 2023-01-10 18:17 -0500 + <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.1.0</a>, + created at 2023-01-24 19:37 -0500 </p> </div> </footer> diff --git a/doc/sample_html/d_7b071bdc2a35fa80_whiteutils_py.html b/doc/sample_html/d_7b071bdc2a35fa80_whiteutils_py.html index 4d65fa5ff..2bcc3c0aa 100644 --- a/doc/sample_html/d_7b071bdc2a35fa80_whiteutils_py.html +++ b/doc/sample_html/d_7b071bdc2a35fa80_whiteutils_py.html @@ -66,8 +66,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="index.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.0.5</a>, - created at 2023-01-10 18:17 -0500 + <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.1.0</a>, + created at 2023-01-24 19:37 -0500 </p> <aside class="hidden"> <button type="button" class="button_next_chunk" data-shortcut="j"/> @@ -163,8 +163,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="index.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.0.5</a>, - created at 2023-01-10 18:17 -0500 + <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.1.0</a>, + created at 2023-01-24 19:37 -0500 </p> </div> </footer> diff --git a/doc/sample_html/index.html b/doc/sample_html/index.html index c82ac171d..5c735a4f2 100644 --- a/doc/sample_html/index.html +++ b/doc/sample_html/index.html @@ -46,8 +46,8 @@ <h1>Cog coverage: <input id="filter" type="text" value="" placeholder="filter..." /> </form> <p class="text"> - <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.0.5</a>, - created at 2023-01-10 18:17 -0500 + <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.1.0</a>, + created at 2023-01-24 19:37 -0500 </p> </div> </header> @@ -166,8 +166,8 @@ <h1>Cog coverage: <footer> <div class="content"> <p> - <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.0.5</a>, - created at 2023-01-10 18:17 -0500 + <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.1.0</a>, + created at 2023-01-24 19:37 -0500 </p> </div> <aside class="hidden"> diff --git a/doc/sample_html/status.json b/doc/sample_html/status.json index c794270e0..f44f9af0b 100644 --- a/doc/sample_html/status.json +++ b/doc/sample_html/status.json @@ -1 +1 @@ -{"format":2,"version":"7.0.5","globals":"436e227e3fe8ed82b20a49aa3b772003","files":{"d_7b071bdc2a35fa80___init___py":{"hash":"29cdbd59f3692c82f37e41536e3a2417","index":{"nums":[2,1,2,0,0,0,0,0],"html_filename":"d_7b071bdc2a35fa80___init___py.html","relative_filename":"cogapp/__init__.py"}},"d_7b071bdc2a35fa80___main___py":{"hash":"ffe6befa655d4d0b0b31eb0c73811311","index":{"nums":[2,1,3,0,3,0,0,0],"html_filename":"d_7b071bdc2a35fa80___main___py.html","relative_filename":"cogapp/__main__.py"}},"d_7b071bdc2a35fa80_backward_py":{"hash":"8f127f1e99243534806b5e7842d7bd7c","index":{"nums":[2,1,22,0,6,4,2,2],"html_filename":"d_7b071bdc2a35fa80_backward_py.html","relative_filename":"cogapp/backward.py"}},"d_7b071bdc2a35fa80_cogapp_py":{"hash":"659112bebf3e453082a54c29ddc9be18","index":{"nums":[2,1,510,1,230,216,30,144],"html_filename":"d_7b071bdc2a35fa80_cogapp_py.html","relative_filename":"cogapp/cogapp.py"}},"d_7b071bdc2a35fa80_makefiles_py":{"hash":"4cac5bcd4b2151cb0f865736ff610acc","index":{"nums":[2,1,27,0,20,14,0,14],"html_filename":"d_7b071bdc2a35fa80_makefiles_py.html","relative_filename":"cogapp/makefiles.py"}},"d_7b071bdc2a35fa80_test_cogapp_py":{"hash":"dab21c99d2584fd9dd1245ae7eb199cd","index":{"nums":[2,1,849,2,595,28,1,25],"html_filename":"d_7b071bdc2a35fa80_test_cogapp_py.html","relative_filename":"cogapp/test_cogapp.py"}},"d_7b071bdc2a35fa80_test_makefiles_py":{"hash":"150060801c7a23f407563647d09899ff","index":{"nums":[2,1,71,0,53,6,0,6],"html_filename":"d_7b071bdc2a35fa80_test_makefiles_py.html","relative_filename":"cogapp/test_makefiles.py"}},"d_7b071bdc2a35fa80_test_whiteutils_py":{"hash":"6c4e351912582b16a450ab46df5d390c","index":{"nums":[2,1,69,0,50,0,0,0],"html_filename":"d_7b071bdc2a35fa80_test_whiteutils_py.html","relative_filename":"cogapp/test_whiteutils.py"}},"d_7b071bdc2a35fa80_whiteutils_py":{"hash":"755965ecdf5d51b6b9350f179070494f","index":{"nums":[2,1,45,0,5,34,4,4],"html_filename":"d_7b071bdc2a35fa80_whiteutils_py.html","relative_filename":"cogapp/whiteutils.py"}}}} \ No newline at end of file +{"format":2,"version":"7.1.0","globals":"7055224a7bc2d5650caf977ebd61f5fe","files":{"d_7b071bdc2a35fa80___init___py":{"hash":"29cdbd59f3692c82f37e41536e3a2417","index":{"nums":[2,1,2,0,0,0,0,0],"html_filename":"d_7b071bdc2a35fa80___init___py.html","relative_filename":"cogapp/__init__.py"}},"d_7b071bdc2a35fa80___main___py":{"hash":"ffe6befa655d4d0b0b31eb0c73811311","index":{"nums":[2,1,3,0,3,0,0,0],"html_filename":"d_7b071bdc2a35fa80___main___py.html","relative_filename":"cogapp/__main__.py"}},"d_7b071bdc2a35fa80_backward_py":{"hash":"8f127f1e99243534806b5e7842d7bd7c","index":{"nums":[2,1,22,0,6,4,2,2],"html_filename":"d_7b071bdc2a35fa80_backward_py.html","relative_filename":"cogapp/backward.py"}},"d_7b071bdc2a35fa80_cogapp_py":{"hash":"659112bebf3e453082a54c29ddc9be18","index":{"nums":[2,1,510,1,230,216,30,144],"html_filename":"d_7b071bdc2a35fa80_cogapp_py.html","relative_filename":"cogapp/cogapp.py"}},"d_7b071bdc2a35fa80_makefiles_py":{"hash":"4cac5bcd4b2151cb0f865736ff610acc","index":{"nums":[2,1,27,0,20,14,0,14],"html_filename":"d_7b071bdc2a35fa80_makefiles_py.html","relative_filename":"cogapp/makefiles.py"}},"d_7b071bdc2a35fa80_test_cogapp_py":{"hash":"dab21c99d2584fd9dd1245ae7eb199cd","index":{"nums":[2,1,849,2,595,28,1,25],"html_filename":"d_7b071bdc2a35fa80_test_cogapp_py.html","relative_filename":"cogapp/test_cogapp.py"}},"d_7b071bdc2a35fa80_test_makefiles_py":{"hash":"150060801c7a23f407563647d09899ff","index":{"nums":[2,1,71,0,53,6,0,6],"html_filename":"d_7b071bdc2a35fa80_test_makefiles_py.html","relative_filename":"cogapp/test_makefiles.py"}},"d_7b071bdc2a35fa80_test_whiteutils_py":{"hash":"6c4e351912582b16a450ab46df5d390c","index":{"nums":[2,1,69,0,50,0,0,0],"html_filename":"d_7b071bdc2a35fa80_test_whiteutils_py.html","relative_filename":"cogapp/test_whiteutils.py"}},"d_7b071bdc2a35fa80_whiteutils_py":{"hash":"755965ecdf5d51b6b9350f179070494f","index":{"nums":[2,1,45,0,5,34,4,4],"html_filename":"d_7b071bdc2a35fa80_whiteutils_py.html","relative_filename":"cogapp/whiteutils.py"}}}} \ No newline at end of file From 92fe560a9368a5ac32ad5a2a272913b1b0ebfdd5 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Tue, 24 Jan 2023 20:28:00 -0500 Subject: [PATCH 038/139] build: bump version --- CHANGES.rst | 6 ++++++ coverage/version.py | 4 ++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index fa01b701e..ed8e93d5b 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -17,6 +17,12 @@ development at the same time, such as 4.5.x and 5.0. .. Version 9.8.1 — 2027-07-27 .. -------------------------- +Unreleased +---------- + +Nothing yet. + + .. scriv-start-here .. _changes_7-1-0: diff --git a/coverage/version.py b/coverage/version.py index 6f6375b67..87cb563f9 100644 --- a/coverage/version.py +++ b/coverage/version.py @@ -8,8 +8,8 @@ # version_info: same semantics as sys.version_info. # _dev: the .devN suffix if any. -version_info = (7, 1, 0, "final", 0) -_dev = 0 +version_info = (7, 1, 1, "alpha", 0) +_dev = 1 def _make_version( From 2d628d40d60f967f135a8c21a62a000716c45054 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Thu, 26 Jan 2023 19:07:54 -0500 Subject: [PATCH 039/139] style: remove needless trailing commas --- coverage/types.py | 2 +- tests/test_parser.py | 2 +- tests/test_phystokens.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/coverage/types.py b/coverage/types.py index 3d21ac9d0..b8135d05b 100644 --- a/coverage/types.py +++ b/coverage/types.py @@ -161,7 +161,7 @@ class TPlugin(Protocol): class TWarnFn(Protocol): """A callable warn() function.""" - def __call__(self, msg: str, slug: Optional[str] = None, once: bool = False,) -> None: + def __call__(self, msg: str, slug: Optional[str] = None, once: bool = False) -> None: ... diff --git a/tests/test_parser.py b/tests/test_parser.py index 8009ce51f..f74420b5d 100644 --- a/tests/test_parser.py +++ b/tests/test_parser.py @@ -533,7 +533,7 @@ def test_ast_dump() -> None: num_lines = len(source.splitlines()) with warnings.catch_warnings(): # stress_phystoken.tok has deprecation warnings, suppress them. - warnings.filterwarnings("ignore", message=r".*invalid escape sequence",) + warnings.filterwarnings("ignore", message=r".*invalid escape sequence") ast_root = ast.parse(source) result: List[str] = [] ast_dump(ast_root, print=result.append) diff --git a/tests/test_phystokens.py b/tests/test_phystokens.py index 5807f00d3..2f1f73071 100644 --- a/tests/test_phystokens.py +++ b/tests/test_phystokens.py @@ -103,7 +103,7 @@ def test_stress(self, fname: str) -> None: # Check the tokenization of the stress-test files. # And check that those files haven't been incorrectly "fixed". with warnings.catch_warnings(): - warnings.filterwarnings("ignore", message=r".*invalid escape sequence",) + warnings.filterwarnings("ignore", message=r".*invalid escape sequence") stress = os.path.join(TESTS_DIR, fname) self.check_file_tokenization(stress) From 6a1c275b94818ccef91481ab01d0eb000906967a Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Fri, 27 Jan 2023 07:07:43 -0500 Subject: [PATCH 040/139] exp: an unsupport select_contexts.py #668 --- lab/select_contexts.py | 66 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 lab/select_contexts.py diff --git a/lab/select_contexts.py b/lab/select_contexts.py new file mode 100644 index 000000000..7f8e2cf8a --- /dev/null +++ b/lab/select_contexts.py @@ -0,0 +1,66 @@ +# Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0 +# For details: https://github.com/nedbat/coveragepy/blob/master/NOTICE.txt + +"""\ +Select certain contexts from a coverage.py data file. +""" + +import argparse +import re +import sys + +import coverage + + +def main(argv): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--include", type=str, help="Regex for contexts to keep") + parser.add_argument("--exclude", type=str, help="Regex for contexts to discard") + args = parser.parse_args(argv) + + print("** Note: this is a proof-of-concept. Support is not promised. **") + print("Feedback is appreciated: https://github.com/nedbat/coveragepy/issues/668") + + cov_in = coverage.Coverage() + cov_in.load() + data_in = cov_in.get_data() + print(f"Contexts in {data_in.data_filename()}:") + for ctx in sorted(data_in.measured_contexts()): + print(f" {ctx}") + + if args.include is None and args.exclude is None: + print("Nothing to do, no output written.") + return + + out_file = "output.data" + file_names = data_in.measured_files() + print(f"{len(file_names)} measured files") + print(f"Writing to {out_file}") + cov_out = coverage.Coverage(data_file=out_file) + data_out = cov_out.get_data() + + for ctx in sorted(data_in.measured_contexts()): + if args.include is not None: + if not re.search(args.include, ctx): + print(f"Skipping context {ctx}, not included") + continue + if args.exclude is not None: + if re.search(args.exclude, ctx): + print(f"Skipping context {ctx}, excluded") + continue + print(f"Keeping context {ctx}") + data_in.set_query_context(ctx) + data_out.set_context(ctx) + if data_in.has_arcs(): + data_out.add_arcs({f: data_in.arcs(f) for f in file_names}) + else: + data_out.add_lines({f: data_in.lines(f) for f in file_names}) + + for fname in file_names: + data_out.touch_file(fname, data_in.file_tracer(fname)) + + cov_out.save() + + +if __name__ == "__main__": + sys.exit(main(sys.argv[1:])) From eb3536ddff194b126d52b94d72b81d77296fa869 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Sat, 28 Jan 2023 15:44:54 -0500 Subject: [PATCH 041/139] build(docs): correct [gh-actions] to [gh] --- .github/workflows/coverage.yml | 2 +- .github/workflows/python-nightly.yml | 2 +- .github/workflows/testsuite.yml | 2 +- tox.ini | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml index 0721ddc0c..6af6adedc 100644 --- a/.github/workflows/coverage.yml +++ b/.github/workflows/coverage.yml @@ -39,7 +39,7 @@ jobs: - macos-latest - windows-latest python-version: - # When changing this list, be sure to check the [gh-actions] list in + # When changing this list, be sure to check the [gh] list in # tox.ini so that tox will run properly. PYVERSIONS # Available versions: # https://github.com/actions/python-versions/blob/main/versions-manifest.json diff --git a/.github/workflows/python-nightly.yml b/.github/workflows/python-nightly.yml index 88b2b3897..967fd0c8c 100644 --- a/.github/workflows/python-nightly.yml +++ b/.github/workflows/python-nightly.yml @@ -42,7 +42,7 @@ jobs: strategy: matrix: python-version: - # When changing this list, be sure to check the [gh-actions] list in + # When changing this list, be sure to check the [gh] list in # tox.ini so that tox will run properly. PYVERSIONS # Available versions: # https://launchpad.net/~deadsnakes/+archive/ubuntu/nightly/+packages diff --git a/.github/workflows/testsuite.yml b/.github/workflows/testsuite.yml index e07989630..e560325c8 100644 --- a/.github/workflows/testsuite.yml +++ b/.github/workflows/testsuite.yml @@ -39,7 +39,7 @@ jobs: - macos - windows python-version: - # When changing this list, be sure to check the [gh-actions] list in + # When changing this list, be sure to check the [gh] list in # tox.ini so that tox will run properly. PYVERSIONS # Available versions: # https://github.com/actions/python-versions/blob/main/versions-manifest.json diff --git a/tox.ini b/tox.ini index 3592ec134..9fc3b5f31 100644 --- a/tox.ini +++ b/tox.ini @@ -2,7 +2,7 @@ # For details: https://github.com/nedbat/coveragepy/blob/master/NOTICE.txt [tox] -# When changing this list, be sure to check the [gh-actions] list below. +# When changing this list, be sure to check the [gh] list below. # PYVERSIONS envlist = py{37,38,39,310,311,312}, pypy3, doc, lint skip_missing_interpreters = {env:COVERAGE_SKIP_MISSING_INTERPRETERS:True} From dba1bc3a73482a30a71c24788829cb220689848b Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Mon, 30 Jan 2023 18:17:25 -0500 Subject: [PATCH 042/139] build: no need for check_eol, pylint does most of it --- igor.py | 72 --------------------------------------------------------- tox.ini | 1 - 2 files changed, 73 deletions(-) diff --git a/igor.py b/igor.py index 248b93f5c..ad0dbf8c5 100644 --- a/igor.py +++ b/igor.py @@ -10,7 +10,6 @@ import contextlib import datetime -import fnmatch import glob import inspect import os @@ -277,77 +276,6 @@ def do_zip_mods(): zf.write("coverage/__main__.py", "__main__.py") -def do_check_eol(): - """Check files for incorrect newlines and trailing white space.""" - - ignore_dirs = [ - '.svn', '.hg', '.git', - '.tox*', - '*.egg-info', - '_build', - '_spell', - 'tmp', - 'help', - ] - checked = set() - - def check_file(fname, crlf=True, trail_white=True): - """Check a single file for white space abuse.""" - fname = os.path.relpath(fname) - if fname in checked: - return - checked.add(fname) - - line = None - with open(fname, "rb") as f: - for n, line in enumerate(f, start=1): - if crlf: - if b"\r" in line: - print(f"{fname}@{n}: CR found") - return - if trail_white: - line = line[:-1] - if not crlf: - line = line.rstrip(b'\r') - if line.rstrip() != line: - print(f"{fname}@{n}: trailing white space found") - return - - if line is not None and not line.strip(): - print(f"{fname}: final blank line") - - def check_files(root, patterns, **kwargs): - """Check a number of files for white space abuse.""" - for where, dirs, files in os.walk(root): - for f in files: - fname = os.path.join(where, f) - for p in patterns: - if fnmatch.fnmatch(fname, p): - check_file(fname, **kwargs) - break - for ignore_dir in ignore_dirs: - ignored = [] - for dir_name in dirs: - if fnmatch.fnmatch(dir_name, ignore_dir): - ignored.append(dir_name) - for dir_name in ignored: - dirs.remove(dir_name) - - check_files("coverage", ["*.py"]) - check_files("coverage/ctracer", ["*.c", "*.h"]) - check_files("coverage/htmlfiles", ["*.html", "*.scss", "*.css", "*.js"]) - check_files("tests", ["*.py"]) - check_files("tests", ["*,cover"], trail_white=False) - check_files("tests/js", ["*.js", "*.html"]) - check_file("setup.py") - check_file("igor.py") - check_file("Makefile") - check_files(".", ["*.rst", "*.txt"]) - check_files(".", ["*.pip"]) - check_files(".github", ["*"]) - check_files("ci", ["*"]) - - def print_banner(label): """Print the version of Python.""" try: diff --git a/tox.ini b/tox.ini index 9fc3b5f31..a323d136a 100644 --- a/tox.ini +++ b/tox.ini @@ -77,7 +77,6 @@ setenv = commands = python -m tabnanny {env:LINTABLE} - python igor.py check_eol # If this command fails, see the comment at the top of doc/cmd.rst python -m cogapp -cP --check --verbosity=1 doc/*.rst python -m cogapp -cP --check --verbosity=1 .github/workflows/*.yml From f44415b9dde9ff7b3621714d6986cbca3bf9e60e Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Mon, 30 Jan 2023 18:21:06 -0500 Subject: [PATCH 043/139] build: some files need to be excused from usual formatting rules --- .editorconfig | 6 ++++++ tests/stress_phystoken.tok | 2 +- tests/stress_phystoken_dos.tok | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/.editorconfig b/.editorconfig index ae430ffd6..679ae499c 100644 --- a/.editorconfig +++ b/.editorconfig @@ -33,6 +33,12 @@ indent_size = 2 [*.rst] max_line_length = 79 +[*.tok] +trim_trailing_whitespace = false + +[*_dos.tok] +end_of_line = crlf + [Makefile] indent_style = tab indent_size = 8 diff --git a/tests/stress_phystoken.tok b/tests/stress_phystoken.tok index 65ba45dbd..934c633df 100644 --- a/tests/stress_phystoken.tok +++ b/tests/stress_phystoken.tok @@ -3,7 +3,7 @@ # Here's some random Python so that test_tokenize_myself will have some # stressful stuff to try. This file is .tok instead of .py so pylint won't -# complain about it, check_eol won't look at it, etc. +# complain about it, editors won't mess with it, etc. # Some lines are here to reproduce fixed bugs in ast_dump also. first_back = """\ diff --git a/tests/stress_phystoken_dos.tok b/tests/stress_phystoken_dos.tok index eb937d95c..2f5c795ad 100644 --- a/tests/stress_phystoken_dos.tok +++ b/tests/stress_phystoken_dos.tok @@ -3,7 +3,7 @@ # Here's some random Python so that test_tokenize_myself will have some # stressful stuff to try. This file is .tok instead of .py so pylint won't -# complain about it, check_eol won't look at it, etc. +# complain about it, editors won't mess with it, etc. first_back = """\ hey there! From a0445abdfb1be47129fff448b7f1a21d40336053 Mon Sep 17 00:00:00 2001 From: KotlinIsland <kotlinisland@users.noreply.github.com> Date: Thu, 2 Feb 2023 13:37:51 +1000 Subject: [PATCH 044/139] add py.typed --- coverage/py.typed | 0 setup.py | 1 + 2 files changed, 1 insertion(+) create mode 100644 coverage/py.typed diff --git a/coverage/py.typed b/coverage/py.typed new file mode 100644 index 000000000..e69de29bb diff --git a/setup.py b/setup.py index abd7b2780..bccb88196 100644 --- a/setup.py +++ b/setup.py @@ -89,6 +89,7 @@ 'coverage': [ 'htmlfiles/*.*', 'fullcoverage/*.*', + 'py.typed', ] }, From b0566a785d4d62db379f4e9707b7cd8c648f9df6 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Thu, 2 Feb 2023 17:09:01 -0500 Subject: [PATCH 045/139] docs: paperwork for py.typed --- CHANGES.rst | 5 ++++- coverage/py.typed | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGES.rst b/CHANGES.rst index ed8e93d5b..627b10dcb 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -20,7 +20,10 @@ development at the same time, such as 4.5.x and 5.0. Unreleased ---------- -Nothing yet. +- Added a ``py.typed`` file to announce our type-hintedness. Thanks, + `KotlinIsland <pull 1550_>`_. + +.. _pull 1550: https://github.com/nedbat/coveragepy/pull/1550 .. scriv-start-here diff --git a/coverage/py.typed b/coverage/py.typed index e69de29bb..bacd23a18 100644 --- a/coverage/py.typed +++ b/coverage/py.typed @@ -0,0 +1 @@ +# Marker file for PEP 561 to indicate that this package has type hints. From 96af3eae92a7b5dc1053be194820adf47c17777a Mon Sep 17 00:00:00 2001 From: Russell Keith-Magee <russell@keith-magee.com> Date: Fri, 3 Feb 2023 20:42:18 +0800 Subject: [PATCH 046/139] fix: add safety for empty stack on shutdown. (#1543) * Add safety for empty stack on shutdown. * Correct line length linting issue. --------- Co-authored-by: Ned Batchelder <ned@nedbatchelder.com> --- coverage/pytracer.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/coverage/pytracer.py b/coverage/pytracer.py index 326c50ba8..6723c2a1b 100644 --- a/coverage/pytracer.py +++ b/coverage/pytracer.py @@ -137,9 +137,17 @@ def _trace( self.log(">", f.f_code.co_filename, f.f_lineno, f.f_code.co_name, f.f_trace) f = f.f_back sys.settrace(None) - self.cur_file_data, self.cur_file_name, self.last_line, self.started_context = ( - self.data_stack.pop() - ) + try: + self.cur_file_data, self.cur_file_name, self.last_line, self.started_context = ( + self.data_stack.pop() + ) + except IndexError: + self.log( + "Empty stack!", + frame.f_code.co_filename, + frame.f_lineno, + frame.f_code.co_name + ) return None # if event != 'call' and frame.f_code.co_filename != self.cur_file_name: From 131060464647cd4c96fe8b79936d463847e9c0df Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Thu, 26 Jan 2023 07:24:39 -0500 Subject: [PATCH 047/139] docs: paperwork for #1543 This is about the fix in commit 96af3eae92a7b5dc1053be194820adf47c17777a --- CHANGES.rst | 6 ++++++ CONTRIBUTORS.txt | 1 + 2 files changed, 7 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index 627b10dcb..0023f31bf 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -20,9 +20,15 @@ development at the same time, such as 4.5.x and 5.0. Unreleased ---------- +- Fix: In some embedded environments, an IndexError could occur on stop() when + the originating thread exits before completion. This is now fixed, thanks to + `Russell Keith-Magee <pull 1543_>`_, closing `issue 1542`_. + - Added a ``py.typed`` file to announce our type-hintedness. Thanks, `KotlinIsland <pull 1550_>`_. +.. _issue 1542: https://github.com/nedbat/coveragepy/issues/1542 +.. _pull 1543: https://github.com/nedbat/coveragepy/pull/1543 .. _pull 1550: https://github.com/nedbat/coveragepy/pull/1550 diff --git a/CONTRIBUTORS.txt b/CONTRIBUTORS.txt index 012963d16..e06acd076 100644 --- a/CONTRIBUTORS.txt +++ b/CONTRIBUTORS.txt @@ -139,6 +139,7 @@ Rodrigue Cloutier Roger Hu Ross Lawley Roy Williams +Russell Keith-Magee Salvatore Zagaria Sandra Martocchia Scott Belden From 441823f18f705b8a79829cca36142a7f1511477b Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Sat, 4 Feb 2023 12:00:32 -0500 Subject: [PATCH 048/139] fix: two typing tweaks --- coverage/sqldata.py | 2 +- doc/excluding.rst | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/coverage/sqldata.py b/coverage/sqldata.py index 1cb8abe47..77577437e 100644 --- a/coverage/sqldata.py +++ b/coverage/sqldata.py @@ -596,7 +596,7 @@ def touch_file(self, filename: str, plugin_name: str = "") -> None: """ self.touch_files([filename], plugin_name) - def touch_files(self, filenames: Iterable[str], plugin_name: Optional[str] = None) -> None: + def touch_files(self, filenames: Collection[str], plugin_name: Optional[str] = None) -> None: """Ensure that `filenames` appear in the data, empty if needed. `plugin_name` is the name of the plugin responsible for these files. diff --git a/doc/excluding.rst b/doc/excluding.rst index aa6c6298a..315d4e290 100644 --- a/doc/excluding.rst +++ b/doc/excluding.rst @@ -95,6 +95,7 @@ For example, here's a list of exclusions I've used:: raise NotImplementedError if 0: if __name__ == .__main__.: + if TYPE_CHECKING: class .*\bProtocol\): @(abc\.)?abstractmethod From a4cd6a01f766359fbe8ff159e0ed87e03e8023ed Mon Sep 17 00:00:00 2001 From: Wingware Development <59840981+wingware-dev@users.noreply.github.com> Date: Sat, 4 Feb 2023 18:20:20 -0500 Subject: [PATCH 049/139] feat: add purge_files method to CoverageData + unit tests for it (#1547) * Add purge_files method to CoverageData, to allow for selective removal and update of coverage data. * Fix assert syntax so it's not true; this code isn't reached in the test unless it fails and then it would have failed to fail. * Remove trailing whitespace; did not expect this would matter on a blank line. * Add type annotations required by mypy --------- Co-authored-by: Stephan Deibel <sdeibel@wingware.com> --- coverage/sqldata.py | 36 +++++++++++++++ tests/test_api.py | 106 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 142 insertions(+) diff --git a/coverage/sqldata.py b/coverage/sqldata.py index 77577437e..12676d0bb 100644 --- a/coverage/sqldata.py +++ b/coverage/sqldata.py @@ -615,6 +615,42 @@ def touch_files(self, filenames: Collection[str], plugin_name: Optional[str] = N # Set the tracer for this file self.add_file_tracers({filename: plugin_name}) + def purge_files(self, filenames: Iterable[str], context: Optional[str] = None) -> None: + """Purge any existing coverage data for the given `filenames`. + + If `context` is given, purge only data associated with that measurement context. + """ + + if self._debug.should("dataop"): + self._debug.write(f"Purging {filenames!r} for context {context}") + self._start_using() + with self._connect() as con: + + if context is not None: + context_id = self._context_id(context) + if context_id is None: + raise DataError("Unknown context {context}") + else: + context_id = None + + if self._has_lines: + table = 'line_bits' + elif self._has_arcs: + table = 'arcs' + else: + return + + for filename in filenames: + file_id = self._file_id(filename, add=False) + if file_id is None: + continue + self._file_map.pop(filename, None) + if context_id is None: + q = f'delete from {table} where file_id={file_id}' + else: + q = f'delete from {table} where file_id={file_id} and context_id={context_id}' + con.execute(q) + def update(self, other_data: CoverageData, aliases: Optional[PathAliases] = None) -> None: """Update this data with data from several other :class:`CoverageData` instances. diff --git a/tests/test_api.py b/tests/test_api.py index 1c5654216..885831550 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -754,6 +754,112 @@ def test_run_debug_sys(self) -> None: cov.stop() # pragma: nested assert cast(str, d['data_file']).endswith(".coverage") + def test_purge_filenames(self) -> None: + + fn1 = self.make_file("mymain.py", """\ + import mymod + a = 1 + """) + fn1 = os.path.join(self.temp_dir, fn1) + + fn2 = self.make_file("mymod.py", """\ + fooey = 17 + """) + fn2 = os.path.join(self.temp_dir, fn2) + + cov = coverage.Coverage() + self.start_import_stop(cov, "mymain") + + data = cov.get_data() + + # Initial measurement was for two files + assert len(data.measured_files()) == 2 + assert [1, 2] == sorted_lines(data, fn1) + assert [1,] == sorted_lines(data, fn2) + + # Purge one file's data and one should remain + data.purge_files([fn1]) + assert len(data.measured_files()) == 1 + assert [] == sorted_lines(data, fn1) + assert [1,] == sorted_lines(data, fn2) + + # Purge second file's data and none should remain + data.purge_files([fn2]) + assert len(data.measured_files()) == 0 + assert [] == sorted_lines(data, fn1) + assert [] == sorted_lines(data, fn2) + + def test_purge_filenames_context(self) -> None: + + fn1 = self.make_file("mymain.py", """\ + import mymod + a = 1 + """) + fn1 = os.path.join(self.temp_dir, fn1) + + fn2 = self.make_file("mymod.py", """\ + fooey = 17 + """) + fn2 = os.path.join(self.temp_dir, fn2) + + def dummy_function() -> None: + unused = 42 + + # Start/stop since otherwise cantext + cov = coverage.Coverage() + cov.start() + cov.switch_context('initialcontext') + dummy_function() + cov.switch_context('testcontext') + cov.stop() + self.start_import_stop(cov, "mymain") + + data = cov.get_data() + + # Initial measurement was for three files and two contexts + assert len(data.measured_files()) == 3 + assert [1, 2] == sorted_lines(data, fn1) + assert [1,] == sorted_lines(data, fn2) + assert len(sorted_lines(data, __file__)) == 1 + assert len(data.measured_contexts()) == 2 + + # Remove specifying wrong context should raise exception and not remove anything + try: + data.purge_files([fn1], 'wrongcontext') + except coverage.sqldata.DataError: + pass + else: + assert 0, "exception expected" + assert len(data.measured_files()) == 3 + assert [1, 2] == sorted_lines(data, fn1) + assert [1,] == sorted_lines(data, fn2) + assert len(sorted_lines(data, __file__)) == 1 + assert len(data.measured_contexts()) == 2 + + # Remove one file specifying correct context + data.purge_files([fn1], 'testcontext') + assert len(data.measured_files()) == 2 + assert [] == sorted_lines(data, fn1) + assert [1,] == sorted_lines(data, fn2) + assert len(sorted_lines(data, __file__)) == 1 + assert len(data.measured_contexts()) == 2 + + # Remove second file with other correct context + data.purge_files([__file__], 'initialcontext') + assert len(data.measured_files()) == 1 + assert [] == sorted_lines(data, fn1) + assert [1,] == sorted_lines(data, fn2) + assert len(sorted_lines(data, __file__)) == 0 + assert len(data.measured_contexts()) == 2 + + # Remove last file specifying correct context + data.purge_files([fn2], 'testcontext') + assert len(data.measured_files()) == 0 + assert [] == sorted_lines(data, fn1) + assert [] == sorted_lines(data, fn2) + assert len(sorted_lines(data, __file__)) == 0 + assert len(data.measured_contexts()) == 2 + class CurrentInstanceTest(CoverageTest): """Tests of Coverage.current().""" From c07fee3b9273748f00d238233f7b56a1553a2af3 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Wed, 8 Feb 2023 07:10:23 -0700 Subject: [PATCH 050/139] build: an env var to allow no-network tox runs (for airplanes) --- tox.ini | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tox.ini b/tox.ini index a323d136a..70b56a3f3 100644 --- a/tox.ini +++ b/tox.ini @@ -30,13 +30,15 @@ setenv = # so override any local setting. PYTHONPYCACHEPREFIX= +# $set_env.py: COVERAGE_PIP_ARGS - Extra arguments for `pip install` +# `--no-build-isolation` will let tox work with no network. commands = # Create tests/zipmods.zip python igor.py zip_mods # Build the C extension and test with the CTracer python setup.py --quiet build_ext --inplace - python -m pip install -q -e . + python -m pip install {env:COVERAGE_PIP_ARGS} -q -e . python igor.py test_with_tracer c {posargs} # Remove the C extension so that we can test the PyTracer @@ -84,7 +86,7 @@ commands = python -m pylint --notes= {env:LINTABLE} check-manifest --ignore 'doc/sample_html/*,.treerc' # If 'build -q' becomes a thing (https://github.com/pypa/build/issues/188), - # this can be simplifed: + # this can be simplified: python igor.py quietly "python -m build" twine check dist/* From cb7d67962ca8ed9eb176e144b9cfe96373803bf4 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Wed, 8 Feb 2023 07:11:05 -0700 Subject: [PATCH 051/139] build: next version will be 7.2.0 --- coverage/version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coverage/version.py b/coverage/version.py index 87cb563f9..effb063df 100644 --- a/coverage/version.py +++ b/coverage/version.py @@ -8,7 +8,7 @@ # version_info: same semantics as sys.version_info. # _dev: the .devN suffix if any. -version_info = (7, 1, 1, "alpha", 0) +version_info = (7, 2, 0, "alpha", 0) _dev = 1 From 423fa596325acb8f6bcb37a3502cf7853e5d395a Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Wed, 8 Feb 2023 07:11:45 -0700 Subject: [PATCH 052/139] feat: simplify purges_files Also, move tests to test_data.py, and finish covering the code. --- CHANGES.rst | 4 ++ CONTRIBUTORS.txt | 1 + coverage/sqldata.py | 43 ++++++++---------- tests/test_api.py | 106 -------------------------------------------- tests/test_data.py | 29 ++++++++++++ 5 files changed, 53 insertions(+), 130 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index 0023f31bf..b4883728b 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -20,6 +20,9 @@ development at the same time, such as 4.5.x and 5.0. Unreleased ---------- +- Added a :meth:`.CoverageData.purge_files` method to remove recorded data for + a particular file. Contributed by `Stephan Deibel <pull 1547_>`_. + - Fix: In some embedded environments, an IndexError could occur on stop() when the originating thread exits before completion. This is now fixed, thanks to `Russell Keith-Magee <pull 1543_>`_, closing `issue 1542`_. @@ -29,6 +32,7 @@ Unreleased .. _issue 1542: https://github.com/nedbat/coveragepy/issues/1542 .. _pull 1543: https://github.com/nedbat/coveragepy/pull/1543 +.. _pull 1547: https://github.com/nedbat/coveragepy/pull/1547 .. _pull 1550: https://github.com/nedbat/coveragepy/pull/1550 diff --git a/CONTRIBUTORS.txt b/CONTRIBUTORS.txt index e06acd076..8889ed612 100644 --- a/CONTRIBUTORS.txt +++ b/CONTRIBUTORS.txt @@ -149,6 +149,7 @@ Sigve Tjora Simon Willison Stan Hu Stefan Behnel +Stephan Deibel Stephan Richter Stephen Finucane Steve Dower diff --git a/coverage/sqldata.py b/coverage/sqldata.py index 12676d0bb..9aa2b1293 100644 --- a/coverage/sqldata.py +++ b/coverage/sqldata.py @@ -197,9 +197,11 @@ class CoverageData(AutoReprMixin): Write the data to its file with :meth:`write`. - You can clear the data in memory with :meth:`erase`. Two data collections - can be combined by using :meth:`update` on one :class:`CoverageData`, - passing it the other. + You can clear the data in memory with :meth:`erase`. Data for specific + files can be removed from the database with :meth:`purge_files`. + + Two data collections can be combined by using :meth:`update` on one + :class:`CoverageData`, passing it the other. Data in a :class:`CoverageData` can be serialized and deserialized with :meth:`dumps` and :meth:`loads`. @@ -615,41 +617,29 @@ def touch_files(self, filenames: Collection[str], plugin_name: Optional[str] = N # Set the tracer for this file self.add_file_tracers({filename: plugin_name}) - def purge_files(self, filenames: Iterable[str], context: Optional[str] = None) -> None: + def purge_files(self, filenames: Collection[str]) -> None: """Purge any existing coverage data for the given `filenames`. - If `context` is given, purge only data associated with that measurement context. - """ + .. versionadded:: 7.2 + """ if self._debug.should("dataop"): - self._debug.write(f"Purging {filenames!r} for context {context}") + self._debug.write(f"Purging data for {filenames!r}") self._start_using() with self._connect() as con: - if context is not None: - context_id = self._context_id(context) - if context_id is None: - raise DataError("Unknown context {context}") - else: - context_id = None - if self._has_lines: - table = 'line_bits' + sql = "delete from line_bits where file_id=?" elif self._has_arcs: - table = 'arcs' + sql = "delete from arc where file_id=?" else: - return + raise DataError("Can't purge files in an empty CoverageData") for filename in filenames: file_id = self._file_id(filename, add=False) if file_id is None: continue - self._file_map.pop(filename, None) - if context_id is None: - q = f'delete from {table} where file_id={file_id}' - else: - q = f'delete from {table} where file_id={file_id} and context_id={context_id}' - con.execute(q) + con.execute_void(sql, (file_id,)) def update(self, other_data: CoverageData, aliases: Optional[PathAliases] = None) -> None: """Update this data with data from several other :class:`CoverageData` instances. @@ -868,7 +858,12 @@ def has_arcs(self) -> bool: return bool(self._has_arcs) def measured_files(self) -> Set[str]: - """A set of all files that had been measured.""" + """A set of all files that have been measured. + + Note that a file may be mentioned as measured even though no lines or + arcs for that file are present in the data. + + """ return set(self._file_map) def measured_contexts(self) -> Set[str]: diff --git a/tests/test_api.py b/tests/test_api.py index 885831550..1c5654216 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -754,112 +754,6 @@ def test_run_debug_sys(self) -> None: cov.stop() # pragma: nested assert cast(str, d['data_file']).endswith(".coverage") - def test_purge_filenames(self) -> None: - - fn1 = self.make_file("mymain.py", """\ - import mymod - a = 1 - """) - fn1 = os.path.join(self.temp_dir, fn1) - - fn2 = self.make_file("mymod.py", """\ - fooey = 17 - """) - fn2 = os.path.join(self.temp_dir, fn2) - - cov = coverage.Coverage() - self.start_import_stop(cov, "mymain") - - data = cov.get_data() - - # Initial measurement was for two files - assert len(data.measured_files()) == 2 - assert [1, 2] == sorted_lines(data, fn1) - assert [1,] == sorted_lines(data, fn2) - - # Purge one file's data and one should remain - data.purge_files([fn1]) - assert len(data.measured_files()) == 1 - assert [] == sorted_lines(data, fn1) - assert [1,] == sorted_lines(data, fn2) - - # Purge second file's data and none should remain - data.purge_files([fn2]) - assert len(data.measured_files()) == 0 - assert [] == sorted_lines(data, fn1) - assert [] == sorted_lines(data, fn2) - - def test_purge_filenames_context(self) -> None: - - fn1 = self.make_file("mymain.py", """\ - import mymod - a = 1 - """) - fn1 = os.path.join(self.temp_dir, fn1) - - fn2 = self.make_file("mymod.py", """\ - fooey = 17 - """) - fn2 = os.path.join(self.temp_dir, fn2) - - def dummy_function() -> None: - unused = 42 - - # Start/stop since otherwise cantext - cov = coverage.Coverage() - cov.start() - cov.switch_context('initialcontext') - dummy_function() - cov.switch_context('testcontext') - cov.stop() - self.start_import_stop(cov, "mymain") - - data = cov.get_data() - - # Initial measurement was for three files and two contexts - assert len(data.measured_files()) == 3 - assert [1, 2] == sorted_lines(data, fn1) - assert [1,] == sorted_lines(data, fn2) - assert len(sorted_lines(data, __file__)) == 1 - assert len(data.measured_contexts()) == 2 - - # Remove specifying wrong context should raise exception and not remove anything - try: - data.purge_files([fn1], 'wrongcontext') - except coverage.sqldata.DataError: - pass - else: - assert 0, "exception expected" - assert len(data.measured_files()) == 3 - assert [1, 2] == sorted_lines(data, fn1) - assert [1,] == sorted_lines(data, fn2) - assert len(sorted_lines(data, __file__)) == 1 - assert len(data.measured_contexts()) == 2 - - # Remove one file specifying correct context - data.purge_files([fn1], 'testcontext') - assert len(data.measured_files()) == 2 - assert [] == sorted_lines(data, fn1) - assert [1,] == sorted_lines(data, fn2) - assert len(sorted_lines(data, __file__)) == 1 - assert len(data.measured_contexts()) == 2 - - # Remove second file with other correct context - data.purge_files([__file__], 'initialcontext') - assert len(data.measured_files()) == 1 - assert [] == sorted_lines(data, fn1) - assert [1,] == sorted_lines(data, fn2) - assert len(sorted_lines(data, __file__)) == 0 - assert len(data.measured_contexts()) == 2 - - # Remove last file specifying correct context - data.purge_files([fn2], 'testcontext') - assert len(data.measured_files()) == 0 - assert [] == sorted_lines(data, fn1) - assert [] == sorted_lines(data, fn2) - assert len(sorted_lines(data, __file__)) == 0 - assert len(data.measured_contexts()) == 2 - class CurrentInstanceTest(CoverageTest): """Tests of Coverage.current().""" diff --git a/tests/test_data.py b/tests/test_data.py index 5953ba36e..1cc645720 100644 --- a/tests/test_data.py +++ b/tests/test_data.py @@ -588,6 +588,35 @@ def thread_main() -> None: assert_lines1_data(covdata) assert not exceptions + def test_purge_files_lines(self) -> None: + covdata = DebugCoverageData() + covdata.add_lines(LINES_1) + covdata.add_lines(LINES_2) + assert_line_counts(covdata, SUMMARY_1_2) + covdata.purge_files(["a.py", "b.py"]) + assert_line_counts(covdata, {"a.py": 0, "b.py": 0, "c.py": 1}) + covdata.purge_files(["c.py"]) + assert_line_counts(covdata, {"a.py": 0, "b.py": 0, "c.py": 0}) + # It's OK to "purge" a file that wasn't measured. + covdata.purge_files(["xyz.py"]) + assert_line_counts(covdata, {"a.py": 0, "b.py": 0, "c.py": 0}) + + def test_purge_files_arcs(self) -> None: + covdata = CoverageData() + covdata.add_arcs(ARCS_3) + covdata.add_arcs(ARCS_4) + assert_line_counts(covdata, SUMMARY_3_4) + covdata.purge_files(["x.py", "y.py"]) + assert_line_counts(covdata, {"x.py": 0, "y.py": 0, "z.py": 1}) + covdata.purge_files(["z.py"]) + assert_line_counts(covdata, {"x.py": 0, "y.py": 0, "z.py": 0}) + + def test_cant_purge_in_empty_data(self) -> None: + covdata = DebugCoverageData() + msg = "Can't purge files in an empty CoverageData" + with pytest.raises(DataError, match=msg): + covdata.purge_files(["abc.py"]) + class CoverageDataInTempDirTest(CoverageTest): """Tests of CoverageData that need a temporary directory to make files.""" From 8f3e7b45b3aabf4d7d01dc470010d3d36f30a0ba Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Wed, 8 Feb 2023 21:50:20 -0700 Subject: [PATCH 053/139] fix: only write "Wrote report" message if report succeeded. For example, see [issue 1554](https://github.com/nedbat/coveragepy/issues/1554) for the previous misleading behavior when the exception being raised wasn't a CoverageException. --- CHANGES.rst | 4 ++++ coverage/report.py | 23 +++++++++++------------ tests/test_report.py | 13 +++++++------ 3 files changed, 22 insertions(+), 18 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index b4883728b..f336cff58 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -23,6 +23,10 @@ Unreleased - Added a :meth:`.CoverageData.purge_files` method to remove recorded data for a particular file. Contributed by `Stephan Deibel <pull 1547_>`_. +- Fix: when reporting commands fail, they will no longer congratulate + themselves with messages like "Wrote XML report to file.xml" before spewing a + traceback about their failure. + - Fix: In some embedded environments, an IndexError could occur on stop() when the originating thread exits before completion. This is now fixed, thanks to `Russell Keith-Magee <pull 1543_>`_, closing `issue 1542`_. diff --git a/coverage/report.py b/coverage/report.py index 74ae18175..09eed0a82 100644 --- a/coverage/report.py +++ b/coverage/report.py @@ -9,7 +9,7 @@ from typing import Callable, Iterable, Iterator, IO, Optional, Tuple, TYPE_CHECKING -from coverage.exceptions import CoverageException, NoDataError, NotPython +from coverage.exceptions import NoDataError, NotPython from coverage.files import prep_patterns, GlobMatcher from coverage.misc import ensure_dir_for_file, file_be_gone from coverage.plugin import FileReporter @@ -47,26 +47,25 @@ def render_report( if output_path == "-": outfile = sys.stdout else: - # Ensure that the output directory is created; done here - # because this report pre-opens the output file. - # HTMLReport does this using the Report plumbing because - # its task is more complex, being multiple files. + # Ensure that the output directory is created; done here because this + # report pre-opens the output file. HtmlReporter does this on its own + # because its task is more complex, being multiple files. ensure_dir_for_file(output_path) outfile = open(output_path, "w", encoding="utf-8") file_to_close = outfile + delete_file = True try: - return reporter.report(morfs, outfile=outfile) - except CoverageException: - delete_file = True - raise + ret = reporter.report(morfs, outfile=outfile) + if file_to_close is not None: + msgfn(f"Wrote {reporter.report_type} to {output_path}") + delete_file = False + return ret finally: - if file_to_close: + if file_to_close is not None: file_to_close.close() if delete_file: file_be_gone(output_path) # pragma: part covered (doesn't return) - else: - msgfn(f"Wrote {reporter.report_type} to {output_path}") def get_analysis_to_report( diff --git a/tests/test_report.py b/tests/test_report.py index 3d87b5148..c85c6b473 100644 --- a/tests/test_report.py +++ b/tests/test_report.py @@ -5,7 +5,7 @@ from __future__ import annotations -from typing import IO, Iterable, List, Optional +from typing import IO, Iterable, List, Optional, Type import pytest @@ -21,7 +21,7 @@ class FakeReporter: report_type = "fake report file" - def __init__(self, output: str = "", error: bool = False) -> None: + def __init__(self, output: str = "", error: Optional[Type[Exception]] = None) -> None: self.output = output self.error = error self.morfs: Optional[Iterable[TMorf]] = None @@ -31,7 +31,7 @@ def report(self, morfs: Optional[Iterable[TMorf]], outfile: IO[str]) -> float: self.morfs = morfs outfile.write(self.output) if self.error: - raise CoverageException("You asked for it!") + raise self.error("You asked for it!") return 17.25 @@ -57,10 +57,11 @@ def test_file(self) -> None: assert f.read().rstrip() == b"Gr\xc3\xa9\xc3\xa8tings!" assert msgs == ["Wrote fake report file to output.txt"] - def test_exception(self) -> None: - fake = FakeReporter(error=True) + @pytest.mark.parametrize("error", [CoverageException, ZeroDivisionError]) + def test_exception(self, error: Type[Exception]) -> None: + fake = FakeReporter(error=error) msgs: List[str] = [] - with pytest.raises(CoverageException, match="You asked for it!"): + with pytest.raises(error, match="You asked for it!"): render_report("output.txt", fake, [], msgs.append) assert self.stdout() == "" self.assert_doesnt_exist("output.txt") From 712bd2ba1bbf9e9eb51393539378c80f8272fe3b Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Thu, 9 Feb 2023 07:51:06 -0700 Subject: [PATCH 054/139] chore: make upgrade --- doc/requirements.pip | 32 +++-- requirements/dev.pip | 225 ++++++++++++++--------------- requirements/kit.pip | 24 ++-- requirements/light-threads.pip | 128 ++++++++--------- requirements/lint.pip | 251 +++++++++++++++++---------------- requirements/mypy.pip | 82 +++++------ requirements/pip-tools.pip | 24 ++-- requirements/pip.pip | 24 ++-- requirements/pytest.pip | 18 +-- requirements/tox.pip | 36 ++--- 10 files changed, 432 insertions(+), 412 deletions(-) diff --git a/doc/requirements.pip b/doc/requirements.pip index c084ea8ca..fe681f159 100644 --- a/doc/requirements.pip +++ b/doc/requirements.pip @@ -128,9 +128,9 @@ colorama==0.4.6 \ --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \ --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 # via sphinx-autobuild -docutils==0.17.1 \ - --hash=sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125 \ - --hash=sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61 +docutils==0.18.1 \ + --hash=sha256:23010f129180089fbcd3bc08cfefccb3b890b0050e1ca00c867036e9d161b98c \ + --hash=sha256:679987caf361a7539d76e584cbeddc311e3aee937877c87346f31debc63e9d06 # via # sphinx # sphinx-rtd-theme @@ -237,10 +237,14 @@ requests==2.28.2 \ # via # scriv # sphinx -scriv==1.1.0 \ - --hash=sha256:1064101623e318d906d91f7e1405c97af414c67f0c7da8ee4d08eaa523b735eb \ - --hash=sha256:f2670624b2c44cdf34224c8b032b71a00a41b78e9f587140da6dd0b010e66b75 +scriv==1.2.0 \ + --hash=sha256:26b65a903da7d9aefc712a0d4150b8638302b4758bd428bbd773dd918c61c621 \ + --hash=sha256:bb61c30fea73158a4d18c28bbb57821c308245683efb0d897bd45e4a7856b472 # via -r doc/requirements.in +setuptools==67.2.0 \ + --hash=sha256:16ccf598aab3b506593c17378473978908a2734d7336755a8769b480906bec1c \ + --hash=sha256:b440ee5f7e607bb8c9de15259dba2583dd41a38879a7abc1d43a71c59524da48 + # via sphinxcontrib-jquery six==1.16.0 \ --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 @@ -262,9 +266,9 @@ sphinx-autobuild==2021.3.14 \ --hash=sha256:8fe8cbfdb75db04475232f05187c776f46f6e9e04cacf1e49ce81bdac649ccac \ --hash=sha256:de1ca3b66e271d2b5b5140c35034c89e47f263f2cd5db302c9217065f7443f05 # via -r doc/requirements.in -sphinx-rtd-theme==1.1.1 \ - --hash=sha256:31faa07d3e97c8955637fc3f1423a5ab2c44b74b8cc558a51498c202ce5cbda7 \ - --hash=sha256:6146c845f1e1947b3c3dd4432c28998a1693ccc742b4f9ad7c63129f0757c103 +sphinx-rtd-theme==1.2.0 \ + --hash=sha256:a0d8bd1a2ed52e0b338cbe19c4b2eef3c5e7a048769753dac6a9f059c7b641b8 \ + --hash=sha256:f823f7e71890abe0ac6aaa6013361ea2696fc8d3e1fa798f463e82bdb77eeff2 # via -r doc/requirements.in sphinxcontrib-applehelp==1.0.2 \ --hash=sha256:806111e5e962be97c29ec4c1e7fe277bfd19e9652fb1a4392105b43e01af885a \ @@ -278,6 +282,10 @@ sphinxcontrib-htmlhelp==2.0.0 \ --hash=sha256:d412243dfb797ae3ec2b59eca0e52dac12e75a241bf0e4eb861e450d06c6ed07 \ --hash=sha256:f5f8bb2d0d629f398bf47d0d69c07bc13b65f75a81ad9e2f71a63d4b7a2f6db2 # via sphinx +sphinxcontrib-jquery==2.0.0 \ + --hash=sha256:8fb65f6dba84bf7bcd1aea1f02ab3955ac34611d838bcc95d4983b805b234daa \ + --hash=sha256:ed47fa425c338ffebe3c37e1cdb56e30eb806116b85f01055b158c7057fdb995 + # via sphinx-rtd-theme sphinxcontrib-jsmath==1.0.1 \ --hash=sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178 \ --hash=sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8 @@ -319,7 +327,7 @@ urllib3==1.26.14 \ --hash=sha256:076907bf8fd355cde77728471316625a4d2f7e713c125f51953bb5b3eecf4f72 \ --hash=sha256:75edcdc2f7d85b137124a6c3c9fc3933cdeaa12ecb9a6a959f22797a0feca7e1 # via requests -zipp==3.11.0 \ - --hash=sha256:83a28fcb75844b5c0cdaf5aa4003c2d728c77e05f5aeabe8e95e56727005fbaa \ - --hash=sha256:a7a22e05929290a67401440b39690ae6563279bced5f314609d9d03798f56766 +zipp==3.12.1 \ + --hash=sha256:6c4fe274b8f85ec73c37a8e4e3fa00df9fb9335da96fb789e3b96b318e5097b3 \ + --hash=sha256:a3cac813d40993596b39ea9e93a18e8a2076d5c378b8bc88ec32ab264e04ad02 # via importlib-metadata diff --git a/requirements/dev.pip b/requirements/dev.pip index c2f80a446..af6838299 100644 --- a/requirements/dev.pip +++ b/requirements/dev.pip @@ -4,9 +4,9 @@ # # make upgrade # -astroid==2.13.2 \ - --hash=sha256:3bc7834720e1a24ca797fd785d77efb14f7a28ee8e635ef040b6e2d80ccb3303 \ - --hash=sha256:8f6a8d40c4ad161d6fc419545ae4b2f275ed86d1c989c97825772120842ee0d2 +astroid==2.14.1 \ + --hash=sha256:23c718921acab5f08cbbbe9293967f1f8fec40c336d19cd75dc12a9ea31d2eb2 \ + --hash=sha256:bd1aa4f9915c98e8aaebcd4e71930154d4e8c9aaf05d35ac0a63d1956091ae3f # via pylint attrs==22.2.0 \ --hash=sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836 \ @@ -15,17 +15,17 @@ attrs==22.2.0 \ # -r requirements/pytest.pip # hypothesis # pytest -bleach==5.0.1 \ - --hash=sha256:085f7f33c15bd408dd9b17a4ad77c577db66d76203e5984b1bd59baeee948b2a \ - --hash=sha256:0d03255c47eb9bd2f26aa9bb7f2107732e7e8fe195ca2f64709fcf3b0a4a085c +bleach==6.0.0 \ + --hash=sha256:1a1a85c1595e07d8db14c5f09f09e6433502c51c595970edc090551f0db99414 \ + --hash=sha256:33c16e3353dbd13028ab4799a0f89a83f113405c766e9c122df8a06f5b85b3f4 # via readme-renderer build==0.10.0 \ --hash=sha256:af266720050a66c893a6096a2f410989eeac74ff9a68ba194b3f6473e8e26171 \ --hash=sha256:d5b71264afdb5951d6704482aac78de887c80691c52b88a9ad195983ca2c9269 # via check-manifest -cachetools==5.2.1 \ - --hash=sha256:5991bc0e08a1319bb618d3195ca5b6bc76646a49c21d55962977197b301cc1fe \ - --hash=sha256:8462eebf3a6c15d25430a8c27c56ac61340b2ecf60c9ce57afc2b97e450e47da +cachetools==5.3.0 \ + --hash=sha256:13dfddc7b8df938c21a940dfa6557ce6e94a2f1cdfa58eb90c805721d58f2c14 \ + --hash=sha256:429e1a1e845c008ea6c85aa35d4b98b65d6a9763eeef3e37e92728a12d1de9d4 # via # -r requirements/tox.pip # tox @@ -144,10 +144,6 @@ colorama==0.4.6 \ # -r requirements/pytest.pip # -r requirements/tox.pip # tox -commonmark==0.9.1 \ - --hash=sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60 \ - --hash=sha256:da2f38c92590f83de410ba1a3cbceafbc74fee9def35f9251ba9a971d6d66fd9 - # via rich dill==0.3.6 \ --hash=sha256:a07ffd2351b8c678dfc4a856a3005f8067aea51d6ba6c700796a4d9e280f39f0 \ --hash=sha256:e5db55f3687856d8fbdab002ed78544e1c4559a130302693d839dfe8f93f2373 @@ -188,71 +184,71 @@ flaky==3.7.0 \ --hash=sha256:3ad100780721a1911f57a165809b7ea265a7863305acb66708220820caf8aa0d \ --hash=sha256:d6eda73cab5ae7364504b7c44670f70abed9e75f77dd116352f662817592ec9c # via -r requirements/pytest.pip -greenlet==2.0.1 \ - --hash=sha256:0109af1138afbfb8ae647e31a2b1ab030f58b21dd8528c27beaeb0093b7938a9 \ - --hash=sha256:0459d94f73265744fee4c2d5ec44c6f34aa8a31017e6e9de770f7bcf29710be9 \ - --hash=sha256:04957dc96669be041e0c260964cfef4c77287f07c40452e61abe19d647505581 \ - --hash=sha256:0722c9be0797f544a3ed212569ca3fe3d9d1a1b13942d10dd6f0e8601e484d26 \ - --hash=sha256:097e3dae69321e9100202fc62977f687454cd0ea147d0fd5a766e57450c569fd \ - --hash=sha256:0b493db84d124805865adc587532ebad30efa68f79ad68f11b336e0a51ec86c2 \ - --hash=sha256:13ba6e8e326e2116c954074c994da14954982ba2795aebb881c07ac5d093a58a \ - --hash=sha256:13ebf93c343dd8bd010cd98e617cb4c1c1f352a0cf2524c82d3814154116aa82 \ - --hash=sha256:1407fe45246632d0ffb7a3f4a520ba4e6051fc2cbd61ba1f806900c27f47706a \ - --hash=sha256:1bf633a50cc93ed17e494015897361010fc08700d92676c87931d3ea464123ce \ - --hash=sha256:2d0bac0385d2b43a7bd1d651621a4e0f1380abc63d6fb1012213a401cbd5bf8f \ - --hash=sha256:3001d00eba6bbf084ae60ec7f4bb8ed375748f53aeaefaf2a37d9f0370558524 \ - --hash=sha256:356e4519d4dfa766d50ecc498544b44c0249b6de66426041d7f8b751de4d6b48 \ - --hash=sha256:38255a3f1e8942573b067510f9611fc9e38196077b0c8eb7a8c795e105f9ce77 \ - --hash=sha256:3d75b8d013086b08e801fbbb896f7d5c9e6ccd44f13a9241d2bf7c0df9eda928 \ - --hash=sha256:41b825d65f31e394b523c84db84f9383a2f7eefc13d987f308f4663794d2687e \ - --hash=sha256:42e602564460da0e8ee67cb6d7236363ee5e131aa15943b6670e44e5c2ed0f67 \ - --hash=sha256:4aeaebcd91d9fee9aa768c1b39cb12214b30bf36d2b7370505a9f2165fedd8d9 \ - --hash=sha256:4c8b1c43e75c42a6cafcc71defa9e01ead39ae80bd733a2608b297412beede68 \ - --hash=sha256:4d37990425b4687ade27810e3b1a1c37825d242ebc275066cfee8cb6b8829ccd \ - --hash=sha256:4f09b0010e55bec3239278f642a8a506b91034f03a4fb28289a7d448a67f1515 \ - --hash=sha256:505138d4fa69462447a562a7c2ef723c6025ba12ac04478bc1ce2fcc279a2db5 \ - --hash=sha256:5067920de254f1a2dee8d3d9d7e4e03718e8fd2d2d9db962c8c9fa781ae82a39 \ - --hash=sha256:56961cfca7da2fdd178f95ca407fa330c64f33289e1804b592a77d5593d9bd94 \ - --hash=sha256:5a8e05057fab2a365c81abc696cb753da7549d20266e8511eb6c9d9f72fe3e92 \ - --hash=sha256:659f167f419a4609bc0516fb18ea69ed39dbb25594934bd2dd4d0401660e8a1e \ - --hash=sha256:662e8f7cad915ba75d8017b3e601afc01ef20deeeabf281bd00369de196d7726 \ - --hash=sha256:6f61d71bbc9b4a3de768371b210d906726535d6ca43506737682caa754b956cd \ - --hash=sha256:72b00a8e7c25dcea5946692a2485b1a0c0661ed93ecfedfa9b6687bd89a24ef5 \ - --hash=sha256:811e1d37d60b47cb8126e0a929b58c046251f28117cb16fcd371eed61f66b764 \ - --hash=sha256:81b0ea3715bf6a848d6f7149d25bf018fd24554a4be01fcbbe3fdc78e890b955 \ - --hash=sha256:88c8d517e78acdf7df8a2134a3c4b964415b575d2840a2746ddb1cc6175f8608 \ - --hash=sha256:8dca09dedf1bd8684767bc736cc20c97c29bc0c04c413e3276e0962cd7aeb148 \ - --hash=sha256:974a39bdb8c90a85982cdb78a103a32e0b1be986d411303064b28a80611f6e51 \ - --hash=sha256:9e112e03d37987d7b90c1e98ba5e1b59e1645226d78d73282f45b326f7bddcb9 \ - --hash=sha256:9e9744c657d896c7b580455e739899e492a4a452e2dd4d2b3e459f6b244a638d \ - --hash=sha256:9ed358312e63bf683b9ef22c8e442ef6c5c02973f0c2a939ec1d7b50c974015c \ - --hash=sha256:9f2c221eecb7ead00b8e3ddb913c67f75cba078fd1d326053225a3f59d850d72 \ - --hash=sha256:a20d33124935d27b80e6fdacbd34205732660e0a1d35d8b10b3328179a2b51a1 \ - --hash=sha256:a4c0757db9bd08470ff8277791795e70d0bf035a011a528ee9a5ce9454b6cba2 \ - --hash=sha256:afe07421c969e259e9403c3bb658968702bc3b78ec0b6fde3ae1e73440529c23 \ - --hash=sha256:b1992ba9d4780d9af9726bbcef6a1db12d9ab1ccc35e5773685a24b7fb2758eb \ - --hash=sha256:b23d2a46d53210b498e5b701a1913697671988f4bf8e10f935433f6e7c332fb6 \ - --hash=sha256:b5e83e4de81dcc9425598d9469a624826a0b1211380ac444c7c791d4a2137c19 \ - --hash=sha256:be35822f35f99dcc48152c9839d0171a06186f2d71ef76dc57fa556cc9bf6b45 \ - --hash=sha256:be9e0fb2ada7e5124f5282d6381903183ecc73ea019568d6d63d33f25b2a9000 \ - --hash=sha256:c140e7eb5ce47249668056edf3b7e9900c6a2e22fb0eaf0513f18a1b2c14e1da \ - --hash=sha256:c6a08799e9e88052221adca55741bf106ec7ea0710bca635c208b751f0d5b617 \ - --hash=sha256:cb242fc2cda5a307a7698c93173d3627a2a90d00507bccf5bc228851e8304963 \ - --hash=sha256:cce1e90dd302f45716a7715517c6aa0468af0bf38e814ad4eab58e88fc09f7f7 \ - --hash=sha256:cd4ccc364cf75d1422e66e247e52a93da6a9b73cefa8cad696f3cbbb75af179d \ - --hash=sha256:d21681f09e297a5adaa73060737e3aa1279a13ecdcfcc6ef66c292cb25125b2d \ - --hash=sha256:d38ffd0e81ba8ef347d2be0772e899c289b59ff150ebbbbe05dc61b1246eb4e0 \ - --hash=sha256:d566b82e92ff2e09dd6342df7e0eb4ff6275a3f08db284888dcd98134dbd4243 \ - --hash=sha256:d5b0ff9878333823226d270417f24f4d06f235cb3e54d1103b71ea537a6a86ce \ - --hash=sha256:d6ee1aa7ab36475035eb48c01efae87d37936a8173fc4d7b10bb02c2d75dd8f6 \ - --hash=sha256:db38f80540083ea33bdab614a9d28bcec4b54daa5aff1668d7827a9fc769ae0a \ - --hash=sha256:ea688d11707d30e212e0110a1aac7f7f3f542a259235d396f88be68b649e47d1 \ - --hash=sha256:f6327b6907b4cb72f650a5b7b1be23a2aab395017aa6f1adb13069d66360eb3f \ - --hash=sha256:fb412b7db83fe56847df9c47b6fe3f13911b06339c2aa02dcc09dce8bbf582cd +greenlet==2.0.2 \ + --hash=sha256:03a8f4f3430c3b3ff8d10a2a86028c660355ab637cee9333d63d66b56f09d52a \ + --hash=sha256:0bf60faf0bc2468089bdc5edd10555bab6e85152191df713e2ab1fcc86382b5a \ + --hash=sha256:18a7f18b82b52ee85322d7a7874e676f34ab319b9f8cce5de06067384aa8ff43 \ + --hash=sha256:18e98fb3de7dba1c0a852731c3070cf022d14f0d68b4c87a19cc1016f3bb8b33 \ + --hash=sha256:1a819eef4b0e0b96bb0d98d797bef17dc1b4a10e8d7446be32d1da33e095dbb8 \ + --hash=sha256:26fbfce90728d82bc9e6c38ea4d038cba20b7faf8a0ca53a9c07b67318d46088 \ + --hash=sha256:2780572ec463d44c1d3ae850239508dbeb9fed38e294c68d19a24d925d9223ca \ + --hash=sha256:283737e0da3f08bd637b5ad058507e578dd462db259f7f6e4c5c365ba4ee9343 \ + --hash=sha256:2d4686f195e32d36b4d7cf2d166857dbd0ee9f3d20ae349b6bf8afc8485b3645 \ + --hash=sha256:2dd11f291565a81d71dab10b7033395b7a3a5456e637cf997a6f33ebdf06f8db \ + --hash=sha256:30bcf80dda7f15ac77ba5af2b961bdd9dbc77fd4ac6105cee85b0d0a5fcf74df \ + --hash=sha256:32e5b64b148966d9cccc2c8d35a671409e45f195864560829f395a54226408d3 \ + --hash=sha256:36abbf031e1c0f79dd5d596bfaf8e921c41df2bdf54ee1eed921ce1f52999a86 \ + --hash=sha256:3a06ad5312349fec0ab944664b01d26f8d1f05009566339ac6f63f56589bc1a2 \ + --hash=sha256:3a51c9751078733d88e013587b108f1b7a1fb106d402fb390740f002b6f6551a \ + --hash=sha256:3c9b12575734155d0c09d6c3e10dbd81665d5c18e1a7c6597df72fd05990c8cf \ + --hash=sha256:3f6ea9bd35eb450837a3d80e77b517ea5bc56b4647f5502cd28de13675ee12f7 \ + --hash=sha256:4b58adb399c4d61d912c4c331984d60eb66565175cdf4a34792cd9600f21b394 \ + --hash=sha256:4d2e11331fc0c02b6e84b0d28ece3a36e0548ee1a1ce9ddde03752d9b79bba40 \ + --hash=sha256:5454276c07d27a740c5892f4907c86327b632127dd9abec42ee62e12427ff7e3 \ + --hash=sha256:561091a7be172ab497a3527602d467e2b3fbe75f9e783d8b8ce403fa414f71a6 \ + --hash=sha256:6c3acb79b0bfd4fe733dff8bc62695283b57949ebcca05ae5c129eb606ff2d74 \ + --hash=sha256:703f18f3fda276b9a916f0934d2fb6d989bf0b4fb5a64825260eb9bfd52d78f0 \ + --hash=sha256:7492e2b7bd7c9b9916388d9df23fa49d9b88ac0640db0a5b4ecc2b653bf451e3 \ + --hash=sha256:76ae285c8104046b3a7f06b42f29c7b73f77683df18c49ab5af7983994c2dd91 \ + --hash=sha256:7cafd1208fdbe93b67c7086876f061f660cfddc44f404279c1585bbf3cdc64c5 \ + --hash=sha256:7efde645ca1cc441d6dc4b48c0f7101e8d86b54c8530141b09fd31cef5149ec9 \ + --hash=sha256:88d9ab96491d38a5ab7c56dd7a3cc37d83336ecc564e4e8816dbed12e5aaefc8 \ + --hash=sha256:8eab883b3b2a38cc1e050819ef06a7e6344d4a990d24d45bc6f2cf959045a45b \ + --hash=sha256:910841381caba4f744a44bf81bfd573c94e10b3045ee00de0cbf436fe50673a6 \ + --hash=sha256:9190f09060ea4debddd24665d6804b995a9c122ef5917ab26e1566dcc712ceeb \ + --hash=sha256:937e9020b514ceedb9c830c55d5c9872abc90f4b5862f89c0887033ae33c6f73 \ + --hash=sha256:94c817e84245513926588caf1152e3b559ff794d505555211ca041f032abbb6b \ + --hash=sha256:971ce5e14dc5e73715755d0ca2975ac88cfdaefcaab078a284fea6cfabf866df \ + --hash=sha256:9d14b83fab60d5e8abe587d51c75b252bcc21683f24699ada8fb275d7712f5a9 \ + --hash=sha256:9f35ec95538f50292f6d8f2c9c9f8a3c6540bbfec21c9e5b4b751e0a7c20864f \ + --hash=sha256:a1846f1b999e78e13837c93c778dcfc3365902cfb8d1bdb7dd73ead37059f0d0 \ + --hash=sha256:acd2162a36d3de67ee896c43effcd5ee3de247eb00354db411feb025aa319857 \ + --hash=sha256:b0ef99cdbe2b682b9ccbb964743a6aca37905fda5e0452e5ee239b1654d37f2a \ + --hash=sha256:b80f600eddddce72320dbbc8e3784d16bd3fb7b517e82476d8da921f27d4b249 \ + --hash=sha256:b864ba53912b6c3ab6bcb2beb19f19edd01a6bfcbdfe1f37ddd1778abfe75a30 \ + --hash=sha256:b9ec052b06a0524f0e35bd8790686a1da006bd911dd1ef7d50b77bfbad74e292 \ + --hash=sha256:ba2956617f1c42598a308a84c6cf021a90ff3862eddafd20c3333d50f0edb45b \ + --hash=sha256:bdfea8c661e80d3c1c99ad7c3ff74e6e87184895bbaca6ee8cc61209f8b9b85d \ + --hash=sha256:be4ed120b52ae4d974aa40215fcdfde9194d63541c7ded40ee12eb4dda57b76b \ + --hash=sha256:c4302695ad8027363e96311df24ee28978162cdcdd2006476c43970b384a244c \ + --hash=sha256:c48f54ef8e05f04d6eff74b8233f6063cb1ed960243eacc474ee73a2ea8573ca \ + --hash=sha256:c9c59a2120b55788e800d82dfa99b9e156ff8f2227f07c5e3012a45a399620b7 \ + --hash=sha256:cd021c754b162c0fb55ad5d6b9d960db667faad0fa2ff25bb6e1301b0b6e6a75 \ + --hash=sha256:d27ec7509b9c18b6d73f2f5ede2622441de812e7b1a80bbd446cb0633bd3d5ae \ + --hash=sha256:d5508f0b173e6aa47273bdc0a0b5ba055b59662ba7c7ee5119528f466585526b \ + --hash=sha256:d75209eed723105f9596807495d58d10b3470fa6732dd6756595e89925ce2470 \ + --hash=sha256:db1a39669102a1d8d12b57de2bb7e2ec9066a6f2b3da35ae511ff93b01b5d564 \ + --hash=sha256:dbfcfc0218093a19c252ca8eb9aee3d29cfdcb586df21049b9d777fd32c14fd9 \ + --hash=sha256:e0f72c9ddb8cd28532185f54cc1453f2c16fb417a08b53a855c4e6a418edd099 \ + --hash=sha256:e7c8dc13af7db097bed64a051d2dd49e9f0af495c26995c00a9ee842690d34c0 \ + --hash=sha256:ea9872c80c132f4663822dd2a08d404073a5a9b5ba6155bea72fb2a79d1093b5 \ + --hash=sha256:eff4eb9b7eb3e4d0cae3d28c283dc16d9bed6b193c2e1ace3ed86ce48ea8df19 \ + --hash=sha256:f82d4d717d8ef19188687aa32b8363e96062911e63ba22a0cff7802a8e58e5f1 \ + --hash=sha256:fc3a569657468b6f3fb60587e48356fe512c1754ca05a564f11366ac9e306526 # via -r requirements/dev.in -hypothesis==6.62.1 \ - --hash=sha256:7d1e2f9871e6509662da317adf9b4aabd6b38280fb6c7930aa4f574d2ed25150 \ - --hash=sha256:d00a4a9c54b0b8b4570fe1abe42395807a973b4a507e6718309800e6f84e160d +hypothesis==6.68.0 \ + --hash=sha256:064a5bf7a98cbdfa3589d8934a2c548524c6d108bfa368ec5ed8b09caa526108 \ + --hash=sha256:8cfa1de15271debb2750545a460e58e3e84527d94157f38ab9309826953572f3 # via -r requirements/pytest.pip idna==3.4 \ --hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 \ @@ -281,9 +277,9 @@ iniconfig==2.0.0 \ # via # -r requirements/pytest.pip # pytest -isort==5.11.4 \ - --hash=sha256:6db30c5ded9815d813932c04c2f85a360bcdd35fed496f4d8f35495ef0a261b6 \ - --hash=sha256:c033fd0edb91000a7f09527fe5c75321878f98322a77ddcc81adbd83724afb7b +isort==5.11.5 \ + --hash=sha256:6be1f76a507cb2ecf16c7cf14a37e41609ca082330be4e3436a18ef74add55db \ + --hash=sha256:ba1d72fb2595a01c7895a5128f9585a5cc4b6d395f1c8d514989b9a7eb2a8746 # via pylint jaraco-classes==3.2.3 \ --hash=sha256:2353de3288bc6b82120752201c6b1c1a14b058267fa424ed5ce5984e3b922158 \ @@ -342,10 +338,18 @@ libsass==0.22.0 \ --hash=sha256:89c5ce497fcf3aba1dd1b19aae93b99f68257e5f2026b731b00a872f13324c7f \ --hash=sha256:f1efc1b612299c88aec9e39d6ca0c266d360daa5b19d9430bdeaffffa86993f9 # via -r requirements/dev.in +markdown-it-py==2.1.0 \ + --hash=sha256:93de681e5c021a432c63147656fe21790bc01231e0cd2da73626f1aa3ac0fe27 \ + --hash=sha256:cf7e59fed14b5ae17c0006eff14a2d9a00ed5f3a846148153899a0224e2c07da + # via rich mccabe==0.7.0 \ --hash=sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325 \ --hash=sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e # via pylint +mdurl==0.1.2 \ + --hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \ + --hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba + # via markdown-it-py more-itertools==9.0.0 \ --hash=sha256:250e83d7e81d0c87ca6bd942e6aeab8cc9daa6096d12c5308f3f92fa5e5c1f41 \ --hash=sha256:5a6257e40878ef0520b1803990e3e22303a41b5714006c32a3fd8304b26ea1ab @@ -365,17 +369,17 @@ parso==0.8.3 \ --hash=sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0 \ --hash=sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75 # via jedi -pip==22.3.1 \ - --hash=sha256:65fd48317359f3af8e593943e6ae1506b66325085ea64b706a998c6e83eeaf38 \ - --hash=sha256:908c78e6bc29b676ede1c4d57981d490cb892eb45cd8c214ab6298125119e077 +pip==23.0 \ + --hash=sha256:aee438284e82c8def684b0bcc50b1f6ed5e941af97fa940e83e2e8ef1a59da9b \ + --hash=sha256:b5f88adff801f5ef052bcdef3daa31b55eb67b0fccd6d0106c206fa248e0463c # via -r requirements/pip.pip pkginfo==1.9.6 \ --hash=sha256:4b7a555a6d5a22169fcc9cf7bfd78d296b0361adad412a346c1226849af5e546 \ --hash=sha256:8fd5896e8718a4372f0ea9cc9d96f6417c9b986e23a4d116dda26b62cc29d046 # via twine -platformdirs==2.6.2 \ - --hash=sha256:83c8f6d04389165de7c9b6f0c682439697887bca0aa2f1c87ef1826be3584490 \ - --hash=sha256:e1fea1fe471b9ff8332e229df3cb7de4f53eeea4998d3b6bfff542115e998bd2 +platformdirs==3.0.0 \ + --hash=sha256:8a1228abb1ef82d788f74139988b137e78692984ec7b08eaa6c65f1723af28f9 \ + --hash=sha256:b1d5eb14f221506f50d6604a561f4c5786d9e80355219694a1b244bcd96f4567 # via # -r requirements/pip.pip # -r requirements/tox.pip @@ -400,13 +404,13 @@ pygments==2.14.0 \ # pudb # readme-renderer # rich -pylint==2.15.10 \ - --hash=sha256:9df0d07e8948a1c3ffa3b6e2d7e6e63d9fb457c5da5b961ed63106594780cc7e \ - --hash=sha256:b3dc5ef7d33858f297ac0d06cc73862f01e4f2e74025ec3eff347ce0bc60baf5 +pylint==2.16.1 \ + --hash=sha256:bad9d7c36037f6043a1e848a43004dfd5ea5ceb05815d713ba56ca4503a9fe37 \ + --hash=sha256:ffe7fa536bb38ba35006a7c8a6d2efbfdd3d95bbf21199cad31f76b1c50aaf30 # via -r requirements/dev.in -pyproject-api==1.4.0 \ - --hash=sha256:ac85c1f82e0291dbae5a7739dbb9a990e11ee4034c9b5599ea714f07a24ecd71 \ - --hash=sha256:c34226297781efdd1ba4dfb74ce21076d9a8360e2125ea31803c1a02c76b2460 +pyproject-api==1.5.0 \ + --hash=sha256:0962df21f3e633b8ddb9567c011e6c1b3dcdfc31b7860c0ede7e24c5a1200fbe \ + --hash=sha256:4c111277dfb96bcd562c6245428f27250b794bfe3e210b8714c4f893952f2c17 # via # -r requirements/tox.pip # tox @@ -420,9 +424,9 @@ pytest==7.2.1 \ # via # -r requirements/pytest.pip # pytest-xdist -pytest-xdist==3.1.0 \ - --hash=sha256:40fdb8f3544921c5dfcd486ac080ce22870e71d82ced6d2e78fa97c2addd480c \ - --hash=sha256:70a76f191d8a1d2d6be69fc440cdf85f3e4c03c08b520fd5dc5d338d6cf07d89 +pytest-xdist==3.2.0 \ + --hash=sha256:336098e3bbd8193276867cc87db8b22903c3927665dff9d1ac8684c02f597b68 \ + --hash=sha256:fa10f95a2564cd91652f2d132725183c3b590d9fdcdec09d3677386ecf4c1ce9 # via -r requirements/pytest.pip readme-renderer==37.3 \ --hash=sha256:cd653186dfc73055656f090f227f5cb22a046d7f71a841dfa305f55c9a513273 \ @@ -445,13 +449,13 @@ rfc3986==2.0.0 \ --hash=sha256:50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd \ --hash=sha256:97aacf9dbd4bfd829baad6e6309fa6573aaf1be3f6fa735c8ab05e46cecb261c # via twine -rich==13.1.0 \ - --hash=sha256:81c73a30b144bbcdedc13f4ea0b6ffd7fdc3b0d3cc259a9402309c8e4aee1964 \ - --hash=sha256:f846bff22a43e8508aebf3f0f2410ce1c6f4cde429098bd58d91fde038c57299 +rich==13.3.1 \ + --hash=sha256:125d96d20c92b946b983d0d392b84ff945461e5a06d3867e9f9e575f8697b67f \ + --hash=sha256:8aa57747f3fc3e977684f0176a88e789be314a99f99b43b75d1e9cb5dc6db9e9 # via twine -setuptools==66.0.0 \ - --hash=sha256:a78d01d1e2c175c474884671dde039962c9d74c7223db7369771fcf6e29ceeab \ - --hash=sha256:bd6eb2d6722568de6d14b87c44a96fac54b2a45ff5e940e639979a3d1792adb6 +setuptools==67.2.0 \ + --hash=sha256:16ccf598aab3b506593c17378473978908a2734d7336755a8769b480906bec1c \ + --hash=sha256:b440ee5f7e607bb8c9de15259dba2583dd41a38879a7abc1d43a71c59524da48 # via check-manifest six==1.16.0 \ --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ @@ -480,9 +484,9 @@ tomlkit==0.11.6 \ --hash=sha256:07de26b0d8cfc18f871aec595fda24d95b08fef89d147caa861939f37230bf4b \ --hash=sha256:71b952e5721688937fb02cf9d354dbcf0785066149d2855e44531ebdd2b65d73 # via pylint -tox==4.3.4 \ - --hash=sha256:84ee61b27dc983cb5b5d9ef93af10ce54a0e3992df73335fcdf3e8a3d3453a93 \ - --hash=sha256:f5ac33b55de2f8764cff260661eb1257107a21c4819714b04f14669991aa7772 +tox==4.4.5 \ + --hash=sha256:1081864f1a1393ffa11ebe9beaa280349020579310d217a594a4e7b6124c5425 \ + --hash=sha256:f9bc83c5da8666baa2a4d4e884bbbda124fe646e4b1c0e412949cecc2b6e8f90 # via # -r requirements/tox.pip # tox-gh @@ -528,6 +532,7 @@ typing-extensions==4.4.0 \ # -r requirements/pytest.pip # astroid # importlib-metadata + # markdown-it-py # platformdirs # pylint # rich @@ -546,9 +551,9 @@ urwid==2.1.2 \ urwid-readline==0.13 \ --hash=sha256:018020cbc864bb5ed87be17dc26b069eae2755cb29f3a9c569aac3bded1efaf4 # via pudb -virtualenv==20.17.1 \ - --hash=sha256:ce3b1684d6e1a20a3e5ed36795a97dfc6af29bc3970ca8dab93e11ac6094b3c4 \ - --hash=sha256:f8b927684efc6f1cc206c9db297a570ab9ad0e51c16fa9e45487d36d1905c058 +virtualenv==20.19.0 \ + --hash=sha256:37a640ba82ed40b226599c522d411e4be5edb339a0c0de030c0dc7b646d61590 \ + --hash=sha256:54eb59e7352b573aa04d53f80fc9736ed0ad5143af445a1e539aada6eb947dd1 # via # -r requirements/pip.pip # -r requirements/tox.pip @@ -623,9 +628,9 @@ wrapt==1.14.1 \ --hash=sha256:ee6acae74a2b91865910eef5e7de37dc6895ad96fa23603d1d27ea69df545015 \ --hash=sha256:ef3f72c9666bba2bab70d2a8b79f2c6d2c1a42a7f7e2b0ec83bb2f9e383950af # via astroid -zipp==3.11.0 \ - --hash=sha256:83a28fcb75844b5c0cdaf5aa4003c2d728c77e05f5aeabe8e95e56727005fbaa \ - --hash=sha256:a7a22e05929290a67401440b39690ae6563279bced5f314609d9d03798f56766 +zipp==3.12.1 \ + --hash=sha256:6c4fe274b8f85ec73c37a8e4e3fa00df9fb9335da96fb789e3b96b318e5097b3 \ + --hash=sha256:a3cac813d40993596b39ea9e93a18e8a2076d5c378b8bc88ec32ab264e04ad02 # via # -r requirements/pip.pip # -r requirements/pytest.pip diff --git a/requirements/kit.pip b/requirements/kit.pip index ae6f4c393..f19412bc7 100644 --- a/requirements/kit.pip +++ b/requirements/kit.pip @@ -8,9 +8,9 @@ auditwheel==5.3.0 \ --hash=sha256:1da1af54de5badd10149250c257a799be003fd976794716f17914e3d4b4a9fc9 \ --hash=sha256:d0be87b5b6fb767eacf1ea4afa3292574cb0f4473a3c0ba55bc9dff1d0b5a333 # via -r requirements/kit.in -bashlex==0.17 \ - --hash=sha256:0ad04403637f64f7836da46c125f9023a2518be418595322309f20ddc1db6cc0 \ - --hash=sha256:2aed062438e10ee89742bc80969793cd9ee4a3fab6cfb2365e43731aabd21010 +bashlex==0.18 \ + --hash=sha256:5bb03a01c6d5676338c36fd1028009c8ad07e7d61d8a1ce3f513b7fff52796ee \ + --hash=sha256:91d73a23a3e51711919c1c899083890cdecffc91d8c088942725ac13e9dcfffa # via cibuildwheel bracex==2.3.post1 \ --hash=sha256:351b7f20d56fb9ea91f9b9e9e7664db466eb234188c175fd943f8f755c807e73 \ @@ -48,9 +48,9 @@ packaging==23.0 \ # via # build # cibuildwheel -platformdirs==2.6.2 \ - --hash=sha256:83c8f6d04389165de7c9b6f0c682439697887bca0aa2f1c87ef1826be3584490 \ - --hash=sha256:e1fea1fe471b9ff8332e229df3cb7de4f53eeea4998d3b6bfff542115e998bd2 +platformdirs==3.0.0 \ + --hash=sha256:8a1228abb1ef82d788f74139988b137e78692984ec7b08eaa6c65f1723af28f9 \ + --hash=sha256:b1d5eb14f221506f50d6604a561f4c5786d9e80355219694a1b244bcd96f4567 # via cibuildwheel pyelftools==0.29 \ --hash=sha256:519f38cf412f073b2d7393aa4682b0190fa901f7c3fa0bff2b82d537690c7fc1 \ @@ -60,9 +60,9 @@ pyproject-hooks==1.0.0 \ --hash=sha256:283c11acd6b928d2f6a7c73fa0d01cb2bdc5f07c57a2eeb6e83d5e56b97976f8 \ --hash=sha256:f271b298b97f5955d53fb12b72c1fb1948c22c1a6b70b315c54cedaca0264ef5 # via build -setuptools==66.0.0 \ - --hash=sha256:a78d01d1e2c175c474884671dde039962c9d74c7223db7369771fcf6e29ceeab \ - --hash=sha256:bd6eb2d6722568de6d14b87c44a96fac54b2a45ff5e940e639979a3d1792adb6 +setuptools==67.2.0 \ + --hash=sha256:16ccf598aab3b506593c17378473978908a2734d7336755a8769b480906bec1c \ + --hash=sha256:b440ee5f7e607bb8c9de15259dba2583dd41a38879a7abc1d43a71c59524da48 # via -r requirements/kit.in tomli==2.0.1 \ --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ @@ -82,7 +82,7 @@ wheel==0.38.4 \ --hash=sha256:965f5259b566725405b05e7cf774052044b1ed30119b5d586b2703aafe8719ac \ --hash=sha256:b60533f3f5d530e971d6737ca6d58681ee434818fab630c83a734bb10c083ce8 # via -r requirements/kit.in -zipp==3.11.0 \ - --hash=sha256:83a28fcb75844b5c0cdaf5aa4003c2d728c77e05f5aeabe8e95e56727005fbaa \ - --hash=sha256:a7a22e05929290a67401440b39690ae6563279bced5f314609d9d03798f56766 +zipp==3.12.1 \ + --hash=sha256:6c4fe274b8f85ec73c37a8e4e3fa00df9fb9335da96fb789e3b96b318e5097b3 \ + --hash=sha256:a3cac813d40993596b39ea9e93a18e8a2076d5c378b8bc88ec32ab264e04ad02 # via importlib-metadata diff --git a/requirements/light-threads.pip b/requirements/light-threads.pip index 65e0b7db5..6beecd327 100644 --- a/requirements/light-threads.pip +++ b/requirements/light-threads.pip @@ -132,67 +132,67 @@ gevent==22.10.2 \ --hash=sha256:f3329bedbba4d3146ae58c667e0f9ac1e6f1e1e6340c7593976cdc60aa7d1a47 \ --hash=sha256:f7ed2346eb9dc4344f9cb0d7963ce5b74fe16fdd031a2809bb6c2b6eba7ebcd5 # via -r requirements/light-threads.in -greenlet==2.0.1 \ - --hash=sha256:0109af1138afbfb8ae647e31a2b1ab030f58b21dd8528c27beaeb0093b7938a9 \ - --hash=sha256:0459d94f73265744fee4c2d5ec44c6f34aa8a31017e6e9de770f7bcf29710be9 \ - --hash=sha256:04957dc96669be041e0c260964cfef4c77287f07c40452e61abe19d647505581 \ - --hash=sha256:0722c9be0797f544a3ed212569ca3fe3d9d1a1b13942d10dd6f0e8601e484d26 \ - --hash=sha256:097e3dae69321e9100202fc62977f687454cd0ea147d0fd5a766e57450c569fd \ - --hash=sha256:0b493db84d124805865adc587532ebad30efa68f79ad68f11b336e0a51ec86c2 \ - --hash=sha256:13ba6e8e326e2116c954074c994da14954982ba2795aebb881c07ac5d093a58a \ - --hash=sha256:13ebf93c343dd8bd010cd98e617cb4c1c1f352a0cf2524c82d3814154116aa82 \ - --hash=sha256:1407fe45246632d0ffb7a3f4a520ba4e6051fc2cbd61ba1f806900c27f47706a \ - --hash=sha256:1bf633a50cc93ed17e494015897361010fc08700d92676c87931d3ea464123ce \ - --hash=sha256:2d0bac0385d2b43a7bd1d651621a4e0f1380abc63d6fb1012213a401cbd5bf8f \ - --hash=sha256:3001d00eba6bbf084ae60ec7f4bb8ed375748f53aeaefaf2a37d9f0370558524 \ - --hash=sha256:356e4519d4dfa766d50ecc498544b44c0249b6de66426041d7f8b751de4d6b48 \ - --hash=sha256:38255a3f1e8942573b067510f9611fc9e38196077b0c8eb7a8c795e105f9ce77 \ - --hash=sha256:3d75b8d013086b08e801fbbb896f7d5c9e6ccd44f13a9241d2bf7c0df9eda928 \ - --hash=sha256:41b825d65f31e394b523c84db84f9383a2f7eefc13d987f308f4663794d2687e \ - --hash=sha256:42e602564460da0e8ee67cb6d7236363ee5e131aa15943b6670e44e5c2ed0f67 \ - --hash=sha256:4aeaebcd91d9fee9aa768c1b39cb12214b30bf36d2b7370505a9f2165fedd8d9 \ - --hash=sha256:4c8b1c43e75c42a6cafcc71defa9e01ead39ae80bd733a2608b297412beede68 \ - --hash=sha256:4d37990425b4687ade27810e3b1a1c37825d242ebc275066cfee8cb6b8829ccd \ - --hash=sha256:4f09b0010e55bec3239278f642a8a506b91034f03a4fb28289a7d448a67f1515 \ - --hash=sha256:505138d4fa69462447a562a7c2ef723c6025ba12ac04478bc1ce2fcc279a2db5 \ - --hash=sha256:5067920de254f1a2dee8d3d9d7e4e03718e8fd2d2d9db962c8c9fa781ae82a39 \ - --hash=sha256:56961cfca7da2fdd178f95ca407fa330c64f33289e1804b592a77d5593d9bd94 \ - --hash=sha256:5a8e05057fab2a365c81abc696cb753da7549d20266e8511eb6c9d9f72fe3e92 \ - --hash=sha256:659f167f419a4609bc0516fb18ea69ed39dbb25594934bd2dd4d0401660e8a1e \ - --hash=sha256:662e8f7cad915ba75d8017b3e601afc01ef20deeeabf281bd00369de196d7726 \ - --hash=sha256:6f61d71bbc9b4a3de768371b210d906726535d6ca43506737682caa754b956cd \ - --hash=sha256:72b00a8e7c25dcea5946692a2485b1a0c0661ed93ecfedfa9b6687bd89a24ef5 \ - --hash=sha256:811e1d37d60b47cb8126e0a929b58c046251f28117cb16fcd371eed61f66b764 \ - --hash=sha256:81b0ea3715bf6a848d6f7149d25bf018fd24554a4be01fcbbe3fdc78e890b955 \ - --hash=sha256:88c8d517e78acdf7df8a2134a3c4b964415b575d2840a2746ddb1cc6175f8608 \ - --hash=sha256:8dca09dedf1bd8684767bc736cc20c97c29bc0c04c413e3276e0962cd7aeb148 \ - --hash=sha256:974a39bdb8c90a85982cdb78a103a32e0b1be986d411303064b28a80611f6e51 \ - --hash=sha256:9e112e03d37987d7b90c1e98ba5e1b59e1645226d78d73282f45b326f7bddcb9 \ - --hash=sha256:9e9744c657d896c7b580455e739899e492a4a452e2dd4d2b3e459f6b244a638d \ - --hash=sha256:9ed358312e63bf683b9ef22c8e442ef6c5c02973f0c2a939ec1d7b50c974015c \ - --hash=sha256:9f2c221eecb7ead00b8e3ddb913c67f75cba078fd1d326053225a3f59d850d72 \ - --hash=sha256:a20d33124935d27b80e6fdacbd34205732660e0a1d35d8b10b3328179a2b51a1 \ - --hash=sha256:a4c0757db9bd08470ff8277791795e70d0bf035a011a528ee9a5ce9454b6cba2 \ - --hash=sha256:afe07421c969e259e9403c3bb658968702bc3b78ec0b6fde3ae1e73440529c23 \ - --hash=sha256:b1992ba9d4780d9af9726bbcef6a1db12d9ab1ccc35e5773685a24b7fb2758eb \ - --hash=sha256:b23d2a46d53210b498e5b701a1913697671988f4bf8e10f935433f6e7c332fb6 \ - --hash=sha256:b5e83e4de81dcc9425598d9469a624826a0b1211380ac444c7c791d4a2137c19 \ - --hash=sha256:be35822f35f99dcc48152c9839d0171a06186f2d71ef76dc57fa556cc9bf6b45 \ - --hash=sha256:be9e0fb2ada7e5124f5282d6381903183ecc73ea019568d6d63d33f25b2a9000 \ - --hash=sha256:c140e7eb5ce47249668056edf3b7e9900c6a2e22fb0eaf0513f18a1b2c14e1da \ - --hash=sha256:c6a08799e9e88052221adca55741bf106ec7ea0710bca635c208b751f0d5b617 \ - --hash=sha256:cb242fc2cda5a307a7698c93173d3627a2a90d00507bccf5bc228851e8304963 \ - --hash=sha256:cce1e90dd302f45716a7715517c6aa0468af0bf38e814ad4eab58e88fc09f7f7 \ - --hash=sha256:cd4ccc364cf75d1422e66e247e52a93da6a9b73cefa8cad696f3cbbb75af179d \ - --hash=sha256:d21681f09e297a5adaa73060737e3aa1279a13ecdcfcc6ef66c292cb25125b2d \ - --hash=sha256:d38ffd0e81ba8ef347d2be0772e899c289b59ff150ebbbbe05dc61b1246eb4e0 \ - --hash=sha256:d566b82e92ff2e09dd6342df7e0eb4ff6275a3f08db284888dcd98134dbd4243 \ - --hash=sha256:d5b0ff9878333823226d270417f24f4d06f235cb3e54d1103b71ea537a6a86ce \ - --hash=sha256:d6ee1aa7ab36475035eb48c01efae87d37936a8173fc4d7b10bb02c2d75dd8f6 \ - --hash=sha256:db38f80540083ea33bdab614a9d28bcec4b54daa5aff1668d7827a9fc769ae0a \ - --hash=sha256:ea688d11707d30e212e0110a1aac7f7f3f542a259235d396f88be68b649e47d1 \ - --hash=sha256:f6327b6907b4cb72f650a5b7b1be23a2aab395017aa6f1adb13069d66360eb3f \ - --hash=sha256:fb412b7db83fe56847df9c47b6fe3f13911b06339c2aa02dcc09dce8bbf582cd +greenlet==2.0.2 \ + --hash=sha256:03a8f4f3430c3b3ff8d10a2a86028c660355ab637cee9333d63d66b56f09d52a \ + --hash=sha256:0bf60faf0bc2468089bdc5edd10555bab6e85152191df713e2ab1fcc86382b5a \ + --hash=sha256:18a7f18b82b52ee85322d7a7874e676f34ab319b9f8cce5de06067384aa8ff43 \ + --hash=sha256:18e98fb3de7dba1c0a852731c3070cf022d14f0d68b4c87a19cc1016f3bb8b33 \ + --hash=sha256:1a819eef4b0e0b96bb0d98d797bef17dc1b4a10e8d7446be32d1da33e095dbb8 \ + --hash=sha256:26fbfce90728d82bc9e6c38ea4d038cba20b7faf8a0ca53a9c07b67318d46088 \ + --hash=sha256:2780572ec463d44c1d3ae850239508dbeb9fed38e294c68d19a24d925d9223ca \ + --hash=sha256:283737e0da3f08bd637b5ad058507e578dd462db259f7f6e4c5c365ba4ee9343 \ + --hash=sha256:2d4686f195e32d36b4d7cf2d166857dbd0ee9f3d20ae349b6bf8afc8485b3645 \ + --hash=sha256:2dd11f291565a81d71dab10b7033395b7a3a5456e637cf997a6f33ebdf06f8db \ + --hash=sha256:30bcf80dda7f15ac77ba5af2b961bdd9dbc77fd4ac6105cee85b0d0a5fcf74df \ + --hash=sha256:32e5b64b148966d9cccc2c8d35a671409e45f195864560829f395a54226408d3 \ + --hash=sha256:36abbf031e1c0f79dd5d596bfaf8e921c41df2bdf54ee1eed921ce1f52999a86 \ + --hash=sha256:3a06ad5312349fec0ab944664b01d26f8d1f05009566339ac6f63f56589bc1a2 \ + --hash=sha256:3a51c9751078733d88e013587b108f1b7a1fb106d402fb390740f002b6f6551a \ + --hash=sha256:3c9b12575734155d0c09d6c3e10dbd81665d5c18e1a7c6597df72fd05990c8cf \ + --hash=sha256:3f6ea9bd35eb450837a3d80e77b517ea5bc56b4647f5502cd28de13675ee12f7 \ + --hash=sha256:4b58adb399c4d61d912c4c331984d60eb66565175cdf4a34792cd9600f21b394 \ + --hash=sha256:4d2e11331fc0c02b6e84b0d28ece3a36e0548ee1a1ce9ddde03752d9b79bba40 \ + --hash=sha256:5454276c07d27a740c5892f4907c86327b632127dd9abec42ee62e12427ff7e3 \ + --hash=sha256:561091a7be172ab497a3527602d467e2b3fbe75f9e783d8b8ce403fa414f71a6 \ + --hash=sha256:6c3acb79b0bfd4fe733dff8bc62695283b57949ebcca05ae5c129eb606ff2d74 \ + --hash=sha256:703f18f3fda276b9a916f0934d2fb6d989bf0b4fb5a64825260eb9bfd52d78f0 \ + --hash=sha256:7492e2b7bd7c9b9916388d9df23fa49d9b88ac0640db0a5b4ecc2b653bf451e3 \ + --hash=sha256:76ae285c8104046b3a7f06b42f29c7b73f77683df18c49ab5af7983994c2dd91 \ + --hash=sha256:7cafd1208fdbe93b67c7086876f061f660cfddc44f404279c1585bbf3cdc64c5 \ + --hash=sha256:7efde645ca1cc441d6dc4b48c0f7101e8d86b54c8530141b09fd31cef5149ec9 \ + --hash=sha256:88d9ab96491d38a5ab7c56dd7a3cc37d83336ecc564e4e8816dbed12e5aaefc8 \ + --hash=sha256:8eab883b3b2a38cc1e050819ef06a7e6344d4a990d24d45bc6f2cf959045a45b \ + --hash=sha256:910841381caba4f744a44bf81bfd573c94e10b3045ee00de0cbf436fe50673a6 \ + --hash=sha256:9190f09060ea4debddd24665d6804b995a9c122ef5917ab26e1566dcc712ceeb \ + --hash=sha256:937e9020b514ceedb9c830c55d5c9872abc90f4b5862f89c0887033ae33c6f73 \ + --hash=sha256:94c817e84245513926588caf1152e3b559ff794d505555211ca041f032abbb6b \ + --hash=sha256:971ce5e14dc5e73715755d0ca2975ac88cfdaefcaab078a284fea6cfabf866df \ + --hash=sha256:9d14b83fab60d5e8abe587d51c75b252bcc21683f24699ada8fb275d7712f5a9 \ + --hash=sha256:9f35ec95538f50292f6d8f2c9c9f8a3c6540bbfec21c9e5b4b751e0a7c20864f \ + --hash=sha256:a1846f1b999e78e13837c93c778dcfc3365902cfb8d1bdb7dd73ead37059f0d0 \ + --hash=sha256:acd2162a36d3de67ee896c43effcd5ee3de247eb00354db411feb025aa319857 \ + --hash=sha256:b0ef99cdbe2b682b9ccbb964743a6aca37905fda5e0452e5ee239b1654d37f2a \ + --hash=sha256:b80f600eddddce72320dbbc8e3784d16bd3fb7b517e82476d8da921f27d4b249 \ + --hash=sha256:b864ba53912b6c3ab6bcb2beb19f19edd01a6bfcbdfe1f37ddd1778abfe75a30 \ + --hash=sha256:b9ec052b06a0524f0e35bd8790686a1da006bd911dd1ef7d50b77bfbad74e292 \ + --hash=sha256:ba2956617f1c42598a308a84c6cf021a90ff3862eddafd20c3333d50f0edb45b \ + --hash=sha256:bdfea8c661e80d3c1c99ad7c3ff74e6e87184895bbaca6ee8cc61209f8b9b85d \ + --hash=sha256:be4ed120b52ae4d974aa40215fcdfde9194d63541c7ded40ee12eb4dda57b76b \ + --hash=sha256:c4302695ad8027363e96311df24ee28978162cdcdd2006476c43970b384a244c \ + --hash=sha256:c48f54ef8e05f04d6eff74b8233f6063cb1ed960243eacc474ee73a2ea8573ca \ + --hash=sha256:c9c59a2120b55788e800d82dfa99b9e156ff8f2227f07c5e3012a45a399620b7 \ + --hash=sha256:cd021c754b162c0fb55ad5d6b9d960db667faad0fa2ff25bb6e1301b0b6e6a75 \ + --hash=sha256:d27ec7509b9c18b6d73f2f5ede2622441de812e7b1a80bbd446cb0633bd3d5ae \ + --hash=sha256:d5508f0b173e6aa47273bdc0a0b5ba055b59662ba7c7ee5119528f466585526b \ + --hash=sha256:d75209eed723105f9596807495d58d10b3470fa6732dd6756595e89925ce2470 \ + --hash=sha256:db1a39669102a1d8d12b57de2bb7e2ec9066a6f2b3da35ae511ff93b01b5d564 \ + --hash=sha256:dbfcfc0218093a19c252ca8eb9aee3d29cfdcb586df21049b9d777fd32c14fd9 \ + --hash=sha256:e0f72c9ddb8cd28532185f54cc1453f2c16fb417a08b53a855c4e6a418edd099 \ + --hash=sha256:e7c8dc13af7db097bed64a051d2dd49e9f0af495c26995c00a9ee842690d34c0 \ + --hash=sha256:ea9872c80c132f4663822dd2a08d404073a5a9b5ba6155bea72fb2a79d1093b5 \ + --hash=sha256:eff4eb9b7eb3e4d0cae3d28c283dc16d9bed6b193c2e1ace3ed86ce48ea8df19 \ + --hash=sha256:f82d4d717d8ef19188687aa32b8363e96062911e63ba22a0cff7802a8e58e5f1 \ + --hash=sha256:fc3a569657468b6f3fb60587e48356fe512c1754ca05a564f11366ac9e306526 # via # -r requirements/light-threads.in # eventlet @@ -201,9 +201,9 @@ pycparser==2.21 \ --hash=sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9 \ --hash=sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206 # via cffi -setuptools==66.0.0 \ - --hash=sha256:a78d01d1e2c175c474884671dde039962c9d74c7223db7369771fcf6e29ceeab \ - --hash=sha256:bd6eb2d6722568de6d14b87c44a96fac54b2a45ff5e940e639979a3d1792adb6 +setuptools==67.2.0 \ + --hash=sha256:16ccf598aab3b506593c17378473978908a2734d7336755a8769b480906bec1c \ + --hash=sha256:b440ee5f7e607bb8c9de15259dba2583dd41a38879a7abc1d43a71c59524da48 # via # gevent # zope-event diff --git a/requirements/lint.pip b/requirements/lint.pip index 5493a9f68..3f4e8ff8f 100644 --- a/requirements/lint.pip +++ b/requirements/lint.pip @@ -8,9 +8,9 @@ alabaster==0.7.13 \ --hash=sha256:1ee19aca801bbabb5ba3f5f258e4422dfa86f82f3e9cefb0859b283cdd7f62a3 \ --hash=sha256:a27a4a084d5e690e16e01e03ad2b2e552c61a65469419b907243193de1a84ae2 # via sphinx -astroid==2.13.2 \ - --hash=sha256:3bc7834720e1a24ca797fd785d77efb14f7a28ee8e635ef040b6e2d80ccb3303 \ - --hash=sha256:8f6a8d40c4ad161d6fc419545ae4b2f275ed86d1c989c97825772120842ee0d2 +astroid==2.14.1 \ + --hash=sha256:23c718921acab5f08cbbbe9293967f1f8fec40c336d19cd75dc12a9ea31d2eb2 \ + --hash=sha256:bd1aa4f9915c98e8aaebcd4e71930154d4e8c9aaf05d35ac0a63d1956091ae3f # via pylint attrs==22.2.0 \ --hash=sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836 \ @@ -24,17 +24,17 @@ babel==2.11.0 \ --hash=sha256:1ad3eca1c885218f6dce2ab67291178944f810a10a9b5f3cb8382a5a232b64fe \ --hash=sha256:5ef4b3226b0180dedded4229651c8b0e1a3a6a2837d45a073272f313e4cf97f6 # via sphinx -bleach==5.0.1 \ - --hash=sha256:085f7f33c15bd408dd9b17a4ad77c577db66d76203e5984b1bd59baeee948b2a \ - --hash=sha256:0d03255c47eb9bd2f26aa9bb7f2107732e7e8fe195ca2f64709fcf3b0a4a085c +bleach==6.0.0 \ + --hash=sha256:1a1a85c1595e07d8db14c5f09f09e6433502c51c595970edc090551f0db99414 \ + --hash=sha256:33c16e3353dbd13028ab4799a0f89a83f113405c766e9c122df8a06f5b85b3f4 # via readme-renderer build==0.10.0 \ --hash=sha256:af266720050a66c893a6096a2f410989eeac74ff9a68ba194b3f6473e8e26171 \ --hash=sha256:d5b71264afdb5951d6704482aac78de887c80691c52b88a9ad195983ca2c9269 # via check-manifest -cachetools==5.2.1 \ - --hash=sha256:5991bc0e08a1319bb618d3195ca5b6bc76646a49c21d55962977197b301cc1fe \ - --hash=sha256:8462eebf3a6c15d25430a8c27c56ac61340b2ecf60c9ce57afc2b97e450e47da +cachetools==5.3.0 \ + --hash=sha256:13dfddc7b8df938c21a940dfa6557ce6e94a2f1cdfa58eb90c805721d58f2c14 \ + --hash=sha256:429e1a1e845c008ea6c85aa35d4b98b65d6a9763eeef3e37e92728a12d1de9d4 # via # -r requirements/tox.pip # tox @@ -166,10 +166,6 @@ colorama==0.4.6 \ # -r requirements/tox.pip # sphinx-autobuild # tox -commonmark==0.9.1 \ - --hash=sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60 \ - --hash=sha256:da2f38c92590f83de410ba1a3cbceafbc74fee9def35f9251ba9a971d6d66fd9 - # via rich dill==0.3.6 \ --hash=sha256:a07ffd2351b8c678dfc4a856a3005f8067aea51d6ba6c700796a4d9e280f39f0 \ --hash=sha256:e5db55f3687856d8fbdab002ed78544e1c4559a130302693d839dfe8f93f2373 @@ -181,9 +177,9 @@ distlib==0.3.6 \ # -r requirements/pip.pip # -r requirements/tox.pip # virtualenv -docutils==0.17.1 \ - --hash=sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125 \ - --hash=sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61 +docutils==0.18.1 \ + --hash=sha256:23010f129180089fbcd3bc08cfefccb3b890b0050e1ca00c867036e9d161b98c \ + --hash=sha256:679987caf361a7539d76e584cbeddc311e3aee937877c87346f31debc63e9d06 # via # readme-renderer # sphinx @@ -213,71 +209,71 @@ flaky==3.7.0 \ --hash=sha256:3ad100780721a1911f57a165809b7ea265a7863305acb66708220820caf8aa0d \ --hash=sha256:d6eda73cab5ae7364504b7c44670f70abed9e75f77dd116352f662817592ec9c # via -r requirements/pytest.pip -greenlet==2.0.1 \ - --hash=sha256:0109af1138afbfb8ae647e31a2b1ab030f58b21dd8528c27beaeb0093b7938a9 \ - --hash=sha256:0459d94f73265744fee4c2d5ec44c6f34aa8a31017e6e9de770f7bcf29710be9 \ - --hash=sha256:04957dc96669be041e0c260964cfef4c77287f07c40452e61abe19d647505581 \ - --hash=sha256:0722c9be0797f544a3ed212569ca3fe3d9d1a1b13942d10dd6f0e8601e484d26 \ - --hash=sha256:097e3dae69321e9100202fc62977f687454cd0ea147d0fd5a766e57450c569fd \ - --hash=sha256:0b493db84d124805865adc587532ebad30efa68f79ad68f11b336e0a51ec86c2 \ - --hash=sha256:13ba6e8e326e2116c954074c994da14954982ba2795aebb881c07ac5d093a58a \ - --hash=sha256:13ebf93c343dd8bd010cd98e617cb4c1c1f352a0cf2524c82d3814154116aa82 \ - --hash=sha256:1407fe45246632d0ffb7a3f4a520ba4e6051fc2cbd61ba1f806900c27f47706a \ - --hash=sha256:1bf633a50cc93ed17e494015897361010fc08700d92676c87931d3ea464123ce \ - --hash=sha256:2d0bac0385d2b43a7bd1d651621a4e0f1380abc63d6fb1012213a401cbd5bf8f \ - --hash=sha256:3001d00eba6bbf084ae60ec7f4bb8ed375748f53aeaefaf2a37d9f0370558524 \ - --hash=sha256:356e4519d4dfa766d50ecc498544b44c0249b6de66426041d7f8b751de4d6b48 \ - --hash=sha256:38255a3f1e8942573b067510f9611fc9e38196077b0c8eb7a8c795e105f9ce77 \ - --hash=sha256:3d75b8d013086b08e801fbbb896f7d5c9e6ccd44f13a9241d2bf7c0df9eda928 \ - --hash=sha256:41b825d65f31e394b523c84db84f9383a2f7eefc13d987f308f4663794d2687e \ - --hash=sha256:42e602564460da0e8ee67cb6d7236363ee5e131aa15943b6670e44e5c2ed0f67 \ - --hash=sha256:4aeaebcd91d9fee9aa768c1b39cb12214b30bf36d2b7370505a9f2165fedd8d9 \ - --hash=sha256:4c8b1c43e75c42a6cafcc71defa9e01ead39ae80bd733a2608b297412beede68 \ - --hash=sha256:4d37990425b4687ade27810e3b1a1c37825d242ebc275066cfee8cb6b8829ccd \ - --hash=sha256:4f09b0010e55bec3239278f642a8a506b91034f03a4fb28289a7d448a67f1515 \ - --hash=sha256:505138d4fa69462447a562a7c2ef723c6025ba12ac04478bc1ce2fcc279a2db5 \ - --hash=sha256:5067920de254f1a2dee8d3d9d7e4e03718e8fd2d2d9db962c8c9fa781ae82a39 \ - --hash=sha256:56961cfca7da2fdd178f95ca407fa330c64f33289e1804b592a77d5593d9bd94 \ - --hash=sha256:5a8e05057fab2a365c81abc696cb753da7549d20266e8511eb6c9d9f72fe3e92 \ - --hash=sha256:659f167f419a4609bc0516fb18ea69ed39dbb25594934bd2dd4d0401660e8a1e \ - --hash=sha256:662e8f7cad915ba75d8017b3e601afc01ef20deeeabf281bd00369de196d7726 \ - --hash=sha256:6f61d71bbc9b4a3de768371b210d906726535d6ca43506737682caa754b956cd \ - --hash=sha256:72b00a8e7c25dcea5946692a2485b1a0c0661ed93ecfedfa9b6687bd89a24ef5 \ - --hash=sha256:811e1d37d60b47cb8126e0a929b58c046251f28117cb16fcd371eed61f66b764 \ - --hash=sha256:81b0ea3715bf6a848d6f7149d25bf018fd24554a4be01fcbbe3fdc78e890b955 \ - --hash=sha256:88c8d517e78acdf7df8a2134a3c4b964415b575d2840a2746ddb1cc6175f8608 \ - --hash=sha256:8dca09dedf1bd8684767bc736cc20c97c29bc0c04c413e3276e0962cd7aeb148 \ - --hash=sha256:974a39bdb8c90a85982cdb78a103a32e0b1be986d411303064b28a80611f6e51 \ - --hash=sha256:9e112e03d37987d7b90c1e98ba5e1b59e1645226d78d73282f45b326f7bddcb9 \ - --hash=sha256:9e9744c657d896c7b580455e739899e492a4a452e2dd4d2b3e459f6b244a638d \ - --hash=sha256:9ed358312e63bf683b9ef22c8e442ef6c5c02973f0c2a939ec1d7b50c974015c \ - --hash=sha256:9f2c221eecb7ead00b8e3ddb913c67f75cba078fd1d326053225a3f59d850d72 \ - --hash=sha256:a20d33124935d27b80e6fdacbd34205732660e0a1d35d8b10b3328179a2b51a1 \ - --hash=sha256:a4c0757db9bd08470ff8277791795e70d0bf035a011a528ee9a5ce9454b6cba2 \ - --hash=sha256:afe07421c969e259e9403c3bb658968702bc3b78ec0b6fde3ae1e73440529c23 \ - --hash=sha256:b1992ba9d4780d9af9726bbcef6a1db12d9ab1ccc35e5773685a24b7fb2758eb \ - --hash=sha256:b23d2a46d53210b498e5b701a1913697671988f4bf8e10f935433f6e7c332fb6 \ - --hash=sha256:b5e83e4de81dcc9425598d9469a624826a0b1211380ac444c7c791d4a2137c19 \ - --hash=sha256:be35822f35f99dcc48152c9839d0171a06186f2d71ef76dc57fa556cc9bf6b45 \ - --hash=sha256:be9e0fb2ada7e5124f5282d6381903183ecc73ea019568d6d63d33f25b2a9000 \ - --hash=sha256:c140e7eb5ce47249668056edf3b7e9900c6a2e22fb0eaf0513f18a1b2c14e1da \ - --hash=sha256:c6a08799e9e88052221adca55741bf106ec7ea0710bca635c208b751f0d5b617 \ - --hash=sha256:cb242fc2cda5a307a7698c93173d3627a2a90d00507bccf5bc228851e8304963 \ - --hash=sha256:cce1e90dd302f45716a7715517c6aa0468af0bf38e814ad4eab58e88fc09f7f7 \ - --hash=sha256:cd4ccc364cf75d1422e66e247e52a93da6a9b73cefa8cad696f3cbbb75af179d \ - --hash=sha256:d21681f09e297a5adaa73060737e3aa1279a13ecdcfcc6ef66c292cb25125b2d \ - --hash=sha256:d38ffd0e81ba8ef347d2be0772e899c289b59ff150ebbbbe05dc61b1246eb4e0 \ - --hash=sha256:d566b82e92ff2e09dd6342df7e0eb4ff6275a3f08db284888dcd98134dbd4243 \ - --hash=sha256:d5b0ff9878333823226d270417f24f4d06f235cb3e54d1103b71ea537a6a86ce \ - --hash=sha256:d6ee1aa7ab36475035eb48c01efae87d37936a8173fc4d7b10bb02c2d75dd8f6 \ - --hash=sha256:db38f80540083ea33bdab614a9d28bcec4b54daa5aff1668d7827a9fc769ae0a \ - --hash=sha256:ea688d11707d30e212e0110a1aac7f7f3f542a259235d396f88be68b649e47d1 \ - --hash=sha256:f6327b6907b4cb72f650a5b7b1be23a2aab395017aa6f1adb13069d66360eb3f \ - --hash=sha256:fb412b7db83fe56847df9c47b6fe3f13911b06339c2aa02dcc09dce8bbf582cd +greenlet==2.0.2 \ + --hash=sha256:03a8f4f3430c3b3ff8d10a2a86028c660355ab637cee9333d63d66b56f09d52a \ + --hash=sha256:0bf60faf0bc2468089bdc5edd10555bab6e85152191df713e2ab1fcc86382b5a \ + --hash=sha256:18a7f18b82b52ee85322d7a7874e676f34ab319b9f8cce5de06067384aa8ff43 \ + --hash=sha256:18e98fb3de7dba1c0a852731c3070cf022d14f0d68b4c87a19cc1016f3bb8b33 \ + --hash=sha256:1a819eef4b0e0b96bb0d98d797bef17dc1b4a10e8d7446be32d1da33e095dbb8 \ + --hash=sha256:26fbfce90728d82bc9e6c38ea4d038cba20b7faf8a0ca53a9c07b67318d46088 \ + --hash=sha256:2780572ec463d44c1d3ae850239508dbeb9fed38e294c68d19a24d925d9223ca \ + --hash=sha256:283737e0da3f08bd637b5ad058507e578dd462db259f7f6e4c5c365ba4ee9343 \ + --hash=sha256:2d4686f195e32d36b4d7cf2d166857dbd0ee9f3d20ae349b6bf8afc8485b3645 \ + --hash=sha256:2dd11f291565a81d71dab10b7033395b7a3a5456e637cf997a6f33ebdf06f8db \ + --hash=sha256:30bcf80dda7f15ac77ba5af2b961bdd9dbc77fd4ac6105cee85b0d0a5fcf74df \ + --hash=sha256:32e5b64b148966d9cccc2c8d35a671409e45f195864560829f395a54226408d3 \ + --hash=sha256:36abbf031e1c0f79dd5d596bfaf8e921c41df2bdf54ee1eed921ce1f52999a86 \ + --hash=sha256:3a06ad5312349fec0ab944664b01d26f8d1f05009566339ac6f63f56589bc1a2 \ + --hash=sha256:3a51c9751078733d88e013587b108f1b7a1fb106d402fb390740f002b6f6551a \ + --hash=sha256:3c9b12575734155d0c09d6c3e10dbd81665d5c18e1a7c6597df72fd05990c8cf \ + --hash=sha256:3f6ea9bd35eb450837a3d80e77b517ea5bc56b4647f5502cd28de13675ee12f7 \ + --hash=sha256:4b58adb399c4d61d912c4c331984d60eb66565175cdf4a34792cd9600f21b394 \ + --hash=sha256:4d2e11331fc0c02b6e84b0d28ece3a36e0548ee1a1ce9ddde03752d9b79bba40 \ + --hash=sha256:5454276c07d27a740c5892f4907c86327b632127dd9abec42ee62e12427ff7e3 \ + --hash=sha256:561091a7be172ab497a3527602d467e2b3fbe75f9e783d8b8ce403fa414f71a6 \ + --hash=sha256:6c3acb79b0bfd4fe733dff8bc62695283b57949ebcca05ae5c129eb606ff2d74 \ + --hash=sha256:703f18f3fda276b9a916f0934d2fb6d989bf0b4fb5a64825260eb9bfd52d78f0 \ + --hash=sha256:7492e2b7bd7c9b9916388d9df23fa49d9b88ac0640db0a5b4ecc2b653bf451e3 \ + --hash=sha256:76ae285c8104046b3a7f06b42f29c7b73f77683df18c49ab5af7983994c2dd91 \ + --hash=sha256:7cafd1208fdbe93b67c7086876f061f660cfddc44f404279c1585bbf3cdc64c5 \ + --hash=sha256:7efde645ca1cc441d6dc4b48c0f7101e8d86b54c8530141b09fd31cef5149ec9 \ + --hash=sha256:88d9ab96491d38a5ab7c56dd7a3cc37d83336ecc564e4e8816dbed12e5aaefc8 \ + --hash=sha256:8eab883b3b2a38cc1e050819ef06a7e6344d4a990d24d45bc6f2cf959045a45b \ + --hash=sha256:910841381caba4f744a44bf81bfd573c94e10b3045ee00de0cbf436fe50673a6 \ + --hash=sha256:9190f09060ea4debddd24665d6804b995a9c122ef5917ab26e1566dcc712ceeb \ + --hash=sha256:937e9020b514ceedb9c830c55d5c9872abc90f4b5862f89c0887033ae33c6f73 \ + --hash=sha256:94c817e84245513926588caf1152e3b559ff794d505555211ca041f032abbb6b \ + --hash=sha256:971ce5e14dc5e73715755d0ca2975ac88cfdaefcaab078a284fea6cfabf866df \ + --hash=sha256:9d14b83fab60d5e8abe587d51c75b252bcc21683f24699ada8fb275d7712f5a9 \ + --hash=sha256:9f35ec95538f50292f6d8f2c9c9f8a3c6540bbfec21c9e5b4b751e0a7c20864f \ + --hash=sha256:a1846f1b999e78e13837c93c778dcfc3365902cfb8d1bdb7dd73ead37059f0d0 \ + --hash=sha256:acd2162a36d3de67ee896c43effcd5ee3de247eb00354db411feb025aa319857 \ + --hash=sha256:b0ef99cdbe2b682b9ccbb964743a6aca37905fda5e0452e5ee239b1654d37f2a \ + --hash=sha256:b80f600eddddce72320dbbc8e3784d16bd3fb7b517e82476d8da921f27d4b249 \ + --hash=sha256:b864ba53912b6c3ab6bcb2beb19f19edd01a6bfcbdfe1f37ddd1778abfe75a30 \ + --hash=sha256:b9ec052b06a0524f0e35bd8790686a1da006bd911dd1ef7d50b77bfbad74e292 \ + --hash=sha256:ba2956617f1c42598a308a84c6cf021a90ff3862eddafd20c3333d50f0edb45b \ + --hash=sha256:bdfea8c661e80d3c1c99ad7c3ff74e6e87184895bbaca6ee8cc61209f8b9b85d \ + --hash=sha256:be4ed120b52ae4d974aa40215fcdfde9194d63541c7ded40ee12eb4dda57b76b \ + --hash=sha256:c4302695ad8027363e96311df24ee28978162cdcdd2006476c43970b384a244c \ + --hash=sha256:c48f54ef8e05f04d6eff74b8233f6063cb1ed960243eacc474ee73a2ea8573ca \ + --hash=sha256:c9c59a2120b55788e800d82dfa99b9e156ff8f2227f07c5e3012a45a399620b7 \ + --hash=sha256:cd021c754b162c0fb55ad5d6b9d960db667faad0fa2ff25bb6e1301b0b6e6a75 \ + --hash=sha256:d27ec7509b9c18b6d73f2f5ede2622441de812e7b1a80bbd446cb0633bd3d5ae \ + --hash=sha256:d5508f0b173e6aa47273bdc0a0b5ba055b59662ba7c7ee5119528f466585526b \ + --hash=sha256:d75209eed723105f9596807495d58d10b3470fa6732dd6756595e89925ce2470 \ + --hash=sha256:db1a39669102a1d8d12b57de2bb7e2ec9066a6f2b3da35ae511ff93b01b5d564 \ + --hash=sha256:dbfcfc0218093a19c252ca8eb9aee3d29cfdcb586df21049b9d777fd32c14fd9 \ + --hash=sha256:e0f72c9ddb8cd28532185f54cc1453f2c16fb417a08b53a855c4e6a418edd099 \ + --hash=sha256:e7c8dc13af7db097bed64a051d2dd49e9f0af495c26995c00a9ee842690d34c0 \ + --hash=sha256:ea9872c80c132f4663822dd2a08d404073a5a9b5ba6155bea72fb2a79d1093b5 \ + --hash=sha256:eff4eb9b7eb3e4d0cae3d28c283dc16d9bed6b193c2e1ace3ed86ce48ea8df19 \ + --hash=sha256:f82d4d717d8ef19188687aa32b8363e96062911e63ba22a0cff7802a8e58e5f1 \ + --hash=sha256:fc3a569657468b6f3fb60587e48356fe512c1754ca05a564f11366ac9e306526 # via -r requirements/dev.in -hypothesis==6.62.1 \ - --hash=sha256:7d1e2f9871e6509662da317adf9b4aabd6b38280fb6c7930aa4f574d2ed25150 \ - --hash=sha256:d00a4a9c54b0b8b4570fe1abe42395807a973b4a507e6718309800e6f84e160d +hypothesis==6.68.0 \ + --hash=sha256:064a5bf7a98cbdfa3589d8934a2c548524c6d108bfa368ec5ed8b09caa526108 \ + --hash=sha256:8cfa1de15271debb2750545a460e58e3e84527d94157f38ab9309826953572f3 # via -r requirements/pytest.pip idna==3.4 \ --hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 \ @@ -313,9 +309,9 @@ iniconfig==2.0.0 \ # via # -r requirements/pytest.pip # pytest -isort==5.11.4 \ - --hash=sha256:6db30c5ded9815d813932c04c2f85a360bcdd35fed496f4d8f35495ef0a261b6 \ - --hash=sha256:c033fd0edb91000a7f09527fe5c75321878f98322a77ddcc81adbd83724afb7b +isort==5.11.5 \ + --hash=sha256:6be1f76a507cb2ecf16c7cf14a37e41609ca082330be4e3436a18ef74add55db \ + --hash=sha256:ba1d72fb2595a01c7895a5128f9585a5cc4b6d395f1c8d514989b9a7eb2a8746 # via pylint jaraco-classes==3.2.3 \ --hash=sha256:2353de3288bc6b82120752201c6b1c1a14b058267fa424ed5ce5984e3b922158 \ @@ -384,6 +380,10 @@ livereload==2.6.3 \ --hash=sha256:776f2f865e59fde56490a56bcc6773b6917366bce0c267c60ee8aaf1a0959869 \ --hash=sha256:ad4ac6f53b2d62bb6ce1a5e6e96f1f00976a32348afedcb4b6d68df2a1d346e4 # via sphinx-autobuild +markdown-it-py==2.1.0 \ + --hash=sha256:93de681e5c021a432c63147656fe21790bc01231e0cd2da73626f1aa3ac0fe27 \ + --hash=sha256:cf7e59fed14b5ae17c0006eff14a2d9a00ed5f3a846148153899a0224e2c07da + # via rich markupsafe==2.1.2 \ --hash=sha256:0576fe974b40a400449768941d5d0858cc624e3249dfd1e0c33674e5c7ca7aed \ --hash=sha256:085fd3201e7b12809f9e6e9bc1e5c96a368c8523fad5afb02afe3c051ae4afcc \ @@ -440,6 +440,10 @@ mccabe==0.7.0 \ --hash=sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325 \ --hash=sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e # via pylint +mdurl==0.1.2 \ + --hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \ + --hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba + # via markdown-it-py more-itertools==9.0.0 \ --hash=sha256:250e83d7e81d0c87ca6bd942e6aeab8cc9daa6096d12c5308f3f92fa5e5c1f41 \ --hash=sha256:5a6257e40878ef0520b1803990e3e22303a41b5714006c32a3fd8304b26ea1ab @@ -460,17 +464,17 @@ parso==0.8.3 \ --hash=sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0 \ --hash=sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75 # via jedi -pip==22.3.1 \ - --hash=sha256:65fd48317359f3af8e593943e6ae1506b66325085ea64b706a998c6e83eeaf38 \ - --hash=sha256:908c78e6bc29b676ede1c4d57981d490cb892eb45cd8c214ab6298125119e077 +pip==23.0 \ + --hash=sha256:aee438284e82c8def684b0bcc50b1f6ed5e941af97fa940e83e2e8ef1a59da9b \ + --hash=sha256:b5f88adff801f5ef052bcdef3daa31b55eb67b0fccd6d0106c206fa248e0463c # via -r requirements/pip.pip pkginfo==1.9.6 \ --hash=sha256:4b7a555a6d5a22169fcc9cf7bfd78d296b0361adad412a346c1226849af5e546 \ --hash=sha256:8fd5896e8718a4372f0ea9cc9d96f6417c9b986e23a4d116dda26b62cc29d046 # via twine -platformdirs==2.6.2 \ - --hash=sha256:83c8f6d04389165de7c9b6f0c682439697887bca0aa2f1c87ef1826be3584490 \ - --hash=sha256:e1fea1fe471b9ff8332e229df3cb7de4f53eeea4998d3b6bfff542115e998bd2 +platformdirs==3.0.0 \ + --hash=sha256:8a1228abb1ef82d788f74139988b137e78692984ec7b08eaa6c65f1723af28f9 \ + --hash=sha256:b1d5eb14f221506f50d6604a561f4c5786d9e80355219694a1b244bcd96f4567 # via # -r requirements/pip.pip # -r requirements/tox.pip @@ -504,13 +508,13 @@ pygments==2.14.0 \ # readme-renderer # rich # sphinx -pylint==2.15.10 \ - --hash=sha256:9df0d07e8948a1c3ffa3b6e2d7e6e63d9fb457c5da5b961ed63106594780cc7e \ - --hash=sha256:b3dc5ef7d33858f297ac0d06cc73862f01e4f2e74025ec3eff347ce0bc60baf5 +pylint==2.16.1 \ + --hash=sha256:bad9d7c36037f6043a1e848a43004dfd5ea5ceb05815d713ba56ca4503a9fe37 \ + --hash=sha256:ffe7fa536bb38ba35006a7c8a6d2efbfdd3d95bbf21199cad31f76b1c50aaf30 # via -r requirements/dev.in -pyproject-api==1.4.0 \ - --hash=sha256:ac85c1f82e0291dbae5a7739dbb9a990e11ee4034c9b5599ea714f07a24ecd71 \ - --hash=sha256:c34226297781efdd1ba4dfb74ce21076d9a8360e2125ea31803c1a02c76b2460 +pyproject-api==1.5.0 \ + --hash=sha256:0962df21f3e633b8ddb9567c011e6c1b3dcdfc31b7860c0ede7e24c5a1200fbe \ + --hash=sha256:4c111277dfb96bcd562c6245428f27250b794bfe3e210b8714c4f893952f2c17 # via # -r requirements/tox.pip # tox @@ -524,9 +528,9 @@ pytest==7.2.1 \ # via # -r requirements/pytest.pip # pytest-xdist -pytest-xdist==3.1.0 \ - --hash=sha256:40fdb8f3544921c5dfcd486ac080ce22870e71d82ced6d2e78fa97c2addd480c \ - --hash=sha256:70a76f191d8a1d2d6be69fc440cdf85f3e4c03c08b520fd5dc5d338d6cf07d89 +pytest-xdist==3.2.0 \ + --hash=sha256:336098e3bbd8193276867cc87db8b22903c3927665dff9d1ac8684c02f597b68 \ + --hash=sha256:fa10f95a2564cd91652f2d132725183c3b590d9fdcdec09d3677386ecf4c1ce9 # via -r requirements/pytest.pip pytz==2022.7.1 \ --hash=sha256:01a0681c4b9684a28304615eba55d1ab31ae00bf68ec157ec3708a8182dbbcd0 \ @@ -555,18 +559,20 @@ rfc3986==2.0.0 \ --hash=sha256:50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd \ --hash=sha256:97aacf9dbd4bfd829baad6e6309fa6573aaf1be3f6fa735c8ab05e46cecb261c # via twine -rich==13.1.0 \ - --hash=sha256:81c73a30b144bbcdedc13f4ea0b6ffd7fdc3b0d3cc259a9402309c8e4aee1964 \ - --hash=sha256:f846bff22a43e8508aebf3f0f2410ce1c6f4cde429098bd58d91fde038c57299 +rich==13.3.1 \ + --hash=sha256:125d96d20c92b946b983d0d392b84ff945461e5a06d3867e9f9e575f8697b67f \ + --hash=sha256:8aa57747f3fc3e977684f0176a88e789be314a99f99b43b75d1e9cb5dc6db9e9 # via twine -scriv==1.1.0 \ - --hash=sha256:1064101623e318d906d91f7e1405c97af414c67f0c7da8ee4d08eaa523b735eb \ - --hash=sha256:f2670624b2c44cdf34224c8b032b71a00a41b78e9f587140da6dd0b010e66b75 +scriv==1.2.0 \ + --hash=sha256:26b65a903da7d9aefc712a0d4150b8638302b4758bd428bbd773dd918c61c621 \ + --hash=sha256:bb61c30fea73158a4d18c28bbb57821c308245683efb0d897bd45e4a7856b472 # via -r doc/requirements.in -setuptools==66.0.0 \ - --hash=sha256:a78d01d1e2c175c474884671dde039962c9d74c7223db7369771fcf6e29ceeab \ - --hash=sha256:bd6eb2d6722568de6d14b87c44a96fac54b2a45ff5e940e639979a3d1792adb6 - # via check-manifest +setuptools==67.2.0 \ + --hash=sha256:16ccf598aab3b506593c17378473978908a2734d7336755a8769b480906bec1c \ + --hash=sha256:b440ee5f7e607bb8c9de15259dba2583dd41a38879a7abc1d43a71c59524da48 + # via + # check-manifest + # sphinxcontrib-jquery six==1.16.0 \ --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 @@ -596,9 +602,9 @@ sphinx-autobuild==2021.3.14 \ --hash=sha256:8fe8cbfdb75db04475232f05187c776f46f6e9e04cacf1e49ce81bdac649ccac \ --hash=sha256:de1ca3b66e271d2b5b5140c35034c89e47f263f2cd5db302c9217065f7443f05 # via -r doc/requirements.in -sphinx-rtd-theme==1.1.1 \ - --hash=sha256:31faa07d3e97c8955637fc3f1423a5ab2c44b74b8cc558a51498c202ce5cbda7 \ - --hash=sha256:6146c845f1e1947b3c3dd4432c28998a1693ccc742b4f9ad7c63129f0757c103 +sphinx-rtd-theme==1.2.0 \ + --hash=sha256:a0d8bd1a2ed52e0b338cbe19c4b2eef3c5e7a048769753dac6a9f059c7b641b8 \ + --hash=sha256:f823f7e71890abe0ac6aaa6013361ea2696fc8d3e1fa798f463e82bdb77eeff2 # via -r doc/requirements.in sphinxcontrib-applehelp==1.0.2 \ --hash=sha256:806111e5e962be97c29ec4c1e7fe277bfd19e9652fb1a4392105b43e01af885a \ @@ -612,6 +618,10 @@ sphinxcontrib-htmlhelp==2.0.0 \ --hash=sha256:d412243dfb797ae3ec2b59eca0e52dac12e75a241bf0e4eb861e450d06c6ed07 \ --hash=sha256:f5f8bb2d0d629f398bf47d0d69c07bc13b65f75a81ad9e2f71a63d4b7a2f6db2 # via sphinx +sphinxcontrib-jquery==2.0.0 \ + --hash=sha256:8fb65f6dba84bf7bcd1aea1f02ab3955ac34611d838bcc95d4983b805b234daa \ + --hash=sha256:ed47fa425c338ffebe3c37e1cdb56e30eb806116b85f01055b158c7057fdb995 + # via sphinx-rtd-theme sphinxcontrib-jsmath==1.0.1 \ --hash=sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178 \ --hash=sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8 @@ -662,9 +672,9 @@ tornado==6.2 \ --hash=sha256:d3a2f5999215a3a06a4fc218026cd84c61b8b2b40ac5296a6db1f1451ef04c1e \ --hash=sha256:e5f923aa6a47e133d1cf87d60700889d7eae68988704e20c75fb2d65677a8e4b # via livereload -tox==4.3.4 \ - --hash=sha256:84ee61b27dc983cb5b5d9ef93af10ce54a0e3992df73335fcdf3e8a3d3453a93 \ - --hash=sha256:f5ac33b55de2f8764cff260661eb1257107a21c4819714b04f14669991aa7772 +tox==4.4.5 \ + --hash=sha256:1081864f1a1393ffa11ebe9beaa280349020579310d217a594a4e7b6124c5425 \ + --hash=sha256:f9bc83c5da8666baa2a4d4e884bbbda124fe646e4b1c0e412949cecc2b6e8f90 # via # -r requirements/tox.pip # tox-gh @@ -710,6 +720,7 @@ typing-extensions==4.4.0 \ # -r requirements/pytest.pip # astroid # importlib-metadata + # markdown-it-py # platformdirs # pylint # rich @@ -728,9 +739,9 @@ urwid==2.1.2 \ urwid-readline==0.13 \ --hash=sha256:018020cbc864bb5ed87be17dc26b069eae2755cb29f3a9c569aac3bded1efaf4 # via pudb -virtualenv==20.17.1 \ - --hash=sha256:ce3b1684d6e1a20a3e5ed36795a97dfc6af29bc3970ca8dab93e11ac6094b3c4 \ - --hash=sha256:f8b927684efc6f1cc206c9db297a570ab9ad0e51c16fa9e45487d36d1905c058 +virtualenv==20.19.0 \ + --hash=sha256:37a640ba82ed40b226599c522d411e4be5edb339a0c0de030c0dc7b646d61590 \ + --hash=sha256:54eb59e7352b573aa04d53f80fc9736ed0ad5143af445a1e539aada6eb947dd1 # via # -r requirements/pip.pip # -r requirements/tox.pip @@ -805,9 +816,9 @@ wrapt==1.14.1 \ --hash=sha256:ee6acae74a2b91865910eef5e7de37dc6895ad96fa23603d1d27ea69df545015 \ --hash=sha256:ef3f72c9666bba2bab70d2a8b79f2c6d2c1a42a7f7e2b0ec83bb2f9e383950af # via astroid -zipp==3.11.0 \ - --hash=sha256:83a28fcb75844b5c0cdaf5aa4003c2d728c77e05f5aeabe8e95e56727005fbaa \ - --hash=sha256:a7a22e05929290a67401440b39690ae6563279bced5f314609d9d03798f56766 +zipp==3.12.1 \ + --hash=sha256:6c4fe274b8f85ec73c37a8e4e3fa00df9fb9335da96fb789e3b96b318e5097b3 \ + --hash=sha256:a3cac813d40993596b39ea9e93a18e8a2076d5c378b8bc88ec32ab264e04ad02 # via # -r requirements/pip.pip # -r requirements/pytest.pip diff --git a/requirements/mypy.pip b/requirements/mypy.pip index 16648b773..026821bd8 100644 --- a/requirements/mypy.pip +++ b/requirements/mypy.pip @@ -32,9 +32,9 @@ flaky==3.7.0 \ --hash=sha256:3ad100780721a1911f57a165809b7ea265a7863305acb66708220820caf8aa0d \ --hash=sha256:d6eda73cab5ae7364504b7c44670f70abed9e75f77dd116352f662817592ec9c # via -r requirements/pytest.pip -hypothesis==6.62.1 \ - --hash=sha256:7d1e2f9871e6509662da317adf9b4aabd6b38280fb6c7930aa4f574d2ed25150 \ - --hash=sha256:d00a4a9c54b0b8b4570fe1abe42395807a973b4a507e6718309800e6f84e160d +hypothesis==6.68.0 \ + --hash=sha256:064a5bf7a98cbdfa3589d8934a2c548524c6d108bfa368ec5ed8b09caa526108 \ + --hash=sha256:8cfa1de15271debb2750545a460e58e3e84527d94157f38ab9309826953572f3 # via -r requirements/pytest.pip importlib-metadata==6.0.0 \ --hash=sha256:7efb448ec9a5e313a57655d35aa54cd3e01b7e1fbcf72dce1bf06119420f5bad \ @@ -49,41 +49,37 @@ iniconfig==2.0.0 \ # via # -r requirements/pytest.pip # pytest -mypy==0.991 \ - --hash=sha256:0714258640194d75677e86c786e80ccf294972cc76885d3ebbb560f11db0003d \ - --hash=sha256:0c8f3be99e8a8bd403caa8c03be619544bc2c77a7093685dcf308c6b109426c6 \ - --hash=sha256:0cca5adf694af539aeaa6ac633a7afe9bbd760df9d31be55ab780b77ab5ae8bf \ - --hash=sha256:1c8cd4fb70e8584ca1ed5805cbc7c017a3d1a29fb450621089ffed3e99d1857f \ - --hash=sha256:1f7d1a520373e2272b10796c3ff721ea1a0712288cafaa95931e66aa15798813 \ - --hash=sha256:209ee89fbb0deed518605edddd234af80506aec932ad28d73c08f1400ef80a33 \ - --hash=sha256:26efb2fcc6b67e4d5a55561f39176821d2adf88f2745ddc72751b7890f3194ad \ - --hash=sha256:37bd02ebf9d10e05b00d71302d2c2e6ca333e6c2a8584a98c00e038db8121f05 \ - --hash=sha256:3a700330b567114b673cf8ee7388e949f843b356a73b5ab22dd7cff4742a5297 \ - --hash=sha256:3c0165ba8f354a6d9881809ef29f1a9318a236a6d81c690094c5df32107bde06 \ - --hash=sha256:3d80e36b7d7a9259b740be6d8d906221789b0d836201af4234093cae89ced0cd \ - --hash=sha256:4175593dc25d9da12f7de8de873a33f9b2b8bdb4e827a7cae952e5b1a342e243 \ - --hash=sha256:4307270436fd7694b41f913eb09210faff27ea4979ecbcd849e57d2da2f65305 \ - --hash=sha256:5e80e758243b97b618cdf22004beb09e8a2de1af481382e4d84bc52152d1c476 \ - --hash=sha256:641411733b127c3e0dab94c45af15fea99e4468f99ac88b39efb1ad677da5711 \ - --hash=sha256:652b651d42f155033a1967739788c436491b577b6a44e4c39fb340d0ee7f0d70 \ - --hash=sha256:6d7464bac72a85cb3491c7e92b5b62f3dcccb8af26826257760a552a5e244aa5 \ - --hash=sha256:74e259b5c19f70d35fcc1ad3d56499065c601dfe94ff67ae48b85596b9ec1461 \ - --hash=sha256:7d17e0a9707d0772f4a7b878f04b4fd11f6f5bcb9b3813975a9b13c9332153ab \ - --hash=sha256:901c2c269c616e6cb0998b33d4adbb4a6af0ac4ce5cd078afd7bc95830e62c1c \ - --hash=sha256:98e781cd35c0acf33eb0295e8b9c55cdbef64fcb35f6d3aa2186f289bed6e80d \ - --hash=sha256:a12c56bf73cdab116df96e4ff39610b92a348cc99a1307e1da3c3768bbb5b135 \ - --hash=sha256:ac6e503823143464538efda0e8e356d871557ef60ccd38f8824a4257acc18d93 \ - --hash=sha256:b8472f736a5bfb159a5e36740847808f6f5b659960115ff29c7cecec1741c648 \ - --hash=sha256:b86ce2c1866a748c0f6faca5232059f881cda6dda2a893b9a8373353cfe3715a \ - --hash=sha256:bc9ec663ed6c8f15f4ae9d3c04c989b744436c16d26580eaa760ae9dd5d662eb \ - --hash=sha256:c9166b3f81a10cdf9b49f2d594b21b31adadb3d5e9db9b834866c3258b695be3 \ - --hash=sha256:d13674f3fb73805ba0c45eb6c0c3053d218aa1f7abead6e446d474529aafc372 \ - --hash=sha256:de32edc9b0a7e67c2775e574cb061a537660e51210fbf6006b0b36ea695ae9bb \ - --hash=sha256:e62ebaad93be3ad1a828a11e90f0e76f15449371ffeecca4a0a0b9adc99abcef +mypy==1.0.0 \ + --hash=sha256:01b1b9e1ed40544ef486fa8ac022232ccc57109f379611633ede8e71630d07d2 \ + --hash=sha256:0ab090d9240d6b4e99e1fa998c2d0aa5b29fc0fb06bd30e7ad6183c95fa07593 \ + --hash=sha256:14d776869a3e6c89c17eb943100f7868f677703c8a4e00b3803918f86aafbc52 \ + --hash=sha256:1ace23f6bb4aec4604b86c4843276e8fa548d667dbbd0cb83a3ae14b18b2db6c \ + --hash=sha256:2efa963bdddb27cb4a0d42545cd137a8d2b883bd181bbc4525b568ef6eca258f \ + --hash=sha256:2f6ac8c87e046dc18c7d1d7f6653a66787a4555085b056fe2d599f1f1a2a2d21 \ + --hash=sha256:3ae4c7a99e5153496243146a3baf33b9beff714464ca386b5f62daad601d87af \ + --hash=sha256:3cfad08f16a9c6611e6143485a93de0e1e13f48cfb90bcad7d5fde1c0cec3d36 \ + --hash=sha256:4e5175026618c178dfba6188228b845b64131034ab3ba52acaffa8f6c361f805 \ + --hash=sha256:50979d5efff8d4135d9db293c6cb2c42260e70fb010cbc697b1311a4d7a39ddb \ + --hash=sha256:5cd187d92b6939617f1168a4fe68f68add749902c010e66fe574c165c742ed88 \ + --hash=sha256:5cfca124f0ac6707747544c127880893ad72a656e136adc935c8600740b21ff5 \ + --hash=sha256:5e398652d005a198a7f3c132426b33c6b85d98aa7dc852137a2a3be8890c4072 \ + --hash=sha256:67cced7f15654710386e5c10b96608f1ee3d5c94ca1da5a2aad5889793a824c1 \ + --hash=sha256:7306edca1c6f1b5fa0bc9aa645e6ac8393014fa82d0fa180d0ebc990ebe15964 \ + --hash=sha256:7cc2c01dfc5a3cbddfa6c13f530ef3b95292f926329929001d45e124342cd6b7 \ + --hash=sha256:87edfaf344c9401942883fad030909116aa77b0fa7e6e8e1c5407e14549afe9a \ + --hash=sha256:8845125d0b7c57838a10fd8925b0f5f709d0e08568ce587cc862aacce453e3dd \ + --hash=sha256:92024447a339400ea00ac228369cd242e988dd775640755fa4ac0c126e49bb74 \ + --hash=sha256:a86b794e8a56ada65c573183756eac8ac5b8d3d59daf9d5ebd72ecdbb7867a43 \ + --hash=sha256:bb2782a036d9eb6b5a6efcdda0986774bf798beef86a62da86cb73e2a10b423d \ + --hash=sha256:be78077064d016bc1b639c2cbcc5be945b47b4261a4f4b7d8923f6c69c5c9457 \ + --hash=sha256:c7cf862aef988b5fbaa17764ad1d21b4831436701c7d2b653156a9497d92c83c \ + --hash=sha256:e0626db16705ab9f7fa6c249c017c887baf20738ce7f9129da162bb3075fc1af \ + --hash=sha256:f34495079c8d9da05b183f9f7daec2878280c2ad7cc81da686ef0b484cea2ecf \ + --hash=sha256:fe523fcbd52c05040c7bee370d66fee8373c5972171e4fbc323153433198592d # via -r requirements/mypy.in -mypy-extensions==0.4.3 \ - --hash=sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d \ - --hash=sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8 +mypy-extensions==1.0.0 \ + --hash=sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d \ + --hash=sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782 # via mypy packaging==23.0 \ --hash=sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2 \ @@ -103,9 +99,9 @@ pytest==7.2.1 \ # via # -r requirements/pytest.pip # pytest-xdist -pytest-xdist==3.1.0 \ - --hash=sha256:40fdb8f3544921c5dfcd486ac080ce22870e71d82ced6d2e78fa97c2addd480c \ - --hash=sha256:70a76f191d8a1d2d6be69fc440cdf85f3e4c03c08b520fd5dc5d338d6cf07d89 +pytest-xdist==3.2.0 \ + --hash=sha256:336098e3bbd8193276867cc87db8b22903c3927665dff9d1ac8684c02f597b68 \ + --hash=sha256:fa10f95a2564cd91652f2d132725183c3b590d9fdcdec09d3677386ecf4c1ce9 # via -r requirements/pytest.pip sortedcontainers==2.4.0 \ --hash=sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88 \ @@ -153,9 +149,9 @@ typing-extensions==4.4.0 \ # -r requirements/pytest.pip # importlib-metadata # mypy -zipp==3.11.0 \ - --hash=sha256:83a28fcb75844b5c0cdaf5aa4003c2d728c77e05f5aeabe8e95e56727005fbaa \ - --hash=sha256:a7a22e05929290a67401440b39690ae6563279bced5f314609d9d03798f56766 +zipp==3.12.1 \ + --hash=sha256:6c4fe274b8f85ec73c37a8e4e3fa00df9fb9335da96fb789e3b96b318e5097b3 \ + --hash=sha256:a3cac813d40993596b39ea9e93a18e8a2076d5c378b8bc88ec32ab264e04ad02 # via # -r requirements/pytest.pip # importlib-metadata diff --git a/requirements/pip-tools.pip b/requirements/pip-tools.pip index 4884bbf18..2cfa5ca71 100644 --- a/requirements/pip-tools.pip +++ b/requirements/pip-tools.pip @@ -22,21 +22,21 @@ packaging==23.0 \ --hash=sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2 \ --hash=sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97 # via build -pip==22.3.1 \ - --hash=sha256:65fd48317359f3af8e593943e6ae1506b66325085ea64b706a998c6e83eeaf38 \ - --hash=sha256:908c78e6bc29b676ede1c4d57981d490cb892eb45cd8c214ab6298125119e077 +pip==23.0 \ + --hash=sha256:aee438284e82c8def684b0bcc50b1f6ed5e941af97fa940e83e2e8ef1a59da9b \ + --hash=sha256:b5f88adff801f5ef052bcdef3daa31b55eb67b0fccd6d0106c206fa248e0463c # via pip-tools -pip-tools==6.12.1 \ - --hash=sha256:88efb7b29a923ffeac0713e6f23ef8529cc6175527d42b93f73756cc94387293 \ - --hash=sha256:f0c0c0ec57b58250afce458e2e6058b1f30a4263db895b7d72fd6311bf1dc6f7 +pip-tools==6.12.2 \ + --hash=sha256:6a51f4fd67140d5e83703ebfa9610fb61398727151f56a1be02a972d062e4679 \ + --hash=sha256:8b903696df4598b10d469026ef9995c5f9a874b416e88e7a214884ebe4a70245 # via -r requirements/pip-tools.in pyproject-hooks==1.0.0 \ --hash=sha256:283c11acd6b928d2f6a7c73fa0d01cb2bdc5f07c57a2eeb6e83d5e56b97976f8 \ --hash=sha256:f271b298b97f5955d53fb12b72c1fb1948c22c1a6b70b315c54cedaca0264ef5 # via build -setuptools==66.0.0 \ - --hash=sha256:a78d01d1e2c175c474884671dde039962c9d74c7223db7369771fcf6e29ceeab \ - --hash=sha256:bd6eb2d6722568de6d14b87c44a96fac54b2a45ff5e940e639979a3d1792adb6 +setuptools==67.2.0 \ + --hash=sha256:16ccf598aab3b506593c17378473978908a2734d7336755a8769b480906bec1c \ + --hash=sha256:b440ee5f7e607bb8c9de15259dba2583dd41a38879a7abc1d43a71c59524da48 # via pip-tools tomli==2.0.1 \ --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ @@ -52,7 +52,7 @@ wheel==0.38.4 \ --hash=sha256:965f5259b566725405b05e7cf774052044b1ed30119b5d586b2703aafe8719ac \ --hash=sha256:b60533f3f5d530e971d6737ca6d58681ee434818fab630c83a734bb10c083ce8 # via pip-tools -zipp==3.11.0 \ - --hash=sha256:83a28fcb75844b5c0cdaf5aa4003c2d728c77e05f5aeabe8e95e56727005fbaa \ - --hash=sha256:a7a22e05929290a67401440b39690ae6563279bced5f314609d9d03798f56766 +zipp==3.12.1 \ + --hash=sha256:6c4fe274b8f85ec73c37a8e4e3fa00df9fb9335da96fb789e3b96b318e5097b3 \ + --hash=sha256:a3cac813d40993596b39ea9e93a18e8a2076d5c378b8bc88ec32ab264e04ad02 # via importlib-metadata diff --git a/requirements/pip.pip b/requirements/pip.pip index e48340d14..8b746308d 100644 --- a/requirements/pip.pip +++ b/requirements/pip.pip @@ -16,13 +16,13 @@ importlib-metadata==6.0.0 \ --hash=sha256:7efb448ec9a5e313a57655d35aa54cd3e01b7e1fbcf72dce1bf06119420f5bad \ --hash=sha256:e354bedeb60efa6affdcc8ae121b73544a7aa74156d047311948f6d711cd378d # via virtualenv -pip==22.3.1 \ - --hash=sha256:65fd48317359f3af8e593943e6ae1506b66325085ea64b706a998c6e83eeaf38 \ - --hash=sha256:908c78e6bc29b676ede1c4d57981d490cb892eb45cd8c214ab6298125119e077 +pip==23.0 \ + --hash=sha256:aee438284e82c8def684b0bcc50b1f6ed5e941af97fa940e83e2e8ef1a59da9b \ + --hash=sha256:b5f88adff801f5ef052bcdef3daa31b55eb67b0fccd6d0106c206fa248e0463c # via -r requirements/pip.in -platformdirs==2.6.2 \ - --hash=sha256:83c8f6d04389165de7c9b6f0c682439697887bca0aa2f1c87ef1826be3584490 \ - --hash=sha256:e1fea1fe471b9ff8332e229df3cb7de4f53eeea4998d3b6bfff542115e998bd2 +platformdirs==3.0.0 \ + --hash=sha256:8a1228abb1ef82d788f74139988b137e78692984ec7b08eaa6c65f1723af28f9 \ + --hash=sha256:b1d5eb14f221506f50d6604a561f4c5786d9e80355219694a1b244bcd96f4567 # via virtualenv typing-extensions==4.4.0 \ --hash=sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa \ @@ -30,11 +30,11 @@ typing-extensions==4.4.0 \ # via # importlib-metadata # platformdirs -virtualenv==20.17.1 \ - --hash=sha256:ce3b1684d6e1a20a3e5ed36795a97dfc6af29bc3970ca8dab93e11ac6094b3c4 \ - --hash=sha256:f8b927684efc6f1cc206c9db297a570ab9ad0e51c16fa9e45487d36d1905c058 +virtualenv==20.19.0 \ + --hash=sha256:37a640ba82ed40b226599c522d411e4be5edb339a0c0de030c0dc7b646d61590 \ + --hash=sha256:54eb59e7352b573aa04d53f80fc9736ed0ad5143af445a1e539aada6eb947dd1 # via -r requirements/pip.in -zipp==3.11.0 \ - --hash=sha256:83a28fcb75844b5c0cdaf5aa4003c2d728c77e05f5aeabe8e95e56727005fbaa \ - --hash=sha256:a7a22e05929290a67401440b39690ae6563279bced5f314609d9d03798f56766 +zipp==3.12.1 \ + --hash=sha256:6c4fe274b8f85ec73c37a8e4e3fa00df9fb9335da96fb789e3b96b318e5097b3 \ + --hash=sha256:a3cac813d40993596b39ea9e93a18e8a2076d5c378b8bc88ec32ab264e04ad02 # via importlib-metadata diff --git a/requirements/pytest.pip b/requirements/pytest.pip index a57e8ae61..11e1c3ac7 100644 --- a/requirements/pytest.pip +++ b/requirements/pytest.pip @@ -28,9 +28,9 @@ flaky==3.7.0 \ --hash=sha256:3ad100780721a1911f57a165809b7ea265a7863305acb66708220820caf8aa0d \ --hash=sha256:d6eda73cab5ae7364504b7c44670f70abed9e75f77dd116352f662817592ec9c # via -r requirements/pytest.in -hypothesis==6.62.1 \ - --hash=sha256:7d1e2f9871e6509662da317adf9b4aabd6b38280fb6c7930aa4f574d2ed25150 \ - --hash=sha256:d00a4a9c54b0b8b4570fe1abe42395807a973b4a507e6718309800e6f84e160d +hypothesis==6.68.0 \ + --hash=sha256:064a5bf7a98cbdfa3589d8934a2c548524c6d108bfa368ec5ed8b09caa526108 \ + --hash=sha256:8cfa1de15271debb2750545a460e58e3e84527d94157f38ab9309826953572f3 # via -r requirements/pytest.in importlib-metadata==6.0.0 \ --hash=sha256:7efb448ec9a5e313a57655d35aa54cd3e01b7e1fbcf72dce1bf06119420f5bad \ @@ -56,9 +56,9 @@ pytest==7.2.1 \ # via # -r requirements/pytest.in # pytest-xdist -pytest-xdist==3.1.0 \ - --hash=sha256:40fdb8f3544921c5dfcd486ac080ce22870e71d82ced6d2e78fa97c2addd480c \ - --hash=sha256:70a76f191d8a1d2d6be69fc440cdf85f3e4c03c08b520fd5dc5d338d6cf07d89 +pytest-xdist==3.2.0 \ + --hash=sha256:336098e3bbd8193276867cc87db8b22903c3927665dff9d1ac8684c02f597b68 \ + --hash=sha256:fa10f95a2564cd91652f2d132725183c3b590d9fdcdec09d3677386ecf4c1ce9 # via -r requirements/pytest.in sortedcontainers==2.4.0 \ --hash=sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88 \ @@ -72,7 +72,7 @@ typing-extensions==4.4.0 \ --hash=sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa \ --hash=sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e # via importlib-metadata -zipp==3.11.0 \ - --hash=sha256:83a28fcb75844b5c0cdaf5aa4003c2d728c77e05f5aeabe8e95e56727005fbaa \ - --hash=sha256:a7a22e05929290a67401440b39690ae6563279bced5f314609d9d03798f56766 +zipp==3.12.1 \ + --hash=sha256:6c4fe274b8f85ec73c37a8e4e3fa00df9fb9335da96fb789e3b96b318e5097b3 \ + --hash=sha256:a3cac813d40993596b39ea9e93a18e8a2076d5c378b8bc88ec32ab264e04ad02 # via importlib-metadata diff --git a/requirements/tox.pip b/requirements/tox.pip index 202228c76..d52a1b6f5 100644 --- a/requirements/tox.pip +++ b/requirements/tox.pip @@ -4,9 +4,9 @@ # # make upgrade # -cachetools==5.2.1 \ - --hash=sha256:5991bc0e08a1319bb618d3195ca5b6bc76646a49c21d55962977197b301cc1fe \ - --hash=sha256:8462eebf3a6c15d25430a8c27c56ac61340b2ecf60c9ce57afc2b97e450e47da +cachetools==5.3.0 \ + --hash=sha256:13dfddc7b8df938c21a940dfa6557ce6e94a2f1cdfa58eb90c805721d58f2c14 \ + --hash=sha256:429e1a1e845c008ea6c85aa35d4b98b65d6a9763eeef3e37e92728a12d1de9d4 # via tox chardet==5.1.0 \ --hash=sha256:0d62712b956bc154f85fb0a266e2a3c5913c2967e00348701b32411d6def31e5 \ @@ -41,9 +41,9 @@ packaging==23.0 \ # via # pyproject-api # tox -platformdirs==2.6.2 \ - --hash=sha256:83c8f6d04389165de7c9b6f0c682439697887bca0aa2f1c87ef1826be3584490 \ - --hash=sha256:e1fea1fe471b9ff8332e229df3cb7de4f53eeea4998d3b6bfff542115e998bd2 +platformdirs==3.0.0 \ + --hash=sha256:8a1228abb1ef82d788f74139988b137e78692984ec7b08eaa6c65f1723af28f9 \ + --hash=sha256:b1d5eb14f221506f50d6604a561f4c5786d9e80355219694a1b244bcd96f4567 # via # tox # virtualenv @@ -51,9 +51,9 @@ pluggy==1.0.0 \ --hash=sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159 \ --hash=sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3 # via tox -pyproject-api==1.4.0 \ - --hash=sha256:ac85c1f82e0291dbae5a7739dbb9a990e11ee4034c9b5599ea714f07a24ecd71 \ - --hash=sha256:c34226297781efdd1ba4dfb74ce21076d9a8360e2125ea31803c1a02c76b2460 +pyproject-api==1.5.0 \ + --hash=sha256:0962df21f3e633b8ddb9567c011e6c1b3dcdfc31b7860c0ede7e24c5a1200fbe \ + --hash=sha256:4c111277dfb96bcd562c6245428f27250b794bfe3e210b8714c4f893952f2c17 # via tox tomli==2.0.1 \ --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ @@ -61,9 +61,9 @@ tomli==2.0.1 \ # via # pyproject-api # tox -tox==4.3.4 \ - --hash=sha256:84ee61b27dc983cb5b5d9ef93af10ce54a0e3992df73335fcdf3e8a3d3453a93 \ - --hash=sha256:f5ac33b55de2f8764cff260661eb1257107a21c4819714b04f14669991aa7772 +tox==4.4.5 \ + --hash=sha256:1081864f1a1393ffa11ebe9beaa280349020579310d217a594a4e7b6124c5425 \ + --hash=sha256:f9bc83c5da8666baa2a4d4e884bbbda124fe646e4b1c0e412949cecc2b6e8f90 # via # -r requirements/tox.in # tox-gh @@ -78,11 +78,11 @@ typing-extensions==4.4.0 \ # importlib-metadata # platformdirs # tox -virtualenv==20.17.1 \ - --hash=sha256:ce3b1684d6e1a20a3e5ed36795a97dfc6af29bc3970ca8dab93e11ac6094b3c4 \ - --hash=sha256:f8b927684efc6f1cc206c9db297a570ab9ad0e51c16fa9e45487d36d1905c058 +virtualenv==20.19.0 \ + --hash=sha256:37a640ba82ed40b226599c522d411e4be5edb339a0c0de030c0dc7b646d61590 \ + --hash=sha256:54eb59e7352b573aa04d53f80fc9736ed0ad5143af445a1e539aada6eb947dd1 # via tox -zipp==3.11.0 \ - --hash=sha256:83a28fcb75844b5c0cdaf5aa4003c2d728c77e05f5aeabe8e95e56727005fbaa \ - --hash=sha256:a7a22e05929290a67401440b39690ae6563279bced5f314609d9d03798f56766 +zipp==3.12.1 \ + --hash=sha256:6c4fe274b8f85ec73c37a8e4e3fa00df9fb9335da96fb789e3b96b318e5097b3 \ + --hash=sha256:a3cac813d40993596b39ea9e93a18e8a2076d5c378b8bc88ec32ab264e04ad02 # via importlib-metadata From 1c2e2be9fbba200330ec84062eecf6662cbd5ee0 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Thu, 9 Feb 2023 08:04:42 -0700 Subject: [PATCH 055/139] test: adapt to latest pylint --- ci/download_gha_artifacts.py | 2 +- ci/parse_relnotes.py | 2 +- coverage/collector.py | 2 +- coverage/control.py | 2 +- coverage/parser.py | 2 +- pylintrc | 1 + tests/test_cmdline.py | 6 +++--- tests/test_concurrency.py | 2 +- 8 files changed, 10 insertions(+), 9 deletions(-) diff --git a/ci/download_gha_artifacts.py b/ci/download_gha_artifacts.py index df22c6881..3d20541ad 100644 --- a/ci/download_gha_artifacts.py +++ b/ci/download_gha_artifacts.py @@ -21,7 +21,7 @@ def download_url(url, filename): for chunk in response.iter_content(16*1024): f.write(chunk) else: - raise Exception(f"Fetching {url} produced: status={response.status_code}") + raise RuntimeError(f"Fetching {url} produced: status={response.status_code}") def unpack_zipfile(filename): """Unpack a zipfile, using the names in the zip.""" diff --git a/ci/parse_relnotes.py b/ci/parse_relnotes.py index deebae5dd..df83818a6 100644 --- a/ci/parse_relnotes.py +++ b/ci/parse_relnotes.py @@ -74,7 +74,7 @@ def sections(parsed_data): elif ttype == "text": text.append(ttext) else: - raise Exception(f"Don't know ttype {ttype!r}") + raise RuntimeError(f"Don't know ttype {ttype!r}") yield (*header, "\n".join(text)) diff --git a/coverage/collector.py b/coverage/collector.py index 22471504f..2f8c17520 100644 --- a/coverage/collector.py +++ b/coverage/collector.py @@ -356,7 +356,7 @@ def start(self) -> None: try: fn(frame, event, arg, lineno=lineno) except TypeError as ex: - raise Exception("fullcoverage must be run with the C trace function.") from ex + raise RuntimeError("fullcoverage must be run with the C trace function.") from ex # Install our installation tracer in threading, to jump-start other # threads. diff --git a/coverage/control.py b/coverage/control.py index 78e0c70e6..730ba554b 100644 --- a/coverage/control.py +++ b/coverage/control.py @@ -337,7 +337,7 @@ def _post_init(self) -> None: # '[run] _crash' will raise an exception if the value is close by in # the call stack, for testing error handling. if self.config._crash and self.config._crash in short_stack(limit=4): - raise Exception(f"Crashing because called by {self.config._crash}") + raise RuntimeError(f"Crashing because called by {self.config._crash}") def _write_startup_debug(self) -> None: """Write out debug info at startup if needed.""" diff --git a/coverage/parser.py b/coverage/parser.py index b8ddb5015..ae70b4f0f 100644 --- a/coverage/parser.py +++ b/coverage/parser.py @@ -821,7 +821,7 @@ def add_arcs(self, node: ast.AST) -> Set[ArcStart]: # statement), or it's something we overlooked. if env.TESTING: if node_name not in self.OK_TO_DEFAULT: - raise Exception(f"*** Unhandled: {node}") # pragma: only failure + raise RuntimeError(f"*** Unhandled: {node}") # pragma: only failure # Default for simple statements: one exit from this node. return {ArcStart(self.line_for_node(node))} diff --git a/pylintrc b/pylintrc index cc6936130..5f879056d 100644 --- a/pylintrc +++ b/pylintrc @@ -62,6 +62,7 @@ disable= broad-except, no-else-return, subprocess-run-check, + use-dict-literal, # Messages that may be silly: no-member, using-constant-test, diff --git a/tests/test_cmdline.py b/tests/test_cmdline.py index c517d39d3..e94b1080e 100644 --- a/tests/test_cmdline.py +++ b/tests/test_cmdline.py @@ -1081,7 +1081,7 @@ def command_line(self, argv: List[str]) -> int: print("Hello, world!") elif argv[0] == 'raise': try: - raise Exception("oh noes!") + raise RuntimeError("oh noes!") except: raise _ExceptionDuringRun(*sys.exc_info()) from None elif argv[0] == 'internalraise': @@ -1111,8 +1111,8 @@ def test_raise(self) -> None: print(err) err_parts = err.splitlines(keepends=True) assert err_parts[0] == 'Traceback (most recent call last):\n' - assert ' raise Exception("oh noes!")\n' in err_parts - assert err_parts[-1] == 'Exception: oh noes!\n' + assert ' raise RuntimeError("oh noes!")\n' in err_parts + assert err_parts[-1] == 'RuntimeError: oh noes!\n' def test_internalraise(self) -> None: with pytest.raises(ValueError, match="coverage is broken"): diff --git a/tests/test_concurrency.py b/tests/test_concurrency.py index 3360094bf..9f12e77ec 100644 --- a/tests/test_concurrency.py +++ b/tests/test_concurrency.py @@ -584,7 +584,7 @@ def test_multiprocessing_bootstrap_error_handling(self) -> None: """) out = self.run_command("coverage run multi.py") assert "Exception during multiprocessing bootstrap init" in out - assert "Exception: Crashing because called by _bootstrap" in out + assert "RuntimeError: Crashing because called by _bootstrap" in out def test_bug_890(self) -> None: # chdir in multiprocessing shouldn't keep us from finding the From 151d3a74857b174ee4d852b98a0e1a7ef4f73427 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Thu, 9 Feb 2023 08:41:20 -0700 Subject: [PATCH 056/139] mypy: typeshed bug got fixed --- coverage/python.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/coverage/python.py b/coverage/python.py index 98b0d6ab9..744ab4cb8 100644 --- a/coverage/python.py +++ b/coverage/python.py @@ -9,7 +9,7 @@ import types import zipimport -from typing import cast, Dict, Iterable, Optional, Set, TYPE_CHECKING +from typing import Dict, Iterable, Optional, Set, TYPE_CHECKING from coverage import env from coverage.exceptions import CoverageException, NoSource @@ -89,8 +89,7 @@ def get_zip_bytes(filename: str) -> Optional[bytes]: except zipimport.ZipImportError: return None try: - # typeshed is wrong for get_data: https://github.com/python/typeshed/pull/9428 - data = cast(bytes, zi.get_data(inner)) + data = zi.get_data(inner) except OSError: return None return data From 6bc043981f6548852844ea6b16d5ef7d37c0417d Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Sat, 11 Feb 2023 17:59:25 -0500 Subject: [PATCH 057/139] refactor: use placebos instead of non-existent attributes Details of the problem and thought process: https://nedbatchelder.com/blog/202302/late_initialization_with_mypy.html --- coverage/control.py | 99 +++++++++++++++++++++++++++++---------------- coverage/debug.py | 8 +++- coverage/sqldata.py | 2 + 3 files changed, 72 insertions(+), 37 deletions(-) diff --git a/coverage/control.py b/coverage/control.py index 730ba554b..cdea42eed 100644 --- a/coverage/control.py +++ b/coverage/control.py @@ -26,10 +26,10 @@ from coverage import env from coverage.annotate import AnnotateReporter from coverage.collector import Collector, HAS_CTRACER -from coverage.config import read_coverage_config +from coverage.config import CoverageConfig, read_coverage_config from coverage.context import should_start_context_test_function, combine_context_switchers from coverage.data import CoverageData, combine_parallel_data -from coverage.debug import DebugControl, short_stack, write_formatted_info +from coverage.debug import DebugControl, NoDebugging, short_stack, write_formatted_info from coverage.disposition import disposition_debug_msg from coverage.exceptions import ConfigError, CoverageException, CoverageWarning, PluginError from coverage.files import PathAliases, abs_file, relative_filename, set_relative_directory @@ -52,7 +52,6 @@ ) from coverage.xmlreport import XmlReporter - os = isolate_module(os) @contextlib.contextmanager @@ -219,6 +218,10 @@ def __init__( # pylint: disable=too-many-arguments The `messages` parameter. """ + # Start self.config as a usable default configuration. It will soon be + # replaced with the real configuration. + self.config = CoverageConfig() + # data_file=None means no disk file at all. data_file missing means # use the value from the config file. self._no_disk = data_file is None @@ -241,14 +244,15 @@ def __init__( # pylint: disable=too-many-arguments # A record of all the warnings that have been issued. self._warnings: List[str] = [] - # Other instance attributes, set later. - self._debug: DebugControl - self._plugins: Plugins - self._inorout: InOrOut - self._data: CoverageData - self._collector: Collector - self._file_mapper: Callable[[str], str] + # Other instance attributes, set with placebos or placeholders. + # More useful objects will be created later. + self._debug: DebugControl = NoDebugging() + self._inorout: InOrOut = InOrOutPlacebo() + self._plugins: Plugins = Plugins() + self._data: CoverageData = CoverageDataPlacebo() + self._collector: Collector = CollectorPlacebo() + self._file_mapper: Callable[[str], str] = abs_file self._data_suffix = self._run_suffix = None self._exclude_re: Dict[str, str] = {} self._old_sigterm: Optional[Callable[[int, Optional[FrameType]], Any]] = None @@ -315,7 +319,8 @@ def _init(self) -> None: self._exclude_re = {} set_relative_directory() - self._file_mapper = relative_filename if self.config.relative_files else abs_file + if self.config.relative_files: + self._file_mapper = relative_filename # Load plugins self._plugins = Plugins.load_plugins(self.config.plugins, self.config, self._debug) @@ -400,9 +405,7 @@ def _warn(self, msg: str, slug: Optional[str] = None, once: bool = False) -> Non """ if not self._no_warn_slugs: - # _warn() can be called before self.config is set in __init__... - if hasattr(self, "config"): - self._no_warn_slugs = list(self.config.disable_warnings) + self._no_warn_slugs = list(self.config.disable_warnings) if slug in self._no_warn_slugs: # Don't issue the warning @@ -411,7 +414,7 @@ def _warn(self, msg: str, slug: Optional[str] = None, once: bool = False) -> Non self._warnings.append(msg) if slug: msg = f"{msg} ({slug})" - if hasattr(self, "_debug") and self._debug.should('pid'): + if self._debug.should('pid'): msg = f"[{os.getpid()}] {msg}" warnings.warn(msg, category=CoverageWarning, stacklevel=2) @@ -477,8 +480,7 @@ def set_option(self, option_name: str, value: Union[TConfigValueIn, TConfigSecti def load(self) -> None: """Load previously-collected coverage data from the data file.""" self._init() - if hasattr(self, "_collector"): - self._collector.reset() + self._collector.reset() should_skip = self.config.parallel and not os.path.exists(self.config.data_file) if not should_skip: self._init_data(suffix=None) @@ -578,7 +580,7 @@ def _init_for_start(self) -> None: def _init_data(self, suffix: Optional[Union[str, bool]]) -> None: """Create a data file if we don't have one yet.""" - if not hasattr(self, "_data"): + if not self._data._real: # Create the data file. We do this at construction time so that the # data file will be written into the directory where the process # started rather than wherever the process eventually chdir'd to. @@ -658,11 +660,10 @@ def erase(self) -> None: """ self._init() self._post_init() - if hasattr(self, "_collector"): - self._collector.reset() + self._collector.reset() self._init_data(suffix=None) self._data.erase(parallel=self.config.parallel) - del self._data + self._data = CoverageDataPlacebo() self._inited_for_start = False def switch_context(self, new_context: str) -> None: @@ -709,7 +710,6 @@ def exclude(self, regex: str, which: str = 'exclude') -> None: """ self._init() excl_list = getattr(self.config, which + "_list") - assert isinstance(regex, str) excl_list.append(regex) self._exclude_regex_stale() @@ -814,7 +814,7 @@ def get_data(self) -> CoverageData: if not plugin._coverage_enabled: self._collector.plugin_was_disabled(plugin) - if hasattr(self, "_collector") and self._collector.flush_data(): + if self._collector.flush_data(): self._post_save_work() return self._data @@ -837,13 +837,12 @@ def _post_save_work(self) -> None: # Touch all the files that could have executed, so that we can # mark completely un-executed files as 0% covered. - if self._data is not None: - file_paths = collections.defaultdict(list) - for file_path, plugin_name in self._inorout.find_possibly_unexecuted_files(): - file_path = self._file_mapper(file_path) - file_paths[plugin_name].append(file_path) - for plugin_name, paths in file_paths.items(): - self._data.touch_files(paths, plugin_name) + file_paths = collections.defaultdict(list) + for file_path, plugin_name in self._inorout.find_possibly_unexecuted_files(): + file_path = self._file_mapper(file_path) + file_paths[plugin_name].append(file_path) + for plugin_name, paths in file_paths.items(): + self._data.touch_files(paths, plugin_name) # Backward compatibility with version 1. def analysis(self, morf: TMorf) -> Tuple[str, List[TLineNo], List[TLineNo], str]: @@ -1253,7 +1252,7 @@ def plugin_info(plugins: List[Any]) -> List[str]: info = [ ('coverage_version', covmod.__version__), ('coverage_module', covmod.__file__), - ('tracer', self._collector.tracer_name() if hasattr(self, "_collector") else "-none-"), + ('tracer', self._collector.tracer_name()), ('CTracer', 'available' if HAS_CTRACER else "unavailable"), ('plugins.file_tracers', plugin_info(self._plugins.file_tracers)), ('plugins.configurers', plugin_info(self._plugins.configurers)), @@ -1264,7 +1263,7 @@ def plugin_info(plugins: List[Any]) -> List[str]: ('config_contents', repr(self.config._config_contents) if self.config._config_contents else '-none-' ), - ('data_file', self._data.data_filename() if hasattr(self, "_data") else "-none-"), + ('data_file', self._data.data_filename()), ('python', sys.version.replace('\n', '')), ('platform', platform.platform()), ('implementation', platform.python_implementation()), @@ -1285,14 +1284,44 @@ def plugin_info(plugins: List[Any]) -> List[str]: ('command_line', " ".join(getattr(sys, 'argv', ['-none-']))), ] - if hasattr(self, "_inorout"): - info.extend(self._inorout.sys_info()) - + info.extend(self._inorout.sys_info()) info.extend(CoverageData.sys_info()) return info +class _Placebo: + """Base class for placebos, to prevent calling the real base class __init__.""" + def __init__(self) -> None: + ... + + +class CoverageDataPlacebo(_Placebo, CoverageData): + """Just enough of a CoverageData to be used when we don't have a real one.""" + _real = False + + def data_filename(self) -> str: + return "-none-" + + +class CollectorPlacebo(_Placebo, Collector): + """Just enough of a Collector to be used when we don't have a real one.""" + def reset(self) -> None: + ... + + def flush_data(self) -> bool: + return False + + def tracer_name(self) -> str: + return "-none-" + + +class InOrOutPlacebo(_Placebo, InOrOut): + """Just enough of an InOrOut to be used when we don't have a real one.""" + def sys_info(self) -> Iterable[Tuple[str, Any]]: + return [] + + # Mega debugging... # $set_env.py: COVERAGE_DEBUG_CALLS - Lots and lots of output about calls to Coverage. if int(os.environ.get("COVERAGE_DEBUG_CALLS", 0)): # pragma: debugging diff --git a/coverage/debug.py b/coverage/debug.py index 122339597..d56a66bb8 100644 --- a/coverage/debug.py +++ b/coverage/debug.py @@ -105,9 +105,13 @@ def get_output(self) -> str: return cast(str, self.raw_output.getvalue()) # type: ignore -class NoDebugging: +class NoDebugging(DebugControl): """A replacement for DebugControl that will never try to do anything.""" - def should(self, option: str) -> bool: # pylint: disable=unused-argument + def __init__(self) -> None: + # pylint: disable=super-init-not-called + ... + + def should(self, option: str) -> bool: """Should we write debug messages? Never.""" return False diff --git a/coverage/sqldata.py b/coverage/sqldata.py index 9aa2b1293..bb26e4d5d 100644 --- a/coverage/sqldata.py +++ b/coverage/sqldata.py @@ -212,6 +212,8 @@ class CoverageData(AutoReprMixin): """ + _real = True # to distinguish from a placebo in control.py + def __init__( self, basename: Optional[str] = None, From f77be1770a9d93ed69d6b5a26dcbe5dbfe14e380 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Sun, 12 Feb 2023 09:27:25 -0500 Subject: [PATCH 058/139] fix: Path objects are ok for data_file and config_file. #1552 --- CHANGES.rst | 7 ++++++- coverage/control.py | 10 +++++++--- coverage/sqldata.py | 4 ++-- coverage/types.py | 13 ++++++++++++- tests/test_api.py | 12 +++++++----- tests/test_config.py | 8 +++++--- tests/test_data.py | 9 ++++++--- 7 files changed, 45 insertions(+), 18 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index f336cff58..1c27501da 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -27,6 +27,11 @@ Unreleased themselves with messages like "Wrote XML report to file.xml" before spewing a traceback about their failure. +- Fix: arguments in the public API that name file paths now accept pathlib.Path + objects. This includes the ``data_file`` and ``config_file`` arguments to + the Coverage constructor and the ``basename`` argument to CoverageData. + Closes `issue 1552`_. + - Fix: In some embedded environments, an IndexError could occur on stop() when the originating thread exits before completion. This is now fixed, thanks to `Russell Keith-Magee <pull 1543_>`_, closing `issue 1542`_. @@ -38,7 +43,7 @@ Unreleased .. _pull 1543: https://github.com/nedbat/coveragepy/pull/1543 .. _pull 1547: https://github.com/nedbat/coveragepy/pull/1547 .. _pull 1550: https://github.com/nedbat/coveragepy/pull/1550 - +.. _issue 1552: https://github.com/nedbat/coveragepy/issues/1552 .. scriv-start-here diff --git a/coverage/control.py b/coverage/control.py index cdea42eed..e385f0e2a 100644 --- a/coverage/control.py +++ b/coverage/control.py @@ -47,7 +47,7 @@ from coverage.results import Analysis from coverage.summary import SummaryReporter from coverage.types import ( - TConfigurable, TConfigSectionIn, TConfigValueIn, TConfigValueOut, + FilePath, TConfigurable, TConfigSectionIn, TConfigValueIn, TConfigValueOut, TFileDisposition, TLineNo, TMorf, ) from coverage.xmlreport import XmlReporter @@ -113,13 +113,13 @@ def current(cls) -> Optional[Coverage]: def __init__( # pylint: disable=too-many-arguments self, - data_file: Optional[Union[str, DefaultValue]] = DEFAULT_DATAFILE, + data_file: Optional[Union[FilePath, DefaultValue]] = DEFAULT_DATAFILE, data_suffix: Optional[Union[str, bool]] = None, cover_pylib: Optional[bool] = None, auto_data: bool = False, timid: Optional[bool] = None, branch: Optional[bool] = None, - config_file: Union[str, bool] = True, + config_file: Union[FilePath, bool] = True, source: Optional[Iterable[str]] = None, source_pkgs: Optional[Iterable[str]] = None, omit: Optional[Union[str, Iterable[str]]] = None, @@ -227,6 +227,8 @@ def __init__( # pylint: disable=too-many-arguments self._no_disk = data_file is None if isinstance(data_file, DefaultValue): data_file = None + if data_file is not None: + data_file = os.fspath(data_file) # This is injectable by tests. self._debug_file: Optional[IO[str]] = None @@ -267,6 +269,8 @@ def __init__( # pylint: disable=too-many-arguments self._should_write_debug = True # Build our configuration from a number of sources. + if not isinstance(config_file, bool): + config_file = os.fspath(config_file) self.config = read_coverage_config( config_file=config_file, warn=self._warn, diff --git a/coverage/sqldata.py b/coverage/sqldata.py index bb26e4d5d..15b30ae90 100644 --- a/coverage/sqldata.py +++ b/coverage/sqldata.py @@ -31,7 +31,7 @@ from coverage.files import PathAliases from coverage.misc import file_be_gone, isolate_module from coverage.numbits import numbits_to_nums, numbits_union, nums_to_numbits -from coverage.types import TArc, TDebugCtl, TLineNo, TWarnFn +from coverage.types import FilePath, TArc, TDebugCtl, TLineNo, TWarnFn from coverage.version import __version__ os = isolate_module(os) @@ -216,7 +216,7 @@ class CoverageData(AutoReprMixin): def __init__( self, - basename: Optional[str] = None, + basename: Optional[FilePath] = None, suffix: Optional[Union[str, bool]] = None, no_disk: bool = False, warn: Optional[TWarnFn] = None, diff --git a/coverage/types.py b/coverage/types.py index b8135d05b..e01f451e6 100644 --- a/coverage/types.py +++ b/coverage/types.py @@ -7,9 +7,12 @@ from __future__ import annotations +import os +import pathlib + from types import FrameType, ModuleType from typing import ( - Any, Callable, Dict, Iterable, List, Mapping, Optional, Set, Tuple, Union, + Any, Callable, Dict, Iterable, List, Mapping, Optional, Set, Tuple, Type, Union, TYPE_CHECKING, ) @@ -23,6 +26,14 @@ class Protocol: # pylint: disable=missing-class-docstring pass +## File paths + +# For arguments that are file paths: +FilePath = Union[str, os.PathLike] +# For testing FilePath arguments +FilePathClasses = [str, pathlib.Path] +FilePathType = Union[Type[str], Type[pathlib.Path]] + ## Python tracing class TTraceFn(Protocol): diff --git a/tests/test_api.py b/tests/test_api.py index 1c5654216..596510ebc 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -25,7 +25,7 @@ from coverage.exceptions import CoverageException, DataError, NoDataError, NoSource from coverage.files import abs_file, relative_filename from coverage.misc import import_local_file -from coverage.types import Protocol, TCovKwargs +from coverage.types import FilePathClasses, FilePathType, Protocol, TCovKwargs from tests.coveragetest import CoverageTest, TESTS_DIR, UsingModulesMixin from tests.goldtest import contains, doesnt_contain @@ -221,26 +221,28 @@ def test_datafile_default(self) -> None: cov.save() self.assertFiles(["datatest1.py", ".coverage"]) - def test_datafile_specified(self) -> None: + @pytest.mark.parametrize("file_class", FilePathClasses) + def test_datafile_specified(self, file_class: FilePathType) -> None: # You can specify the data file name. self.make_file("datatest2.py", """\ fooey = 17 """) self.assertFiles(["datatest2.py"]) - cov = coverage.Coverage(data_file="cov.data") + cov = coverage.Coverage(data_file=file_class("cov.data")) self.start_import_stop(cov, "datatest2") cov.save() self.assertFiles(["datatest2.py", "cov.data"]) - def test_datafile_and_suffix_specified(self) -> None: + @pytest.mark.parametrize("file_class", FilePathClasses) + def test_datafile_and_suffix_specified(self, file_class: FilePathType) -> None: # You can specify the data file name and suffix. self.make_file("datatest3.py", """\ fooey = 17 """) self.assertFiles(["datatest3.py"]) - cov = coverage.Coverage(data_file="cov.data", data_suffix="14") + cov = coverage.Coverage(data_file=file_class("cov.data"), data_suffix="14") self.start_import_stop(cov, "datatest3") cov.save() self.assertFiles(["datatest3.py", "cov.data.14"]) diff --git a/tests/test_config.py b/tests/test_config.py index d60a4eeb0..2ee5eae08 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -6,8 +6,8 @@ from __future__ import annotations import sys - from unittest import mock + import pytest import coverage @@ -15,6 +15,7 @@ from coverage.config import HandyConfigParser from coverage.exceptions import ConfigError, CoverageWarning from coverage.tomlconfig import TomlConfigParser +from coverage.types import FilePathClasses, FilePathType from tests.coveragetest import CoverageTest, UsingModulesMixin @@ -50,7 +51,8 @@ def test_config_file(self) -> None: assert not cov.config.branch assert cov.config.data_file == ".hello_kitty.data" - def test_named_config_file(self) -> None: + @pytest.mark.parametrize("file_class", FilePathClasses) + def test_named_config_file(self, file_class: FilePathType) -> None: # You can name the config file what you like. self.make_file("my_cov.ini", """\ [run] @@ -58,7 +60,7 @@ def test_named_config_file(self) -> None: ; I wouldn't really use this as a data file... data_file = delete.me """) - cov = coverage.Coverage(config_file="my_cov.ini") + cov = coverage.Coverage(config_file=file_class("my_cov.ini")) assert cov.config.timid assert not cov.config.branch assert cov.config.data_file == "delete.me" diff --git a/tests/test_data.py b/tests/test_data.py index 1cc645720..ab3f5f5ba 100644 --- a/tests/test_data.py +++ b/tests/test_data.py @@ -24,7 +24,7 @@ from coverage.debug import DebugControlString from coverage.exceptions import DataError, NoDataError from coverage.files import PathAliases, canonical_filename -from coverage.types import TArc, TLineNo +from coverage.types import FilePathClasses, FilePathType, TArc, TLineNo from tests.coveragetest import CoverageTest from tests.helpers import assert_count_equal @@ -621,10 +621,13 @@ def test_cant_purge_in_empty_data(self) -> None: class CoverageDataInTempDirTest(CoverageTest): """Tests of CoverageData that need a temporary directory to make files.""" - def test_read_write_lines(self) -> None: - covdata1 = DebugCoverageData("lines.dat") + @pytest.mark.parametrize("file_class", FilePathClasses) + def test_read_write_lines(self, file_class: FilePathType) -> None: + self.assert_doesnt_exist("lines.dat") + covdata1 = DebugCoverageData(file_class("lines.dat")) covdata1.add_lines(LINES_1) covdata1.write() + self.assert_exists("lines.dat") covdata2 = DebugCoverageData("lines.dat") covdata2.read() From 83c038a8aa262a51ecc44eebfc3b19c1fe712222 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Sun, 12 Feb 2023 13:54:14 -0500 Subject: [PATCH 059/139] refactor: make placebos private --- coverage/control.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/coverage/control.py b/coverage/control.py index e385f0e2a..d452b8d8b 100644 --- a/coverage/control.py +++ b/coverage/control.py @@ -249,10 +249,10 @@ def __init__( # pylint: disable=too-many-arguments # Other instance attributes, set with placebos or placeholders. # More useful objects will be created later. self._debug: DebugControl = NoDebugging() - self._inorout: InOrOut = InOrOutPlacebo() + self._inorout: InOrOut = _InOrOutPlacebo() self._plugins: Plugins = Plugins() - self._data: CoverageData = CoverageDataPlacebo() - self._collector: Collector = CollectorPlacebo() + self._data: CoverageData = _CoverageDataPlacebo() + self._collector: Collector = _CollectorPlacebo() self._file_mapper: Callable[[str], str] = abs_file self._data_suffix = self._run_suffix = None @@ -667,7 +667,7 @@ def erase(self) -> None: self._collector.reset() self._init_data(suffix=None) self._data.erase(parallel=self.config.parallel) - self._data = CoverageDataPlacebo() + self._data = _CoverageDataPlacebo() self._inited_for_start = False def switch_context(self, new_context: str) -> None: @@ -1300,7 +1300,7 @@ def __init__(self) -> None: ... -class CoverageDataPlacebo(_Placebo, CoverageData): +class _CoverageDataPlacebo(_Placebo, CoverageData): """Just enough of a CoverageData to be used when we don't have a real one.""" _real = False @@ -1308,7 +1308,7 @@ def data_filename(self) -> str: return "-none-" -class CollectorPlacebo(_Placebo, Collector): +class _CollectorPlacebo(_Placebo, Collector): """Just enough of a Collector to be used when we don't have a real one.""" def reset(self) -> None: ... @@ -1320,7 +1320,7 @@ def tracer_name(self) -> str: return "-none-" -class InOrOutPlacebo(_Placebo, InOrOut): +class _InOrOutPlacebo(_Placebo, InOrOut): """Just enough of an InOrOut to be used when we don't have a real one.""" def sys_info(self) -> Iterable[Tuple[str, Any]]: return [] From d06ace282bf26c5c7f3becb21db0cdd028ec0d9a Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Fri, 10 Feb 2023 12:23:25 -0700 Subject: [PATCH 060/139] docs: don't show type hints in the signature List the parameters separately, with type hints. This leaves a list of params with dashes and no description, but we can get to that later. --- doc/conf.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/doc/conf.py b/doc/conf.py index 39601fab2..9be27efd3 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -43,6 +43,8 @@ #'sphinx_tabs.tabs', ] +autodoc_typehints = "description" + # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] @@ -126,6 +128,10 @@ nitpick_ignore = [ ("py:class", "frame"), ("py:class", "module"), + ("py:class", "DefaultValue"), + ("py:class", "FilePath"), + ("py:class", "TWarnFn"), + ("py:class", "TDebugCtl"), ] nitpick_ignore_regex = [ From 026d924e6d9449c632b1fec0c1f82f4f867e9724 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Mon, 13 Feb 2023 18:29:25 -0500 Subject: [PATCH 061/139] refactor: no placebos, use true Optional For objects that truly might not exist, use Optional. Some objects will always exist eventually, and for those we have some null implementation standins to use without making new placebo classes. --- coverage/control.py | 87 +++++++++++++++++++------------------------ coverage/sqldata.py | 2 - tests/test_oddball.py | 1 + 3 files changed, 40 insertions(+), 50 deletions(-) diff --git a/coverage/control.py b/coverage/control.py index d452b8d8b..290da655c 100644 --- a/coverage/control.py +++ b/coverage/control.py @@ -249,10 +249,10 @@ def __init__( # pylint: disable=too-many-arguments # Other instance attributes, set with placebos or placeholders. # More useful objects will be created later. self._debug: DebugControl = NoDebugging() - self._inorout: InOrOut = _InOrOutPlacebo() + self._inorout: Optional[InOrOut] = None self._plugins: Plugins = Plugins() - self._data: CoverageData = _CoverageDataPlacebo() - self._collector: Collector = _CollectorPlacebo() + self._data: Optional[CoverageData] = None + self._collector: Optional[Collector] = None self._file_mapper: Callable[[str], str] = abs_file self._data_suffix = self._run_suffix = None @@ -378,6 +378,7 @@ def _should_trace(self, filename: str, frame: FrameType) -> TFileDisposition: Calls `_should_trace_internal`, and returns the FileDisposition. """ + assert self._inorout is not None disp = self._inorout.should_trace(filename, frame) if self._debug.should('trace'): self._debug.write(disposition_debug_msg(disp)) @@ -389,6 +390,7 @@ def _check_include_omit_etc(self, filename: str, frame: FrameType) -> bool: Returns a boolean: True if the file should be traced, False if not. """ + assert self._inorout is not None reason = self._inorout.check_include_omit_etc(filename, frame) if self._debug.should('trace'): if not reason: @@ -484,12 +486,14 @@ def set_option(self, option_name: str, value: Union[TConfigValueIn, TConfigSecti def load(self) -> None: """Load previously-collected coverage data from the data file.""" self._init() - self._collector.reset() + if self._collector is not None: + self._collector.reset() should_skip = self.config.parallel and not os.path.exists(self.config.data_file) if not should_skip: self._init_data(suffix=None) self._post_init() if not should_skip: + assert self._data is not None self._data.read() def _init_for_start(self) -> None: @@ -541,6 +545,7 @@ def _init_for_start(self) -> None: self._init_data(suffix) + assert self._data is not None self._collector.use_data(self._data, self.config.context) # Early warning if we aren't going to be able to support plugins. @@ -584,7 +589,7 @@ def _init_for_start(self) -> None: def _init_data(self, suffix: Optional[Union[str, bool]]) -> None: """Create a data file if we don't have one yet.""" - if not self._data._real: + if self._data is None: # Create the data file. We do this at construction time so that the # data file will be written into the directory where the process # started rather than wherever the process eventually chdir'd to. @@ -614,6 +619,9 @@ def start(self) -> None: self._init_for_start() self._post_init() + assert self._collector is not None + assert self._inorout is not None + # Issue warnings for possible problems. self._inorout.warn_conflicting_settings() @@ -635,6 +643,7 @@ def stop(self) -> None: if self._instances[-1] is self: self._instances.pop() if self._started: + assert self._collector is not None self._collector.stop() self._started = False @@ -664,10 +673,12 @@ def erase(self) -> None: """ self._init() self._post_init() - self._collector.reset() + if self._collector is not None: + self._collector.reset() self._init_data(suffix=None) + assert self._data is not None self._data.erase(parallel=self.config.parallel) - self._data = _CoverageDataPlacebo() + self._data = None self._inited_for_start = False def switch_context(self, new_context: str) -> None: @@ -686,6 +697,7 @@ def switch_context(self, new_context: str) -> None: if not self._started: # pragma: part started raise CoverageException("Cannot switch context, coverage is not started") + assert self._collector is not None if self._collector.should_start_context: self._warn("Conflicting dynamic contexts", slug="dynamic-conflict", once=True) @@ -791,6 +803,7 @@ def combine( self._post_init() self.get_data() + assert self._data is not None combine_parallel_data( self._data, aliases=self._make_aliases(), @@ -814,13 +827,15 @@ def get_data(self) -> CoverageData: self._init_data(suffix=None) self._post_init() - for plugin in self._plugins: - if not plugin._coverage_enabled: - self._collector.plugin_was_disabled(plugin) + if self._collector is not None: + for plugin in self._plugins: + if not plugin._coverage_enabled: + self._collector.plugin_was_disabled(plugin) - if self._collector.flush_data(): - self._post_save_work() + if self._collector.flush_data(): + self._post_save_work() + assert self._data is not None return self._data def _post_save_work(self) -> None: @@ -830,6 +845,9 @@ def _post_save_work(self) -> None: Look for un-executed files. """ + assert self._data is not None + assert self._inorout is not None + # If there are still entries in the source_pkgs_unmatched list, # then we never encountered those packages. if self._warn_unimported_source: @@ -903,6 +921,7 @@ def _analyze(self, it: Union[FileReporter, TMorf]) -> Analysis: def _get_file_reporter(self, morf: TMorf) -> FileReporter: """Get a FileReporter for a module or file name.""" + assert self._data is not None plugin = None file_reporter: Union[str, FileReporter] = "python" @@ -938,6 +957,7 @@ def _get_file_reporters(self, morfs: Optional[Iterable[TMorf]] = None) -> List[F measured is used to find the FileReporters. """ + assert self._data is not None if not morfs: morfs = self._data.measured_files() @@ -952,7 +972,8 @@ def _prepare_data_for_reporting(self) -> None: """Re-map data before reporting, to get implicit 'combine' behavior.""" if self.config.paths: mapped_data = CoverageData(warn=self._warn, debug=self._debug, no_disk=True) - mapped_data.update(self._data, aliases=self._make_aliases()) + if self._data is not None: + mapped_data.update(self._data, aliases=self._make_aliases()) self._data = mapped_data def report( @@ -1256,7 +1277,7 @@ def plugin_info(plugins: List[Any]) -> List[str]: info = [ ('coverage_version', covmod.__version__), ('coverage_module', covmod.__file__), - ('tracer', self._collector.tracer_name()), + ('tracer', self._collector.tracer_name() if self._collector is not None else "-none-"), ('CTracer', 'available' if HAS_CTRACER else "unavailable"), ('plugins.file_tracers', plugin_info(self._plugins.file_tracers)), ('plugins.configurers', plugin_info(self._plugins.configurers)), @@ -1267,7 +1288,7 @@ def plugin_info(plugins: List[Any]) -> List[str]: ('config_contents', repr(self.config._config_contents) if self.config._config_contents else '-none-' ), - ('data_file', self._data.data_filename()), + ('data_file', self._data.data_filename() if self._data is not None else "-none-"), ('python', sys.version.replace('\n', '')), ('platform', platform.platform()), ('implementation', platform.python_implementation()), @@ -1288,44 +1309,14 @@ def plugin_info(plugins: List[Any]) -> List[str]: ('command_line', " ".join(getattr(sys, 'argv', ['-none-']))), ] - info.extend(self._inorout.sys_info()) + if self._inorout is not None: + info.extend(self._inorout.sys_info()) + info.extend(CoverageData.sys_info()) return info -class _Placebo: - """Base class for placebos, to prevent calling the real base class __init__.""" - def __init__(self) -> None: - ... - - -class _CoverageDataPlacebo(_Placebo, CoverageData): - """Just enough of a CoverageData to be used when we don't have a real one.""" - _real = False - - def data_filename(self) -> str: - return "-none-" - - -class _CollectorPlacebo(_Placebo, Collector): - """Just enough of a Collector to be used when we don't have a real one.""" - def reset(self) -> None: - ... - - def flush_data(self) -> bool: - return False - - def tracer_name(self) -> str: - return "-none-" - - -class _InOrOutPlacebo(_Placebo, InOrOut): - """Just enough of an InOrOut to be used when we don't have a real one.""" - def sys_info(self) -> Iterable[Tuple[str, Any]]: - return [] - - # Mega debugging... # $set_env.py: COVERAGE_DEBUG_CALLS - Lots and lots of output about calls to Coverage. if int(os.environ.get("COVERAGE_DEBUG_CALLS", 0)): # pragma: debugging diff --git a/coverage/sqldata.py b/coverage/sqldata.py index 15b30ae90..42cf4501d 100644 --- a/coverage/sqldata.py +++ b/coverage/sqldata.py @@ -212,8 +212,6 @@ class CoverageData(AutoReprMixin): """ - _real = True # to distinguish from a placebo in control.py - def __init__( self, basename: Optional[FilePath] = None, diff --git a/tests/test_oddball.py b/tests/test_oddball.py index e4147dc6c..2bcb42766 100644 --- a/tests/test_oddball.py +++ b/tests/test_oddball.py @@ -124,6 +124,7 @@ def recur(n): with swallow_warnings("Trace function changed, data is likely wrong: None"): self.start_import_stop(cov, "recur") + assert cov._collector is not None pytrace = (cov._collector.tracer_name() == "PyTracer") expected_missing = [3] if pytrace: # pragma: no metacov From 7887212bda71bd2e3181bd692d2f521428bbb6c0 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Tue, 14 Feb 2023 05:47:43 -0500 Subject: [PATCH 062/139] build: pin setuptools to avoid their version-checking bug https://github.com/pypa/packaging/issues/678 Nightly builds were failing because newer setuptools didn't like the Python version number: ``` % .tox/anypy/bin/python -c "import pkg_resources as p; p.load_entry_point('coverage', 'console_scripts', 'coverage')()" Traceback (most recent call last): File "/Users/nedbatchelder/coverage/trunk/.tox/anypy/lib/python3.12/site-packages/pkg_resources/__init__.py", line 2711, in _dep_map return self.__dep_map ^^^^^^^^^^^^^^ File "/Users/nedbatchelder/coverage/trunk/.tox/anypy/lib/python3.12/site-packages/pkg_resources/__init__.py", line 2826, in __getattr__ raise AttributeError(attr) AttributeError: _Distribution__dep_map During handling of the above exception, another exception occurred: Traceback (most recent call last): File "<string>", line 1, in <module> File "/Users/nedbatchelder/coverage/trunk/.tox/anypy/lib/python3.12/site-packages/pkg_resources/__init__.py", line 522, in load_entry_point return get_distribution(dist).load_entry_point(group, name) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/nedbatchelder/coverage/trunk/.tox/anypy/lib/python3.12/site-packages/pkg_resources/__init__.py", line 2855, in load_entry_point return ep.load() ^^^^^^^^^ File "/Users/nedbatchelder/coverage/trunk/.tox/anypy/lib/python3.12/site-packages/pkg_resources/__init__.py", line 2467, in load self.require(*args, **kwargs) File "/Users/nedbatchelder/coverage/trunk/.tox/anypy/lib/python3.12/site-packages/pkg_resources/__init__.py", line 2489, in require reqs = self.dist.requires(self.extras) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/nedbatchelder/coverage/trunk/.tox/anypy/lib/python3.12/site-packages/pkg_resources/__init__.py", line 2746, in requires dm = self._dep_map ^^^^^^^^^^^^^ File "/Users/nedbatchelder/coverage/trunk/.tox/anypy/lib/python3.12/site-packages/pkg_resources/__init__.py", line 2713, in _dep_map self.__dep_map = self._filter_extras(self._build_dep_map()) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/nedbatchelder/coverage/trunk/.tox/anypy/lib/python3.12/site-packages/pkg_resources/__init__.py", line 2728, in _filter_extras invalid_marker(marker) or not evaluate_marker(marker) ^^^^^^^^^^^^^^^^^^^^^^ File "/Users/nedbatchelder/coverage/trunk/.tox/anypy/lib/python3.12/site-packages/pkg_resources/__init__.py", line 1415, in invalid_marker evaluate_marker(text) File "/Users/nedbatchelder/coverage/trunk/.tox/anypy/lib/python3.12/site-packages/pkg_resources/__init__.py", line 1433, in evaluate_marker return marker.evaluate() ^^^^^^^^^^^^^^^^^ File "/Users/nedbatchelder/coverage/trunk/.tox/anypy/lib/python3.12/site-packages/pkg_resources/_vendor/packaging/markers.py", line 245, in evaluate return _evaluate_markers(self._markers, current_environment) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/nedbatchelder/coverage/trunk/.tox/anypy/lib/python3.12/site-packages/pkg_resources/_vendor/packaging/markers.py", line 151, in _evaluate_markers groups[-1].append(_eval_op(lhs_value, op, rhs_value)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/nedbatchelder/coverage/trunk/.tox/anypy/lib/python3.12/site-packages/pkg_resources/_vendor/packaging/markers.py", line 109, in _eval_op return spec.contains(lhs, prereleases=True) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/nedbatchelder/coverage/trunk/.tox/anypy/lib/python3.12/site-packages/pkg_resources/_vendor/packaging/specifiers.py", line 565, in contains normalized_item = _coerce_version(item) ^^^^^^^^^^^^^^^^^^^^^ File "/Users/nedbatchelder/coverage/trunk/.tox/anypy/lib/python3.12/site-packages/pkg_resources/_vendor/packaging/specifiers.py", line 36, in _coerce_version version = Version(version) ^^^^^^^^^^^^^^^^ File "/Users/nedbatchelder/coverage/trunk/.tox/anypy/lib/python3.12/site-packages/pkg_resources/_vendor/packaging/version.py", line 197, in __init__ raise InvalidVersion(f"Invalid version: '{version}'") pkg_resources.extern.packaging.version.InvalidVersion: Invalid version: '3.12.0a5+' ``` --- doc/requirements.pip | 18 ++++++++----- requirements/dev.pip | 44 ++++++++++++++++--------------- requirements/kit.pip | 16 +++++++----- requirements/light-threads.pip | 17 +++++++----- requirements/lint.pip | 47 ++++++++++++++++++---------------- requirements/mypy.pip | 12 ++++----- requirements/pins.pip | 5 ++++ requirements/pip-tools.pip | 26 +++++++++++-------- requirements/pip.in | 1 + requirements/pip.pip | 20 ++++++++++----- requirements/pytest.pip | 12 ++++----- requirements/tox.pip | 6 ++--- 12 files changed, 128 insertions(+), 96 deletions(-) diff --git a/doc/requirements.pip b/doc/requirements.pip index fe681f159..875333d05 100644 --- a/doc/requirements.pip +++ b/doc/requirements.pip @@ -241,10 +241,6 @@ scriv==1.2.0 \ --hash=sha256:26b65a903da7d9aefc712a0d4150b8638302b4758bd428bbd773dd918c61c621 \ --hash=sha256:bb61c30fea73158a4d18c28bbb57821c308245683efb0d897bd45e4a7856b472 # via -r doc/requirements.in -setuptools==67.2.0 \ - --hash=sha256:16ccf598aab3b506593c17378473978908a2734d7336755a8769b480906bec1c \ - --hash=sha256:b440ee5f7e607bb8c9de15259dba2583dd41a38879a7abc1d43a71c59524da48 - # via sphinxcontrib-jquery six==1.16.0 \ --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 @@ -327,7 +323,15 @@ urllib3==1.26.14 \ --hash=sha256:076907bf8fd355cde77728471316625a4d2f7e713c125f51953bb5b3eecf4f72 \ --hash=sha256:75edcdc2f7d85b137124a6c3c9fc3933cdeaa12ecb9a6a959f22797a0feca7e1 # via requests -zipp==3.12.1 \ - --hash=sha256:6c4fe274b8f85ec73c37a8e4e3fa00df9fb9335da96fb789e3b96b318e5097b3 \ - --hash=sha256:a3cac813d40993596b39ea9e93a18e8a2076d5c378b8bc88ec32ab264e04ad02 +zipp==3.13.0 \ + --hash=sha256:23f70e964bc11a34cef175bc90ba2914e1e4545ea1e3e2f67c079671883f9cb6 \ + --hash=sha256:e8b2a36ea17df80ffe9e2c4fda3f693c3dad6df1697d3cd3af232db680950b0b # via importlib-metadata + +# The following packages are considered to be unsafe in a requirements file: +setuptools==65.7.0 \ + --hash=sha256:4d3c92fac8f1118bb77a22181355e29c239cabfe2b9effdaa665c66b711136d7 \ + --hash=sha256:8ab4f1dbf2b4a65f7eec5ad0c620e84c34111a68d3349833494b9088212214dd + # via + # -c doc/../requirements/pins.pip + # sphinxcontrib-jquery diff --git a/requirements/dev.pip b/requirements/dev.pip index af6838299..c19b00138 100644 --- a/requirements/dev.pip +++ b/requirements/dev.pip @@ -4,9 +4,9 @@ # # make upgrade # -astroid==2.14.1 \ - --hash=sha256:23c718921acab5f08cbbbe9293967f1f8fec40c336d19cd75dc12a9ea31d2eb2 \ - --hash=sha256:bd1aa4f9915c98e8aaebcd4e71930154d4e8c9aaf05d35ac0a63d1956091ae3f +astroid==2.14.2 \ + --hash=sha256:0e0e3709d64fbffd3037e4ff403580550f14471fd3eaae9fa11cc9a5c7901153 \ + --hash=sha256:a3cf9f02c53dd259144a7e8f3ccd75d67c9a8c716ef183e0c1f291bc5d7bb3cf # via pylint attrs==22.2.0 \ --hash=sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836 \ @@ -246,9 +246,9 @@ greenlet==2.0.2 \ --hash=sha256:f82d4d717d8ef19188687aa32b8363e96062911e63ba22a0cff7802a8e58e5f1 \ --hash=sha256:fc3a569657468b6f3fb60587e48356fe512c1754ca05a564f11366ac9e306526 # via -r requirements/dev.in -hypothesis==6.68.0 \ - --hash=sha256:064a5bf7a98cbdfa3589d8934a2c548524c6d108bfa368ec5ed8b09caa526108 \ - --hash=sha256:8cfa1de15271debb2750545a460e58e3e84527d94157f38ab9309826953572f3 +hypothesis==6.68.1 \ + --hash=sha256:3ff6076920e61d4e6362e93edaf09be3034ea7e39e3a75e731d4d1c525dafd84 \ + --hash=sha256:b37bd77b4b7f404a59ff965e24be8aec4209323866e34ececdf416522c6d0854 # via -r requirements/pytest.pip idna==3.4 \ --hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 \ @@ -369,10 +369,6 @@ parso==0.8.3 \ --hash=sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0 \ --hash=sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75 # via jedi -pip==23.0 \ - --hash=sha256:aee438284e82c8def684b0bcc50b1f6ed5e941af97fa940e83e2e8ef1a59da9b \ - --hash=sha256:b5f88adff801f5ef052bcdef3daa31b55eb67b0fccd6d0106c206fa248e0463c - # via -r requirements/pip.pip pkginfo==1.9.6 \ --hash=sha256:4b7a555a6d5a22169fcc9cf7bfd78d296b0361adad412a346c1226849af5e546 \ --hash=sha256:8fd5896e8718a4372f0ea9cc9d96f6417c9b986e23a4d116dda26b62cc29d046 @@ -404,9 +400,9 @@ pygments==2.14.0 \ # pudb # readme-renderer # rich -pylint==2.16.1 \ - --hash=sha256:bad9d7c36037f6043a1e848a43004dfd5ea5ceb05815d713ba56ca4503a9fe37 \ - --hash=sha256:ffe7fa536bb38ba35006a7c8a6d2efbfdd3d95bbf21199cad31f76b1c50aaf30 +pylint==2.16.2 \ + --hash=sha256:13b2c805a404a9bf57d002cd5f054ca4d40b0b87542bdaba5e05321ae8262c84 \ + --hash=sha256:ff22dde9c2128cd257c145cfd51adeff0be7df4d80d669055f24a962b351bbe4 # via -r requirements/dev.in pyproject-api==1.5.0 \ --hash=sha256:0962df21f3e633b8ddb9567c011e6c1b3dcdfc31b7860c0ede7e24c5a1200fbe \ @@ -453,10 +449,6 @@ rich==13.3.1 \ --hash=sha256:125d96d20c92b946b983d0d392b84ff945461e5a06d3867e9f9e575f8697b67f \ --hash=sha256:8aa57747f3fc3e977684f0176a88e789be314a99f99b43b75d1e9cb5dc6db9e9 # via twine -setuptools==67.2.0 \ - --hash=sha256:16ccf598aab3b506593c17378473978908a2734d7336755a8769b480906bec1c \ - --hash=sha256:b440ee5f7e607bb8c9de15259dba2583dd41a38879a7abc1d43a71c59524da48 - # via check-manifest six==1.16.0 \ --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 @@ -628,11 +620,23 @@ wrapt==1.14.1 \ --hash=sha256:ee6acae74a2b91865910eef5e7de37dc6895ad96fa23603d1d27ea69df545015 \ --hash=sha256:ef3f72c9666bba2bab70d2a8b79f2c6d2c1a42a7f7e2b0ec83bb2f9e383950af # via astroid -zipp==3.12.1 \ - --hash=sha256:6c4fe274b8f85ec73c37a8e4e3fa00df9fb9335da96fb789e3b96b318e5097b3 \ - --hash=sha256:a3cac813d40993596b39ea9e93a18e8a2076d5c378b8bc88ec32ab264e04ad02 +zipp==3.13.0 \ + --hash=sha256:23f70e964bc11a34cef175bc90ba2914e1e4545ea1e3e2f67c079671883f9cb6 \ + --hash=sha256:e8b2a36ea17df80ffe9e2c4fda3f693c3dad6df1697d3cd3af232db680950b0b # via # -r requirements/pip.pip # -r requirements/pytest.pip # importlib-metadata # importlib-resources + +# The following packages are considered to be unsafe in a requirements file: +pip==23.0 \ + --hash=sha256:aee438284e82c8def684b0bcc50b1f6ed5e941af97fa940e83e2e8ef1a59da9b \ + --hash=sha256:b5f88adff801f5ef052bcdef3daa31b55eb67b0fccd6d0106c206fa248e0463c + # via -r requirements/pip.pip +setuptools==65.7.0 \ + --hash=sha256:4d3c92fac8f1118bb77a22181355e29c239cabfe2b9effdaa665c66b711136d7 \ + --hash=sha256:8ab4f1dbf2b4a65f7eec5ad0c620e84c34111a68d3349833494b9088212214dd + # via + # -r requirements/pip.pip + # check-manifest diff --git a/requirements/kit.pip b/requirements/kit.pip index f19412bc7..25193660d 100644 --- a/requirements/kit.pip +++ b/requirements/kit.pip @@ -60,10 +60,6 @@ pyproject-hooks==1.0.0 \ --hash=sha256:283c11acd6b928d2f6a7c73fa0d01cb2bdc5f07c57a2eeb6e83d5e56b97976f8 \ --hash=sha256:f271b298b97f5955d53fb12b72c1fb1948c22c1a6b70b315c54cedaca0264ef5 # via build -setuptools==67.2.0 \ - --hash=sha256:16ccf598aab3b506593c17378473978908a2734d7336755a8769b480906bec1c \ - --hash=sha256:b440ee5f7e607bb8c9de15259dba2583dd41a38879a7abc1d43a71c59524da48 - # via -r requirements/kit.in tomli==2.0.1 \ --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f @@ -82,7 +78,13 @@ wheel==0.38.4 \ --hash=sha256:965f5259b566725405b05e7cf774052044b1ed30119b5d586b2703aafe8719ac \ --hash=sha256:b60533f3f5d530e971d6737ca6d58681ee434818fab630c83a734bb10c083ce8 # via -r requirements/kit.in -zipp==3.12.1 \ - --hash=sha256:6c4fe274b8f85ec73c37a8e4e3fa00df9fb9335da96fb789e3b96b318e5097b3 \ - --hash=sha256:a3cac813d40993596b39ea9e93a18e8a2076d5c378b8bc88ec32ab264e04ad02 +zipp==3.13.0 \ + --hash=sha256:23f70e964bc11a34cef175bc90ba2914e1e4545ea1e3e2f67c079671883f9cb6 \ + --hash=sha256:e8b2a36ea17df80ffe9e2c4fda3f693c3dad6df1697d3cd3af232db680950b0b # via importlib-metadata + +# The following packages are considered to be unsafe in a requirements file: +setuptools==65.7.0 \ + --hash=sha256:4d3c92fac8f1118bb77a22181355e29c239cabfe2b9effdaa665c66b711136d7 \ + --hash=sha256:8ab4f1dbf2b4a65f7eec5ad0c620e84c34111a68d3349833494b9088212214dd + # via -r requirements/kit.in diff --git a/requirements/light-threads.pip b/requirements/light-threads.pip index 6beecd327..7cf23c3dc 100644 --- a/requirements/light-threads.pip +++ b/requirements/light-threads.pip @@ -201,13 +201,6 @@ pycparser==2.21 \ --hash=sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9 \ --hash=sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206 # via cffi -setuptools==67.2.0 \ - --hash=sha256:16ccf598aab3b506593c17378473978908a2734d7336755a8769b480906bec1c \ - --hash=sha256:b440ee5f7e607bb8c9de15259dba2583dd41a38879a7abc1d43a71c59524da48 - # via - # gevent - # zope-event - # zope-interface six==1.16.0 \ --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 @@ -254,3 +247,13 @@ zope-interface==5.5.2 \ --hash=sha256:f98d4bd7bbb15ca701d19b93263cc5edfd480c3475d163f137385f49e5b3a3a7 \ --hash=sha256:fb68d212efd057596dee9e6582daded9f8ef776538afdf5feceb3059df2d2e7b # via gevent + +# The following packages are considered to be unsafe in a requirements file: +setuptools==65.7.0 \ + --hash=sha256:4d3c92fac8f1118bb77a22181355e29c239cabfe2b9effdaa665c66b711136d7 \ + --hash=sha256:8ab4f1dbf2b4a65f7eec5ad0c620e84c34111a68d3349833494b9088212214dd + # via + # -c requirements/pins.pip + # gevent + # zope-event + # zope-interface diff --git a/requirements/lint.pip b/requirements/lint.pip index 3f4e8ff8f..d5579466f 100644 --- a/requirements/lint.pip +++ b/requirements/lint.pip @@ -8,9 +8,9 @@ alabaster==0.7.13 \ --hash=sha256:1ee19aca801bbabb5ba3f5f258e4422dfa86f82f3e9cefb0859b283cdd7f62a3 \ --hash=sha256:a27a4a084d5e690e16e01e03ad2b2e552c61a65469419b907243193de1a84ae2 # via sphinx -astroid==2.14.1 \ - --hash=sha256:23c718921acab5f08cbbbe9293967f1f8fec40c336d19cd75dc12a9ea31d2eb2 \ - --hash=sha256:bd1aa4f9915c98e8aaebcd4e71930154d4e8c9aaf05d35ac0a63d1956091ae3f +astroid==2.14.2 \ + --hash=sha256:0e0e3709d64fbffd3037e4ff403580550f14471fd3eaae9fa11cc9a5c7901153 \ + --hash=sha256:a3cf9f02c53dd259144a7e8f3ccd75d67c9a8c716ef183e0c1f291bc5d7bb3cf # via pylint attrs==22.2.0 \ --hash=sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836 \ @@ -271,9 +271,9 @@ greenlet==2.0.2 \ --hash=sha256:f82d4d717d8ef19188687aa32b8363e96062911e63ba22a0cff7802a8e58e5f1 \ --hash=sha256:fc3a569657468b6f3fb60587e48356fe512c1754ca05a564f11366ac9e306526 # via -r requirements/dev.in -hypothesis==6.68.0 \ - --hash=sha256:064a5bf7a98cbdfa3589d8934a2c548524c6d108bfa368ec5ed8b09caa526108 \ - --hash=sha256:8cfa1de15271debb2750545a460e58e3e84527d94157f38ab9309826953572f3 +hypothesis==6.68.1 \ + --hash=sha256:3ff6076920e61d4e6362e93edaf09be3034ea7e39e3a75e731d4d1c525dafd84 \ + --hash=sha256:b37bd77b4b7f404a59ff965e24be8aec4209323866e34ececdf416522c6d0854 # via -r requirements/pytest.pip idna==3.4 \ --hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 \ @@ -464,10 +464,6 @@ parso==0.8.3 \ --hash=sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0 \ --hash=sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75 # via jedi -pip==23.0 \ - --hash=sha256:aee438284e82c8def684b0bcc50b1f6ed5e941af97fa940e83e2e8ef1a59da9b \ - --hash=sha256:b5f88adff801f5ef052bcdef3daa31b55eb67b0fccd6d0106c206fa248e0463c - # via -r requirements/pip.pip pkginfo==1.9.6 \ --hash=sha256:4b7a555a6d5a22169fcc9cf7bfd78d296b0361adad412a346c1226849af5e546 \ --hash=sha256:8fd5896e8718a4372f0ea9cc9d96f6417c9b986e23a4d116dda26b62cc29d046 @@ -508,9 +504,9 @@ pygments==2.14.0 \ # readme-renderer # rich # sphinx -pylint==2.16.1 \ - --hash=sha256:bad9d7c36037f6043a1e848a43004dfd5ea5ceb05815d713ba56ca4503a9fe37 \ - --hash=sha256:ffe7fa536bb38ba35006a7c8a6d2efbfdd3d95bbf21199cad31f76b1c50aaf30 +pylint==2.16.2 \ + --hash=sha256:13b2c805a404a9bf57d002cd5f054ca4d40b0b87542bdaba5e05321ae8262c84 \ + --hash=sha256:ff22dde9c2128cd257c145cfd51adeff0be7df4d80d669055f24a962b351bbe4 # via -r requirements/dev.in pyproject-api==1.5.0 \ --hash=sha256:0962df21f3e633b8ddb9567c011e6c1b3dcdfc31b7860c0ede7e24c5a1200fbe \ @@ -567,12 +563,6 @@ scriv==1.2.0 \ --hash=sha256:26b65a903da7d9aefc712a0d4150b8638302b4758bd428bbd773dd918c61c621 \ --hash=sha256:bb61c30fea73158a4d18c28bbb57821c308245683efb0d897bd45e4a7856b472 # via -r doc/requirements.in -setuptools==67.2.0 \ - --hash=sha256:16ccf598aab3b506593c17378473978908a2734d7336755a8769b480906bec1c \ - --hash=sha256:b440ee5f7e607bb8c9de15259dba2583dd41a38879a7abc1d43a71c59524da48 - # via - # check-manifest - # sphinxcontrib-jquery six==1.16.0 \ --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 @@ -816,11 +806,24 @@ wrapt==1.14.1 \ --hash=sha256:ee6acae74a2b91865910eef5e7de37dc6895ad96fa23603d1d27ea69df545015 \ --hash=sha256:ef3f72c9666bba2bab70d2a8b79f2c6d2c1a42a7f7e2b0ec83bb2f9e383950af # via astroid -zipp==3.12.1 \ - --hash=sha256:6c4fe274b8f85ec73c37a8e4e3fa00df9fb9335da96fb789e3b96b318e5097b3 \ - --hash=sha256:a3cac813d40993596b39ea9e93a18e8a2076d5c378b8bc88ec32ab264e04ad02 +zipp==3.13.0 \ + --hash=sha256:23f70e964bc11a34cef175bc90ba2914e1e4545ea1e3e2f67c079671883f9cb6 \ + --hash=sha256:e8b2a36ea17df80ffe9e2c4fda3f693c3dad6df1697d3cd3af232db680950b0b # via # -r requirements/pip.pip # -r requirements/pytest.pip # importlib-metadata # importlib-resources + +# The following packages are considered to be unsafe in a requirements file: +pip==23.0 \ + --hash=sha256:aee438284e82c8def684b0bcc50b1f6ed5e941af97fa940e83e2e8ef1a59da9b \ + --hash=sha256:b5f88adff801f5ef052bcdef3daa31b55eb67b0fccd6d0106c206fa248e0463c + # via -r requirements/pip.pip +setuptools==65.7.0 \ + --hash=sha256:4d3c92fac8f1118bb77a22181355e29c239cabfe2b9effdaa665c66b711136d7 \ + --hash=sha256:8ab4f1dbf2b4a65f7eec5ad0c620e84c34111a68d3349833494b9088212214dd + # via + # -r requirements/pip.pip + # check-manifest + # sphinxcontrib-jquery diff --git a/requirements/mypy.pip b/requirements/mypy.pip index 026821bd8..3e846de95 100644 --- a/requirements/mypy.pip +++ b/requirements/mypy.pip @@ -32,9 +32,9 @@ flaky==3.7.0 \ --hash=sha256:3ad100780721a1911f57a165809b7ea265a7863305acb66708220820caf8aa0d \ --hash=sha256:d6eda73cab5ae7364504b7c44670f70abed9e75f77dd116352f662817592ec9c # via -r requirements/pytest.pip -hypothesis==6.68.0 \ - --hash=sha256:064a5bf7a98cbdfa3589d8934a2c548524c6d108bfa368ec5ed8b09caa526108 \ - --hash=sha256:8cfa1de15271debb2750545a460e58e3e84527d94157f38ab9309826953572f3 +hypothesis==6.68.1 \ + --hash=sha256:3ff6076920e61d4e6362e93edaf09be3034ea7e39e3a75e731d4d1c525dafd84 \ + --hash=sha256:b37bd77b4b7f404a59ff965e24be8aec4209323866e34ececdf416522c6d0854 # via -r requirements/pytest.pip importlib-metadata==6.0.0 \ --hash=sha256:7efb448ec9a5e313a57655d35aa54cd3e01b7e1fbcf72dce1bf06119420f5bad \ @@ -149,9 +149,9 @@ typing-extensions==4.4.0 \ # -r requirements/pytest.pip # importlib-metadata # mypy -zipp==3.12.1 \ - --hash=sha256:6c4fe274b8f85ec73c37a8e4e3fa00df9fb9335da96fb789e3b96b318e5097b3 \ - --hash=sha256:a3cac813d40993596b39ea9e93a18e8a2076d5c378b8bc88ec32ab264e04ad02 +zipp==3.13.0 \ + --hash=sha256:23f70e964bc11a34cef175bc90ba2914e1e4545ea1e3e2f67c079671883f9cb6 \ + --hash=sha256:e8b2a36ea17df80ffe9e2c4fda3f693c3dad6df1697d3cd3af232db680950b0b # via # -r requirements/pytest.pip # importlib-metadata diff --git a/requirements/pins.pip b/requirements/pins.pip index 4ecea4264..95db58812 100644 --- a/requirements/pins.pip +++ b/requirements/pins.pip @@ -6,3 +6,8 @@ # docutils has been going through some turmoil. Different packages require it, # but have different pins. This seems to satisfy them all: #docutils>=0.17,<0.18 + +# Setuptools became stricter about version number syntax. But it shouldn't be +# checking the Python version like that, should it? +# https://github.com/pypa/packaging/issues/678 +setuptools<66.0.0 diff --git a/requirements/pip-tools.pip b/requirements/pip-tools.pip index 2cfa5ca71..a6d9ab148 100644 --- a/requirements/pip-tools.pip +++ b/requirements/pip-tools.pip @@ -22,10 +22,6 @@ packaging==23.0 \ --hash=sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2 \ --hash=sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97 # via build -pip==23.0 \ - --hash=sha256:aee438284e82c8def684b0bcc50b1f6ed5e941af97fa940e83e2e8ef1a59da9b \ - --hash=sha256:b5f88adff801f5ef052bcdef3daa31b55eb67b0fccd6d0106c206fa248e0463c - # via pip-tools pip-tools==6.12.2 \ --hash=sha256:6a51f4fd67140d5e83703ebfa9610fb61398727151f56a1be02a972d062e4679 \ --hash=sha256:8b903696df4598b10d469026ef9995c5f9a874b416e88e7a214884ebe4a70245 @@ -34,10 +30,6 @@ pyproject-hooks==1.0.0 \ --hash=sha256:283c11acd6b928d2f6a7c73fa0d01cb2bdc5f07c57a2eeb6e83d5e56b97976f8 \ --hash=sha256:f271b298b97f5955d53fb12b72c1fb1948c22c1a6b70b315c54cedaca0264ef5 # via build -setuptools==67.2.0 \ - --hash=sha256:16ccf598aab3b506593c17378473978908a2734d7336755a8769b480906bec1c \ - --hash=sha256:b440ee5f7e607bb8c9de15259dba2583dd41a38879a7abc1d43a71c59524da48 - # via pip-tools tomli==2.0.1 \ --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f @@ -52,7 +44,19 @@ wheel==0.38.4 \ --hash=sha256:965f5259b566725405b05e7cf774052044b1ed30119b5d586b2703aafe8719ac \ --hash=sha256:b60533f3f5d530e971d6737ca6d58681ee434818fab630c83a734bb10c083ce8 # via pip-tools -zipp==3.12.1 \ - --hash=sha256:6c4fe274b8f85ec73c37a8e4e3fa00df9fb9335da96fb789e3b96b318e5097b3 \ - --hash=sha256:a3cac813d40993596b39ea9e93a18e8a2076d5c378b8bc88ec32ab264e04ad02 +zipp==3.13.0 \ + --hash=sha256:23f70e964bc11a34cef175bc90ba2914e1e4545ea1e3e2f67c079671883f9cb6 \ + --hash=sha256:e8b2a36ea17df80ffe9e2c4fda3f693c3dad6df1697d3cd3af232db680950b0b # via importlib-metadata + +# The following packages are considered to be unsafe in a requirements file: +pip==23.0 \ + --hash=sha256:aee438284e82c8def684b0bcc50b1f6ed5e941af97fa940e83e2e8ef1a59da9b \ + --hash=sha256:b5f88adff801f5ef052bcdef3daa31b55eb67b0fccd6d0106c206fa248e0463c + # via pip-tools +setuptools==65.7.0 \ + --hash=sha256:4d3c92fac8f1118bb77a22181355e29c239cabfe2b9effdaa665c66b711136d7 \ + --hash=sha256:8ab4f1dbf2b4a65f7eec5ad0c620e84c34111a68d3349833494b9088212214dd + # via + # -c requirements/pins.pip + # pip-tools diff --git a/requirements/pip.in b/requirements/pip.in index 15f119912..b2adbf5b5 100644 --- a/requirements/pip.in +++ b/requirements/pip.in @@ -6,4 +6,5 @@ # "make upgrade" turns this into requirements/pip.pip. pip +setuptools virtualenv diff --git a/requirements/pip.pip b/requirements/pip.pip index 8b746308d..e41964177 100644 --- a/requirements/pip.pip +++ b/requirements/pip.pip @@ -16,10 +16,6 @@ importlib-metadata==6.0.0 \ --hash=sha256:7efb448ec9a5e313a57655d35aa54cd3e01b7e1fbcf72dce1bf06119420f5bad \ --hash=sha256:e354bedeb60efa6affdcc8ae121b73544a7aa74156d047311948f6d711cd378d # via virtualenv -pip==23.0 \ - --hash=sha256:aee438284e82c8def684b0bcc50b1f6ed5e941af97fa940e83e2e8ef1a59da9b \ - --hash=sha256:b5f88adff801f5ef052bcdef3daa31b55eb67b0fccd6d0106c206fa248e0463c - # via -r requirements/pip.in platformdirs==3.0.0 \ --hash=sha256:8a1228abb1ef82d788f74139988b137e78692984ec7b08eaa6c65f1723af28f9 \ --hash=sha256:b1d5eb14f221506f50d6604a561f4c5786d9e80355219694a1b244bcd96f4567 @@ -34,7 +30,17 @@ virtualenv==20.19.0 \ --hash=sha256:37a640ba82ed40b226599c522d411e4be5edb339a0c0de030c0dc7b646d61590 \ --hash=sha256:54eb59e7352b573aa04d53f80fc9736ed0ad5143af445a1e539aada6eb947dd1 # via -r requirements/pip.in -zipp==3.12.1 \ - --hash=sha256:6c4fe274b8f85ec73c37a8e4e3fa00df9fb9335da96fb789e3b96b318e5097b3 \ - --hash=sha256:a3cac813d40993596b39ea9e93a18e8a2076d5c378b8bc88ec32ab264e04ad02 +zipp==3.13.0 \ + --hash=sha256:23f70e964bc11a34cef175bc90ba2914e1e4545ea1e3e2f67c079671883f9cb6 \ + --hash=sha256:e8b2a36ea17df80ffe9e2c4fda3f693c3dad6df1697d3cd3af232db680950b0b # via importlib-metadata + +# The following packages are considered to be unsafe in a requirements file: +pip==23.0 \ + --hash=sha256:aee438284e82c8def684b0bcc50b1f6ed5e941af97fa940e83e2e8ef1a59da9b \ + --hash=sha256:b5f88adff801f5ef052bcdef3daa31b55eb67b0fccd6d0106c206fa248e0463c + # via -r requirements/pip.in +setuptools==65.7.0 \ + --hash=sha256:4d3c92fac8f1118bb77a22181355e29c239cabfe2b9effdaa665c66b711136d7 \ + --hash=sha256:8ab4f1dbf2b4a65f7eec5ad0c620e84c34111a68d3349833494b9088212214dd + # via -r requirements/pip.in diff --git a/requirements/pytest.pip b/requirements/pytest.pip index 11e1c3ac7..8bd50f12e 100644 --- a/requirements/pytest.pip +++ b/requirements/pytest.pip @@ -28,9 +28,9 @@ flaky==3.7.0 \ --hash=sha256:3ad100780721a1911f57a165809b7ea265a7863305acb66708220820caf8aa0d \ --hash=sha256:d6eda73cab5ae7364504b7c44670f70abed9e75f77dd116352f662817592ec9c # via -r requirements/pytest.in -hypothesis==6.68.0 \ - --hash=sha256:064a5bf7a98cbdfa3589d8934a2c548524c6d108bfa368ec5ed8b09caa526108 \ - --hash=sha256:8cfa1de15271debb2750545a460e58e3e84527d94157f38ab9309826953572f3 +hypothesis==6.68.1 \ + --hash=sha256:3ff6076920e61d4e6362e93edaf09be3034ea7e39e3a75e731d4d1c525dafd84 \ + --hash=sha256:b37bd77b4b7f404a59ff965e24be8aec4209323866e34ececdf416522c6d0854 # via -r requirements/pytest.in importlib-metadata==6.0.0 \ --hash=sha256:7efb448ec9a5e313a57655d35aa54cd3e01b7e1fbcf72dce1bf06119420f5bad \ @@ -72,7 +72,7 @@ typing-extensions==4.4.0 \ --hash=sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa \ --hash=sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e # via importlib-metadata -zipp==3.12.1 \ - --hash=sha256:6c4fe274b8f85ec73c37a8e4e3fa00df9fb9335da96fb789e3b96b318e5097b3 \ - --hash=sha256:a3cac813d40993596b39ea9e93a18e8a2076d5c378b8bc88ec32ab264e04ad02 +zipp==3.13.0 \ + --hash=sha256:23f70e964bc11a34cef175bc90ba2914e1e4545ea1e3e2f67c079671883f9cb6 \ + --hash=sha256:e8b2a36ea17df80ffe9e2c4fda3f693c3dad6df1697d3cd3af232db680950b0b # via importlib-metadata diff --git a/requirements/tox.pip b/requirements/tox.pip index d52a1b6f5..2e354ffdc 100644 --- a/requirements/tox.pip +++ b/requirements/tox.pip @@ -82,7 +82,7 @@ virtualenv==20.19.0 \ --hash=sha256:37a640ba82ed40b226599c522d411e4be5edb339a0c0de030c0dc7b646d61590 \ --hash=sha256:54eb59e7352b573aa04d53f80fc9736ed0ad5143af445a1e539aada6eb947dd1 # via tox -zipp==3.12.1 \ - --hash=sha256:6c4fe274b8f85ec73c37a8e4e3fa00df9fb9335da96fb789e3b96b318e5097b3 \ - --hash=sha256:a3cac813d40993596b39ea9e93a18e8a2076d5c378b8bc88ec32ab264e04ad02 +zipp==3.13.0 \ + --hash=sha256:23f70e964bc11a34cef175bc90ba2914e1e4545ea1e3e2f67c079671883f9cb6 \ + --hash=sha256:e8b2a36ea17df80ffe9e2c4fda3f693c3dad6df1697d3cd3af232db680950b0b # via importlib-metadata From 9c40c3e838cb3f0d27aff3d2f5bb7e1a30226f0c Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Tue, 14 Feb 2023 08:08:52 -0500 Subject: [PATCH 063/139] docs: keep track of an issue I wrote that this pin avoids --- requirements/pins.pip | 1 + 1 file changed, 1 insertion(+) diff --git a/requirements/pins.pip b/requirements/pins.pip index 95db58812..b614c3119 100644 --- a/requirements/pins.pip +++ b/requirements/pins.pip @@ -10,4 +10,5 @@ # Setuptools became stricter about version number syntax. But it shouldn't be # checking the Python version like that, should it? # https://github.com/pypa/packaging/issues/678 +# https://github.com/nedbat/coveragepy/issues/1556 setuptools<66.0.0 From 946e0cfc562953a56bb13b144639b8dc194b43f8 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Tue, 14 Feb 2023 21:11:19 -0500 Subject: [PATCH 064/139] docs: bye twitter, hello mastodon --- README.rst | 11 ++++------- doc/index.rst | 5 ++++- howto.txt | 3 --- setup.py | 4 ++-- 4 files changed, 10 insertions(+), 13 deletions(-) diff --git a/README.rst b/README.rst index 1ca0210db..960588422 100644 --- a/README.rst +++ b/README.rst @@ -18,7 +18,7 @@ Code coverage testing for Python. | |kit| |downloads| |format| |repos| | |stars| |forks| |contributors| | |core-infrastructure| |open-ssf| |snyk| -| |tidelift| |sponsor| |twitter-coveragepy| |twitter-nedbat| |mastodon-nedbat| +| |tidelift| |sponsor| |mastodon-coveragepy| |mastodon-nedbat| Coverage.py measures code coverage, typically during test execution. It uses the code analysis tools and tracing hooks provided in the Python standard @@ -166,12 +166,9 @@ Licensed under the `Apache 2.0 License`_. For details, see `NOTICE.txt`_. .. |mastodon-nedbat| image:: https://img.shields.io/badge/dynamic/json?style=flat&labelColor=450657&logo=mastodon&logoColor=ffffff&link=https%3A%2F%2Fhachyderm.io%2F%40nedbat&url=https%3A%2F%2Fhachyderm.io%2Fusers%2Fnedbat%2Ffollowers.json&query=totalItems&label=Mastodon :target: https://hachyderm.io/@nedbat :alt: nedbat on Mastodon -.. |twitter-coveragepy| image:: https://img.shields.io/twitter/follow/coveragepy.svg?label=coveragepy&style=flat&logo=twitter&logoColor=4FADFF - :target: https://twitter.com/coveragepy - :alt: coverage.py on Twitter -.. |twitter-nedbat| image:: https://img.shields.io/twitter/follow/nedbat.svg?label=nedbat&style=flat&logo=twitter&logoColor=4FADFF - :target: https://twitter.com/nedbat - :alt: nedbat on Twitter +.. |mastodon-coveragepy| image:: https://img.shields.io/badge/dynamic/json?style=flat&labelColor=450657&logo=mastodon&logoColor=ffffff&link=https%3A%2F%2Fhachyderm.io%2F%40coveragepy&url=https%3A%2F%2Fhachyderm.io%2Fusers%2Fcoveragepy%2Ffollowers.json&query=totalItems&label=Mastodon + :target: https://hachyderm.io/@coveragepy + :alt: coveragepy on Mastodon .. |sponsor| image:: https://img.shields.io/badge/%E2%9D%A4-Sponsor%20me-brightgreen?style=flat&logo=GitHub :target: https://github.com/sponsors/nedbat :alt: Sponsor me on GitHub diff --git a/doc/index.rst b/doc/index.rst index 62acaebb9..8646d0958 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -26,9 +26,9 @@ supported on: **This is a pre-release build. The usual warnings about possible bugs apply.** The latest stable version is coverage.py 6.5.0, `described here`_. - .. _described here: http://coverage.readthedocs.io/ + For Enterprise -------------- @@ -207,7 +207,10 @@ using coverage.py. .. _I can be reached: https://nedbatchelder.com/site/aboutned.html +.. raw:: html + <p>For news and other chatter, follow the project on Mastodon: + <a rel="me" href="https://hachyderm.io/@coveragepy">@coveragepy@hachyderm.io</a>.</p> More information ---------------- diff --git a/howto.txt b/howto.txt index 9b5893ecc..105547e86 100644 --- a/howto.txt +++ b/howto.txt @@ -78,9 +78,6 @@ - wait for the new tag build to finish successfully. - @ https://readthedocs.org/dashboard/coverage/advanced/ - change the default version to the new version -- Announce: - - twitter @coveragepy - - nedbatchelder.com blog post? - things to automate: - url to link to latest changes in docs - next version.py line diff --git a/setup.py b/setup.py index bccb88196..2c375522d 100644 --- a/setup.py +++ b/setup.py @@ -127,8 +127,8 @@ '?utm_source=pypi-coverage&utm_medium=referral&utm_campaign=pypi' ), 'Issues': 'https://github.com/nedbat/coveragepy/issues', - 'Mastodon': 'https://hachyderm.io/@nedbat', - 'Twitter': 'https://twitter.com/coveragepy', + 'Mastodon': 'https://hachyderm.io/@coveragepy', + 'Mastodon (nedbat)': 'https://hachyderm.io/@nedbat', }, python_requires=">=3.7", # minimum of PYVERSIONS ) From 545d8bc2ae37cf0d203ea3555547e35a4d34346e Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Wed, 15 Feb 2023 08:21:06 -0500 Subject: [PATCH 065/139] docs: better mastodon labels, and 3.12a5 --- README.rst | 9 +++++---- doc/index.rst | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/README.rst b/README.rst index 960588422..1f01a62e9 100644 --- a/README.rst +++ b/README.rst @@ -28,7 +28,7 @@ Coverage.py runs on these versions of Python: .. PYVERSIONS -* CPython 3.7 through 3.12.0a3 +* CPython 3.7 through 3.12.0a5 * PyPy3 7.3.11. Documentation is on `Read the Docs`_. Code repository and issue tracker are on @@ -39,7 +39,8 @@ Documentation is on `Read the Docs`_. Code repository and issue tracker are on **New in 7.x:** improved data combining; -``report --format=``. +``report --format=``; +type annotations. **New in 6.x:** dropped support for Python 2.7, 3.5, and 3.6; @@ -163,10 +164,10 @@ Licensed under the `Apache 2.0 License`_. For details, see `NOTICE.txt`_. .. |contributors| image:: https://img.shields.io/github/contributors/nedbat/coveragepy.svg?logo=github :target: https://github.com/nedbat/coveragepy/graphs/contributors :alt: Contributors -.. |mastodon-nedbat| image:: https://img.shields.io/badge/dynamic/json?style=flat&labelColor=450657&logo=mastodon&logoColor=ffffff&link=https%3A%2F%2Fhachyderm.io%2F%40nedbat&url=https%3A%2F%2Fhachyderm.io%2Fusers%2Fnedbat%2Ffollowers.json&query=totalItems&label=Mastodon +.. |mastodon-nedbat| image:: https://img.shields.io/badge/dynamic/json?style=flat&labelColor=450657&logo=mastodon&logoColor=ffffff&link=https%3A%2F%2Fhachyderm.io%2F%40nedbat&url=https%3A%2F%2Fhachyderm.io%2Fusers%2Fnedbat%2Ffollowers.json&query=totalItems&label=@nedbat :target: https://hachyderm.io/@nedbat :alt: nedbat on Mastodon -.. |mastodon-coveragepy| image:: https://img.shields.io/badge/dynamic/json?style=flat&labelColor=450657&logo=mastodon&logoColor=ffffff&link=https%3A%2F%2Fhachyderm.io%2F%40coveragepy&url=https%3A%2F%2Fhachyderm.io%2Fusers%2Fcoveragepy%2Ffollowers.json&query=totalItems&label=Mastodon +.. |mastodon-coveragepy| image:: https://img.shields.io/badge/dynamic/json?style=flat&labelColor=450657&logo=mastodon&logoColor=ffffff&link=https%3A%2F%2Fhachyderm.io%2F%40coveragepy&url=https%3A%2F%2Fhachyderm.io%2Fusers%2Fcoveragepy%2Ffollowers.json&query=totalItems&label=@coveragepy :target: https://hachyderm.io/@coveragepy :alt: coveragepy on Mastodon .. |sponsor| image:: https://img.shields.io/badge/%E2%9D%A4-Sponsor%20me-brightgreen?style=flat&logo=GitHub diff --git a/doc/index.rst b/doc/index.rst index 8646d0958..2b2f45bde 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -18,7 +18,7 @@ supported on: .. PYVERSIONS -* Python versions 3.7 through 3.12.0a3. +* Python versions 3.7 through 3.12.0a5. * PyPy3 7.3.11. .. ifconfig:: prerelease From 51f395dc29811cd7ab465c527a5a06514b0090b8 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Wed, 22 Feb 2023 05:55:56 -0500 Subject: [PATCH 066/139] test: stricter regex to avoid false CodeQL alarms Will fix: https://github.com/nedbat/coveragepy/security/code-scanning/3 https://github.com/nedbat/coveragepy/security/code-scanning/4 (though tbh, not sure how to close those as fixed?) --- tests/test_html.py | 4 ++-- tests/test_xml.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/test_html.py b/tests/test_html.py index 8893993cb..5113cd06e 100644 --- a/tests/test_html.py +++ b/tests/test_html.py @@ -663,8 +663,8 @@ def compare_html( """Specialized compare function for our HTML files.""" __tracebackhide__ = True # pytest, please don't show me this function. scrubs = [ - (r'/coverage.readthedocs.io/?[-.\w/]*', '/coverage.readthedocs.io/VER'), - (r'coverage.py v[\d.abcdev]+', 'coverage.py vVER'), + (r'/coverage\.readthedocs\.io/?[-.\w/]*', '/coverage.readthedocs.io/VER'), + (r'coverage\.py v[\d.abcdev]+', 'coverage.py vVER'), (r'created at \d\d\d\d-\d\d-\d\d \d\d:\d\d [-+]\d\d\d\d', 'created at DATE'), (r'created at \d\d\d\d-\d\d-\d\d \d\d:\d\d', 'created at DATE'), # Occasionally an absolute path is in the HTML report. diff --git a/tests/test_xml.py b/tests/test_xml.py index 005f9d5a0..c21a9dd4a 100644 --- a/tests/test_xml.py +++ b/tests/test_xml.py @@ -465,7 +465,7 @@ def compare_xml(expected: str, actual: str, actual_extra: bool = False) -> None: (r' timestamp="\d+"', ' timestamp="TIMESTAMP"'), (r' version="[-.\w]+"', ' version="VERSION"'), (r'<source>\s*.*?\s*</source>', '<source>%s</source>' % re.escape(source_path)), - (r'/coverage.readthedocs.io/?[-.\w/]*', '/coverage.readthedocs.io/VER'), + (r'/coverage\.readthedocs\.io/?[-.\w/]*', '/coverage.readthedocs.io/VER'), ] compare(expected, actual, scrubs=scrubs, actual_extra=actual_extra) From 2a0e7bc17f932e33ef9c437760ae2f9f60b46390 Mon Sep 17 00:00:00 2001 From: Alpha Chen <alpha@kejadlen.dev> Date: Wed, 15 Feb 2023 21:15:17 -0800 Subject: [PATCH 067/139] feat: add extend_exclude option --- coverage/config.py | 3 +++ doc/config.rst | 14 ++++++++++++-- doc/excluding.rst | 4 +++- tests/test_config.py | 9 +++++++++ 4 files changed, 27 insertions(+), 3 deletions(-) diff --git a/coverage/config.py b/coverage/config.py index e15d2affc..9518e5356 100644 --- a/coverage/config.py +++ b/coverage/config.py @@ -215,6 +215,7 @@ def __init__(self) -> None: # Defaults for [report] self.exclude_list = DEFAULT_EXCLUDE[:] + self.exclude_also: List[str] = [] self.fail_under = 0.0 self.format: Optional[str] = None self.ignore_errors = False @@ -392,6 +393,7 @@ def copy(self) -> CoverageConfig: # [report] ('exclude_list', 'report:exclude_lines', 'regexlist'), + ('exclude_also', 'report:exclude_also', 'regexlist'), ('fail_under', 'report:fail_under', 'float'), ('format', 'report:format', 'boolean'), ('ignore_errors', 'report:ignore_errors', 'boolean'), @@ -523,6 +525,7 @@ def post_process(self) -> None: (k, [self.post_process_file(f) for f in v]) for k, v in self.paths.items() ) + self.exclude_list += self.exclude_also def debug_info(self) -> List[Tuple[str, Any]]: """Make a list of (name, value) pairs for writing debug info.""" diff --git a/doc/config.rst b/doc/config.rst index 8e3d885be..5b159d900 100644 --- a/doc/config.rst +++ b/doc/config.rst @@ -381,7 +381,7 @@ Settings common to many kinds of reporting. ...................... (multi-string) A list of regular expressions. Any line of your source code -containing a match for one of these regexes is excluded from being reported as +containing a match for one of these regexes is excluded from being reported as missing. More details are in :ref:`excluding`. If you use this option, you are replacing all the exclude regexes, so you'll need to also supply the "pragma: no cover" regex if you still want to use it. @@ -395,12 +395,22 @@ you'll exclude any line with three or more of any character. If you write ``pass``, you'll also exclude the line ``my_pass="foo"``, and so on. +.. _config_report_exclude_also: + +[report] exclude_also +..................... + +(multi-string) A list of regular expressions. This setting will preserve the +default exclude pattern instead of overwriting it. See +:ref:`config_report_exclude_lines` for details on exclusion regexes. + + .. _config_report_fail_under: [report] fail_under ................... -(float) A target coverage percentage. If the total coverage measurement is +(float) A target coverage percentage. If the total coverage measurement is under this value, then exit with a status code of 2. If you specify a non-integral value, you must also set ``[report] precision`` properly to make use of the decimal places. A setting of 100 will fail any value under 100, diff --git a/doc/excluding.rst b/doc/excluding.rst index 315d4e290..4651e6bba 100644 --- a/doc/excluding.rst +++ b/doc/excluding.rst @@ -101,7 +101,9 @@ For example, here's a list of exclusions I've used:: Note that when using the ``exclude_lines`` option in a configuration file, you are taking control of the entire list of regexes, so you need to re-specify the -default "pragma: no cover" match if you still want it to apply. +default "pragma: no cover" match if you still want it to apply. The +``exclude_also`` option can be used instead to preserve the default +exclusions while adding new ones. The regexes only have to match part of a line. Be careful not to over-match. A value of ``...`` will match any line with more than three characters in it. diff --git a/tests/test_config.py b/tests/test_config.py index 2ee5eae08..2befa2e3b 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -449,6 +449,15 @@ def test_exceptions_from_missing_things(self) -> None: with pytest.raises(ConfigError, match="No option 'foo' in section: 'xyzzy'"): config.get("xyzzy", "foo") + def test_exclude_also(self) -> None: + self.make_file("pyproject.toml", """\ + [tool.coverage.report] + exclude_also = ["foobar"] + """) + cov = coverage.Coverage() + + assert cov.config.exclude_list == coverage.config.DEFAULT_EXCLUDE + ["foobar"] + class ConfigFileTest(UsingModulesMixin, CoverageTest): """Tests of the config file settings in particular.""" From cc0c0ea4b2af02e8bf4c21f708afa6988e1b4fda Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Wed, 22 Feb 2023 17:13:40 -0500 Subject: [PATCH 068/139] docs: final paperwork for exclude_also #1557 --- CHANGES.rst | 7 +++++++ CONTRIBUTORS.txt | 1 + doc/config.rst | 9 ++++++--- tests/test_config.py | 5 +++-- 4 files changed, 17 insertions(+), 5 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index 1c27501da..d2db59c98 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -20,6 +20,10 @@ development at the same time, such as 4.5.x and 5.0. Unreleased ---------- +- Added a new setting ``[report] exclude_also`` to let you add more exclusions + without overwriting the defaults. Thanks, `Alpha Chen <pull 1557_>`_, + closing `issue 1391_`. + - Added a :meth:`.CoverageData.purge_files` method to remove recorded data for a particular file. Contributed by `Stephan Deibel <pull 1547_>`_. @@ -39,11 +43,14 @@ Unreleased - Added a ``py.typed`` file to announce our type-hintedness. Thanks, `KotlinIsland <pull 1550_>`_. +.. _issue 1391: https://github.com/nedbat/coveragepy/issues/1391 .. _issue 1542: https://github.com/nedbat/coveragepy/issues/1542 .. _pull 1543: https://github.com/nedbat/coveragepy/pull/1543 .. _pull 1547: https://github.com/nedbat/coveragepy/pull/1547 .. _pull 1550: https://github.com/nedbat/coveragepy/pull/1550 .. _issue 1552: https://github.com/nedbat/coveragepy/issues/1552 +.. _pull 1557: https://github.com/nedbat/coveragepy/pull/1557 + .. scriv-start-here diff --git a/CONTRIBUTORS.txt b/CONTRIBUTORS.txt index 8889ed612..f9f028a4d 100644 --- a/CONTRIBUTORS.txt +++ b/CONTRIBUTORS.txt @@ -14,6 +14,7 @@ Alex Groce Alex Sandro Alexander Todorov Alexander Walters +Alpha Chen Ammar Askar Andrew Hoos Anthony Sottile diff --git a/doc/config.rst b/doc/config.rst index 5b159d900..152b3af48 100644 --- a/doc/config.rst +++ b/doc/config.rst @@ -400,9 +400,12 @@ you'll exclude any line with three or more of any character. If you write [report] exclude_also ..................... -(multi-string) A list of regular expressions. This setting will preserve the -default exclude pattern instead of overwriting it. See -:ref:`config_report_exclude_lines` for details on exclusion regexes. +(multi-string) A list of regular expressions. This setting is the same as +:ref:`config_report_exclude_lines`: it adds patterns for lines to exclude from +reporting. This setting will preserve the default exclude patterns instead of +overwriting them. + +.. versionadded:: 7.2.0 .. _config_report_fail_under: diff --git a/tests/test_config.py b/tests/test_config.py index 2befa2e3b..6739a426f 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -452,11 +452,12 @@ def test_exceptions_from_missing_things(self) -> None: def test_exclude_also(self) -> None: self.make_file("pyproject.toml", """\ [tool.coverage.report] - exclude_also = ["foobar"] + exclude_also = ["foobar", "raise .*Error"] """) cov = coverage.Coverage() - assert cov.config.exclude_list == coverage.config.DEFAULT_EXCLUDE + ["foobar"] + expected = coverage.config.DEFAULT_EXCLUDE + ["foobar", "raise .*Error"] + assert cov.config.exclude_list == expected class ConfigFileTest(UsingModulesMixin, CoverageTest): From 65dcfc2e86680fd136f826b29f7b777f553755c4 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Wed, 22 Feb 2023 18:46:19 -0500 Subject: [PATCH 069/139] docs: prep for 7.2.0 --- CHANGES.rst | 10 ++++++---- coverage/version.py | 4 ++-- doc/conf.py | 6 +++--- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index d2db59c98..d62d8f5f6 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -17,8 +17,12 @@ development at the same time, such as 4.5.x and 5.0. .. Version 9.8.1 — 2027-07-27 .. -------------------------- -Unreleased ----------- +.. scriv-start-here + +.. _changes_7-2-0: + +Version 7.2.0 — 2023-02-22 +-------------------------- - Added a new setting ``[report] exclude_also`` to let you add more exclusions without overwriting the defaults. Thanks, `Alpha Chen <pull 1557_>`_, @@ -52,8 +56,6 @@ Unreleased .. _pull 1557: https://github.com/nedbat/coveragepy/pull/1557 -.. scriv-start-here - .. _changes_7-1-0: Version 7.1.0 — 2023-01-24 diff --git a/coverage/version.py b/coverage/version.py index effb063df..592ae30ba 100644 --- a/coverage/version.py +++ b/coverage/version.py @@ -8,8 +8,8 @@ # version_info: same semantics as sys.version_info. # _dev: the .devN suffix if any. -version_info = (7, 2, 0, "alpha", 0) -_dev = 1 +version_info = (7, 2, 0, "final", 0) +_dev = 0 def _make_version( diff --git a/doc/conf.py b/doc/conf.py index 9be27efd3..32caae09d 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -67,11 +67,11 @@ # @@@ editable copyright = "2009–2023, Ned Batchelder" # pylint: disable=redefined-builtin # The short X.Y.Z version. -version = "7.1.0" +version = "7.2.0" # The full version, including alpha/beta/rc tags. -release = "7.1.0" +release = "7.2.0" # The date of release, in "monthname day, year" format. -release_date = "January 24, 2023" +release_date = "February 22, 2023" # @@@ end rst_epilog = """ From 152890c710747bada1a146de47af77c1b1ee1b5e Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Wed, 22 Feb 2023 18:50:06 -0500 Subject: [PATCH 070/139] build: cog moved --- Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index a3028b8bf..7f6959208 100644 --- a/Makefile +++ b/Makefile @@ -131,7 +131,7 @@ prebuild: css workflows cogdoc ## One command for all source prep. _sample_cog_html: clean python -m pip install -e . - cd ~/cog/trunk; \ + cd ~/cog; \ rm -rf htmlcov; \ PYTEST_ADDOPTS= coverage run --branch --source=cogapp -m pytest -k CogTestsInMemory; \ coverage combine; \ @@ -139,12 +139,12 @@ _sample_cog_html: clean sample_html: _sample_cog_html ## Generate sample HTML report. rm -f doc/sample_html/*.* - cp -r ~/cog/trunk/htmlcov/ doc/sample_html/ + cp -r ~/cog/htmlcov/ doc/sample_html/ rm doc/sample_html/.gitignore sample_html_beta: _sample_cog_html ## Generate sample HTML report for a beta release. rm -f doc/sample_html_beta/*.* - cp -r ~/cog/trunk/htmlcov/ doc/sample_html_beta/ + cp -r ~/cog/htmlcov/ doc/sample_html_beta/ rm doc/sample_html_beta/.gitignore From b14e7f44f4107c310a98cf75dc229041549049d4 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Wed, 22 Feb 2023 18:51:07 -0500 Subject: [PATCH 071/139] docs: latest sample html report --- .../d_7b071bdc2a35fa80___init___py.html | 18 +- .../d_7b071bdc2a35fa80___main___py.html | 20 +- .../d_7b071bdc2a35fa80_backward_py.html | 141 - .../d_7b071bdc2a35fa80_cogapp_py.html | 1655 +++--- .../d_7b071bdc2a35fa80_makefiles_py.html | 94 +- .../d_7b071bdc2a35fa80_test_cogapp_py.html | 5012 ++++++++--------- .../d_7b071bdc2a35fa80_test_makefiles_py.html | 251 +- ...d_7b071bdc2a35fa80_test_whiteutils_py.html | 206 +- .../d_7b071bdc2a35fa80_whiteutils_py.html | 150 +- doc/sample_html/index.html | 67 +- doc/sample_html/status.json | 2 +- 11 files changed, 3717 insertions(+), 3899 deletions(-) delete mode 100644 doc/sample_html/d_7b071bdc2a35fa80_backward_py.html diff --git a/doc/sample_html/d_7b071bdc2a35fa80___init___py.html b/doc/sample_html/d_7b071bdc2a35fa80___init___py.html index 7d2c3e89e..125251723 100644 --- a/doc/sample_html/d_7b071bdc2a35fa80___init___py.html +++ b/doc/sample_html/d_7b071bdc2a35fa80___init___py.html @@ -55,8 +55,8 @@ <h1> </div> </aside> <h2> - <span class="text">2 statements </span> - <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">2<span class="text"> run</span></button> + <span class="text">1 statements </span> + <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">1<span class="text"> run</span></button> <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">0<span class="text"> missing</span></button> <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">0<span class="text"> excluded</span></button> <button type="button" class="par run show_par button_toggle_par" value="par" data-shortcut="p" title="Toggle lines partially run">0<span class="text"> partial</span></button> @@ -66,8 +66,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80___main___py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.1.0</a>, - created at 2023-01-24 19:37 -0500 + <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.2.0</a>, + created at 2023-02-22 18:50 -0500 </p> <aside class="hidden"> <button type="button" class="button_next_chunk" data-shortcut="j"/> @@ -85,12 +85,10 @@ <h2> <p class="pln"><span class="n"><a id="t1" href="#t1">1</a></span><span class="t"><span class="str">""" Cog content generation tool.</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t2" href="#t2">2</a></span><span class="t"><span class="str"> http://nedbatchelder.com/code/cog</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t3" href="#t3">3</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t4" href="#t4">4</a></span><span class="t"><span class="str"> Copyright 2004-2015, Ned Batchelder.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t4" href="#t4">4</a></span><span class="t"><span class="str"> Copyright 2004-2023, Ned Batchelder.</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t5" href="#t5">5</a></span><span class="t"><span class="str">"""</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t6" href="#t6">6</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t7" href="#t7">7</a></span><span class="t"><span class="key">from</span> <span class="nam">__future__</span> <span class="key">import</span> <span class="nam">absolute_import</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t8" href="#t8">8</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t9" href="#t9">9</a></span><span class="t"><span class="key">from</span> <span class="op">.</span><span class="nam">cogapp</span> <span class="key">import</span> <span class="op">*</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t7" href="#t7">7</a></span><span class="t"><span class="key">from</span> <span class="op">.</span><span class="nam">cogapp</span> <span class="key">import</span> <span class="nam">Cog</span><span class="op">,</span> <span class="nam">CogUsageError</span><span class="op">,</span> <span class="nam">main</span> </span><span class="r"></span></p> </main> <footer> <div class="content"> @@ -99,8 +97,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80___main___py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.1.0</a>, - created at 2023-01-24 19:37 -0500 + <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.2.0</a>, + created at 2023-02-22 18:50 -0500 </p> </div> </footer> diff --git a/doc/sample_html/d_7b071bdc2a35fa80___main___py.html b/doc/sample_html/d_7b071bdc2a35fa80___main___py.html index d5bc36c7f..4910e0175 100644 --- a/doc/sample_html/d_7b071bdc2a35fa80___main___py.html +++ b/doc/sample_html/d_7b071bdc2a35fa80___main___py.html @@ -64,10 +64,10 @@ <h2> <p class="text"> <a id="prevFileLink" class="nav" href="d_7b071bdc2a35fa80___init___py.html">« prev</a> <a id="indexLink" class="nav" href="index.html">^ index</a> - <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80_backward_py.html">» next</a> + <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80_cogapp_py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.1.0</a>, - created at 2023-01-24 19:37 -0500 + <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.2.0</a>, + created at 2023-02-22 18:50 -0500 </p> <aside class="hidden"> <button type="button" class="button_next_chunk" data-shortcut="j"/> @@ -83,20 +83,22 @@ <h2> </header> <main id="source"> <p class="pln"><span class="n"><a id="t1" href="#t1">1</a></span><span class="t"><span class="str">"""Make Cog runnable directly from the module."""</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2" href="#t2">2</a></span><span class="t"><span class="key">import</span> <span class="nam">sys</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t3" href="#t3">3</a></span><span class="t"><span class="key">from</span> <span class="nam">cogapp</span> <span class="key">import</span> <span class="nam">Cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2" href="#t2">2</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t3" href="#t3">3</a></span><span class="t"><span class="key">import</span> <span class="nam">sys</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t4" href="#t4">4</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t5" href="#t5">5</a></span><span class="t"><span class="nam">sys</span><span class="op">.</span><span class="nam">exit</span><span class="op">(</span><span class="nam">Cog</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">main</span><span class="op">(</span><span class="nam">sys</span><span class="op">.</span><span class="nam">argv</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t5" href="#t5">5</a></span><span class="t"><span class="key">from</span> <span class="nam">cogapp</span> <span class="key">import</span> <span class="nam">Cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t6" href="#t6">6</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t7" href="#t7">7</a></span><span class="t"><span class="nam">sys</span><span class="op">.</span><span class="nam">exit</span><span class="op">(</span><span class="nam">Cog</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">main</span><span class="op">(</span><span class="nam">sys</span><span class="op">.</span><span class="nam">argv</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> </main> <footer> <div class="content"> <p> <a id="prevFileLink" class="nav" href="d_7b071bdc2a35fa80___init___py.html">« prev</a> <a id="indexLink" class="nav" href="index.html">^ index</a> - <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80_backward_py.html">» next</a> + <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80_cogapp_py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.1.0</a>, - created at 2023-01-24 19:37 -0500 + <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.2.0</a>, + created at 2023-02-22 18:50 -0500 </p> </div> </footer> diff --git a/doc/sample_html/d_7b071bdc2a35fa80_backward_py.html b/doc/sample_html/d_7b071bdc2a35fa80_backward_py.html deleted file mode 100644 index e0f2f0a03..000000000 --- a/doc/sample_html/d_7b071bdc2a35fa80_backward_py.html +++ /dev/null @@ -1,141 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> - <title>Coverage for cogapp/backward.py: 69.23%</title> - <link rel="icon" sizes="32x32" href="favicon_32.png"> - <link rel="stylesheet" href="style.css" type="text/css"> - <script type="text/javascript" src="coverage_html.js" defer></script> -</head> -<body class="pyfile"> -<header> - <div class="content"> - <h1> - <span class="text">Coverage for </span><b>cogapp/backward.py</b>: - <span class="pc_cov">69.23%</span> - </h1> - <aside id="help_panel_wrapper"> - <input id="help_panel_state" type="checkbox"> - <label for="help_panel_state"> - <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" /> - </label> - <div id="help_panel"> - <p class="legend">Shortcuts on this page</p> - <div class="keyhelp"> - <p> - <kbd>r</kbd> - <kbd>m</kbd> - <kbd>x</kbd> - <kbd>p</kbd> - toggle line displays - </p> - <p> - <kbd>j</kbd> - <kbd>k</kbd> - next/prev highlighted chunk - </p> - <p> - <kbd>0</kbd> (zero) top of page - </p> - <p> - <kbd>1</kbd> (one) first highlighted chunk - </p> - <p> - <kbd>[</kbd> - <kbd>]</kbd> - prev/next file - </p> - <p> - <kbd>u</kbd> up to the index - </p> - <p> - <kbd>?</kbd> show/hide this help - </p> - </div> - </div> - </aside> - <h2> - <span class="text">22 statements </span> - <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">16<span class="text"> run</span></button> - <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">6<span class="text"> missing</span></button> - <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">0<span class="text"> excluded</span></button> - <button type="button" class="par run show_par button_toggle_par" value="par" data-shortcut="p" title="Toggle lines partially run">2<span class="text"> partial</span></button> - </h2> - <p class="text"> - <a id="prevFileLink" class="nav" href="d_7b071bdc2a35fa80___main___py.html">« prev</a> - <a id="indexLink" class="nav" href="index.html">^ index</a> - <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80_cogapp_py.html">» next</a> - - <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.1.0</a>, - created at 2023-01-24 19:37 -0500 - </p> - <aside class="hidden"> - <button type="button" class="button_next_chunk" data-shortcut="j"/> - <button type="button" class="button_prev_chunk" data-shortcut="k"/> - <button type="button" class="button_top_of_page" data-shortcut="0"/> - <button type="button" class="button_first_chunk" data-shortcut="1"/> - <button type="button" class="button_prev_file" data-shortcut="["/> - <button type="button" class="button_next_file" data-shortcut="]"/> - <button type="button" class="button_to_index" data-shortcut="u"/> - <button type="button" class="button_show_hide_help" data-shortcut="?"/> - </aside> - </div> -</header> -<main id="source"> - <p class="pln"><span class="n"><a id="t1" href="#t1">1</a></span><span class="t"><span class="str">"""Compatibility between Py2 and Py3."""</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2" href="#t2">2</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t3" href="#t3">3</a></span><span class="t"><span class="key">import</span> <span class="nam">sys</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t4" href="#t4">4</a></span><span class="t"><span class="key">import</span> <span class="nam">unittest</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t5" href="#t5">5</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t6" href="#t6">6</a></span><span class="t"><span class="nam">PY3</span> <span class="op">=</span> <span class="nam">sys</span><span class="op">.</span><span class="nam">version_info</span><span class="op">[</span><span class="num">0</span><span class="op">]</span> <span class="op">==</span> <span class="num">3</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t7" href="#t7">7</a></span><span class="t"> </span><span class="r"></span></p> - <p class="par run show_par"><span class="n"><a id="t8" href="#t8">8</a></span><span class="t"><span class="key">if</span> <span class="nam">PY3</span><span class="op">:</span> </span><span class="r"><span class="annotate short">8 ↛ 14</span><span class="annotate long">line 8 didn't jump to line 14, because the condition on line 8 was never false</span></span></p> - <p class="run"><span class="n"><a id="t9" href="#t9">9</a></span><span class="t"> <span class="nam">string_types</span> <span class="op">=</span> <span class="op">(</span><span class="nam">str</span><span class="op">,</span><span class="nam">bytes</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t10" href="#t10">10</a></span><span class="t"> <span class="nam">bytes_types</span> <span class="op">=</span> <span class="op">(</span><span class="nam">bytes</span><span class="op">,</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t11" href="#t11">11</a></span><span class="t"> <span class="key">def</span> <span class="nam">to_bytes</span><span class="op">(</span><span class="nam">s</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t12" href="#t12">12</a></span><span class="t"> <span class="key">return</span> <span class="nam">s</span><span class="op">.</span><span class="nam">encode</span><span class="op">(</span><span class="str">'utf8'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t13" href="#t13">13</a></span><span class="t"><span class="key">else</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t14" href="#t14">14</a></span><span class="t"> <span class="nam">string_types</span> <span class="op">=</span> <span class="op">(</span><span class="nam">basestring</span><span class="op">,</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t15" href="#t15">15</a></span><span class="t"> <span class="nam">bytes_types</span> <span class="op">=</span> <span class="op">(</span><span class="nam">str</span><span class="op">,</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t16" href="#t16">16</a></span><span class="t"> <span class="key">def</span> <span class="nam">to_bytes</span><span class="op">(</span><span class="nam">s</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t17" href="#t17">17</a></span><span class="t"> <span class="key">return</span> <span class="nam">s</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t18" href="#t18">18</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t19" href="#t19">19</a></span><span class="t"><span class="com"># Pythons 2 and 3 differ on where to get StringIO</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t20" href="#t20">20</a></span><span class="t"><span class="key">try</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t21" href="#t21">21</a></span><span class="t"> <span class="key">from</span> <span class="nam">cStringIO</span> <span class="key">import</span> <span class="nam">StringIO</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t22" href="#t22">22</a></span><span class="t"><span class="key">except</span> <span class="nam">ImportError</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t23" href="#t23">23</a></span><span class="t"> <span class="key">from</span> <span class="nam">io</span> <span class="key">import</span> <span class="nam">StringIO</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t24" href="#t24">24</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t25" href="#t25">25</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t26" href="#t26">26</a></span><span class="t"><span class="key">def</span> <span class="nam">unittest_has</span><span class="op">(</span><span class="nam">method</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t27" href="#t27">27</a></span><span class="t"> <span class="str">"""Does `unittest.TestCase` have `method` defined?"""</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t28" href="#t28">28</a></span><span class="t"> <span class="key">return</span> <span class="nam">hasattr</span><span class="op">(</span><span class="nam">unittest</span><span class="op">.</span><span class="nam">TestCase</span><span class="op">,</span> <span class="nam">method</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t29" href="#t29">29</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t30" href="#t30">30</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t31" href="#t31">31</a></span><span class="t"><span class="key">class</span> <span class="nam">TestCase</span><span class="op">(</span><span class="nam">unittest</span><span class="op">.</span><span class="nam">TestCase</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t32" href="#t32">32</a></span><span class="t"> <span class="str">"""Just like unittest.TestCase, but with assert methods added.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t33" href="#t33">33</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t34" href="#t34">34</a></span><span class="t"><span class="str"> Designed to be compatible with 3.1 unittest. Methods are only defined if</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t35" href="#t35">35</a></span><span class="t"><span class="str"> `unittest` doesn't have them.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t36" href="#t36">36</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t37" href="#t37">37</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t38" href="#t38">38</a></span><span class="t"> <span class="com"># pylint: disable=missing-docstring</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t39" href="#t39">39</a></span><span class="t"> </span><span class="r"></span></p> - <p class="par run show_par"><span class="n"><a id="t40" href="#t40">40</a></span><span class="t"> <span class="key">if</span> <span class="key">not</span> <span class="nam">unittest_has</span><span class="op">(</span><span class="str">'assertRaisesRegex'</span><span class="op">)</span><span class="op">:</span> </span><span class="r"><span class="annotate short">40 ↛ 41</span><span class="annotate long">line 40 didn't jump to line 41, because the condition on line 40 was never true</span></span></p> - <p class="mis show_mis"><span class="n"><a id="t41" href="#t41">41</a></span><span class="t"> <span class="key">def</span> <span class="nam">assertRaisesRegex</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="op">*</span><span class="nam">args</span><span class="op">,</span> <span class="op">**</span><span class="nam">kwargs</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t42" href="#t42">42</a></span><span class="t"> <span class="key">return</span> <span class="nam">self</span><span class="op">.</span><span class="nam">assertRaisesRegexp</span><span class="op">(</span><span class="op">*</span><span class="nam">args</span><span class="op">,</span> <span class="op">**</span><span class="nam">kwargs</span><span class="op">)</span> </span><span class="r"></span></p> -</main> -<footer> - <div class="content"> - <p> - <a id="prevFileLink" class="nav" href="d_7b071bdc2a35fa80___main___py.html">« prev</a> - <a id="indexLink" class="nav" href="index.html">^ index</a> - <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80_cogapp_py.html">» next</a> - - <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.1.0</a>, - created at 2023-01-24 19:37 -0500 - </p> - </div> -</footer> -</body> -</html> diff --git a/doc/sample_html/d_7b071bdc2a35fa80_cogapp_py.html b/doc/sample_html/d_7b071bdc2a35fa80_cogapp_py.html index 428edad9b..bc4874ad6 100644 --- a/doc/sample_html/d_7b071bdc2a35fa80_cogapp_py.html +++ b/doc/sample_html/d_7b071bdc2a35fa80_cogapp_py.html @@ -2,7 +2,7 @@ <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> - <title>Coverage for cogapp/cogapp.py: 48.48%</title> + <title>Coverage for cogapp/cogapp.py: 49.01%</title> <link rel="icon" sizes="32x32" href="favicon_32.png"> <link rel="stylesheet" href="style.css" type="text/css"> <script type="text/javascript" src="coverage_html.js" defer></script> @@ -12,7 +12,7 @@ <div class="content"> <h1> <span class="text">Coverage for </span><b>cogapp/cogapp.py</b>: - <span class="pc_cov">48.48%</span> + <span class="pc_cov">49.01%</span> </h1> <aside id="help_panel_wrapper"> <input id="help_panel_state" type="checkbox"> @@ -55,19 +55,19 @@ <h1> </div> </aside> <h2> - <span class="text">510 statements </span> - <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">280<span class="text"> run</span></button> - <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">230<span class="text"> missing</span></button> + <span class="text">500 statements </span> + <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">276<span class="text"> run</span></button> + <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">224<span class="text"> missing</span></button> <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">1<span class="text"> excluded</span></button> <button type="button" class="par run show_par button_toggle_par" value="par" data-shortcut="p" title="Toggle lines partially run">30<span class="text"> partial</span></button> </h2> <p class="text"> - <a id="prevFileLink" class="nav" href="d_7b071bdc2a35fa80_backward_py.html">« prev</a> + <a id="prevFileLink" class="nav" href="d_7b071bdc2a35fa80___main___py.html">« prev</a> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80_makefiles_py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.1.0</a>, - created at 2023-01-24 19:37 -0500 + <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.2.0</a>, + created at 2023-02-22 18:50 -0500 </p> <aside class="hidden"> <button type="button" class="button_next_chunk" data-shortcut="j"/> @@ -82,861 +82,864 @@ <h2> </div> </header> <main id="source"> - <p class="pln"><span class="n"><a id="t1" href="#t1">1</a></span><span class="t"><span class="com"># coding: utf8</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t2" href="#t2">2</a></span><span class="t"><span class="str">""" Cog content generation tool.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t3" href="#t3">3</a></span><span class="t"><span class="str"> http://nedbatchelder.com/code/cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t4" href="#t4">4</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t5" href="#t5">5</a></span><span class="t"><span class="str"> Copyright 2004-2021, Ned Batchelder.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t6" href="#t6">6</a></span><span class="t"><span class="str">"""</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t7" href="#t7">7</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t8" href="#t8">8</a></span><span class="t"><span class="key">from</span> <span class="nam">__future__</span> <span class="key">import</span> <span class="nam">absolute_import</span><span class="op">,</span> <span class="nam">print_function</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t9" href="#t9">9</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t10" href="#t10">10</a></span><span class="t"><span class="key">import</span> <span class="nam">copy</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t11" href="#t11">11</a></span><span class="t"><span class="key">import</span> <span class="nam">getopt</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t12" href="#t12">12</a></span><span class="t"><span class="key">import</span> <span class="nam">glob</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t13" href="#t13">13</a></span><span class="t"><span class="key">import</span> <span class="nam">hashlib</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t14" href="#t14">14</a></span><span class="t"><span class="key">import</span> <span class="nam">linecache</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t15" href="#t15">15</a></span><span class="t"><span class="key">import</span> <span class="nam">os</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t16" href="#t16">16</a></span><span class="t"><span class="key">import</span> <span class="nam">re</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t17" href="#t17">17</a></span><span class="t"><span class="key">import</span> <span class="nam">shlex</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t18" href="#t18">18</a></span><span class="t"><span class="key">import</span> <span class="nam">sys</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t19" href="#t19">19</a></span><span class="t"><span class="key">import</span> <span class="nam">traceback</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1" href="#t1">1</a></span><span class="t"><span class="str">""" Cog content generation tool.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2" href="#t2">2</a></span><span class="t"><span class="str">"""</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t3" href="#t3">3</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t4" href="#t4">4</a></span><span class="t"><span class="key">import</span> <span class="nam">copy</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t5" href="#t5">5</a></span><span class="t"><span class="key">import</span> <span class="nam">getopt</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t6" href="#t6">6</a></span><span class="t"><span class="key">import</span> <span class="nam">glob</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t7" href="#t7">7</a></span><span class="t"><span class="key">import</span> <span class="nam">hashlib</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t8" href="#t8">8</a></span><span class="t"><span class="key">import</span> <span class="nam">io</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t9" href="#t9">9</a></span><span class="t"><span class="key">import</span> <span class="nam">linecache</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t10" href="#t10">10</a></span><span class="t"><span class="key">import</span> <span class="nam">os</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t11" href="#t11">11</a></span><span class="t"><span class="key">import</span> <span class="nam">re</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t12" href="#t12">12</a></span><span class="t"><span class="key">import</span> <span class="nam">shlex</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t13" href="#t13">13</a></span><span class="t"><span class="key">import</span> <span class="nam">sys</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t14" href="#t14">14</a></span><span class="t"><span class="key">import</span> <span class="nam">traceback</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t15" href="#t15">15</a></span><span class="t"><span class="key">import</span> <span class="nam">types</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t16" href="#t16">16</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t17" href="#t17">17</a></span><span class="t"><span class="key">from</span> <span class="op">.</span><span class="nam">whiteutils</span> <span class="key">import</span> <span class="nam">commonPrefix</span><span class="op">,</span> <span class="nam">reindentBlock</span><span class="op">,</span> <span class="nam">whitePrefix</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t18" href="#t18">18</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t19" href="#t19">19</a></span><span class="t"><span class="nam">__version__</span> <span class="op">=</span> <span class="str">"4.0.0.dev2"</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t20" href="#t20">20</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t21" href="#t21">21</a></span><span class="t"><span class="key">from</span> <span class="op">.</span><span class="nam">backward</span> <span class="key">import</span> <span class="nam">PY3</span><span class="op">,</span> <span class="nam">StringIO</span><span class="op">,</span> <span class="nam">string_types</span><span class="op">,</span> <span class="nam">to_bytes</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t22" href="#t22">22</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t23" href="#t23">23</a></span><span class="t"><span class="nam">__all__</span> <span class="op">=</span> <span class="op">[</span><span class="str">'Cog'</span><span class="op">,</span> <span class="str">'CogUsageError'</span><span class="op">,</span> <span class="str">'main'</span><span class="op">]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t24" href="#t24">24</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t25" href="#t25">25</a></span><span class="t"><span class="nam">__version__</span> <span class="op">=</span> <span class="str">'3.3.0'</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t26" href="#t26">26</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t27" href="#t27">27</a></span><span class="t"><span class="nam">usage</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t28" href="#t28">28</a></span><span class="t"><span class="str">cog - generate content with inlined Python code.</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t21" href="#t21">21</a></span><span class="t"><span class="nam">usage</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t22" href="#t22">22</a></span><span class="t"><span class="str">cog - generate content with inlined Python code.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t23" href="#t23">23</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t24" href="#t24">24</a></span><span class="t"><span class="str">cog [OPTIONS] [INFILE | @FILELIST] ...</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t25" href="#t25">25</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t26" href="#t26">26</a></span><span class="t"><span class="str">INFILE is the name of an input file, '-' will read from stdin.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t27" href="#t27">27</a></span><span class="t"><span class="str">FILELIST is the name of a text file containing file names or</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t28" href="#t28">28</a></span><span class="t"><span class="str">other @FILELISTs.</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t29" href="#t29">29</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t30" href="#t30">30</a></span><span class="t"><span class="str">cog [OPTIONS] [INFILE | @FILELIST] ...</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t31" href="#t31">31</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t32" href="#t32">32</a></span><span class="t"><span class="str">INFILE is the name of an input file, '-' will read from stdin.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t33" href="#t33">33</a></span><span class="t"><span class="str">FILELIST is the name of a text file containing file names or</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t34" href="#t34">34</a></span><span class="t"><span class="str"> other @FILELISTs.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t35" href="#t35">35</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t36" href="#t36">36</a></span><span class="t"><span class="str">OPTIONS:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t37" href="#t37">37</a></span><span class="t"><span class="str"> -c Checksum the output to protect it against accidental change.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t38" href="#t38">38</a></span><span class="t"><span class="str"> -d Delete the generator code from the output file.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t39" href="#t39">39</a></span><span class="t"><span class="str"> -D name=val Define a global string available to your generator code.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t40" href="#t40">40</a></span><span class="t"><span class="str"> -e Warn if a file has no cog code in it.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t41" href="#t41">41</a></span><span class="t"><span class="str"> -I PATH Add PATH to the list of directories for data files and modules.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t42" href="#t42">42</a></span><span class="t"><span class="str"> -n ENCODING Use ENCODING when reading and writing files.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t43" href="#t43">43</a></span><span class="t"><span class="str"> -o OUTNAME Write the output to OUTNAME.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t44" href="#t44">44</a></span><span class="t"><span class="str"> -p PROLOGUE Prepend the generator source with PROLOGUE. Useful to insert an</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t45" href="#t45">45</a></span><span class="t"><span class="str"> import line. Example: -p "import math"</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t46" href="#t46">46</a></span><span class="t"><span class="str"> -P Use print() instead of cog.outl() for code output.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t47" href="#t47">47</a></span><span class="t"><span class="str"> -r Replace the input file with the output.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t48" href="#t48">48</a></span><span class="t"><span class="str"> -s STRING Suffix all generated output lines with STRING.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t49" href="#t49">49</a></span><span class="t"><span class="str"> -U Write the output with Unix newlines (only LF line-endings).</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t50" href="#t50">50</a></span><span class="t"><span class="str"> -w CMD Use CMD if the output file needs to be made writable.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t51" href="#t51">51</a></span><span class="t"><span class="str"> A %s in the CMD will be filled with the filename.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t52" href="#t52">52</a></span><span class="t"><span class="str"> -x Excise all the generated output without running the generators.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t53" href="#t53">53</a></span><span class="t"><span class="str"> -z The end-output marker can be omitted, and is assumed at eof.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t54" href="#t54">54</a></span><span class="t"><span class="str"> -v Print the version of cog and exit.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t55" href="#t55">55</a></span><span class="t"><span class="str"> --check Check that the files would not change if run again.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t56" href="#t56">56</a></span><span class="t"><span class="str"> --markers='START END END-OUTPUT'</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t57" href="#t57">57</a></span><span class="t"><span class="str"> The patterns surrounding cog inline instructions. Should</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t58" href="#t58">58</a></span><span class="t"><span class="str"> include three values separated by spaces, the start, end,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t59" href="#t59">59</a></span><span class="t"><span class="str"> and end-output markers. Defaults to '[[[cog ]]] [[[end]]]'.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t60" href="#t60">60</a></span><span class="t"><span class="str"> --verbosity=VERBOSITY</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t61" href="#t61">61</a></span><span class="t"><span class="str"> Control the amount of output. 2 (the default) lists all files,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t62" href="#t62">62</a></span><span class="t"><span class="str"> 1 lists only changed files, 0 lists no files.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t63" href="#t63">63</a></span><span class="t"><span class="str"> -h Print this help.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t64" href="#t64">64</a></span><span class="t"><span class="str">"""</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t65" href="#t65">65</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t66" href="#t66">66</a></span><span class="t"><span class="com"># Other package modules</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t67" href="#t67">67</a></span><span class="t"><span class="key">from</span> <span class="op">.</span><span class="nam">whiteutils</span> <span class="key">import</span> <span class="op">*</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t30" href="#t30">30</a></span><span class="t"><span class="str">OPTIONS:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t31" href="#t31">31</a></span><span class="t"><span class="str"> -c Checksum the output to protect it against accidental change.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t32" href="#t32">32</a></span><span class="t"><span class="str"> -d Delete the generator code from the output file.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t33" href="#t33">33</a></span><span class="t"><span class="str"> -D name=val Define a global string available to your generator code.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t34" href="#t34">34</a></span><span class="t"><span class="str"> -e Warn if a file has no cog code in it.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t35" href="#t35">35</a></span><span class="t"><span class="str"> -I PATH Add PATH to the list of directories for data files and modules.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t36" href="#t36">36</a></span><span class="t"><span class="str"> -n ENCODING Use ENCODING when reading and writing files.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t37" href="#t37">37</a></span><span class="t"><span class="str"> -o OUTNAME Write the output to OUTNAME.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t38" href="#t38">38</a></span><span class="t"><span class="str"> -p PROLOGUE Prepend the generator source with PROLOGUE. Useful to insert an</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t39" href="#t39">39</a></span><span class="t"><span class="str"> import line. Example: -p "import math"</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t40" href="#t40">40</a></span><span class="t"><span class="str"> -P Use print() instead of cog.outl() for code output.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t41" href="#t41">41</a></span><span class="t"><span class="str"> -r Replace the input file with the output.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t42" href="#t42">42</a></span><span class="t"><span class="str"> -s STRING Suffix all generated output lines with STRING.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t43" href="#t43">43</a></span><span class="t"><span class="str"> -U Write the output with Unix newlines (only LF line-endings).</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t44" href="#t44">44</a></span><span class="t"><span class="str"> -w CMD Use CMD if the output file needs to be made writable.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t45" href="#t45">45</a></span><span class="t"><span class="str"> A %s in the CMD will be filled with the filename.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t46" href="#t46">46</a></span><span class="t"><span class="str"> -x Excise all the generated output without running the generators.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t47" href="#t47">47</a></span><span class="t"><span class="str"> -z The end-output marker can be omitted, and is assumed at eof.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t48" href="#t48">48</a></span><span class="t"><span class="str"> -v Print the version of cog and exit.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t49" href="#t49">49</a></span><span class="t"><span class="str"> --check Check that the files would not change if run again.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t50" href="#t50">50</a></span><span class="t"><span class="str"> --markers='START END END-OUTPUT'</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t51" href="#t51">51</a></span><span class="t"><span class="str"> The patterns surrounding cog inline instructions. Should</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t52" href="#t52">52</a></span><span class="t"><span class="str"> include three values separated by spaces, the start, end,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t53" href="#t53">53</a></span><span class="t"><span class="str"> and end-output markers. Defaults to '[[[cog ]]] [[[end]]]'.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t54" href="#t54">54</a></span><span class="t"><span class="str"> --verbosity=VERBOSITY</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t55" href="#t55">55</a></span><span class="t"><span class="str"> Control the amount of output. 2 (the default) lists all files,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t56" href="#t56">56</a></span><span class="t"><span class="str"> 1 lists only changed files, 0 lists no files.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t57" href="#t57">57</a></span><span class="t"><span class="str"> -h Print this help.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t58" href="#t58">58</a></span><span class="t"><span class="str">"""</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t59" href="#t59">59</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t60" href="#t60">60</a></span><span class="t"><span class="key">class</span> <span class="nam">CogError</span><span class="op">(</span><span class="nam">Exception</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t61" href="#t61">61</a></span><span class="t"> <span class="str">""" Any exception raised by Cog.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t62" href="#t62">62</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t63" href="#t63">63</a></span><span class="t"> <span class="key">def</span> <span class="nam">__init__</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">msg</span><span class="op">,</span> <span class="nam">file</span><span class="op">=</span><span class="str">''</span><span class="op">,</span> <span class="nam">line</span><span class="op">=</span><span class="num">0</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t64" href="#t64">64</a></span><span class="t"> <span class="key">if</span> <span class="nam">file</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t65" href="#t65">65</a></span><span class="t"> <span class="nam">super</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">__init__</span><span class="op">(</span><span class="str">f"{file}({line}): {msg}"</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t66" href="#t66">66</a></span><span class="t"> <span class="key">else</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t67" href="#t67">67</a></span><span class="t"> <span class="nam">super</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">__init__</span><span class="op">(</span><span class="nam">msg</span><span class="op">)</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t68" href="#t68">68</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t69" href="#t69">69</a></span><span class="t"><span class="key">class</span> <span class="nam">CogError</span><span class="op">(</span><span class="nam">Exception</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t70" href="#t70">70</a></span><span class="t"> <span class="str">""" Any exception raised by Cog.</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t69" href="#t69">69</a></span><span class="t"><span class="key">class</span> <span class="nam">CogUsageError</span><span class="op">(</span><span class="nam">CogError</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t70" href="#t70">70</a></span><span class="t"> <span class="str">""" An error in usage of command-line arguments in cog.</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t71" href="#t71">71</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t72" href="#t72">72</a></span><span class="t"> <span class="key">def</span> <span class="nam">__init__</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">msg</span><span class="op">,</span> <span class="nam">file</span><span class="op">=</span><span class="str">''</span><span class="op">,</span> <span class="nam">line</span><span class="op">=</span><span class="num">0</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t73" href="#t73">73</a></span><span class="t"> <span class="key">if</span> <span class="nam">file</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t74" href="#t74">74</a></span><span class="t"> <span class="nam">Exception</span><span class="op">.</span><span class="nam">__init__</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="str">"%s(%d): %s"</span> <span class="op">%</span> <span class="op">(</span><span class="nam">file</span><span class="op">,</span> <span class="nam">line</span><span class="op">,</span> <span class="nam">msg</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t75" href="#t75">75</a></span><span class="t"> <span class="key">else</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t76" href="#t76">76</a></span><span class="t"> <span class="nam">Exception</span><span class="op">.</span><span class="nam">__init__</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">msg</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t77" href="#t77">77</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t78" href="#t78">78</a></span><span class="t"><span class="key">class</span> <span class="nam">CogUsageError</span><span class="op">(</span><span class="nam">CogError</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t79" href="#t79">79</a></span><span class="t"> <span class="str">""" An error in usage of command-line arguments in cog.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t80" href="#t80">80</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t81" href="#t81">81</a></span><span class="t"> <span class="key">pass</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t82" href="#t82">82</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t83" href="#t83">83</a></span><span class="t"><span class="key">class</span> <span class="nam">CogInternalError</span><span class="op">(</span><span class="nam">CogError</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t84" href="#t84">84</a></span><span class="t"> <span class="str">""" An error in the coding of Cog. Should never happen.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t85" href="#t85">85</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t86" href="#t86">86</a></span><span class="t"> <span class="key">pass</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t87" href="#t87">87</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t88" href="#t88">88</a></span><span class="t"><span class="key">class</span> <span class="nam">CogGeneratedError</span><span class="op">(</span><span class="nam">CogError</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t89" href="#t89">89</a></span><span class="t"> <span class="str">""" An error raised by a user's cog generator.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t90" href="#t90">90</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t91" href="#t91">91</a></span><span class="t"> <span class="key">pass</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t92" href="#t92">92</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t93" href="#t93">93</a></span><span class="t"><span class="key">class</span> <span class="nam">CogUserException</span><span class="op">(</span><span class="nam">CogError</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t94" href="#t94">94</a></span><span class="t"> <span class="str">""" An exception caught when running a user's cog generator.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t95" href="#t95">95</a></span><span class="t"><span class="str"> The argument is the traceback message to print.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t96" href="#t96">96</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t97" href="#t97">97</a></span><span class="t"> <span class="key">pass</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t98" href="#t98">98</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t99" href="#t99">99</a></span><span class="t"><span class="key">class</span> <span class="nam">CogCheckFailed</span><span class="op">(</span><span class="nam">CogError</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t100" href="#t100">100</a></span><span class="t"> <span class="str">""" A --check failed.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t101" href="#t101">101</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t102" href="#t102">102</a></span><span class="t"> <span class="key">pass</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t103" href="#t103">103</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t104" href="#t104">104</a></span><span class="t"><span class="key">class</span> <span class="nam">Redirectable</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t105" href="#t105">105</a></span><span class="t"> <span class="str">""" An object with its own stdout and stderr files.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t106" href="#t106">106</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t107" href="#t107">107</a></span><span class="t"> <span class="key">def</span> <span class="nam">__init__</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t108" href="#t108">108</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">stdout</span> <span class="op">=</span> <span class="nam">sys</span><span class="op">.</span><span class="nam">stdout</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t109" href="#t109">109</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">stderr</span> <span class="op">=</span> <span class="nam">sys</span><span class="op">.</span><span class="nam">stderr</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t110" href="#t110">110</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t111" href="#t111">111</a></span><span class="t"> <span class="key">def</span> <span class="nam">setOutput</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">stdout</span><span class="op">=</span><span class="key">None</span><span class="op">,</span> <span class="nam">stderr</span><span class="op">=</span><span class="key">None</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t112" href="#t112">112</a></span><span class="t"> <span class="str">""" Assign new files for standard out and/or standard error.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t113" href="#t113">113</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="par run show_par"><span class="n"><a id="t114" href="#t114">114</a></span><span class="t"> <span class="key">if</span> <span class="nam">stdout</span><span class="op">:</span> </span><span class="r"><span class="annotate short">114 ↛ 116</span><span class="annotate long">line 114 didn't jump to line 116, because the condition on line 114 was never false</span></span></p> - <p class="run"><span class="n"><a id="t115" href="#t115">115</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">stdout</span> <span class="op">=</span> <span class="nam">stdout</span> </span><span class="r"></span></p> - <p class="par run show_par"><span class="n"><a id="t116" href="#t116">116</a></span><span class="t"> <span class="key">if</span> <span class="nam">stderr</span><span class="op">:</span> </span><span class="r"><span class="annotate short">116 ↛ 117</span><span class="annotate long">line 116 didn't jump to line 117, because the condition on line 116 was never true</span></span></p> - <p class="mis show_mis"><span class="n"><a id="t117" href="#t117">117</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">stderr</span> <span class="op">=</span> <span class="nam">stderr</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t118" href="#t118">118</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t119" href="#t119">119</a></span><span class="t"> <span class="key">def</span> <span class="nam">prout</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">s</span><span class="op">,</span> <span class="nam">end</span><span class="op">=</span><span class="str">"\n"</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t120" href="#t120">120</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="nam">s</span><span class="op">,</span> <span class="nam">file</span><span class="op">=</span><span class="nam">self</span><span class="op">.</span><span class="nam">stdout</span><span class="op">,</span> <span class="nam">end</span><span class="op">=</span><span class="nam">end</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t121" href="#t121">121</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t122" href="#t122">122</a></span><span class="t"> <span class="key">def</span> <span class="nam">prerr</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">s</span><span class="op">,</span> <span class="nam">end</span><span class="op">=</span><span class="str">"\n"</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t123" href="#t123">123</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="nam">s</span><span class="op">,</span> <span class="nam">file</span><span class="op">=</span><span class="nam">self</span><span class="op">.</span><span class="nam">stderr</span><span class="op">,</span> <span class="nam">end</span><span class="op">=</span><span class="nam">end</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t124" href="#t124">124</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t72" href="#t72">72</a></span><span class="t"> <span class="key">pass</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t73" href="#t73">73</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t74" href="#t74">74</a></span><span class="t"><span class="key">class</span> <span class="nam">CogInternalError</span><span class="op">(</span><span class="nam">CogError</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t75" href="#t75">75</a></span><span class="t"> <span class="str">""" An error in the coding of Cog. Should never happen.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t76" href="#t76">76</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t77" href="#t77">77</a></span><span class="t"> <span class="key">pass</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t78" href="#t78">78</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t79" href="#t79">79</a></span><span class="t"><span class="key">class</span> <span class="nam">CogGeneratedError</span><span class="op">(</span><span class="nam">CogError</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t80" href="#t80">80</a></span><span class="t"> <span class="str">""" An error raised by a user's cog generator.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t81" href="#t81">81</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t82" href="#t82">82</a></span><span class="t"> <span class="key">pass</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t83" href="#t83">83</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t84" href="#t84">84</a></span><span class="t"><span class="key">class</span> <span class="nam">CogUserException</span><span class="op">(</span><span class="nam">CogError</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t85" href="#t85">85</a></span><span class="t"> <span class="str">""" An exception caught when running a user's cog generator.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t86" href="#t86">86</a></span><span class="t"><span class="str"> The argument is the traceback message to print.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t87" href="#t87">87</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t88" href="#t88">88</a></span><span class="t"> <span class="key">pass</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t89" href="#t89">89</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t90" href="#t90">90</a></span><span class="t"><span class="key">class</span> <span class="nam">CogCheckFailed</span><span class="op">(</span><span class="nam">CogError</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t91" href="#t91">91</a></span><span class="t"> <span class="str">""" A --check failed.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t92" href="#t92">92</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t93" href="#t93">93</a></span><span class="t"> <span class="key">pass</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t94" href="#t94">94</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t95" href="#t95">95</a></span><span class="t"><span class="key">class</span> <span class="nam">Redirectable</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t96" href="#t96">96</a></span><span class="t"> <span class="str">""" An object with its own stdout and stderr files.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t97" href="#t97">97</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t98" href="#t98">98</a></span><span class="t"> <span class="key">def</span> <span class="nam">__init__</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t99" href="#t99">99</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">stdout</span> <span class="op">=</span> <span class="nam">sys</span><span class="op">.</span><span class="nam">stdout</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t100" href="#t100">100</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">stderr</span> <span class="op">=</span> <span class="nam">sys</span><span class="op">.</span><span class="nam">stderr</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t101" href="#t101">101</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t102" href="#t102">102</a></span><span class="t"> <span class="key">def</span> <span class="nam">setOutput</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">stdout</span><span class="op">=</span><span class="key">None</span><span class="op">,</span> <span class="nam">stderr</span><span class="op">=</span><span class="key">None</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t103" href="#t103">103</a></span><span class="t"> <span class="str">""" Assign new files for standard out and/or standard error.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t104" href="#t104">104</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="par run show_par"><span class="n"><a id="t105" href="#t105">105</a></span><span class="t"> <span class="key">if</span> <span class="nam">stdout</span><span class="op">:</span> </span><span class="r"><span class="annotate short">105 ↛ 107</span><span class="annotate long">line 105 didn't jump to line 107, because the condition on line 105 was never false</span></span></p> + <p class="run"><span class="n"><a id="t106" href="#t106">106</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">stdout</span> <span class="op">=</span> <span class="nam">stdout</span> </span><span class="r"></span></p> + <p class="par run show_par"><span class="n"><a id="t107" href="#t107">107</a></span><span class="t"> <span class="key">if</span> <span class="nam">stderr</span><span class="op">:</span> </span><span class="r"><span class="annotate short">107 ↛ 108</span><span class="annotate long">line 107 didn't jump to line 108, because the condition on line 107 was never true</span></span></p> + <p class="mis show_mis"><span class="n"><a id="t108" href="#t108">108</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">stderr</span> <span class="op">=</span> <span class="nam">stderr</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t109" href="#t109">109</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t110" href="#t110">110</a></span><span class="t"> <span class="key">def</span> <span class="nam">prout</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">s</span><span class="op">,</span> <span class="nam">end</span><span class="op">=</span><span class="str">"\n"</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t111" href="#t111">111</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="nam">s</span><span class="op">,</span> <span class="nam">file</span><span class="op">=</span><span class="nam">self</span><span class="op">.</span><span class="nam">stdout</span><span class="op">,</span> <span class="nam">end</span><span class="op">=</span><span class="nam">end</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t112" href="#t112">112</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t113" href="#t113">113</a></span><span class="t"> <span class="key">def</span> <span class="nam">prerr</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">s</span><span class="op">,</span> <span class="nam">end</span><span class="op">=</span><span class="str">"\n"</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t114" href="#t114">114</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="nam">s</span><span class="op">,</span> <span class="nam">file</span><span class="op">=</span><span class="nam">self</span><span class="op">.</span><span class="nam">stderr</span><span class="op">,</span> <span class="nam">end</span><span class="op">=</span><span class="nam">end</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t115" href="#t115">115</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t116" href="#t116">116</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t117" href="#t117">117</a></span><span class="t"><span class="key">class</span> <span class="nam">CogGenerator</span><span class="op">(</span><span class="nam">Redirectable</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t118" href="#t118">118</a></span><span class="t"> <span class="str">""" A generator pulled from a source file.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t119" href="#t119">119</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t120" href="#t120">120</a></span><span class="t"> <span class="key">def</span> <span class="nam">__init__</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">options</span><span class="op">=</span><span class="key">None</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t121" href="#t121">121</a></span><span class="t"> <span class="nam">super</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">__init__</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t122" href="#t122">122</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">markers</span> <span class="op">=</span> <span class="op">[</span><span class="op">]</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t123" href="#t123">123</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">lines</span> <span class="op">=</span> <span class="op">[</span><span class="op">]</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t124" href="#t124">124</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span> <span class="op">=</span> <span class="nam">options</span> <span class="key">or</span> <span class="nam">CogOptions</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t125" href="#t125">125</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t126" href="#t126">126</a></span><span class="t"><span class="key">class</span> <span class="nam">CogGenerator</span><span class="op">(</span><span class="nam">Redirectable</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t127" href="#t127">127</a></span><span class="t"> <span class="str">""" A generator pulled from a source file.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t128" href="#t128">128</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t129" href="#t129">129</a></span><span class="t"> <span class="key">def</span> <span class="nam">__init__</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">options</span><span class="op">=</span><span class="key">None</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t130" href="#t130">130</a></span><span class="t"> <span class="nam">Redirectable</span><span class="op">.</span><span class="nam">__init__</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t131" href="#t131">131</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">markers</span> <span class="op">=</span> <span class="op">[</span><span class="op">]</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t132" href="#t132">132</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">lines</span> <span class="op">=</span> <span class="op">[</span><span class="op">]</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t133" href="#t133">133</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span> <span class="op">=</span> <span class="nam">options</span> <span class="key">or</span> <span class="nam">CogOptions</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t134" href="#t134">134</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t135" href="#t135">135</a></span><span class="t"> <span class="key">def</span> <span class="nam">parseMarker</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">l</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t136" href="#t136">136</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">markers</span><span class="op">.</span><span class="nam">append</span><span class="op">(</span><span class="nam">l</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t137" href="#t137">137</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t138" href="#t138">138</a></span><span class="t"> <span class="key">def</span> <span class="nam">parseLine</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">l</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t139" href="#t139">139</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">lines</span><span class="op">.</span><span class="nam">append</span><span class="op">(</span><span class="nam">l</span><span class="op">.</span><span class="nam">strip</span><span class="op">(</span><span class="str">'\n'</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t140" href="#t140">140</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t141" href="#t141">141</a></span><span class="t"> <span class="key">def</span> <span class="nam">getCode</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t142" href="#t142">142</a></span><span class="t"> <span class="str">""" Extract the executable Python code from the generator.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t143" href="#t143">143</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t144" href="#t144">144</a></span><span class="t"> <span class="com"># If the markers and lines all have the same prefix</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t145" href="#t145">145</a></span><span class="t"> <span class="com"># (end-of-line comment chars, for example),</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t146" href="#t146">146</a></span><span class="t"> <span class="com"># then remove it from all the lines.</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t147" href="#t147">147</a></span><span class="t"> <span class="nam">prefIn</span> <span class="op">=</span> <span class="nam">commonPrefix</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">markers</span> <span class="op">+</span> <span class="nam">self</span><span class="op">.</span><span class="nam">lines</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t148" href="#t148">148</a></span><span class="t"> <span class="key">if</span> <span class="nam">prefIn</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t149" href="#t149">149</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">markers</span> <span class="op">=</span> <span class="op">[</span> <span class="nam">l</span><span class="op">.</span><span class="nam">replace</span><span class="op">(</span><span class="nam">prefIn</span><span class="op">,</span> <span class="str">''</span><span class="op">,</span> <span class="num">1</span><span class="op">)</span> <span class="key">for</span> <span class="nam">l</span> <span class="key">in</span> <span class="nam">self</span><span class="op">.</span><span class="nam">markers</span> <span class="op">]</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t150" href="#t150">150</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">lines</span> <span class="op">=</span> <span class="op">[</span> <span class="nam">l</span><span class="op">.</span><span class="nam">replace</span><span class="op">(</span><span class="nam">prefIn</span><span class="op">,</span> <span class="str">''</span><span class="op">,</span> <span class="num">1</span><span class="op">)</span> <span class="key">for</span> <span class="nam">l</span> <span class="key">in</span> <span class="nam">self</span><span class="op">.</span><span class="nam">lines</span> <span class="op">]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t151" href="#t151">151</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t152" href="#t152">152</a></span><span class="t"> <span class="key">return</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">lines</span><span class="op">,</span> <span class="str">''</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t153" href="#t153">153</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t154" href="#t154">154</a></span><span class="t"> <span class="key">def</span> <span class="nam">evaluate</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">cog</span><span class="op">,</span> <span class="nam">globals</span><span class="op">,</span> <span class="nam">fname</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t155" href="#t155">155</a></span><span class="t"> <span class="com"># figure out the right whitespace prefix for the output</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t156" href="#t156">156</a></span><span class="t"> <span class="nam">prefOut</span> <span class="op">=</span> <span class="nam">whitePrefix</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">markers</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t126" href="#t126">126</a></span><span class="t"> <span class="key">def</span> <span class="nam">parseMarker</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">l</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t127" href="#t127">127</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">markers</span><span class="op">.</span><span class="nam">append</span><span class="op">(</span><span class="nam">l</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t128" href="#t128">128</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t129" href="#t129">129</a></span><span class="t"> <span class="key">def</span> <span class="nam">parseLine</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">l</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t130" href="#t130">130</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">lines</span><span class="op">.</span><span class="nam">append</span><span class="op">(</span><span class="nam">l</span><span class="op">.</span><span class="nam">strip</span><span class="op">(</span><span class="str">'\n'</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t131" href="#t131">131</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t132" href="#t132">132</a></span><span class="t"> <span class="key">def</span> <span class="nam">getCode</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t133" href="#t133">133</a></span><span class="t"> <span class="str">""" Extract the executable Python code from the generator.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t134" href="#t134">134</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t135" href="#t135">135</a></span><span class="t"> <span class="com"># If the markers and lines all have the same prefix</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t136" href="#t136">136</a></span><span class="t"> <span class="com"># (end-of-line comment chars, for example),</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t137" href="#t137">137</a></span><span class="t"> <span class="com"># then remove it from all the lines.</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t138" href="#t138">138</a></span><span class="t"> <span class="nam">prefIn</span> <span class="op">=</span> <span class="nam">commonPrefix</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">markers</span> <span class="op">+</span> <span class="nam">self</span><span class="op">.</span><span class="nam">lines</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t139" href="#t139">139</a></span><span class="t"> <span class="key">if</span> <span class="nam">prefIn</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t140" href="#t140">140</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">markers</span> <span class="op">=</span> <span class="op">[</span> <span class="nam">l</span><span class="op">.</span><span class="nam">replace</span><span class="op">(</span><span class="nam">prefIn</span><span class="op">,</span> <span class="str">''</span><span class="op">,</span> <span class="num">1</span><span class="op">)</span> <span class="key">for</span> <span class="nam">l</span> <span class="key">in</span> <span class="nam">self</span><span class="op">.</span><span class="nam">markers</span> <span class="op">]</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t141" href="#t141">141</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">lines</span> <span class="op">=</span> <span class="op">[</span> <span class="nam">l</span><span class="op">.</span><span class="nam">replace</span><span class="op">(</span><span class="nam">prefIn</span><span class="op">,</span> <span class="str">''</span><span class="op">,</span> <span class="num">1</span><span class="op">)</span> <span class="key">for</span> <span class="nam">l</span> <span class="key">in</span> <span class="nam">self</span><span class="op">.</span><span class="nam">lines</span> <span class="op">]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t142" href="#t142">142</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t143" href="#t143">143</a></span><span class="t"> <span class="key">return</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">lines</span><span class="op">,</span> <span class="str">''</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t144" href="#t144">144</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t145" href="#t145">145</a></span><span class="t"> <span class="key">def</span> <span class="nam">evaluate</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">cog</span><span class="op">,</span> <span class="nam">globals</span><span class="op">,</span> <span class="nam">fname</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t146" href="#t146">146</a></span><span class="t"> <span class="com"># figure out the right whitespace prefix for the output</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t147" href="#t147">147</a></span><span class="t"> <span class="nam">prefOut</span> <span class="op">=</span> <span class="nam">whitePrefix</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">markers</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t148" href="#t148">148</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t149" href="#t149">149</a></span><span class="t"> <span class="nam">intext</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">getCode</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t150" href="#t150">150</a></span><span class="t"> <span class="key">if</span> <span class="key">not</span> <span class="nam">intext</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t151" href="#t151">151</a></span><span class="t"> <span class="key">return</span> <span class="str">''</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t152" href="#t152">152</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t153" href="#t153">153</a></span><span class="t"> <span class="nam">prologue</span> <span class="op">=</span> <span class="str">"import "</span> <span class="op">+</span> <span class="nam">cog</span><span class="op">.</span><span class="nam">cogmodulename</span> <span class="op">+</span> <span class="str">" as cog\n"</span> </span><span class="r"></span></p> + <p class="par run show_par"><span class="n"><a id="t154" href="#t154">154</a></span><span class="t"> <span class="key">if</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">sPrologue</span><span class="op">:</span> </span><span class="r"><span class="annotate short">154 ↛ 155</span><span class="annotate long">line 154 didn't jump to line 155, because the condition on line 154 was never true</span></span></p> + <p class="mis show_mis"><span class="n"><a id="t155" href="#t155">155</a></span><span class="t"> <span class="nam">prologue</span> <span class="op">+=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">sPrologue</span> <span class="op">+</span> <span class="str">'\n'</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t156" href="#t156">156</a></span><span class="t"> <span class="nam">code</span> <span class="op">=</span> <span class="nam">compile</span><span class="op">(</span><span class="nam">prologue</span> <span class="op">+</span> <span class="nam">intext</span><span class="op">,</span> <span class="nam">str</span><span class="op">(</span><span class="nam">fname</span><span class="op">)</span><span class="op">,</span> <span class="str">'exec'</span><span class="op">)</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t157" href="#t157">157</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t158" href="#t158">158</a></span><span class="t"> <span class="nam">intext</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">getCode</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t159" href="#t159">159</a></span><span class="t"> <span class="key">if</span> <span class="key">not</span> <span class="nam">intext</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t160" href="#t160">160</a></span><span class="t"> <span class="key">return</span> <span class="str">''</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t161" href="#t161">161</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t162" href="#t162">162</a></span><span class="t"> <span class="nam">prologue</span> <span class="op">=</span> <span class="str">"import "</span> <span class="op">+</span> <span class="nam">cog</span><span class="op">.</span><span class="nam">cogmodulename</span> <span class="op">+</span> <span class="str">" as cog\n"</span> </span><span class="r"></span></p> - <p class="par run show_par"><span class="n"><a id="t163" href="#t163">163</a></span><span class="t"> <span class="key">if</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">sPrologue</span><span class="op">:</span> </span><span class="r"><span class="annotate short">163 ↛ 164</span><span class="annotate long">line 163 didn't jump to line 164, because the condition on line 163 was never true</span></span></p> - <p class="mis show_mis"><span class="n"><a id="t164" href="#t164">164</a></span><span class="t"> <span class="nam">prologue</span> <span class="op">+=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">sPrologue</span> <span class="op">+</span> <span class="str">'\n'</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t165" href="#t165">165</a></span><span class="t"> <span class="nam">code</span> <span class="op">=</span> <span class="nam">compile</span><span class="op">(</span><span class="nam">prologue</span> <span class="op">+</span> <span class="nam">intext</span><span class="op">,</span> <span class="nam">str</span><span class="op">(</span><span class="nam">fname</span><span class="op">)</span><span class="op">,</span> <span class="str">'exec'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t166" href="#t166">166</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t167" href="#t167">167</a></span><span class="t"> <span class="com"># Make sure the "cog" module has our state.</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t168" href="#t168">168</a></span><span class="t"> <span class="nam">cog</span><span class="op">.</span><span class="nam">cogmodule</span><span class="op">.</span><span class="nam">msg</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">msg</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t169" href="#t169">169</a></span><span class="t"> <span class="nam">cog</span><span class="op">.</span><span class="nam">cogmodule</span><span class="op">.</span><span class="nam">out</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">out</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t170" href="#t170">170</a></span><span class="t"> <span class="nam">cog</span><span class="op">.</span><span class="nam">cogmodule</span><span class="op">.</span><span class="nam">outl</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">outl</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t171" href="#t171">171</a></span><span class="t"> <span class="nam">cog</span><span class="op">.</span><span class="nam">cogmodule</span><span class="op">.</span><span class="nam">error</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">error</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t172" href="#t172">172</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t173" href="#t173">173</a></span><span class="t"> <span class="nam">real_stdout</span> <span class="op">=</span> <span class="nam">sys</span><span class="op">.</span><span class="nam">stdout</span> </span><span class="r"></span></p> - <p class="par run show_par"><span class="n"><a id="t174" href="#t174">174</a></span><span class="t"> <span class="key">if</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">bPrintOutput</span><span class="op">:</span> </span><span class="r"><span class="annotate short">174 ↛ 175</span><span class="annotate long">line 174 didn't jump to line 175, because the condition on line 174 was never true</span></span></p> - <p class="mis show_mis"><span class="n"><a id="t175" href="#t175">175</a></span><span class="t"> <span class="nam">sys</span><span class="op">.</span><span class="nam">stdout</span> <span class="op">=</span> <span class="nam">captured_stdout</span> <span class="op">=</span> <span class="nam">StringIO</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t176" href="#t176">176</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t177" href="#t177">177</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">outstring</span> <span class="op">=</span> <span class="str">''</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t178" href="#t178">178</a></span><span class="t"> <span class="key">try</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t179" href="#t179">179</a></span><span class="t"> <span class="nam">eval</span><span class="op">(</span><span class="nam">code</span><span class="op">,</span> <span class="nam">globals</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="par run show_par"><span class="n"><a id="t180" href="#t180">180</a></span><span class="t"> <span class="key">except</span> <span class="nam">CogError</span><span class="op">:</span> </span><span class="r"><span class="annotate short">180 ↛ 181</span><span class="annotate long">line 180 didn't jump to line 181, because the exception caught by line 180 didn't happen</span></span></p> - <p class="mis show_mis"><span class="n"><a id="t181" href="#t181">181</a></span><span class="t"> <span class="key">raise</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t182" href="#t182">182</a></span><span class="t"> <span class="key">except</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t183" href="#t183">183</a></span><span class="t"> <span class="nam">typ</span><span class="op">,</span> <span class="nam">err</span><span class="op">,</span> <span class="nam">tb</span> <span class="op">=</span> <span class="nam">sys</span><span class="op">.</span><span class="nam">exc_info</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t184" href="#t184">184</a></span><span class="t"> <span class="nam">frames</span> <span class="op">=</span> <span class="op">(</span><span class="nam">tuple</span><span class="op">(</span><span class="nam">fr</span><span class="op">)</span> <span class="key">for</span> <span class="nam">fr</span> <span class="key">in</span> <span class="nam">traceback</span><span class="op">.</span><span class="nam">extract_tb</span><span class="op">(</span><span class="nam">tb</span><span class="op">.</span><span class="nam">tb_next</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t185" href="#t185">185</a></span><span class="t"> <span class="nam">frames</span> <span class="op">=</span> <span class="nam">find_cog_source</span><span class="op">(</span><span class="nam">frames</span><span class="op">,</span> <span class="nam">prologue</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t186" href="#t186">186</a></span><span class="t"> <span class="nam">msg</span> <span class="op">=</span> <span class="str">""</span><span class="op">.</span><span class="nam">join</span><span class="op">(</span><span class="nam">traceback</span><span class="op">.</span><span class="nam">format_list</span><span class="op">(</span><span class="nam">frames</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t187" href="#t187">187</a></span><span class="t"> <span class="nam">msg</span> <span class="op">+=</span> <span class="str">"{}: {}"</span><span class="op">.</span><span class="nam">format</span><span class="op">(</span><span class="nam">typ</span><span class="op">.</span><span class="nam">__name__</span><span class="op">,</span> <span class="nam">err</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t188" href="#t188">188</a></span><span class="t"> <span class="key">raise</span> <span class="nam">CogUserException</span><span class="op">(</span><span class="nam">msg</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t189" href="#t189">189</a></span><span class="t"> <span class="key">finally</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t190" href="#t190">190</a></span><span class="t"> <span class="nam">sys</span><span class="op">.</span><span class="nam">stdout</span> <span class="op">=</span> <span class="nam">real_stdout</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t158" href="#t158">158</a></span><span class="t"> <span class="com"># Make sure the "cog" module has our state.</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t159" href="#t159">159</a></span><span class="t"> <span class="nam">cog</span><span class="op">.</span><span class="nam">cogmodule</span><span class="op">.</span><span class="nam">msg</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">msg</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t160" href="#t160">160</a></span><span class="t"> <span class="nam">cog</span><span class="op">.</span><span class="nam">cogmodule</span><span class="op">.</span><span class="nam">out</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">out</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t161" href="#t161">161</a></span><span class="t"> <span class="nam">cog</span><span class="op">.</span><span class="nam">cogmodule</span><span class="op">.</span><span class="nam">outl</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">outl</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t162" href="#t162">162</a></span><span class="t"> <span class="nam">cog</span><span class="op">.</span><span class="nam">cogmodule</span><span class="op">.</span><span class="nam">error</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">error</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t163" href="#t163">163</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t164" href="#t164">164</a></span><span class="t"> <span class="nam">real_stdout</span> <span class="op">=</span> <span class="nam">sys</span><span class="op">.</span><span class="nam">stdout</span> </span><span class="r"></span></p> + <p class="par run show_par"><span class="n"><a id="t165" href="#t165">165</a></span><span class="t"> <span class="key">if</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">bPrintOutput</span><span class="op">:</span> </span><span class="r"><span class="annotate short">165 ↛ 166</span><span class="annotate long">line 165 didn't jump to line 166, because the condition on line 165 was never true</span></span></p> + <p class="mis show_mis"><span class="n"><a id="t166" href="#t166">166</a></span><span class="t"> <span class="nam">sys</span><span class="op">.</span><span class="nam">stdout</span> <span class="op">=</span> <span class="nam">captured_stdout</span> <span class="op">=</span> <span class="nam">io</span><span class="op">.</span><span class="nam">StringIO</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t167" href="#t167">167</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t168" href="#t168">168</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">outstring</span> <span class="op">=</span> <span class="str">''</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t169" href="#t169">169</a></span><span class="t"> <span class="key">try</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t170" href="#t170">170</a></span><span class="t"> <span class="nam">eval</span><span class="op">(</span><span class="nam">code</span><span class="op">,</span> <span class="nam">globals</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="par run show_par"><span class="n"><a id="t171" href="#t171">171</a></span><span class="t"> <span class="key">except</span> <span class="nam">CogError</span><span class="op">:</span> </span><span class="r"><span class="annotate short">171 ↛ 172</span><span class="annotate long">line 171 didn't jump to line 172, because the exception caught by line 171 didn't happen</span></span></p> + <p class="mis show_mis"><span class="n"><a id="t172" href="#t172">172</a></span><span class="t"> <span class="key">raise</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t173" href="#t173">173</a></span><span class="t"> <span class="key">except</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t174" href="#t174">174</a></span><span class="t"> <span class="nam">typ</span><span class="op">,</span> <span class="nam">err</span><span class="op">,</span> <span class="nam">tb</span> <span class="op">=</span> <span class="nam">sys</span><span class="op">.</span><span class="nam">exc_info</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t175" href="#t175">175</a></span><span class="t"> <span class="nam">frames</span> <span class="op">=</span> <span class="op">(</span><span class="nam">tuple</span><span class="op">(</span><span class="nam">fr</span><span class="op">)</span> <span class="key">for</span> <span class="nam">fr</span> <span class="key">in</span> <span class="nam">traceback</span><span class="op">.</span><span class="nam">extract_tb</span><span class="op">(</span><span class="nam">tb</span><span class="op">.</span><span class="nam">tb_next</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t176" href="#t176">176</a></span><span class="t"> <span class="nam">frames</span> <span class="op">=</span> <span class="nam">find_cog_source</span><span class="op">(</span><span class="nam">frames</span><span class="op">,</span> <span class="nam">prologue</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t177" href="#t177">177</a></span><span class="t"> <span class="nam">msg</span> <span class="op">=</span> <span class="str">""</span><span class="op">.</span><span class="nam">join</span><span class="op">(</span><span class="nam">traceback</span><span class="op">.</span><span class="nam">format_list</span><span class="op">(</span><span class="nam">frames</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t178" href="#t178">178</a></span><span class="t"> <span class="nam">msg</span> <span class="op">+=</span> <span class="str">f"{typ.__name__}: {err}"</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t179" href="#t179">179</a></span><span class="t"> <span class="key">raise</span> <span class="nam">CogUserException</span><span class="op">(</span><span class="nam">msg</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t180" href="#t180">180</a></span><span class="t"> <span class="key">finally</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t181" href="#t181">181</a></span><span class="t"> <span class="nam">sys</span><span class="op">.</span><span class="nam">stdout</span> <span class="op">=</span> <span class="nam">real_stdout</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t182" href="#t182">182</a></span><span class="t"> </span><span class="r"></span></p> + <p class="par run show_par"><span class="n"><a id="t183" href="#t183">183</a></span><span class="t"> <span class="key">if</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">bPrintOutput</span><span class="op">:</span> </span><span class="r"><span class="annotate short">183 ↛ 184</span><span class="annotate long">line 183 didn't jump to line 184, because the condition on line 183 was never true</span></span></p> + <p class="mis show_mis"><span class="n"><a id="t184" href="#t184">184</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">outstring</span> <span class="op">=</span> <span class="nam">captured_stdout</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t185" href="#t185">185</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t186" href="#t186">186</a></span><span class="t"> <span class="com"># We need to make sure that the last line in the output</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t187" href="#t187">187</a></span><span class="t"> <span class="com"># ends with a newline, or it will be joined to the</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t188" href="#t188">188</a></span><span class="t"> <span class="com"># end-output line, ruining cog's idempotency.</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t189" href="#t189">189</a></span><span class="t"> <span class="key">if</span> <span class="nam">self</span><span class="op">.</span><span class="nam">outstring</span> <span class="key">and</span> <span class="nam">self</span><span class="op">.</span><span class="nam">outstring</span><span class="op">[</span><span class="op">-</span><span class="num">1</span><span class="op">]</span> <span class="op">!=</span> <span class="str">'\n'</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t190" href="#t190">190</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">outstring</span> <span class="op">+=</span> <span class="str">'\n'</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t191" href="#t191">191</a></span><span class="t"> </span><span class="r"></span></p> - <p class="par run show_par"><span class="n"><a id="t192" href="#t192">192</a></span><span class="t"> <span class="key">if</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">bPrintOutput</span><span class="op">:</span> </span><span class="r"><span class="annotate short">192 ↛ 193</span><span class="annotate long">line 192 didn't jump to line 193, because the condition on line 192 was never true</span></span></p> - <p class="mis show_mis"><span class="n"><a id="t193" href="#t193">193</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">outstring</span> <span class="op">=</span> <span class="nam">captured_stdout</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t194" href="#t194">194</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t195" href="#t195">195</a></span><span class="t"> <span class="com"># We need to make sure that the last line in the output</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t196" href="#t196">196</a></span><span class="t"> <span class="com"># ends with a newline, or it will be joined to the</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t197" href="#t197">197</a></span><span class="t"> <span class="com"># end-output line, ruining cog's idempotency.</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t198" href="#t198">198</a></span><span class="t"> <span class="key">if</span> <span class="nam">self</span><span class="op">.</span><span class="nam">outstring</span> <span class="key">and</span> <span class="nam">self</span><span class="op">.</span><span class="nam">outstring</span><span class="op">[</span><span class="op">-</span><span class="num">1</span><span class="op">]</span> <span class="op">!=</span> <span class="str">'\n'</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t199" href="#t199">199</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">outstring</span> <span class="op">+=</span> <span class="str">'\n'</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t200" href="#t200">200</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t201" href="#t201">201</a></span><span class="t"> <span class="key">return</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">outstring</span><span class="op">,</span> <span class="nam">prefOut</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t202" href="#t202">202</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t203" href="#t203">203</a></span><span class="t"> <span class="key">def</span> <span class="nam">msg</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">s</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t204" href="#t204">204</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">prout</span><span class="op">(</span><span class="str">"Message: "</span><span class="op">+</span><span class="nam">s</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t205" href="#t205">205</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t206" href="#t206">206</a></span><span class="t"> <span class="key">def</span> <span class="nam">out</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">sOut</span><span class="op">=</span><span class="str">''</span><span class="op">,</span> <span class="nam">dedent</span><span class="op">=</span><span class="key">False</span><span class="op">,</span> <span class="nam">trimblanklines</span><span class="op">=</span><span class="key">False</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t207" href="#t207">207</a></span><span class="t"> <span class="str">""" The cog.out function.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t208" href="#t208">208</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t209" href="#t209">209</a></span><span class="t"> <span class="key">if</span> <span class="nam">trimblanklines</span> <span class="key">and</span> <span class="op">(</span><span class="str">'\n'</span> <span class="key">in</span> <span class="nam">sOut</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t210" href="#t210">210</a></span><span class="t"> <span class="nam">lines</span> <span class="op">=</span> <span class="nam">sOut</span><span class="op">.</span><span class="nam">split</span><span class="op">(</span><span class="str">'\n'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t211" href="#t211">211</a></span><span class="t"> <span class="key">if</span> <span class="nam">lines</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">.</span><span class="nam">strip</span><span class="op">(</span><span class="op">)</span> <span class="op">==</span> <span class="str">''</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t212" href="#t212">212</a></span><span class="t"> <span class="key">del</span> <span class="nam">lines</span><span class="op">[</span><span class="num">0</span><span class="op">]</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t213" href="#t213">213</a></span><span class="t"> <span class="key">if</span> <span class="nam">lines</span> <span class="key">and</span> <span class="nam">lines</span><span class="op">[</span><span class="op">-</span><span class="num">1</span><span class="op">]</span><span class="op">.</span><span class="nam">strip</span><span class="op">(</span><span class="op">)</span> <span class="op">==</span> <span class="str">''</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t214" href="#t214">214</a></span><span class="t"> <span class="key">del</span> <span class="nam">lines</span><span class="op">[</span><span class="op">-</span><span class="num">1</span><span class="op">]</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t215" href="#t215">215</a></span><span class="t"> <span class="nam">sOut</span> <span class="op">=</span> <span class="str">'\n'</span><span class="op">.</span><span class="nam">join</span><span class="op">(</span><span class="nam">lines</span><span class="op">)</span><span class="op">+</span><span class="str">'\n'</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t216" href="#t216">216</a></span><span class="t"> <span class="key">if</span> <span class="nam">dedent</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t217" href="#t217">217</a></span><span class="t"> <span class="nam">sOut</span> <span class="op">=</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">sOut</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t218" href="#t218">218</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">outstring</span> <span class="op">+=</span> <span class="nam">sOut</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t219" href="#t219">219</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t220" href="#t220">220</a></span><span class="t"> <span class="key">def</span> <span class="nam">outl</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">sOut</span><span class="op">=</span><span class="str">''</span><span class="op">,</span> <span class="op">**</span><span class="nam">kw</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t221" href="#t221">221</a></span><span class="t"> <span class="str">""" The cog.outl function.</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t192" href="#t192">192</a></span><span class="t"> <span class="key">return</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">outstring</span><span class="op">,</span> <span class="nam">prefOut</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t193" href="#t193">193</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t194" href="#t194">194</a></span><span class="t"> <span class="key">def</span> <span class="nam">msg</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">s</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t195" href="#t195">195</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">prout</span><span class="op">(</span><span class="str">"Message: "</span><span class="op">+</span><span class="nam">s</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t196" href="#t196">196</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t197" href="#t197">197</a></span><span class="t"> <span class="key">def</span> <span class="nam">out</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">sOut</span><span class="op">=</span><span class="str">''</span><span class="op">,</span> <span class="nam">dedent</span><span class="op">=</span><span class="key">False</span><span class="op">,</span> <span class="nam">trimblanklines</span><span class="op">=</span><span class="key">False</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t198" href="#t198">198</a></span><span class="t"> <span class="str">""" The cog.out function.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t199" href="#t199">199</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t200" href="#t200">200</a></span><span class="t"> <span class="key">if</span> <span class="nam">trimblanklines</span> <span class="key">and</span> <span class="op">(</span><span class="str">'\n'</span> <span class="key">in</span> <span class="nam">sOut</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t201" href="#t201">201</a></span><span class="t"> <span class="nam">lines</span> <span class="op">=</span> <span class="nam">sOut</span><span class="op">.</span><span class="nam">split</span><span class="op">(</span><span class="str">'\n'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t202" href="#t202">202</a></span><span class="t"> <span class="key">if</span> <span class="nam">lines</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">.</span><span class="nam">strip</span><span class="op">(</span><span class="op">)</span> <span class="op">==</span> <span class="str">''</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t203" href="#t203">203</a></span><span class="t"> <span class="key">del</span> <span class="nam">lines</span><span class="op">[</span><span class="num">0</span><span class="op">]</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t204" href="#t204">204</a></span><span class="t"> <span class="key">if</span> <span class="nam">lines</span> <span class="key">and</span> <span class="nam">lines</span><span class="op">[</span><span class="op">-</span><span class="num">1</span><span class="op">]</span><span class="op">.</span><span class="nam">strip</span><span class="op">(</span><span class="op">)</span> <span class="op">==</span> <span class="str">''</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t205" href="#t205">205</a></span><span class="t"> <span class="key">del</span> <span class="nam">lines</span><span class="op">[</span><span class="op">-</span><span class="num">1</span><span class="op">]</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t206" href="#t206">206</a></span><span class="t"> <span class="nam">sOut</span> <span class="op">=</span> <span class="str">'\n'</span><span class="op">.</span><span class="nam">join</span><span class="op">(</span><span class="nam">lines</span><span class="op">)</span><span class="op">+</span><span class="str">'\n'</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t207" href="#t207">207</a></span><span class="t"> <span class="key">if</span> <span class="nam">dedent</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t208" href="#t208">208</a></span><span class="t"> <span class="nam">sOut</span> <span class="op">=</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">sOut</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t209" href="#t209">209</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">outstring</span> <span class="op">+=</span> <span class="nam">sOut</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t210" href="#t210">210</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t211" href="#t211">211</a></span><span class="t"> <span class="key">def</span> <span class="nam">outl</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">sOut</span><span class="op">=</span><span class="str">''</span><span class="op">,</span> <span class="op">**</span><span class="nam">kw</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t212" href="#t212">212</a></span><span class="t"> <span class="str">""" The cog.outl function.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t213" href="#t213">213</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t214" href="#t214">214</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">out</span><span class="op">(</span><span class="nam">sOut</span><span class="op">,</span> <span class="op">**</span><span class="nam">kw</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t215" href="#t215">215</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">out</span><span class="op">(</span><span class="str">'\n'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t216" href="#t216">216</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t217" href="#t217">217</a></span><span class="t"> <span class="key">def</span> <span class="nam">error</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">msg</span><span class="op">=</span><span class="str">'Error raised by cog generator.'</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t218" href="#t218">218</a></span><span class="t"> <span class="str">""" The cog.error function.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t219" href="#t219">219</a></span><span class="t"><span class="str"> Instead of raising standard python errors, cog generators can use</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t220" href="#t220">220</a></span><span class="t"><span class="str"> this function. It will display the error without a scary Python</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t221" href="#t221">221</a></span><span class="t"><span class="str"> traceback.</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t222" href="#t222">222</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t223" href="#t223">223</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">out</span><span class="op">(</span><span class="nam">sOut</span><span class="op">,</span> <span class="op">**</span><span class="nam">kw</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t224" href="#t224">224</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">out</span><span class="op">(</span><span class="str">'\n'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t223" href="#t223">223</a></span><span class="t"> <span class="key">raise</span> <span class="nam">CogGeneratedError</span><span class="op">(</span><span class="nam">msg</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t224" href="#t224">224</a></span><span class="t"> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t225" href="#t225">225</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t226" href="#t226">226</a></span><span class="t"> <span class="key">def</span> <span class="nam">error</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">msg</span><span class="op">=</span><span class="str">'Error raised by cog generator.'</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t227" href="#t227">227</a></span><span class="t"> <span class="str">""" The cog.error function.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t228" href="#t228">228</a></span><span class="t"><span class="str"> Instead of raising standard python errors, cog generators can use</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t229" href="#t229">229</a></span><span class="t"><span class="str"> this function. It will display the error without a scary Python</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t230" href="#t230">230</a></span><span class="t"><span class="str"> traceback.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t231" href="#t231">231</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t232" href="#t232">232</a></span><span class="t"> <span class="key">raise</span> <span class="nam">CogGeneratedError</span><span class="op">(</span><span class="nam">msg</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t233" href="#t233">233</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t234" href="#t234">234</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t235" href="#t235">235</a></span><span class="t"><span class="key">class</span> <span class="nam">NumberedFileReader</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t236" href="#t236">236</a></span><span class="t"> <span class="str">""" A decorator for files that counts the readline()'s called.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t237" href="#t237">237</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t238" href="#t238">238</a></span><span class="t"> <span class="key">def</span> <span class="nam">__init__</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">f</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t239" href="#t239">239</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">f</span> <span class="op">=</span> <span class="nam">f</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t240" href="#t240">240</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">n</span> <span class="op">=</span> <span class="num">0</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t226" href="#t226">226</a></span><span class="t"><span class="key">class</span> <span class="nam">NumberedFileReader</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t227" href="#t227">227</a></span><span class="t"> <span class="str">""" A decorator for files that counts the readline()'s called.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t228" href="#t228">228</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t229" href="#t229">229</a></span><span class="t"> <span class="key">def</span> <span class="nam">__init__</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">f</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t230" href="#t230">230</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">f</span> <span class="op">=</span> <span class="nam">f</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t231" href="#t231">231</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">n</span> <span class="op">=</span> <span class="num">0</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t232" href="#t232">232</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t233" href="#t233">233</a></span><span class="t"> <span class="key">def</span> <span class="nam">readline</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t234" href="#t234">234</a></span><span class="t"> <span class="nam">l</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">f</span><span class="op">.</span><span class="nam">readline</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t235" href="#t235">235</a></span><span class="t"> <span class="key">if</span> <span class="nam">l</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t236" href="#t236">236</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">n</span> <span class="op">+=</span> <span class="num">1</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t237" href="#t237">237</a></span><span class="t"> <span class="key">return</span> <span class="nam">l</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t238" href="#t238">238</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t239" href="#t239">239</a></span><span class="t"> <span class="key">def</span> <span class="nam">linenumber</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t240" href="#t240">240</a></span><span class="t"> <span class="key">return</span> <span class="nam">self</span><span class="op">.</span><span class="nam">n</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t241" href="#t241">241</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t242" href="#t242">242</a></span><span class="t"> <span class="key">def</span> <span class="nam">readline</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t243" href="#t243">243</a></span><span class="t"> <span class="nam">l</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">f</span><span class="op">.</span><span class="nam">readline</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t244" href="#t244">244</a></span><span class="t"> <span class="key">if</span> <span class="nam">l</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t245" href="#t245">245</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">n</span> <span class="op">+=</span> <span class="num">1</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t246" href="#t246">246</a></span><span class="t"> <span class="key">return</span> <span class="nam">l</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t247" href="#t247">247</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t248" href="#t248">248</a></span><span class="t"> <span class="key">def</span> <span class="nam">linenumber</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t249" href="#t249">249</a></span><span class="t"> <span class="key">return</span> <span class="nam">self</span><span class="op">.</span><span class="nam">n</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t250" href="#t250">250</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t251" href="#t251">251</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t252" href="#t252">252</a></span><span class="t"><span class="key">class</span> <span class="nam">CogOptions</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t253" href="#t253">253</a></span><span class="t"> <span class="str">""" Options for a run of cog.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t254" href="#t254">254</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t255" href="#t255">255</a></span><span class="t"> <span class="key">def</span> <span class="nam">__init__</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t256" href="#t256">256</a></span><span class="t"> <span class="com"># Defaults for argument values.</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t257" href="#t257">257</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">args</span> <span class="op">=</span> <span class="op">[</span><span class="op">]</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t258" href="#t258">258</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">includePath</span> <span class="op">=</span> <span class="op">[</span><span class="op">]</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t259" href="#t259">259</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">defines</span> <span class="op">=</span> <span class="op">{</span><span class="op">}</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t260" href="#t260">260</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">bShowVersion</span> <span class="op">=</span> <span class="key">False</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t261" href="#t261">261</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">sMakeWritableCmd</span> <span class="op">=</span> <span class="key">None</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t262" href="#t262">262</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">bReplace</span> <span class="op">=</span> <span class="key">False</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t263" href="#t263">263</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">bNoGenerate</span> <span class="op">=</span> <span class="key">False</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t264" href="#t264">264</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">sOutputName</span> <span class="op">=</span> <span class="key">None</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t265" href="#t265">265</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">bWarnEmpty</span> <span class="op">=</span> <span class="key">False</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t266" href="#t266">266</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">bHashOutput</span> <span class="op">=</span> <span class="key">False</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t267" href="#t267">267</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">bDeleteCode</span> <span class="op">=</span> <span class="key">False</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t268" href="#t268">268</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">bEofCanBeEnd</span> <span class="op">=</span> <span class="key">False</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t269" href="#t269">269</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">sSuffix</span> <span class="op">=</span> <span class="key">None</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t270" href="#t270">270</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">bNewlines</span> <span class="op">=</span> <span class="key">False</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t271" href="#t271">271</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">sBeginSpec</span> <span class="op">=</span> <span class="str">'[[[cog'</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t272" href="#t272">272</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">sEndSpec</span> <span class="op">=</span> <span class="str">']]]'</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t273" href="#t273">273</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">sEndOutput</span> <span class="op">=</span> <span class="str">'[[[end]]]'</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t274" href="#t274">274</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">sEncoding</span> <span class="op">=</span> <span class="str">"utf-8"</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t275" href="#t275">275</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">verbosity</span> <span class="op">=</span> <span class="num">2</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t276" href="#t276">276</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">sPrologue</span> <span class="op">=</span> <span class="str">''</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t277" href="#t277">277</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">bPrintOutput</span> <span class="op">=</span> <span class="key">False</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t278" href="#t278">278</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">bCheck</span> <span class="op">=</span> <span class="key">False</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t279" href="#t279">279</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t280" href="#t280">280</a></span><span class="t"> <span class="key">def</span> <span class="nam">__eq__</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">other</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t281" href="#t281">281</a></span><span class="t"> <span class="str">""" Comparison operator for tests to use.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t282" href="#t282">282</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t283" href="#t283">283</a></span><span class="t"> <span class="key">return</span> <span class="nam">self</span><span class="op">.</span><span class="nam">__dict__</span> <span class="op">==</span> <span class="nam">other</span><span class="op">.</span><span class="nam">__dict__</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t284" href="#t284">284</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t285" href="#t285">285</a></span><span class="t"> <span class="key">def</span> <span class="nam">clone</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t286" href="#t286">286</a></span><span class="t"> <span class="str">""" Make a clone of these options, for further refinement.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t287" href="#t287">287</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t288" href="#t288">288</a></span><span class="t"> <span class="key">return</span> <span class="nam">copy</span><span class="op">.</span><span class="nam">deepcopy</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t289" href="#t289">289</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t290" href="#t290">290</a></span><span class="t"> <span class="key">def</span> <span class="nam">addToIncludePath</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">dirs</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t291" href="#t291">291</a></span><span class="t"> <span class="str">""" Add directories to the include path.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t292" href="#t292">292</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t293" href="#t293">293</a></span><span class="t"> <span class="nam">dirs</span> <span class="op">=</span> <span class="nam">dirs</span><span class="op">.</span><span class="nam">split</span><span class="op">(</span><span class="nam">os</span><span class="op">.</span><span class="nam">pathsep</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t294" href="#t294">294</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">includePath</span><span class="op">.</span><span class="nam">extend</span><span class="op">(</span><span class="nam">dirs</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t295" href="#t295">295</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t296" href="#t296">296</a></span><span class="t"> <span class="key">def</span> <span class="nam">parseArgs</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">argv</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t297" href="#t297">297</a></span><span class="t"> <span class="com"># Parse the command line arguments.</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t298" href="#t298">298</a></span><span class="t"> <span class="key">try</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t299" href="#t299">299</a></span><span class="t"> <span class="nam">opts</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">args</span> <span class="op">=</span> <span class="nam">getopt</span><span class="op">.</span><span class="nam">getopt</span><span class="op">(</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t300" href="#t300">300</a></span><span class="t"> <span class="nam">argv</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t301" href="#t301">301</a></span><span class="t"> <span class="str">'cdD:eI:n:o:rs:p:PUvw:xz'</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t302" href="#t302">302</a></span><span class="t"> <span class="op">[</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t303" href="#t303">303</a></span><span class="t"> <span class="str">'check'</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t304" href="#t304">304</a></span><span class="t"> <span class="str">'markers='</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t305" href="#t305">305</a></span><span class="t"> <span class="str">'verbosity='</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t306" href="#t306">306</a></span><span class="t"> <span class="op">]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t307" href="#t307">307</a></span><span class="t"> <span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t308" href="#t308">308</a></span><span class="t"> <span class="key">except</span> <span class="nam">getopt</span><span class="op">.</span><span class="nam">error</span> <span class="key">as</span> <span class="nam">msg</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t309" href="#t309">309</a></span><span class="t"> <span class="key">raise</span> <span class="nam">CogUsageError</span><span class="op">(</span><span class="nam">msg</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t310" href="#t310">310</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t311" href="#t311">311</a></span><span class="t"> <span class="com"># Handle the command line arguments.</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t312" href="#t312">312</a></span><span class="t"> <span class="key">for</span> <span class="nam">o</span><span class="op">,</span> <span class="nam">a</span> <span class="key">in</span> <span class="nam">opts</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t313" href="#t313">313</a></span><span class="t"> <span class="key">if</span> <span class="nam">o</span> <span class="op">==</span> <span class="str">'-c'</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t314" href="#t314">314</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">bHashOutput</span> <span class="op">=</span> <span class="key">True</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t315" href="#t315">315</a></span><span class="t"> <span class="key">elif</span> <span class="nam">o</span> <span class="op">==</span> <span class="str">'-d'</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t316" href="#t316">316</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">bDeleteCode</span> <span class="op">=</span> <span class="key">True</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t317" href="#t317">317</a></span><span class="t"> <span class="key">elif</span> <span class="nam">o</span> <span class="op">==</span> <span class="str">'-D'</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t318" href="#t318">318</a></span><span class="t"> <span class="key">if</span> <span class="nam">a</span><span class="op">.</span><span class="nam">count</span><span class="op">(</span><span class="str">'='</span><span class="op">)</span> <span class="op"><</span> <span class="num">1</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t319" href="#t319">319</a></span><span class="t"> <span class="key">raise</span> <span class="nam">CogUsageError</span><span class="op">(</span><span class="str">"-D takes a name=value argument"</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t320" href="#t320">320</a></span><span class="t"> <span class="nam">name</span><span class="op">,</span> <span class="nam">value</span> <span class="op">=</span> <span class="nam">a</span><span class="op">.</span><span class="nam">split</span><span class="op">(</span><span class="str">'='</span><span class="op">,</span> <span class="num">1</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t321" href="#t321">321</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">defines</span><span class="op">[</span><span class="nam">name</span><span class="op">]</span> <span class="op">=</span> <span class="nam">value</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t322" href="#t322">322</a></span><span class="t"> <span class="key">elif</span> <span class="nam">o</span> <span class="op">==</span> <span class="str">'-e'</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t323" href="#t323">323</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">bWarnEmpty</span> <span class="op">=</span> <span class="key">True</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t324" href="#t324">324</a></span><span class="t"> <span class="key">elif</span> <span class="nam">o</span> <span class="op">==</span> <span class="str">'-I'</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t325" href="#t325">325</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">addToIncludePath</span><span class="op">(</span><span class="nam">os</span><span class="op">.</span><span class="nam">path</span><span class="op">.</span><span class="nam">abspath</span><span class="op">(</span><span class="nam">a</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t326" href="#t326">326</a></span><span class="t"> <span class="key">elif</span> <span class="nam">o</span> <span class="op">==</span> <span class="str">'-n'</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t327" href="#t327">327</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">sEncoding</span> <span class="op">=</span> <span class="nam">a</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t328" href="#t328">328</a></span><span class="t"> <span class="key">elif</span> <span class="nam">o</span> <span class="op">==</span> <span class="str">'-o'</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t329" href="#t329">329</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">sOutputName</span> <span class="op">=</span> <span class="nam">a</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t330" href="#t330">330</a></span><span class="t"> <span class="key">elif</span> <span class="nam">o</span> <span class="op">==</span> <span class="str">'-r'</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t331" href="#t331">331</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">bReplace</span> <span class="op">=</span> <span class="key">True</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t332" href="#t332">332</a></span><span class="t"> <span class="key">elif</span> <span class="nam">o</span> <span class="op">==</span> <span class="str">'-s'</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t333" href="#t333">333</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">sSuffix</span> <span class="op">=</span> <span class="nam">a</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t334" href="#t334">334</a></span><span class="t"> <span class="key">elif</span> <span class="nam">o</span> <span class="op">==</span> <span class="str">'-p'</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t335" href="#t335">335</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">sPrologue</span> <span class="op">=</span> <span class="nam">a</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t336" href="#t336">336</a></span><span class="t"> <span class="key">elif</span> <span class="nam">o</span> <span class="op">==</span> <span class="str">'-P'</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t337" href="#t337">337</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">bPrintOutput</span> <span class="op">=</span> <span class="key">True</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t338" href="#t338">338</a></span><span class="t"> <span class="key">elif</span> <span class="nam">o</span> <span class="op">==</span> <span class="str">'-U'</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t339" href="#t339">339</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">bNewlines</span> <span class="op">=</span> <span class="key">True</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t340" href="#t340">340</a></span><span class="t"> <span class="key">elif</span> <span class="nam">o</span> <span class="op">==</span> <span class="str">'-v'</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t341" href="#t341">341</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">bShowVersion</span> <span class="op">=</span> <span class="key">True</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t342" href="#t342">342</a></span><span class="t"> <span class="key">elif</span> <span class="nam">o</span> <span class="op">==</span> <span class="str">'-w'</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t343" href="#t343">343</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">sMakeWritableCmd</span> <span class="op">=</span> <span class="nam">a</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t344" href="#t344">344</a></span><span class="t"> <span class="key">elif</span> <span class="nam">o</span> <span class="op">==</span> <span class="str">'-x'</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t345" href="#t345">345</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">bNoGenerate</span> <span class="op">=</span> <span class="key">True</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t346" href="#t346">346</a></span><span class="t"> <span class="key">elif</span> <span class="nam">o</span> <span class="op">==</span> <span class="str">'-z'</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t347" href="#t347">347</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">bEofCanBeEnd</span> <span class="op">=</span> <span class="key">True</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t348" href="#t348">348</a></span><span class="t"> <span class="key">elif</span> <span class="nam">o</span> <span class="op">==</span> <span class="str">'--check'</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t349" href="#t349">349</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">bCheck</span> <span class="op">=</span> <span class="key">True</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t350" href="#t350">350</a></span><span class="t"> <span class="key">elif</span> <span class="nam">o</span> <span class="op">==</span> <span class="str">'--markers'</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t351" href="#t351">351</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">_parse_markers</span><span class="op">(</span><span class="nam">a</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t352" href="#t352">352</a></span><span class="t"> <span class="key">elif</span> <span class="nam">o</span> <span class="op">==</span> <span class="str">'--verbosity'</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t353" href="#t353">353</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">verbosity</span> <span class="op">=</span> <span class="nam">int</span><span class="op">(</span><span class="nam">a</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t354" href="#t354">354</a></span><span class="t"> <span class="key">else</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t355" href="#t355">355</a></span><span class="t"> <span class="com"># Since getopt.getopt is given a list of possible flags,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t356" href="#t356">356</a></span><span class="t"> <span class="com"># this is an internal error.</span> </span><span class="r"></span></p> - <p class="exc show_exc"><span class="n"><a id="t357" href="#t357">357</a></span><span class="t"> <span class="key">raise</span> <span class="nam">CogInternalError</span><span class="op">(</span><span class="str">"Don't understand argument %s"</span> <span class="op">%</span> <span class="nam">o</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t358" href="#t358">358</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t359" href="#t359">359</a></span><span class="t"> <span class="key">def</span> <span class="nam">_parse_markers</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">val</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t360" href="#t360">360</a></span><span class="t"> <span class="key">try</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t361" href="#t361">361</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">sBeginSpec</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">sEndSpec</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">sEndOutput</span> <span class="op">=</span> <span class="nam">val</span><span class="op">.</span><span class="nam">split</span><span class="op">(</span><span class="str">' '</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t362" href="#t362">362</a></span><span class="t"> <span class="key">except</span> <span class="nam">ValueError</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t363" href="#t363">363</a></span><span class="t"> <span class="key">raise</span> <span class="nam">CogUsageError</span><span class="op">(</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t364" href="#t364">364</a></span><span class="t"> <span class="str">'--markers requires 3 values separated by spaces, could not parse %r'</span> <span class="op">%</span> <span class="nam">val</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t365" href="#t365">365</a></span><span class="t"> <span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t242" href="#t242">242</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t243" href="#t243">243</a></span><span class="t"><span class="key">class</span> <span class="nam">CogOptions</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t244" href="#t244">244</a></span><span class="t"> <span class="str">""" Options for a run of cog.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t245" href="#t245">245</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t246" href="#t246">246</a></span><span class="t"> <span class="key">def</span> <span class="nam">__init__</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t247" href="#t247">247</a></span><span class="t"> <span class="com"># Defaults for argument values.</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t248" href="#t248">248</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">args</span> <span class="op">=</span> <span class="op">[</span><span class="op">]</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t249" href="#t249">249</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">includePath</span> <span class="op">=</span> <span class="op">[</span><span class="op">]</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t250" href="#t250">250</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">defines</span> <span class="op">=</span> <span class="op">{</span><span class="op">}</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t251" href="#t251">251</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">bShowVersion</span> <span class="op">=</span> <span class="key">False</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t252" href="#t252">252</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">sMakeWritableCmd</span> <span class="op">=</span> <span class="key">None</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t253" href="#t253">253</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">bReplace</span> <span class="op">=</span> <span class="key">False</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t254" href="#t254">254</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">bNoGenerate</span> <span class="op">=</span> <span class="key">False</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t255" href="#t255">255</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">sOutputName</span> <span class="op">=</span> <span class="key">None</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t256" href="#t256">256</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">bWarnEmpty</span> <span class="op">=</span> <span class="key">False</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t257" href="#t257">257</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">bHashOutput</span> <span class="op">=</span> <span class="key">False</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t258" href="#t258">258</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">bDeleteCode</span> <span class="op">=</span> <span class="key">False</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t259" href="#t259">259</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">bEofCanBeEnd</span> <span class="op">=</span> <span class="key">False</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t260" href="#t260">260</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">sSuffix</span> <span class="op">=</span> <span class="key">None</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t261" href="#t261">261</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">bNewlines</span> <span class="op">=</span> <span class="key">False</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t262" href="#t262">262</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">sBeginSpec</span> <span class="op">=</span> <span class="str">'[[[cog'</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t263" href="#t263">263</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">sEndSpec</span> <span class="op">=</span> <span class="str">']]]'</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t264" href="#t264">264</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">sEndOutput</span> <span class="op">=</span> <span class="str">'[[[end]]]'</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t265" href="#t265">265</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">sEncoding</span> <span class="op">=</span> <span class="str">"utf-8"</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t266" href="#t266">266</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">verbosity</span> <span class="op">=</span> <span class="num">2</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t267" href="#t267">267</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">sPrologue</span> <span class="op">=</span> <span class="str">''</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t268" href="#t268">268</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">bPrintOutput</span> <span class="op">=</span> <span class="key">False</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t269" href="#t269">269</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">bCheck</span> <span class="op">=</span> <span class="key">False</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t270" href="#t270">270</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t271" href="#t271">271</a></span><span class="t"> <span class="key">def</span> <span class="nam">__eq__</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">other</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t272" href="#t272">272</a></span><span class="t"> <span class="str">""" Comparison operator for tests to use.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t273" href="#t273">273</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t274" href="#t274">274</a></span><span class="t"> <span class="key">return</span> <span class="nam">self</span><span class="op">.</span><span class="nam">__dict__</span> <span class="op">==</span> <span class="nam">other</span><span class="op">.</span><span class="nam">__dict__</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t275" href="#t275">275</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t276" href="#t276">276</a></span><span class="t"> <span class="key">def</span> <span class="nam">clone</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t277" href="#t277">277</a></span><span class="t"> <span class="str">""" Make a clone of these options, for further refinement.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t278" href="#t278">278</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t279" href="#t279">279</a></span><span class="t"> <span class="key">return</span> <span class="nam">copy</span><span class="op">.</span><span class="nam">deepcopy</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t280" href="#t280">280</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t281" href="#t281">281</a></span><span class="t"> <span class="key">def</span> <span class="nam">addToIncludePath</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">dirs</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t282" href="#t282">282</a></span><span class="t"> <span class="str">""" Add directories to the include path.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t283" href="#t283">283</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t284" href="#t284">284</a></span><span class="t"> <span class="nam">dirs</span> <span class="op">=</span> <span class="nam">dirs</span><span class="op">.</span><span class="nam">split</span><span class="op">(</span><span class="nam">os</span><span class="op">.</span><span class="nam">pathsep</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t285" href="#t285">285</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">includePath</span><span class="op">.</span><span class="nam">extend</span><span class="op">(</span><span class="nam">dirs</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t286" href="#t286">286</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t287" href="#t287">287</a></span><span class="t"> <span class="key">def</span> <span class="nam">parseArgs</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">argv</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t288" href="#t288">288</a></span><span class="t"> <span class="com"># Parse the command line arguments.</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t289" href="#t289">289</a></span><span class="t"> <span class="key">try</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t290" href="#t290">290</a></span><span class="t"> <span class="nam">opts</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">args</span> <span class="op">=</span> <span class="nam">getopt</span><span class="op">.</span><span class="nam">getopt</span><span class="op">(</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t291" href="#t291">291</a></span><span class="t"> <span class="nam">argv</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t292" href="#t292">292</a></span><span class="t"> <span class="str">'cdD:eI:n:o:rs:p:PUvw:xz'</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t293" href="#t293">293</a></span><span class="t"> <span class="op">[</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t294" href="#t294">294</a></span><span class="t"> <span class="str">'check'</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t295" href="#t295">295</a></span><span class="t"> <span class="str">'markers='</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t296" href="#t296">296</a></span><span class="t"> <span class="str">'verbosity='</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t297" href="#t297">297</a></span><span class="t"> <span class="op">]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t298" href="#t298">298</a></span><span class="t"> <span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t299" href="#t299">299</a></span><span class="t"> <span class="key">except</span> <span class="nam">getopt</span><span class="op">.</span><span class="nam">error</span> <span class="key">as</span> <span class="nam">msg</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t300" href="#t300">300</a></span><span class="t"> <span class="key">raise</span> <span class="nam">CogUsageError</span><span class="op">(</span><span class="nam">msg</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t301" href="#t301">301</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t302" href="#t302">302</a></span><span class="t"> <span class="com"># Handle the command line arguments.</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t303" href="#t303">303</a></span><span class="t"> <span class="key">for</span> <span class="nam">o</span><span class="op">,</span> <span class="nam">a</span> <span class="key">in</span> <span class="nam">opts</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t304" href="#t304">304</a></span><span class="t"> <span class="key">if</span> <span class="nam">o</span> <span class="op">==</span> <span class="str">'-c'</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t305" href="#t305">305</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">bHashOutput</span> <span class="op">=</span> <span class="key">True</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t306" href="#t306">306</a></span><span class="t"> <span class="key">elif</span> <span class="nam">o</span> <span class="op">==</span> <span class="str">'-d'</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t307" href="#t307">307</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">bDeleteCode</span> <span class="op">=</span> <span class="key">True</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t308" href="#t308">308</a></span><span class="t"> <span class="key">elif</span> <span class="nam">o</span> <span class="op">==</span> <span class="str">'-D'</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t309" href="#t309">309</a></span><span class="t"> <span class="key">if</span> <span class="nam">a</span><span class="op">.</span><span class="nam">count</span><span class="op">(</span><span class="str">'='</span><span class="op">)</span> <span class="op"><</span> <span class="num">1</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t310" href="#t310">310</a></span><span class="t"> <span class="key">raise</span> <span class="nam">CogUsageError</span><span class="op">(</span><span class="str">"-D takes a name=value argument"</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t311" href="#t311">311</a></span><span class="t"> <span class="nam">name</span><span class="op">,</span> <span class="nam">value</span> <span class="op">=</span> <span class="nam">a</span><span class="op">.</span><span class="nam">split</span><span class="op">(</span><span class="str">'='</span><span class="op">,</span> <span class="num">1</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t312" href="#t312">312</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">defines</span><span class="op">[</span><span class="nam">name</span><span class="op">]</span> <span class="op">=</span> <span class="nam">value</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t313" href="#t313">313</a></span><span class="t"> <span class="key">elif</span> <span class="nam">o</span> <span class="op">==</span> <span class="str">'-e'</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t314" href="#t314">314</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">bWarnEmpty</span> <span class="op">=</span> <span class="key">True</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t315" href="#t315">315</a></span><span class="t"> <span class="key">elif</span> <span class="nam">o</span> <span class="op">==</span> <span class="str">'-I'</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t316" href="#t316">316</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">addToIncludePath</span><span class="op">(</span><span class="nam">os</span><span class="op">.</span><span class="nam">path</span><span class="op">.</span><span class="nam">abspath</span><span class="op">(</span><span class="nam">a</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t317" href="#t317">317</a></span><span class="t"> <span class="key">elif</span> <span class="nam">o</span> <span class="op">==</span> <span class="str">'-n'</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t318" href="#t318">318</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">sEncoding</span> <span class="op">=</span> <span class="nam">a</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t319" href="#t319">319</a></span><span class="t"> <span class="key">elif</span> <span class="nam">o</span> <span class="op">==</span> <span class="str">'-o'</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t320" href="#t320">320</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">sOutputName</span> <span class="op">=</span> <span class="nam">a</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t321" href="#t321">321</a></span><span class="t"> <span class="key">elif</span> <span class="nam">o</span> <span class="op">==</span> <span class="str">'-r'</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t322" href="#t322">322</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">bReplace</span> <span class="op">=</span> <span class="key">True</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t323" href="#t323">323</a></span><span class="t"> <span class="key">elif</span> <span class="nam">o</span> <span class="op">==</span> <span class="str">'-s'</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t324" href="#t324">324</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">sSuffix</span> <span class="op">=</span> <span class="nam">a</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t325" href="#t325">325</a></span><span class="t"> <span class="key">elif</span> <span class="nam">o</span> <span class="op">==</span> <span class="str">'-p'</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t326" href="#t326">326</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">sPrologue</span> <span class="op">=</span> <span class="nam">a</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t327" href="#t327">327</a></span><span class="t"> <span class="key">elif</span> <span class="nam">o</span> <span class="op">==</span> <span class="str">'-P'</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t328" href="#t328">328</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">bPrintOutput</span> <span class="op">=</span> <span class="key">True</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t329" href="#t329">329</a></span><span class="t"> <span class="key">elif</span> <span class="nam">o</span> <span class="op">==</span> <span class="str">'-U'</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t330" href="#t330">330</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">bNewlines</span> <span class="op">=</span> <span class="key">True</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t331" href="#t331">331</a></span><span class="t"> <span class="key">elif</span> <span class="nam">o</span> <span class="op">==</span> <span class="str">'-v'</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t332" href="#t332">332</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">bShowVersion</span> <span class="op">=</span> <span class="key">True</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t333" href="#t333">333</a></span><span class="t"> <span class="key">elif</span> <span class="nam">o</span> <span class="op">==</span> <span class="str">'-w'</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t334" href="#t334">334</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">sMakeWritableCmd</span> <span class="op">=</span> <span class="nam">a</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t335" href="#t335">335</a></span><span class="t"> <span class="key">elif</span> <span class="nam">o</span> <span class="op">==</span> <span class="str">'-x'</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t336" href="#t336">336</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">bNoGenerate</span> <span class="op">=</span> <span class="key">True</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t337" href="#t337">337</a></span><span class="t"> <span class="key">elif</span> <span class="nam">o</span> <span class="op">==</span> <span class="str">'-z'</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t338" href="#t338">338</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">bEofCanBeEnd</span> <span class="op">=</span> <span class="key">True</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t339" href="#t339">339</a></span><span class="t"> <span class="key">elif</span> <span class="nam">o</span> <span class="op">==</span> <span class="str">'--check'</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t340" href="#t340">340</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">bCheck</span> <span class="op">=</span> <span class="key">True</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t341" href="#t341">341</a></span><span class="t"> <span class="key">elif</span> <span class="nam">o</span> <span class="op">==</span> <span class="str">'--markers'</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t342" href="#t342">342</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">_parse_markers</span><span class="op">(</span><span class="nam">a</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t343" href="#t343">343</a></span><span class="t"> <span class="key">elif</span> <span class="nam">o</span> <span class="op">==</span> <span class="str">'--verbosity'</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t344" href="#t344">344</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">verbosity</span> <span class="op">=</span> <span class="nam">int</span><span class="op">(</span><span class="nam">a</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t345" href="#t345">345</a></span><span class="t"> <span class="key">else</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t346" href="#t346">346</a></span><span class="t"> <span class="com"># Since getopt.getopt is given a list of possible flags,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t347" href="#t347">347</a></span><span class="t"> <span class="com"># this is an internal error.</span> </span><span class="r"></span></p> + <p class="exc show_exc"><span class="n"><a id="t348" href="#t348">348</a></span><span class="t"> <span class="key">raise</span> <span class="nam">CogInternalError</span><span class="op">(</span><span class="str">f"Don't understand argument {o}"</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t349" href="#t349">349</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t350" href="#t350">350</a></span><span class="t"> <span class="key">def</span> <span class="nam">_parse_markers</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">val</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t351" href="#t351">351</a></span><span class="t"> <span class="key">try</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t352" href="#t352">352</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">sBeginSpec</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">sEndSpec</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">sEndOutput</span> <span class="op">=</span> <span class="nam">val</span><span class="op">.</span><span class="nam">split</span><span class="op">(</span><span class="str">" "</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t353" href="#t353">353</a></span><span class="t"> <span class="key">except</span> <span class="nam">ValueError</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t354" href="#t354">354</a></span><span class="t"> <span class="key">raise</span> <span class="nam">CogUsageError</span><span class="op">(</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t355" href="#t355">355</a></span><span class="t"> <span class="str">f"--markers requires 3 values separated by spaces, could not parse {val!r}"</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t356" href="#t356">356</a></span><span class="t"> <span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t357" href="#t357">357</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t358" href="#t358">358</a></span><span class="t"> <span class="key">def</span> <span class="nam">validate</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t359" href="#t359">359</a></span><span class="t"> <span class="str">""" Does nothing if everything is OK, raises CogError's if it's not.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t360" href="#t360">360</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t361" href="#t361">361</a></span><span class="t"> <span class="key">if</span> <span class="nam">self</span><span class="op">.</span><span class="nam">bReplace</span> <span class="key">and</span> <span class="nam">self</span><span class="op">.</span><span class="nam">bDeleteCode</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t362" href="#t362">362</a></span><span class="t"> <span class="key">raise</span> <span class="nam">CogUsageError</span><span class="op">(</span><span class="str">"Can't use -d with -r (or you would delete all your source!)"</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t363" href="#t363">363</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t364" href="#t364">364</a></span><span class="t"> <span class="key">if</span> <span class="nam">self</span><span class="op">.</span><span class="nam">bReplace</span> <span class="key">and</span> <span class="nam">self</span><span class="op">.</span><span class="nam">sOutputName</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t365" href="#t365">365</a></span><span class="t"> <span class="key">raise</span> <span class="nam">CogUsageError</span><span class="op">(</span><span class="str">"Can't use -o with -r (they are opposites)"</span><span class="op">)</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t366" href="#t366">366</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t367" href="#t367">367</a></span><span class="t"> <span class="key">def</span> <span class="nam">validate</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t368" href="#t368">368</a></span><span class="t"> <span class="str">""" Does nothing if everything is OK, raises CogError's if it's not.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t369" href="#t369">369</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t370" href="#t370">370</a></span><span class="t"> <span class="key">if</span> <span class="nam">self</span><span class="op">.</span><span class="nam">bReplace</span> <span class="key">and</span> <span class="nam">self</span><span class="op">.</span><span class="nam">bDeleteCode</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t371" href="#t371">371</a></span><span class="t"> <span class="key">raise</span> <span class="nam">CogUsageError</span><span class="op">(</span><span class="str">"Can't use -d with -r (or you would delete all your source!)"</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t372" href="#t372">372</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t373" href="#t373">373</a></span><span class="t"> <span class="key">if</span> <span class="nam">self</span><span class="op">.</span><span class="nam">bReplace</span> <span class="key">and</span> <span class="nam">self</span><span class="op">.</span><span class="nam">sOutputName</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t374" href="#t374">374</a></span><span class="t"> <span class="key">raise</span> <span class="nam">CogUsageError</span><span class="op">(</span><span class="str">"Can't use -o with -r (they are opposites)"</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t375" href="#t375">375</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t376" href="#t376">376</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t377" href="#t377">377</a></span><span class="t"><span class="key">class</span> <span class="nam">Cog</span><span class="op">(</span><span class="nam">Redirectable</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t378" href="#t378">378</a></span><span class="t"> <span class="str">""" The Cog engine.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t379" href="#t379">379</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t380" href="#t380">380</a></span><span class="t"> <span class="key">def</span> <span class="nam">__init__</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t381" href="#t381">381</a></span><span class="t"> <span class="nam">Redirectable</span><span class="op">.</span><span class="nam">__init__</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t382" href="#t382">382</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span> <span class="op">=</span> <span class="nam">CogOptions</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t383" href="#t383">383</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">_fixEndOutputPatterns</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t384" href="#t384">384</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cogmodulename</span> <span class="op">=</span> <span class="str">"cog"</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t385" href="#t385">385</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">createCogModule</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t386" href="#t386">386</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">bCheckFailed</span> <span class="op">=</span> <span class="key">False</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t387" href="#t387">387</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t388" href="#t388">388</a></span><span class="t"> <span class="key">def</span> <span class="nam">_fixEndOutputPatterns</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t389" href="#t389">389</a></span><span class="t"> <span class="nam">end_output</span> <span class="op">=</span> <span class="nam">re</span><span class="op">.</span><span class="nam">escape</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">sEndOutput</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t390" href="#t390">390</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">reEndOutput</span> <span class="op">=</span> <span class="nam">re</span><span class="op">.</span><span class="nam">compile</span><span class="op">(</span><span class="nam">end_output</span> <span class="op">+</span> <span class="str">r'(?P<hashsect> *\(checksum: (?P<hash>[a-f0-9]+)\))'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t391" href="#t391">391</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">sEndFormat</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">sEndOutput</span> <span class="op">+</span> <span class="str">' (checksum: %s)'</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t367" href="#t367">367</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t368" href="#t368">368</a></span><span class="t"><span class="key">class</span> <span class="nam">Cog</span><span class="op">(</span><span class="nam">Redirectable</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t369" href="#t369">369</a></span><span class="t"> <span class="str">""" The Cog engine.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t370" href="#t370">370</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t371" href="#t371">371</a></span><span class="t"> <span class="key">def</span> <span class="nam">__init__</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t372" href="#t372">372</a></span><span class="t"> <span class="nam">super</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">__init__</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t373" href="#t373">373</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span> <span class="op">=</span> <span class="nam">CogOptions</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t374" href="#t374">374</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">_fixEndOutputPatterns</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t375" href="#t375">375</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cogmodulename</span> <span class="op">=</span> <span class="str">"cog"</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t376" href="#t376">376</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">createCogModule</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t377" href="#t377">377</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">bCheckFailed</span> <span class="op">=</span> <span class="key">False</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t378" href="#t378">378</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t379" href="#t379">379</a></span><span class="t"> <span class="key">def</span> <span class="nam">_fixEndOutputPatterns</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t380" href="#t380">380</a></span><span class="t"> <span class="nam">end_output</span> <span class="op">=</span> <span class="nam">re</span><span class="op">.</span><span class="nam">escape</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">sEndOutput</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t381" href="#t381">381</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">reEndOutput</span> <span class="op">=</span> <span class="nam">re</span><span class="op">.</span><span class="nam">compile</span><span class="op">(</span><span class="nam">end_output</span> <span class="op">+</span> <span class="str">r"(?P<hashsect> *\(checksum: (?P<hash>[a-f0-9]+)\))"</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t382" href="#t382">382</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">sEndFormat</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">sEndOutput</span> <span class="op">+</span> <span class="str">" (checksum: %s)"</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t383" href="#t383">383</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t384" href="#t384">384</a></span><span class="t"> <span class="key">def</span> <span class="nam">showWarning</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">msg</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t385" href="#t385">385</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">prout</span><span class="op">(</span><span class="str">f"Warning: {msg}"</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t386" href="#t386">386</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t387" href="#t387">387</a></span><span class="t"> <span class="key">def</span> <span class="nam">isBeginSpecLine</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">s</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t388" href="#t388">388</a></span><span class="t"> <span class="key">return</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">sBeginSpec</span> <span class="key">in</span> <span class="nam">s</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t389" href="#t389">389</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t390" href="#t390">390</a></span><span class="t"> <span class="key">def</span> <span class="nam">isEndSpecLine</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">s</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t391" href="#t391">391</a></span><span class="t"> <span class="key">return</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">sEndSpec</span> <span class="key">in</span> <span class="nam">s</span> <span class="key">and</span> <span class="key">not</span> <span class="nam">self</span><span class="op">.</span><span class="nam">isEndOutputLine</span><span class="op">(</span><span class="nam">s</span><span class="op">)</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t392" href="#t392">392</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t393" href="#t393">393</a></span><span class="t"> <span class="key">def</span> <span class="nam">showWarning</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">msg</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t394" href="#t394">394</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">prout</span><span class="op">(</span><span class="str">"Warning: "</span><span class="op">+</span><span class="nam">msg</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t393" href="#t393">393</a></span><span class="t"> <span class="key">def</span> <span class="nam">isEndOutputLine</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">s</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t394" href="#t394">394</a></span><span class="t"> <span class="key">return</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">sEndOutput</span> <span class="key">in</span> <span class="nam">s</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t395" href="#t395">395</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t396" href="#t396">396</a></span><span class="t"> <span class="key">def</span> <span class="nam">isBeginSpecLine</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">s</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t397" href="#t397">397</a></span><span class="t"> <span class="key">return</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">sBeginSpec</span> <span class="key">in</span> <span class="nam">s</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t398" href="#t398">398</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t399" href="#t399">399</a></span><span class="t"> <span class="key">def</span> <span class="nam">isEndSpecLine</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">s</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t400" href="#t400">400</a></span><span class="t"> <span class="key">return</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">sEndSpec</span> <span class="key">in</span> <span class="nam">s</span> <span class="key">and</span> <span class="key">not</span> <span class="nam">self</span><span class="op">.</span><span class="nam">isEndOutputLine</span><span class="op">(</span><span class="nam">s</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t401" href="#t401">401</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t402" href="#t402">402</a></span><span class="t"> <span class="key">def</span> <span class="nam">isEndOutputLine</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">s</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t403" href="#t403">403</a></span><span class="t"> <span class="key">return</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">sEndOutput</span> <span class="key">in</span> <span class="nam">s</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t404" href="#t404">404</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t405" href="#t405">405</a></span><span class="t"> <span class="key">def</span> <span class="nam">createCogModule</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t406" href="#t406">406</a></span><span class="t"> <span class="str">""" Make a cog "module" object so that imported Python modules</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t407" href="#t407">407</a></span><span class="t"><span class="str"> can say "import cog" and get our state.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t408" href="#t408">408</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t409" href="#t409">409</a></span><span class="t"> <span class="key">class</span> <span class="nam">DummyModule</span><span class="op">(</span><span class="nam">object</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t410" href="#t410">410</a></span><span class="t"> <span class="str">"""Modules don't have to be anything special, just an object will do."""</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t411" href="#t411">411</a></span><span class="t"> <span class="key">pass</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t412" href="#t412">412</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cogmodule</span> <span class="op">=</span> <span class="nam">DummyModule</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t413" href="#t413">413</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cogmodule</span><span class="op">.</span><span class="nam">path</span> <span class="op">=</span> <span class="op">[</span><span class="op">]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t414" href="#t414">414</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t415" href="#t415">415</a></span><span class="t"> <span class="key">def</span> <span class="nam">openOutputFile</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">fname</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t416" href="#t416">416</a></span><span class="t"> <span class="str">""" Open an output file, taking all the details into account.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t417" href="#t417">417</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t418" href="#t418">418</a></span><span class="t"> <span class="nam">opts</span> <span class="op">=</span> <span class="op">{</span><span class="op">}</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t419" href="#t419">419</a></span><span class="t"> <span class="nam">mode</span> <span class="op">=</span> <span class="str">"w"</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t420" href="#t420">420</a></span><span class="t"> <span class="key">if</span> <span class="nam">PY3</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t421" href="#t421">421</a></span><span class="t"> <span class="nam">opts</span><span class="op">[</span><span class="str">'encoding'</span><span class="op">]</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">sEncoding</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t422" href="#t422">422</a></span><span class="t"> <span class="key">if</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">bNewlines</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t423" href="#t423">423</a></span><span class="t"> <span class="key">if</span> <span class="nam">PY3</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t424" href="#t424">424</a></span><span class="t"> <span class="nam">opts</span><span class="op">[</span><span class="str">'newline'</span><span class="op">]</span> <span class="op">=</span> <span class="str">"\n"</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t425" href="#t425">425</a></span><span class="t"> <span class="key">else</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t426" href="#t426">426</a></span><span class="t"> <span class="nam">mode</span> <span class="op">=</span> <span class="str">"wb"</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t427" href="#t427">427</a></span><span class="t"> <span class="nam">fdir</span> <span class="op">=</span> <span class="nam">os</span><span class="op">.</span><span class="nam">path</span><span class="op">.</span><span class="nam">dirname</span><span class="op">(</span><span class="nam">fname</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t428" href="#t428">428</a></span><span class="t"> <span class="key">if</span> <span class="nam">os</span><span class="op">.</span><span class="nam">path</span><span class="op">.</span><span class="nam">dirname</span><span class="op">(</span><span class="nam">fdir</span><span class="op">)</span> <span class="key">and</span> <span class="key">not</span> <span class="nam">os</span><span class="op">.</span><span class="nam">path</span><span class="op">.</span><span class="nam">exists</span><span class="op">(</span><span class="nam">fdir</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t429" href="#t429">429</a></span><span class="t"> <span class="nam">os</span><span class="op">.</span><span class="nam">makedirs</span><span class="op">(</span><span class="nam">fdir</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t430" href="#t430">430</a></span><span class="t"> <span class="key">return</span> <span class="nam">open</span><span class="op">(</span><span class="nam">fname</span><span class="op">,</span> <span class="nam">mode</span><span class="op">,</span> <span class="op">**</span><span class="nam">opts</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t431" href="#t431">431</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t432" href="#t432">432</a></span><span class="t"> <span class="key">def</span> <span class="nam">openInputFile</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">fname</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t433" href="#t433">433</a></span><span class="t"> <span class="str">""" Open an input file. """</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t434" href="#t434">434</a></span><span class="t"> <span class="key">if</span> <span class="nam">fname</span> <span class="op">==</span> <span class="str">"-"</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t435" href="#t435">435</a></span><span class="t"> <span class="key">return</span> <span class="nam">sys</span><span class="op">.</span><span class="nam">stdin</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t436" href="#t436">436</a></span><span class="t"> <span class="key">else</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t437" href="#t437">437</a></span><span class="t"> <span class="nam">opts</span> <span class="op">=</span> <span class="op">{</span><span class="op">}</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t438" href="#t438">438</a></span><span class="t"> <span class="key">if</span> <span class="nam">PY3</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t439" href="#t439">439</a></span><span class="t"> <span class="nam">opts</span><span class="op">[</span><span class="str">'encoding'</span><span class="op">]</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">sEncoding</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t440" href="#t440">440</a></span><span class="t"> <span class="key">return</span> <span class="nam">open</span><span class="op">(</span><span class="nam">fname</span><span class="op">,</span> <span class="str">"r"</span><span class="op">,</span> <span class="op">**</span><span class="nam">opts</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t396" href="#t396">396</a></span><span class="t"> <span class="key">def</span> <span class="nam">createCogModule</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t397" href="#t397">397</a></span><span class="t"> <span class="str">""" Make a cog "module" object so that imported Python modules</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t398" href="#t398">398</a></span><span class="t"><span class="str"> can say "import cog" and get our state.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t399" href="#t399">399</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t400" href="#t400">400</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cogmodule</span> <span class="op">=</span> <span class="nam">types</span><span class="op">.</span><span class="nam">SimpleNamespace</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t401" href="#t401">401</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cogmodule</span><span class="op">.</span><span class="nam">path</span> <span class="op">=</span> <span class="op">[</span><span class="op">]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t402" href="#t402">402</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t403" href="#t403">403</a></span><span class="t"> <span class="key">def</span> <span class="nam">openOutputFile</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">fname</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t404" href="#t404">404</a></span><span class="t"> <span class="str">""" Open an output file, taking all the details into account.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t405" href="#t405">405</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t406" href="#t406">406</a></span><span class="t"> <span class="nam">opts</span> <span class="op">=</span> <span class="op">{</span><span class="op">}</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t407" href="#t407">407</a></span><span class="t"> <span class="nam">mode</span> <span class="op">=</span> <span class="str">"w"</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t408" href="#t408">408</a></span><span class="t"> <span class="nam">opts</span><span class="op">[</span><span class="str">'encoding'</span><span class="op">]</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">sEncoding</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t409" href="#t409">409</a></span><span class="t"> <span class="key">if</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">bNewlines</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t410" href="#t410">410</a></span><span class="t"> <span class="nam">opts</span><span class="op">[</span><span class="str">"newline"</span><span class="op">]</span> <span class="op">=</span> <span class="str">"\n"</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t411" href="#t411">411</a></span><span class="t"> <span class="nam">fdir</span> <span class="op">=</span> <span class="nam">os</span><span class="op">.</span><span class="nam">path</span><span class="op">.</span><span class="nam">dirname</span><span class="op">(</span><span class="nam">fname</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t412" href="#t412">412</a></span><span class="t"> <span class="key">if</span> <span class="nam">os</span><span class="op">.</span><span class="nam">path</span><span class="op">.</span><span class="nam">dirname</span><span class="op">(</span><span class="nam">fdir</span><span class="op">)</span> <span class="key">and</span> <span class="key">not</span> <span class="nam">os</span><span class="op">.</span><span class="nam">path</span><span class="op">.</span><span class="nam">exists</span><span class="op">(</span><span class="nam">fdir</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t413" href="#t413">413</a></span><span class="t"> <span class="nam">os</span><span class="op">.</span><span class="nam">makedirs</span><span class="op">(</span><span class="nam">fdir</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t414" href="#t414">414</a></span><span class="t"> <span class="key">return</span> <span class="nam">open</span><span class="op">(</span><span class="nam">fname</span><span class="op">,</span> <span class="nam">mode</span><span class="op">,</span> <span class="op">**</span><span class="nam">opts</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t415" href="#t415">415</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t416" href="#t416">416</a></span><span class="t"> <span class="key">def</span> <span class="nam">openInputFile</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">fname</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t417" href="#t417">417</a></span><span class="t"> <span class="str">""" Open an input file.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t418" href="#t418">418</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t419" href="#t419">419</a></span><span class="t"> <span class="key">if</span> <span class="nam">fname</span> <span class="op">==</span> <span class="str">"-"</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t420" href="#t420">420</a></span><span class="t"> <span class="key">return</span> <span class="nam">sys</span><span class="op">.</span><span class="nam">stdin</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t421" href="#t421">421</a></span><span class="t"> <span class="key">else</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t422" href="#t422">422</a></span><span class="t"> <span class="key">return</span> <span class="nam">open</span><span class="op">(</span><span class="nam">fname</span><span class="op">,</span> <span class="nam">encoding</span><span class="op">=</span><span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">sEncoding</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t423" href="#t423">423</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t424" href="#t424">424</a></span><span class="t"> <span class="key">def</span> <span class="nam">processFile</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">fIn</span><span class="op">,</span> <span class="nam">fOut</span><span class="op">,</span> <span class="nam">fname</span><span class="op">=</span><span class="key">None</span><span class="op">,</span> <span class="nam">globals</span><span class="op">=</span><span class="key">None</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t425" href="#t425">425</a></span><span class="t"> <span class="str">""" Process an input file object to an output file object.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t426" href="#t426">426</a></span><span class="t"><span class="str"> fIn and fOut can be file objects, or file names.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t427" href="#t427">427</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t428" href="#t428">428</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t429" href="#t429">429</a></span><span class="t"> <span class="nam">sFileIn</span> <span class="op">=</span> <span class="nam">fname</span> <span class="key">or</span> <span class="str">''</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t430" href="#t430">430</a></span><span class="t"> <span class="nam">sFileOut</span> <span class="op">=</span> <span class="nam">fname</span> <span class="key">or</span> <span class="str">''</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t431" href="#t431">431</a></span><span class="t"> <span class="nam">fInToClose</span> <span class="op">=</span> <span class="nam">fOutToClose</span> <span class="op">=</span> <span class="key">None</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t432" href="#t432">432</a></span><span class="t"> <span class="com"># Convert filenames to files.</span> </span><span class="r"></span></p> + <p class="par run show_par"><span class="n"><a id="t433" href="#t433">433</a></span><span class="t"> <span class="key">if</span> <span class="nam">isinstance</span><span class="op">(</span><span class="nam">fIn</span><span class="op">,</span> <span class="op">(</span><span class="nam">bytes</span><span class="op">,</span> <span class="nam">str</span><span class="op">)</span><span class="op">)</span><span class="op">:</span> </span><span class="r"><span class="annotate short">433 ↛ 435</span><span class="annotate long">line 433 didn't jump to line 435, because the condition on line 433 was never true</span></span></p> + <p class="pln"><span class="n"><a id="t434" href="#t434">434</a></span><span class="t"> <span class="com"># Open the input file.</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t435" href="#t435">435</a></span><span class="t"> <span class="nam">sFileIn</span> <span class="op">=</span> <span class="nam">fIn</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t436" href="#t436">436</a></span><span class="t"> <span class="nam">fIn</span> <span class="op">=</span> <span class="nam">fInToClose</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">openInputFile</span><span class="op">(</span><span class="nam">fIn</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="par run show_par"><span class="n"><a id="t437" href="#t437">437</a></span><span class="t"> <span class="key">if</span> <span class="nam">isinstance</span><span class="op">(</span><span class="nam">fOut</span><span class="op">,</span> <span class="op">(</span><span class="nam">bytes</span><span class="op">,</span> <span class="nam">str</span><span class="op">)</span><span class="op">)</span><span class="op">:</span> </span><span class="r"><span class="annotate short">437 ↛ 439</span><span class="annotate long">line 437 didn't jump to line 439, because the condition on line 437 was never true</span></span></p> + <p class="pln"><span class="n"><a id="t438" href="#t438">438</a></span><span class="t"> <span class="com"># Open the output file.</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t439" href="#t439">439</a></span><span class="t"> <span class="nam">sFileOut</span> <span class="op">=</span> <span class="nam">fOut</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t440" href="#t440">440</a></span><span class="t"> <span class="nam">fOut</span> <span class="op">=</span> <span class="nam">fOutToClose</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">openOutputFile</span><span class="op">(</span><span class="nam">fOut</span><span class="op">)</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t441" href="#t441">441</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t442" href="#t442">442</a></span><span class="t"> <span class="key">def</span> <span class="nam">processFile</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">fIn</span><span class="op">,</span> <span class="nam">fOut</span><span class="op">,</span> <span class="nam">fname</span><span class="op">=</span><span class="key">None</span><span class="op">,</span> <span class="nam">globals</span><span class="op">=</span><span class="key">None</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t443" href="#t443">443</a></span><span class="t"> <span class="str">""" Process an input file object to an output file object.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t444" href="#t444">444</a></span><span class="t"><span class="str"> fIn and fOut can be file objects, or file names.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t445" href="#t445">445</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t442" href="#t442">442</a></span><span class="t"> <span class="key">try</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t443" href="#t443">443</a></span><span class="t"> <span class="nam">fIn</span> <span class="op">=</span> <span class="nam">NumberedFileReader</span><span class="op">(</span><span class="nam">fIn</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t444" href="#t444">444</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t445" href="#t445">445</a></span><span class="t"> <span class="nam">bSawCog</span> <span class="op">=</span> <span class="key">False</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t446" href="#t446">446</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t447" href="#t447">447</a></span><span class="t"> <span class="nam">sFileIn</span> <span class="op">=</span> <span class="nam">fname</span> <span class="key">or</span> <span class="str">''</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t448" href="#t448">448</a></span><span class="t"> <span class="nam">sFileOut</span> <span class="op">=</span> <span class="nam">fname</span> <span class="key">or</span> <span class="str">''</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t449" href="#t449">449</a></span><span class="t"> <span class="nam">fInToClose</span> <span class="op">=</span> <span class="nam">fOutToClose</span> <span class="op">=</span> <span class="key">None</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t450" href="#t450">450</a></span><span class="t"> <span class="com"># Convert filenames to files.</span> </span><span class="r"></span></p> - <p class="par run show_par"><span class="n"><a id="t451" href="#t451">451</a></span><span class="t"> <span class="key">if</span> <span class="nam">isinstance</span><span class="op">(</span><span class="nam">fIn</span><span class="op">,</span> <span class="nam">string_types</span><span class="op">)</span><span class="op">:</span> </span><span class="r"><span class="annotate short">451 ↛ 453</span><span class="annotate long">line 451 didn't jump to line 453, because the condition on line 451 was never true</span></span></p> - <p class="pln"><span class="n"><a id="t452" href="#t452">452</a></span><span class="t"> <span class="com"># Open the input file.</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t453" href="#t453">453</a></span><span class="t"> <span class="nam">sFileIn</span> <span class="op">=</span> <span class="nam">fIn</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t454" href="#t454">454</a></span><span class="t"> <span class="nam">fIn</span> <span class="op">=</span> <span class="nam">fInToClose</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">openInputFile</span><span class="op">(</span><span class="nam">fIn</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="par run show_par"><span class="n"><a id="t455" href="#t455">455</a></span><span class="t"> <span class="key">if</span> <span class="nam">isinstance</span><span class="op">(</span><span class="nam">fOut</span><span class="op">,</span> <span class="nam">string_types</span><span class="op">)</span><span class="op">:</span> </span><span class="r"><span class="annotate short">455 ↛ 457</span><span class="annotate long">line 455 didn't jump to line 457, because the condition on line 455 was never true</span></span></p> - <p class="pln"><span class="n"><a id="t456" href="#t456">456</a></span><span class="t"> <span class="com"># Open the output file.</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t457" href="#t457">457</a></span><span class="t"> <span class="nam">sFileOut</span> <span class="op">=</span> <span class="nam">fOut</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t458" href="#t458">458</a></span><span class="t"> <span class="nam">fOut</span> <span class="op">=</span> <span class="nam">fOutToClose</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">openOutputFile</span><span class="op">(</span><span class="nam">fOut</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t459" href="#t459">459</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t460" href="#t460">460</a></span><span class="t"> <span class="key">try</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t461" href="#t461">461</a></span><span class="t"> <span class="nam">fIn</span> <span class="op">=</span> <span class="nam">NumberedFileReader</span><span class="op">(</span><span class="nam">fIn</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t462" href="#t462">462</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t463" href="#t463">463</a></span><span class="t"> <span class="nam">bSawCog</span> <span class="op">=</span> <span class="key">False</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t464" href="#t464">464</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t465" href="#t465">465</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cogmodule</span><span class="op">.</span><span class="nam">inFile</span> <span class="op">=</span> <span class="nam">sFileIn</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t466" href="#t466">466</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cogmodule</span><span class="op">.</span><span class="nam">outFile</span> <span class="op">=</span> <span class="nam">sFileOut</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t467" href="#t467">467</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cogmodulename</span> <span class="op">=</span> <span class="str">'cog_'</span> <span class="op">+</span> <span class="nam">hashlib</span><span class="op">.</span><span class="nam">md5</span><span class="op">(</span><span class="nam">sFileOut</span><span class="op">.</span><span class="nam">encode</span><span class="op">(</span><span class="op">)</span><span class="op">)</span><span class="op">.</span><span class="nam">hexdigest</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t468" href="#t468">468</a></span><span class="t"> <span class="nam">sys</span><span class="op">.</span><span class="nam">modules</span><span class="op">[</span><span class="nam">self</span><span class="op">.</span><span class="nam">cogmodulename</span><span class="op">]</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">cogmodule</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t469" href="#t469">469</a></span><span class="t"> <span class="com"># if "import cog" explicitly done in code by user, note threading will cause clashes.</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t470" href="#t470">470</a></span><span class="t"> <span class="nam">sys</span><span class="op">.</span><span class="nam">modules</span><span class="op">[</span><span class="str">'cog'</span><span class="op">]</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">cogmodule</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t471" href="#t471">471</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t472" href="#t472">472</a></span><span class="t"> <span class="com"># The globals dict we'll use for this file.</span> </span><span class="r"></span></p> - <p class="par run show_par"><span class="n"><a id="t473" href="#t473">473</a></span><span class="t"> <span class="key">if</span> <span class="nam">globals</span> <span class="key">is</span> <span class="key">None</span><span class="op">:</span> </span><span class="r"><span class="annotate short">473 ↛ 477</span><span class="annotate long">line 473 didn't jump to line 477, because the condition on line 473 was never false</span></span></p> - <p class="run"><span class="n"><a id="t474" href="#t474">474</a></span><span class="t"> <span class="nam">globals</span> <span class="op">=</span> <span class="op">{</span><span class="op">}</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t475" href="#t475">475</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t476" href="#t476">476</a></span><span class="t"> <span class="com"># If there are any global defines, put them in the globals.</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t477" href="#t477">477</a></span><span class="t"> <span class="nam">globals</span><span class="op">.</span><span class="nam">update</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">defines</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t478" href="#t478">478</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t479" href="#t479">479</a></span><span class="t"> <span class="com"># loop over generator chunks</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t480" href="#t480">480</a></span><span class="t"> <span class="nam">l</span> <span class="op">=</span> <span class="nam">fIn</span><span class="op">.</span><span class="nam">readline</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t481" href="#t481">481</a></span><span class="t"> <span class="key">while</span> <span class="nam">l</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t482" href="#t482">482</a></span><span class="t"> <span class="com"># Find the next spec begin</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t483" href="#t483">483</a></span><span class="t"> <span class="key">while</span> <span class="nam">l</span> <span class="key">and</span> <span class="key">not</span> <span class="nam">self</span><span class="op">.</span><span class="nam">isBeginSpecLine</span><span class="op">(</span><span class="nam">l</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="par run show_par"><span class="n"><a id="t484" href="#t484">484</a></span><span class="t"> <span class="key">if</span> <span class="nam">self</span><span class="op">.</span><span class="nam">isEndSpecLine</span><span class="op">(</span><span class="nam">l</span><span class="op">)</span><span class="op">:</span> </span><span class="r"><span class="annotate short">484 ↛ 485</span><span class="annotate long">line 484 didn't jump to line 485, because the condition on line 484 was never true</span></span></p> - <p class="mis show_mis"><span class="n"><a id="t485" href="#t485">485</a></span><span class="t"> <span class="key">raise</span> <span class="nam">CogError</span><span class="op">(</span><span class="str">"Unexpected '%s'"</span> <span class="op">%</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">sEndSpec</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t486" href="#t486">486</a></span><span class="t"> <span class="nam">file</span><span class="op">=</span><span class="nam">sFileIn</span><span class="op">,</span> <span class="nam">line</span><span class="op">=</span><span class="nam">fIn</span><span class="op">.</span><span class="nam">linenumber</span><span class="op">(</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="par run show_par"><span class="n"><a id="t487" href="#t487">487</a></span><span class="t"> <span class="key">if</span> <span class="nam">self</span><span class="op">.</span><span class="nam">isEndOutputLine</span><span class="op">(</span><span class="nam">l</span><span class="op">)</span><span class="op">:</span> </span><span class="r"><span class="annotate short">487 ↛ 488</span><span class="annotate long">line 487 didn't jump to line 488, because the condition on line 487 was never true</span></span></p> - <p class="mis show_mis"><span class="n"><a id="t488" href="#t488">488</a></span><span class="t"> <span class="key">raise</span> <span class="nam">CogError</span><span class="op">(</span><span class="str">"Unexpected '%s'"</span> <span class="op">%</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">sEndOutput</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t489" href="#t489">489</a></span><span class="t"> <span class="nam">file</span><span class="op">=</span><span class="nam">sFileIn</span><span class="op">,</span> <span class="nam">line</span><span class="op">=</span><span class="nam">fIn</span><span class="op">.</span><span class="nam">linenumber</span><span class="op">(</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t490" href="#t490">490</a></span><span class="t"> <span class="nam">fOut</span><span class="op">.</span><span class="nam">write</span><span class="op">(</span><span class="nam">l</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t491" href="#t491">491</a></span><span class="t"> <span class="nam">l</span> <span class="op">=</span> <span class="nam">fIn</span><span class="op">.</span><span class="nam">readline</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t492" href="#t492">492</a></span><span class="t"> <span class="key">if</span> <span class="key">not</span> <span class="nam">l</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t493" href="#t493">493</a></span><span class="t"> <span class="key">break</span> </span><span class="r"></span></p> - <p class="par run show_par"><span class="n"><a id="t494" href="#t494">494</a></span><span class="t"> <span class="key">if</span> <span class="key">not</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">bDeleteCode</span><span class="op">:</span> </span><span class="r"><span class="annotate short">494 ↛ 498</span><span class="annotate long">line 494 didn't jump to line 498, because the condition on line 494 was never false</span></span></p> - <p class="run"><span class="n"><a id="t495" href="#t495">495</a></span><span class="t"> <span class="nam">fOut</span><span class="op">.</span><span class="nam">write</span><span class="op">(</span><span class="nam">l</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t496" href="#t496">496</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t497" href="#t497">497</a></span><span class="t"> <span class="com"># l is the begin spec</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t498" href="#t498">498</a></span><span class="t"> <span class="nam">gen</span> <span class="op">=</span> <span class="nam">CogGenerator</span><span class="op">(</span><span class="nam">options</span><span class="op">=</span><span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t499" href="#t499">499</a></span><span class="t"> <span class="nam">gen</span><span class="op">.</span><span class="nam">setOutput</span><span class="op">(</span><span class="nam">stdout</span><span class="op">=</span><span class="nam">self</span><span class="op">.</span><span class="nam">stdout</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t500" href="#t500">500</a></span><span class="t"> <span class="nam">gen</span><span class="op">.</span><span class="nam">parseMarker</span><span class="op">(</span><span class="nam">l</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t501" href="#t501">501</a></span><span class="t"> <span class="nam">firstLineNum</span> <span class="op">=</span> <span class="nam">fIn</span><span class="op">.</span><span class="nam">linenumber</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t502" href="#t502">502</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cogmodule</span><span class="op">.</span><span class="nam">firstLineNum</span> <span class="op">=</span> <span class="nam">firstLineNum</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t503" href="#t503">503</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t504" href="#t504">504</a></span><span class="t"> <span class="com"># If the spec begin is also a spec end, then process the single</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t505" href="#t505">505</a></span><span class="t"> <span class="com"># line of code inside.</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t506" href="#t506">506</a></span><span class="t"> <span class="key">if</span> <span class="nam">self</span><span class="op">.</span><span class="nam">isEndSpecLine</span><span class="op">(</span><span class="nam">l</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t507" href="#t507">507</a></span><span class="t"> <span class="nam">beg</span> <span class="op">=</span> <span class="nam">l</span><span class="op">.</span><span class="nam">find</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">sBeginSpec</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t508" href="#t508">508</a></span><span class="t"> <span class="nam">end</span> <span class="op">=</span> <span class="nam">l</span><span class="op">.</span><span class="nam">find</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">sEndSpec</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t509" href="#t509">509</a></span><span class="t"> <span class="key">if</span> <span class="nam">beg</span> <span class="op">></span> <span class="nam">end</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t510" href="#t510">510</a></span><span class="t"> <span class="key">raise</span> <span class="nam">CogError</span><span class="op">(</span><span class="str">"Cog code markers inverted"</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t511" href="#t511">511</a></span><span class="t"> <span class="nam">file</span><span class="op">=</span><span class="nam">sFileIn</span><span class="op">,</span> <span class="nam">line</span><span class="op">=</span><span class="nam">firstLineNum</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t512" href="#t512">512</a></span><span class="t"> <span class="key">else</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t513" href="#t513">513</a></span><span class="t"> <span class="nam">sCode</span> <span class="op">=</span> <span class="nam">l</span><span class="op">[</span><span class="nam">beg</span><span class="op">+</span><span class="nam">len</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">sBeginSpec</span><span class="op">)</span><span class="op">:</span><span class="nam">end</span><span class="op">]</span><span class="op">.</span><span class="nam">strip</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t514" href="#t514">514</a></span><span class="t"> <span class="nam">gen</span><span class="op">.</span><span class="nam">parseLine</span><span class="op">(</span><span class="nam">sCode</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t515" href="#t515">515</a></span><span class="t"> <span class="key">else</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t516" href="#t516">516</a></span><span class="t"> <span class="com"># Deal with an ordinary code block.</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t517" href="#t517">517</a></span><span class="t"> <span class="nam">l</span> <span class="op">=</span> <span class="nam">fIn</span><span class="op">.</span><span class="nam">readline</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t518" href="#t518">518</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t519" href="#t519">519</a></span><span class="t"> <span class="com"># Get all the lines in the spec</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t520" href="#t520">520</a></span><span class="t"> <span class="key">while</span> <span class="nam">l</span> <span class="key">and</span> <span class="key">not</span> <span class="nam">self</span><span class="op">.</span><span class="nam">isEndSpecLine</span><span class="op">(</span><span class="nam">l</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="par run show_par"><span class="n"><a id="t521" href="#t521">521</a></span><span class="t"> <span class="key">if</span> <span class="nam">self</span><span class="op">.</span><span class="nam">isBeginSpecLine</span><span class="op">(</span><span class="nam">l</span><span class="op">)</span><span class="op">:</span> </span><span class="r"><span class="annotate short">521 ↛ 522</span><span class="annotate long">line 521 didn't jump to line 522, because the condition on line 521 was never true</span></span></p> - <p class="mis show_mis"><span class="n"><a id="t522" href="#t522">522</a></span><span class="t"> <span class="key">raise</span> <span class="nam">CogError</span><span class="op">(</span><span class="str">"Unexpected '%s'"</span> <span class="op">%</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">sBeginSpec</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t523" href="#t523">523</a></span><span class="t"> <span class="nam">file</span><span class="op">=</span><span class="nam">sFileIn</span><span class="op">,</span> <span class="nam">line</span><span class="op">=</span><span class="nam">fIn</span><span class="op">.</span><span class="nam">linenumber</span><span class="op">(</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="par run show_par"><span class="n"><a id="t524" href="#t524">524</a></span><span class="t"> <span class="key">if</span> <span class="nam">self</span><span class="op">.</span><span class="nam">isEndOutputLine</span><span class="op">(</span><span class="nam">l</span><span class="op">)</span><span class="op">:</span> </span><span class="r"><span class="annotate short">524 ↛ 525</span><span class="annotate long">line 524 didn't jump to line 525, because the condition on line 524 was never true</span></span></p> - <p class="mis show_mis"><span class="n"><a id="t525" href="#t525">525</a></span><span class="t"> <span class="key">raise</span> <span class="nam">CogError</span><span class="op">(</span><span class="str">"Unexpected '%s'"</span> <span class="op">%</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">sEndOutput</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t526" href="#t526">526</a></span><span class="t"> <span class="nam">file</span><span class="op">=</span><span class="nam">sFileIn</span><span class="op">,</span> <span class="nam">line</span><span class="op">=</span><span class="nam">fIn</span><span class="op">.</span><span class="nam">linenumber</span><span class="op">(</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="par run show_par"><span class="n"><a id="t527" href="#t527">527</a></span><span class="t"> <span class="key">if</span> <span class="key">not</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">bDeleteCode</span><span class="op">:</span> </span><span class="r"><span class="annotate short">527 ↛ 529</span><span class="annotate long">line 527 didn't jump to line 529, because the condition on line 527 was never false</span></span></p> - <p class="run"><span class="n"><a id="t528" href="#t528">528</a></span><span class="t"> <span class="nam">fOut</span><span class="op">.</span><span class="nam">write</span><span class="op">(</span><span class="nam">l</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t529" href="#t529">529</a></span><span class="t"> <span class="nam">gen</span><span class="op">.</span><span class="nam">parseLine</span><span class="op">(</span><span class="nam">l</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t530" href="#t530">530</a></span><span class="t"> <span class="nam">l</span> <span class="op">=</span> <span class="nam">fIn</span><span class="op">.</span><span class="nam">readline</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="par run show_par"><span class="n"><a id="t531" href="#t531">531</a></span><span class="t"> <span class="key">if</span> <span class="key">not</span> <span class="nam">l</span><span class="op">:</span> </span><span class="r"><span class="annotate short">531 ↛ 532</span><span class="annotate long">line 531 didn't jump to line 532, because the condition on line 531 was never true</span></span></p> - <p class="mis show_mis"><span class="n"><a id="t532" href="#t532">532</a></span><span class="t"> <span class="key">raise</span> <span class="nam">CogError</span><span class="op">(</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t533" href="#t533">533</a></span><span class="t"> <span class="str">"Cog block begun but never ended."</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t534" href="#t534">534</a></span><span class="t"> <span class="nam">file</span><span class="op">=</span><span class="nam">sFileIn</span><span class="op">,</span> <span class="nam">line</span><span class="op">=</span><span class="nam">firstLineNum</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t447" href="#t447">447</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cogmodule</span><span class="op">.</span><span class="nam">inFile</span> <span class="op">=</span> <span class="nam">sFileIn</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t448" href="#t448">448</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cogmodule</span><span class="op">.</span><span class="nam">outFile</span> <span class="op">=</span> <span class="nam">sFileOut</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t449" href="#t449">449</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cogmodulename</span> <span class="op">=</span> <span class="str">'cog_'</span> <span class="op">+</span> <span class="nam">hashlib</span><span class="op">.</span><span class="nam">md5</span><span class="op">(</span><span class="nam">sFileOut</span><span class="op">.</span><span class="nam">encode</span><span class="op">(</span><span class="op">)</span><span class="op">)</span><span class="op">.</span><span class="nam">hexdigest</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t450" href="#t450">450</a></span><span class="t"> <span class="nam">sys</span><span class="op">.</span><span class="nam">modules</span><span class="op">[</span><span class="nam">self</span><span class="op">.</span><span class="nam">cogmodulename</span><span class="op">]</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">cogmodule</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t451" href="#t451">451</a></span><span class="t"> <span class="com"># if "import cog" explicitly done in code by user, note threading will cause clashes.</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t452" href="#t452">452</a></span><span class="t"> <span class="nam">sys</span><span class="op">.</span><span class="nam">modules</span><span class="op">[</span><span class="str">'cog'</span><span class="op">]</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">cogmodule</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t453" href="#t453">453</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t454" href="#t454">454</a></span><span class="t"> <span class="com"># The globals dict we'll use for this file.</span> </span><span class="r"></span></p> + <p class="par run show_par"><span class="n"><a id="t455" href="#t455">455</a></span><span class="t"> <span class="key">if</span> <span class="nam">globals</span> <span class="key">is</span> <span class="key">None</span><span class="op">:</span> </span><span class="r"><span class="annotate short">455 ↛ 459</span><span class="annotate long">line 455 didn't jump to line 459, because the condition on line 455 was never false</span></span></p> + <p class="run"><span class="n"><a id="t456" href="#t456">456</a></span><span class="t"> <span class="nam">globals</span> <span class="op">=</span> <span class="op">{</span><span class="op">}</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t457" href="#t457">457</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t458" href="#t458">458</a></span><span class="t"> <span class="com"># If there are any global defines, put them in the globals.</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t459" href="#t459">459</a></span><span class="t"> <span class="nam">globals</span><span class="op">.</span><span class="nam">update</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">defines</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t460" href="#t460">460</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t461" href="#t461">461</a></span><span class="t"> <span class="com"># loop over generator chunks</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t462" href="#t462">462</a></span><span class="t"> <span class="nam">l</span> <span class="op">=</span> <span class="nam">fIn</span><span class="op">.</span><span class="nam">readline</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t463" href="#t463">463</a></span><span class="t"> <span class="key">while</span> <span class="nam">l</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t464" href="#t464">464</a></span><span class="t"> <span class="com"># Find the next spec begin</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t465" href="#t465">465</a></span><span class="t"> <span class="key">while</span> <span class="nam">l</span> <span class="key">and</span> <span class="key">not</span> <span class="nam">self</span><span class="op">.</span><span class="nam">isBeginSpecLine</span><span class="op">(</span><span class="nam">l</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="par run show_par"><span class="n"><a id="t466" href="#t466">466</a></span><span class="t"> <span class="key">if</span> <span class="nam">self</span><span class="op">.</span><span class="nam">isEndSpecLine</span><span class="op">(</span><span class="nam">l</span><span class="op">)</span><span class="op">:</span> </span><span class="r"><span class="annotate short">466 ↛ 467</span><span class="annotate long">line 466 didn't jump to line 467, because the condition on line 466 was never true</span></span></p> + <p class="mis show_mis"><span class="n"><a id="t467" href="#t467">467</a></span><span class="t"> <span class="key">raise</span> <span class="nam">CogError</span><span class="op">(</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t468" href="#t468">468</a></span><span class="t"> <span class="str">f"Unexpected {self.options.sEndSpec!r}"</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t469" href="#t469">469</a></span><span class="t"> <span class="nam">file</span><span class="op">=</span><span class="nam">sFileIn</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t470" href="#t470">470</a></span><span class="t"> <span class="nam">line</span><span class="op">=</span><span class="nam">fIn</span><span class="op">.</span><span class="nam">linenumber</span><span class="op">(</span><span class="op">)</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t471" href="#t471">471</a></span><span class="t"> <span class="op">)</span> </span><span class="r"></span></p> + <p class="par run show_par"><span class="n"><a id="t472" href="#t472">472</a></span><span class="t"> <span class="key">if</span> <span class="nam">self</span><span class="op">.</span><span class="nam">isEndOutputLine</span><span class="op">(</span><span class="nam">l</span><span class="op">)</span><span class="op">:</span> </span><span class="r"><span class="annotate short">472 ↛ 473</span><span class="annotate long">line 472 didn't jump to line 473, because the condition on line 472 was never true</span></span></p> + <p class="mis show_mis"><span class="n"><a id="t473" href="#t473">473</a></span><span class="t"> <span class="key">raise</span> <span class="nam">CogError</span><span class="op">(</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t474" href="#t474">474</a></span><span class="t"> <span class="str">f"Unexpected {self.options.sEndOutput!r}"</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t475" href="#t475">475</a></span><span class="t"> <span class="nam">file</span><span class="op">=</span><span class="nam">sFileIn</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t476" href="#t476">476</a></span><span class="t"> <span class="nam">line</span><span class="op">=</span><span class="nam">fIn</span><span class="op">.</span><span class="nam">linenumber</span><span class="op">(</span><span class="op">)</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t477" href="#t477">477</a></span><span class="t"> <span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t478" href="#t478">478</a></span><span class="t"> <span class="nam">fOut</span><span class="op">.</span><span class="nam">write</span><span class="op">(</span><span class="nam">l</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t479" href="#t479">479</a></span><span class="t"> <span class="nam">l</span> <span class="op">=</span> <span class="nam">fIn</span><span class="op">.</span><span class="nam">readline</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t480" href="#t480">480</a></span><span class="t"> <span class="key">if</span> <span class="key">not</span> <span class="nam">l</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t481" href="#t481">481</a></span><span class="t"> <span class="key">break</span> </span><span class="r"></span></p> + <p class="par run show_par"><span class="n"><a id="t482" href="#t482">482</a></span><span class="t"> <span class="key">if</span> <span class="key">not</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">bDeleteCode</span><span class="op">:</span> </span><span class="r"><span class="annotate short">482 ↛ 486</span><span class="annotate long">line 482 didn't jump to line 486, because the condition on line 482 was never false</span></span></p> + <p class="run"><span class="n"><a id="t483" href="#t483">483</a></span><span class="t"> <span class="nam">fOut</span><span class="op">.</span><span class="nam">write</span><span class="op">(</span><span class="nam">l</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t484" href="#t484">484</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t485" href="#t485">485</a></span><span class="t"> <span class="com"># l is the begin spec</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t486" href="#t486">486</a></span><span class="t"> <span class="nam">gen</span> <span class="op">=</span> <span class="nam">CogGenerator</span><span class="op">(</span><span class="nam">options</span><span class="op">=</span><span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t487" href="#t487">487</a></span><span class="t"> <span class="nam">gen</span><span class="op">.</span><span class="nam">setOutput</span><span class="op">(</span><span class="nam">stdout</span><span class="op">=</span><span class="nam">self</span><span class="op">.</span><span class="nam">stdout</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t488" href="#t488">488</a></span><span class="t"> <span class="nam">gen</span><span class="op">.</span><span class="nam">parseMarker</span><span class="op">(</span><span class="nam">l</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t489" href="#t489">489</a></span><span class="t"> <span class="nam">firstLineNum</span> <span class="op">=</span> <span class="nam">fIn</span><span class="op">.</span><span class="nam">linenumber</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t490" href="#t490">490</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cogmodule</span><span class="op">.</span><span class="nam">firstLineNum</span> <span class="op">=</span> <span class="nam">firstLineNum</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t491" href="#t491">491</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t492" href="#t492">492</a></span><span class="t"> <span class="com"># If the spec begin is also a spec end, then process the single</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t493" href="#t493">493</a></span><span class="t"> <span class="com"># line of code inside.</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t494" href="#t494">494</a></span><span class="t"> <span class="key">if</span> <span class="nam">self</span><span class="op">.</span><span class="nam">isEndSpecLine</span><span class="op">(</span><span class="nam">l</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t495" href="#t495">495</a></span><span class="t"> <span class="nam">beg</span> <span class="op">=</span> <span class="nam">l</span><span class="op">.</span><span class="nam">find</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">sBeginSpec</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t496" href="#t496">496</a></span><span class="t"> <span class="nam">end</span> <span class="op">=</span> <span class="nam">l</span><span class="op">.</span><span class="nam">find</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">sEndSpec</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t497" href="#t497">497</a></span><span class="t"> <span class="key">if</span> <span class="nam">beg</span> <span class="op">></span> <span class="nam">end</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t498" href="#t498">498</a></span><span class="t"> <span class="key">raise</span> <span class="nam">CogError</span><span class="op">(</span><span class="str">"Cog code markers inverted"</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t499" href="#t499">499</a></span><span class="t"> <span class="nam">file</span><span class="op">=</span><span class="nam">sFileIn</span><span class="op">,</span> <span class="nam">line</span><span class="op">=</span><span class="nam">firstLineNum</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t500" href="#t500">500</a></span><span class="t"> <span class="key">else</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t501" href="#t501">501</a></span><span class="t"> <span class="nam">sCode</span> <span class="op">=</span> <span class="nam">l</span><span class="op">[</span><span class="nam">beg</span><span class="op">+</span><span class="nam">len</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">sBeginSpec</span><span class="op">)</span><span class="op">:</span><span class="nam">end</span><span class="op">]</span><span class="op">.</span><span class="nam">strip</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t502" href="#t502">502</a></span><span class="t"> <span class="nam">gen</span><span class="op">.</span><span class="nam">parseLine</span><span class="op">(</span><span class="nam">sCode</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t503" href="#t503">503</a></span><span class="t"> <span class="key">else</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t504" href="#t504">504</a></span><span class="t"> <span class="com"># Deal with an ordinary code block.</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t505" href="#t505">505</a></span><span class="t"> <span class="nam">l</span> <span class="op">=</span> <span class="nam">fIn</span><span class="op">.</span><span class="nam">readline</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t506" href="#t506">506</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t507" href="#t507">507</a></span><span class="t"> <span class="com"># Get all the lines in the spec</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t508" href="#t508">508</a></span><span class="t"> <span class="key">while</span> <span class="nam">l</span> <span class="key">and</span> <span class="key">not</span> <span class="nam">self</span><span class="op">.</span><span class="nam">isEndSpecLine</span><span class="op">(</span><span class="nam">l</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="par run show_par"><span class="n"><a id="t509" href="#t509">509</a></span><span class="t"> <span class="key">if</span> <span class="nam">self</span><span class="op">.</span><span class="nam">isBeginSpecLine</span><span class="op">(</span><span class="nam">l</span><span class="op">)</span><span class="op">:</span> </span><span class="r"><span class="annotate short">509 ↛ 510</span><span class="annotate long">line 509 didn't jump to line 510, because the condition on line 509 was never true</span></span></p> + <p class="mis show_mis"><span class="n"><a id="t510" href="#t510">510</a></span><span class="t"> <span class="key">raise</span> <span class="nam">CogError</span><span class="op">(</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t511" href="#t511">511</a></span><span class="t"> <span class="str">f"Unexpected {self.options.sBeginSpec!r}"</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t512" href="#t512">512</a></span><span class="t"> <span class="nam">file</span><span class="op">=</span><span class="nam">sFileIn</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t513" href="#t513">513</a></span><span class="t"> <span class="nam">line</span><span class="op">=</span><span class="nam">fIn</span><span class="op">.</span><span class="nam">linenumber</span><span class="op">(</span><span class="op">)</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t514" href="#t514">514</a></span><span class="t"> <span class="op">)</span> </span><span class="r"></span></p> + <p class="par run show_par"><span class="n"><a id="t515" href="#t515">515</a></span><span class="t"> <span class="key">if</span> <span class="nam">self</span><span class="op">.</span><span class="nam">isEndOutputLine</span><span class="op">(</span><span class="nam">l</span><span class="op">)</span><span class="op">:</span> </span><span class="r"><span class="annotate short">515 ↛ 516</span><span class="annotate long">line 515 didn't jump to line 516, because the condition on line 515 was never true</span></span></p> + <p class="mis show_mis"><span class="n"><a id="t516" href="#t516">516</a></span><span class="t"> <span class="key">raise</span> <span class="nam">CogError</span><span class="op">(</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t517" href="#t517">517</a></span><span class="t"> <span class="str">f"Unexpected {self.options.sEndOutput!r}"</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t518" href="#t518">518</a></span><span class="t"> <span class="nam">file</span><span class="op">=</span><span class="nam">sFileIn</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t519" href="#t519">519</a></span><span class="t"> <span class="nam">line</span><span class="op">=</span><span class="nam">fIn</span><span class="op">.</span><span class="nam">linenumber</span><span class="op">(</span><span class="op">)</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t520" href="#t520">520</a></span><span class="t"> <span class="op">)</span> </span><span class="r"></span></p> + <p class="par run show_par"><span class="n"><a id="t521" href="#t521">521</a></span><span class="t"> <span class="key">if</span> <span class="key">not</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">bDeleteCode</span><span class="op">:</span> </span><span class="r"><span class="annotate short">521 ↛ 523</span><span class="annotate long">line 521 didn't jump to line 523, because the condition on line 521 was never false</span></span></p> + <p class="run"><span class="n"><a id="t522" href="#t522">522</a></span><span class="t"> <span class="nam">fOut</span><span class="op">.</span><span class="nam">write</span><span class="op">(</span><span class="nam">l</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t523" href="#t523">523</a></span><span class="t"> <span class="nam">gen</span><span class="op">.</span><span class="nam">parseLine</span><span class="op">(</span><span class="nam">l</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t524" href="#t524">524</a></span><span class="t"> <span class="nam">l</span> <span class="op">=</span> <span class="nam">fIn</span><span class="op">.</span><span class="nam">readline</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="par run show_par"><span class="n"><a id="t525" href="#t525">525</a></span><span class="t"> <span class="key">if</span> <span class="key">not</span> <span class="nam">l</span><span class="op">:</span> </span><span class="r"><span class="annotate short">525 ↛ 526</span><span class="annotate long">line 525 didn't jump to line 526, because the condition on line 525 was never true</span></span></p> + <p class="mis show_mis"><span class="n"><a id="t526" href="#t526">526</a></span><span class="t"> <span class="key">raise</span> <span class="nam">CogError</span><span class="op">(</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t527" href="#t527">527</a></span><span class="t"> <span class="str">"Cog block begun but never ended."</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t528" href="#t528">528</a></span><span class="t"> <span class="nam">file</span><span class="op">=</span><span class="nam">sFileIn</span><span class="op">,</span> <span class="nam">line</span><span class="op">=</span><span class="nam">firstLineNum</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t529" href="#t529">529</a></span><span class="t"> </span><span class="r"></span></p> + <p class="par run show_par"><span class="n"><a id="t530" href="#t530">530</a></span><span class="t"> <span class="key">if</span> <span class="key">not</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">bDeleteCode</span><span class="op">:</span> </span><span class="r"><span class="annotate short">530 ↛ 532</span><span class="annotate long">line 530 didn't jump to line 532, because the condition on line 530 was never false</span></span></p> + <p class="run"><span class="n"><a id="t531" href="#t531">531</a></span><span class="t"> <span class="nam">fOut</span><span class="op">.</span><span class="nam">write</span><span class="op">(</span><span class="nam">l</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t532" href="#t532">532</a></span><span class="t"> <span class="nam">gen</span><span class="op">.</span><span class="nam">parseMarker</span><span class="op">(</span><span class="nam">l</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t533" href="#t533">533</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t534" href="#t534">534</a></span><span class="t"> <span class="nam">l</span> <span class="op">=</span> <span class="nam">fIn</span><span class="op">.</span><span class="nam">readline</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t535" href="#t535">535</a></span><span class="t"> </span><span class="r"></span></p> - <p class="par run show_par"><span class="n"><a id="t536" href="#t536">536</a></span><span class="t"> <span class="key">if</span> <span class="key">not</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">bDeleteCode</span><span class="op">:</span> </span><span class="r"><span class="annotate short">536 ↛ 538</span><span class="annotate long">line 536 didn't jump to line 538, because the condition on line 536 was never false</span></span></p> - <p class="run"><span class="n"><a id="t537" href="#t537">537</a></span><span class="t"> <span class="nam">fOut</span><span class="op">.</span><span class="nam">write</span><span class="op">(</span><span class="nam">l</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t538" href="#t538">538</a></span><span class="t"> <span class="nam">gen</span><span class="op">.</span><span class="nam">parseMarker</span><span class="op">(</span><span class="nam">l</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t539" href="#t539">539</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t540" href="#t540">540</a></span><span class="t"> <span class="nam">l</span> <span class="op">=</span> <span class="nam">fIn</span><span class="op">.</span><span class="nam">readline</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t541" href="#t541">541</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t542" href="#t542">542</a></span><span class="t"> <span class="com"># Eat all the lines in the output section. While reading past</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t543" href="#t543">543</a></span><span class="t"> <span class="com"># them, compute the md5 hash of the old output.</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t544" href="#t544">544</a></span><span class="t"> <span class="nam">previous</span> <span class="op">=</span> <span class="str">""</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t545" href="#t545">545</a></span><span class="t"> <span class="nam">hasher</span> <span class="op">=</span> <span class="nam">hashlib</span><span class="op">.</span><span class="nam">md5</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t546" href="#t546">546</a></span><span class="t"> <span class="key">while</span> <span class="nam">l</span> <span class="key">and</span> <span class="key">not</span> <span class="nam">self</span><span class="op">.</span><span class="nam">isEndOutputLine</span><span class="op">(</span><span class="nam">l</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="par run show_par"><span class="n"><a id="t547" href="#t547">547</a></span><span class="t"> <span class="key">if</span> <span class="nam">self</span><span class="op">.</span><span class="nam">isBeginSpecLine</span><span class="op">(</span><span class="nam">l</span><span class="op">)</span><span class="op">:</span> </span><span class="r"><span class="annotate short">547 ↛ 548</span><span class="annotate long">line 547 didn't jump to line 548, because the condition on line 547 was never true</span></span></p> - <p class="mis show_mis"><span class="n"><a id="t548" href="#t548">548</a></span><span class="t"> <span class="key">raise</span> <span class="nam">CogError</span><span class="op">(</span><span class="str">"Unexpected '%s'"</span> <span class="op">%</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">sBeginSpec</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t549" href="#t549">549</a></span><span class="t"> <span class="nam">file</span><span class="op">=</span><span class="nam">sFileIn</span><span class="op">,</span> <span class="nam">line</span><span class="op">=</span><span class="nam">fIn</span><span class="op">.</span><span class="nam">linenumber</span><span class="op">(</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="par run show_par"><span class="n"><a id="t550" href="#t550">550</a></span><span class="t"> <span class="key">if</span> <span class="nam">self</span><span class="op">.</span><span class="nam">isEndSpecLine</span><span class="op">(</span><span class="nam">l</span><span class="op">)</span><span class="op">:</span> </span><span class="r"><span class="annotate short">550 ↛ 551</span><span class="annotate long">line 550 didn't jump to line 551, because the condition on line 550 was never true</span></span></p> - <p class="mis show_mis"><span class="n"><a id="t551" href="#t551">551</a></span><span class="t"> <span class="key">raise</span> <span class="nam">CogError</span><span class="op">(</span><span class="str">"Unexpected '%s'"</span> <span class="op">%</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">sEndSpec</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t552" href="#t552">552</a></span><span class="t"> <span class="nam">file</span><span class="op">=</span><span class="nam">sFileIn</span><span class="op">,</span> <span class="nam">line</span><span class="op">=</span><span class="nam">fIn</span><span class="op">.</span><span class="nam">linenumber</span><span class="op">(</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t536" href="#t536">536</a></span><span class="t"> <span class="com"># Eat all the lines in the output section. While reading past</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t537" href="#t537">537</a></span><span class="t"> <span class="com"># them, compute the md5 hash of the old output.</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t538" href="#t538">538</a></span><span class="t"> <span class="nam">previous</span> <span class="op">=</span> <span class="str">""</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t539" href="#t539">539</a></span><span class="t"> <span class="nam">hasher</span> <span class="op">=</span> <span class="nam">hashlib</span><span class="op">.</span><span class="nam">md5</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t540" href="#t540">540</a></span><span class="t"> <span class="key">while</span> <span class="nam">l</span> <span class="key">and</span> <span class="key">not</span> <span class="nam">self</span><span class="op">.</span><span class="nam">isEndOutputLine</span><span class="op">(</span><span class="nam">l</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="par run show_par"><span class="n"><a id="t541" href="#t541">541</a></span><span class="t"> <span class="key">if</span> <span class="nam">self</span><span class="op">.</span><span class="nam">isBeginSpecLine</span><span class="op">(</span><span class="nam">l</span><span class="op">)</span><span class="op">:</span> </span><span class="r"><span class="annotate short">541 ↛ 542</span><span class="annotate long">line 541 didn't jump to line 542, because the condition on line 541 was never true</span></span></p> + <p class="mis show_mis"><span class="n"><a id="t542" href="#t542">542</a></span><span class="t"> <span class="key">raise</span> <span class="nam">CogError</span><span class="op">(</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t543" href="#t543">543</a></span><span class="t"> <span class="str">f"Unexpected {self.options.sBeginSpec!r}"</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t544" href="#t544">544</a></span><span class="t"> <span class="nam">file</span><span class="op">=</span><span class="nam">sFileIn</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t545" href="#t545">545</a></span><span class="t"> <span class="nam">line</span><span class="op">=</span><span class="nam">fIn</span><span class="op">.</span><span class="nam">linenumber</span><span class="op">(</span><span class="op">)</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t546" href="#t546">546</a></span><span class="t"> <span class="op">)</span> </span><span class="r"></span></p> + <p class="par run show_par"><span class="n"><a id="t547" href="#t547">547</a></span><span class="t"> <span class="key">if</span> <span class="nam">self</span><span class="op">.</span><span class="nam">isEndSpecLine</span><span class="op">(</span><span class="nam">l</span><span class="op">)</span><span class="op">:</span> </span><span class="r"><span class="annotate short">547 ↛ 548</span><span class="annotate long">line 547 didn't jump to line 548, because the condition on line 547 was never true</span></span></p> + <p class="mis show_mis"><span class="n"><a id="t548" href="#t548">548</a></span><span class="t"> <span class="key">raise</span> <span class="nam">CogError</span><span class="op">(</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t549" href="#t549">549</a></span><span class="t"> <span class="str">f"Unexpected {self.options.sEndSpec!r}"</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t550" href="#t550">550</a></span><span class="t"> <span class="nam">file</span><span class="op">=</span><span class="nam">sFileIn</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t551" href="#t551">551</a></span><span class="t"> <span class="nam">line</span><span class="op">=</span><span class="nam">fIn</span><span class="op">.</span><span class="nam">linenumber</span><span class="op">(</span><span class="op">)</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t552" href="#t552">552</a></span><span class="t"> <span class="op">)</span> </span><span class="r"></span></p> <p class="run"><span class="n"><a id="t553" href="#t553">553</a></span><span class="t"> <span class="nam">previous</span> <span class="op">+=</span> <span class="nam">l</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t554" href="#t554">554</a></span><span class="t"> <span class="nam">hasher</span><span class="op">.</span><span class="nam">update</span><span class="op">(</span><span class="nam">to_bytes</span><span class="op">(</span><span class="nam">l</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t554" href="#t554">554</a></span><span class="t"> <span class="nam">hasher</span><span class="op">.</span><span class="nam">update</span><span class="op">(</span><span class="nam">l</span><span class="op">.</span><span class="nam">encode</span><span class="op">(</span><span class="str">"utf-8"</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> <p class="run"><span class="n"><a id="t555" href="#t555">555</a></span><span class="t"> <span class="nam">l</span> <span class="op">=</span> <span class="nam">fIn</span><span class="op">.</span><span class="nam">readline</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> <p class="run"><span class="n"><a id="t556" href="#t556">556</a></span><span class="t"> <span class="nam">curHash</span> <span class="op">=</span> <span class="nam">hasher</span><span class="op">.</span><span class="nam">hexdigest</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t557" href="#t557">557</a></span><span class="t"> </span><span class="r"></span></p> <p class="par run show_par"><span class="n"><a id="t558" href="#t558">558</a></span><span class="t"> <span class="key">if</span> <span class="key">not</span> <span class="nam">l</span> <span class="key">and</span> <span class="key">not</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">bEofCanBeEnd</span><span class="op">:</span> </span><span class="r"><span class="annotate short">558 ↛ 560</span><span class="annotate long">line 558 didn't jump to line 560, because the condition on line 558 was never true</span></span></p> <p class="pln"><span class="n"><a id="t559" href="#t559">559</a></span><span class="t"> <span class="com"># We reached end of file before we found the end output line.</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t560" href="#t560">560</a></span><span class="t"> <span class="key">raise</span> <span class="nam">CogError</span><span class="op">(</span><span class="str">"Missing '%s' before end of file."</span> <span class="op">%</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">sEndOutput</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t561" href="#t561">561</a></span><span class="t"> <span class="nam">file</span><span class="op">=</span><span class="nam">sFileIn</span><span class="op">,</span> <span class="nam">line</span><span class="op">=</span><span class="nam">fIn</span><span class="op">.</span><span class="nam">linenumber</span><span class="op">(</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t562" href="#t562">562</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t563" href="#t563">563</a></span><span class="t"> <span class="com"># Make the previous output available to the current code</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t564" href="#t564">564</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cogmodule</span><span class="op">.</span><span class="nam">previous</span> <span class="op">=</span> <span class="nam">previous</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t560" href="#t560">560</a></span><span class="t"> <span class="key">raise</span> <span class="nam">CogError</span><span class="op">(</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t561" href="#t561">561</a></span><span class="t"> <span class="str">f"Missing {self.options.sEndOutput!r} before end of file."</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t562" href="#t562">562</a></span><span class="t"> <span class="nam">file</span><span class="op">=</span><span class="nam">sFileIn</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t563" href="#t563">563</a></span><span class="t"> <span class="nam">line</span><span class="op">=</span><span class="nam">fIn</span><span class="op">.</span><span class="nam">linenumber</span><span class="op">(</span><span class="op">)</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t564" href="#t564">564</a></span><span class="t"> <span class="op">)</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t565" href="#t565">565</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t566" href="#t566">566</a></span><span class="t"> <span class="com"># Write the output of the spec to be the new output if we're</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t567" href="#t567">567</a></span><span class="t"> <span class="com"># supposed to generate code.</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t568" href="#t568">568</a></span><span class="t"> <span class="nam">hasher</span> <span class="op">=</span> <span class="nam">hashlib</span><span class="op">.</span><span class="nam">md5</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="par run show_par"><span class="n"><a id="t569" href="#t569">569</a></span><span class="t"> <span class="key">if</span> <span class="key">not</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">bNoGenerate</span><span class="op">:</span> </span><span class="r"><span class="annotate short">569 ↛ 575</span><span class="annotate long">line 569 didn't jump to line 575, because the condition on line 569 was never false</span></span></p> - <p class="run"><span class="n"><a id="t570" href="#t570">570</a></span><span class="t"> <span class="nam">sFile</span> <span class="op">=</span> <span class="str">"<cog %s:%d>"</span> <span class="op">%</span> <span class="op">(</span><span class="nam">sFileIn</span><span class="op">,</span> <span class="nam">firstLineNum</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t571" href="#t571">571</a></span><span class="t"> <span class="nam">sGen</span> <span class="op">=</span> <span class="nam">gen</span><span class="op">.</span><span class="nam">evaluate</span><span class="op">(</span><span class="nam">cog</span><span class="op">=</span><span class="nam">self</span><span class="op">,</span> <span class="nam">globals</span><span class="op">=</span><span class="nam">globals</span><span class="op">,</span> <span class="nam">fname</span><span class="op">=</span><span class="nam">sFile</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t572" href="#t572">572</a></span><span class="t"> <span class="nam">sGen</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">suffixLines</span><span class="op">(</span><span class="nam">sGen</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t573" href="#t573">573</a></span><span class="t"> <span class="nam">hasher</span><span class="op">.</span><span class="nam">update</span><span class="op">(</span><span class="nam">to_bytes</span><span class="op">(</span><span class="nam">sGen</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t574" href="#t574">574</a></span><span class="t"> <span class="nam">fOut</span><span class="op">.</span><span class="nam">write</span><span class="op">(</span><span class="nam">sGen</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t575" href="#t575">575</a></span><span class="t"> <span class="nam">newHash</span> <span class="op">=</span> <span class="nam">hasher</span><span class="op">.</span><span class="nam">hexdigest</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t576" href="#t576">576</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t577" href="#t577">577</a></span><span class="t"> <span class="nam">bSawCog</span> <span class="op">=</span> <span class="key">True</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t578" href="#t578">578</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t579" href="#t579">579</a></span><span class="t"> <span class="com"># Write the ending output line</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t580" href="#t580">580</a></span><span class="t"> <span class="nam">hashMatch</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">reEndOutput</span><span class="op">.</span><span class="nam">search</span><span class="op">(</span><span class="nam">l</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="par run show_par"><span class="n"><a id="t581" href="#t581">581</a></span><span class="t"> <span class="key">if</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">bHashOutput</span><span class="op">:</span> </span><span class="r"><span class="annotate short">581 ↛ 582</span><span class="annotate long">line 581 didn't jump to line 582, because the condition on line 581 was never true</span></span></p> - <p class="mis show_mis"><span class="n"><a id="t582" href="#t582">582</a></span><span class="t"> <span class="key">if</span> <span class="nam">hashMatch</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t583" href="#t583">583</a></span><span class="t"> <span class="nam">oldHash</span> <span class="op">=</span> <span class="nam">hashMatch</span><span class="op">.</span><span class="nam">groupdict</span><span class="op">(</span><span class="op">)</span><span class="op">[</span><span class="str">'hash'</span><span class="op">]</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t584" href="#t584">584</a></span><span class="t"> <span class="key">if</span> <span class="nam">oldHash</span> <span class="op">!=</span> <span class="nam">curHash</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t585" href="#t585">585</a></span><span class="t"> <span class="key">raise</span> <span class="nam">CogError</span><span class="op">(</span><span class="str">"Output has been edited! Delete old checksum to unprotect."</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t586" href="#t586">586</a></span><span class="t"> <span class="nam">file</span><span class="op">=</span><span class="nam">sFileIn</span><span class="op">,</span> <span class="nam">line</span><span class="op">=</span><span class="nam">fIn</span><span class="op">.</span><span class="nam">linenumber</span><span class="op">(</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t587" href="#t587">587</a></span><span class="t"> <span class="com"># Create a new end line with the correct hash.</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t588" href="#t588">588</a></span><span class="t"> <span class="nam">endpieces</span> <span class="op">=</span> <span class="nam">l</span><span class="op">.</span><span class="nam">split</span><span class="op">(</span><span class="nam">hashMatch</span><span class="op">.</span><span class="nam">group</span><span class="op">(</span><span class="num">0</span><span class="op">)</span><span class="op">,</span> <span class="num">1</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t589" href="#t589">589</a></span><span class="t"> <span class="key">else</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t590" href="#t590">590</a></span><span class="t"> <span class="com"># There was no old hash, but we want a new hash.</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t591" href="#t591">591</a></span><span class="t"> <span class="nam">endpieces</span> <span class="op">=</span> <span class="nam">l</span><span class="op">.</span><span class="nam">split</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">sEndOutput</span><span class="op">,</span> <span class="num">1</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t592" href="#t592">592</a></span><span class="t"> <span class="nam">l</span> <span class="op">=</span> <span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">sEndFormat</span> <span class="op">%</span> <span class="nam">newHash</span><span class="op">)</span><span class="op">.</span><span class="nam">join</span><span class="op">(</span><span class="nam">endpieces</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t593" href="#t593">593</a></span><span class="t"> <span class="key">else</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t594" href="#t594">594</a></span><span class="t"> <span class="com"># We don't want hashes output, so if there was one, get rid of</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t595" href="#t595">595</a></span><span class="t"> <span class="com"># it.</span> </span><span class="r"></span></p> - <p class="par run show_par"><span class="n"><a id="t596" href="#t596">596</a></span><span class="t"> <span class="key">if</span> <span class="nam">hashMatch</span><span class="op">:</span> </span><span class="r"><span class="annotate short">596 ↛ 597</span><span class="annotate long">line 596 didn't jump to line 597, because the condition on line 596 was never true</span></span></p> - <p class="mis show_mis"><span class="n"><a id="t597" href="#t597">597</a></span><span class="t"> <span class="nam">l</span> <span class="op">=</span> <span class="nam">l</span><span class="op">.</span><span class="nam">replace</span><span class="op">(</span><span class="nam">hashMatch</span><span class="op">.</span><span class="nam">groupdict</span><span class="op">(</span><span class="op">)</span><span class="op">[</span><span class="str">'hashsect'</span><span class="op">]</span><span class="op">,</span> <span class="str">''</span><span class="op">,</span> <span class="num">1</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t598" href="#t598">598</a></span><span class="t"> </span><span class="r"></span></p> - <p class="par run show_par"><span class="n"><a id="t599" href="#t599">599</a></span><span class="t"> <span class="key">if</span> <span class="key">not</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">bDeleteCode</span><span class="op">:</span> </span><span class="r"><span class="annotate short">599 ↛ 601</span><span class="annotate long">line 599 didn't jump to line 601, because the condition on line 599 was never false</span></span></p> - <p class="run"><span class="n"><a id="t600" href="#t600">600</a></span><span class="t"> <span class="nam">fOut</span><span class="op">.</span><span class="nam">write</span><span class="op">(</span><span class="nam">l</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t601" href="#t601">601</a></span><span class="t"> <span class="nam">l</span> <span class="op">=</span> <span class="nam">fIn</span><span class="op">.</span><span class="nam">readline</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t602" href="#t602">602</a></span><span class="t"> </span><span class="r"></span></p> - <p class="par run show_par"><span class="n"><a id="t603" href="#t603">603</a></span><span class="t"> <span class="key">if</span> <span class="key">not</span> <span class="nam">bSawCog</span> <span class="key">and</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">bWarnEmpty</span><span class="op">:</span> </span><span class="r"><span class="annotate short">603 ↛ 604</span><span class="annotate long">line 603 didn't jump to line 604, because the condition on line 603 was never true</span></span></p> - <p class="mis show_mis"><span class="n"><a id="t604" href="#t604">604</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">showWarning</span><span class="op">(</span><span class="str">"no cog code found in %s"</span> <span class="op">%</span> <span class="nam">sFileIn</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t605" href="#t605">605</a></span><span class="t"> <span class="key">finally</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="par run show_par"><span class="n"><a id="t606" href="#t606">606</a></span><span class="t"> <span class="key">if</span> <span class="nam">fInToClose</span><span class="op">:</span> </span><span class="r"><span class="annotate short">606 ↛ 607</span><span class="annotate long">line 606 didn't jump to line 607, because the condition on line 606 was never true</span></span></p> - <p class="mis show_mis"><span class="n"><a id="t607" href="#t607">607</a></span><span class="t"> <span class="nam">fInToClose</span><span class="op">.</span><span class="nam">close</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="par run show_par"><span class="n"><a id="t608" href="#t608">608</a></span><span class="t"> <span class="key">if</span> <span class="nam">fOutToClose</span><span class="op">:</span> </span><span class="r"><span class="annotate short">608 ↛ 609</span><span class="annotate long">line 608 didn't jump to line 609, because the condition on line 608 was never true</span></span></p> - <p class="mis show_mis"><span class="n"><a id="t609" href="#t609">609</a></span><span class="t"> <span class="nam">fOutToClose</span><span class="op">.</span><span class="nam">close</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t610" href="#t610">610</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t611" href="#t611">611</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t612" href="#t612">612</a></span><span class="t"> <span class="com"># A regex for non-empty lines, used by suffixLines.</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t613" href="#t613">613</a></span><span class="t"> <span class="nam">reNonEmptyLines</span> <span class="op">=</span> <span class="nam">re</span><span class="op">.</span><span class="nam">compile</span><span class="op">(</span><span class="str">r"^\s*\S+.*$"</span><span class="op">,</span> <span class="nam">re</span><span class="op">.</span><span class="nam">MULTILINE</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t566" href="#t566">566</a></span><span class="t"> <span class="com"># Make the previous output available to the current code</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t567" href="#t567">567</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cogmodule</span><span class="op">.</span><span class="nam">previous</span> <span class="op">=</span> <span class="nam">previous</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t568" href="#t568">568</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t569" href="#t569">569</a></span><span class="t"> <span class="com"># Write the output of the spec to be the new output if we're</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t570" href="#t570">570</a></span><span class="t"> <span class="com"># supposed to generate code.</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t571" href="#t571">571</a></span><span class="t"> <span class="nam">hasher</span> <span class="op">=</span> <span class="nam">hashlib</span><span class="op">.</span><span class="nam">md5</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="par run show_par"><span class="n"><a id="t572" href="#t572">572</a></span><span class="t"> <span class="key">if</span> <span class="key">not</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">bNoGenerate</span><span class="op">:</span> </span><span class="r"><span class="annotate short">572 ↛ 578</span><span class="annotate long">line 572 didn't jump to line 578, because the condition on line 572 was never false</span></span></p> + <p class="run"><span class="n"><a id="t573" href="#t573">573</a></span><span class="t"> <span class="nam">sFile</span> <span class="op">=</span> <span class="str">f"<cog {sFileIn}:{firstLineNum}>"</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t574" href="#t574">574</a></span><span class="t"> <span class="nam">sGen</span> <span class="op">=</span> <span class="nam">gen</span><span class="op">.</span><span class="nam">evaluate</span><span class="op">(</span><span class="nam">cog</span><span class="op">=</span><span class="nam">self</span><span class="op">,</span> <span class="nam">globals</span><span class="op">=</span><span class="nam">globals</span><span class="op">,</span> <span class="nam">fname</span><span class="op">=</span><span class="nam">sFile</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t575" href="#t575">575</a></span><span class="t"> <span class="nam">sGen</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">suffixLines</span><span class="op">(</span><span class="nam">sGen</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t576" href="#t576">576</a></span><span class="t"> <span class="nam">hasher</span><span class="op">.</span><span class="nam">update</span><span class="op">(</span><span class="nam">sGen</span><span class="op">.</span><span class="nam">encode</span><span class="op">(</span><span class="str">"utf-8"</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t577" href="#t577">577</a></span><span class="t"> <span class="nam">fOut</span><span class="op">.</span><span class="nam">write</span><span class="op">(</span><span class="nam">sGen</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t578" href="#t578">578</a></span><span class="t"> <span class="nam">newHash</span> <span class="op">=</span> <span class="nam">hasher</span><span class="op">.</span><span class="nam">hexdigest</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t579" href="#t579">579</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t580" href="#t580">580</a></span><span class="t"> <span class="nam">bSawCog</span> <span class="op">=</span> <span class="key">True</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t581" href="#t581">581</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t582" href="#t582">582</a></span><span class="t"> <span class="com"># Write the ending output line</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t583" href="#t583">583</a></span><span class="t"> <span class="nam">hashMatch</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">reEndOutput</span><span class="op">.</span><span class="nam">search</span><span class="op">(</span><span class="nam">l</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="par run show_par"><span class="n"><a id="t584" href="#t584">584</a></span><span class="t"> <span class="key">if</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">bHashOutput</span><span class="op">:</span> </span><span class="r"><span class="annotate short">584 ↛ 585</span><span class="annotate long">line 584 didn't jump to line 585, because the condition on line 584 was never true</span></span></p> + <p class="mis show_mis"><span class="n"><a id="t585" href="#t585">585</a></span><span class="t"> <span class="key">if</span> <span class="nam">hashMatch</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t586" href="#t586">586</a></span><span class="t"> <span class="nam">oldHash</span> <span class="op">=</span> <span class="nam">hashMatch</span><span class="op">[</span><span class="str">'hash'</span><span class="op">]</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t587" href="#t587">587</a></span><span class="t"> <span class="key">if</span> <span class="nam">oldHash</span> <span class="op">!=</span> <span class="nam">curHash</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t588" href="#t588">588</a></span><span class="t"> <span class="key">raise</span> <span class="nam">CogError</span><span class="op">(</span><span class="str">"Output has been edited! Delete old checksum to unprotect."</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t589" href="#t589">589</a></span><span class="t"> <span class="nam">file</span><span class="op">=</span><span class="nam">sFileIn</span><span class="op">,</span> <span class="nam">line</span><span class="op">=</span><span class="nam">fIn</span><span class="op">.</span><span class="nam">linenumber</span><span class="op">(</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t590" href="#t590">590</a></span><span class="t"> <span class="com"># Create a new end line with the correct hash.</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t591" href="#t591">591</a></span><span class="t"> <span class="nam">endpieces</span> <span class="op">=</span> <span class="nam">l</span><span class="op">.</span><span class="nam">split</span><span class="op">(</span><span class="nam">hashMatch</span><span class="op">.</span><span class="nam">group</span><span class="op">(</span><span class="num">0</span><span class="op">)</span><span class="op">,</span> <span class="num">1</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t592" href="#t592">592</a></span><span class="t"> <span class="key">else</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t593" href="#t593">593</a></span><span class="t"> <span class="com"># There was no old hash, but we want a new hash.</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t594" href="#t594">594</a></span><span class="t"> <span class="nam">endpieces</span> <span class="op">=</span> <span class="nam">l</span><span class="op">.</span><span class="nam">split</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">sEndOutput</span><span class="op">,</span> <span class="num">1</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t595" href="#t595">595</a></span><span class="t"> <span class="nam">l</span> <span class="op">=</span> <span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">sEndFormat</span> <span class="op">%</span> <span class="nam">newHash</span><span class="op">)</span><span class="op">.</span><span class="nam">join</span><span class="op">(</span><span class="nam">endpieces</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t596" href="#t596">596</a></span><span class="t"> <span class="key">else</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t597" href="#t597">597</a></span><span class="t"> <span class="com"># We don't want hashes output, so if there was one, get rid of</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t598" href="#t598">598</a></span><span class="t"> <span class="com"># it.</span> </span><span class="r"></span></p> + <p class="par run show_par"><span class="n"><a id="t599" href="#t599">599</a></span><span class="t"> <span class="key">if</span> <span class="nam">hashMatch</span><span class="op">:</span> </span><span class="r"><span class="annotate short">599 ↛ 600</span><span class="annotate long">line 599 didn't jump to line 600, because the condition on line 599 was never true</span></span></p> + <p class="mis show_mis"><span class="n"><a id="t600" href="#t600">600</a></span><span class="t"> <span class="nam">l</span> <span class="op">=</span> <span class="nam">l</span><span class="op">.</span><span class="nam">replace</span><span class="op">(</span><span class="nam">hashMatch</span><span class="op">[</span><span class="str">'hashsect'</span><span class="op">]</span><span class="op">,</span> <span class="str">''</span><span class="op">,</span> <span class="num">1</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t601" href="#t601">601</a></span><span class="t"> </span><span class="r"></span></p> + <p class="par run show_par"><span class="n"><a id="t602" href="#t602">602</a></span><span class="t"> <span class="key">if</span> <span class="key">not</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">bDeleteCode</span><span class="op">:</span> </span><span class="r"><span class="annotate short">602 ↛ 604</span><span class="annotate long">line 602 didn't jump to line 604, because the condition on line 602 was never false</span></span></p> + <p class="run"><span class="n"><a id="t603" href="#t603">603</a></span><span class="t"> <span class="nam">fOut</span><span class="op">.</span><span class="nam">write</span><span class="op">(</span><span class="nam">l</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t604" href="#t604">604</a></span><span class="t"> <span class="nam">l</span> <span class="op">=</span> <span class="nam">fIn</span><span class="op">.</span><span class="nam">readline</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t605" href="#t605">605</a></span><span class="t"> </span><span class="r"></span></p> + <p class="par run show_par"><span class="n"><a id="t606" href="#t606">606</a></span><span class="t"> <span class="key">if</span> <span class="key">not</span> <span class="nam">bSawCog</span> <span class="key">and</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">bWarnEmpty</span><span class="op">:</span> </span><span class="r"><span class="annotate short">606 ↛ 607</span><span class="annotate long">line 606 didn't jump to line 607, because the condition on line 606 was never true</span></span></p> + <p class="mis show_mis"><span class="n"><a id="t607" href="#t607">607</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">showWarning</span><span class="op">(</span><span class="str">f"no cog code found in {sFileIn}"</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t608" href="#t608">608</a></span><span class="t"> <span class="key">finally</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="par run show_par"><span class="n"><a id="t609" href="#t609">609</a></span><span class="t"> <span class="key">if</span> <span class="nam">fInToClose</span><span class="op">:</span> </span><span class="r"><span class="annotate short">609 ↛ 610</span><span class="annotate long">line 609 didn't jump to line 610, because the condition on line 609 was never true</span></span></p> + <p class="mis show_mis"><span class="n"><a id="t610" href="#t610">610</a></span><span class="t"> <span class="nam">fInToClose</span><span class="op">.</span><span class="nam">close</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="par run show_par"><span class="n"><a id="t611" href="#t611">611</a></span><span class="t"> <span class="key">if</span> <span class="nam">fOutToClose</span><span class="op">:</span> </span><span class="r"><span class="annotate short">611 ↛ 612</span><span class="annotate long">line 611 didn't jump to line 612, because the condition on line 611 was never true</span></span></p> + <p class="mis show_mis"><span class="n"><a id="t612" href="#t612">612</a></span><span class="t"> <span class="nam">fOutToClose</span><span class="op">.</span><span class="nam">close</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t613" href="#t613">613</a></span><span class="t"> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t614" href="#t614">614</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t615" href="#t615">615</a></span><span class="t"> <span class="key">def</span> <span class="nam">suffixLines</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">text</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t616" href="#t616">616</a></span><span class="t"> <span class="str">""" Add suffixes to the lines in text, if our options desire it.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t617" href="#t617">617</a></span><span class="t"><span class="str"> text is many lines, as a single string.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t618" href="#t618">618</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="par run show_par"><span class="n"><a id="t619" href="#t619">619</a></span><span class="t"> <span class="key">if</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">sSuffix</span><span class="op">:</span> </span><span class="r"><span class="annotate short">619 ↛ 621</span><span class="annotate long">line 619 didn't jump to line 621, because the condition on line 619 was never true</span></span></p> - <p class="pln"><span class="n"><a id="t620" href="#t620">620</a></span><span class="t"> <span class="com"># Find all non-blank lines, and add the suffix to the end.</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t621" href="#t621">621</a></span><span class="t"> <span class="nam">repl</span> <span class="op">=</span> <span class="str">r"\g<0>"</span> <span class="op">+</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">sSuffix</span><span class="op">.</span><span class="nam">replace</span><span class="op">(</span><span class="str">'\\'</span><span class="op">,</span> <span class="str">'\\\\'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t622" href="#t622">622</a></span><span class="t"> <span class="nam">text</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">reNonEmptyLines</span><span class="op">.</span><span class="nam">sub</span><span class="op">(</span><span class="nam">repl</span><span class="op">,</span> <span class="nam">text</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t623" href="#t623">623</a></span><span class="t"> <span class="key">return</span> <span class="nam">text</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t624" href="#t624">624</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t625" href="#t625">625</a></span><span class="t"> <span class="key">def</span> <span class="nam">processString</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">sInput</span><span class="op">,</span> <span class="nam">fname</span><span class="op">=</span><span class="key">None</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t626" href="#t626">626</a></span><span class="t"> <span class="str">""" Process sInput as the text to cog.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t627" href="#t627">627</a></span><span class="t"><span class="str"> Return the cogged output as a string.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t628" href="#t628">628</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t629" href="#t629">629</a></span><span class="t"> <span class="nam">fOld</span> <span class="op">=</span> <span class="nam">StringIO</span><span class="op">(</span><span class="nam">sInput</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t630" href="#t630">630</a></span><span class="t"> <span class="nam">fNew</span> <span class="op">=</span> <span class="nam">StringIO</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t631" href="#t631">631</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">processFile</span><span class="op">(</span><span class="nam">fOld</span><span class="op">,</span> <span class="nam">fNew</span><span class="op">,</span> <span class="nam">fname</span><span class="op">=</span><span class="nam">fname</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t632" href="#t632">632</a></span><span class="t"> <span class="key">return</span> <span class="nam">fNew</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t633" href="#t633">633</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t634" href="#t634">634</a></span><span class="t"> <span class="key">def</span> <span class="nam">replaceFile</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">sOldPath</span><span class="op">,</span> <span class="nam">sNewText</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t635" href="#t635">635</a></span><span class="t"> <span class="str">""" Replace file sOldPath with the contents sNewText</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t636" href="#t636">636</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t637" href="#t637">637</a></span><span class="t"> <span class="key">if</span> <span class="key">not</span> <span class="nam">os</span><span class="op">.</span><span class="nam">access</span><span class="op">(</span><span class="nam">sOldPath</span><span class="op">,</span> <span class="nam">os</span><span class="op">.</span><span class="nam">W_OK</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t638" href="#t638">638</a></span><span class="t"> <span class="com"># Need to ensure we can write.</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t639" href="#t639">639</a></span><span class="t"> <span class="key">if</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">sMakeWritableCmd</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t640" href="#t640">640</a></span><span class="t"> <span class="com"># Use an external command to make the file writable.</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t641" href="#t641">641</a></span><span class="t"> <span class="nam">cmd</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">sMakeWritableCmd</span><span class="op">.</span><span class="nam">replace</span><span class="op">(</span><span class="str">'%s'</span><span class="op">,</span> <span class="nam">sOldPath</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t642" href="#t642">642</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">stdout</span><span class="op">.</span><span class="nam">write</span><span class="op">(</span><span class="nam">os</span><span class="op">.</span><span class="nam">popen</span><span class="op">(</span><span class="nam">cmd</span><span class="op">)</span><span class="op">.</span><span class="nam">read</span><span class="op">(</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t643" href="#t643">643</a></span><span class="t"> <span class="key">if</span> <span class="key">not</span> <span class="nam">os</span><span class="op">.</span><span class="nam">access</span><span class="op">(</span><span class="nam">sOldPath</span><span class="op">,</span> <span class="nam">os</span><span class="op">.</span><span class="nam">W_OK</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t644" href="#t644">644</a></span><span class="t"> <span class="key">raise</span> <span class="nam">CogError</span><span class="op">(</span><span class="str">"Couldn't make %s writable"</span> <span class="op">%</span> <span class="nam">sOldPath</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t645" href="#t645">645</a></span><span class="t"> <span class="key">else</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t646" href="#t646">646</a></span><span class="t"> <span class="com"># Can't write!</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t647" href="#t647">647</a></span><span class="t"> <span class="key">raise</span> <span class="nam">CogError</span><span class="op">(</span><span class="str">"Can't overwrite %s"</span> <span class="op">%</span> <span class="nam">sOldPath</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t648" href="#t648">648</a></span><span class="t"> <span class="nam">f</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">openOutputFile</span><span class="op">(</span><span class="nam">sOldPath</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t649" href="#t649">649</a></span><span class="t"> <span class="nam">f</span><span class="op">.</span><span class="nam">write</span><span class="op">(</span><span class="nam">sNewText</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t650" href="#t650">650</a></span><span class="t"> <span class="nam">f</span><span class="op">.</span><span class="nam">close</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t651" href="#t651">651</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t652" href="#t652">652</a></span><span class="t"> <span class="key">def</span> <span class="nam">saveIncludePath</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t653" href="#t653">653</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">savedInclude</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">includePath</span><span class="op">[</span><span class="op">:</span><span class="op">]</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t654" href="#t654">654</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">savedSysPath</span> <span class="op">=</span> <span class="nam">sys</span><span class="op">.</span><span class="nam">path</span><span class="op">[</span><span class="op">:</span><span class="op">]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t655" href="#t655">655</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t656" href="#t656">656</a></span><span class="t"> <span class="key">def</span> <span class="nam">restoreIncludePath</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t657" href="#t657">657</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">includePath</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">savedInclude</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t658" href="#t658">658</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cogmodule</span><span class="op">.</span><span class="nam">path</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">includePath</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t659" href="#t659">659</a></span><span class="t"> <span class="nam">sys</span><span class="op">.</span><span class="nam">path</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">savedSysPath</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t660" href="#t660">660</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t661" href="#t661">661</a></span><span class="t"> <span class="key">def</span> <span class="nam">addToIncludePath</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">includePath</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t662" href="#t662">662</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cogmodule</span><span class="op">.</span><span class="nam">path</span><span class="op">.</span><span class="nam">extend</span><span class="op">(</span><span class="nam">includePath</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t663" href="#t663">663</a></span><span class="t"> <span class="nam">sys</span><span class="op">.</span><span class="nam">path</span><span class="op">.</span><span class="nam">extend</span><span class="op">(</span><span class="nam">includePath</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t664" href="#t664">664</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t665" href="#t665">665</a></span><span class="t"> <span class="key">def</span> <span class="nam">processOneFile</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">sFile</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t666" href="#t666">666</a></span><span class="t"> <span class="str">""" Process one filename through cog.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t667" href="#t667">667</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t668" href="#t668">668</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t669" href="#t669">669</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">saveIncludePath</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t670" href="#t670">670</a></span><span class="t"> <span class="nam">bNeedNewline</span> <span class="op">=</span> <span class="key">False</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t615" href="#t615">615</a></span><span class="t"> <span class="com"># A regex for non-empty lines, used by suffixLines.</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t616" href="#t616">616</a></span><span class="t"> <span class="nam">reNonEmptyLines</span> <span class="op">=</span> <span class="nam">re</span><span class="op">.</span><span class="nam">compile</span><span class="op">(</span><span class="str">r"^\s*\S+.*$"</span><span class="op">,</span> <span class="nam">re</span><span class="op">.</span><span class="nam">MULTILINE</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t617" href="#t617">617</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t618" href="#t618">618</a></span><span class="t"> <span class="key">def</span> <span class="nam">suffixLines</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">text</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t619" href="#t619">619</a></span><span class="t"> <span class="str">""" Add suffixes to the lines in text, if our options desire it.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t620" href="#t620">620</a></span><span class="t"><span class="str"> text is many lines, as a single string.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t621" href="#t621">621</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="par run show_par"><span class="n"><a id="t622" href="#t622">622</a></span><span class="t"> <span class="key">if</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">sSuffix</span><span class="op">:</span> </span><span class="r"><span class="annotate short">622 ↛ 624</span><span class="annotate long">line 622 didn't jump to line 624, because the condition on line 622 was never true</span></span></p> + <p class="pln"><span class="n"><a id="t623" href="#t623">623</a></span><span class="t"> <span class="com"># Find all non-blank lines, and add the suffix to the end.</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t624" href="#t624">624</a></span><span class="t"> <span class="nam">repl</span> <span class="op">=</span> <span class="str">r"\g<0>"</span> <span class="op">+</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">sSuffix</span><span class="op">.</span><span class="nam">replace</span><span class="op">(</span><span class="str">'\\'</span><span class="op">,</span> <span class="str">'\\\\'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t625" href="#t625">625</a></span><span class="t"> <span class="nam">text</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">reNonEmptyLines</span><span class="op">.</span><span class="nam">sub</span><span class="op">(</span><span class="nam">repl</span><span class="op">,</span> <span class="nam">text</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t626" href="#t626">626</a></span><span class="t"> <span class="key">return</span> <span class="nam">text</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t627" href="#t627">627</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t628" href="#t628">628</a></span><span class="t"> <span class="key">def</span> <span class="nam">processString</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">sInput</span><span class="op">,</span> <span class="nam">fname</span><span class="op">=</span><span class="key">None</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t629" href="#t629">629</a></span><span class="t"> <span class="str">""" Process sInput as the text to cog.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t630" href="#t630">630</a></span><span class="t"><span class="str"> Return the cogged output as a string.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t631" href="#t631">631</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t632" href="#t632">632</a></span><span class="t"> <span class="nam">fOld</span> <span class="op">=</span> <span class="nam">io</span><span class="op">.</span><span class="nam">StringIO</span><span class="op">(</span><span class="nam">sInput</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t633" href="#t633">633</a></span><span class="t"> <span class="nam">fNew</span> <span class="op">=</span> <span class="nam">io</span><span class="op">.</span><span class="nam">StringIO</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t634" href="#t634">634</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">processFile</span><span class="op">(</span><span class="nam">fOld</span><span class="op">,</span> <span class="nam">fNew</span><span class="op">,</span> <span class="nam">fname</span><span class="op">=</span><span class="nam">fname</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t635" href="#t635">635</a></span><span class="t"> <span class="key">return</span> <span class="nam">fNew</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t636" href="#t636">636</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t637" href="#t637">637</a></span><span class="t"> <span class="key">def</span> <span class="nam">replaceFile</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">sOldPath</span><span class="op">,</span> <span class="nam">sNewText</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t638" href="#t638">638</a></span><span class="t"> <span class="str">""" Replace file sOldPath with the contents sNewText</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t639" href="#t639">639</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t640" href="#t640">640</a></span><span class="t"> <span class="key">if</span> <span class="key">not</span> <span class="nam">os</span><span class="op">.</span><span class="nam">access</span><span class="op">(</span><span class="nam">sOldPath</span><span class="op">,</span> <span class="nam">os</span><span class="op">.</span><span class="nam">W_OK</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t641" href="#t641">641</a></span><span class="t"> <span class="com"># Need to ensure we can write.</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t642" href="#t642">642</a></span><span class="t"> <span class="key">if</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">sMakeWritableCmd</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t643" href="#t643">643</a></span><span class="t"> <span class="com"># Use an external command to make the file writable.</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t644" href="#t644">644</a></span><span class="t"> <span class="nam">cmd</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">sMakeWritableCmd</span><span class="op">.</span><span class="nam">replace</span><span class="op">(</span><span class="str">'%s'</span><span class="op">,</span> <span class="nam">sOldPath</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t645" href="#t645">645</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">stdout</span><span class="op">.</span><span class="nam">write</span><span class="op">(</span><span class="nam">os</span><span class="op">.</span><span class="nam">popen</span><span class="op">(</span><span class="nam">cmd</span><span class="op">)</span><span class="op">.</span><span class="nam">read</span><span class="op">(</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t646" href="#t646">646</a></span><span class="t"> <span class="key">if</span> <span class="key">not</span> <span class="nam">os</span><span class="op">.</span><span class="nam">access</span><span class="op">(</span><span class="nam">sOldPath</span><span class="op">,</span> <span class="nam">os</span><span class="op">.</span><span class="nam">W_OK</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t647" href="#t647">647</a></span><span class="t"> <span class="key">raise</span> <span class="nam">CogError</span><span class="op">(</span><span class="str">f"Couldn't make {sOldPath} writable"</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t648" href="#t648">648</a></span><span class="t"> <span class="key">else</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t649" href="#t649">649</a></span><span class="t"> <span class="com"># Can't write!</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t650" href="#t650">650</a></span><span class="t"> <span class="key">raise</span> <span class="nam">CogError</span><span class="op">(</span><span class="str">f"Can't overwrite {sOldPath}"</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t651" href="#t651">651</a></span><span class="t"> <span class="nam">f</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">openOutputFile</span><span class="op">(</span><span class="nam">sOldPath</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t652" href="#t652">652</a></span><span class="t"> <span class="nam">f</span><span class="op">.</span><span class="nam">write</span><span class="op">(</span><span class="nam">sNewText</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t653" href="#t653">653</a></span><span class="t"> <span class="nam">f</span><span class="op">.</span><span class="nam">close</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t654" href="#t654">654</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t655" href="#t655">655</a></span><span class="t"> <span class="key">def</span> <span class="nam">saveIncludePath</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t656" href="#t656">656</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">savedInclude</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">includePath</span><span class="op">[</span><span class="op">:</span><span class="op">]</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t657" href="#t657">657</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">savedSysPath</span> <span class="op">=</span> <span class="nam">sys</span><span class="op">.</span><span class="nam">path</span><span class="op">[</span><span class="op">:</span><span class="op">]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t658" href="#t658">658</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t659" href="#t659">659</a></span><span class="t"> <span class="key">def</span> <span class="nam">restoreIncludePath</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t660" href="#t660">660</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">includePath</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">savedInclude</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t661" href="#t661">661</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cogmodule</span><span class="op">.</span><span class="nam">path</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">includePath</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t662" href="#t662">662</a></span><span class="t"> <span class="nam">sys</span><span class="op">.</span><span class="nam">path</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">savedSysPath</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t663" href="#t663">663</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t664" href="#t664">664</a></span><span class="t"> <span class="key">def</span> <span class="nam">addToIncludePath</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">includePath</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t665" href="#t665">665</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cogmodule</span><span class="op">.</span><span class="nam">path</span><span class="op">.</span><span class="nam">extend</span><span class="op">(</span><span class="nam">includePath</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t666" href="#t666">666</a></span><span class="t"> <span class="nam">sys</span><span class="op">.</span><span class="nam">path</span><span class="op">.</span><span class="nam">extend</span><span class="op">(</span><span class="nam">includePath</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t667" href="#t667">667</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t668" href="#t668">668</a></span><span class="t"> <span class="key">def</span> <span class="nam">processOneFile</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">sFile</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t669" href="#t669">669</a></span><span class="t"> <span class="str">""" Process one filename through cog.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t670" href="#t670">670</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t671" href="#t671">671</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t672" href="#t672">672</a></span><span class="t"> <span class="key">try</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t673" href="#t673">673</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">addToIncludePath</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">includePath</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t674" href="#t674">674</a></span><span class="t"> <span class="com"># Since we know where the input file came from,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t675" href="#t675">675</a></span><span class="t"> <span class="com"># push its directory onto the include path.</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t676" href="#t676">676</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">addToIncludePath</span><span class="op">(</span><span class="op">[</span><span class="nam">os</span><span class="op">.</span><span class="nam">path</span><span class="op">.</span><span class="nam">dirname</span><span class="op">(</span><span class="nam">sFile</span><span class="op">)</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t677" href="#t677">677</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t678" href="#t678">678</a></span><span class="t"> <span class="com"># How we process the file depends on where the output is going.</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t679" href="#t679">679</a></span><span class="t"> <span class="key">if</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">sOutputName</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t680" href="#t680">680</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">processFile</span><span class="op">(</span><span class="nam">sFile</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">sOutputName</span><span class="op">,</span> <span class="nam">sFile</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t681" href="#t681">681</a></span><span class="t"> <span class="key">elif</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">bReplace</span> <span class="key">or</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">bCheck</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t682" href="#t682">682</a></span><span class="t"> <span class="com"># We want to replace the cog file with the output,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t683" href="#t683">683</a></span><span class="t"> <span class="com"># but only if they differ.</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t684" href="#t684">684</a></span><span class="t"> <span class="nam">verb</span> <span class="op">=</span> <span class="str">"Cogging"</span> <span class="key">if</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">bReplace</span> <span class="key">else</span> <span class="str">"Checking"</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t685" href="#t685">685</a></span><span class="t"> <span class="key">if</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">verbosity</span> <span class="op">>=</span> <span class="num">2</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t686" href="#t686">686</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">prout</span><span class="op">(</span><span class="str">"%s %s"</span> <span class="op">%</span> <span class="op">(</span><span class="nam">verb</span><span class="op">,</span> <span class="nam">sFile</span><span class="op">)</span><span class="op">,</span> <span class="nam">end</span><span class="op">=</span><span class="str">""</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t687" href="#t687">687</a></span><span class="t"> <span class="nam">bNeedNewline</span> <span class="op">=</span> <span class="key">True</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t688" href="#t688">688</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t689" href="#t689">689</a></span><span class="t"> <span class="key">try</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t690" href="#t690">690</a></span><span class="t"> <span class="nam">fOldFile</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">openInputFile</span><span class="op">(</span><span class="nam">sFile</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t691" href="#t691">691</a></span><span class="t"> <span class="nam">sOldText</span> <span class="op">=</span> <span class="nam">fOldFile</span><span class="op">.</span><span class="nam">read</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t692" href="#t692">692</a></span><span class="t"> <span class="nam">fOldFile</span><span class="op">.</span><span class="nam">close</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t693" href="#t693">693</a></span><span class="t"> <span class="nam">sNewText</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">processString</span><span class="op">(</span><span class="nam">sOldText</span><span class="op">,</span> <span class="nam">fname</span><span class="op">=</span><span class="nam">sFile</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t694" href="#t694">694</a></span><span class="t"> <span class="key">if</span> <span class="nam">sOldText</span> <span class="op">!=</span> <span class="nam">sNewText</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t695" href="#t695">695</a></span><span class="t"> <span class="key">if</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">verbosity</span> <span class="op">>=</span> <span class="num">1</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t696" href="#t696">696</a></span><span class="t"> <span class="key">if</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">verbosity</span> <span class="op"><</span> <span class="num">2</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t697" href="#t697">697</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">prout</span><span class="op">(</span><span class="str">"%s %s"</span> <span class="op">%</span> <span class="op">(</span><span class="nam">verb</span><span class="op">,</span> <span class="nam">sFile</span><span class="op">)</span><span class="op">,</span> <span class="nam">end</span><span class="op">=</span><span class="str">""</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t698" href="#t698">698</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">prout</span><span class="op">(</span><span class="str">" (changed)"</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t699" href="#t699">699</a></span><span class="t"> <span class="nam">bNeedNewline</span> <span class="op">=</span> <span class="key">False</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t700" href="#t700">700</a></span><span class="t"> <span class="key">if</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">bReplace</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t701" href="#t701">701</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">replaceFile</span><span class="op">(</span><span class="nam">sFile</span><span class="op">,</span> <span class="nam">sNewText</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t702" href="#t702">702</a></span><span class="t"> <span class="key">else</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t703" href="#t703">703</a></span><span class="t"> <span class="key">assert</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">bCheck</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t704" href="#t704">704</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">bCheckFailed</span> <span class="op">=</span> <span class="key">True</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t705" href="#t705">705</a></span><span class="t"> <span class="key">finally</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t706" href="#t706">706</a></span><span class="t"> <span class="com"># The try-finally block is so we can print a partial line</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t707" href="#t707">707</a></span><span class="t"> <span class="com"># with the name of the file, and print (changed) on the</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t708" href="#t708">708</a></span><span class="t"> <span class="com"># same line, but also make sure to break the line before</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t709" href="#t709">709</a></span><span class="t"> <span class="com"># any traceback.</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t710" href="#t710">710</a></span><span class="t"> <span class="key">if</span> <span class="nam">bNeedNewline</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t711" href="#t711">711</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">prout</span><span class="op">(</span><span class="str">""</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t712" href="#t712">712</a></span><span class="t"> <span class="key">else</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t713" href="#t713">713</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">processFile</span><span class="op">(</span><span class="nam">sFile</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">stdout</span><span class="op">,</span> <span class="nam">sFile</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t714" href="#t714">714</a></span><span class="t"> <span class="key">finally</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t715" href="#t715">715</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">restoreIncludePath</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t716" href="#t716">716</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t717" href="#t717">717</a></span><span class="t"> <span class="key">def</span> <span class="nam">processWildcards</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">sFile</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t718" href="#t718">718</a></span><span class="t"> <span class="nam">files</span> <span class="op">=</span> <span class="nam">glob</span><span class="op">.</span><span class="nam">glob</span><span class="op">(</span><span class="nam">sFile</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t719" href="#t719">719</a></span><span class="t"> <span class="key">if</span> <span class="nam">files</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t720" href="#t720">720</a></span><span class="t"> <span class="key">for</span> <span class="nam">sMatchingFile</span> <span class="key">in</span> <span class="nam">files</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t721" href="#t721">721</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">processOneFile</span><span class="op">(</span><span class="nam">sMatchingFile</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t722" href="#t722">722</a></span><span class="t"> <span class="key">else</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t723" href="#t723">723</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">processOneFile</span><span class="op">(</span><span class="nam">sFile</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t724" href="#t724">724</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t725" href="#t725">725</a></span><span class="t"> <span class="key">def</span> <span class="nam">processFileList</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">sFileList</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t726" href="#t726">726</a></span><span class="t"> <span class="str">""" Process the files in a file list.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t727" href="#t727">727</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t728" href="#t728">728</a></span><span class="t"> <span class="nam">flist</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">openInputFile</span><span class="op">(</span><span class="nam">sFileList</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t729" href="#t729">729</a></span><span class="t"> <span class="nam">lines</span> <span class="op">=</span> <span class="nam">flist</span><span class="op">.</span><span class="nam">readlines</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t730" href="#t730">730</a></span><span class="t"> <span class="nam">flist</span><span class="op">.</span><span class="nam">close</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t731" href="#t731">731</a></span><span class="t"> <span class="key">for</span> <span class="nam">l</span> <span class="key">in</span> <span class="nam">lines</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t732" href="#t732">732</a></span><span class="t"> <span class="com"># Use shlex to parse the line like a shell.</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t733" href="#t733">733</a></span><span class="t"> <span class="nam">lex</span> <span class="op">=</span> <span class="nam">shlex</span><span class="op">.</span><span class="nam">shlex</span><span class="op">(</span><span class="nam">l</span><span class="op">,</span> <span class="nam">posix</span><span class="op">=</span><span class="key">True</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t734" href="#t734">734</a></span><span class="t"> <span class="nam">lex</span><span class="op">.</span><span class="nam">whitespace_split</span> <span class="op">=</span> <span class="key">True</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t735" href="#t735">735</a></span><span class="t"> <span class="nam">lex</span><span class="op">.</span><span class="nam">commenters</span> <span class="op">=</span> <span class="str">'#'</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t736" href="#t736">736</a></span><span class="t"> <span class="com"># No escapes, so that backslash can be part of the path</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t737" href="#t737">737</a></span><span class="t"> <span class="nam">lex</span><span class="op">.</span><span class="nam">escape</span> <span class="op">=</span> <span class="str">''</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t738" href="#t738">738</a></span><span class="t"> <span class="nam">args</span> <span class="op">=</span> <span class="nam">list</span><span class="op">(</span><span class="nam">lex</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t739" href="#t739">739</a></span><span class="t"> <span class="key">if</span> <span class="nam">args</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t740" href="#t740">740</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">processArguments</span><span class="op">(</span><span class="nam">args</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t741" href="#t741">741</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t742" href="#t742">742</a></span><span class="t"> <span class="key">def</span> <span class="nam">processArguments</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">args</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t743" href="#t743">743</a></span><span class="t"> <span class="str">""" Process one command-line.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t744" href="#t744">744</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t745" href="#t745">745</a></span><span class="t"> <span class="nam">saved_options</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t746" href="#t746">746</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">clone</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t747" href="#t747">747</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t748" href="#t748">748</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">parseArgs</span><span class="op">(</span><span class="nam">args</span><span class="op">[</span><span class="num">1</span><span class="op">:</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t749" href="#t749">749</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">validate</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t672" href="#t672">672</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">saveIncludePath</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t673" href="#t673">673</a></span><span class="t"> <span class="nam">bNeedNewline</span> <span class="op">=</span> <span class="key">False</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t674" href="#t674">674</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t675" href="#t675">675</a></span><span class="t"> <span class="key">try</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t676" href="#t676">676</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">addToIncludePath</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">includePath</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t677" href="#t677">677</a></span><span class="t"> <span class="com"># Since we know where the input file came from,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t678" href="#t678">678</a></span><span class="t"> <span class="com"># push its directory onto the include path.</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t679" href="#t679">679</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">addToIncludePath</span><span class="op">(</span><span class="op">[</span><span class="nam">os</span><span class="op">.</span><span class="nam">path</span><span class="op">.</span><span class="nam">dirname</span><span class="op">(</span><span class="nam">sFile</span><span class="op">)</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t680" href="#t680">680</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t681" href="#t681">681</a></span><span class="t"> <span class="com"># How we process the file depends on where the output is going.</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t682" href="#t682">682</a></span><span class="t"> <span class="key">if</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">sOutputName</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t683" href="#t683">683</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">processFile</span><span class="op">(</span><span class="nam">sFile</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">sOutputName</span><span class="op">,</span> <span class="nam">sFile</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t684" href="#t684">684</a></span><span class="t"> <span class="key">elif</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">bReplace</span> <span class="key">or</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">bCheck</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t685" href="#t685">685</a></span><span class="t"> <span class="com"># We want to replace the cog file with the output,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t686" href="#t686">686</a></span><span class="t"> <span class="com"># but only if they differ.</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t687" href="#t687">687</a></span><span class="t"> <span class="nam">verb</span> <span class="op">=</span> <span class="str">"Cogging"</span> <span class="key">if</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">bReplace</span> <span class="key">else</span> <span class="str">"Checking"</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t688" href="#t688">688</a></span><span class="t"> <span class="key">if</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">verbosity</span> <span class="op">>=</span> <span class="num">2</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t689" href="#t689">689</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">prout</span><span class="op">(</span><span class="str">f"{verb} {sFile}"</span><span class="op">,</span> <span class="nam">end</span><span class="op">=</span><span class="str">""</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t690" href="#t690">690</a></span><span class="t"> <span class="nam">bNeedNewline</span> <span class="op">=</span> <span class="key">True</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t691" href="#t691">691</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t692" href="#t692">692</a></span><span class="t"> <span class="key">try</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t693" href="#t693">693</a></span><span class="t"> <span class="nam">fOldFile</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">openInputFile</span><span class="op">(</span><span class="nam">sFile</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t694" href="#t694">694</a></span><span class="t"> <span class="nam">sOldText</span> <span class="op">=</span> <span class="nam">fOldFile</span><span class="op">.</span><span class="nam">read</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t695" href="#t695">695</a></span><span class="t"> <span class="nam">fOldFile</span><span class="op">.</span><span class="nam">close</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t696" href="#t696">696</a></span><span class="t"> <span class="nam">sNewText</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">processString</span><span class="op">(</span><span class="nam">sOldText</span><span class="op">,</span> <span class="nam">fname</span><span class="op">=</span><span class="nam">sFile</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t697" href="#t697">697</a></span><span class="t"> <span class="key">if</span> <span class="nam">sOldText</span> <span class="op">!=</span> <span class="nam">sNewText</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t698" href="#t698">698</a></span><span class="t"> <span class="key">if</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">verbosity</span> <span class="op">>=</span> <span class="num">1</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t699" href="#t699">699</a></span><span class="t"> <span class="key">if</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">verbosity</span> <span class="op"><</span> <span class="num">2</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t700" href="#t700">700</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">prout</span><span class="op">(</span><span class="str">f"{verb} {sFile}"</span><span class="op">,</span> <span class="nam">end</span><span class="op">=</span><span class="str">""</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t701" href="#t701">701</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">prout</span><span class="op">(</span><span class="str">" (changed)"</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t702" href="#t702">702</a></span><span class="t"> <span class="nam">bNeedNewline</span> <span class="op">=</span> <span class="key">False</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t703" href="#t703">703</a></span><span class="t"> <span class="key">if</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">bReplace</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t704" href="#t704">704</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">replaceFile</span><span class="op">(</span><span class="nam">sFile</span><span class="op">,</span> <span class="nam">sNewText</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t705" href="#t705">705</a></span><span class="t"> <span class="key">else</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t706" href="#t706">706</a></span><span class="t"> <span class="key">assert</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">bCheck</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t707" href="#t707">707</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">bCheckFailed</span> <span class="op">=</span> <span class="key">True</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t708" href="#t708">708</a></span><span class="t"> <span class="key">finally</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t709" href="#t709">709</a></span><span class="t"> <span class="com"># The try-finally block is so we can print a partial line</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t710" href="#t710">710</a></span><span class="t"> <span class="com"># with the name of the file, and print (changed) on the</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t711" href="#t711">711</a></span><span class="t"> <span class="com"># same line, but also make sure to break the line before</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t712" href="#t712">712</a></span><span class="t"> <span class="com"># any traceback.</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t713" href="#t713">713</a></span><span class="t"> <span class="key">if</span> <span class="nam">bNeedNewline</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t714" href="#t714">714</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">prout</span><span class="op">(</span><span class="str">""</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t715" href="#t715">715</a></span><span class="t"> <span class="key">else</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t716" href="#t716">716</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">processFile</span><span class="op">(</span><span class="nam">sFile</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">stdout</span><span class="op">,</span> <span class="nam">sFile</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t717" href="#t717">717</a></span><span class="t"> <span class="key">finally</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t718" href="#t718">718</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">restoreIncludePath</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t719" href="#t719">719</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t720" href="#t720">720</a></span><span class="t"> <span class="key">def</span> <span class="nam">processWildcards</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">sFile</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t721" href="#t721">721</a></span><span class="t"> <span class="nam">files</span> <span class="op">=</span> <span class="nam">glob</span><span class="op">.</span><span class="nam">glob</span><span class="op">(</span><span class="nam">sFile</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t722" href="#t722">722</a></span><span class="t"> <span class="key">if</span> <span class="nam">files</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t723" href="#t723">723</a></span><span class="t"> <span class="key">for</span> <span class="nam">sMatchingFile</span> <span class="key">in</span> <span class="nam">files</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t724" href="#t724">724</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">processOneFile</span><span class="op">(</span><span class="nam">sMatchingFile</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t725" href="#t725">725</a></span><span class="t"> <span class="key">else</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t726" href="#t726">726</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">processOneFile</span><span class="op">(</span><span class="nam">sFile</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t727" href="#t727">727</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t728" href="#t728">728</a></span><span class="t"> <span class="key">def</span> <span class="nam">processFileList</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">sFileList</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t729" href="#t729">729</a></span><span class="t"> <span class="str">""" Process the files in a file list.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t730" href="#t730">730</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t731" href="#t731">731</a></span><span class="t"> <span class="nam">flist</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">openInputFile</span><span class="op">(</span><span class="nam">sFileList</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t732" href="#t732">732</a></span><span class="t"> <span class="nam">lines</span> <span class="op">=</span> <span class="nam">flist</span><span class="op">.</span><span class="nam">readlines</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t733" href="#t733">733</a></span><span class="t"> <span class="nam">flist</span><span class="op">.</span><span class="nam">close</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t734" href="#t734">734</a></span><span class="t"> <span class="key">for</span> <span class="nam">l</span> <span class="key">in</span> <span class="nam">lines</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t735" href="#t735">735</a></span><span class="t"> <span class="com"># Use shlex to parse the line like a shell.</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t736" href="#t736">736</a></span><span class="t"> <span class="nam">lex</span> <span class="op">=</span> <span class="nam">shlex</span><span class="op">.</span><span class="nam">shlex</span><span class="op">(</span><span class="nam">l</span><span class="op">,</span> <span class="nam">posix</span><span class="op">=</span><span class="key">True</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t737" href="#t737">737</a></span><span class="t"> <span class="nam">lex</span><span class="op">.</span><span class="nam">whitespace_split</span> <span class="op">=</span> <span class="key">True</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t738" href="#t738">738</a></span><span class="t"> <span class="nam">lex</span><span class="op">.</span><span class="nam">commenters</span> <span class="op">=</span> <span class="str">'#'</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t739" href="#t739">739</a></span><span class="t"> <span class="com"># No escapes, so that backslash can be part of the path</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t740" href="#t740">740</a></span><span class="t"> <span class="nam">lex</span><span class="op">.</span><span class="nam">escape</span> <span class="op">=</span> <span class="str">''</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t741" href="#t741">741</a></span><span class="t"> <span class="nam">args</span> <span class="op">=</span> <span class="nam">list</span><span class="op">(</span><span class="nam">lex</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t742" href="#t742">742</a></span><span class="t"> <span class="key">if</span> <span class="nam">args</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t743" href="#t743">743</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">processArguments</span><span class="op">(</span><span class="nam">args</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t744" href="#t744">744</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t745" href="#t745">745</a></span><span class="t"> <span class="key">def</span> <span class="nam">processArguments</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">args</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t746" href="#t746">746</a></span><span class="t"> <span class="str">""" Process one command-line.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t747" href="#t747">747</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t748" href="#t748">748</a></span><span class="t"> <span class="nam">saved_options</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t749" href="#t749">749</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">clone</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t750" href="#t750">750</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t751" href="#t751">751</a></span><span class="t"> <span class="key">if</span> <span class="nam">args</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">[</span><span class="num">0</span><span class="op">]</span> <span class="op">==</span> <span class="str">'@'</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t752" href="#t752">752</a></span><span class="t"> <span class="key">if</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">sOutputName</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t753" href="#t753">753</a></span><span class="t"> <span class="key">raise</span> <span class="nam">CogUsageError</span><span class="op">(</span><span class="str">"Can't use -o with @file"</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t754" href="#t754">754</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">processFileList</span><span class="op">(</span><span class="nam">args</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">[</span><span class="num">1</span><span class="op">:</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t755" href="#t755">755</a></span><span class="t"> <span class="key">else</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t756" href="#t756">756</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">processWildcards</span><span class="op">(</span><span class="nam">args</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t757" href="#t757">757</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t758" href="#t758">758</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span> <span class="op">=</span> <span class="nam">saved_options</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t759" href="#t759">759</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t760" href="#t760">760</a></span><span class="t"> <span class="key">def</span> <span class="nam">callableMain</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">argv</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t761" href="#t761">761</a></span><span class="t"> <span class="str">""" All of command-line cog, but in a callable form.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t762" href="#t762">762</a></span><span class="t"><span class="str"> This is used by main.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t763" href="#t763">763</a></span><span class="t"><span class="str"> argv is the equivalent of sys.argv.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t764" href="#t764">764</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t765" href="#t765">765</a></span><span class="t"> <span class="nam">argv</span> <span class="op">=</span> <span class="nam">argv</span><span class="op">[</span><span class="num">1</span><span class="op">:</span><span class="op">]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t766" href="#t766">766</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t767" href="#t767">767</a></span><span class="t"> <span class="com"># Provide help if asked for anywhere in the command line.</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t768" href="#t768">768</a></span><span class="t"> <span class="key">if</span> <span class="str">'-?'</span> <span class="key">in</span> <span class="nam">argv</span> <span class="key">or</span> <span class="str">'-h'</span> <span class="key">in</span> <span class="nam">argv</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t769" href="#t769">769</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">prerr</span><span class="op">(</span><span class="nam">usage</span><span class="op">,</span> <span class="nam">end</span><span class="op">=</span><span class="str">""</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t770" href="#t770">770</a></span><span class="t"> <span class="key">return</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t771" href="#t771">771</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t772" href="#t772">772</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">parseArgs</span><span class="op">(</span><span class="nam">argv</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t773" href="#t773">773</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">validate</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t774" href="#t774">774</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">_fixEndOutputPatterns</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t775" href="#t775">775</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t776" href="#t776">776</a></span><span class="t"> <span class="key">if</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">bShowVersion</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t777" href="#t777">777</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">prout</span><span class="op">(</span><span class="str">"Cog version %s"</span> <span class="op">%</span> <span class="nam">__version__</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t778" href="#t778">778</a></span><span class="t"> <span class="key">return</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t779" href="#t779">779</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t780" href="#t780">780</a></span><span class="t"> <span class="key">if</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">args</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t781" href="#t781">781</a></span><span class="t"> <span class="key">for</span> <span class="nam">a</span> <span class="key">in</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">args</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t782" href="#t782">782</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">processArguments</span><span class="op">(</span><span class="op">[</span><span class="nam">a</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t783" href="#t783">783</a></span><span class="t"> <span class="key">else</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t784" href="#t784">784</a></span><span class="t"> <span class="key">raise</span> <span class="nam">CogUsageError</span><span class="op">(</span><span class="str">"No files to process"</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t785" href="#t785">785</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t786" href="#t786">786</a></span><span class="t"> <span class="key">if</span> <span class="nam">self</span><span class="op">.</span><span class="nam">bCheckFailed</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t787" href="#t787">787</a></span><span class="t"> <span class="key">raise</span> <span class="nam">CogCheckFailed</span><span class="op">(</span><span class="str">"Check failed"</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t751" href="#t751">751</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">parseArgs</span><span class="op">(</span><span class="nam">args</span><span class="op">[</span><span class="num">1</span><span class="op">:</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t752" href="#t752">752</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">validate</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t753" href="#t753">753</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t754" href="#t754">754</a></span><span class="t"> <span class="key">if</span> <span class="nam">args</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">[</span><span class="num">0</span><span class="op">]</span> <span class="op">==</span> <span class="str">'@'</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t755" href="#t755">755</a></span><span class="t"> <span class="key">if</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">sOutputName</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t756" href="#t756">756</a></span><span class="t"> <span class="key">raise</span> <span class="nam">CogUsageError</span><span class="op">(</span><span class="str">"Can't use -o with @file"</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t757" href="#t757">757</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">processFileList</span><span class="op">(</span><span class="nam">args</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">[</span><span class="num">1</span><span class="op">:</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t758" href="#t758">758</a></span><span class="t"> <span class="key">else</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t759" href="#t759">759</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">processWildcards</span><span class="op">(</span><span class="nam">args</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t760" href="#t760">760</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t761" href="#t761">761</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span> <span class="op">=</span> <span class="nam">saved_options</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t762" href="#t762">762</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t763" href="#t763">763</a></span><span class="t"> <span class="key">def</span> <span class="nam">callableMain</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">argv</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t764" href="#t764">764</a></span><span class="t"> <span class="str">""" All of command-line cog, but in a callable form.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t765" href="#t765">765</a></span><span class="t"><span class="str"> This is used by main.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t766" href="#t766">766</a></span><span class="t"><span class="str"> argv is the equivalent of sys.argv.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t767" href="#t767">767</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t768" href="#t768">768</a></span><span class="t"> <span class="nam">argv</span> <span class="op">=</span> <span class="nam">argv</span><span class="op">[</span><span class="num">1</span><span class="op">:</span><span class="op">]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t769" href="#t769">769</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t770" href="#t770">770</a></span><span class="t"> <span class="com"># Provide help if asked for anywhere in the command line.</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t771" href="#t771">771</a></span><span class="t"> <span class="key">if</span> <span class="str">'-?'</span> <span class="key">in</span> <span class="nam">argv</span> <span class="key">or</span> <span class="str">'-h'</span> <span class="key">in</span> <span class="nam">argv</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t772" href="#t772">772</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">prerr</span><span class="op">(</span><span class="nam">usage</span><span class="op">,</span> <span class="nam">end</span><span class="op">=</span><span class="str">""</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t773" href="#t773">773</a></span><span class="t"> <span class="key">return</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t774" href="#t774">774</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t775" href="#t775">775</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">parseArgs</span><span class="op">(</span><span class="nam">argv</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t776" href="#t776">776</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">validate</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t777" href="#t777">777</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">_fixEndOutputPatterns</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t778" href="#t778">778</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t779" href="#t779">779</a></span><span class="t"> <span class="key">if</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">bShowVersion</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t780" href="#t780">780</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">prout</span><span class="op">(</span><span class="str">f"Cog version {__version__}"</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t781" href="#t781">781</a></span><span class="t"> <span class="key">return</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t782" href="#t782">782</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t783" href="#t783">783</a></span><span class="t"> <span class="key">if</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">args</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t784" href="#t784">784</a></span><span class="t"> <span class="key">for</span> <span class="nam">a</span> <span class="key">in</span> <span class="nam">self</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">args</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t785" href="#t785">785</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">processArguments</span><span class="op">(</span><span class="op">[</span><span class="nam">a</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t786" href="#t786">786</a></span><span class="t"> <span class="key">else</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t787" href="#t787">787</a></span><span class="t"> <span class="key">raise</span> <span class="nam">CogUsageError</span><span class="op">(</span><span class="str">"No files to process"</span><span class="op">)</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t788" href="#t788">788</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t789" href="#t789">789</a></span><span class="t"> <span class="key">def</span> <span class="nam">main</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">argv</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t790" href="#t790">790</a></span><span class="t"> <span class="str">""" Handle the command-line execution for cog.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t791" href="#t791">791</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t792" href="#t792">792</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t793" href="#t793">793</a></span><span class="t"> <span class="key">try</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t794" href="#t794">794</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="nam">argv</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t795" href="#t795">795</a></span><span class="t"> <span class="key">return</span> <span class="num">0</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t796" href="#t796">796</a></span><span class="t"> <span class="key">except</span> <span class="nam">CogUsageError</span> <span class="key">as</span> <span class="nam">err</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t797" href="#t797">797</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">prerr</span><span class="op">(</span><span class="nam">err</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t798" href="#t798">798</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">prerr</span><span class="op">(</span><span class="str">"(for help use -h)"</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t799" href="#t799">799</a></span><span class="t"> <span class="key">return</span> <span class="num">2</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t800" href="#t800">800</a></span><span class="t"> <span class="key">except</span> <span class="nam">CogGeneratedError</span> <span class="key">as</span> <span class="nam">err</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t801" href="#t801">801</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">prerr</span><span class="op">(</span><span class="str">"Error: %s"</span> <span class="op">%</span> <span class="nam">err</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t802" href="#t802">802</a></span><span class="t"> <span class="key">return</span> <span class="num">3</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t803" href="#t803">803</a></span><span class="t"> <span class="key">except</span> <span class="nam">CogUserException</span> <span class="key">as</span> <span class="nam">err</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t804" href="#t804">804</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">prerr</span><span class="op">(</span><span class="str">"Traceback (most recent call last):"</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t805" href="#t805">805</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">prerr</span><span class="op">(</span><span class="nam">err</span><span class="op">.</span><span class="nam">args</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t806" href="#t806">806</a></span><span class="t"> <span class="key">return</span> <span class="num">4</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t807" href="#t807">807</a></span><span class="t"> <span class="key">except</span> <span class="nam">CogCheckFailed</span> <span class="key">as</span> <span class="nam">err</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t808" href="#t808">808</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">prerr</span><span class="op">(</span><span class="nam">err</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t809" href="#t809">809</a></span><span class="t"> <span class="key">return</span> <span class="num">5</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t810" href="#t810">810</a></span><span class="t"> <span class="key">except</span> <span class="nam">CogError</span> <span class="key">as</span> <span class="nam">err</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t789" href="#t789">789</a></span><span class="t"> <span class="key">if</span> <span class="nam">self</span><span class="op">.</span><span class="nam">bCheckFailed</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t790" href="#t790">790</a></span><span class="t"> <span class="key">raise</span> <span class="nam">CogCheckFailed</span><span class="op">(</span><span class="str">"Check failed"</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t791" href="#t791">791</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t792" href="#t792">792</a></span><span class="t"> <span class="key">def</span> <span class="nam">main</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">argv</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t793" href="#t793">793</a></span><span class="t"> <span class="str">""" Handle the command-line execution for cog.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t794" href="#t794">794</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t795" href="#t795">795</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t796" href="#t796">796</a></span><span class="t"> <span class="key">try</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t797" href="#t797">797</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="nam">argv</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t798" href="#t798">798</a></span><span class="t"> <span class="key">return</span> <span class="num">0</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t799" href="#t799">799</a></span><span class="t"> <span class="key">except</span> <span class="nam">CogUsageError</span> <span class="key">as</span> <span class="nam">err</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t800" href="#t800">800</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">prerr</span><span class="op">(</span><span class="nam">err</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t801" href="#t801">801</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">prerr</span><span class="op">(</span><span class="str">"(for help use -h)"</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t802" href="#t802">802</a></span><span class="t"> <span class="key">return</span> <span class="num">2</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t803" href="#t803">803</a></span><span class="t"> <span class="key">except</span> <span class="nam">CogGeneratedError</span> <span class="key">as</span> <span class="nam">err</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t804" href="#t804">804</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">prerr</span><span class="op">(</span><span class="str">f"Error: {err}"</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t805" href="#t805">805</a></span><span class="t"> <span class="key">return</span> <span class="num">3</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t806" href="#t806">806</a></span><span class="t"> <span class="key">except</span> <span class="nam">CogUserException</span> <span class="key">as</span> <span class="nam">err</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t807" href="#t807">807</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">prerr</span><span class="op">(</span><span class="str">"Traceback (most recent call last):"</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t808" href="#t808">808</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">prerr</span><span class="op">(</span><span class="nam">err</span><span class="op">.</span><span class="nam">args</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t809" href="#t809">809</a></span><span class="t"> <span class="key">return</span> <span class="num">4</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t810" href="#t810">810</a></span><span class="t"> <span class="key">except</span> <span class="nam">CogCheckFailed</span> <span class="key">as</span> <span class="nam">err</span><span class="op">:</span> </span><span class="r"></span></p> <p class="mis show_mis"><span class="n"><a id="t811" href="#t811">811</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">prerr</span><span class="op">(</span><span class="nam">err</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t812" href="#t812">812</a></span><span class="t"> <span class="key">return</span> <span class="num">1</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t813" href="#t813">813</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t814" href="#t814">814</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t815" href="#t815">815</a></span><span class="t"><span class="key">def</span> <span class="nam">find_cog_source</span><span class="op">(</span><span class="nam">frame_summary</span><span class="op">,</span> <span class="nam">prologue</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t816" href="#t816">816</a></span><span class="t"> <span class="str">"""Find cog source lines in a frame summary list, for printing tracebacks.</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t812" href="#t812">812</a></span><span class="t"> <span class="key">return</span> <span class="num">5</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t813" href="#t813">813</a></span><span class="t"> <span class="key">except</span> <span class="nam">CogError</span> <span class="key">as</span> <span class="nam">err</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t814" href="#t814">814</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">prerr</span><span class="op">(</span><span class="nam">err</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t815" href="#t815">815</a></span><span class="t"> <span class="key">return</span> <span class="num">1</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t816" href="#t816">816</a></span><span class="t"> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t817" href="#t817">817</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t818" href="#t818">818</a></span><span class="t"><span class="str"> Arguments:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t819" href="#t819">819</a></span><span class="t"><span class="str"> frame_summary: a list of 4-item tuples, as returned by traceback.extract_tb.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t820" href="#t820">820</a></span><span class="t"><span class="str"> prologue: the text of the code prologue.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t821" href="#t821">821</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t822" href="#t822">822</a></span><span class="t"><span class="str"> Returns</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t823" href="#t823">823</a></span><span class="t"><span class="str"> A list of 4-item tuples, updated to correct the cog entries.</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t818" href="#t818">818</a></span><span class="t"><span class="key">def</span> <span class="nam">find_cog_source</span><span class="op">(</span><span class="nam">frame_summary</span><span class="op">,</span> <span class="nam">prologue</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t819" href="#t819">819</a></span><span class="t"> <span class="str">"""Find cog source lines in a frame summary list, for printing tracebacks.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t820" href="#t820">820</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t821" href="#t821">821</a></span><span class="t"><span class="str"> Arguments:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t822" href="#t822">822</a></span><span class="t"><span class="str"> frame_summary: a list of 4-item tuples, as returned by traceback.extract_tb.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t823" href="#t823">823</a></span><span class="t"><span class="str"> prologue: the text of the code prologue.</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t824" href="#t824">824</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t825" href="#t825">825</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t826" href="#t826">826</a></span><span class="t"> <span class="nam">prolines</span> <span class="op">=</span> <span class="nam">prologue</span><span class="op">.</span><span class="nam">splitlines</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t827" href="#t827">827</a></span><span class="t"> <span class="key">for</span> <span class="nam">filename</span><span class="op">,</span> <span class="nam">lineno</span><span class="op">,</span> <span class="nam">funcname</span><span class="op">,</span> <span class="nam">source</span> <span class="key">in</span> <span class="nam">frame_summary</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="par run show_par"><span class="n"><a id="t828" href="#t828">828</a></span><span class="t"> <span class="key">if</span> <span class="key">not</span> <span class="nam">source</span><span class="op">:</span> </span><span class="r"><span class="annotate short">828 ↛ 840</span><span class="annotate long">line 828 didn't jump to line 840, because the condition on line 828 was never false</span></span></p> - <p class="run"><span class="n"><a id="t829" href="#t829">829</a></span><span class="t"> <span class="nam">m</span> <span class="op">=</span> <span class="nam">re</span><span class="op">.</span><span class="nam">search</span><span class="op">(</span><span class="str">r"^<cog ([^:]+):(\d+)>$"</span><span class="op">,</span> <span class="nam">filename</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="par run show_par"><span class="n"><a id="t830" href="#t830">830</a></span><span class="t"> <span class="key">if</span> <span class="nam">m</span><span class="op">:</span> </span><span class="r"><span class="annotate short">830 ↛ 831</span><span class="annotate long">line 830 didn't jump to line 831, because the condition on line 830 was never true</span></span></p> - <p class="mis show_mis"><span class="n"><a id="t831" href="#t831">831</a></span><span class="t"> <span class="key">if</span> <span class="nam">lineno</span> <span class="op"><=</span> <span class="nam">len</span><span class="op">(</span><span class="nam">prolines</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t832" href="#t832">832</a></span><span class="t"> <span class="nam">filename</span> <span class="op">=</span> <span class="str">'<prologue>'</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t833" href="#t833">833</a></span><span class="t"> <span class="nam">source</span> <span class="op">=</span> <span class="nam">prolines</span><span class="op">[</span><span class="nam">lineno</span><span class="op">-</span><span class="num">1</span><span class="op">]</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t834" href="#t834">834</a></span><span class="t"> <span class="nam">lineno</span> <span class="op">-=</span> <span class="num">1</span> <span class="com"># Because "import cog" is the first line in the prologue</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t835" href="#t835">835</a></span><span class="t"> <span class="key">else</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t836" href="#t836">836</a></span><span class="t"> <span class="nam">filename</span><span class="op">,</span> <span class="nam">coglineno</span> <span class="op">=</span> <span class="nam">m</span><span class="op">.</span><span class="nam">groups</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t837" href="#t837">837</a></span><span class="t"> <span class="nam">coglineno</span> <span class="op">=</span> <span class="nam">int</span><span class="op">(</span><span class="nam">coglineno</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t838" href="#t838">838</a></span><span class="t"> <span class="nam">lineno</span> <span class="op">+=</span> <span class="nam">coglineno</span> <span class="op">-</span> <span class="nam">len</span><span class="op">(</span><span class="nam">prolines</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t839" href="#t839">839</a></span><span class="t"> <span class="nam">source</span> <span class="op">=</span> <span class="nam">linecache</span><span class="op">.</span><span class="nam">getline</span><span class="op">(</span><span class="nam">filename</span><span class="op">,</span> <span class="nam">lineno</span><span class="op">)</span><span class="op">.</span><span class="nam">strip</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t840" href="#t840">840</a></span><span class="t"> <span class="key">yield</span> <span class="nam">filename</span><span class="op">,</span> <span class="nam">lineno</span><span class="op">,</span> <span class="nam">funcname</span><span class="op">,</span> <span class="nam">source</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t841" href="#t841">841</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t842" href="#t842">842</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t843" href="#t843">843</a></span><span class="t"><span class="key">def</span> <span class="nam">main</span><span class="op">(</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t844" href="#t844">844</a></span><span class="t"> <span class="str">"""Main function for entry_points to use."""</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t845" href="#t845">845</a></span><span class="t"> <span class="key">return</span> <span class="nam">Cog</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">main</span><span class="op">(</span><span class="nam">sys</span><span class="op">.</span><span class="nam">argv</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t825" href="#t825">825</a></span><span class="t"><span class="str"> Returns</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t826" href="#t826">826</a></span><span class="t"><span class="str"> A list of 4-item tuples, updated to correct the cog entries.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t827" href="#t827">827</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t828" href="#t828">828</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t829" href="#t829">829</a></span><span class="t"> <span class="nam">prolines</span> <span class="op">=</span> <span class="nam">prologue</span><span class="op">.</span><span class="nam">splitlines</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t830" href="#t830">830</a></span><span class="t"> <span class="key">for</span> <span class="nam">filename</span><span class="op">,</span> <span class="nam">lineno</span><span class="op">,</span> <span class="nam">funcname</span><span class="op">,</span> <span class="nam">source</span> <span class="key">in</span> <span class="nam">frame_summary</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="par run show_par"><span class="n"><a id="t831" href="#t831">831</a></span><span class="t"> <span class="key">if</span> <span class="key">not</span> <span class="nam">source</span><span class="op">:</span> </span><span class="r"><span class="annotate short">831 ↛ 843</span><span class="annotate long">line 831 didn't jump to line 843, because the condition on line 831 was never false</span></span></p> + <p class="run"><span class="n"><a id="t832" href="#t832">832</a></span><span class="t"> <span class="nam">m</span> <span class="op">=</span> <span class="nam">re</span><span class="op">.</span><span class="nam">search</span><span class="op">(</span><span class="str">r"^<cog ([^:]+):(\d+)>$"</span><span class="op">,</span> <span class="nam">filename</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="par run show_par"><span class="n"><a id="t833" href="#t833">833</a></span><span class="t"> <span class="key">if</span> <span class="nam">m</span><span class="op">:</span> </span><span class="r"><span class="annotate short">833 ↛ 834</span><span class="annotate long">line 833 didn't jump to line 834, because the condition on line 833 was never true</span></span></p> + <p class="mis show_mis"><span class="n"><a id="t834" href="#t834">834</a></span><span class="t"> <span class="key">if</span> <span class="nam">lineno</span> <span class="op"><=</span> <span class="nam">len</span><span class="op">(</span><span class="nam">prolines</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t835" href="#t835">835</a></span><span class="t"> <span class="nam">filename</span> <span class="op">=</span> <span class="str">'<prologue>'</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t836" href="#t836">836</a></span><span class="t"> <span class="nam">source</span> <span class="op">=</span> <span class="nam">prolines</span><span class="op">[</span><span class="nam">lineno</span><span class="op">-</span><span class="num">1</span><span class="op">]</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t837" href="#t837">837</a></span><span class="t"> <span class="nam">lineno</span> <span class="op">-=</span> <span class="num">1</span> <span class="com"># Because "import cog" is the first line in the prologue</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t838" href="#t838">838</a></span><span class="t"> <span class="key">else</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t839" href="#t839">839</a></span><span class="t"> <span class="nam">filename</span><span class="op">,</span> <span class="nam">coglineno</span> <span class="op">=</span> <span class="nam">m</span><span class="op">.</span><span class="nam">groups</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t840" href="#t840">840</a></span><span class="t"> <span class="nam">coglineno</span> <span class="op">=</span> <span class="nam">int</span><span class="op">(</span><span class="nam">coglineno</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t841" href="#t841">841</a></span><span class="t"> <span class="nam">lineno</span> <span class="op">+=</span> <span class="nam">coglineno</span> <span class="op">-</span> <span class="nam">len</span><span class="op">(</span><span class="nam">prolines</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t842" href="#t842">842</a></span><span class="t"> <span class="nam">source</span> <span class="op">=</span> <span class="nam">linecache</span><span class="op">.</span><span class="nam">getline</span><span class="op">(</span><span class="nam">filename</span><span class="op">,</span> <span class="nam">lineno</span><span class="op">)</span><span class="op">.</span><span class="nam">strip</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t843" href="#t843">843</a></span><span class="t"> <span class="key">yield</span> <span class="nam">filename</span><span class="op">,</span> <span class="nam">lineno</span><span class="op">,</span> <span class="nam">funcname</span><span class="op">,</span> <span class="nam">source</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t844" href="#t844">844</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t845" href="#t845">845</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t846" href="#t846">846</a></span><span class="t"><span class="key">def</span> <span class="nam">main</span><span class="op">(</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t847" href="#t847">847</a></span><span class="t"> <span class="str">"""Main function for entry_points to use."""</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t848" href="#t848">848</a></span><span class="t"> <span class="key">return</span> <span class="nam">Cog</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">main</span><span class="op">(</span><span class="nam">sys</span><span class="op">.</span><span class="nam">argv</span><span class="op">)</span> </span><span class="r"></span></p> </main> <footer> <div class="content"> <p> - <a id="prevFileLink" class="nav" href="d_7b071bdc2a35fa80_backward_py.html">« prev</a> + <a id="prevFileLink" class="nav" href="d_7b071bdc2a35fa80___main___py.html">« prev</a> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80_makefiles_py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.1.0</a>, - created at 2023-01-24 19:37 -0500 + <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.2.0</a>, + created at 2023-02-22 18:50 -0500 </p> </div> </footer> diff --git a/doc/sample_html/d_7b071bdc2a35fa80_makefiles_py.html b/doc/sample_html/d_7b071bdc2a35fa80_makefiles_py.html index 9ceb57e9f..a719ade03 100644 --- a/doc/sample_html/d_7b071bdc2a35fa80_makefiles_py.html +++ b/doc/sample_html/d_7b071bdc2a35fa80_makefiles_py.html @@ -2,7 +2,7 @@ <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> - <title>Coverage for cogapp/makefiles.py: 17.07%</title> + <title>Coverage for cogapp/makefiles.py: 11.11%</title> <link rel="icon" sizes="32x32" href="favicon_32.png"> <link rel="stylesheet" href="style.css" type="text/css"> <script type="text/javascript" src="coverage_html.js" defer></script> @@ -12,7 +12,7 @@ <div class="content"> <h1> <span class="text">Coverage for </span><b>cogapp/makefiles.py</b>: - <span class="pc_cov">17.07%</span> + <span class="pc_cov">11.11%</span> </h1> <aside id="help_panel_wrapper"> <input id="help_panel_state" type="checkbox"> @@ -55,9 +55,9 @@ <h1> </div> </aside> <h2> - <span class="text">27 statements </span> - <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">7<span class="text"> run</span></button> - <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">20<span class="text"> missing</span></button> + <span class="text">22 statements </span> + <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">4<span class="text"> run</span></button> + <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">18<span class="text"> missing</span></button> <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">0<span class="text"> excluded</span></button> <button type="button" class="par run show_par button_toggle_par" value="par" data-shortcut="p" title="Toggle lines partially run">0<span class="text"> partial</span></button> </h2> @@ -66,8 +66,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80_test_cogapp_py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.1.0</a>, - created at 2023-01-24 19:37 -0500 + <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.2.0</a>, + created at 2023-02-22 18:50 -0500 </p> <aside class="hidden"> <button type="button" class="button_next_chunk" data-shortcut="j"/> @@ -83,51 +83,41 @@ <h2> </header> <main id="source"> <p class="pln"><span class="n"><a id="t1" href="#t1">1</a></span><span class="t"><span class="str">""" Dictionary-to-filetree functions, to create test files for testing.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2" href="#t2">2</a></span><span class="t"><span class="str"> http://nedbatchelder.com/code/cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2" href="#t2">2</a></span><span class="t"><span class="str">"""</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t3" href="#t3">3</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t4" href="#t4">4</a></span><span class="t"><span class="str"> Copyright 2004-2019, Ned Batchelder.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t5" href="#t5">5</a></span><span class="t"><span class="str">"""</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t6" href="#t6">6</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t7" href="#t7">7</a></span><span class="t"><span class="key">from</span> <span class="nam">__future__</span> <span class="key">import</span> <span class="nam">absolute_import</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t4" href="#t4">4</a></span><span class="t"><span class="key">import</span> <span class="nam">os</span><span class="op">.</span><span class="nam">path</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t5" href="#t5">5</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t6" href="#t6">6</a></span><span class="t"><span class="key">from</span> <span class="op">.</span><span class="nam">whiteutils</span> <span class="key">import</span> <span class="nam">reindentBlock</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t7" href="#t7">7</a></span><span class="t"> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t8" href="#t8">8</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t9" href="#t9">9</a></span><span class="t"><span class="key">import</span> <span class="nam">os</span><span class="op">.</span><span class="nam">path</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t10" href="#t10">10</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t11" href="#t11">11</a></span><span class="t"><span class="key">from</span> <span class="op">.</span><span class="nam">backward</span> <span class="key">import</span> <span class="nam">string_types</span><span class="op">,</span> <span class="nam">bytes_types</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t12" href="#t12">12</a></span><span class="t"><span class="key">from</span> <span class="op">.</span><span class="nam">whiteutils</span> <span class="key">import</span> <span class="nam">reindentBlock</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t13" href="#t13">13</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t14" href="#t14">14</a></span><span class="t"><span class="nam">__all__</span> <span class="op">=</span> <span class="op">[</span><span class="str">'makeFiles'</span><span class="op">,</span> <span class="str">'removeFiles'</span><span class="op">]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t15" href="#t15">15</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t16" href="#t16">16</a></span><span class="t"><span class="key">def</span> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">,</span> <span class="nam">basedir</span><span class="op">=</span><span class="str">'.'</span><span class="op">,</span> <span class="nam">bytes</span><span class="op">=</span><span class="key">False</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t17" href="#t17">17</a></span><span class="t"> <span class="str">""" Create files from the dictionary `d`, in the directory named by `basedir`.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t18" href="#t18">18</a></span><span class="t"><span class="str"> If `bytes` is true, then treat bytestrings as bytes, else as text.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t19" href="#t19">19</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t20" href="#t20">20</a></span><span class="t"> <span class="key">for</span> <span class="nam">name</span><span class="op">,</span> <span class="nam">contents</span> <span class="key">in</span> <span class="nam">d</span><span class="op">.</span><span class="nam">items</span><span class="op">(</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t21" href="#t21">21</a></span><span class="t"> <span class="nam">child</span> <span class="op">=</span> <span class="nam">os</span><span class="op">.</span><span class="nam">path</span><span class="op">.</span><span class="nam">join</span><span class="op">(</span><span class="nam">basedir</span><span class="op">,</span> <span class="nam">name</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t22" href="#t22">22</a></span><span class="t"> <span class="key">if</span> <span class="nam">isinstance</span><span class="op">(</span><span class="nam">contents</span><span class="op">,</span> <span class="nam">string_types</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t23" href="#t23">23</a></span><span class="t"> <span class="nam">mode</span> <span class="op">=</span> <span class="str">'w'</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t24" href="#t24">24</a></span><span class="t"> <span class="key">if</span> <span class="nam">bytes</span> <span class="key">and</span> <span class="nam">isinstance</span><span class="op">(</span><span class="nam">contents</span><span class="op">,</span> <span class="nam">bytes_types</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t25" href="#t25">25</a></span><span class="t"> <span class="nam">mode</span> <span class="op">+=</span> <span class="str">"b"</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t26" href="#t26">26</a></span><span class="t"> <span class="nam">f</span> <span class="op">=</span> <span class="nam">open</span><span class="op">(</span><span class="nam">child</span><span class="op">,</span> <span class="nam">mode</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t27" href="#t27">27</a></span><span class="t"> <span class="nam">contents</span> <span class="op">=</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">contents</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t28" href="#t28">28</a></span><span class="t"> <span class="nam">f</span><span class="op">.</span><span class="nam">write</span><span class="op">(</span><span class="nam">contents</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t29" href="#t29">29</a></span><span class="t"> <span class="nam">f</span><span class="op">.</span><span class="nam">close</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t30" href="#t30">30</a></span><span class="t"> <span class="key">else</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t31" href="#t31">31</a></span><span class="t"> <span class="key">if</span> <span class="key">not</span> <span class="nam">os</span><span class="op">.</span><span class="nam">path</span><span class="op">.</span><span class="nam">exists</span><span class="op">(</span><span class="nam">child</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t32" href="#t32">32</a></span><span class="t"> <span class="nam">os</span><span class="op">.</span><span class="nam">mkdir</span><span class="op">(</span><span class="nam">child</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t33" href="#t33">33</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">contents</span><span class="op">,</span> <span class="nam">child</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t34" href="#t34">34</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t35" href="#t35">35</a></span><span class="t"><span class="key">def</span> <span class="nam">removeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">,</span> <span class="nam">basedir</span><span class="op">=</span><span class="str">'.'</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t36" href="#t36">36</a></span><span class="t"> <span class="str">""" Remove the files created by makeFiles.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t37" href="#t37">37</a></span><span class="t"><span class="str"> Directories are removed if they are empty.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t38" href="#t38">38</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t39" href="#t39">39</a></span><span class="t"> <span class="key">for</span> <span class="nam">name</span><span class="op">,</span> <span class="nam">contents</span> <span class="key">in</span> <span class="nam">d</span><span class="op">.</span><span class="nam">items</span><span class="op">(</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t40" href="#t40">40</a></span><span class="t"> <span class="nam">child</span> <span class="op">=</span> <span class="nam">os</span><span class="op">.</span><span class="nam">path</span><span class="op">.</span><span class="nam">join</span><span class="op">(</span><span class="nam">basedir</span><span class="op">,</span> <span class="nam">name</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t41" href="#t41">41</a></span><span class="t"> <span class="key">if</span> <span class="nam">isinstance</span><span class="op">(</span><span class="nam">contents</span><span class="op">,</span> <span class="nam">string_types</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t42" href="#t42">42</a></span><span class="t"> <span class="nam">os</span><span class="op">.</span><span class="nam">remove</span><span class="op">(</span><span class="nam">child</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t43" href="#t43">43</a></span><span class="t"> <span class="key">else</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t44" href="#t44">44</a></span><span class="t"> <span class="nam">removeFiles</span><span class="op">(</span><span class="nam">contents</span><span class="op">,</span> <span class="nam">child</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t45" href="#t45">45</a></span><span class="t"> <span class="key">if</span> <span class="key">not</span> <span class="nam">os</span><span class="op">.</span><span class="nam">listdir</span><span class="op">(</span><span class="nam">child</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t46" href="#t46">46</a></span><span class="t"> <span class="nam">os</span><span class="op">.</span><span class="nam">rmdir</span><span class="op">(</span><span class="nam">child</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t9" href="#t9">9</a></span><span class="t"><span class="key">def</span> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">,</span> <span class="nam">basedir</span><span class="op">=</span><span class="str">'.'</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t10" href="#t10">10</a></span><span class="t"> <span class="str">""" Create files from the dictionary `d`, in the directory named by `basedir`.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t11" href="#t11">11</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t12" href="#t12">12</a></span><span class="t"> <span class="key">for</span> <span class="nam">name</span><span class="op">,</span> <span class="nam">contents</span> <span class="key">in</span> <span class="nam">d</span><span class="op">.</span><span class="nam">items</span><span class="op">(</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t13" href="#t13">13</a></span><span class="t"> <span class="nam">child</span> <span class="op">=</span> <span class="nam">os</span><span class="op">.</span><span class="nam">path</span><span class="op">.</span><span class="nam">join</span><span class="op">(</span><span class="nam">basedir</span><span class="op">,</span> <span class="nam">name</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t14" href="#t14">14</a></span><span class="t"> <span class="key">if</span> <span class="nam">isinstance</span><span class="op">(</span><span class="nam">contents</span><span class="op">,</span> <span class="op">(</span><span class="nam">bytes</span><span class="op">,</span> <span class="nam">str</span><span class="op">)</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t15" href="#t15">15</a></span><span class="t"> <span class="nam">mode</span> <span class="op">=</span> <span class="str">"w"</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t16" href="#t16">16</a></span><span class="t"> <span class="key">if</span> <span class="nam">isinstance</span><span class="op">(</span><span class="nam">contents</span><span class="op">,</span> <span class="nam">bytes</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t17" href="#t17">17</a></span><span class="t"> <span class="nam">mode</span> <span class="op">+=</span> <span class="str">"b"</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t18" href="#t18">18</a></span><span class="t"> <span class="key">with</span> <span class="nam">open</span><span class="op">(</span><span class="nam">child</span><span class="op">,</span> <span class="nam">mode</span><span class="op">)</span> <span class="key">as</span> <span class="nam">f</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t19" href="#t19">19</a></span><span class="t"> <span class="nam">f</span><span class="op">.</span><span class="nam">write</span><span class="op">(</span><span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">contents</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t20" href="#t20">20</a></span><span class="t"> <span class="key">else</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t21" href="#t21">21</a></span><span class="t"> <span class="key">if</span> <span class="key">not</span> <span class="nam">os</span><span class="op">.</span><span class="nam">path</span><span class="op">.</span><span class="nam">exists</span><span class="op">(</span><span class="nam">child</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t22" href="#t22">22</a></span><span class="t"> <span class="nam">os</span><span class="op">.</span><span class="nam">mkdir</span><span class="op">(</span><span class="nam">child</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t23" href="#t23">23</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">contents</span><span class="op">,</span> <span class="nam">child</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t24" href="#t24">24</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t25" href="#t25">25</a></span><span class="t"><span class="key">def</span> <span class="nam">removeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">,</span> <span class="nam">basedir</span><span class="op">=</span><span class="str">'.'</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t26" href="#t26">26</a></span><span class="t"> <span class="str">""" Remove the files created by makeFiles.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t27" href="#t27">27</a></span><span class="t"><span class="str"> Directories are removed if they are empty.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t28" href="#t28">28</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t29" href="#t29">29</a></span><span class="t"> <span class="key">for</span> <span class="nam">name</span><span class="op">,</span> <span class="nam">contents</span> <span class="key">in</span> <span class="nam">d</span><span class="op">.</span><span class="nam">items</span><span class="op">(</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t30" href="#t30">30</a></span><span class="t"> <span class="nam">child</span> <span class="op">=</span> <span class="nam">os</span><span class="op">.</span><span class="nam">path</span><span class="op">.</span><span class="nam">join</span><span class="op">(</span><span class="nam">basedir</span><span class="op">,</span> <span class="nam">name</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t31" href="#t31">31</a></span><span class="t"> <span class="key">if</span> <span class="nam">isinstance</span><span class="op">(</span><span class="nam">contents</span><span class="op">,</span> <span class="op">(</span><span class="nam">bytes</span><span class="op">,</span> <span class="nam">str</span><span class="op">)</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t32" href="#t32">32</a></span><span class="t"> <span class="nam">os</span><span class="op">.</span><span class="nam">remove</span><span class="op">(</span><span class="nam">child</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t33" href="#t33">33</a></span><span class="t"> <span class="key">else</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t34" href="#t34">34</a></span><span class="t"> <span class="nam">removeFiles</span><span class="op">(</span><span class="nam">contents</span><span class="op">,</span> <span class="nam">child</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t35" href="#t35">35</a></span><span class="t"> <span class="key">if</span> <span class="key">not</span> <span class="nam">os</span><span class="op">.</span><span class="nam">listdir</span><span class="op">(</span><span class="nam">child</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t36" href="#t36">36</a></span><span class="t"> <span class="nam">os</span><span class="op">.</span><span class="nam">rmdir</span><span class="op">(</span><span class="nam">child</span><span class="op">)</span> </span><span class="r"></span></p> </main> <footer> <div class="content"> @@ -136,8 +126,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80_test_cogapp_py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.1.0</a>, - created at 2023-01-24 19:37 -0500 + <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.2.0</a>, + created at 2023-02-22 18:50 -0500 </p> </div> </footer> diff --git a/doc/sample_html/d_7b071bdc2a35fa80_test_cogapp_py.html b/doc/sample_html/d_7b071bdc2a35fa80_test_cogapp_py.html index d925934f3..6ac6fa440 100644 --- a/doc/sample_html/d_7b071bdc2a35fa80_test_cogapp_py.html +++ b/doc/sample_html/d_7b071bdc2a35fa80_test_cogapp_py.html @@ -2,7 +2,7 @@ <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> - <title>Coverage for cogapp/test_cogapp.py: 29.30%</title> + <title>Coverage for cogapp/test_cogapp.py: 29.57%</title> <link rel="icon" sizes="32x32" href="favicon_32.png"> <link rel="stylesheet" href="style.css" type="text/css"> <script type="text/javascript" src="coverage_html.js" defer></script> @@ -12,7 +12,7 @@ <div class="content"> <h1> <span class="text">Coverage for </span><b>cogapp/test_cogapp.py</b>: - <span class="pc_cov">29.30%</span> + <span class="pc_cov">29.57%</span> </h1> <aside id="help_panel_wrapper"> <input id="help_panel_state" type="checkbox"> @@ -55,9 +55,9 @@ <h1> </div> </aside> <h2> - <span class="text">849 statements </span> + <span class="text">845 statements </span> <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">254<span class="text"> run</span></button> - <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">595<span class="text"> missing</span></button> + <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">591<span class="text"> missing</span></button> <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">2<span class="text"> excluded</span></button> <button type="button" class="par run show_par button_toggle_par" value="par" data-shortcut="p" title="Toggle lines partially run">1<span class="text"> partial</span></button> </h2> @@ -66,8 +66,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80_test_makefiles_py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.1.0</a>, - created at 2023-01-24 19:37 -0500 + <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.2.0</a>, + created at 2023-02-22 18:50 -0500 </p> <aside class="hidden"> <button type="button" class="button_next_chunk" data-shortcut="j"/> @@ -83,1060 +83,1060 @@ <h2> </header> <main id="source"> <p class="pln"><span class="n"><a id="t1" href="#t1">1</a></span><span class="t"><span class="str">""" Test cogapp.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2" href="#t2">2</a></span><span class="t"><span class="str"> http://nedbatchelder.com/code/cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2" href="#t2">2</a></span><span class="t"><span class="str">"""</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t3" href="#t3">3</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t4" href="#t4">4</a></span><span class="t"><span class="str"> Copyright 2004-2021, Ned Batchelder.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t5" href="#t5">5</a></span><span class="t"><span class="str">"""</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t6" href="#t6">6</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t7" href="#t7">7</a></span><span class="t"><span class="key">from</span> <span class="nam">__future__</span> <span class="key">import</span> <span class="nam">absolute_import</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t8" href="#t8">8</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t9" href="#t9">9</a></span><span class="t"><span class="key">import</span> <span class="nam">os</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t10" href="#t10">10</a></span><span class="t"><span class="key">import</span> <span class="nam">os</span><span class="op">.</span><span class="nam">path</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t11" href="#t11">11</a></span><span class="t"><span class="key">import</span> <span class="nam">random</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t12" href="#t12">12</a></span><span class="t"><span class="key">import</span> <span class="nam">re</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t13" href="#t13">13</a></span><span class="t"><span class="key">import</span> <span class="nam">shutil</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t14" href="#t14">14</a></span><span class="t"><span class="key">import</span> <span class="nam">stat</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t15" href="#t15">15</a></span><span class="t"><span class="key">import</span> <span class="nam">sys</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t16" href="#t16">16</a></span><span class="t"><span class="key">import</span> <span class="nam">tempfile</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t17" href="#t17">17</a></span><span class="t"><span class="key">import</span> <span class="nam">threading</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t18" href="#t18">18</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t19" href="#t19">19</a></span><span class="t"><span class="key">from</span> <span class="op">.</span><span class="nam">backward</span> <span class="key">import</span> <span class="nam">StringIO</span><span class="op">,</span> <span class="nam">to_bytes</span><span class="op">,</span> <span class="nam">TestCase</span><span class="op">,</span> <span class="nam">PY3</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t20" href="#t20">20</a></span><span class="t"><span class="key">from</span> <span class="op">.</span><span class="nam">cogapp</span> <span class="key">import</span> <span class="nam">Cog</span><span class="op">,</span> <span class="nam">CogOptions</span><span class="op">,</span> <span class="nam">CogGenerator</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t21" href="#t21">21</a></span><span class="t"><span class="key">from</span> <span class="op">.</span><span class="nam">cogapp</span> <span class="key">import</span> <span class="nam">CogError</span><span class="op">,</span> <span class="nam">CogUsageError</span><span class="op">,</span> <span class="nam">CogGeneratedError</span><span class="op">,</span> <span class="nam">CogUserException</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t22" href="#t22">22</a></span><span class="t"><span class="key">from</span> <span class="op">.</span><span class="nam">cogapp</span> <span class="key">import</span> <span class="nam">usage</span><span class="op">,</span> <span class="nam">__version__</span><span class="op">,</span> <span class="nam">main</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t23" href="#t23">23</a></span><span class="t"><span class="key">from</span> <span class="op">.</span><span class="nam">makefiles</span> <span class="key">import</span> <span class="op">*</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t24" href="#t24">24</a></span><span class="t"><span class="key">from</span> <span class="op">.</span><span class="nam">whiteutils</span> <span class="key">import</span> <span class="nam">reindentBlock</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t25" href="#t25">25</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t4" href="#t4">4</a></span><span class="t"><span class="key">import</span> <span class="nam">io</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t5" href="#t5">5</a></span><span class="t"><span class="key">import</span> <span class="nam">os</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t6" href="#t6">6</a></span><span class="t"><span class="key">import</span> <span class="nam">os</span><span class="op">.</span><span class="nam">path</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t7" href="#t7">7</a></span><span class="t"><span class="key">import</span> <span class="nam">random</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t8" href="#t8">8</a></span><span class="t"><span class="key">import</span> <span class="nam">re</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t9" href="#t9">9</a></span><span class="t"><span class="key">import</span> <span class="nam">shutil</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t10" href="#t10">10</a></span><span class="t"><span class="key">import</span> <span class="nam">stat</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t11" href="#t11">11</a></span><span class="t"><span class="key">import</span> <span class="nam">sys</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t12" href="#t12">12</a></span><span class="t"><span class="key">import</span> <span class="nam">tempfile</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t13" href="#t13">13</a></span><span class="t"><span class="key">import</span> <span class="nam">threading</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t14" href="#t14">14</a></span><span class="t"><span class="key">from</span> <span class="nam">unittest</span> <span class="key">import</span> <span class="nam">TestCase</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t15" href="#t15">15</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t16" href="#t16">16</a></span><span class="t"><span class="key">from</span> <span class="op">.</span><span class="nam">cogapp</span> <span class="key">import</span> <span class="nam">Cog</span><span class="op">,</span> <span class="nam">CogOptions</span><span class="op">,</span> <span class="nam">CogGenerator</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t17" href="#t17">17</a></span><span class="t"><span class="key">from</span> <span class="op">.</span><span class="nam">cogapp</span> <span class="key">import</span> <span class="nam">CogError</span><span class="op">,</span> <span class="nam">CogUsageError</span><span class="op">,</span> <span class="nam">CogGeneratedError</span><span class="op">,</span> <span class="nam">CogUserException</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t18" href="#t18">18</a></span><span class="t"><span class="key">from</span> <span class="op">.</span><span class="nam">cogapp</span> <span class="key">import</span> <span class="nam">usage</span><span class="op">,</span> <span class="nam">__version__</span><span class="op">,</span> <span class="nam">main</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t19" href="#t19">19</a></span><span class="t"><span class="key">from</span> <span class="op">.</span><span class="nam">makefiles</span> <span class="key">import</span> <span class="nam">makeFiles</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t20" href="#t20">20</a></span><span class="t"><span class="key">from</span> <span class="op">.</span><span class="nam">whiteutils</span> <span class="key">import</span> <span class="nam">reindentBlock</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t21" href="#t21">21</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t22" href="#t22">22</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t23" href="#t23">23</a></span><span class="t"><span class="key">class</span> <span class="nam">CogTestsInMemory</span><span class="op">(</span><span class="nam">TestCase</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t24" href="#t24">24</a></span><span class="t"> <span class="str">""" Test cases for cogapp.Cog()</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t25" href="#t25">25</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t26" href="#t26">26</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t27" href="#t27">27</a></span><span class="t"><span class="key">class</span> <span class="nam">CogTestsInMemory</span><span class="op">(</span><span class="nam">TestCase</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t28" href="#t28">28</a></span><span class="t"> <span class="str">""" Test cases for cogapp.Cog()</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t29" href="#t29">29</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t30" href="#t30">30</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t31" href="#t31">31</a></span><span class="t"> <span class="key">def</span> <span class="nam">testNoCog</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t32" href="#t32">32</a></span><span class="t"> <span class="nam">strings</span> <span class="op">=</span> <span class="op">[</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t33" href="#t33">33</a></span><span class="t"> <span class="str">''</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t34" href="#t34">34</a></span><span class="t"> <span class="str">' '</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t35" href="#t35">35</a></span><span class="t"> <span class="str">' \t \t \tx'</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t36" href="#t36">36</a></span><span class="t"> <span class="str">'hello'</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t37" href="#t37">37</a></span><span class="t"> <span class="str">'the cat\nin the\nhat.'</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t38" href="#t38">38</a></span><span class="t"> <span class="str">'Horton\n\tHears A\n\t\tWho'</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t39" href="#t39">39</a></span><span class="t"> <span class="op">]</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t40" href="#t40">40</a></span><span class="t"> <span class="key">for</span> <span class="nam">s</span> <span class="key">in</span> <span class="nam">strings</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t41" href="#t41">41</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">Cog</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">processString</span><span class="op">(</span><span class="nam">s</span><span class="op">)</span><span class="op">,</span> <span class="nam">s</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t42" href="#t42">42</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t43" href="#t43">43</a></span><span class="t"> <span class="key">def</span> <span class="nam">testSimple</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t44" href="#t44">44</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t45" href="#t45">45</a></span><span class="t"><span class="str"> Some text.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t46" href="#t46">46</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t47" href="#t47">47</a></span><span class="t"><span class="str"> import cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t48" href="#t48">48</a></span><span class="t"><span class="str"> cog.outl("This is line one\\n")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t49" href="#t49">49</a></span><span class="t"><span class="str"> cog.outl("This is line two")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t50" href="#t50">50</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t51" href="#t51">51</a></span><span class="t"><span class="str"> gobbledegook.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t52" href="#t52">52</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t53" href="#t53">53</a></span><span class="t"><span class="str"> epilogue.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t54" href="#t54">54</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t55" href="#t55">55</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t56" href="#t56">56</a></span><span class="t"> <span class="nam">outfile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t57" href="#t57">57</a></span><span class="t"><span class="str"> Some text.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t58" href="#t58">58</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t59" href="#t59">59</a></span><span class="t"><span class="str"> import cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t60" href="#t60">60</a></span><span class="t"><span class="str"> cog.outl("This is line one\\n")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t61" href="#t61">61</a></span><span class="t"><span class="str"> cog.outl("This is line two")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t62" href="#t62">62</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t63" href="#t63">63</a></span><span class="t"><span class="str"> This is line one</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t64" href="#t64">64</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t65" href="#t65">65</a></span><span class="t"><span class="str"> This is line two</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t66" href="#t66">66</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t67" href="#t67">67</a></span><span class="t"><span class="str"> epilogue.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t68" href="#t68">68</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t69" href="#t69">69</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t70" href="#t70">70</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">Cog</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">processString</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span><span class="op">,</span> <span class="nam">outfile</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t71" href="#t71">71</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t72" href="#t72">72</a></span><span class="t"> <span class="key">def</span> <span class="nam">testEmptyCog</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t73" href="#t73">73</a></span><span class="t"> <span class="com"># The cog clause can be totally empty. Not sure why you'd want it,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t74" href="#t74">74</a></span><span class="t"> <span class="com"># but it works.</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t75" href="#t75">75</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t76" href="#t76">76</a></span><span class="t"><span class="str"> hello</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t77" href="#t77">77</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t78" href="#t78">78</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t79" href="#t79">79</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t80" href="#t80">80</a></span><span class="t"><span class="str"> goodbye</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t81" href="#t81">81</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t82" href="#t82">82</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t83" href="#t83">83</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t84" href="#t84">84</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">Cog</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">processString</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span><span class="op">,</span> <span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t85" href="#t85">85</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t86" href="#t86">86</a></span><span class="t"> <span class="key">def</span> <span class="nam">testMultipleCogs</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t87" href="#t87">87</a></span><span class="t"> <span class="com"># One file can have many cog chunks, even abutting each other.</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t88" href="#t88">88</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t89" href="#t89">89</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t90" href="#t90">90</a></span><span class="t"><span class="str"> cog.out("chunk1")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t91" href="#t91">91</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t92" href="#t92">92</a></span><span class="t"><span class="str"> chunk1</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t93" href="#t93">93</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t94" href="#t94">94</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t95" href="#t95">95</a></span><span class="t"><span class="str"> cog.out("chunk2")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t96" href="#t96">96</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t97" href="#t97">97</a></span><span class="t"><span class="str"> chunk2</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t98" href="#t98">98</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t99" href="#t99">99</a></span><span class="t"><span class="str"> between chunks</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t100" href="#t100">100</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t101" href="#t101">101</a></span><span class="t"><span class="str"> cog.out("chunk3")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t102" href="#t102">102</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t103" href="#t103">103</a></span><span class="t"><span class="str"> chunk3</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t104" href="#t104">104</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t105" href="#t105">105</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t106" href="#t106">106</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t107" href="#t107">107</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t108" href="#t108">108</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">Cog</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">processString</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span><span class="op">,</span> <span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t109" href="#t109">109</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t110" href="#t110">110</a></span><span class="t"> <span class="key">def</span> <span class="nam">testTrimBlankLines</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t111" href="#t111">111</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t112" href="#t112">112</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t113" href="#t113">113</a></span><span class="t"><span class="str"> cog.out("This is line one\\n", trimblanklines=True)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t114" href="#t114">114</a></span><span class="t"><span class="str"> cog.out('''</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t115" href="#t115">115</a></span><span class="t"><span class="str"> This is line two</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t116" href="#t116">116</a></span><span class="t"><span class="str"> ''', dedent=True, trimblanklines=True)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t117" href="#t117">117</a></span><span class="t"><span class="str"> cog.outl("This is line three", trimblanklines=True)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t118" href="#t118">118</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t119" href="#t119">119</a></span><span class="t"><span class="str"> This is line one</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t120" href="#t120">120</a></span><span class="t"><span class="str"> This is line two</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t121" href="#t121">121</a></span><span class="t"><span class="str"> This is line three</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t122" href="#t122">122</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t123" href="#t123">123</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t124" href="#t124">124</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t125" href="#t125">125</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t126" href="#t126">126</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">Cog</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">processString</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span><span class="op">,</span> <span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t127" href="#t127">127</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t128" href="#t128">128</a></span><span class="t"> <span class="key">def</span> <span class="nam">testTrimEmptyBlankLines</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t129" href="#t129">129</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t130" href="#t130">130</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t131" href="#t131">131</a></span><span class="t"><span class="str"> cog.out("This is line one\\n", trimblanklines=True)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t132" href="#t132">132</a></span><span class="t"><span class="str"> cog.out('''</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t133" href="#t133">133</a></span><span class="t"><span class="str"> This is line two</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t134" href="#t134">134</a></span><span class="t"><span class="str"> ''', dedent=True, trimblanklines=True)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t135" href="#t135">135</a></span><span class="t"><span class="str"> cog.out('', dedent=True, trimblanklines=True)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t136" href="#t136">136</a></span><span class="t"><span class="str"> cog.outl("This is line three", trimblanklines=True)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t137" href="#t137">137</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t138" href="#t138">138</a></span><span class="t"><span class="str"> This is line one</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t139" href="#t139">139</a></span><span class="t"><span class="str"> This is line two</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t140" href="#t140">140</a></span><span class="t"><span class="str"> This is line three</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t141" href="#t141">141</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t142" href="#t142">142</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t143" href="#t143">143</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t144" href="#t144">144</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t145" href="#t145">145</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">Cog</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">processString</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span><span class="op">,</span> <span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t146" href="#t146">146</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t147" href="#t147">147</a></span><span class="t"> <span class="key">def</span> <span class="nam">testTrimBlankLinesWithLastPartial</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t148" href="#t148">148</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t149" href="#t149">149</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t150" href="#t150">150</a></span><span class="t"><span class="str"> cog.out("This is line one\\n", trimblanklines=True)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t151" href="#t151">151</a></span><span class="t"><span class="str"> cog.out("\\nLine two\\nLine three", trimblanklines=True)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t152" href="#t152">152</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t153" href="#t153">153</a></span><span class="t"><span class="str"> This is line one</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t154" href="#t154">154</a></span><span class="t"><span class="str"> Line two</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t155" href="#t155">155</a></span><span class="t"><span class="str"> Line three</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t156" href="#t156">156</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t157" href="#t157">157</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t158" href="#t158">158</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t159" href="#t159">159</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t160" href="#t160">160</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">Cog</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">processString</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span><span class="op">,</span> <span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t161" href="#t161">161</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t162" href="#t162">162</a></span><span class="t"> <span class="key">def</span> <span class="nam">testCogOutDedent</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t163" href="#t163">163</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t164" href="#t164">164</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t165" href="#t165">165</a></span><span class="t"><span class="str"> cog.out("This is the first line\\n")</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t27" href="#t27">27</a></span><span class="t"> <span class="key">def</span> <span class="nam">testNoCog</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t28" href="#t28">28</a></span><span class="t"> <span class="nam">strings</span> <span class="op">=</span> <span class="op">[</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t29" href="#t29">29</a></span><span class="t"> <span class="str">''</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t30" href="#t30">30</a></span><span class="t"> <span class="str">' '</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t31" href="#t31">31</a></span><span class="t"> <span class="str">' \t \t \tx'</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t32" href="#t32">32</a></span><span class="t"> <span class="str">'hello'</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t33" href="#t33">33</a></span><span class="t"> <span class="str">'the cat\nin the\nhat.'</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t34" href="#t34">34</a></span><span class="t"> <span class="str">'Horton\n\tHears A\n\t\tWho'</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t35" href="#t35">35</a></span><span class="t"> <span class="op">]</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t36" href="#t36">36</a></span><span class="t"> <span class="key">for</span> <span class="nam">s</span> <span class="key">in</span> <span class="nam">strings</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t37" href="#t37">37</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">Cog</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">processString</span><span class="op">(</span><span class="nam">s</span><span class="op">)</span><span class="op">,</span> <span class="nam">s</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t38" href="#t38">38</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t39" href="#t39">39</a></span><span class="t"> <span class="key">def</span> <span class="nam">testSimple</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t40" href="#t40">40</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t41" href="#t41">41</a></span><span class="t"><span class="str"> Some text.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t42" href="#t42">42</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t43" href="#t43">43</a></span><span class="t"><span class="str"> import cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t44" href="#t44">44</a></span><span class="t"><span class="str"> cog.outl("This is line one\\n")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t45" href="#t45">45</a></span><span class="t"><span class="str"> cog.outl("This is line two")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t46" href="#t46">46</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t47" href="#t47">47</a></span><span class="t"><span class="str"> gobbledegook.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t48" href="#t48">48</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t49" href="#t49">49</a></span><span class="t"><span class="str"> epilogue.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t50" href="#t50">50</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t51" href="#t51">51</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t52" href="#t52">52</a></span><span class="t"> <span class="nam">outfile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t53" href="#t53">53</a></span><span class="t"><span class="str"> Some text.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t54" href="#t54">54</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t55" href="#t55">55</a></span><span class="t"><span class="str"> import cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t56" href="#t56">56</a></span><span class="t"><span class="str"> cog.outl("This is line one\\n")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t57" href="#t57">57</a></span><span class="t"><span class="str"> cog.outl("This is line two")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t58" href="#t58">58</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t59" href="#t59">59</a></span><span class="t"><span class="str"> This is line one</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t60" href="#t60">60</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t61" href="#t61">61</a></span><span class="t"><span class="str"> This is line two</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t62" href="#t62">62</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t63" href="#t63">63</a></span><span class="t"><span class="str"> epilogue.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t64" href="#t64">64</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t65" href="#t65">65</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t66" href="#t66">66</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">Cog</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">processString</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span><span class="op">,</span> <span class="nam">outfile</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t67" href="#t67">67</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t68" href="#t68">68</a></span><span class="t"> <span class="key">def</span> <span class="nam">testEmptyCog</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t69" href="#t69">69</a></span><span class="t"> <span class="com"># The cog clause can be totally empty. Not sure why you'd want it,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t70" href="#t70">70</a></span><span class="t"> <span class="com"># but it works.</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t71" href="#t71">71</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t72" href="#t72">72</a></span><span class="t"><span class="str"> hello</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t73" href="#t73">73</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t74" href="#t74">74</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t75" href="#t75">75</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t76" href="#t76">76</a></span><span class="t"><span class="str"> goodbye</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t77" href="#t77">77</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t78" href="#t78">78</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t79" href="#t79">79</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t80" href="#t80">80</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">Cog</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">processString</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span><span class="op">,</span> <span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t81" href="#t81">81</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t82" href="#t82">82</a></span><span class="t"> <span class="key">def</span> <span class="nam">testMultipleCogs</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t83" href="#t83">83</a></span><span class="t"> <span class="com"># One file can have many cog chunks, even abutting each other.</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t84" href="#t84">84</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t85" href="#t85">85</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t86" href="#t86">86</a></span><span class="t"><span class="str"> cog.out("chunk1")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t87" href="#t87">87</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t88" href="#t88">88</a></span><span class="t"><span class="str"> chunk1</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t89" href="#t89">89</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t90" href="#t90">90</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t91" href="#t91">91</a></span><span class="t"><span class="str"> cog.out("chunk2")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t92" href="#t92">92</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t93" href="#t93">93</a></span><span class="t"><span class="str"> chunk2</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t94" href="#t94">94</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t95" href="#t95">95</a></span><span class="t"><span class="str"> between chunks</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t96" href="#t96">96</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t97" href="#t97">97</a></span><span class="t"><span class="str"> cog.out("chunk3")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t98" href="#t98">98</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t99" href="#t99">99</a></span><span class="t"><span class="str"> chunk3</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t100" href="#t100">100</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t101" href="#t101">101</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t102" href="#t102">102</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t103" href="#t103">103</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t104" href="#t104">104</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">Cog</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">processString</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span><span class="op">,</span> <span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t105" href="#t105">105</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t106" href="#t106">106</a></span><span class="t"> <span class="key">def</span> <span class="nam">testTrimBlankLines</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t107" href="#t107">107</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t108" href="#t108">108</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t109" href="#t109">109</a></span><span class="t"><span class="str"> cog.out("This is line one\\n", trimblanklines=True)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t110" href="#t110">110</a></span><span class="t"><span class="str"> cog.out('''</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t111" href="#t111">111</a></span><span class="t"><span class="str"> This is line two</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t112" href="#t112">112</a></span><span class="t"><span class="str"> ''', dedent=True, trimblanklines=True)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t113" href="#t113">113</a></span><span class="t"><span class="str"> cog.outl("This is line three", trimblanklines=True)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t114" href="#t114">114</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t115" href="#t115">115</a></span><span class="t"><span class="str"> This is line one</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t116" href="#t116">116</a></span><span class="t"><span class="str"> This is line two</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t117" href="#t117">117</a></span><span class="t"><span class="str"> This is line three</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t118" href="#t118">118</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t119" href="#t119">119</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t120" href="#t120">120</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t121" href="#t121">121</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t122" href="#t122">122</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">Cog</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">processString</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span><span class="op">,</span> <span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t123" href="#t123">123</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t124" href="#t124">124</a></span><span class="t"> <span class="key">def</span> <span class="nam">testTrimEmptyBlankLines</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t125" href="#t125">125</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t126" href="#t126">126</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t127" href="#t127">127</a></span><span class="t"><span class="str"> cog.out("This is line one\\n", trimblanklines=True)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t128" href="#t128">128</a></span><span class="t"><span class="str"> cog.out('''</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t129" href="#t129">129</a></span><span class="t"><span class="str"> This is line two</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t130" href="#t130">130</a></span><span class="t"><span class="str"> ''', dedent=True, trimblanklines=True)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t131" href="#t131">131</a></span><span class="t"><span class="str"> cog.out('', dedent=True, trimblanklines=True)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t132" href="#t132">132</a></span><span class="t"><span class="str"> cog.outl("This is line three", trimblanklines=True)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t133" href="#t133">133</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t134" href="#t134">134</a></span><span class="t"><span class="str"> This is line one</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t135" href="#t135">135</a></span><span class="t"><span class="str"> This is line two</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t136" href="#t136">136</a></span><span class="t"><span class="str"> This is line three</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t137" href="#t137">137</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t138" href="#t138">138</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t139" href="#t139">139</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t140" href="#t140">140</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t141" href="#t141">141</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">Cog</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">processString</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span><span class="op">,</span> <span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t142" href="#t142">142</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t143" href="#t143">143</a></span><span class="t"> <span class="key">def</span> <span class="nam">testTrimBlankLinesWithLastPartial</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t144" href="#t144">144</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t145" href="#t145">145</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t146" href="#t146">146</a></span><span class="t"><span class="str"> cog.out("This is line one\\n", trimblanklines=True)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t147" href="#t147">147</a></span><span class="t"><span class="str"> cog.out("\\nLine two\\nLine three", trimblanklines=True)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t148" href="#t148">148</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t149" href="#t149">149</a></span><span class="t"><span class="str"> This is line one</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t150" href="#t150">150</a></span><span class="t"><span class="str"> Line two</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t151" href="#t151">151</a></span><span class="t"><span class="str"> Line three</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t152" href="#t152">152</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t153" href="#t153">153</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t154" href="#t154">154</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t155" href="#t155">155</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t156" href="#t156">156</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">Cog</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">processString</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span><span class="op">,</span> <span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t157" href="#t157">157</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t158" href="#t158">158</a></span><span class="t"> <span class="key">def</span> <span class="nam">testCogOutDedent</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t159" href="#t159">159</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t160" href="#t160">160</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t161" href="#t161">161</a></span><span class="t"><span class="str"> cog.out("This is the first line\\n")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t162" href="#t162">162</a></span><span class="t"><span class="str"> cog.out('''</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t163" href="#t163">163</a></span><span class="t"><span class="str"> This is dedent=True 1</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t164" href="#t164">164</a></span><span class="t"><span class="str"> This is dedent=True 2</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t165" href="#t165">165</a></span><span class="t"><span class="str"> ''', dedent=True, trimblanklines=True)</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t166" href="#t166">166</a></span><span class="t"><span class="str"> cog.out('''</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t167" href="#t167">167</a></span><span class="t"><span class="str"> This is dedent=True 1</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t168" href="#t168">168</a></span><span class="t"><span class="str"> This is dedent=True 2</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t169" href="#t169">169</a></span><span class="t"><span class="str"> ''', dedent=True, trimblanklines=True)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t167" href="#t167">167</a></span><span class="t"><span class="str"> This is dedent=False 1</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t168" href="#t168">168</a></span><span class="t"><span class="str"> This is dedent=False 2</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t169" href="#t169">169</a></span><span class="t"><span class="str"> ''', dedent=False, trimblanklines=True)</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t170" href="#t170">170</a></span><span class="t"><span class="str"> cog.out('''</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t171" href="#t171">171</a></span><span class="t"><span class="str"> This is dedent=False 1</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t172" href="#t172">172</a></span><span class="t"><span class="str"> This is dedent=False 2</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t173" href="#t173">173</a></span><span class="t"><span class="str"> ''', dedent=False, trimblanklines=True)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t174" href="#t174">174</a></span><span class="t"><span class="str"> cog.out('''</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t175" href="#t175">175</a></span><span class="t"><span class="str"> This is dedent=default 1</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t176" href="#t176">176</a></span><span class="t"><span class="str"> This is dedent=default 2</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t177" href="#t177">177</a></span><span class="t"><span class="str"> ''', trimblanklines=True)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t178" href="#t178">178</a></span><span class="t"><span class="str"> cog.out("This is the last line\\n")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t179" href="#t179">179</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t180" href="#t180">180</a></span><span class="t"><span class="str"> This is the first line</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t181" href="#t181">181</a></span><span class="t"><span class="str"> This is dedent=True 1</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t182" href="#t182">182</a></span><span class="t"><span class="str"> This is dedent=True 2</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t183" href="#t183">183</a></span><span class="t"><span class="str"> This is dedent=False 1</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t184" href="#t184">184</a></span><span class="t"><span class="str"> This is dedent=False 2</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t185" href="#t185">185</a></span><span class="t"><span class="str"> This is dedent=default 1</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t186" href="#t186">186</a></span><span class="t"><span class="str"> This is dedent=default 2</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t187" href="#t187">187</a></span><span class="t"><span class="str"> This is the last line</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t188" href="#t188">188</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t189" href="#t189">189</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t190" href="#t190">190</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t191" href="#t191">191</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t192" href="#t192">192</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">Cog</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">processString</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span><span class="op">,</span> <span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t193" href="#t193">193</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t194" href="#t194">194</a></span><span class="t"> <span class="key">def</span> <span class="nam">test22EndOfLine</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t195" href="#t195">195</a></span><span class="t"> <span class="com"># In Python 2.2, this cog file was not parsing because the</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t196" href="#t196">196</a></span><span class="t"> <span class="com"># last line is indented but didn't end with a newline.</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t197" href="#t197">197</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t198" href="#t198">198</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t199" href="#t199">199</a></span><span class="t"><span class="str"> import cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t200" href="#t200">200</a></span><span class="t"><span class="str"> for i in range(3):</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t201" href="#t201">201</a></span><span class="t"><span class="str"> cog.out("%d\\n" % i)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t202" href="#t202">202</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t203" href="#t203">203</a></span><span class="t"><span class="str"> 0</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t204" href="#t204">204</a></span><span class="t"><span class="str"> 1</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t205" href="#t205">205</a></span><span class="t"><span class="str"> 2</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t206" href="#t206">206</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t207" href="#t207">207</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t208" href="#t208">208</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t209" href="#t209">209</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t210" href="#t210">210</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">Cog</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">processString</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span><span class="op">,</span> <span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t211" href="#t211">211</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t212" href="#t212">212</a></span><span class="t"> <span class="key">def</span> <span class="nam">testIndentedCode</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t213" href="#t213">213</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t214" href="#t214">214</a></span><span class="t"><span class="str"> first line</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t215" href="#t215">215</a></span><span class="t"><span class="str"> [[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t216" href="#t216">216</a></span><span class="t"><span class="str"> import cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t217" href="#t217">217</a></span><span class="t"><span class="str"> for i in range(3):</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t218" href="#t218">218</a></span><span class="t"><span class="str"> cog.out("xx%d\\n" % i)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t219" href="#t219">219</a></span><span class="t"><span class="str"> ]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t220" href="#t220">220</a></span><span class="t"><span class="str"> xx0</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t221" href="#t221">221</a></span><span class="t"><span class="str"> xx1</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t222" href="#t222">222</a></span><span class="t"><span class="str"> xx2</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t223" href="#t223">223</a></span><span class="t"><span class="str"> [[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t224" href="#t224">224</a></span><span class="t"><span class="str"> last line</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t225" href="#t225">225</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t226" href="#t226">226</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t227" href="#t227">227</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t228" href="#t228">228</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">Cog</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">processString</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span><span class="op">,</span> <span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t229" href="#t229">229</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t230" href="#t230">230</a></span><span class="t"> <span class="key">def</span> <span class="nam">testPrefixedCode</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t231" href="#t231">231</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t232" href="#t232">232</a></span><span class="t"><span class="str"> --[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t233" href="#t233">233</a></span><span class="t"><span class="str"> --import cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t234" href="#t234">234</a></span><span class="t"><span class="str"> --for i in range(3):</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t235" href="#t235">235</a></span><span class="t"><span class="str"> -- cog.out("xx%d\\n" % i)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t236" href="#t236">236</a></span><span class="t"><span class="str"> --]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t237" href="#t237">237</a></span><span class="t"><span class="str"> xx0</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t238" href="#t238">238</a></span><span class="t"><span class="str"> xx1</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t239" href="#t239">239</a></span><span class="t"><span class="str"> xx2</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t240" href="#t240">240</a></span><span class="t"><span class="str"> --[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t241" href="#t241">241</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t242" href="#t242">242</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t243" href="#t243">243</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t244" href="#t244">244</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">Cog</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">processString</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span><span class="op">,</span> <span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t245" href="#t245">245</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t246" href="#t246">246</a></span><span class="t"> <span class="key">def</span> <span class="nam">testPrefixedIndentedCode</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t247" href="#t247">247</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t248" href="#t248">248</a></span><span class="t"><span class="str"> prologue</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t249" href="#t249">249</a></span><span class="t"><span class="str"> --[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t250" href="#t250">250</a></span><span class="t"><span class="str"> -- import cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t251" href="#t251">251</a></span><span class="t"><span class="str"> -- for i in range(3):</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t252" href="#t252">252</a></span><span class="t"><span class="str"> -- cog.out("xy%d\\n" % i)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t253" href="#t253">253</a></span><span class="t"><span class="str"> --]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t254" href="#t254">254</a></span><span class="t"><span class="str"> xy0</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t255" href="#t255">255</a></span><span class="t"><span class="str"> xy1</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t256" href="#t256">256</a></span><span class="t"><span class="str"> xy2</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t257" href="#t257">257</a></span><span class="t"><span class="str"> --[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t258" href="#t258">258</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t259" href="#t259">259</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t260" href="#t260">260</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t261" href="#t261">261</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">Cog</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">processString</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span><span class="op">,</span> <span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t262" href="#t262">262</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t263" href="#t263">263</a></span><span class="t"> <span class="key">def</span> <span class="nam">testBogusPrefixMatch</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t264" href="#t264">264</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t265" href="#t265">265</a></span><span class="t"><span class="str"> prologue</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t266" href="#t266">266</a></span><span class="t"><span class="str"> #[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t267" href="#t267">267</a></span><span class="t"><span class="str"> import cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t268" href="#t268">268</a></span><span class="t"><span class="str"> # This comment should not be clobbered by removing the pound sign.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t269" href="#t269">269</a></span><span class="t"><span class="str"> for i in range(3):</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t270" href="#t270">270</a></span><span class="t"><span class="str"> cog.out("xy%d\\n" % i)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t271" href="#t271">271</a></span><span class="t"><span class="str"> #]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t272" href="#t272">272</a></span><span class="t"><span class="str"> xy0</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t273" href="#t273">273</a></span><span class="t"><span class="str"> xy1</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t274" href="#t274">274</a></span><span class="t"><span class="str"> xy2</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t275" href="#t275">275</a></span><span class="t"><span class="str"> #[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t276" href="#t276">276</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t277" href="#t277">277</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t278" href="#t278">278</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t279" href="#t279">279</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">Cog</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">processString</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span><span class="op">,</span> <span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t280" href="#t280">280</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t281" href="#t281">281</a></span><span class="t"> <span class="key">def</span> <span class="nam">testNoFinalNewline</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t282" href="#t282">282</a></span><span class="t"> <span class="com"># If the cog'ed output has no final newline,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t283" href="#t283">283</a></span><span class="t"> <span class="com"># it shouldn't eat up the cog terminator.</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t284" href="#t284">284</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t285" href="#t285">285</a></span><span class="t"><span class="str"> prologue</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t286" href="#t286">286</a></span><span class="t"><span class="str"> [[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t287" href="#t287">287</a></span><span class="t"><span class="str"> import cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t288" href="#t288">288</a></span><span class="t"><span class="str"> for i in range(3):</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t289" href="#t289">289</a></span><span class="t"><span class="str"> cog.out("%d" % i)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t290" href="#t290">290</a></span><span class="t"><span class="str"> ]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t291" href="#t291">291</a></span><span class="t"><span class="str"> 012</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t292" href="#t292">292</a></span><span class="t"><span class="str"> [[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t293" href="#t293">293</a></span><span class="t"><span class="str"> epilogue</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t294" href="#t294">294</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t295" href="#t295">295</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t296" href="#t296">296</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t297" href="#t297">297</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">Cog</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">processString</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span><span class="op">,</span> <span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t298" href="#t298">298</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t299" href="#t299">299</a></span><span class="t"> <span class="key">def</span> <span class="nam">testNoOutputAtAll</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t300" href="#t300">300</a></span><span class="t"> <span class="com"># If there is absolutely no cog output, that's ok.</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t301" href="#t301">301</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t302" href="#t302">302</a></span><span class="t"><span class="str"> prologue</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t303" href="#t303">303</a></span><span class="t"><span class="str"> [[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t304" href="#t304">304</a></span><span class="t"><span class="str"> i = 1</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t305" href="#t305">305</a></span><span class="t"><span class="str"> ]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t306" href="#t306">306</a></span><span class="t"><span class="str"> [[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t307" href="#t307">307</a></span><span class="t"><span class="str"> epilogue</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t308" href="#t308">308</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t309" href="#t309">309</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t310" href="#t310">310</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t311" href="#t311">311</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">Cog</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">processString</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span><span class="op">,</span> <span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t171" href="#t171">171</a></span><span class="t"><span class="str"> This is dedent=default 1</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t172" href="#t172">172</a></span><span class="t"><span class="str"> This is dedent=default 2</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t173" href="#t173">173</a></span><span class="t"><span class="str"> ''', trimblanklines=True)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t174" href="#t174">174</a></span><span class="t"><span class="str"> cog.out("This is the last line\\n")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t175" href="#t175">175</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t176" href="#t176">176</a></span><span class="t"><span class="str"> This is the first line</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t177" href="#t177">177</a></span><span class="t"><span class="str"> This is dedent=True 1</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t178" href="#t178">178</a></span><span class="t"><span class="str"> This is dedent=True 2</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t179" href="#t179">179</a></span><span class="t"><span class="str"> This is dedent=False 1</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t180" href="#t180">180</a></span><span class="t"><span class="str"> This is dedent=False 2</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t181" href="#t181">181</a></span><span class="t"><span class="str"> This is dedent=default 1</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t182" href="#t182">182</a></span><span class="t"><span class="str"> This is dedent=default 2</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t183" href="#t183">183</a></span><span class="t"><span class="str"> This is the last line</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t184" href="#t184">184</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t185" href="#t185">185</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t186" href="#t186">186</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t187" href="#t187">187</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t188" href="#t188">188</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">Cog</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">processString</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span><span class="op">,</span> <span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t189" href="#t189">189</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t190" href="#t190">190</a></span><span class="t"> <span class="key">def</span> <span class="nam">test22EndOfLine</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t191" href="#t191">191</a></span><span class="t"> <span class="com"># In Python 2.2, this cog file was not parsing because the</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t192" href="#t192">192</a></span><span class="t"> <span class="com"># last line is indented but didn't end with a newline.</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t193" href="#t193">193</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t194" href="#t194">194</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t195" href="#t195">195</a></span><span class="t"><span class="str"> import cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t196" href="#t196">196</a></span><span class="t"><span class="str"> for i in range(3):</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t197" href="#t197">197</a></span><span class="t"><span class="str"> cog.out("%d\\n" % i)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t198" href="#t198">198</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t199" href="#t199">199</a></span><span class="t"><span class="str"> 0</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t200" href="#t200">200</a></span><span class="t"><span class="str"> 1</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t201" href="#t201">201</a></span><span class="t"><span class="str"> 2</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t202" href="#t202">202</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t203" href="#t203">203</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t204" href="#t204">204</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t205" href="#t205">205</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t206" href="#t206">206</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">Cog</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">processString</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span><span class="op">,</span> <span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t207" href="#t207">207</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t208" href="#t208">208</a></span><span class="t"> <span class="key">def</span> <span class="nam">testIndentedCode</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t209" href="#t209">209</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t210" href="#t210">210</a></span><span class="t"><span class="str"> first line</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t211" href="#t211">211</a></span><span class="t"><span class="str"> [[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t212" href="#t212">212</a></span><span class="t"><span class="str"> import cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t213" href="#t213">213</a></span><span class="t"><span class="str"> for i in range(3):</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t214" href="#t214">214</a></span><span class="t"><span class="str"> cog.out("xx%d\\n" % i)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t215" href="#t215">215</a></span><span class="t"><span class="str"> ]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t216" href="#t216">216</a></span><span class="t"><span class="str"> xx0</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t217" href="#t217">217</a></span><span class="t"><span class="str"> xx1</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t218" href="#t218">218</a></span><span class="t"><span class="str"> xx2</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t219" href="#t219">219</a></span><span class="t"><span class="str"> [[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t220" href="#t220">220</a></span><span class="t"><span class="str"> last line</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t221" href="#t221">221</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t222" href="#t222">222</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t223" href="#t223">223</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t224" href="#t224">224</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">Cog</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">processString</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span><span class="op">,</span> <span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t225" href="#t225">225</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t226" href="#t226">226</a></span><span class="t"> <span class="key">def</span> <span class="nam">testPrefixedCode</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t227" href="#t227">227</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t228" href="#t228">228</a></span><span class="t"><span class="str"> --[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t229" href="#t229">229</a></span><span class="t"><span class="str"> --import cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t230" href="#t230">230</a></span><span class="t"><span class="str"> --for i in range(3):</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t231" href="#t231">231</a></span><span class="t"><span class="str"> -- cog.out("xx%d\\n" % i)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t232" href="#t232">232</a></span><span class="t"><span class="str"> --]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t233" href="#t233">233</a></span><span class="t"><span class="str"> xx0</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t234" href="#t234">234</a></span><span class="t"><span class="str"> xx1</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t235" href="#t235">235</a></span><span class="t"><span class="str"> xx2</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t236" href="#t236">236</a></span><span class="t"><span class="str"> --[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t237" href="#t237">237</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t238" href="#t238">238</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t239" href="#t239">239</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t240" href="#t240">240</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">Cog</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">processString</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span><span class="op">,</span> <span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t241" href="#t241">241</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t242" href="#t242">242</a></span><span class="t"> <span class="key">def</span> <span class="nam">testPrefixedIndentedCode</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t243" href="#t243">243</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t244" href="#t244">244</a></span><span class="t"><span class="str"> prologue</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t245" href="#t245">245</a></span><span class="t"><span class="str"> --[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t246" href="#t246">246</a></span><span class="t"><span class="str"> -- import cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t247" href="#t247">247</a></span><span class="t"><span class="str"> -- for i in range(3):</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t248" href="#t248">248</a></span><span class="t"><span class="str"> -- cog.out("xy%d\\n" % i)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t249" href="#t249">249</a></span><span class="t"><span class="str"> --]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t250" href="#t250">250</a></span><span class="t"><span class="str"> xy0</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t251" href="#t251">251</a></span><span class="t"><span class="str"> xy1</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t252" href="#t252">252</a></span><span class="t"><span class="str"> xy2</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t253" href="#t253">253</a></span><span class="t"><span class="str"> --[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t254" href="#t254">254</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t255" href="#t255">255</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t256" href="#t256">256</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t257" href="#t257">257</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">Cog</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">processString</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span><span class="op">,</span> <span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t258" href="#t258">258</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t259" href="#t259">259</a></span><span class="t"> <span class="key">def</span> <span class="nam">testBogusPrefixMatch</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t260" href="#t260">260</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t261" href="#t261">261</a></span><span class="t"><span class="str"> prologue</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t262" href="#t262">262</a></span><span class="t"><span class="str"> #[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t263" href="#t263">263</a></span><span class="t"><span class="str"> import cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t264" href="#t264">264</a></span><span class="t"><span class="str"> # This comment should not be clobbered by removing the pound sign.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t265" href="#t265">265</a></span><span class="t"><span class="str"> for i in range(3):</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t266" href="#t266">266</a></span><span class="t"><span class="str"> cog.out("xy%d\\n" % i)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t267" href="#t267">267</a></span><span class="t"><span class="str"> #]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t268" href="#t268">268</a></span><span class="t"><span class="str"> xy0</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t269" href="#t269">269</a></span><span class="t"><span class="str"> xy1</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t270" href="#t270">270</a></span><span class="t"><span class="str"> xy2</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t271" href="#t271">271</a></span><span class="t"><span class="str"> #[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t272" href="#t272">272</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t273" href="#t273">273</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t274" href="#t274">274</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t275" href="#t275">275</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">Cog</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">processString</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span><span class="op">,</span> <span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t276" href="#t276">276</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t277" href="#t277">277</a></span><span class="t"> <span class="key">def</span> <span class="nam">testNoFinalNewline</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t278" href="#t278">278</a></span><span class="t"> <span class="com"># If the cog'ed output has no final newline,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t279" href="#t279">279</a></span><span class="t"> <span class="com"># it shouldn't eat up the cog terminator.</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t280" href="#t280">280</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t281" href="#t281">281</a></span><span class="t"><span class="str"> prologue</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t282" href="#t282">282</a></span><span class="t"><span class="str"> [[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t283" href="#t283">283</a></span><span class="t"><span class="str"> import cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t284" href="#t284">284</a></span><span class="t"><span class="str"> for i in range(3):</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t285" href="#t285">285</a></span><span class="t"><span class="str"> cog.out("%d" % i)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t286" href="#t286">286</a></span><span class="t"><span class="str"> ]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t287" href="#t287">287</a></span><span class="t"><span class="str"> 012</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t288" href="#t288">288</a></span><span class="t"><span class="str"> [[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t289" href="#t289">289</a></span><span class="t"><span class="str"> epilogue</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t290" href="#t290">290</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t291" href="#t291">291</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t292" href="#t292">292</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t293" href="#t293">293</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">Cog</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">processString</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span><span class="op">,</span> <span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t294" href="#t294">294</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t295" href="#t295">295</a></span><span class="t"> <span class="key">def</span> <span class="nam">testNoOutputAtAll</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t296" href="#t296">296</a></span><span class="t"> <span class="com"># If there is absolutely no cog output, that's ok.</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t297" href="#t297">297</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t298" href="#t298">298</a></span><span class="t"><span class="str"> prologue</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t299" href="#t299">299</a></span><span class="t"><span class="str"> [[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t300" href="#t300">300</a></span><span class="t"><span class="str"> i = 1</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t301" href="#t301">301</a></span><span class="t"><span class="str"> ]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t302" href="#t302">302</a></span><span class="t"><span class="str"> [[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t303" href="#t303">303</a></span><span class="t"><span class="str"> epilogue</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t304" href="#t304">304</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t305" href="#t305">305</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t306" href="#t306">306</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t307" href="#t307">307</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">Cog</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">processString</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span><span class="op">,</span> <span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t308" href="#t308">308</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t309" href="#t309">309</a></span><span class="t"> <span class="key">def</span> <span class="nam">testPurelyBlankLine</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t310" href="#t310">310</a></span><span class="t"> <span class="com"># If there is a blank line in the cog code with no whitespace</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t311" href="#t311">311</a></span><span class="t"> <span class="com"># prefix, that should be OK.</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t312" href="#t312">312</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t313" href="#t313">313</a></span><span class="t"> <span class="key">def</span> <span class="nam">testPurelyBlankLine</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t314" href="#t314">314</a></span><span class="t"> <span class="com"># If there is a blank line in the cog code with no whitespace</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t315" href="#t315">315</a></span><span class="t"> <span class="com"># prefix, that should be OK.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t316" href="#t316">316</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t317" href="#t317">317</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t318" href="#t318">318</a></span><span class="t"><span class="str"> prologue</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t319" href="#t319">319</a></span><span class="t"><span class="str"> [[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t320" href="#t320">320</a></span><span class="t"><span class="str"> import sys</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t321" href="#t321">321</a></span><span class="t"><span class="str"> cog.out("Hello")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t322" href="#t322">322</a></span><span class="t"><span class="str"> $</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t323" href="#t323">323</a></span><span class="t"><span class="str"> cog.out("There")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t324" href="#t324">324</a></span><span class="t"><span class="str"> ]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t325" href="#t325">325</a></span><span class="t"><span class="str"> HelloThere</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t326" href="#t326">326</a></span><span class="t"><span class="str"> [[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t327" href="#t327">327</a></span><span class="t"><span class="str"> epilogue</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t328" href="#t328">328</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t329" href="#t329">329</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t330" href="#t330">330</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">infile</span><span class="op">.</span><span class="nam">replace</span><span class="op">(</span><span class="str">'$'</span><span class="op">,</span> <span class="str">''</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t331" href="#t331">331</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">Cog</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">processString</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span><span class="op">,</span> <span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t313" href="#t313">313</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t314" href="#t314">314</a></span><span class="t"><span class="str"> prologue</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t315" href="#t315">315</a></span><span class="t"><span class="str"> [[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t316" href="#t316">316</a></span><span class="t"><span class="str"> import sys</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t317" href="#t317">317</a></span><span class="t"><span class="str"> cog.out("Hello")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t318" href="#t318">318</a></span><span class="t"><span class="str"> $</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t319" href="#t319">319</a></span><span class="t"><span class="str"> cog.out("There")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t320" href="#t320">320</a></span><span class="t"><span class="str"> ]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t321" href="#t321">321</a></span><span class="t"><span class="str"> HelloThere</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t322" href="#t322">322</a></span><span class="t"><span class="str"> [[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t323" href="#t323">323</a></span><span class="t"><span class="str"> epilogue</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t324" href="#t324">324</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t325" href="#t325">325</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t326" href="#t326">326</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">infile</span><span class="op">.</span><span class="nam">replace</span><span class="op">(</span><span class="str">'$'</span><span class="op">,</span> <span class="str">''</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t327" href="#t327">327</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">Cog</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">processString</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span><span class="op">,</span> <span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t328" href="#t328">328</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t329" href="#t329">329</a></span><span class="t"> <span class="key">def</span> <span class="nam">testEmptyOutl</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t330" href="#t330">330</a></span><span class="t"> <span class="com"># Alexander Belchenko suggested the string argument to outl should</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t331" href="#t331">331</a></span><span class="t"> <span class="com"># be optional. Does it work?</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t332" href="#t332">332</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t333" href="#t333">333</a></span><span class="t"> <span class="key">def</span> <span class="nam">testEmptyOutl</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t334" href="#t334">334</a></span><span class="t"> <span class="com"># Alexander Belchenko suggested the string argument to outl should</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t335" href="#t335">335</a></span><span class="t"> <span class="com"># be optional. Does it work?</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t336" href="#t336">336</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t337" href="#t337">337</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t338" href="#t338">338</a></span><span class="t"><span class="str"> prologue</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t339" href="#t339">339</a></span><span class="t"><span class="str"> [[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t340" href="#t340">340</a></span><span class="t"><span class="str"> cog.outl("x")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t341" href="#t341">341</a></span><span class="t"><span class="str"> cog.outl()</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t342" href="#t342">342</a></span><span class="t"><span class="str"> cog.outl("y")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t343" href="#t343">343</a></span><span class="t"><span class="str"> cog.out() # Also optional, a complete no-op.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t344" href="#t344">344</a></span><span class="t"><span class="str"> cog.outl(trimblanklines=True)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t345" href="#t345">345</a></span><span class="t"><span class="str"> cog.outl("z")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t346" href="#t346">346</a></span><span class="t"><span class="str"> ]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t347" href="#t347">347</a></span><span class="t"><span class="str"> x</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t348" href="#t348">348</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t349" href="#t349">349</a></span><span class="t"><span class="str"> y</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t350" href="#t350">350</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t351" href="#t351">351</a></span><span class="t"><span class="str"> z</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t352" href="#t352">352</a></span><span class="t"><span class="str"> [[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t353" href="#t353">353</a></span><span class="t"><span class="str"> epilogue</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t354" href="#t354">354</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t355" href="#t355">355</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t356" href="#t356">356</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t357" href="#t357">357</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">Cog</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">processString</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span><span class="op">,</span> <span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t358" href="#t358">358</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t359" href="#t359">359</a></span><span class="t"> <span class="key">def</span> <span class="nam">testFirstLineNum</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t360" href="#t360">360</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t361" href="#t361">361</a></span><span class="t"><span class="str"> fooey</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t362" href="#t362">362</a></span><span class="t"><span class="str"> [[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t363" href="#t363">363</a></span><span class="t"><span class="str"> cog.outl("started at line number %d" % cog.firstLineNum)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t364" href="#t364">364</a></span><span class="t"><span class="str"> ]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t365" href="#t365">365</a></span><span class="t"><span class="str"> started at line number 2</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t366" href="#t366">366</a></span><span class="t"><span class="str"> [[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t367" href="#t367">367</a></span><span class="t"><span class="str"> blah blah</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t368" href="#t368">368</a></span><span class="t"><span class="str"> [[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t369" href="#t369">369</a></span><span class="t"><span class="str"> cog.outl("and again at line %d" % cog.firstLineNum)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t370" href="#t370">370</a></span><span class="t"><span class="str"> ]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t371" href="#t371">371</a></span><span class="t"><span class="str"> and again at line 8</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t372" href="#t372">372</a></span><span class="t"><span class="str"> [[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t373" href="#t373">373</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t374" href="#t374">374</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t375" href="#t375">375</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t376" href="#t376">376</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">Cog</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">processString</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span><span class="op">,</span> <span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t377" href="#t377">377</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t378" href="#t378">378</a></span><span class="t"> <span class="key">def</span> <span class="nam">testCompactOneLineCode</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t379" href="#t379">379</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t380" href="#t380">380</a></span><span class="t"><span class="str"> first line</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t381" href="#t381">381</a></span><span class="t"><span class="str"> hey: [[[cog cog.outl("hello %d" % (3*3*3*3)) ]]] looky!</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t382" href="#t382">382</a></span><span class="t"><span class="str"> get rid of this!</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t383" href="#t383">383</a></span><span class="t"><span class="str"> [[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t384" href="#t384">384</a></span><span class="t"><span class="str"> last line</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t385" href="#t385">385</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t386" href="#t386">386</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t387" href="#t387">387</a></span><span class="t"> <span class="nam">outfile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t388" href="#t388">388</a></span><span class="t"><span class="str"> first line</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t389" href="#t389">389</a></span><span class="t"><span class="str"> hey: [[[cog cog.outl("hello %d" % (3*3*3*3)) ]]] looky!</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t390" href="#t390">390</a></span><span class="t"><span class="str"> hello 81</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t391" href="#t391">391</a></span><span class="t"><span class="str"> [[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t392" href="#t392">392</a></span><span class="t"><span class="str"> last line</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t393" href="#t393">393</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t394" href="#t394">394</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t395" href="#t395">395</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t396" href="#t396">396</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">Cog</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">processString</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span><span class="op">,</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">outfile</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t397" href="#t397">397</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t398" href="#t398">398</a></span><span class="t"> <span class="key">def</span> <span class="nam">testInsideOutCompact</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t399" href="#t399">399</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t400" href="#t400">400</a></span><span class="t"><span class="str"> first line</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t401" href="#t401">401</a></span><span class="t"><span class="str"> hey?: ]]] what is this? [[[cog strange!</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t402" href="#t402">402</a></span><span class="t"><span class="str"> get rid of this!</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t403" href="#t403">403</a></span><span class="t"><span class="str"> [[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t404" href="#t404">404</a></span><span class="t"><span class="str"> last line</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t405" href="#t405">405</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t406" href="#t406">406</a></span><span class="t"> <span class="key">with</span> <span class="nam">self</span><span class="op">.</span><span class="nam">assertRaisesRegex</span><span class="op">(</span><span class="nam">CogError</span><span class="op">,</span> <span class="str">r"^infile.txt\(2\): Cog code markers inverted$"</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t407" href="#t407">407</a></span><span class="t"> <span class="nam">Cog</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">processString</span><span class="op">(</span><span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span><span class="op">,</span> <span class="str">"infile.txt"</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t408" href="#t408">408</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t409" href="#t409">409</a></span><span class="t"> <span class="key">def</span> <span class="nam">testSharingGlobals</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t410" href="#t410">410</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t411" href="#t411">411</a></span><span class="t"><span class="str"> first line</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t412" href="#t412">412</a></span><span class="t"><span class="str"> hey: [[[cog s="hey there" ]]] looky!</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t413" href="#t413">413</a></span><span class="t"><span class="str"> [[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t414" href="#t414">414</a></span><span class="t"><span class="str"> more literal junk.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t415" href="#t415">415</a></span><span class="t"><span class="str"> [[[cog cog.outl(s) ]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t416" href="#t416">416</a></span><span class="t"><span class="str"> [[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t417" href="#t417">417</a></span><span class="t"><span class="str"> last line</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t418" href="#t418">418</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t419" href="#t419">419</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t420" href="#t420">420</a></span><span class="t"> <span class="nam">outfile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t421" href="#t421">421</a></span><span class="t"><span class="str"> first line</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t422" href="#t422">422</a></span><span class="t"><span class="str"> hey: [[[cog s="hey there" ]]] looky!</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t333" href="#t333">333</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t334" href="#t334">334</a></span><span class="t"><span class="str"> prologue</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t335" href="#t335">335</a></span><span class="t"><span class="str"> [[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t336" href="#t336">336</a></span><span class="t"><span class="str"> cog.outl("x")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t337" href="#t337">337</a></span><span class="t"><span class="str"> cog.outl()</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t338" href="#t338">338</a></span><span class="t"><span class="str"> cog.outl("y")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t339" href="#t339">339</a></span><span class="t"><span class="str"> cog.out() # Also optional, a complete no-op.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t340" href="#t340">340</a></span><span class="t"><span class="str"> cog.outl(trimblanklines=True)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t341" href="#t341">341</a></span><span class="t"><span class="str"> cog.outl("z")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t342" href="#t342">342</a></span><span class="t"><span class="str"> ]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t343" href="#t343">343</a></span><span class="t"><span class="str"> x</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t344" href="#t344">344</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t345" href="#t345">345</a></span><span class="t"><span class="str"> y</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t346" href="#t346">346</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t347" href="#t347">347</a></span><span class="t"><span class="str"> z</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t348" href="#t348">348</a></span><span class="t"><span class="str"> [[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t349" href="#t349">349</a></span><span class="t"><span class="str"> epilogue</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t350" href="#t350">350</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t351" href="#t351">351</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t352" href="#t352">352</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t353" href="#t353">353</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">Cog</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">processString</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span><span class="op">,</span> <span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t354" href="#t354">354</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t355" href="#t355">355</a></span><span class="t"> <span class="key">def</span> <span class="nam">testFirstLineNum</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t356" href="#t356">356</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t357" href="#t357">357</a></span><span class="t"><span class="str"> fooey</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t358" href="#t358">358</a></span><span class="t"><span class="str"> [[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t359" href="#t359">359</a></span><span class="t"><span class="str"> cog.outl("started at line number %d" % cog.firstLineNum)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t360" href="#t360">360</a></span><span class="t"><span class="str"> ]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t361" href="#t361">361</a></span><span class="t"><span class="str"> started at line number 2</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t362" href="#t362">362</a></span><span class="t"><span class="str"> [[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t363" href="#t363">363</a></span><span class="t"><span class="str"> blah blah</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t364" href="#t364">364</a></span><span class="t"><span class="str"> [[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t365" href="#t365">365</a></span><span class="t"><span class="str"> cog.outl("and again at line %d" % cog.firstLineNum)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t366" href="#t366">366</a></span><span class="t"><span class="str"> ]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t367" href="#t367">367</a></span><span class="t"><span class="str"> and again at line 8</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t368" href="#t368">368</a></span><span class="t"><span class="str"> [[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t369" href="#t369">369</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t370" href="#t370">370</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t371" href="#t371">371</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t372" href="#t372">372</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">Cog</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">processString</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span><span class="op">,</span> <span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t373" href="#t373">373</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t374" href="#t374">374</a></span><span class="t"> <span class="key">def</span> <span class="nam">testCompactOneLineCode</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t375" href="#t375">375</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t376" href="#t376">376</a></span><span class="t"><span class="str"> first line</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t377" href="#t377">377</a></span><span class="t"><span class="str"> hey: [[[cog cog.outl("hello %d" % (3*3*3*3)) ]]] looky!</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t378" href="#t378">378</a></span><span class="t"><span class="str"> get rid of this!</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t379" href="#t379">379</a></span><span class="t"><span class="str"> [[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t380" href="#t380">380</a></span><span class="t"><span class="str"> last line</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t381" href="#t381">381</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t382" href="#t382">382</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t383" href="#t383">383</a></span><span class="t"> <span class="nam">outfile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t384" href="#t384">384</a></span><span class="t"><span class="str"> first line</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t385" href="#t385">385</a></span><span class="t"><span class="str"> hey: [[[cog cog.outl("hello %d" % (3*3*3*3)) ]]] looky!</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t386" href="#t386">386</a></span><span class="t"><span class="str"> hello 81</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t387" href="#t387">387</a></span><span class="t"><span class="str"> [[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t388" href="#t388">388</a></span><span class="t"><span class="str"> last line</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t389" href="#t389">389</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t390" href="#t390">390</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t391" href="#t391">391</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t392" href="#t392">392</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">Cog</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">processString</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span><span class="op">,</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">outfile</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t393" href="#t393">393</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t394" href="#t394">394</a></span><span class="t"> <span class="key">def</span> <span class="nam">testInsideOutCompact</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t395" href="#t395">395</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t396" href="#t396">396</a></span><span class="t"><span class="str"> first line</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t397" href="#t397">397</a></span><span class="t"><span class="str"> hey?: ]]] what is this? [[[cog strange!</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t398" href="#t398">398</a></span><span class="t"><span class="str"> get rid of this!</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t399" href="#t399">399</a></span><span class="t"><span class="str"> [[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t400" href="#t400">400</a></span><span class="t"><span class="str"> last line</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t401" href="#t401">401</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t402" href="#t402">402</a></span><span class="t"> <span class="key">with</span> <span class="nam">self</span><span class="op">.</span><span class="nam">assertRaisesRegex</span><span class="op">(</span><span class="nam">CogError</span><span class="op">,</span> <span class="str">r"^infile.txt\(2\): Cog code markers inverted$"</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t403" href="#t403">403</a></span><span class="t"> <span class="nam">Cog</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">processString</span><span class="op">(</span><span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span><span class="op">,</span> <span class="str">"infile.txt"</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t404" href="#t404">404</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t405" href="#t405">405</a></span><span class="t"> <span class="key">def</span> <span class="nam">testSharingGlobals</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t406" href="#t406">406</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t407" href="#t407">407</a></span><span class="t"><span class="str"> first line</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t408" href="#t408">408</a></span><span class="t"><span class="str"> hey: [[[cog s="hey there" ]]] looky!</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t409" href="#t409">409</a></span><span class="t"><span class="str"> [[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t410" href="#t410">410</a></span><span class="t"><span class="str"> more literal junk.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t411" href="#t411">411</a></span><span class="t"><span class="str"> [[[cog cog.outl(s) ]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t412" href="#t412">412</a></span><span class="t"><span class="str"> [[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t413" href="#t413">413</a></span><span class="t"><span class="str"> last line</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t414" href="#t414">414</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t415" href="#t415">415</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t416" href="#t416">416</a></span><span class="t"> <span class="nam">outfile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t417" href="#t417">417</a></span><span class="t"><span class="str"> first line</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t418" href="#t418">418</a></span><span class="t"><span class="str"> hey: [[[cog s="hey there" ]]] looky!</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t419" href="#t419">419</a></span><span class="t"><span class="str"> [[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t420" href="#t420">420</a></span><span class="t"><span class="str"> more literal junk.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t421" href="#t421">421</a></span><span class="t"><span class="str"> [[[cog cog.outl(s) ]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t422" href="#t422">422</a></span><span class="t"><span class="str"> hey there</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t423" href="#t423">423</a></span><span class="t"><span class="str"> [[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t424" href="#t424">424</a></span><span class="t"><span class="str"> more literal junk.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t425" href="#t425">425</a></span><span class="t"><span class="str"> [[[cog cog.outl(s) ]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t426" href="#t426">426</a></span><span class="t"><span class="str"> hey there</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t427" href="#t427">427</a></span><span class="t"><span class="str"> [[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t428" href="#t428">428</a></span><span class="t"><span class="str"> last line</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t429" href="#t429">429</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t430" href="#t430">430</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t431" href="#t431">431</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t432" href="#t432">432</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">Cog</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">processString</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span><span class="op">,</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">outfile</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t433" href="#t433">433</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t434" href="#t434">434</a></span><span class="t"> <span class="key">def</span> <span class="nam">testAssertInCogCode</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t435" href="#t435">435</a></span><span class="t"> <span class="com"># Check that we can test assertions in cog code in the test framework.</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t436" href="#t436">436</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t437" href="#t437">437</a></span><span class="t"><span class="str"> [[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t438" href="#t438">438</a></span><span class="t"><span class="str"> assert 1 == 2, "Oops"</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t439" href="#t439">439</a></span><span class="t"><span class="str"> ]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t440" href="#t440">440</a></span><span class="t"><span class="str"> [[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t441" href="#t441">441</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t442" href="#t442">442</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t443" href="#t443">443</a></span><span class="t"> <span class="key">with</span> <span class="nam">self</span><span class="op">.</span><span class="nam">assertRaisesRegex</span><span class="op">(</span><span class="nam">CogUserException</span><span class="op">,</span> <span class="str">"AssertionError: Oops"</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t444" href="#t444">444</a></span><span class="t"> <span class="nam">Cog</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">processString</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t445" href="#t445">445</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t446" href="#t446">446</a></span><span class="t"> <span class="key">def</span> <span class="nam">testCogPrevious</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t447" href="#t447">447</a></span><span class="t"> <span class="com"># Check that we can access the previous run's output.</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t448" href="#t448">448</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t449" href="#t449">449</a></span><span class="t"><span class="str"> [[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t450" href="#t450">450</a></span><span class="t"><span class="str"> assert cog.previous == "Hello there!\\n", "WTF??"</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t451" href="#t451">451</a></span><span class="t"><span class="str"> cog.out(cog.previous)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t452" href="#t452">452</a></span><span class="t"><span class="str"> cog.outl("Ran again!")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t453" href="#t453">453</a></span><span class="t"><span class="str"> ]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t454" href="#t454">454</a></span><span class="t"><span class="str"> Hello there!</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t455" href="#t455">455</a></span><span class="t"><span class="str"> [[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t456" href="#t456">456</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t457" href="#t457">457</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t458" href="#t458">458</a></span><span class="t"> <span class="nam">outfile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t459" href="#t459">459</a></span><span class="t"><span class="str"> [[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t460" href="#t460">460</a></span><span class="t"><span class="str"> assert cog.previous == "Hello there!\\n", "WTF??"</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t461" href="#t461">461</a></span><span class="t"><span class="str"> cog.out(cog.previous)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t462" href="#t462">462</a></span><span class="t"><span class="str"> cog.outl("Ran again!")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t463" href="#t463">463</a></span><span class="t"><span class="str"> ]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t464" href="#t464">464</a></span><span class="t"><span class="str"> Hello there!</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t465" href="#t465">465</a></span><span class="t"><span class="str"> Ran again!</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t466" href="#t466">466</a></span><span class="t"><span class="str"> [[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t467" href="#t467">467</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t424" href="#t424">424</a></span><span class="t"><span class="str"> last line</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t425" href="#t425">425</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t426" href="#t426">426</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t427" href="#t427">427</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t428" href="#t428">428</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">Cog</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">processString</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span><span class="op">,</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">outfile</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t429" href="#t429">429</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t430" href="#t430">430</a></span><span class="t"> <span class="key">def</span> <span class="nam">testAssertInCogCode</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t431" href="#t431">431</a></span><span class="t"> <span class="com"># Check that we can test assertions in cog code in the test framework.</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t432" href="#t432">432</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t433" href="#t433">433</a></span><span class="t"><span class="str"> [[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t434" href="#t434">434</a></span><span class="t"><span class="str"> assert 1 == 2, "Oops"</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t435" href="#t435">435</a></span><span class="t"><span class="str"> ]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t436" href="#t436">436</a></span><span class="t"><span class="str"> [[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t437" href="#t437">437</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t438" href="#t438">438</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t439" href="#t439">439</a></span><span class="t"> <span class="key">with</span> <span class="nam">self</span><span class="op">.</span><span class="nam">assertRaisesRegex</span><span class="op">(</span><span class="nam">CogUserException</span><span class="op">,</span> <span class="str">"AssertionError: Oops"</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t440" href="#t440">440</a></span><span class="t"> <span class="nam">Cog</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">processString</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t441" href="#t441">441</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t442" href="#t442">442</a></span><span class="t"> <span class="key">def</span> <span class="nam">testCogPrevious</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t443" href="#t443">443</a></span><span class="t"> <span class="com"># Check that we can access the previous run's output.</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t444" href="#t444">444</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t445" href="#t445">445</a></span><span class="t"><span class="str"> [[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t446" href="#t446">446</a></span><span class="t"><span class="str"> assert cog.previous == "Hello there!\\n", "WTF??"</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t447" href="#t447">447</a></span><span class="t"><span class="str"> cog.out(cog.previous)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t448" href="#t448">448</a></span><span class="t"><span class="str"> cog.outl("Ran again!")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t449" href="#t449">449</a></span><span class="t"><span class="str"> ]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t450" href="#t450">450</a></span><span class="t"><span class="str"> Hello there!</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t451" href="#t451">451</a></span><span class="t"><span class="str"> [[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t452" href="#t452">452</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t453" href="#t453">453</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t454" href="#t454">454</a></span><span class="t"> <span class="nam">outfile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t455" href="#t455">455</a></span><span class="t"><span class="str"> [[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t456" href="#t456">456</a></span><span class="t"><span class="str"> assert cog.previous == "Hello there!\\n", "WTF??"</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t457" href="#t457">457</a></span><span class="t"><span class="str"> cog.out(cog.previous)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t458" href="#t458">458</a></span><span class="t"><span class="str"> cog.outl("Ran again!")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t459" href="#t459">459</a></span><span class="t"><span class="str"> ]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t460" href="#t460">460</a></span><span class="t"><span class="str"> Hello there!</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t461" href="#t461">461</a></span><span class="t"><span class="str"> Ran again!</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t462" href="#t462">462</a></span><span class="t"><span class="str"> [[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t463" href="#t463">463</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t464" href="#t464">464</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t465" href="#t465">465</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t466" href="#t466">466</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">Cog</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">processString</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span><span class="op">,</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">outfile</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t467" href="#t467">467</a></span><span class="t"> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t468" href="#t468">468</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t469" href="#t469">469</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t470" href="#t470">470</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">Cog</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">processString</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span><span class="op">,</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">outfile</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t471" href="#t471">471</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t469" href="#t469">469</a></span><span class="t"><span class="key">class</span> <span class="nam">CogOptionsTests</span><span class="op">(</span><span class="nam">TestCase</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t470" href="#t470">470</a></span><span class="t"> <span class="str">""" Test the CogOptions class.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t471" href="#t471">471</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t472" href="#t472">472</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t473" href="#t473">473</a></span><span class="t"><span class="key">class</span> <span class="nam">CogOptionsTests</span><span class="op">(</span><span class="nam">TestCase</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t474" href="#t474">474</a></span><span class="t"> <span class="str">""" Test the CogOptions class.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t475" href="#t475">475</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t476" href="#t476">476</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t477" href="#t477">477</a></span><span class="t"> <span class="key">def</span> <span class="nam">testEquality</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t478" href="#t478">478</a></span><span class="t"> <span class="nam">o</span> <span class="op">=</span> <span class="nam">CogOptions</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t479" href="#t479">479</a></span><span class="t"> <span class="nam">p</span> <span class="op">=</span> <span class="nam">CogOptions</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t473" href="#t473">473</a></span><span class="t"> <span class="key">def</span> <span class="nam">testEquality</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t474" href="#t474">474</a></span><span class="t"> <span class="nam">o</span> <span class="op">=</span> <span class="nam">CogOptions</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t475" href="#t475">475</a></span><span class="t"> <span class="nam">p</span> <span class="op">=</span> <span class="nam">CogOptions</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t476" href="#t476">476</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">o</span><span class="op">,</span> <span class="nam">p</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t477" href="#t477">477</a></span><span class="t"> <span class="nam">o</span><span class="op">.</span><span class="nam">parseArgs</span><span class="op">(</span><span class="op">[</span><span class="str">'-r'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t478" href="#t478">478</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertNotEqual</span><span class="op">(</span><span class="nam">o</span><span class="op">,</span> <span class="nam">p</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t479" href="#t479">479</a></span><span class="t"> <span class="nam">p</span><span class="op">.</span><span class="nam">parseArgs</span><span class="op">(</span><span class="op">[</span><span class="str">'-r'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> <p class="mis show_mis"><span class="n"><a id="t480" href="#t480">480</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">o</span><span class="op">,</span> <span class="nam">p</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t481" href="#t481">481</a></span><span class="t"> <span class="nam">o</span><span class="op">.</span><span class="nam">parseArgs</span><span class="op">(</span><span class="op">[</span><span class="str">'-r'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t482" href="#t482">482</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertNotEqual</span><span class="op">(</span><span class="nam">o</span><span class="op">,</span> <span class="nam">p</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t483" href="#t483">483</a></span><span class="t"> <span class="nam">p</span><span class="op">.</span><span class="nam">parseArgs</span><span class="op">(</span><span class="op">[</span><span class="str">'-r'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t484" href="#t484">484</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">o</span><span class="op">,</span> <span class="nam">p</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t485" href="#t485">485</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t486" href="#t486">486</a></span><span class="t"> <span class="key">def</span> <span class="nam">testCloning</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t487" href="#t487">487</a></span><span class="t"> <span class="nam">o</span> <span class="op">=</span> <span class="nam">CogOptions</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t488" href="#t488">488</a></span><span class="t"> <span class="nam">o</span><span class="op">.</span><span class="nam">parseArgs</span><span class="op">(</span><span class="op">[</span><span class="str">'-I'</span><span class="op">,</span> <span class="str">'fooey'</span><span class="op">,</span> <span class="str">'-I'</span><span class="op">,</span> <span class="str">'booey'</span><span class="op">,</span> <span class="str">'-s'</span><span class="op">,</span> <span class="str">' /*x*/'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t489" href="#t489">489</a></span><span class="t"> <span class="nam">p</span> <span class="op">=</span> <span class="nam">o</span><span class="op">.</span><span class="nam">clone</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t490" href="#t490">490</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">o</span><span class="op">,</span> <span class="nam">p</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t491" href="#t491">491</a></span><span class="t"> <span class="nam">p</span><span class="op">.</span><span class="nam">parseArgs</span><span class="op">(</span><span class="op">[</span><span class="str">'-I'</span><span class="op">,</span> <span class="str">'huey'</span><span class="op">,</span> <span class="str">'-D'</span><span class="op">,</span> <span class="str">'foo=quux'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t492" href="#t492">492</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertNotEqual</span><span class="op">(</span><span class="nam">o</span><span class="op">,</span> <span class="nam">p</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t493" href="#t493">493</a></span><span class="t"> <span class="nam">q</span> <span class="op">=</span> <span class="nam">CogOptions</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t494" href="#t494">494</a></span><span class="t"> <span class="nam">q</span><span class="op">.</span><span class="nam">parseArgs</span><span class="op">(</span><span class="op">[</span><span class="str">'-I'</span><span class="op">,</span> <span class="str">'fooey'</span><span class="op">,</span> <span class="str">'-I'</span><span class="op">,</span> <span class="str">'booey'</span><span class="op">,</span> <span class="str">'-s'</span><span class="op">,</span> <span class="str">' /*x*/'</span><span class="op">,</span> <span class="str">'-I'</span><span class="op">,</span> <span class="str">'huey'</span><span class="op">,</span> <span class="str">'-D'</span><span class="op">,</span> <span class="str">'foo=quux'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t495" href="#t495">495</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">p</span><span class="op">,</span> <span class="nam">q</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t496" href="#t496">496</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t497" href="#t497">497</a></span><span class="t"> <span class="key">def</span> <span class="nam">testCombiningFlags</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t498" href="#t498">498</a></span><span class="t"> <span class="com"># Single-character flags can be combined.</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t499" href="#t499">499</a></span><span class="t"> <span class="nam">o</span> <span class="op">=</span> <span class="nam">CogOptions</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t500" href="#t500">500</a></span><span class="t"> <span class="nam">o</span><span class="op">.</span><span class="nam">parseArgs</span><span class="op">(</span><span class="op">[</span><span class="str">'-e'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'-z'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t501" href="#t501">501</a></span><span class="t"> <span class="nam">p</span> <span class="op">=</span> <span class="nam">CogOptions</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t502" href="#t502">502</a></span><span class="t"> <span class="nam">p</span><span class="op">.</span><span class="nam">parseArgs</span><span class="op">(</span><span class="op">[</span><span class="str">'-erz'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t503" href="#t503">503</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">o</span><span class="op">,</span> <span class="nam">p</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t504" href="#t504">504</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t505" href="#t505">505</a></span><span class="t"> <span class="key">def</span> <span class="nam">testMarkers</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t506" href="#t506">506</a></span><span class="t"> <span class="nam">o</span> <span class="op">=</span> <span class="nam">CogOptions</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t507" href="#t507">507</a></span><span class="t"> <span class="nam">o</span><span class="op">.</span><span class="nam">_parse_markers</span><span class="op">(</span><span class="str">'a b c'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t508" href="#t508">508</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="str">'a'</span><span class="op">,</span> <span class="nam">o</span><span class="op">.</span><span class="nam">sBeginSpec</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t509" href="#t509">509</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="str">'b'</span><span class="op">,</span> <span class="nam">o</span><span class="op">.</span><span class="nam">sEndSpec</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t510" href="#t510">510</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="str">'c'</span><span class="op">,</span> <span class="nam">o</span><span class="op">.</span><span class="nam">sEndOutput</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t511" href="#t511">511</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t512" href="#t512">512</a></span><span class="t"> <span class="key">def</span> <span class="nam">testMarkersSwitch</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t513" href="#t513">513</a></span><span class="t"> <span class="nam">o</span> <span class="op">=</span> <span class="nam">CogOptions</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t514" href="#t514">514</a></span><span class="t"> <span class="nam">o</span><span class="op">.</span><span class="nam">parseArgs</span><span class="op">(</span><span class="op">[</span><span class="str">'--markers'</span><span class="op">,</span> <span class="str">'a b c'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t515" href="#t515">515</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="str">'a'</span><span class="op">,</span> <span class="nam">o</span><span class="op">.</span><span class="nam">sBeginSpec</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t516" href="#t516">516</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="str">'b'</span><span class="op">,</span> <span class="nam">o</span><span class="op">.</span><span class="nam">sEndSpec</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t517" href="#t517">517</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="str">'c'</span><span class="op">,</span> <span class="nam">o</span><span class="op">.</span><span class="nam">sEndOutput</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t518" href="#t518">518</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t519" href="#t519">519</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t520" href="#t520">520</a></span><span class="t"><span class="key">class</span> <span class="nam">FileStructureTests</span><span class="op">(</span><span class="nam">TestCase</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t521" href="#t521">521</a></span><span class="t"> <span class="str">""" Test cases to check that we're properly strict about the structure</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t522" href="#t522">522</a></span><span class="t"><span class="str"> of files.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t523" href="#t523">523</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t524" href="#t524">524</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t525" href="#t525">525</a></span><span class="t"> <span class="key">def</span> <span class="nam">isBad</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">infile</span><span class="op">,</span> <span class="nam">msg</span><span class="op">=</span><span class="key">None</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t526" href="#t526">526</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t527" href="#t527">527</a></span><span class="t"> <span class="key">with</span> <span class="nam">self</span><span class="op">.</span><span class="nam">assertRaisesRegex</span><span class="op">(</span><span class="nam">CogError</span><span class="op">,</span> <span class="str">"^"</span><span class="op">+</span><span class="nam">re</span><span class="op">.</span><span class="nam">escape</span><span class="op">(</span><span class="nam">msg</span><span class="op">)</span><span class="op">+</span><span class="str">"$"</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t528" href="#t528">528</a></span><span class="t"> <span class="nam">Cog</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">processString</span><span class="op">(</span><span class="nam">infile</span><span class="op">,</span> <span class="str">'infile.txt'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t529" href="#t529">529</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t530" href="#t530">530</a></span><span class="t"> <span class="key">def</span> <span class="nam">testBeginNoEnd</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t531" href="#t531">531</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t532" href="#t532">532</a></span><span class="t"><span class="str"> Fooey</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t533" href="#t533">533</a></span><span class="t"><span class="str"> #[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t534" href="#t534">534</a></span><span class="t"><span class="str"> cog.outl('hello')</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t535" href="#t535">535</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t536" href="#t536">536</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">isBad</span><span class="op">(</span><span class="nam">infile</span><span class="op">,</span> <span class="str">"infile.txt(2): Cog block begun but never ended."</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t537" href="#t537">537</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t538" href="#t538">538</a></span><span class="t"> <span class="key">def</span> <span class="nam">testNoEoo</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t539" href="#t539">539</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t540" href="#t540">540</a></span><span class="t"><span class="str"> Fooey</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t541" href="#t541">541</a></span><span class="t"><span class="str"> #[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t542" href="#t542">542</a></span><span class="t"><span class="str"> cog.outl('hello')</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t543" href="#t543">543</a></span><span class="t"><span class="str"> #]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t544" href="#t544">544</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t545" href="#t545">545</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">isBad</span><span class="op">(</span><span class="nam">infile</span><span class="op">,</span> <span class="str">"infile.txt(4): Missing '[[[end]]]' before end of file."</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t546" href="#t546">546</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t547" href="#t547">547</a></span><span class="t"> <span class="nam">infile2</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t548" href="#t548">548</a></span><span class="t"><span class="str"> Fooey</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t549" href="#t549">549</a></span><span class="t"><span class="str"> #[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t550" href="#t550">550</a></span><span class="t"><span class="str"> cog.outl('hello')</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t551" href="#t551">551</a></span><span class="t"><span class="str"> #]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t552" href="#t552">552</a></span><span class="t"><span class="str"> #[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t553" href="#t553">553</a></span><span class="t"><span class="str"> cog.outl('goodbye')</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t554" href="#t554">554</a></span><span class="t"><span class="str"> #]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t555" href="#t555">555</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t556" href="#t556">556</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">isBad</span><span class="op">(</span><span class="nam">infile2</span><span class="op">,</span> <span class="str">"infile.txt(5): Unexpected '[[[cog'"</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t557" href="#t557">557</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t558" href="#t558">558</a></span><span class="t"> <span class="key">def</span> <span class="nam">testStartWithEnd</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t559" href="#t559">559</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t560" href="#t560">560</a></span><span class="t"><span class="str"> #]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t561" href="#t561">561</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t562" href="#t562">562</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">isBad</span><span class="op">(</span><span class="nam">infile</span><span class="op">,</span> <span class="str">"infile.txt(1): Unexpected ']]]'"</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t563" href="#t563">563</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t564" href="#t564">564</a></span><span class="t"> <span class="nam">infile2</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t565" href="#t565">565</a></span><span class="t"><span class="str"> #[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t566" href="#t566">566</a></span><span class="t"><span class="str"> cog.outl('hello')</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t567" href="#t567">567</a></span><span class="t"><span class="str"> #]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t568" href="#t568">568</a></span><span class="t"><span class="str"> #[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t569" href="#t569">569</a></span><span class="t"><span class="str"> #]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t570" href="#t570">570</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t571" href="#t571">571</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">isBad</span><span class="op">(</span><span class="nam">infile2</span><span class="op">,</span> <span class="str">"infile.txt(5): Unexpected ']]]'"</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t572" href="#t572">572</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t573" href="#t573">573</a></span><span class="t"> <span class="key">def</span> <span class="nam">testStartWithEoo</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t574" href="#t574">574</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t575" href="#t575">575</a></span><span class="t"><span class="str"> #[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t576" href="#t576">576</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t577" href="#t577">577</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">isBad</span><span class="op">(</span><span class="nam">infile</span><span class="op">,</span> <span class="str">"infile.txt(1): Unexpected '[[[end]]]'"</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t578" href="#t578">578</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t579" href="#t579">579</a></span><span class="t"> <span class="nam">infile2</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t580" href="#t580">580</a></span><span class="t"><span class="str"> #[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t581" href="#t581">581</a></span><span class="t"><span class="str"> cog.outl('hello')</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t582" href="#t582">582</a></span><span class="t"><span class="str"> #]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t583" href="#t583">583</a></span><span class="t"><span class="str"> #[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t584" href="#t584">584</a></span><span class="t"><span class="str"> #[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t585" href="#t585">585</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t586" href="#t586">586</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">isBad</span><span class="op">(</span><span class="nam">infile2</span><span class="op">,</span> <span class="str">"infile.txt(5): Unexpected '[[[end]]]'"</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t587" href="#t587">587</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t588" href="#t588">588</a></span><span class="t"> <span class="key">def</span> <span class="nam">testNoEnd</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t589" href="#t589">589</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t590" href="#t590">590</a></span><span class="t"><span class="str"> #[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t591" href="#t591">591</a></span><span class="t"><span class="str"> cog.outl("hello")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t592" href="#t592">592</a></span><span class="t"><span class="str"> #[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t593" href="#t593">593</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t594" href="#t594">594</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">isBad</span><span class="op">(</span><span class="nam">infile</span><span class="op">,</span> <span class="str">"infile.txt(3): Unexpected '[[[end]]]'"</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t595" href="#t595">595</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t596" href="#t596">596</a></span><span class="t"> <span class="nam">infile2</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t481" href="#t481">481</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t482" href="#t482">482</a></span><span class="t"> <span class="key">def</span> <span class="nam">testCloning</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t483" href="#t483">483</a></span><span class="t"> <span class="nam">o</span> <span class="op">=</span> <span class="nam">CogOptions</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t484" href="#t484">484</a></span><span class="t"> <span class="nam">o</span><span class="op">.</span><span class="nam">parseArgs</span><span class="op">(</span><span class="op">[</span><span class="str">'-I'</span><span class="op">,</span> <span class="str">'fooey'</span><span class="op">,</span> <span class="str">'-I'</span><span class="op">,</span> <span class="str">'booey'</span><span class="op">,</span> <span class="str">'-s'</span><span class="op">,</span> <span class="str">' /*x*/'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t485" href="#t485">485</a></span><span class="t"> <span class="nam">p</span> <span class="op">=</span> <span class="nam">o</span><span class="op">.</span><span class="nam">clone</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t486" href="#t486">486</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">o</span><span class="op">,</span> <span class="nam">p</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t487" href="#t487">487</a></span><span class="t"> <span class="nam">p</span><span class="op">.</span><span class="nam">parseArgs</span><span class="op">(</span><span class="op">[</span><span class="str">'-I'</span><span class="op">,</span> <span class="str">'huey'</span><span class="op">,</span> <span class="str">'-D'</span><span class="op">,</span> <span class="str">'foo=quux'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t488" href="#t488">488</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertNotEqual</span><span class="op">(</span><span class="nam">o</span><span class="op">,</span> <span class="nam">p</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t489" href="#t489">489</a></span><span class="t"> <span class="nam">q</span> <span class="op">=</span> <span class="nam">CogOptions</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t490" href="#t490">490</a></span><span class="t"> <span class="nam">q</span><span class="op">.</span><span class="nam">parseArgs</span><span class="op">(</span><span class="op">[</span><span class="str">'-I'</span><span class="op">,</span> <span class="str">'fooey'</span><span class="op">,</span> <span class="str">'-I'</span><span class="op">,</span> <span class="str">'booey'</span><span class="op">,</span> <span class="str">'-s'</span><span class="op">,</span> <span class="str">' /*x*/'</span><span class="op">,</span> <span class="str">'-I'</span><span class="op">,</span> <span class="str">'huey'</span><span class="op">,</span> <span class="str">'-D'</span><span class="op">,</span> <span class="str">'foo=quux'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t491" href="#t491">491</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">p</span><span class="op">,</span> <span class="nam">q</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t492" href="#t492">492</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t493" href="#t493">493</a></span><span class="t"> <span class="key">def</span> <span class="nam">testCombiningFlags</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t494" href="#t494">494</a></span><span class="t"> <span class="com"># Single-character flags can be combined.</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t495" href="#t495">495</a></span><span class="t"> <span class="nam">o</span> <span class="op">=</span> <span class="nam">CogOptions</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t496" href="#t496">496</a></span><span class="t"> <span class="nam">o</span><span class="op">.</span><span class="nam">parseArgs</span><span class="op">(</span><span class="op">[</span><span class="str">'-e'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'-z'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t497" href="#t497">497</a></span><span class="t"> <span class="nam">p</span> <span class="op">=</span> <span class="nam">CogOptions</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t498" href="#t498">498</a></span><span class="t"> <span class="nam">p</span><span class="op">.</span><span class="nam">parseArgs</span><span class="op">(</span><span class="op">[</span><span class="str">'-erz'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t499" href="#t499">499</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">o</span><span class="op">,</span> <span class="nam">p</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t500" href="#t500">500</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t501" href="#t501">501</a></span><span class="t"> <span class="key">def</span> <span class="nam">testMarkers</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t502" href="#t502">502</a></span><span class="t"> <span class="nam">o</span> <span class="op">=</span> <span class="nam">CogOptions</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t503" href="#t503">503</a></span><span class="t"> <span class="nam">o</span><span class="op">.</span><span class="nam">_parse_markers</span><span class="op">(</span><span class="str">'a b c'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t504" href="#t504">504</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="str">'a'</span><span class="op">,</span> <span class="nam">o</span><span class="op">.</span><span class="nam">sBeginSpec</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t505" href="#t505">505</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="str">'b'</span><span class="op">,</span> <span class="nam">o</span><span class="op">.</span><span class="nam">sEndSpec</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t506" href="#t506">506</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="str">'c'</span><span class="op">,</span> <span class="nam">o</span><span class="op">.</span><span class="nam">sEndOutput</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t507" href="#t507">507</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t508" href="#t508">508</a></span><span class="t"> <span class="key">def</span> <span class="nam">testMarkersSwitch</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t509" href="#t509">509</a></span><span class="t"> <span class="nam">o</span> <span class="op">=</span> <span class="nam">CogOptions</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t510" href="#t510">510</a></span><span class="t"> <span class="nam">o</span><span class="op">.</span><span class="nam">parseArgs</span><span class="op">(</span><span class="op">[</span><span class="str">'--markers'</span><span class="op">,</span> <span class="str">'a b c'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t511" href="#t511">511</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="str">'a'</span><span class="op">,</span> <span class="nam">o</span><span class="op">.</span><span class="nam">sBeginSpec</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t512" href="#t512">512</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="str">'b'</span><span class="op">,</span> <span class="nam">o</span><span class="op">.</span><span class="nam">sEndSpec</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t513" href="#t513">513</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="str">'c'</span><span class="op">,</span> <span class="nam">o</span><span class="op">.</span><span class="nam">sEndOutput</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t514" href="#t514">514</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t515" href="#t515">515</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t516" href="#t516">516</a></span><span class="t"><span class="key">class</span> <span class="nam">FileStructureTests</span><span class="op">(</span><span class="nam">TestCase</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t517" href="#t517">517</a></span><span class="t"> <span class="str">""" Test cases to check that we're properly strict about the structure</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t518" href="#t518">518</a></span><span class="t"><span class="str"> of files.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t519" href="#t519">519</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t520" href="#t520">520</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t521" href="#t521">521</a></span><span class="t"> <span class="key">def</span> <span class="nam">isBad</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">infile</span><span class="op">,</span> <span class="nam">msg</span><span class="op">=</span><span class="key">None</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t522" href="#t522">522</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t523" href="#t523">523</a></span><span class="t"> <span class="key">with</span> <span class="nam">self</span><span class="op">.</span><span class="nam">assertRaisesRegex</span><span class="op">(</span><span class="nam">CogError</span><span class="op">,</span> <span class="str">"^"</span><span class="op">+</span><span class="nam">re</span><span class="op">.</span><span class="nam">escape</span><span class="op">(</span><span class="nam">msg</span><span class="op">)</span><span class="op">+</span><span class="str">"$"</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t524" href="#t524">524</a></span><span class="t"> <span class="nam">Cog</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">processString</span><span class="op">(</span><span class="nam">infile</span><span class="op">,</span> <span class="str">'infile.txt'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t525" href="#t525">525</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t526" href="#t526">526</a></span><span class="t"> <span class="key">def</span> <span class="nam">testBeginNoEnd</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t527" href="#t527">527</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t528" href="#t528">528</a></span><span class="t"><span class="str"> Fooey</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t529" href="#t529">529</a></span><span class="t"><span class="str"> #[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t530" href="#t530">530</a></span><span class="t"><span class="str"> cog.outl('hello')</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t531" href="#t531">531</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t532" href="#t532">532</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">isBad</span><span class="op">(</span><span class="nam">infile</span><span class="op">,</span> <span class="str">"infile.txt(2): Cog block begun but never ended."</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t533" href="#t533">533</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t534" href="#t534">534</a></span><span class="t"> <span class="key">def</span> <span class="nam">testNoEoo</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t535" href="#t535">535</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t536" href="#t536">536</a></span><span class="t"><span class="str"> Fooey</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t537" href="#t537">537</a></span><span class="t"><span class="str"> #[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t538" href="#t538">538</a></span><span class="t"><span class="str"> cog.outl('hello')</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t539" href="#t539">539</a></span><span class="t"><span class="str"> #]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t540" href="#t540">540</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t541" href="#t541">541</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">isBad</span><span class="op">(</span><span class="nam">infile</span><span class="op">,</span> <span class="str">"infile.txt(4): Missing '[[[end]]]' before end of file."</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t542" href="#t542">542</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t543" href="#t543">543</a></span><span class="t"> <span class="nam">infile2</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t544" href="#t544">544</a></span><span class="t"><span class="str"> Fooey</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t545" href="#t545">545</a></span><span class="t"><span class="str"> #[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t546" href="#t546">546</a></span><span class="t"><span class="str"> cog.outl('hello')</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t547" href="#t547">547</a></span><span class="t"><span class="str"> #]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t548" href="#t548">548</a></span><span class="t"><span class="str"> #[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t549" href="#t549">549</a></span><span class="t"><span class="str"> cog.outl('goodbye')</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t550" href="#t550">550</a></span><span class="t"><span class="str"> #]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t551" href="#t551">551</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t552" href="#t552">552</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">isBad</span><span class="op">(</span><span class="nam">infile2</span><span class="op">,</span> <span class="str">"infile.txt(5): Unexpected '[[[cog'"</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t553" href="#t553">553</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t554" href="#t554">554</a></span><span class="t"> <span class="key">def</span> <span class="nam">testStartWithEnd</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t555" href="#t555">555</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t556" href="#t556">556</a></span><span class="t"><span class="str"> #]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t557" href="#t557">557</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t558" href="#t558">558</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">isBad</span><span class="op">(</span><span class="nam">infile</span><span class="op">,</span> <span class="str">"infile.txt(1): Unexpected ']]]'"</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t559" href="#t559">559</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t560" href="#t560">560</a></span><span class="t"> <span class="nam">infile2</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t561" href="#t561">561</a></span><span class="t"><span class="str"> #[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t562" href="#t562">562</a></span><span class="t"><span class="str"> cog.outl('hello')</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t563" href="#t563">563</a></span><span class="t"><span class="str"> #]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t564" href="#t564">564</a></span><span class="t"><span class="str"> #[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t565" href="#t565">565</a></span><span class="t"><span class="str"> #]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t566" href="#t566">566</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t567" href="#t567">567</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">isBad</span><span class="op">(</span><span class="nam">infile2</span><span class="op">,</span> <span class="str">"infile.txt(5): Unexpected ']]]'"</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t568" href="#t568">568</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t569" href="#t569">569</a></span><span class="t"> <span class="key">def</span> <span class="nam">testStartWithEoo</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t570" href="#t570">570</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t571" href="#t571">571</a></span><span class="t"><span class="str"> #[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t572" href="#t572">572</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t573" href="#t573">573</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">isBad</span><span class="op">(</span><span class="nam">infile</span><span class="op">,</span> <span class="str">"infile.txt(1): Unexpected '[[[end]]]'"</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t574" href="#t574">574</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t575" href="#t575">575</a></span><span class="t"> <span class="nam">infile2</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t576" href="#t576">576</a></span><span class="t"><span class="str"> #[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t577" href="#t577">577</a></span><span class="t"><span class="str"> cog.outl('hello')</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t578" href="#t578">578</a></span><span class="t"><span class="str"> #]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t579" href="#t579">579</a></span><span class="t"><span class="str"> #[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t580" href="#t580">580</a></span><span class="t"><span class="str"> #[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t581" href="#t581">581</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t582" href="#t582">582</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">isBad</span><span class="op">(</span><span class="nam">infile2</span><span class="op">,</span> <span class="str">"infile.txt(5): Unexpected '[[[end]]]'"</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t583" href="#t583">583</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t584" href="#t584">584</a></span><span class="t"> <span class="key">def</span> <span class="nam">testNoEnd</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t585" href="#t585">585</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t586" href="#t586">586</a></span><span class="t"><span class="str"> #[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t587" href="#t587">587</a></span><span class="t"><span class="str"> cog.outl("hello")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t588" href="#t588">588</a></span><span class="t"><span class="str"> #[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t589" href="#t589">589</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t590" href="#t590">590</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">isBad</span><span class="op">(</span><span class="nam">infile</span><span class="op">,</span> <span class="str">"infile.txt(3): Unexpected '[[[end]]]'"</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t591" href="#t591">591</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t592" href="#t592">592</a></span><span class="t"> <span class="nam">infile2</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t593" href="#t593">593</a></span><span class="t"><span class="str"> #[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t594" href="#t594">594</a></span><span class="t"><span class="str"> cog.outl('hello')</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t595" href="#t595">595</a></span><span class="t"><span class="str"> #]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t596" href="#t596">596</a></span><span class="t"><span class="str"> #[[[end]]]</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t597" href="#t597">597</a></span><span class="t"><span class="str"> #[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t598" href="#t598">598</a></span><span class="t"><span class="str"> cog.outl('hello')</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t599" href="#t599">599</a></span><span class="t"><span class="str"> #]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t600" href="#t600">600</a></span><span class="t"><span class="str"> #[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t601" href="#t601">601</a></span><span class="t"><span class="str"> #[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t602" href="#t602">602</a></span><span class="t"><span class="str"> cog.outl("hello")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t603" href="#t603">603</a></span><span class="t"><span class="str"> #[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t604" href="#t604">604</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t605" href="#t605">605</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">isBad</span><span class="op">(</span><span class="nam">infile2</span><span class="op">,</span> <span class="str">"infile.txt(7): Unexpected '[[[end]]]'"</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t606" href="#t606">606</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t607" href="#t607">607</a></span><span class="t"> <span class="key">def</span> <span class="nam">testTwoBegins</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t608" href="#t608">608</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t609" href="#t609">609</a></span><span class="t"><span class="str"> #[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t610" href="#t610">610</a></span><span class="t"><span class="str"> #[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t611" href="#t611">611</a></span><span class="t"><span class="str"> cog.outl("hello")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t612" href="#t612">612</a></span><span class="t"><span class="str"> #]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t613" href="#t613">613</a></span><span class="t"><span class="str"> #[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t614" href="#t614">614</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t615" href="#t615">615</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">isBad</span><span class="op">(</span><span class="nam">infile</span><span class="op">,</span> <span class="str">"infile.txt(2): Unexpected '[[[cog'"</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t616" href="#t616">616</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t617" href="#t617">617</a></span><span class="t"> <span class="nam">infile2</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t598" href="#t598">598</a></span><span class="t"><span class="str"> cog.outl("hello")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t599" href="#t599">599</a></span><span class="t"><span class="str"> #[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t600" href="#t600">600</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t601" href="#t601">601</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">isBad</span><span class="op">(</span><span class="nam">infile2</span><span class="op">,</span> <span class="str">"infile.txt(7): Unexpected '[[[end]]]'"</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t602" href="#t602">602</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t603" href="#t603">603</a></span><span class="t"> <span class="key">def</span> <span class="nam">testTwoBegins</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t604" href="#t604">604</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t605" href="#t605">605</a></span><span class="t"><span class="str"> #[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t606" href="#t606">606</a></span><span class="t"><span class="str"> #[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t607" href="#t607">607</a></span><span class="t"><span class="str"> cog.outl("hello")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t608" href="#t608">608</a></span><span class="t"><span class="str"> #]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t609" href="#t609">609</a></span><span class="t"><span class="str"> #[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t610" href="#t610">610</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t611" href="#t611">611</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">isBad</span><span class="op">(</span><span class="nam">infile</span><span class="op">,</span> <span class="str">"infile.txt(2): Unexpected '[[[cog'"</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t612" href="#t612">612</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t613" href="#t613">613</a></span><span class="t"> <span class="nam">infile2</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t614" href="#t614">614</a></span><span class="t"><span class="str"> #[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t615" href="#t615">615</a></span><span class="t"><span class="str"> cog.outl("hello")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t616" href="#t616">616</a></span><span class="t"><span class="str"> #]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t617" href="#t617">617</a></span><span class="t"><span class="str"> #[[[end]]]</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t618" href="#t618">618</a></span><span class="t"><span class="str"> #[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t619" href="#t619">619</a></span><span class="t"><span class="str"> cog.outl("hello")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t620" href="#t620">620</a></span><span class="t"><span class="str"> #]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t621" href="#t621">621</a></span><span class="t"><span class="str"> #[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t622" href="#t622">622</a></span><span class="t"><span class="str"> #[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t623" href="#t623">623</a></span><span class="t"><span class="str"> #[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t624" href="#t624">624</a></span><span class="t"><span class="str"> cog.outl("hello")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t625" href="#t625">625</a></span><span class="t"><span class="str"> #]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t626" href="#t626">626</a></span><span class="t"><span class="str"> #[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t627" href="#t627">627</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t628" href="#t628">628</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">isBad</span><span class="op">(</span><span class="nam">infile2</span><span class="op">,</span> <span class="str">"infile.txt(6): Unexpected '[[[cog'"</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t629" href="#t629">629</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t630" href="#t630">630</a></span><span class="t"> <span class="key">def</span> <span class="nam">testTwoEnds</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t631" href="#t631">631</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t632" href="#t632">632</a></span><span class="t"><span class="str"> #[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t633" href="#t633">633</a></span><span class="t"><span class="str"> cog.outl("hello")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t634" href="#t634">634</a></span><span class="t"><span class="str"> #]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t635" href="#t635">635</a></span><span class="t"><span class="str"> #]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t636" href="#t636">636</a></span><span class="t"><span class="str"> #[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t637" href="#t637">637</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t638" href="#t638">638</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">isBad</span><span class="op">(</span><span class="nam">infile</span><span class="op">,</span> <span class="str">"infile.txt(4): Unexpected ']]]'"</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t639" href="#t639">639</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t640" href="#t640">640</a></span><span class="t"> <span class="nam">infile2</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t619" href="#t619">619</a></span><span class="t"><span class="str"> #[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t620" href="#t620">620</a></span><span class="t"><span class="str"> cog.outl("hello")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t621" href="#t621">621</a></span><span class="t"><span class="str"> #]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t622" href="#t622">622</a></span><span class="t"><span class="str"> #[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t623" href="#t623">623</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t624" href="#t624">624</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">isBad</span><span class="op">(</span><span class="nam">infile2</span><span class="op">,</span> <span class="str">"infile.txt(6): Unexpected '[[[cog'"</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t625" href="#t625">625</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t626" href="#t626">626</a></span><span class="t"> <span class="key">def</span> <span class="nam">testTwoEnds</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t627" href="#t627">627</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t628" href="#t628">628</a></span><span class="t"><span class="str"> #[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t629" href="#t629">629</a></span><span class="t"><span class="str"> cog.outl("hello")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t630" href="#t630">630</a></span><span class="t"><span class="str"> #]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t631" href="#t631">631</a></span><span class="t"><span class="str"> #]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t632" href="#t632">632</a></span><span class="t"><span class="str"> #[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t633" href="#t633">633</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t634" href="#t634">634</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">isBad</span><span class="op">(</span><span class="nam">infile</span><span class="op">,</span> <span class="str">"infile.txt(4): Unexpected ']]]'"</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t635" href="#t635">635</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t636" href="#t636">636</a></span><span class="t"> <span class="nam">infile2</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t637" href="#t637">637</a></span><span class="t"><span class="str"> #[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t638" href="#t638">638</a></span><span class="t"><span class="str"> cog.outl("hello")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t639" href="#t639">639</a></span><span class="t"><span class="str"> #]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t640" href="#t640">640</a></span><span class="t"><span class="str"> #[[[end]]]</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t641" href="#t641">641</a></span><span class="t"><span class="str"> #[[[cog</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t642" href="#t642">642</a></span><span class="t"><span class="str"> cog.outl("hello")</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t643" href="#t643">643</a></span><span class="t"><span class="str"> #]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t644" href="#t644">644</a></span><span class="t"><span class="str"> #[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t645" href="#t645">645</a></span><span class="t"><span class="str"> #[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t646" href="#t646">646</a></span><span class="t"><span class="str"> cog.outl("hello")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t647" href="#t647">647</a></span><span class="t"><span class="str"> #]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t648" href="#t648">648</a></span><span class="t"><span class="str"> #]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t649" href="#t649">649</a></span><span class="t"><span class="str"> #[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t650" href="#t650">650</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t651" href="#t651">651</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">isBad</span><span class="op">(</span><span class="nam">infile2</span><span class="op">,</span> <span class="str">"infile.txt(8): Unexpected ']]]'"</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t652" href="#t652">652</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t644" href="#t644">644</a></span><span class="t"><span class="str"> #]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t645" href="#t645">645</a></span><span class="t"><span class="str"> #[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t646" href="#t646">646</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t647" href="#t647">647</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">isBad</span><span class="op">(</span><span class="nam">infile2</span><span class="op">,</span> <span class="str">"infile.txt(8): Unexpected ']]]'"</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t648" href="#t648">648</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t649" href="#t649">649</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t650" href="#t650">650</a></span><span class="t"><span class="key">class</span> <span class="nam">CogErrorTests</span><span class="op">(</span><span class="nam">TestCase</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t651" href="#t651">651</a></span><span class="t"> <span class="str">""" Test cases for cog.error().</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t652" href="#t652">652</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t653" href="#t653">653</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t654" href="#t654">654</a></span><span class="t"><span class="key">class</span> <span class="nam">CogErrorTests</span><span class="op">(</span><span class="nam">TestCase</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t655" href="#t655">655</a></span><span class="t"> <span class="str">""" Test cases for cog.error().</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t656" href="#t656">656</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t657" href="#t657">657</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t658" href="#t658">658</a></span><span class="t"> <span class="key">def</span> <span class="nam">testErrorMsg</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t659" href="#t659">659</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t660" href="#t660">660</a></span><span class="t"><span class="str"> [[[cog cog.error("This ain't right!")]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t661" href="#t661">661</a></span><span class="t"><span class="str"> [[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t662" href="#t662">662</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t654" href="#t654">654</a></span><span class="t"> <span class="key">def</span> <span class="nam">testErrorMsg</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t655" href="#t655">655</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t656" href="#t656">656</a></span><span class="t"><span class="str"> [[[cog cog.error("This ain't right!")]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t657" href="#t657">657</a></span><span class="t"><span class="str"> [[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t658" href="#t658">658</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t659" href="#t659">659</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t660" href="#t660">660</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t661" href="#t661">661</a></span><span class="t"> <span class="key">with</span> <span class="nam">self</span><span class="op">.</span><span class="nam">assertRaisesRegex</span><span class="op">(</span><span class="nam">CogGeneratedError</span><span class="op">,</span> <span class="str">"^This ain't right!$"</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t662" href="#t662">662</a></span><span class="t"> <span class="nam">Cog</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">processString</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t663" href="#t663">663</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t664" href="#t664">664</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t665" href="#t665">665</a></span><span class="t"> <span class="key">with</span> <span class="nam">self</span><span class="op">.</span><span class="nam">assertRaisesRegex</span><span class="op">(</span><span class="nam">CogGeneratedError</span><span class="op">,</span> <span class="str">"^This ain't right!$"</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t666" href="#t666">666</a></span><span class="t"> <span class="nam">Cog</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">processString</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t667" href="#t667">667</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t668" href="#t668">668</a></span><span class="t"> <span class="key">def</span> <span class="nam">testErrorNoMsg</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t669" href="#t669">669</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t670" href="#t670">670</a></span><span class="t"><span class="str"> [[[cog cog.error()]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t671" href="#t671">671</a></span><span class="t"><span class="str"> [[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t672" href="#t672">672</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t664" href="#t664">664</a></span><span class="t"> <span class="key">def</span> <span class="nam">testErrorNoMsg</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t665" href="#t665">665</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t666" href="#t666">666</a></span><span class="t"><span class="str"> [[[cog cog.error()]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t667" href="#t667">667</a></span><span class="t"><span class="str"> [[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t668" href="#t668">668</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t669" href="#t669">669</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t670" href="#t670">670</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t671" href="#t671">671</a></span><span class="t"> <span class="key">with</span> <span class="nam">self</span><span class="op">.</span><span class="nam">assertRaisesRegex</span><span class="op">(</span><span class="nam">CogGeneratedError</span><span class="op">,</span> <span class="str">"^Error raised by cog generator.$"</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t672" href="#t672">672</a></span><span class="t"> <span class="nam">Cog</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">processString</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t673" href="#t673">673</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t674" href="#t674">674</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t675" href="#t675">675</a></span><span class="t"> <span class="key">with</span> <span class="nam">self</span><span class="op">.</span><span class="nam">assertRaisesRegex</span><span class="op">(</span><span class="nam">CogGeneratedError</span><span class="op">,</span> <span class="str">"^Error raised by cog generator.$"</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t676" href="#t676">676</a></span><span class="t"> <span class="nam">Cog</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">processString</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t677" href="#t677">677</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t678" href="#t678">678</a></span><span class="t"> <span class="key">def</span> <span class="nam">testNoErrorIfErrorNotCalled</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t679" href="#t679">679</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t680" href="#t680">680</a></span><span class="t"><span class="str"> --[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t681" href="#t681">681</a></span><span class="t"><span class="str"> --import cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t682" href="#t682">682</a></span><span class="t"><span class="str"> --for i in range(3):</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t683" href="#t683">683</a></span><span class="t"><span class="str"> -- if i > 10:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t684" href="#t684">684</a></span><span class="t"><span class="str"> -- cog.error("Something is amiss!")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t685" href="#t685">685</a></span><span class="t"><span class="str"> -- cog.out("xx%d\\n" % i)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t686" href="#t686">686</a></span><span class="t"><span class="str"> --]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t687" href="#t687">687</a></span><span class="t"><span class="str"> xx0</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t688" href="#t688">688</a></span><span class="t"><span class="str"> xx1</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t689" href="#t689">689</a></span><span class="t"><span class="str"> xx2</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t690" href="#t690">690</a></span><span class="t"><span class="str"> --[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t691" href="#t691">691</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t674" href="#t674">674</a></span><span class="t"> <span class="key">def</span> <span class="nam">testNoErrorIfErrorNotCalled</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t675" href="#t675">675</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t676" href="#t676">676</a></span><span class="t"><span class="str"> --[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t677" href="#t677">677</a></span><span class="t"><span class="str"> --import cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t678" href="#t678">678</a></span><span class="t"><span class="str"> --for i in range(3):</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t679" href="#t679">679</a></span><span class="t"><span class="str"> -- if i > 10:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t680" href="#t680">680</a></span><span class="t"><span class="str"> -- cog.error("Something is amiss!")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t681" href="#t681">681</a></span><span class="t"><span class="str"> -- cog.out("xx%d\\n" % i)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t682" href="#t682">682</a></span><span class="t"><span class="str"> --]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t683" href="#t683">683</a></span><span class="t"><span class="str"> xx0</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t684" href="#t684">684</a></span><span class="t"><span class="str"> xx1</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t685" href="#t685">685</a></span><span class="t"><span class="str"> xx2</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t686" href="#t686">686</a></span><span class="t"><span class="str"> --[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t687" href="#t687">687</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t688" href="#t688">688</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t689" href="#t689">689</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t690" href="#t690">690</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">Cog</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">processString</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span><span class="op">,</span> <span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t691" href="#t691">691</a></span><span class="t"> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t692" href="#t692">692</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t693" href="#t693">693</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t694" href="#t694">694</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">Cog</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">processString</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span><span class="op">,</span> <span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t695" href="#t695">695</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t696" href="#t696">696</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t697" href="#t697">697</a></span><span class="t"><span class="key">class</span> <span class="nam">CogGeneratorGetCodeTests</span><span class="op">(</span><span class="nam">TestCase</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t698" href="#t698">698</a></span><span class="t"> <span class="str">""" Unit tests against CogGenerator to see if its getCode() method works</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t699" href="#t699">699</a></span><span class="t"><span class="str"> properly.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t700" href="#t700">700</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t701" href="#t701">701</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t702" href="#t702">702</a></span><span class="t"> <span class="key">def</span> <span class="nam">setUp</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t703" href="#t703">703</a></span><span class="t"> <span class="str">""" All tests get a generator to use, and short same-length names for</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t704" href="#t704">704</a></span><span class="t"><span class="str"> the functions we're going to use.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t705" href="#t705">705</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t706" href="#t706">706</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">gen</span> <span class="op">=</span> <span class="nam">CogGenerator</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t707" href="#t707">707</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">m</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">gen</span><span class="op">.</span><span class="nam">parseMarker</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t708" href="#t708">708</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">l</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">gen</span><span class="op">.</span><span class="nam">parseLine</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t709" href="#t709">709</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t710" href="#t710">710</a></span><span class="t"> <span class="key">def</span> <span class="nam">testEmpty</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t711" href="#t711">711</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">m</span><span class="op">(</span><span class="str">'// [[[cog'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t712" href="#t712">712</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">m</span><span class="op">(</span><span class="str">'// ]]]'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t713" href="#t713">713</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">gen</span><span class="op">.</span><span class="nam">getCode</span><span class="op">(</span><span class="op">)</span><span class="op">,</span> <span class="str">''</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t714" href="#t714">714</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t715" href="#t715">715</a></span><span class="t"> <span class="key">def</span> <span class="nam">testSimple</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t716" href="#t716">716</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">m</span><span class="op">(</span><span class="str">'// [[[cog'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t717" href="#t717">717</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">l</span><span class="op">(</span><span class="str">' print "hello"'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t718" href="#t718">718</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">l</span><span class="op">(</span><span class="str">' print "bye"'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t719" href="#t719">719</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">m</span><span class="op">(</span><span class="str">'// ]]]'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t720" href="#t720">720</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">gen</span><span class="op">.</span><span class="nam">getCode</span><span class="op">(</span><span class="op">)</span><span class="op">,</span> <span class="str">'print "hello"\nprint "bye"'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t721" href="#t721">721</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t722" href="#t722">722</a></span><span class="t"> <span class="key">def</span> <span class="nam">testCompressed1</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t723" href="#t723">723</a></span><span class="t"> <span class="com"># For a while, I supported compressed code blocks, but no longer.</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t724" href="#t724">724</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">m</span><span class="op">(</span><span class="str">'// [[[cog: print """'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t725" href="#t725">725</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">l</span><span class="op">(</span><span class="str">'// hello'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t726" href="#t726">726</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">l</span><span class="op">(</span><span class="str">'// bye'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t727" href="#t727">727</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">m</span><span class="op">(</span><span class="str">'// """)]]]'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t728" href="#t728">728</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">gen</span><span class="op">.</span><span class="nam">getCode</span><span class="op">(</span><span class="op">)</span><span class="op">,</span> <span class="str">'hello\nbye'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t729" href="#t729">729</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t730" href="#t730">730</a></span><span class="t"> <span class="key">def</span> <span class="nam">testCompressed2</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t731" href="#t731">731</a></span><span class="t"> <span class="com"># For a while, I supported compressed code blocks, but no longer.</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t732" href="#t732">732</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">m</span><span class="op">(</span><span class="str">'// [[[cog: print """'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t733" href="#t733">733</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">l</span><span class="op">(</span><span class="str">'hello'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t734" href="#t734">734</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">l</span><span class="op">(</span><span class="str">'bye'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t735" href="#t735">735</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">m</span><span class="op">(</span><span class="str">'// """)]]]'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t736" href="#t736">736</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">gen</span><span class="op">.</span><span class="nam">getCode</span><span class="op">(</span><span class="op">)</span><span class="op">,</span> <span class="str">'hello\nbye'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t737" href="#t737">737</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t738" href="#t738">738</a></span><span class="t"> <span class="key">def</span> <span class="nam">testCompressed3</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t739" href="#t739">739</a></span><span class="t"> <span class="com"># For a while, I supported compressed code blocks, but no longer.</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t740" href="#t740">740</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">m</span><span class="op">(</span><span class="str">'// [[[cog'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t741" href="#t741">741</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">l</span><span class="op">(</span><span class="str">'print """hello'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t742" href="#t742">742</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">l</span><span class="op">(</span><span class="str">'bye'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t743" href="#t743">743</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">m</span><span class="op">(</span><span class="str">'// """)]]]'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t744" href="#t744">744</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">gen</span><span class="op">.</span><span class="nam">getCode</span><span class="op">(</span><span class="op">)</span><span class="op">,</span> <span class="str">'print """hello\nbye'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t745" href="#t745">745</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t746" href="#t746">746</a></span><span class="t"> <span class="key">def</span> <span class="nam">testCompressed4</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t747" href="#t747">747</a></span><span class="t"> <span class="com"># For a while, I supported compressed code blocks, but no longer.</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t748" href="#t748">748</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">m</span><span class="op">(</span><span class="str">'// [[[cog: print """'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t749" href="#t749">749</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">l</span><span class="op">(</span><span class="str">'hello'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t750" href="#t750">750</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">l</span><span class="op">(</span><span class="str">'bye""")'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t751" href="#t751">751</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">m</span><span class="op">(</span><span class="str">'// ]]]'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t752" href="#t752">752</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">gen</span><span class="op">.</span><span class="nam">getCode</span><span class="op">(</span><span class="op">)</span><span class="op">,</span> <span class="str">'hello\nbye""")'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t753" href="#t753">753</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t754" href="#t754">754</a></span><span class="t"> <span class="key">def</span> <span class="nam">testNoCommonPrefixForMarkers</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t755" href="#t755">755</a></span><span class="t"> <span class="com"># It's important to be able to use #if 0 to hide lines from a</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t756" href="#t756">756</a></span><span class="t"> <span class="com"># C++ compiler.</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t757" href="#t757">757</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">m</span><span class="op">(</span><span class="str">'#if 0 //[[[cog'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t758" href="#t758">758</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">l</span><span class="op">(</span><span class="str">'\timport cog, sys'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t759" href="#t759">759</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">l</span><span class="op">(</span><span class="str">''</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t760" href="#t760">760</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">l</span><span class="op">(</span><span class="str">'\tprint sys.argv'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t761" href="#t761">761</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">m</span><span class="op">(</span><span class="str">'#endif //]]]'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t762" href="#t762">762</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">gen</span><span class="op">.</span><span class="nam">getCode</span><span class="op">(</span><span class="op">)</span><span class="op">,</span> <span class="str">'import cog, sys\n\nprint sys.argv'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t763" href="#t763">763</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t764" href="#t764">764</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t765" href="#t765">765</a></span><span class="t"><span class="key">class</span> <span class="nam">TestCaseWithTempDir</span><span class="op">(</span><span class="nam">TestCase</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t766" href="#t766">766</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t767" href="#t767">767</a></span><span class="t"> <span class="key">def</span> <span class="nam">newCog</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t768" href="#t768">768</a></span><span class="t"> <span class="str">""" Initialize the cog members for another run.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t769" href="#t769">769</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t770" href="#t770">770</a></span><span class="t"> <span class="com"># Create a cog engine, and catch its output.</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t771" href="#t771">771</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span> <span class="op">=</span> <span class="nam">Cog</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t772" href="#t772">772</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">output</span> <span class="op">=</span> <span class="nam">StringIO</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t773" href="#t773">773</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">setOutput</span><span class="op">(</span><span class="nam">stdout</span><span class="op">=</span><span class="nam">self</span><span class="op">.</span><span class="nam">output</span><span class="op">,</span> <span class="nam">stderr</span><span class="op">=</span><span class="nam">self</span><span class="op">.</span><span class="nam">output</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t774" href="#t774">774</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t775" href="#t775">775</a></span><span class="t"> <span class="key">def</span> <span class="nam">setUp</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t776" href="#t776">776</a></span><span class="t"> <span class="com"># Create a temporary directory.</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t777" href="#t777">777</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span> <span class="op">=</span> <span class="nam">os</span><span class="op">.</span><span class="nam">path</span><span class="op">.</span><span class="nam">join</span><span class="op">(</span><span class="nam">tempfile</span><span class="op">.</span><span class="nam">gettempdir</span><span class="op">(</span><span class="op">)</span><span class="op">,</span> <span class="str">'testcog_tempdir_'</span> <span class="op">+</span> <span class="nam">str</span><span class="op">(</span><span class="nam">random</span><span class="op">.</span><span class="nam">random</span><span class="op">(</span><span class="op">)</span><span class="op">)</span><span class="op">[</span><span class="num">2</span><span class="op">:</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t778" href="#t778">778</a></span><span class="t"> <span class="nam">os</span><span class="op">.</span><span class="nam">mkdir</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t779" href="#t779">779</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">olddir</span> <span class="op">=</span> <span class="nam">os</span><span class="op">.</span><span class="nam">getcwd</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t780" href="#t780">780</a></span><span class="t"> <span class="nam">os</span><span class="op">.</span><span class="nam">chdir</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t781" href="#t781">781</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">newCog</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t782" href="#t782">782</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t783" href="#t783">783</a></span><span class="t"> <span class="key">def</span> <span class="nam">tearDown</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t784" href="#t784">784</a></span><span class="t"> <span class="nam">os</span><span class="op">.</span><span class="nam">chdir</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">olddir</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t785" href="#t785">785</a></span><span class="t"> <span class="com"># Get rid of the temporary directory.</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t786" href="#t786">786</a></span><span class="t"> <span class="nam">shutil</span><span class="op">.</span><span class="nam">rmtree</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t787" href="#t787">787</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t788" href="#t788">788</a></span><span class="t"> <span class="key">def</span> <span class="nam">assertFilesSame</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">sFName1</span><span class="op">,</span> <span class="nam">sFName2</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t789" href="#t789">789</a></span><span class="t"> <span class="nam">text1</span> <span class="op">=</span> <span class="nam">open</span><span class="op">(</span><span class="nam">os</span><span class="op">.</span><span class="nam">path</span><span class="op">.</span><span class="nam">join</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">,</span> <span class="nam">sFName1</span><span class="op">)</span><span class="op">,</span> <span class="str">'rb'</span><span class="op">)</span><span class="op">.</span><span class="nam">read</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t790" href="#t790">790</a></span><span class="t"> <span class="nam">text2</span> <span class="op">=</span> <span class="nam">open</span><span class="op">(</span><span class="nam">os</span><span class="op">.</span><span class="nam">path</span><span class="op">.</span><span class="nam">join</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">,</span> <span class="nam">sFName2</span><span class="op">)</span><span class="op">,</span> <span class="str">'rb'</span><span class="op">)</span><span class="op">.</span><span class="nam">read</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t791" href="#t791">791</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">text1</span><span class="op">,</span> <span class="nam">text2</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t792" href="#t792">792</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t793" href="#t793">793</a></span><span class="t"> <span class="key">def</span> <span class="nam">assertFileContent</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">sFName</span><span class="op">,</span> <span class="nam">sContent</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t794" href="#t794">794</a></span><span class="t"> <span class="nam">sAbsName</span> <span class="op">=</span> <span class="nam">os</span><span class="op">.</span><span class="nam">path</span><span class="op">.</span><span class="nam">join</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">,</span> <span class="nam">sFName</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t795" href="#t795">795</a></span><span class="t"> <span class="nam">f</span> <span class="op">=</span> <span class="nam">open</span><span class="op">(</span><span class="nam">sAbsName</span><span class="op">,</span> <span class="str">'rb'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t796" href="#t796">796</a></span><span class="t"> <span class="key">try</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t797" href="#t797">797</a></span><span class="t"> <span class="nam">sFileContent</span> <span class="op">=</span> <span class="nam">f</span><span class="op">.</span><span class="nam">read</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t798" href="#t798">798</a></span><span class="t"> <span class="key">finally</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t799" href="#t799">799</a></span><span class="t"> <span class="nam">f</span><span class="op">.</span><span class="nam">close</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t800" href="#t800">800</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">sFileContent</span><span class="op">,</span> <span class="nam">to_bytes</span><span class="op">(</span><span class="nam">sContent</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t801" href="#t801">801</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t802" href="#t802">802</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t803" href="#t803">803</a></span><span class="t"><span class="key">class</span> <span class="nam">ArgumentHandlingTests</span><span class="op">(</span><span class="nam">TestCaseWithTempDir</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t804" href="#t804">804</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t805" href="#t805">805</a></span><span class="t"> <span class="key">def</span> <span class="nam">testArgumentFailure</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t806" href="#t806">806</a></span><span class="t"> <span class="com"># Return value 2 means usage problem.</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t807" href="#t807">807</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">main</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-j'</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> <span class="num">2</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t808" href="#t808">808</a></span><span class="t"> <span class="nam">output</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">output</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t809" href="#t809">809</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertIn</span><span class="op">(</span><span class="str">"option -j not recognized"</span><span class="op">,</span> <span class="nam">output</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t810" href="#t810">810</a></span><span class="t"> <span class="key">with</span> <span class="nam">self</span><span class="op">.</span><span class="nam">assertRaisesRegex</span><span class="op">(</span><span class="nam">CogUsageError</span><span class="op">,</span> <span class="str">r"^No files to process$"</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t811" href="#t811">811</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t812" href="#t812">812</a></span><span class="t"> <span class="key">with</span> <span class="nam">self</span><span class="op">.</span><span class="nam">assertRaisesRegex</span><span class="op">(</span><span class="nam">CogUsageError</span><span class="op">,</span> <span class="str">r"^option -j not recognized$"</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t813" href="#t813">813</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-j'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t814" href="#t814">814</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t815" href="#t815">815</a></span><span class="t"> <span class="key">def</span> <span class="nam">testNoDashOAndAtFile</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t816" href="#t816">816</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t817" href="#t817">817</a></span><span class="t"> <span class="str">'cogfiles.txt'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t818" href="#t818">818</a></span><span class="t"><span class="str"> # Please run cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t819" href="#t819">819</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t820" href="#t820">820</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t693" href="#t693">693</a></span><span class="t"><span class="key">class</span> <span class="nam">CogGeneratorGetCodeTests</span><span class="op">(</span><span class="nam">TestCase</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t694" href="#t694">694</a></span><span class="t"> <span class="str">""" Unit tests against CogGenerator to see if its getCode() method works</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t695" href="#t695">695</a></span><span class="t"><span class="str"> properly.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t696" href="#t696">696</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t697" href="#t697">697</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t698" href="#t698">698</a></span><span class="t"> <span class="key">def</span> <span class="nam">setUp</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t699" href="#t699">699</a></span><span class="t"> <span class="str">""" All tests get a generator to use, and short same-length names for</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t700" href="#t700">700</a></span><span class="t"><span class="str"> the functions we're going to use.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t701" href="#t701">701</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t702" href="#t702">702</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">gen</span> <span class="op">=</span> <span class="nam">CogGenerator</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t703" href="#t703">703</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">m</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">gen</span><span class="op">.</span><span class="nam">parseMarker</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t704" href="#t704">704</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">l</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">gen</span><span class="op">.</span><span class="nam">parseLine</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t705" href="#t705">705</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t706" href="#t706">706</a></span><span class="t"> <span class="key">def</span> <span class="nam">testEmpty</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t707" href="#t707">707</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">m</span><span class="op">(</span><span class="str">'// [[[cog'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t708" href="#t708">708</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">m</span><span class="op">(</span><span class="str">'// ]]]'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t709" href="#t709">709</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">gen</span><span class="op">.</span><span class="nam">getCode</span><span class="op">(</span><span class="op">)</span><span class="op">,</span> <span class="str">''</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t710" href="#t710">710</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t711" href="#t711">711</a></span><span class="t"> <span class="key">def</span> <span class="nam">testSimple</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t712" href="#t712">712</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">m</span><span class="op">(</span><span class="str">'// [[[cog'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t713" href="#t713">713</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">l</span><span class="op">(</span><span class="str">' print "hello"'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t714" href="#t714">714</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">l</span><span class="op">(</span><span class="str">' print "bye"'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t715" href="#t715">715</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">m</span><span class="op">(</span><span class="str">'// ]]]'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t716" href="#t716">716</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">gen</span><span class="op">.</span><span class="nam">getCode</span><span class="op">(</span><span class="op">)</span><span class="op">,</span> <span class="str">'print "hello"\nprint "bye"'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t717" href="#t717">717</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t718" href="#t718">718</a></span><span class="t"> <span class="key">def</span> <span class="nam">testCompressed1</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t719" href="#t719">719</a></span><span class="t"> <span class="com"># For a while, I supported compressed code blocks, but no longer.</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t720" href="#t720">720</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">m</span><span class="op">(</span><span class="str">'// [[[cog: print """'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t721" href="#t721">721</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">l</span><span class="op">(</span><span class="str">'// hello'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t722" href="#t722">722</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">l</span><span class="op">(</span><span class="str">'// bye'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t723" href="#t723">723</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">m</span><span class="op">(</span><span class="str">'// """)]]]'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t724" href="#t724">724</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">gen</span><span class="op">.</span><span class="nam">getCode</span><span class="op">(</span><span class="op">)</span><span class="op">,</span> <span class="str">'hello\nbye'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t725" href="#t725">725</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t726" href="#t726">726</a></span><span class="t"> <span class="key">def</span> <span class="nam">testCompressed2</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t727" href="#t727">727</a></span><span class="t"> <span class="com"># For a while, I supported compressed code blocks, but no longer.</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t728" href="#t728">728</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">m</span><span class="op">(</span><span class="str">'// [[[cog: print """'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t729" href="#t729">729</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">l</span><span class="op">(</span><span class="str">'hello'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t730" href="#t730">730</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">l</span><span class="op">(</span><span class="str">'bye'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t731" href="#t731">731</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">m</span><span class="op">(</span><span class="str">'// """)]]]'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t732" href="#t732">732</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">gen</span><span class="op">.</span><span class="nam">getCode</span><span class="op">(</span><span class="op">)</span><span class="op">,</span> <span class="str">'hello\nbye'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t733" href="#t733">733</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t734" href="#t734">734</a></span><span class="t"> <span class="key">def</span> <span class="nam">testCompressed3</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t735" href="#t735">735</a></span><span class="t"> <span class="com"># For a while, I supported compressed code blocks, but no longer.</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t736" href="#t736">736</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">m</span><span class="op">(</span><span class="str">'// [[[cog'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t737" href="#t737">737</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">l</span><span class="op">(</span><span class="str">'print """hello'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t738" href="#t738">738</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">l</span><span class="op">(</span><span class="str">'bye'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t739" href="#t739">739</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">m</span><span class="op">(</span><span class="str">'// """)]]]'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t740" href="#t740">740</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">gen</span><span class="op">.</span><span class="nam">getCode</span><span class="op">(</span><span class="op">)</span><span class="op">,</span> <span class="str">'print """hello\nbye'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t741" href="#t741">741</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t742" href="#t742">742</a></span><span class="t"> <span class="key">def</span> <span class="nam">testCompressed4</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t743" href="#t743">743</a></span><span class="t"> <span class="com"># For a while, I supported compressed code blocks, but no longer.</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t744" href="#t744">744</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">m</span><span class="op">(</span><span class="str">'// [[[cog: print """'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t745" href="#t745">745</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">l</span><span class="op">(</span><span class="str">'hello'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t746" href="#t746">746</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">l</span><span class="op">(</span><span class="str">'bye""")'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t747" href="#t747">747</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">m</span><span class="op">(</span><span class="str">'// ]]]'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t748" href="#t748">748</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">gen</span><span class="op">.</span><span class="nam">getCode</span><span class="op">(</span><span class="op">)</span><span class="op">,</span> <span class="str">'hello\nbye""")'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t749" href="#t749">749</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t750" href="#t750">750</a></span><span class="t"> <span class="key">def</span> <span class="nam">testNoCommonPrefixForMarkers</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t751" href="#t751">751</a></span><span class="t"> <span class="com"># It's important to be able to use #if 0 to hide lines from a</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t752" href="#t752">752</a></span><span class="t"> <span class="com"># C++ compiler.</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t753" href="#t753">753</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">m</span><span class="op">(</span><span class="str">'#if 0 //[[[cog'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t754" href="#t754">754</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">l</span><span class="op">(</span><span class="str">'\timport cog, sys'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t755" href="#t755">755</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">l</span><span class="op">(</span><span class="str">''</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t756" href="#t756">756</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">l</span><span class="op">(</span><span class="str">'\tprint sys.argv'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t757" href="#t757">757</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">m</span><span class="op">(</span><span class="str">'#endif //]]]'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t758" href="#t758">758</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">gen</span><span class="op">.</span><span class="nam">getCode</span><span class="op">(</span><span class="op">)</span><span class="op">,</span> <span class="str">'import cog, sys\n\nprint sys.argv'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t759" href="#t759">759</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t760" href="#t760">760</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t761" href="#t761">761</a></span><span class="t"><span class="key">class</span> <span class="nam">TestCaseWithTempDir</span><span class="op">(</span><span class="nam">TestCase</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t762" href="#t762">762</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t763" href="#t763">763</a></span><span class="t"> <span class="key">def</span> <span class="nam">newCog</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t764" href="#t764">764</a></span><span class="t"> <span class="str">""" Initialize the cog members for another run.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t765" href="#t765">765</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t766" href="#t766">766</a></span><span class="t"> <span class="com"># Create a cog engine, and catch its output.</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t767" href="#t767">767</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span> <span class="op">=</span> <span class="nam">Cog</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t768" href="#t768">768</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">output</span> <span class="op">=</span> <span class="nam">io</span><span class="op">.</span><span class="nam">StringIO</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t769" href="#t769">769</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">setOutput</span><span class="op">(</span><span class="nam">stdout</span><span class="op">=</span><span class="nam">self</span><span class="op">.</span><span class="nam">output</span><span class="op">,</span> <span class="nam">stderr</span><span class="op">=</span><span class="nam">self</span><span class="op">.</span><span class="nam">output</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t770" href="#t770">770</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t771" href="#t771">771</a></span><span class="t"> <span class="key">def</span> <span class="nam">setUp</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t772" href="#t772">772</a></span><span class="t"> <span class="com"># Create a temporary directory.</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t773" href="#t773">773</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span> <span class="op">=</span> <span class="nam">os</span><span class="op">.</span><span class="nam">path</span><span class="op">.</span><span class="nam">join</span><span class="op">(</span><span class="nam">tempfile</span><span class="op">.</span><span class="nam">gettempdir</span><span class="op">(</span><span class="op">)</span><span class="op">,</span> <span class="str">'testcog_tempdir_'</span> <span class="op">+</span> <span class="nam">str</span><span class="op">(</span><span class="nam">random</span><span class="op">.</span><span class="nam">random</span><span class="op">(</span><span class="op">)</span><span class="op">)</span><span class="op">[</span><span class="num">2</span><span class="op">:</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t774" href="#t774">774</a></span><span class="t"> <span class="nam">os</span><span class="op">.</span><span class="nam">mkdir</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t775" href="#t775">775</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">olddir</span> <span class="op">=</span> <span class="nam">os</span><span class="op">.</span><span class="nam">getcwd</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t776" href="#t776">776</a></span><span class="t"> <span class="nam">os</span><span class="op">.</span><span class="nam">chdir</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t777" href="#t777">777</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">newCog</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t778" href="#t778">778</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t779" href="#t779">779</a></span><span class="t"> <span class="key">def</span> <span class="nam">tearDown</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t780" href="#t780">780</a></span><span class="t"> <span class="nam">os</span><span class="op">.</span><span class="nam">chdir</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">olddir</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t781" href="#t781">781</a></span><span class="t"> <span class="com"># Get rid of the temporary directory.</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t782" href="#t782">782</a></span><span class="t"> <span class="nam">shutil</span><span class="op">.</span><span class="nam">rmtree</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t783" href="#t783">783</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t784" href="#t784">784</a></span><span class="t"> <span class="key">def</span> <span class="nam">assertFilesSame</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">sFName1</span><span class="op">,</span> <span class="nam">sFName2</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t785" href="#t785">785</a></span><span class="t"> <span class="nam">text1</span> <span class="op">=</span> <span class="nam">open</span><span class="op">(</span><span class="nam">os</span><span class="op">.</span><span class="nam">path</span><span class="op">.</span><span class="nam">join</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">,</span> <span class="nam">sFName1</span><span class="op">)</span><span class="op">,</span> <span class="str">'rb'</span><span class="op">)</span><span class="op">.</span><span class="nam">read</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t786" href="#t786">786</a></span><span class="t"> <span class="nam">text2</span> <span class="op">=</span> <span class="nam">open</span><span class="op">(</span><span class="nam">os</span><span class="op">.</span><span class="nam">path</span><span class="op">.</span><span class="nam">join</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">,</span> <span class="nam">sFName2</span><span class="op">)</span><span class="op">,</span> <span class="str">'rb'</span><span class="op">)</span><span class="op">.</span><span class="nam">read</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t787" href="#t787">787</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">text1</span><span class="op">,</span> <span class="nam">text2</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t788" href="#t788">788</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t789" href="#t789">789</a></span><span class="t"> <span class="key">def</span> <span class="nam">assertFileContent</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">sFName</span><span class="op">,</span> <span class="nam">sContent</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t790" href="#t790">790</a></span><span class="t"> <span class="nam">sAbsName</span> <span class="op">=</span> <span class="nam">os</span><span class="op">.</span><span class="nam">path</span><span class="op">.</span><span class="nam">join</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">,</span> <span class="nam">sFName</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t791" href="#t791">791</a></span><span class="t"> <span class="nam">f</span> <span class="op">=</span> <span class="nam">open</span><span class="op">(</span><span class="nam">sAbsName</span><span class="op">,</span> <span class="str">'rb'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t792" href="#t792">792</a></span><span class="t"> <span class="key">try</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t793" href="#t793">793</a></span><span class="t"> <span class="nam">sFileContent</span> <span class="op">=</span> <span class="nam">f</span><span class="op">.</span><span class="nam">read</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t794" href="#t794">794</a></span><span class="t"> <span class="key">finally</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t795" href="#t795">795</a></span><span class="t"> <span class="nam">f</span><span class="op">.</span><span class="nam">close</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t796" href="#t796">796</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">sFileContent</span><span class="op">,</span> <span class="nam">sContent</span><span class="op">.</span><span class="nam">encode</span><span class="op">(</span><span class="str">"utf-8"</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t797" href="#t797">797</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t798" href="#t798">798</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t799" href="#t799">799</a></span><span class="t"><span class="key">class</span> <span class="nam">ArgumentHandlingTests</span><span class="op">(</span><span class="nam">TestCaseWithTempDir</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t800" href="#t800">800</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t801" href="#t801">801</a></span><span class="t"> <span class="key">def</span> <span class="nam">testArgumentFailure</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t802" href="#t802">802</a></span><span class="t"> <span class="com"># Return value 2 means usage problem.</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t803" href="#t803">803</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">main</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-j'</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> <span class="num">2</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t804" href="#t804">804</a></span><span class="t"> <span class="nam">output</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">output</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t805" href="#t805">805</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertIn</span><span class="op">(</span><span class="str">"option -j not recognized"</span><span class="op">,</span> <span class="nam">output</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t806" href="#t806">806</a></span><span class="t"> <span class="key">with</span> <span class="nam">self</span><span class="op">.</span><span class="nam">assertRaisesRegex</span><span class="op">(</span><span class="nam">CogUsageError</span><span class="op">,</span> <span class="str">r"^No files to process$"</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t807" href="#t807">807</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t808" href="#t808">808</a></span><span class="t"> <span class="key">with</span> <span class="nam">self</span><span class="op">.</span><span class="nam">assertRaisesRegex</span><span class="op">(</span><span class="nam">CogUsageError</span><span class="op">,</span> <span class="str">r"^option -j not recognized$"</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t809" href="#t809">809</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-j'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t810" href="#t810">810</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t811" href="#t811">811</a></span><span class="t"> <span class="key">def</span> <span class="nam">testNoDashOAndAtFile</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t812" href="#t812">812</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t813" href="#t813">813</a></span><span class="t"> <span class="str">'cogfiles.txt'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t814" href="#t814">814</a></span><span class="t"><span class="str"> # Please run cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t815" href="#t815">815</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t816" href="#t816">816</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t817" href="#t817">817</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t818" href="#t818">818</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t819" href="#t819">819</a></span><span class="t"> <span class="key">with</span> <span class="nam">self</span><span class="op">.</span><span class="nam">assertRaisesRegex</span><span class="op">(</span><span class="nam">CogUsageError</span><span class="op">,</span> <span class="str">r"^Can't use -o with @file$"</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t820" href="#t820">820</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-o'</span><span class="op">,</span> <span class="str">'foo'</span><span class="op">,</span> <span class="str">'@cogfiles.txt'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t821" href="#t821">821</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t822" href="#t822">822</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t823" href="#t823">823</a></span><span class="t"> <span class="key">with</span> <span class="nam">self</span><span class="op">.</span><span class="nam">assertRaisesRegex</span><span class="op">(</span><span class="nam">CogUsageError</span><span class="op">,</span> <span class="str">r"^Can't use -o with @file$"</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t824" href="#t824">824</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-o'</span><span class="op">,</span> <span class="str">'foo'</span><span class="op">,</span> <span class="str">'@cogfiles.txt'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t825" href="#t825">825</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t826" href="#t826">826</a></span><span class="t"> <span class="key">def</span> <span class="nam">testDashV</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t827" href="#t827">827</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">main</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-v'</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> <span class="num">0</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t828" href="#t828">828</a></span><span class="t"> <span class="nam">output</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">output</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t829" href="#t829">829</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="str">'Cog version %s\n'</span> <span class="op">%</span> <span class="nam">__version__</span><span class="op">,</span> <span class="nam">output</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t830" href="#t830">830</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t831" href="#t831">831</a></span><span class="t"> <span class="key">def</span> <span class="nam">producesHelp</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">args</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t832" href="#t832">832</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">newCog</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t833" href="#t833">833</a></span><span class="t"> <span class="nam">argv</span> <span class="op">=</span> <span class="op">[</span><span class="str">'argv0'</span><span class="op">]</span> <span class="op">+</span> <span class="nam">args</span><span class="op">.</span><span class="nam">split</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t834" href="#t834">834</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">main</span><span class="op">(</span><span class="nam">argv</span><span class="op">)</span><span class="op">,</span> <span class="num">0</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t835" href="#t835">835</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">usage</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">output</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t836" href="#t836">836</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t837" href="#t837">837</a></span><span class="t"> <span class="key">def</span> <span class="nam">testDashH</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t838" href="#t838">838</a></span><span class="t"> <span class="com"># -h or -? anywhere on the command line should just print help.</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t839" href="#t839">839</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">producesHelp</span><span class="op">(</span><span class="str">"-h"</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t840" href="#t840">840</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">producesHelp</span><span class="op">(</span><span class="str">"-?"</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t841" href="#t841">841</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">producesHelp</span><span class="op">(</span><span class="str">"fooey.txt -h"</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t842" href="#t842">842</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">producesHelp</span><span class="op">(</span><span class="str">"-o -r @fooey.txt -? @booey.txt"</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t843" href="#t843">843</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t844" href="#t844">844</a></span><span class="t"> <span class="key">def</span> <span class="nam">testDashOAndDashR</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t845" href="#t845">845</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t846" href="#t846">846</a></span><span class="t"> <span class="str">'cogfile.txt'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t847" href="#t847">847</a></span><span class="t"><span class="str"> # Please run cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t848" href="#t848">848</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t849" href="#t849">849</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t822" href="#t822">822</a></span><span class="t"> <span class="key">def</span> <span class="nam">testDashV</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t823" href="#t823">823</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">main</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-v'</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> <span class="num">0</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t824" href="#t824">824</a></span><span class="t"> <span class="nam">output</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">output</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t825" href="#t825">825</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="str">'Cog version %s\n'</span> <span class="op">%</span> <span class="nam">__version__</span><span class="op">,</span> <span class="nam">output</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t826" href="#t826">826</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t827" href="#t827">827</a></span><span class="t"> <span class="key">def</span> <span class="nam">producesHelp</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">args</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t828" href="#t828">828</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">newCog</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t829" href="#t829">829</a></span><span class="t"> <span class="nam">argv</span> <span class="op">=</span> <span class="op">[</span><span class="str">'argv0'</span><span class="op">]</span> <span class="op">+</span> <span class="nam">args</span><span class="op">.</span><span class="nam">split</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t830" href="#t830">830</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">main</span><span class="op">(</span><span class="nam">argv</span><span class="op">)</span><span class="op">,</span> <span class="num">0</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t831" href="#t831">831</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">usage</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">output</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t832" href="#t832">832</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t833" href="#t833">833</a></span><span class="t"> <span class="key">def</span> <span class="nam">testDashH</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t834" href="#t834">834</a></span><span class="t"> <span class="com"># -h or -? anywhere on the command line should just print help.</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t835" href="#t835">835</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">producesHelp</span><span class="op">(</span><span class="str">"-h"</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t836" href="#t836">836</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">producesHelp</span><span class="op">(</span><span class="str">"-?"</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t837" href="#t837">837</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">producesHelp</span><span class="op">(</span><span class="str">"fooey.txt -h"</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t838" href="#t838">838</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">producesHelp</span><span class="op">(</span><span class="str">"-o -r @fooey.txt -? @booey.txt"</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t839" href="#t839">839</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t840" href="#t840">840</a></span><span class="t"> <span class="key">def</span> <span class="nam">testDashOAndDashR</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t841" href="#t841">841</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t842" href="#t842">842</a></span><span class="t"> <span class="str">'cogfile.txt'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t843" href="#t843">843</a></span><span class="t"><span class="str"> # Please run cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t844" href="#t844">844</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t845" href="#t845">845</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t846" href="#t846">846</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t847" href="#t847">847</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t848" href="#t848">848</a></span><span class="t"> <span class="key">with</span> <span class="nam">self</span><span class="op">.</span><span class="nam">assertRaisesRegex</span><span class="op">(</span><span class="nam">CogUsageError</span><span class="op">,</span> <span class="str">r"^Can't use -o with -r \(they are opposites\)$"</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t849" href="#t849">849</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-o'</span><span class="op">,</span> <span class="str">'foo'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'cogfile.txt'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t850" href="#t850">850</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t851" href="#t851">851</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t852" href="#t852">852</a></span><span class="t"> <span class="key">with</span> <span class="nam">self</span><span class="op">.</span><span class="nam">assertRaisesRegex</span><span class="op">(</span><span class="nam">CogUsageError</span><span class="op">,</span> <span class="str">r"^Can't use -o with -r \(they are opposites\)$"</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t853" href="#t853">853</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-o'</span><span class="op">,</span> <span class="str">'foo'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'cogfile.txt'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t854" href="#t854">854</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t855" href="#t855">855</a></span><span class="t"> <span class="key">def</span> <span class="nam">testDashZ</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t856" href="#t856">856</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t857" href="#t857">857</a></span><span class="t"> <span class="str">'test.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t858" href="#t858">858</a></span><span class="t"><span class="str"> // This is my C++ file.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t859" href="#t859">859</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t860" href="#t860">860</a></span><span class="t"><span class="str"> fnames = ['DoSomething', 'DoAnotherThing', 'DoLastThing']</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t861" href="#t861">861</a></span><span class="t"><span class="str"> for fn in fnames:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t862" href="#t862">862</a></span><span class="t"><span class="str"> cog.outl("void %s();" % fn)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t863" href="#t863">863</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t864" href="#t864">864</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t865" href="#t865">865</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t866" href="#t866">866</a></span><span class="t"> <span class="str">'test.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t867" href="#t867">867</a></span><span class="t"><span class="str"> // This is my C++ file.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t868" href="#t868">868</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t869" href="#t869">869</a></span><span class="t"><span class="str"> fnames = ['DoSomething', 'DoAnotherThing', 'DoLastThing']</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t870" href="#t870">870</a></span><span class="t"><span class="str"> for fn in fnames:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t871" href="#t871">871</a></span><span class="t"><span class="str"> cog.outl("void %s();" % fn)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t872" href="#t872">872</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t873" href="#t873">873</a></span><span class="t"><span class="str"> void DoSomething();</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t874" href="#t874">874</a></span><span class="t"><span class="str"> void DoAnotherThing();</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t875" href="#t875">875</a></span><span class="t"><span class="str"> void DoLastThing();</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t876" href="#t876">876</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t877" href="#t877">877</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t878" href="#t878">878</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t879" href="#t879">879</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t880" href="#t880">880</a></span><span class="t"> <span class="key">with</span> <span class="nam">self</span><span class="op">.</span><span class="nam">assertRaisesRegex</span><span class="op">(</span><span class="nam">CogError</span><span class="op">,</span> <span class="str">r"^test.cog\(6\): Missing '\[\[\[end\]\]\]' before end of file.$"</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t881" href="#t881">881</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'test.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t882" href="#t882">882</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">newCog</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t883" href="#t883">883</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'-z'</span><span class="op">,</span> <span class="str">'test.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t884" href="#t884">884</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'test.cog'</span><span class="op">,</span> <span class="str">'test.out'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t885" href="#t885">885</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t886" href="#t886">886</a></span><span class="t"> <span class="key">def</span> <span class="nam">testBadDashD</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t887" href="#t887">887</a></span><span class="t"> <span class="key">with</span> <span class="nam">self</span><span class="op">.</span><span class="nam">assertRaisesRegex</span><span class="op">(</span><span class="nam">CogUsageError</span><span class="op">,</span> <span class="str">r"^-D takes a name=value argument$"</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t888" href="#t888">888</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-Dfooey'</span><span class="op">,</span> <span class="str">'cog.txt'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t889" href="#t889">889</a></span><span class="t"> <span class="key">with</span> <span class="nam">self</span><span class="op">.</span><span class="nam">assertRaisesRegex</span><span class="op">(</span><span class="nam">CogUsageError</span><span class="op">,</span> <span class="str">r"^-D takes a name=value argument$"</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t890" href="#t890">890</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-D'</span><span class="op">,</span> <span class="str">'fooey'</span><span class="op">,</span> <span class="str">'cog.txt'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t891" href="#t891">891</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t892" href="#t892">892</a></span><span class="t"> <span class="key">def</span> <span class="nam">testBadMarkers</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t893" href="#t893">893</a></span><span class="t"> <span class="key">with</span> <span class="nam">self</span><span class="op">.</span><span class="nam">assertRaisesRegex</span><span class="op">(</span><span class="nam">CogUsageError</span><span class="op">,</span> <span class="str">r"^--markers requires 3 values separated by spaces, could not parse 'X'$"</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t894" href="#t894">894</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'--markers=X'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t895" href="#t895">895</a></span><span class="t"> <span class="key">with</span> <span class="nam">self</span><span class="op">.</span><span class="nam">assertRaisesRegex</span><span class="op">(</span><span class="nam">CogUsageError</span><span class="op">,</span> <span class="str">r"^--markers requires 3 values separated by spaces, could not parse 'A B C D'$"</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t896" href="#t896">896</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'--markers=A B C D'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t897" href="#t897">897</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t898" href="#t898">898</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t899" href="#t899">899</a></span><span class="t"><span class="key">class</span> <span class="nam">TestMain</span><span class="op">(</span><span class="nam">TestCaseWithTempDir</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t900" href="#t900">900</a></span><span class="t"> <span class="key">def</span> <span class="nam">setUp</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t901" href="#t901">901</a></span><span class="t"> <span class="nam">super</span><span class="op">(</span><span class="nam">TestMain</span><span class="op">,</span> <span class="nam">self</span><span class="op">)</span><span class="op">.</span><span class="nam">setUp</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t902" href="#t902">902</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">old_argv</span> <span class="op">=</span> <span class="nam">sys</span><span class="op">.</span><span class="nam">argv</span><span class="op">[</span><span class="op">:</span><span class="op">]</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t903" href="#t903">903</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">old_stderr</span> <span class="op">=</span> <span class="nam">sys</span><span class="op">.</span><span class="nam">stderr</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t904" href="#t904">904</a></span><span class="t"> <span class="nam">sys</span><span class="op">.</span><span class="nam">stderr</span> <span class="op">=</span> <span class="nam">StringIO</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t905" href="#t905">905</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t906" href="#t906">906</a></span><span class="t"> <span class="key">def</span> <span class="nam">tearDown</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t907" href="#t907">907</a></span><span class="t"> <span class="nam">sys</span><span class="op">.</span><span class="nam">stderr</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">old_stderr</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t908" href="#t908">908</a></span><span class="t"> <span class="nam">sys</span><span class="op">.</span><span class="nam">argv</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">old_argv</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t909" href="#t909">909</a></span><span class="t"> <span class="nam">sys</span><span class="op">.</span><span class="nam">modules</span><span class="op">.</span><span class="nam">pop</span><span class="op">(</span><span class="str">'mycode'</span><span class="op">,</span> <span class="key">None</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t910" href="#t910">910</a></span><span class="t"> <span class="nam">super</span><span class="op">(</span><span class="nam">TestMain</span><span class="op">,</span> <span class="nam">self</span><span class="op">)</span><span class="op">.</span><span class="nam">tearDown</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t911" href="#t911">911</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t912" href="#t912">912</a></span><span class="t"> <span class="key">def</span> <span class="nam">test_main_function</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t913" href="#t913">913</a></span><span class="t"> <span class="nam">sys</span><span class="op">.</span><span class="nam">argv</span> <span class="op">=</span> <span class="op">[</span><span class="str">"argv0"</span><span class="op">,</span> <span class="str">"-Z"</span><span class="op">]</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t914" href="#t914">914</a></span><span class="t"> <span class="nam">ret</span> <span class="op">=</span> <span class="nam">main</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t915" href="#t915">915</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">ret</span><span class="op">,</span> <span class="num">2</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t916" href="#t916">916</a></span><span class="t"> <span class="nam">stderr</span> <span class="op">=</span> <span class="nam">sys</span><span class="op">.</span><span class="nam">stderr</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t917" href="#t917">917</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">stderr</span><span class="op">,</span> <span class="str">'option -Z not recognized\n(for help use -h)\n'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t918" href="#t918">918</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t919" href="#t919">919</a></span><span class="t"> <span class="nam">files</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t920" href="#t920">920</a></span><span class="t"> <span class="str">'test.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t921" href="#t921">921</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t922" href="#t922">922</a></span><span class="t"><span class="str"> def func():</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t923" href="#t923">923</a></span><span class="t"><span class="str"> import mycode</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t924" href="#t924">924</a></span><span class="t"><span class="str"> mycode.boom()</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t925" href="#t925">925</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t926" href="#t926">926</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t927" href="#t927">927</a></span><span class="t"><span class="str"> -----</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t928" href="#t928">928</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t929" href="#t929">929</a></span><span class="t"><span class="str"> func()</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t930" href="#t930">930</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t931" href="#t931">931</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t932" href="#t932">932</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t933" href="#t933">933</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t934" href="#t934">934</a></span><span class="t"> <span class="str">'mycode.py'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t935" href="#t935">935</a></span><span class="t"><span class="str"> def boom():</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t936" href="#t936">936</a></span><span class="t"><span class="str"> [][0]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t937" href="#t937">937</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t938" href="#t938">938</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t939" href="#t939">939</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t940" href="#t940">940</a></span><span class="t"> <span class="key">def</span> <span class="nam">test_error_report</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t941" href="#t941">941</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">check_error_report</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t942" href="#t942">942</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t943" href="#t943">943</a></span><span class="t"> <span class="key">def</span> <span class="nam">test_error_report_with_prologue</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t944" href="#t944">944</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">check_error_report</span><span class="op">(</span><span class="str">"-p"</span><span class="op">,</span> <span class="str">"#1\n#2"</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t945" href="#t945">945</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t946" href="#t946">946</a></span><span class="t"> <span class="key">def</span> <span class="nam">check_error_report</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="op">*</span><span class="nam">args</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t947" href="#t947">947</a></span><span class="t"> <span class="str">"""Check that the error report is right."""</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t948" href="#t948">948</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">files</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t949" href="#t949">949</a></span><span class="t"> <span class="nam">sys</span><span class="op">.</span><span class="nam">argv</span> <span class="op">=</span> <span class="op">[</span><span class="str">"argv0"</span><span class="op">]</span> <span class="op">+</span> <span class="nam">list</span><span class="op">(</span><span class="nam">args</span><span class="op">)</span> <span class="op">+</span> <span class="op">[</span><span class="str">"-r"</span><span class="op">,</span> <span class="str">"test.cog"</span><span class="op">]</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t950" href="#t950">950</a></span><span class="t"> <span class="nam">main</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t951" href="#t951">951</a></span><span class="t"> <span class="nam">expected</span> <span class="op">=</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t952" href="#t952">952</a></span><span class="t"><span class="str"> Traceback (most recent call last):</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t953" href="#t953">953</a></span><span class="t"><span class="str"> File "test.cog", line 9, in <module></span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t954" href="#t954">954</a></span><span class="t"><span class="str"> func()</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t955" href="#t955">955</a></span><span class="t"><span class="str"> File "test.cog", line 4, in func</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t956" href="#t956">956</a></span><span class="t"><span class="str"> mycode.boom()</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t957" href="#t957">957</a></span><span class="t"><span class="str"> File "MYCODE", line 2, in boom</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t958" href="#t958">958</a></span><span class="t"><span class="str"> [][0]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t959" href="#t959">959</a></span><span class="t"><span class="str"> IndexError: list index out of range</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t960" href="#t960">960</a></span><span class="t"><span class="str"> """</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t961" href="#t961">961</a></span><span class="t"> <span class="key">if</span> <span class="nam">PY3</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t962" href="#t962">962</a></span><span class="t"> <span class="nam">expected</span> <span class="op">=</span> <span class="nam">expected</span><span class="op">.</span><span class="nam">replace</span><span class="op">(</span><span class="str">"MYCODE"</span><span class="op">,</span> <span class="nam">os</span><span class="op">.</span><span class="nam">path</span><span class="op">.</span><span class="nam">abspath</span><span class="op">(</span><span class="str">"mycode.py"</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t963" href="#t963">963</a></span><span class="t"> <span class="key">else</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t964" href="#t964">964</a></span><span class="t"> <span class="nam">expected</span> <span class="op">=</span> <span class="nam">expected</span><span class="op">.</span><span class="nam">replace</span><span class="op">(</span><span class="str">"MYCODE"</span><span class="op">,</span> <span class="str">"mycode.py"</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t965" href="#t965">965</a></span><span class="t"> <span class="key">assert</span> <span class="nam">expected</span> <span class="op">==</span> <span class="nam">sys</span><span class="op">.</span><span class="nam">stderr</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t966" href="#t966">966</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t967" href="#t967">967</a></span><span class="t"> <span class="key">def</span> <span class="nam">test_error_in_prologue</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t968" href="#t968">968</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">files</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t969" href="#t969">969</a></span><span class="t"> <span class="nam">sys</span><span class="op">.</span><span class="nam">argv</span> <span class="op">=</span> <span class="op">[</span><span class="str">"argv0"</span><span class="op">,</span> <span class="str">"-p"</span><span class="op">,</span> <span class="str">"import mycode; mycode.boom()"</span><span class="op">,</span> <span class="str">"-r"</span><span class="op">,</span> <span class="str">"test.cog"</span><span class="op">]</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t970" href="#t970">970</a></span><span class="t"> <span class="nam">main</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t971" href="#t971">971</a></span><span class="t"> <span class="nam">expected</span> <span class="op">=</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t972" href="#t972">972</a></span><span class="t"><span class="str"> Traceback (most recent call last):</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t973" href="#t973">973</a></span><span class="t"><span class="str"> File "<prologue>", line 1, in <module></span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t974" href="#t974">974</a></span><span class="t"><span class="str"> import mycode; mycode.boom()</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t975" href="#t975">975</a></span><span class="t"><span class="str"> File "MYCODE", line 2, in boom</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t976" href="#t976">976</a></span><span class="t"><span class="str"> [][0]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t977" href="#t977">977</a></span><span class="t"><span class="str"> IndexError: list index out of range</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t978" href="#t978">978</a></span><span class="t"><span class="str"> """</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t979" href="#t979">979</a></span><span class="t"> <span class="key">if</span> <span class="nam">PY3</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t980" href="#t980">980</a></span><span class="t"> <span class="nam">expected</span> <span class="op">=</span> <span class="nam">expected</span><span class="op">.</span><span class="nam">replace</span><span class="op">(</span><span class="str">"MYCODE"</span><span class="op">,</span> <span class="nam">os</span><span class="op">.</span><span class="nam">path</span><span class="op">.</span><span class="nam">abspath</span><span class="op">(</span><span class="str">"mycode.py"</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t981" href="#t981">981</a></span><span class="t"> <span class="key">else</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t982" href="#t982">982</a></span><span class="t"> <span class="nam">expected</span> <span class="op">=</span> <span class="nam">expected</span><span class="op">.</span><span class="nam">replace</span><span class="op">(</span><span class="str">"MYCODE"</span><span class="op">,</span> <span class="str">"mycode.py"</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t983" href="#t983">983</a></span><span class="t"> <span class="key">assert</span> <span class="nam">expected</span> <span class="op">==</span> <span class="nam">sys</span><span class="op">.</span><span class="nam">stderr</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t984" href="#t984">984</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t985" href="#t985">985</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t986" href="#t986">986</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t987" href="#t987">987</a></span><span class="t"><span class="key">class</span> <span class="nam">TestFileHandling</span><span class="op">(</span><span class="nam">TestCaseWithTempDir</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t988" href="#t988">988</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t989" href="#t989">989</a></span><span class="t"> <span class="key">def</span> <span class="nam">testSimple</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t990" href="#t990">990</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t991" href="#t991">991</a></span><span class="t"> <span class="str">'test.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t851" href="#t851">851</a></span><span class="t"> <span class="key">def</span> <span class="nam">testDashZ</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t852" href="#t852">852</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t853" href="#t853">853</a></span><span class="t"> <span class="str">'test.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t854" href="#t854">854</a></span><span class="t"><span class="str"> // This is my C++ file.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t855" href="#t855">855</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t856" href="#t856">856</a></span><span class="t"><span class="str"> fnames = ['DoSomething', 'DoAnotherThing', 'DoLastThing']</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t857" href="#t857">857</a></span><span class="t"><span class="str"> for fn in fnames:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t858" href="#t858">858</a></span><span class="t"><span class="str"> cog.outl("void %s();" % fn)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t859" href="#t859">859</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t860" href="#t860">860</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t861" href="#t861">861</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t862" href="#t862">862</a></span><span class="t"> <span class="str">'test.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t863" href="#t863">863</a></span><span class="t"><span class="str"> // This is my C++ file.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t864" href="#t864">864</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t865" href="#t865">865</a></span><span class="t"><span class="str"> fnames = ['DoSomething', 'DoAnotherThing', 'DoLastThing']</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t866" href="#t866">866</a></span><span class="t"><span class="str"> for fn in fnames:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t867" href="#t867">867</a></span><span class="t"><span class="str"> cog.outl("void %s();" % fn)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t868" href="#t868">868</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t869" href="#t869">869</a></span><span class="t"><span class="str"> void DoSomething();</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t870" href="#t870">870</a></span><span class="t"><span class="str"> void DoAnotherThing();</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t871" href="#t871">871</a></span><span class="t"><span class="str"> void DoLastThing();</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t872" href="#t872">872</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t873" href="#t873">873</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t874" href="#t874">874</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t875" href="#t875">875</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t876" href="#t876">876</a></span><span class="t"> <span class="key">with</span> <span class="nam">self</span><span class="op">.</span><span class="nam">assertRaisesRegex</span><span class="op">(</span><span class="nam">CogError</span><span class="op">,</span> <span class="str">r"^test.cog\(6\): Missing '\[\[\[end\]\]\]' before end of file.$"</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t877" href="#t877">877</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'test.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t878" href="#t878">878</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">newCog</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t879" href="#t879">879</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'-z'</span><span class="op">,</span> <span class="str">'test.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t880" href="#t880">880</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'test.cog'</span><span class="op">,</span> <span class="str">'test.out'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t881" href="#t881">881</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t882" href="#t882">882</a></span><span class="t"> <span class="key">def</span> <span class="nam">testBadDashD</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t883" href="#t883">883</a></span><span class="t"> <span class="key">with</span> <span class="nam">self</span><span class="op">.</span><span class="nam">assertRaisesRegex</span><span class="op">(</span><span class="nam">CogUsageError</span><span class="op">,</span> <span class="str">r"^-D takes a name=value argument$"</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t884" href="#t884">884</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-Dfooey'</span><span class="op">,</span> <span class="str">'cog.txt'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t885" href="#t885">885</a></span><span class="t"> <span class="key">with</span> <span class="nam">self</span><span class="op">.</span><span class="nam">assertRaisesRegex</span><span class="op">(</span><span class="nam">CogUsageError</span><span class="op">,</span> <span class="str">r"^-D takes a name=value argument$"</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t886" href="#t886">886</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-D'</span><span class="op">,</span> <span class="str">'fooey'</span><span class="op">,</span> <span class="str">'cog.txt'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t887" href="#t887">887</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t888" href="#t888">888</a></span><span class="t"> <span class="key">def</span> <span class="nam">testBadMarkers</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t889" href="#t889">889</a></span><span class="t"> <span class="key">with</span> <span class="nam">self</span><span class="op">.</span><span class="nam">assertRaisesRegex</span><span class="op">(</span><span class="nam">CogUsageError</span><span class="op">,</span> <span class="str">r"^--markers requires 3 values separated by spaces, could not parse 'X'$"</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t890" href="#t890">890</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'--markers=X'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t891" href="#t891">891</a></span><span class="t"> <span class="key">with</span> <span class="nam">self</span><span class="op">.</span><span class="nam">assertRaisesRegex</span><span class="op">(</span><span class="nam">CogUsageError</span><span class="op">,</span> <span class="str">r"^--markers requires 3 values separated by spaces, could not parse 'A B C D'$"</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t892" href="#t892">892</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'--markers=A B C D'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t893" href="#t893">893</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t894" href="#t894">894</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t895" href="#t895">895</a></span><span class="t"><span class="key">class</span> <span class="nam">TestMain</span><span class="op">(</span><span class="nam">TestCaseWithTempDir</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t896" href="#t896">896</a></span><span class="t"> <span class="key">def</span> <span class="nam">setUp</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t897" href="#t897">897</a></span><span class="t"> <span class="nam">super</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">setUp</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t898" href="#t898">898</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">old_argv</span> <span class="op">=</span> <span class="nam">sys</span><span class="op">.</span><span class="nam">argv</span><span class="op">[</span><span class="op">:</span><span class="op">]</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t899" href="#t899">899</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">old_stderr</span> <span class="op">=</span> <span class="nam">sys</span><span class="op">.</span><span class="nam">stderr</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t900" href="#t900">900</a></span><span class="t"> <span class="nam">sys</span><span class="op">.</span><span class="nam">stderr</span> <span class="op">=</span> <span class="nam">io</span><span class="op">.</span><span class="nam">StringIO</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t901" href="#t901">901</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t902" href="#t902">902</a></span><span class="t"> <span class="key">def</span> <span class="nam">tearDown</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t903" href="#t903">903</a></span><span class="t"> <span class="nam">sys</span><span class="op">.</span><span class="nam">stderr</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">old_stderr</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t904" href="#t904">904</a></span><span class="t"> <span class="nam">sys</span><span class="op">.</span><span class="nam">argv</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">old_argv</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t905" href="#t905">905</a></span><span class="t"> <span class="nam">sys</span><span class="op">.</span><span class="nam">modules</span><span class="op">.</span><span class="nam">pop</span><span class="op">(</span><span class="str">'mycode'</span><span class="op">,</span> <span class="key">None</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t906" href="#t906">906</a></span><span class="t"> <span class="nam">super</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">tearDown</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t907" href="#t907">907</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t908" href="#t908">908</a></span><span class="t"> <span class="key">def</span> <span class="nam">test_main_function</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t909" href="#t909">909</a></span><span class="t"> <span class="nam">sys</span><span class="op">.</span><span class="nam">argv</span> <span class="op">=</span> <span class="op">[</span><span class="str">"argv0"</span><span class="op">,</span> <span class="str">"-Z"</span><span class="op">]</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t910" href="#t910">910</a></span><span class="t"> <span class="nam">ret</span> <span class="op">=</span> <span class="nam">main</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t911" href="#t911">911</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">ret</span><span class="op">,</span> <span class="num">2</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t912" href="#t912">912</a></span><span class="t"> <span class="nam">stderr</span> <span class="op">=</span> <span class="nam">sys</span><span class="op">.</span><span class="nam">stderr</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t913" href="#t913">913</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">stderr</span><span class="op">,</span> <span class="str">'option -Z not recognized\n(for help use -h)\n'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t914" href="#t914">914</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t915" href="#t915">915</a></span><span class="t"> <span class="nam">files</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t916" href="#t916">916</a></span><span class="t"> <span class="str">'test.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t917" href="#t917">917</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t918" href="#t918">918</a></span><span class="t"><span class="str"> def func():</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t919" href="#t919">919</a></span><span class="t"><span class="str"> import mycode</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t920" href="#t920">920</a></span><span class="t"><span class="str"> mycode.boom()</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t921" href="#t921">921</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t922" href="#t922">922</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t923" href="#t923">923</a></span><span class="t"><span class="str"> -----</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t924" href="#t924">924</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t925" href="#t925">925</a></span><span class="t"><span class="str"> func()</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t926" href="#t926">926</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t927" href="#t927">927</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t928" href="#t928">928</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t929" href="#t929">929</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t930" href="#t930">930</a></span><span class="t"> <span class="str">'mycode.py'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t931" href="#t931">931</a></span><span class="t"><span class="str"> def boom():</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t932" href="#t932">932</a></span><span class="t"><span class="str"> [][0]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t933" href="#t933">933</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t934" href="#t934">934</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t935" href="#t935">935</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t936" href="#t936">936</a></span><span class="t"> <span class="key">def</span> <span class="nam">test_error_report</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t937" href="#t937">937</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">check_error_report</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t938" href="#t938">938</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t939" href="#t939">939</a></span><span class="t"> <span class="key">def</span> <span class="nam">test_error_report_with_prologue</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t940" href="#t940">940</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">check_error_report</span><span class="op">(</span><span class="str">"-p"</span><span class="op">,</span> <span class="str">"#1\n#2"</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t941" href="#t941">941</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t942" href="#t942">942</a></span><span class="t"> <span class="key">def</span> <span class="nam">check_error_report</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="op">*</span><span class="nam">args</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t943" href="#t943">943</a></span><span class="t"> <span class="str">"""Check that the error report is right."""</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t944" href="#t944">944</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">files</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t945" href="#t945">945</a></span><span class="t"> <span class="nam">sys</span><span class="op">.</span><span class="nam">argv</span> <span class="op">=</span> <span class="op">[</span><span class="str">"argv0"</span><span class="op">]</span> <span class="op">+</span> <span class="nam">list</span><span class="op">(</span><span class="nam">args</span><span class="op">)</span> <span class="op">+</span> <span class="op">[</span><span class="str">"-r"</span><span class="op">,</span> <span class="str">"test.cog"</span><span class="op">]</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t946" href="#t946">946</a></span><span class="t"> <span class="nam">main</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t947" href="#t947">947</a></span><span class="t"> <span class="nam">expected</span> <span class="op">=</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t948" href="#t948">948</a></span><span class="t"><span class="str"> Traceback (most recent call last):</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t949" href="#t949">949</a></span><span class="t"><span class="str"> File "test.cog", line 9, in <module></span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t950" href="#t950">950</a></span><span class="t"><span class="str"> func()</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t951" href="#t951">951</a></span><span class="t"><span class="str"> File "test.cog", line 4, in func</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t952" href="#t952">952</a></span><span class="t"><span class="str"> mycode.boom()</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t953" href="#t953">953</a></span><span class="t"><span class="str"> File "MYCODE", line 2, in boom</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t954" href="#t954">954</a></span><span class="t"><span class="str"> [][0]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t955" href="#t955">955</a></span><span class="t"><span class="str"> IndexError: list index out of range</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t956" href="#t956">956</a></span><span class="t"><span class="str"> """</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t957" href="#t957">957</a></span><span class="t"> <span class="nam">expected</span> <span class="op">=</span> <span class="nam">expected</span><span class="op">.</span><span class="nam">replace</span><span class="op">(</span><span class="str">"MYCODE"</span><span class="op">,</span> <span class="nam">os</span><span class="op">.</span><span class="nam">path</span><span class="op">.</span><span class="nam">abspath</span><span class="op">(</span><span class="str">"mycode.py"</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t958" href="#t958">958</a></span><span class="t"> <span class="key">assert</span> <span class="nam">expected</span> <span class="op">==</span> <span class="nam">sys</span><span class="op">.</span><span class="nam">stderr</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t959" href="#t959">959</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t960" href="#t960">960</a></span><span class="t"> <span class="key">def</span> <span class="nam">test_error_in_prologue</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t961" href="#t961">961</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">files</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t962" href="#t962">962</a></span><span class="t"> <span class="nam">sys</span><span class="op">.</span><span class="nam">argv</span> <span class="op">=</span> <span class="op">[</span><span class="str">"argv0"</span><span class="op">,</span> <span class="str">"-p"</span><span class="op">,</span> <span class="str">"import mycode; mycode.boom()"</span><span class="op">,</span> <span class="str">"-r"</span><span class="op">,</span> <span class="str">"test.cog"</span><span class="op">]</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t963" href="#t963">963</a></span><span class="t"> <span class="nam">main</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t964" href="#t964">964</a></span><span class="t"> <span class="nam">expected</span> <span class="op">=</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t965" href="#t965">965</a></span><span class="t"><span class="str"> Traceback (most recent call last):</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t966" href="#t966">966</a></span><span class="t"><span class="str"> File "<prologue>", line 1, in <module></span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t967" href="#t967">967</a></span><span class="t"><span class="str"> import mycode; mycode.boom()</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t968" href="#t968">968</a></span><span class="t"><span class="str"> File "MYCODE", line 2, in boom</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t969" href="#t969">969</a></span><span class="t"><span class="str"> [][0]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t970" href="#t970">970</a></span><span class="t"><span class="str"> IndexError: list index out of range</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t971" href="#t971">971</a></span><span class="t"><span class="str"> """</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t972" href="#t972">972</a></span><span class="t"> <span class="nam">expected</span> <span class="op">=</span> <span class="nam">expected</span><span class="op">.</span><span class="nam">replace</span><span class="op">(</span><span class="str">"MYCODE"</span><span class="op">,</span> <span class="nam">os</span><span class="op">.</span><span class="nam">path</span><span class="op">.</span><span class="nam">abspath</span><span class="op">(</span><span class="str">"mycode.py"</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t973" href="#t973">973</a></span><span class="t"> <span class="key">assert</span> <span class="nam">expected</span> <span class="op">==</span> <span class="nam">sys</span><span class="op">.</span><span class="nam">stderr</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t974" href="#t974">974</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t975" href="#t975">975</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t976" href="#t976">976</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t977" href="#t977">977</a></span><span class="t"><span class="key">class</span> <span class="nam">TestFileHandling</span><span class="op">(</span><span class="nam">TestCaseWithTempDir</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t978" href="#t978">978</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t979" href="#t979">979</a></span><span class="t"> <span class="key">def</span> <span class="nam">testSimple</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t980" href="#t980">980</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t981" href="#t981">981</a></span><span class="t"> <span class="str">'test.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t982" href="#t982">982</a></span><span class="t"><span class="str"> // This is my C++ file.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t983" href="#t983">983</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t984" href="#t984">984</a></span><span class="t"><span class="str"> fnames = ['DoSomething', 'DoAnotherThing', 'DoLastThing']</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t985" href="#t985">985</a></span><span class="t"><span class="str"> for fn in fnames:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t986" href="#t986">986</a></span><span class="t"><span class="str"> cog.outl("void %s();" % fn)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t987" href="#t987">987</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t988" href="#t988">988</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t989" href="#t989">989</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t990" href="#t990">990</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t991" href="#t991">991</a></span><span class="t"> <span class="str">'test.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t992" href="#t992">992</a></span><span class="t"><span class="str"> // This is my C++ file.</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t993" href="#t993">993</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t994" href="#t994">994</a></span><span class="t"><span class="str"> fnames = ['DoSomething', 'DoAnotherThing', 'DoLastThing']</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t995" href="#t995">995</a></span><span class="t"><span class="str"> for fn in fnames:</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t996" href="#t996">996</a></span><span class="t"><span class="str"> cog.outl("void %s();" % fn)</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t997" href="#t997">997</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t998" href="#t998">998</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t999" href="#t999">999</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1000" href="#t1000">1000</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1001" href="#t1001">1001</a></span><span class="t"> <span class="str">'test.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1002" href="#t1002">1002</a></span><span class="t"><span class="str"> // This is my C++ file.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1003" href="#t1003">1003</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1004" href="#t1004">1004</a></span><span class="t"><span class="str"> fnames = ['DoSomething', 'DoAnotherThing', 'DoLastThing']</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1005" href="#t1005">1005</a></span><span class="t"><span class="str"> for fn in fnames:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1006" href="#t1006">1006</a></span><span class="t"><span class="str"> cog.outl("void %s();" % fn)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1007" href="#t1007">1007</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1008" href="#t1008">1008</a></span><span class="t"><span class="str"> void DoSomething();</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1009" href="#t1009">1009</a></span><span class="t"><span class="str"> void DoAnotherThing();</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1010" href="#t1010">1010</a></span><span class="t"><span class="str"> void DoLastThing();</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1011" href="#t1011">1011</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1012" href="#t1012">1012</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1013" href="#t1013">1013</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1014" href="#t1014">1014</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1015" href="#t1015">1015</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1016" href="#t1016">1016</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'test.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1017" href="#t1017">1017</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'test.cog'</span><span class="op">,</span> <span class="str">'test.out'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1018" href="#t1018">1018</a></span><span class="t"> <span class="nam">output</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">output</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1019" href="#t1019">1019</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertIn</span><span class="op">(</span><span class="str">"(changed)"</span><span class="op">,</span> <span class="nam">output</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1020" href="#t1020">1020</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t1021" href="#t1021">1021</a></span><span class="t"> <span class="key">def</span> <span class="nam">testPrintOutput</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1022" href="#t1022">1022</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1023" href="#t1023">1023</a></span><span class="t"> <span class="str">'test.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t998" href="#t998">998</a></span><span class="t"><span class="str"> void DoSomething();</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t999" href="#t999">999</a></span><span class="t"><span class="str"> void DoAnotherThing();</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1000" href="#t1000">1000</a></span><span class="t"><span class="str"> void DoLastThing();</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1001" href="#t1001">1001</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1002" href="#t1002">1002</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1003" href="#t1003">1003</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1004" href="#t1004">1004</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1005" href="#t1005">1005</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1006" href="#t1006">1006</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'test.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1007" href="#t1007">1007</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'test.cog'</span><span class="op">,</span> <span class="str">'test.out'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1008" href="#t1008">1008</a></span><span class="t"> <span class="nam">output</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">output</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1009" href="#t1009">1009</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertIn</span><span class="op">(</span><span class="str">"(changed)"</span><span class="op">,</span> <span class="nam">output</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1010" href="#t1010">1010</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t1011" href="#t1011">1011</a></span><span class="t"> <span class="key">def</span> <span class="nam">testPrintOutput</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1012" href="#t1012">1012</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1013" href="#t1013">1013</a></span><span class="t"> <span class="str">'test.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1014" href="#t1014">1014</a></span><span class="t"><span class="str"> // This is my C++ file.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1015" href="#t1015">1015</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1016" href="#t1016">1016</a></span><span class="t"><span class="str"> fnames = ['DoSomething', 'DoAnotherThing', 'DoLastThing']</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1017" href="#t1017">1017</a></span><span class="t"><span class="str"> for fn in fnames:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1018" href="#t1018">1018</a></span><span class="t"><span class="str"> print("void %s();" % fn)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1019" href="#t1019">1019</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1020" href="#t1020">1020</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1021" href="#t1021">1021</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1022" href="#t1022">1022</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1023" href="#t1023">1023</a></span><span class="t"> <span class="str">'test.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1024" href="#t1024">1024</a></span><span class="t"><span class="str"> // This is my C++ file.</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1025" href="#t1025">1025</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1026" href="#t1026">1026</a></span><span class="t"><span class="str"> fnames = ['DoSomething', 'DoAnotherThing', 'DoLastThing']</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1027" href="#t1027">1027</a></span><span class="t"><span class="str"> for fn in fnames:</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1028" href="#t1028">1028</a></span><span class="t"><span class="str"> print("void %s();" % fn)</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1029" href="#t1029">1029</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1030" href="#t1030">1030</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1031" href="#t1031">1031</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1032" href="#t1032">1032</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1033" href="#t1033">1033</a></span><span class="t"> <span class="str">'test.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1034" href="#t1034">1034</a></span><span class="t"><span class="str"> // This is my C++ file.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1035" href="#t1035">1035</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1036" href="#t1036">1036</a></span><span class="t"><span class="str"> fnames = ['DoSomething', 'DoAnotherThing', 'DoLastThing']</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1037" href="#t1037">1037</a></span><span class="t"><span class="str"> for fn in fnames:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1038" href="#t1038">1038</a></span><span class="t"><span class="str"> print("void %s();" % fn)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1039" href="#t1039">1039</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1040" href="#t1040">1040</a></span><span class="t"><span class="str"> void DoSomething();</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1041" href="#t1041">1041</a></span><span class="t"><span class="str"> void DoAnotherThing();</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1042" href="#t1042">1042</a></span><span class="t"><span class="str"> void DoLastThing();</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1043" href="#t1043">1043</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1044" href="#t1044">1044</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1045" href="#t1045">1045</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1046" href="#t1046">1046</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1047" href="#t1047">1047</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1048" href="#t1048">1048</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-rP'</span><span class="op">,</span> <span class="str">'test.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1049" href="#t1049">1049</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'test.cog'</span><span class="op">,</span> <span class="str">'test.out'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1050" href="#t1050">1050</a></span><span class="t"> <span class="nam">output</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">output</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1051" href="#t1051">1051</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertIn</span><span class="op">(</span><span class="str">"(changed)"</span><span class="op">,</span> <span class="nam">output</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1052" href="#t1052">1052</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t1053" href="#t1053">1053</a></span><span class="t"> <span class="key">def</span> <span class="nam">testWildcards</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1054" href="#t1054">1054</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1055" href="#t1055">1055</a></span><span class="t"> <span class="str">'test.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1030" href="#t1030">1030</a></span><span class="t"><span class="str"> void DoSomething();</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1031" href="#t1031">1031</a></span><span class="t"><span class="str"> void DoAnotherThing();</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1032" href="#t1032">1032</a></span><span class="t"><span class="str"> void DoLastThing();</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1033" href="#t1033">1033</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1034" href="#t1034">1034</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1035" href="#t1035">1035</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1036" href="#t1036">1036</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1037" href="#t1037">1037</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1038" href="#t1038">1038</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-rP'</span><span class="op">,</span> <span class="str">'test.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1039" href="#t1039">1039</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'test.cog'</span><span class="op">,</span> <span class="str">'test.out'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1040" href="#t1040">1040</a></span><span class="t"> <span class="nam">output</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">output</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1041" href="#t1041">1041</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertIn</span><span class="op">(</span><span class="str">"(changed)"</span><span class="op">,</span> <span class="nam">output</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1042" href="#t1042">1042</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t1043" href="#t1043">1043</a></span><span class="t"> <span class="key">def</span> <span class="nam">testWildcards</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1044" href="#t1044">1044</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1045" href="#t1045">1045</a></span><span class="t"> <span class="str">'test.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1046" href="#t1046">1046</a></span><span class="t"><span class="str"> // This is my C++ file.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1047" href="#t1047">1047</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1048" href="#t1048">1048</a></span><span class="t"><span class="str"> fnames = ['DoSomething', 'DoAnotherThing', 'DoLastThing']</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1049" href="#t1049">1049</a></span><span class="t"><span class="str"> for fn in fnames:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1050" href="#t1050">1050</a></span><span class="t"><span class="str"> cog.outl("void %s();" % fn)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1051" href="#t1051">1051</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1052" href="#t1052">1052</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1053" href="#t1053">1053</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1054" href="#t1054">1054</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1055" href="#t1055">1055</a></span><span class="t"> <span class="str">'test2.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1056" href="#t1056">1056</a></span><span class="t"><span class="str"> // This is my C++ file.</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1057" href="#t1057">1057</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1058" href="#t1058">1058</a></span><span class="t"><span class="str"> fnames = ['DoSomething', 'DoAnotherThing', 'DoLastThing']</span> </span><span class="r"></span></p> @@ -1146,30 +1146,30 @@ <h2> <p class="pln"><span class="n"><a id="t1062" href="#t1062">1062</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1063" href="#t1063">1063</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1064" href="#t1064">1064</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1065" href="#t1065">1065</a></span><span class="t"> <span class="str">'test2.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1065" href="#t1065">1065</a></span><span class="t"> <span class="str">'test.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1066" href="#t1066">1066</a></span><span class="t"><span class="str"> // This is my C++ file.</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1067" href="#t1067">1067</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1068" href="#t1068">1068</a></span><span class="t"><span class="str"> fnames = ['DoSomething', 'DoAnotherThing', 'DoLastThing']</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1069" href="#t1069">1069</a></span><span class="t"><span class="str"> for fn in fnames:</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1070" href="#t1070">1070</a></span><span class="t"><span class="str"> cog.outl("void %s();" % fn)</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1071" href="#t1071">1071</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1072" href="#t1072">1072</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1073" href="#t1073">1073</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1074" href="#t1074">1074</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1075" href="#t1075">1075</a></span><span class="t"> <span class="str">'test.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1076" href="#t1076">1076</a></span><span class="t"><span class="str"> // This is my C++ file.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1077" href="#t1077">1077</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1078" href="#t1078">1078</a></span><span class="t"><span class="str"> fnames = ['DoSomething', 'DoAnotherThing', 'DoLastThing']</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1079" href="#t1079">1079</a></span><span class="t"><span class="str"> for fn in fnames:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1080" href="#t1080">1080</a></span><span class="t"><span class="str"> cog.outl("void %s();" % fn)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1081" href="#t1081">1081</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1082" href="#t1082">1082</a></span><span class="t"><span class="str"> void DoSomething();</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1083" href="#t1083">1083</a></span><span class="t"><span class="str"> void DoAnotherThing();</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1084" href="#t1084">1084</a></span><span class="t"><span class="str"> void DoLastThing();</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1072" href="#t1072">1072</a></span><span class="t"><span class="str"> void DoSomething();</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1073" href="#t1073">1073</a></span><span class="t"><span class="str"> void DoAnotherThing();</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1074" href="#t1074">1074</a></span><span class="t"><span class="str"> void DoLastThing();</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1075" href="#t1075">1075</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1076" href="#t1076">1076</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1077" href="#t1077">1077</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1078" href="#t1078">1078</a></span><span class="t"> <span class="str">'not_this_one.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1079" href="#t1079">1079</a></span><span class="t"><span class="str"> // This is my C++ file.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1080" href="#t1080">1080</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1081" href="#t1081">1081</a></span><span class="t"><span class="str"> fnames = ['DoSomething', 'DoAnotherThing', 'DoLastThing']</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1082" href="#t1082">1082</a></span><span class="t"><span class="str"> for fn in fnames:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1083" href="#t1083">1083</a></span><span class="t"><span class="str"> cog.outl("void %s();" % fn)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1084" href="#t1084">1084</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1085" href="#t1085">1085</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1086" href="#t1086">1086</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1087" href="#t1087">1087</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1088" href="#t1088">1088</a></span><span class="t"> <span class="str">'not_this_one.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1088" href="#t1088">1088</a></span><span class="t"> <span class="str">'not_this_one.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1089" href="#t1089">1089</a></span><span class="t"><span class="str"> // This is my C++ file.</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1090" href="#t1090">1090</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1091" href="#t1091">1091</a></span><span class="t"><span class="str"> fnames = ['DoSomething', 'DoAnotherThing', 'DoLastThing']</span> </span><span class="r"></span></p> @@ -1178,1543 +1178,1533 @@ <h2> <p class="pln"><span class="n"><a id="t1094" href="#t1094">1094</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1095" href="#t1095">1095</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1096" href="#t1096">1096</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1097" href="#t1097">1097</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1098" href="#t1098">1098</a></span><span class="t"> <span class="str">'not_this_one.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1099" href="#t1099">1099</a></span><span class="t"><span class="str"> // This is my C++ file.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1100" href="#t1100">1100</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1101" href="#t1101">1101</a></span><span class="t"><span class="str"> fnames = ['DoSomething', 'DoAnotherThing', 'DoLastThing']</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1102" href="#t1102">1102</a></span><span class="t"><span class="str"> for fn in fnames:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1103" href="#t1103">1103</a></span><span class="t"><span class="str"> cog.outl("void %s();" % fn)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1104" href="#t1104">1104</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1105" href="#t1105">1105</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1106" href="#t1106">1106</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1107" href="#t1107">1107</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1108" href="#t1108">1108</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1109" href="#t1109">1109</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1110" href="#t1110">1110</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'t*.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1111" href="#t1111">1111</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'test.cog'</span><span class="op">,</span> <span class="str">'test.out'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1112" href="#t1112">1112</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'test2.cog'</span><span class="op">,</span> <span class="str">'test.out'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1113" href="#t1113">1113</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'not_this_one.cog'</span><span class="op">,</span> <span class="str">'not_this_one.out'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1114" href="#t1114">1114</a></span><span class="t"> <span class="nam">output</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">output</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1115" href="#t1115">1115</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertIn</span><span class="op">(</span><span class="str">"(changed)"</span><span class="op">,</span> <span class="nam">output</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1116" href="#t1116">1116</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t1117" href="#t1117">1117</a></span><span class="t"> <span class="key">def</span> <span class="nam">testOutputFile</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1118" href="#t1118">1118</a></span><span class="t"> <span class="com"># -o sets the output file.</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1119" href="#t1119">1119</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1120" href="#t1120">1120</a></span><span class="t"> <span class="str">'test.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1097" href="#t1097">1097</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1098" href="#t1098">1098</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1099" href="#t1099">1099</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1100" href="#t1100">1100</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'t*.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1101" href="#t1101">1101</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'test.cog'</span><span class="op">,</span> <span class="str">'test.out'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1102" href="#t1102">1102</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'test2.cog'</span><span class="op">,</span> <span class="str">'test.out'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1103" href="#t1103">1103</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'not_this_one.cog'</span><span class="op">,</span> <span class="str">'not_this_one.out'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1104" href="#t1104">1104</a></span><span class="t"> <span class="nam">output</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">output</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1105" href="#t1105">1105</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertIn</span><span class="op">(</span><span class="str">"(changed)"</span><span class="op">,</span> <span class="nam">output</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1106" href="#t1106">1106</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t1107" href="#t1107">1107</a></span><span class="t"> <span class="key">def</span> <span class="nam">testOutputFile</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1108" href="#t1108">1108</a></span><span class="t"> <span class="com"># -o sets the output file.</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1109" href="#t1109">1109</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1110" href="#t1110">1110</a></span><span class="t"> <span class="str">'test.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1111" href="#t1111">1111</a></span><span class="t"><span class="str"> // This is my C++ file.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1112" href="#t1112">1112</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1113" href="#t1113">1113</a></span><span class="t"><span class="str"> fnames = ['DoSomething', 'DoAnotherThing', 'DoLastThing']</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1114" href="#t1114">1114</a></span><span class="t"><span class="str"> for fn in fnames:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1115" href="#t1115">1115</a></span><span class="t"><span class="str"> cog.outl("void %s();" % fn)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1116" href="#t1116">1116</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1117" href="#t1117">1117</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1118" href="#t1118">1118</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1119" href="#t1119">1119</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1120" href="#t1120">1120</a></span><span class="t"> <span class="str">'test.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1121" href="#t1121">1121</a></span><span class="t"><span class="str"> // This is my C++ file.</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1122" href="#t1122">1122</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1123" href="#t1123">1123</a></span><span class="t"><span class="str"> fnames = ['DoSomething', 'DoAnotherThing', 'DoLastThing']</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1124" href="#t1124">1124</a></span><span class="t"><span class="str"> for fn in fnames:</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1125" href="#t1125">1125</a></span><span class="t"><span class="str"> cog.outl("void %s();" % fn)</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1126" href="#t1126">1126</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1127" href="#t1127">1127</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1128" href="#t1128">1128</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1129" href="#t1129">1129</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1130" href="#t1130">1130</a></span><span class="t"> <span class="str">'test.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1131" href="#t1131">1131</a></span><span class="t"><span class="str"> // This is my C++ file.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1132" href="#t1132">1132</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1133" href="#t1133">1133</a></span><span class="t"><span class="str"> fnames = ['DoSomething', 'DoAnotherThing', 'DoLastThing']</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1134" href="#t1134">1134</a></span><span class="t"><span class="str"> for fn in fnames:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1135" href="#t1135">1135</a></span><span class="t"><span class="str"> cog.outl("void %s();" % fn)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1136" href="#t1136">1136</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1137" href="#t1137">1137</a></span><span class="t"><span class="str"> void DoSomething();</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1138" href="#t1138">1138</a></span><span class="t"><span class="str"> void DoAnotherThing();</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1139" href="#t1139">1139</a></span><span class="t"><span class="str"> void DoLastThing();</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1140" href="#t1140">1140</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1141" href="#t1141">1141</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1142" href="#t1142">1142</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1143" href="#t1143">1143</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1144" href="#t1144">1144</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1145" href="#t1145">1145</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-o'</span><span class="op">,</span> <span class="str">'in/a/dir/test.cogged'</span><span class="op">,</span> <span class="str">'test.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1146" href="#t1146">1146</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'in/a/dir/test.cogged'</span><span class="op">,</span> <span class="str">'test.out'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1147" href="#t1147">1147</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t1148" href="#t1148">1148</a></span><span class="t"> <span class="key">def</span> <span class="nam">testAtFile</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1149" href="#t1149">1149</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1150" href="#t1150">1150</a></span><span class="t"> <span class="str">'one.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1151" href="#t1151">1151</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1152" href="#t1152">1152</a></span><span class="t"><span class="str"> cog.outl("hello world")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1153" href="#t1153">1153</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1154" href="#t1154">1154</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1155" href="#t1155">1155</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1156" href="#t1156">1156</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1157" href="#t1157">1157</a></span><span class="t"> <span class="str">'one.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1158" href="#t1158">1158</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1159" href="#t1159">1159</a></span><span class="t"><span class="str"> cog.outl("hello world")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1160" href="#t1160">1160</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1161" href="#t1161">1161</a></span><span class="t"><span class="str"> hello world</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1162" href="#t1162">1162</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1163" href="#t1163">1163</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1164" href="#t1164">1164</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1165" href="#t1165">1165</a></span><span class="t"> <span class="str">'two.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1166" href="#t1166">1166</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1167" href="#t1167">1167</a></span><span class="t"><span class="str"> cog.outl("goodbye cruel world")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1168" href="#t1168">1168</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1169" href="#t1169">1169</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1170" href="#t1170">1170</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1171" href="#t1171">1171</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1172" href="#t1172">1172</a></span><span class="t"> <span class="str">'two.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1173" href="#t1173">1173</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1174" href="#t1174">1174</a></span><span class="t"><span class="str"> cog.outl("goodbye cruel world")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1175" href="#t1175">1175</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1176" href="#t1176">1176</a></span><span class="t"><span class="str"> goodbye cruel world</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1177" href="#t1177">1177</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1178" href="#t1178">1178</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1179" href="#t1179">1179</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1180" href="#t1180">1180</a></span><span class="t"> <span class="str">'cogfiles.txt'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1181" href="#t1181">1181</a></span><span class="t"><span class="str"> # Please run cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1182" href="#t1182">1182</a></span><span class="t"><span class="str"> one.cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1183" href="#t1183">1183</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1184" href="#t1184">1184</a></span><span class="t"><span class="str"> two.cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1185" href="#t1185">1185</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1186" href="#t1186">1186</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1187" href="#t1187">1187</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1188" href="#t1188">1188</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1189" href="#t1189">1189</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'@cogfiles.txt'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1190" href="#t1190">1190</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'one.cog'</span><span class="op">,</span> <span class="str">'one.out'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1191" href="#t1191">1191</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'two.cog'</span><span class="op">,</span> <span class="str">'two.out'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1192" href="#t1192">1192</a></span><span class="t"> <span class="nam">output</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">output</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1193" href="#t1193">1193</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertIn</span><span class="op">(</span><span class="str">"(changed)"</span><span class="op">,</span> <span class="nam">output</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1194" href="#t1194">1194</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t1195" href="#t1195">1195</a></span><span class="t"> <span class="key">def</span> <span class="nam">testNestedAtFile</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1196" href="#t1196">1196</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1197" href="#t1197">1197</a></span><span class="t"> <span class="str">'one.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1198" href="#t1198">1198</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1199" href="#t1199">1199</a></span><span class="t"><span class="str"> cog.outl("hello world")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1200" href="#t1200">1200</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1201" href="#t1201">1201</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1202" href="#t1202">1202</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1203" href="#t1203">1203</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1204" href="#t1204">1204</a></span><span class="t"> <span class="str">'one.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1205" href="#t1205">1205</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1206" href="#t1206">1206</a></span><span class="t"><span class="str"> cog.outl("hello world")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1207" href="#t1207">1207</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1208" href="#t1208">1208</a></span><span class="t"><span class="str"> hello world</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1209" href="#t1209">1209</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1210" href="#t1210">1210</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1211" href="#t1211">1211</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1212" href="#t1212">1212</a></span><span class="t"> <span class="str">'two.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1213" href="#t1213">1213</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1214" href="#t1214">1214</a></span><span class="t"><span class="str"> cog.outl("goodbye cruel world")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1215" href="#t1215">1215</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1216" href="#t1216">1216</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1217" href="#t1217">1217</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1218" href="#t1218">1218</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1219" href="#t1219">1219</a></span><span class="t"> <span class="str">'two.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1220" href="#t1220">1220</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1221" href="#t1221">1221</a></span><span class="t"><span class="str"> cog.outl("goodbye cruel world")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1222" href="#t1222">1222</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1223" href="#t1223">1223</a></span><span class="t"><span class="str"> goodbye cruel world</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1224" href="#t1224">1224</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1225" href="#t1225">1225</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1226" href="#t1226">1226</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1227" href="#t1227">1227</a></span><span class="t"> <span class="str">'cogfiles.txt'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1228" href="#t1228">1228</a></span><span class="t"><span class="str"> # Please run cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1229" href="#t1229">1229</a></span><span class="t"><span class="str"> one.cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1230" href="#t1230">1230</a></span><span class="t"><span class="str"> @cogfiles2.txt</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1231" href="#t1231">1231</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1232" href="#t1232">1232</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1233" href="#t1233">1233</a></span><span class="t"> <span class="str">'cogfiles2.txt'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1234" href="#t1234">1234</a></span><span class="t"><span class="str"> # This one too, please.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1235" href="#t1235">1235</a></span><span class="t"><span class="str"> two.cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1236" href="#t1236">1236</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1237" href="#t1237">1237</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1238" href="#t1238">1238</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1239" href="#t1239">1239</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1240" href="#t1240">1240</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'@cogfiles.txt'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1241" href="#t1241">1241</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'one.cog'</span><span class="op">,</span> <span class="str">'one.out'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1242" href="#t1242">1242</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'two.cog'</span><span class="op">,</span> <span class="str">'two.out'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1243" href="#t1243">1243</a></span><span class="t"> <span class="nam">output</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">output</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1244" href="#t1244">1244</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertIn</span><span class="op">(</span><span class="str">"(changed)"</span><span class="op">,</span> <span class="nam">output</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1127" href="#t1127">1127</a></span><span class="t"><span class="str"> void DoSomething();</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1128" href="#t1128">1128</a></span><span class="t"><span class="str"> void DoAnotherThing();</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1129" href="#t1129">1129</a></span><span class="t"><span class="str"> void DoLastThing();</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1130" href="#t1130">1130</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1131" href="#t1131">1131</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1132" href="#t1132">1132</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1133" href="#t1133">1133</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1134" href="#t1134">1134</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1135" href="#t1135">1135</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-o'</span><span class="op">,</span> <span class="str">'in/a/dir/test.cogged'</span><span class="op">,</span> <span class="str">'test.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1136" href="#t1136">1136</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'in/a/dir/test.cogged'</span><span class="op">,</span> <span class="str">'test.out'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1137" href="#t1137">1137</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t1138" href="#t1138">1138</a></span><span class="t"> <span class="key">def</span> <span class="nam">testAtFile</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1139" href="#t1139">1139</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1140" href="#t1140">1140</a></span><span class="t"> <span class="str">'one.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1141" href="#t1141">1141</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1142" href="#t1142">1142</a></span><span class="t"><span class="str"> cog.outl("hello world")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1143" href="#t1143">1143</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1144" href="#t1144">1144</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1145" href="#t1145">1145</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1146" href="#t1146">1146</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1147" href="#t1147">1147</a></span><span class="t"> <span class="str">'one.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1148" href="#t1148">1148</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1149" href="#t1149">1149</a></span><span class="t"><span class="str"> cog.outl("hello world")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1150" href="#t1150">1150</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1151" href="#t1151">1151</a></span><span class="t"><span class="str"> hello world</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1152" href="#t1152">1152</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1153" href="#t1153">1153</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1154" href="#t1154">1154</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1155" href="#t1155">1155</a></span><span class="t"> <span class="str">'two.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1156" href="#t1156">1156</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1157" href="#t1157">1157</a></span><span class="t"><span class="str"> cog.outl("goodbye cruel world")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1158" href="#t1158">1158</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1159" href="#t1159">1159</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1160" href="#t1160">1160</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1161" href="#t1161">1161</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1162" href="#t1162">1162</a></span><span class="t"> <span class="str">'two.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1163" href="#t1163">1163</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1164" href="#t1164">1164</a></span><span class="t"><span class="str"> cog.outl("goodbye cruel world")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1165" href="#t1165">1165</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1166" href="#t1166">1166</a></span><span class="t"><span class="str"> goodbye cruel world</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1167" href="#t1167">1167</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1168" href="#t1168">1168</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1169" href="#t1169">1169</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1170" href="#t1170">1170</a></span><span class="t"> <span class="str">'cogfiles.txt'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1171" href="#t1171">1171</a></span><span class="t"><span class="str"> # Please run cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1172" href="#t1172">1172</a></span><span class="t"><span class="str"> one.cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1173" href="#t1173">1173</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1174" href="#t1174">1174</a></span><span class="t"><span class="str"> two.cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1175" href="#t1175">1175</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1176" href="#t1176">1176</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1177" href="#t1177">1177</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1178" href="#t1178">1178</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1179" href="#t1179">1179</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'@cogfiles.txt'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1180" href="#t1180">1180</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'one.cog'</span><span class="op">,</span> <span class="str">'one.out'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1181" href="#t1181">1181</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'two.cog'</span><span class="op">,</span> <span class="str">'two.out'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1182" href="#t1182">1182</a></span><span class="t"> <span class="nam">output</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">output</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1183" href="#t1183">1183</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertIn</span><span class="op">(</span><span class="str">"(changed)"</span><span class="op">,</span> <span class="nam">output</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1184" href="#t1184">1184</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t1185" href="#t1185">1185</a></span><span class="t"> <span class="key">def</span> <span class="nam">testNestedAtFile</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1186" href="#t1186">1186</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1187" href="#t1187">1187</a></span><span class="t"> <span class="str">'one.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1188" href="#t1188">1188</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1189" href="#t1189">1189</a></span><span class="t"><span class="str"> cog.outl("hello world")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1190" href="#t1190">1190</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1191" href="#t1191">1191</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1192" href="#t1192">1192</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1193" href="#t1193">1193</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1194" href="#t1194">1194</a></span><span class="t"> <span class="str">'one.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1195" href="#t1195">1195</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1196" href="#t1196">1196</a></span><span class="t"><span class="str"> cog.outl("hello world")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1197" href="#t1197">1197</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1198" href="#t1198">1198</a></span><span class="t"><span class="str"> hello world</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1199" href="#t1199">1199</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1200" href="#t1200">1200</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1201" href="#t1201">1201</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1202" href="#t1202">1202</a></span><span class="t"> <span class="str">'two.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1203" href="#t1203">1203</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1204" href="#t1204">1204</a></span><span class="t"><span class="str"> cog.outl("goodbye cruel world")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1205" href="#t1205">1205</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1206" href="#t1206">1206</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1207" href="#t1207">1207</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1208" href="#t1208">1208</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1209" href="#t1209">1209</a></span><span class="t"> <span class="str">'two.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1210" href="#t1210">1210</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1211" href="#t1211">1211</a></span><span class="t"><span class="str"> cog.outl("goodbye cruel world")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1212" href="#t1212">1212</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1213" href="#t1213">1213</a></span><span class="t"><span class="str"> goodbye cruel world</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1214" href="#t1214">1214</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1215" href="#t1215">1215</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1216" href="#t1216">1216</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1217" href="#t1217">1217</a></span><span class="t"> <span class="str">'cogfiles.txt'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1218" href="#t1218">1218</a></span><span class="t"><span class="str"> # Please run cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1219" href="#t1219">1219</a></span><span class="t"><span class="str"> one.cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1220" href="#t1220">1220</a></span><span class="t"><span class="str"> @cogfiles2.txt</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1221" href="#t1221">1221</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1222" href="#t1222">1222</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1223" href="#t1223">1223</a></span><span class="t"> <span class="str">'cogfiles2.txt'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1224" href="#t1224">1224</a></span><span class="t"><span class="str"> # This one too, please.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1225" href="#t1225">1225</a></span><span class="t"><span class="str"> two.cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1226" href="#t1226">1226</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1227" href="#t1227">1227</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1228" href="#t1228">1228</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1229" href="#t1229">1229</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1230" href="#t1230">1230</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'@cogfiles.txt'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1231" href="#t1231">1231</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'one.cog'</span><span class="op">,</span> <span class="str">'one.out'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1232" href="#t1232">1232</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'two.cog'</span><span class="op">,</span> <span class="str">'two.out'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1233" href="#t1233">1233</a></span><span class="t"> <span class="nam">output</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">output</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1234" href="#t1234">1234</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertIn</span><span class="op">(</span><span class="str">"(changed)"</span><span class="op">,</span> <span class="nam">output</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1235" href="#t1235">1235</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t1236" href="#t1236">1236</a></span><span class="t"> <span class="key">def</span> <span class="nam">testAtFileWithArgs</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1237" href="#t1237">1237</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1238" href="#t1238">1238</a></span><span class="t"> <span class="str">'both.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1239" href="#t1239">1239</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1240" href="#t1240">1240</a></span><span class="t"><span class="str"> cog.outl("one: %s" % ('one' in globals()))</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1241" href="#t1241">1241</a></span><span class="t"><span class="str"> cog.outl("two: %s" % ('two' in globals()))</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1242" href="#t1242">1242</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1243" href="#t1243">1243</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1244" href="#t1244">1244</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1245" href="#t1245">1245</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t1246" href="#t1246">1246</a></span><span class="t"> <span class="key">def</span> <span class="nam">testAtFileWithArgs</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1247" href="#t1247">1247</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1248" href="#t1248">1248</a></span><span class="t"> <span class="str">'both.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1249" href="#t1249">1249</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1250" href="#t1250">1250</a></span><span class="t"><span class="str"> cog.outl("one: %s" % ('one' in globals()))</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1251" href="#t1251">1251</a></span><span class="t"><span class="str"> cog.outl("two: %s" % ('two' in globals()))</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1252" href="#t1252">1252</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1246" href="#t1246">1246</a></span><span class="t"> <span class="str">'one.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1247" href="#t1247">1247</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1248" href="#t1248">1248</a></span><span class="t"><span class="str"> cog.outl("one: %s" % ('one' in globals()))</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1249" href="#t1249">1249</a></span><span class="t"><span class="str"> cog.outl("two: %s" % ('two' in globals()))</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1250" href="#t1250">1250</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1251" href="#t1251">1251</a></span><span class="t"><span class="str"> one: True // ONE</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1252" href="#t1252">1252</a></span><span class="t"><span class="str"> two: False // ONE</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1253" href="#t1253">1253</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1254" href="#t1254">1254</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1255" href="#t1255">1255</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1256" href="#t1256">1256</a></span><span class="t"> <span class="str">'one.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1256" href="#t1256">1256</a></span><span class="t"> <span class="str">'two.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1257" href="#t1257">1257</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1258" href="#t1258">1258</a></span><span class="t"><span class="str"> cog.outl("one: %s" % ('one' in globals()))</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1259" href="#t1259">1259</a></span><span class="t"><span class="str"> cog.outl("two: %s" % ('two' in globals()))</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1260" href="#t1260">1260</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1261" href="#t1261">1261</a></span><span class="t"><span class="str"> one: True // ONE</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1262" href="#t1262">1262</a></span><span class="t"><span class="str"> two: False // ONE</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1261" href="#t1261">1261</a></span><span class="t"><span class="str"> one: False // TWO</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1262" href="#t1262">1262</a></span><span class="t"><span class="str"> two: True // TWO</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1263" href="#t1263">1263</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1264" href="#t1264">1264</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1265" href="#t1265">1265</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1266" href="#t1266">1266</a></span><span class="t"> <span class="str">'two.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1267" href="#t1267">1267</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1268" href="#t1268">1268</a></span><span class="t"><span class="str"> cog.outl("one: %s" % ('one' in globals()))</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1269" href="#t1269">1269</a></span><span class="t"><span class="str"> cog.outl("two: %s" % ('two' in globals()))</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1270" href="#t1270">1270</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1271" href="#t1271">1271</a></span><span class="t"><span class="str"> one: False // TWO</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1272" href="#t1272">1272</a></span><span class="t"><span class="str"> two: True // TWO</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1273" href="#t1273">1273</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1274" href="#t1274">1274</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1275" href="#t1275">1275</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1276" href="#t1276">1276</a></span><span class="t"> <span class="str">'cogfiles.txt'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1277" href="#t1277">1277</a></span><span class="t"><span class="str"> # Please run cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1278" href="#t1278">1278</a></span><span class="t"><span class="str"> both.cog -o in/a/dir/both.one -s ' // ONE' -D one=x</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1279" href="#t1279">1279</a></span><span class="t"><span class="str"> both.cog -o in/a/dir/both.two -s ' // TWO' -D two=x</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1280" href="#t1280">1280</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1281" href="#t1281">1281</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1282" href="#t1282">1282</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1283" href="#t1283">1283</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1284" href="#t1284">1284</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'@cogfiles.txt'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1285" href="#t1285">1285</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'in/a/dir/both.one'</span><span class="op">,</span> <span class="str">'one.out'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1286" href="#t1286">1286</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'in/a/dir/both.two'</span><span class="op">,</span> <span class="str">'two.out'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1266" href="#t1266">1266</a></span><span class="t"> <span class="str">'cogfiles.txt'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1267" href="#t1267">1267</a></span><span class="t"><span class="str"> # Please run cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1268" href="#t1268">1268</a></span><span class="t"><span class="str"> both.cog -o in/a/dir/both.one -s ' // ONE' -D one=x</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1269" href="#t1269">1269</a></span><span class="t"><span class="str"> both.cog -o in/a/dir/both.two -s ' // TWO' -D two=x</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1270" href="#t1270">1270</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1271" href="#t1271">1271</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1272" href="#t1272">1272</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1273" href="#t1273">1273</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1274" href="#t1274">1274</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'@cogfiles.txt'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1275" href="#t1275">1275</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'in/a/dir/both.one'</span><span class="op">,</span> <span class="str">'one.out'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1276" href="#t1276">1276</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'in/a/dir/both.two'</span><span class="op">,</span> <span class="str">'two.out'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1277" href="#t1277">1277</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t1278" href="#t1278">1278</a></span><span class="t"> <span class="key">def</span> <span class="nam">testAtFileWithBadArgCombo</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1279" href="#t1279">1279</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1280" href="#t1280">1280</a></span><span class="t"> <span class="str">'both.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1281" href="#t1281">1281</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1282" href="#t1282">1282</a></span><span class="t"><span class="str"> cog.outl("one: %s" % ('one' in globals()))</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1283" href="#t1283">1283</a></span><span class="t"><span class="str"> cog.outl("two: %s" % ('two' in globals()))</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1284" href="#t1284">1284</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1285" href="#t1285">1285</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1286" href="#t1286">1286</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1287" href="#t1287">1287</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t1288" href="#t1288">1288</a></span><span class="t"> <span class="key">def</span> <span class="nam">testAtFileWithBadArgCombo</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1289" href="#t1289">1289</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1290" href="#t1290">1290</a></span><span class="t"> <span class="str">'both.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1291" href="#t1291">1291</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1292" href="#t1292">1292</a></span><span class="t"><span class="str"> cog.outl("one: %s" % ('one' in globals()))</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1293" href="#t1293">1293</a></span><span class="t"><span class="str"> cog.outl("two: %s" % ('two' in globals()))</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1294" href="#t1294">1294</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1295" href="#t1295">1295</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1296" href="#t1296">1296</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1297" href="#t1297">1297</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1298" href="#t1298">1298</a></span><span class="t"> <span class="str">'cogfiles.txt'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1299" href="#t1299">1299</a></span><span class="t"><span class="str"> # Please run cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1300" href="#t1300">1300</a></span><span class="t"><span class="str"> both.cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1301" href="#t1301">1301</a></span><span class="t"><span class="str"> both.cog -d # This is bad: -r and -d</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1302" href="#t1302">1302</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1303" href="#t1303">1303</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1304" href="#t1304">1304</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1305" href="#t1305">1305</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1306" href="#t1306">1306</a></span><span class="t"> <span class="key">with</span> <span class="nam">self</span><span class="op">.</span><span class="nam">assertRaisesRegex</span><span class="op">(</span><span class="nam">CogUsageError</span><span class="op">,</span> <span class="str">r"^Can't use -d with -r \(or you would delete all your source!\)$"</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1307" href="#t1307">1307</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'@cogfiles.txt'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1308" href="#t1308">1308</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t1309" href="#t1309">1309</a></span><span class="t"> <span class="key">def</span> <span class="nam">testAtFileWithTrickyFilenames</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1310" href="#t1310">1310</a></span><span class="t"> <span class="key">def</span> <span class="nam">fix_backslashes</span><span class="op">(</span><span class="nam">files_txt</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1311" href="#t1311">1311</a></span><span class="t"> <span class="str">"""Make the contents of a files.txt sensitive to the platform."""</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1312" href="#t1312">1312</a></span><span class="t"> <span class="key">if</span> <span class="nam">sys</span><span class="op">.</span><span class="nam">platform</span> <span class="op">!=</span> <span class="str">"win32"</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1313" href="#t1313">1313</a></span><span class="t"> <span class="nam">files_txt</span> <span class="op">=</span> <span class="nam">files_txt</span><span class="op">.</span><span class="nam">replace</span><span class="op">(</span><span class="str">"\\"</span><span class="op">,</span> <span class="str">"/"</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1314" href="#t1314">1314</a></span><span class="t"> <span class="key">return</span> <span class="nam">files_txt</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1288" href="#t1288">1288</a></span><span class="t"> <span class="str">'cogfiles.txt'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1289" href="#t1289">1289</a></span><span class="t"><span class="str"> # Please run cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1290" href="#t1290">1290</a></span><span class="t"><span class="str"> both.cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1291" href="#t1291">1291</a></span><span class="t"><span class="str"> both.cog -d # This is bad: -r and -d</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1292" href="#t1292">1292</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1293" href="#t1293">1293</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1294" href="#t1294">1294</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1295" href="#t1295">1295</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1296" href="#t1296">1296</a></span><span class="t"> <span class="key">with</span> <span class="nam">self</span><span class="op">.</span><span class="nam">assertRaisesRegex</span><span class="op">(</span><span class="nam">CogUsageError</span><span class="op">,</span> <span class="str">r"^Can't use -d with -r \(or you would delete all your source!\)$"</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1297" href="#t1297">1297</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'@cogfiles.txt'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1298" href="#t1298">1298</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t1299" href="#t1299">1299</a></span><span class="t"> <span class="key">def</span> <span class="nam">testAtFileWithTrickyFilenames</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1300" href="#t1300">1300</a></span><span class="t"> <span class="key">def</span> <span class="nam">fix_backslashes</span><span class="op">(</span><span class="nam">files_txt</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1301" href="#t1301">1301</a></span><span class="t"> <span class="str">"""Make the contents of a files.txt sensitive to the platform."""</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1302" href="#t1302">1302</a></span><span class="t"> <span class="key">if</span> <span class="nam">sys</span><span class="op">.</span><span class="nam">platform</span> <span class="op">!=</span> <span class="str">"win32"</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1303" href="#t1303">1303</a></span><span class="t"> <span class="nam">files_txt</span> <span class="op">=</span> <span class="nam">files_txt</span><span class="op">.</span><span class="nam">replace</span><span class="op">(</span><span class="str">"\\"</span><span class="op">,</span> <span class="str">"/"</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1304" href="#t1304">1304</a></span><span class="t"> <span class="key">return</span> <span class="nam">files_txt</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1305" href="#t1305">1305</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1306" href="#t1306">1306</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1307" href="#t1307">1307</a></span><span class="t"> <span class="str">'one 1.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1308" href="#t1308">1308</a></span><span class="t"><span class="str"> //[[[cog cog.outl("hello world") ]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1309" href="#t1309">1309</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1310" href="#t1310">1310</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1311" href="#t1311">1311</a></span><span class="t"> <span class="str">'one.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1312" href="#t1312">1312</a></span><span class="t"><span class="str"> //[[[cog cog.outl("hello world") ]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1313" href="#t1313">1313</a></span><span class="t"><span class="str"> hello world //xxx</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1314" href="#t1314">1314</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1315" href="#t1315">1315</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1316" href="#t1316">1316</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1317" href="#t1317">1317</a></span><span class="t"> <span class="str">'one 1.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1318" href="#t1318">1318</a></span><span class="t"><span class="str"> //[[[cog cog.outl("hello world") ]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1319" href="#t1319">1319</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1316" href="#t1316">1316</a></span><span class="t"> <span class="str">'subdir'</span><span class="op">:</span> <span class="op">{</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1317" href="#t1317">1317</a></span><span class="t"> <span class="str">'subback.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1318" href="#t1318">1318</a></span><span class="t"><span class="str"> //[[[cog cog.outl("down deep with backslashes") ]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1319" href="#t1319">1319</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1320" href="#t1320">1320</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1321" href="#t1321">1321</a></span><span class="t"> <span class="str">'one.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1322" href="#t1322">1322</a></span><span class="t"><span class="str"> //[[[cog cog.outl("hello world") ]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1323" href="#t1323">1323</a></span><span class="t"><span class="str"> hello world //xxx</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1324" href="#t1324">1324</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1321" href="#t1321">1321</a></span><span class="t"> <span class="str">'subfwd.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1322" href="#t1322">1322</a></span><span class="t"><span class="str"> //[[[cog cog.outl("down deep with slashes") ]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1323" href="#t1323">1323</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1324" href="#t1324">1324</a></span><span class="t"> <span class="op">}</span><span class="op">,</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1325" href="#t1325">1325</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1326" href="#t1326">1326</a></span><span class="t"> <span class="str">'subdir'</span><span class="op">:</span> <span class="op">{</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1327" href="#t1327">1327</a></span><span class="t"> <span class="str">'subback.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1328" href="#t1328">1328</a></span><span class="t"><span class="str"> //[[[cog cog.outl("down deep with backslashes") ]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1329" href="#t1329">1329</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1326" href="#t1326">1326</a></span><span class="t"> <span class="str">'subback.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1327" href="#t1327">1327</a></span><span class="t"><span class="str"> //[[[cog cog.outl("down deep with backslashes") ]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1328" href="#t1328">1328</a></span><span class="t"><span class="str"> down deep with backslashes //yyy</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1329" href="#t1329">1329</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1330" href="#t1330">1330</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1331" href="#t1331">1331</a></span><span class="t"> <span class="str">'subfwd.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1332" href="#t1332">1332</a></span><span class="t"><span class="str"> //[[[cog cog.outl("down deep with slashes") ]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1333" href="#t1333">1333</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1334" href="#t1334">1334</a></span><span class="t"> <span class="op">}</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1331" href="#t1331">1331</a></span><span class="t"> <span class="str">'subfwd.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1332" href="#t1332">1332</a></span><span class="t"><span class="str"> //[[[cog cog.outl("down deep with slashes") ]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1333" href="#t1333">1333</a></span><span class="t"><span class="str"> down deep with slashes //zzz</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1334" href="#t1334">1334</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1335" href="#t1335">1335</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1336" href="#t1336">1336</a></span><span class="t"> <span class="str">'subback.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1337" href="#t1337">1337</a></span><span class="t"><span class="str"> //[[[cog cog.outl("down deep with backslashes") ]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1338" href="#t1338">1338</a></span><span class="t"><span class="str"> down deep with backslashes //yyy</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1339" href="#t1339">1339</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1340" href="#t1340">1340</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1341" href="#t1341">1341</a></span><span class="t"> <span class="str">'subfwd.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1342" href="#t1342">1342</a></span><span class="t"><span class="str"> //[[[cog cog.outl("down deep with slashes") ]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1343" href="#t1343">1343</a></span><span class="t"><span class="str"> down deep with slashes //zzz</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1344" href="#t1344">1344</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1345" href="#t1345">1345</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1346" href="#t1346">1346</a></span><span class="t"> <span class="str">'cogfiles.txt'</span><span class="op">:</span> <span class="nam">fix_backslashes</span><span class="op">(</span><span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1347" href="#t1347">1347</a></span><span class="t"><span class="str"> # Please run cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1348" href="#t1348">1348</a></span><span class="t"><span class="str"> 'one 1.cog' -s ' //xxx'</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1349" href="#t1349">1349</a></span><span class="t"><span class="str"> subdir\\subback.cog -s ' //yyy'</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1350" href="#t1350">1350</a></span><span class="t"><span class="str"> subdir/subfwd.cog -s ' //zzz'</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1351" href="#t1351">1351</a></span><span class="t"><span class="str"> """</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1352" href="#t1352">1352</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1353" href="#t1353">1353</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1354" href="#t1354">1354</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1355" href="#t1355">1355</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-z'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'@cogfiles.txt'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1356" href="#t1356">1356</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'one 1.cog'</span><span class="op">,</span> <span class="str">'one.out'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1357" href="#t1357">1357</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'subdir/subback.cog'</span><span class="op">,</span> <span class="str">'subback.out'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1358" href="#t1358">1358</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'subdir/subfwd.cog'</span><span class="op">,</span> <span class="str">'subfwd.out'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1336" href="#t1336">1336</a></span><span class="t"> <span class="str">'cogfiles.txt'</span><span class="op">:</span> <span class="nam">fix_backslashes</span><span class="op">(</span><span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1337" href="#t1337">1337</a></span><span class="t"><span class="str"> # Please run cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1338" href="#t1338">1338</a></span><span class="t"><span class="str"> 'one 1.cog' -s ' //xxx'</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1339" href="#t1339">1339</a></span><span class="t"><span class="str"> subdir\\subback.cog -s ' //yyy'</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1340" href="#t1340">1340</a></span><span class="t"><span class="str"> subdir/subfwd.cog -s ' //zzz'</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1341" href="#t1341">1341</a></span><span class="t"><span class="str"> """</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1342" href="#t1342">1342</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1343" href="#t1343">1343</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1344" href="#t1344">1344</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1345" href="#t1345">1345</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-z'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'@cogfiles.txt'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1346" href="#t1346">1346</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'one 1.cog'</span><span class="op">,</span> <span class="str">'one.out'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1347" href="#t1347">1347</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'subdir/subback.cog'</span><span class="op">,</span> <span class="str">'subback.out'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1348" href="#t1348">1348</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'subdir/subfwd.cog'</span><span class="op">,</span> <span class="str">'subfwd.out'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1349" href="#t1349">1349</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t1350" href="#t1350">1350</a></span><span class="t"> <span class="key">def</span> <span class="nam">run_with_verbosity</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">verbosity</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1351" href="#t1351">1351</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1352" href="#t1352">1352</a></span><span class="t"> <span class="str">'unchanged.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1353" href="#t1353">1353</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1354" href="#t1354">1354</a></span><span class="t"><span class="str"> cog.outl("hello world")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1355" href="#t1355">1355</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1356" href="#t1356">1356</a></span><span class="t"><span class="str"> hello world</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1357" href="#t1357">1357</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1358" href="#t1358">1358</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1359" href="#t1359">1359</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t1360" href="#t1360">1360</a></span><span class="t"> <span class="key">def</span> <span class="nam">run_with_verbosity</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">verbosity</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1361" href="#t1361">1361</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1362" href="#t1362">1362</a></span><span class="t"> <span class="str">'unchanged.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1363" href="#t1363">1363</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1364" href="#t1364">1364</a></span><span class="t"><span class="str"> cog.outl("hello world")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1365" href="#t1365">1365</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1366" href="#t1366">1366</a></span><span class="t"><span class="str"> hello world</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1367" href="#t1367">1367</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1368" href="#t1368">1368</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1369" href="#t1369">1369</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1370" href="#t1370">1370</a></span><span class="t"> <span class="str">'changed.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1371" href="#t1371">1371</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1372" href="#t1372">1372</a></span><span class="t"><span class="str"> cog.outl("goodbye cruel world")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1373" href="#t1373">1373</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1374" href="#t1374">1374</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1375" href="#t1375">1375</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1376" href="#t1376">1376</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1377" href="#t1377">1377</a></span><span class="t"> <span class="str">'cogfiles.txt'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1378" href="#t1378">1378</a></span><span class="t"><span class="str"> unchanged.cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1379" href="#t1379">1379</a></span><span class="t"><span class="str"> changed.cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1380" href="#t1380">1380</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1381" href="#t1381">1381</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1382" href="#t1382">1382</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1383" href="#t1383">1383</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1384" href="#t1384">1384</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'--verbosity='</span><span class="op">+</span><span class="nam">verbosity</span><span class="op">,</span> <span class="str">'@cogfiles.txt'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1385" href="#t1385">1385</a></span><span class="t"> <span class="nam">output</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">output</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1386" href="#t1386">1386</a></span><span class="t"> <span class="key">return</span> <span class="nam">output</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1387" href="#t1387">1387</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t1388" href="#t1388">1388</a></span><span class="t"> <span class="key">def</span> <span class="nam">test_verbosity0</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1389" href="#t1389">1389</a></span><span class="t"> <span class="nam">output</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">run_with_verbosity</span><span class="op">(</span><span class="str">"0"</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1390" href="#t1390">1390</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">output</span><span class="op">,</span> <span class="str">""</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1391" href="#t1391">1391</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t1392" href="#t1392">1392</a></span><span class="t"> <span class="key">def</span> <span class="nam">test_verbosity1</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1393" href="#t1393">1393</a></span><span class="t"> <span class="nam">output</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">run_with_verbosity</span><span class="op">(</span><span class="str">"1"</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1394" href="#t1394">1394</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">output</span><span class="op">,</span> <span class="str">"Cogging changed.cog (changed)\n"</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1395" href="#t1395">1395</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t1396" href="#t1396">1396</a></span><span class="t"> <span class="key">def</span> <span class="nam">test_verbosity2</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1397" href="#t1397">1397</a></span><span class="t"> <span class="nam">output</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">run_with_verbosity</span><span class="op">(</span><span class="str">"2"</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1398" href="#t1398">1398</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">output</span><span class="op">,</span> <span class="str">"Cogging unchanged.cog\nCogging changed.cog (changed)\n"</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1399" href="#t1399">1399</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1400" href="#t1400">1400</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t1401" href="#t1401">1401</a></span><span class="t"><span class="key">class</span> <span class="nam">CogTestLineEndings</span><span class="op">(</span><span class="nam">TestCaseWithTempDir</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1402" href="#t1402">1402</a></span><span class="t"> <span class="str">"""Tests for -U option (force LF line-endings in output)."""</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1403" href="#t1403">1403</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t1404" href="#t1404">1404</a></span><span class="t"> <span class="nam">lines_in</span> <span class="op">=</span> <span class="op">[</span><span class="str">'Some text.'</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1405" href="#t1405">1405</a></span><span class="t"> <span class="str">'//[[[cog'</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1406" href="#t1406">1406</a></span><span class="t"> <span class="str">'cog.outl("Cog text")'</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1407" href="#t1407">1407</a></span><span class="t"> <span class="str">'//]]]'</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1408" href="#t1408">1408</a></span><span class="t"> <span class="str">'gobbledegook.'</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1409" href="#t1409">1409</a></span><span class="t"> <span class="str">'//[[[end]]]'</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1410" href="#t1410">1410</a></span><span class="t"> <span class="str">'epilogue.'</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1411" href="#t1411">1411</a></span><span class="t"> <span class="str">''</span><span class="op">]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1412" href="#t1412">1412</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t1413" href="#t1413">1413</a></span><span class="t"> <span class="nam">lines_out</span> <span class="op">=</span> <span class="op">[</span><span class="str">'Some text.'</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1414" href="#t1414">1414</a></span><span class="t"> <span class="str">'//[[[cog'</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1415" href="#t1415">1415</a></span><span class="t"> <span class="str">'cog.outl("Cog text")'</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1416" href="#t1416">1416</a></span><span class="t"> <span class="str">'//]]]'</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1417" href="#t1417">1417</a></span><span class="t"> <span class="str">'Cog text'</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1418" href="#t1418">1418</a></span><span class="t"> <span class="str">'//[[[end]]]'</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1419" href="#t1419">1419</a></span><span class="t"> <span class="str">'epilogue.'</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1420" href="#t1420">1420</a></span><span class="t"> <span class="str">''</span><span class="op">]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1360" href="#t1360">1360</a></span><span class="t"> <span class="str">'changed.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1361" href="#t1361">1361</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1362" href="#t1362">1362</a></span><span class="t"><span class="str"> cog.outl("goodbye cruel world")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1363" href="#t1363">1363</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1364" href="#t1364">1364</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1365" href="#t1365">1365</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1366" href="#t1366">1366</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1367" href="#t1367">1367</a></span><span class="t"> <span class="str">'cogfiles.txt'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1368" href="#t1368">1368</a></span><span class="t"><span class="str"> unchanged.cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1369" href="#t1369">1369</a></span><span class="t"><span class="str"> changed.cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1370" href="#t1370">1370</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1371" href="#t1371">1371</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1372" href="#t1372">1372</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1373" href="#t1373">1373</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1374" href="#t1374">1374</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'--verbosity='</span><span class="op">+</span><span class="nam">verbosity</span><span class="op">,</span> <span class="str">'@cogfiles.txt'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1375" href="#t1375">1375</a></span><span class="t"> <span class="nam">output</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">output</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1376" href="#t1376">1376</a></span><span class="t"> <span class="key">return</span> <span class="nam">output</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1377" href="#t1377">1377</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t1378" href="#t1378">1378</a></span><span class="t"> <span class="key">def</span> <span class="nam">test_verbosity0</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1379" href="#t1379">1379</a></span><span class="t"> <span class="nam">output</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">run_with_verbosity</span><span class="op">(</span><span class="str">"0"</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1380" href="#t1380">1380</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">output</span><span class="op">,</span> <span class="str">""</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1381" href="#t1381">1381</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t1382" href="#t1382">1382</a></span><span class="t"> <span class="key">def</span> <span class="nam">test_verbosity1</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1383" href="#t1383">1383</a></span><span class="t"> <span class="nam">output</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">run_with_verbosity</span><span class="op">(</span><span class="str">"1"</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1384" href="#t1384">1384</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">output</span><span class="op">,</span> <span class="str">"Cogging changed.cog (changed)\n"</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1385" href="#t1385">1385</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t1386" href="#t1386">1386</a></span><span class="t"> <span class="key">def</span> <span class="nam">test_verbosity2</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1387" href="#t1387">1387</a></span><span class="t"> <span class="nam">output</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">run_with_verbosity</span><span class="op">(</span><span class="str">"2"</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1388" href="#t1388">1388</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">output</span><span class="op">,</span> <span class="str">"Cogging unchanged.cog\nCogging changed.cog (changed)\n"</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1389" href="#t1389">1389</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1390" href="#t1390">1390</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t1391" href="#t1391">1391</a></span><span class="t"><span class="key">class</span> <span class="nam">CogTestLineEndings</span><span class="op">(</span><span class="nam">TestCaseWithTempDir</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1392" href="#t1392">1392</a></span><span class="t"> <span class="str">"""Tests for -U option (force LF line-endings in output)."""</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1393" href="#t1393">1393</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t1394" href="#t1394">1394</a></span><span class="t"> <span class="nam">lines_in</span> <span class="op">=</span> <span class="op">[</span><span class="str">'Some text.'</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1395" href="#t1395">1395</a></span><span class="t"> <span class="str">'//[[[cog'</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1396" href="#t1396">1396</a></span><span class="t"> <span class="str">'cog.outl("Cog text")'</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1397" href="#t1397">1397</a></span><span class="t"> <span class="str">'//]]]'</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1398" href="#t1398">1398</a></span><span class="t"> <span class="str">'gobbledegook.'</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1399" href="#t1399">1399</a></span><span class="t"> <span class="str">'//[[[end]]]'</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1400" href="#t1400">1400</a></span><span class="t"> <span class="str">'epilogue.'</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1401" href="#t1401">1401</a></span><span class="t"> <span class="str">''</span><span class="op">]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1402" href="#t1402">1402</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t1403" href="#t1403">1403</a></span><span class="t"> <span class="nam">lines_out</span> <span class="op">=</span> <span class="op">[</span><span class="str">'Some text.'</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1404" href="#t1404">1404</a></span><span class="t"> <span class="str">'//[[[cog'</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1405" href="#t1405">1405</a></span><span class="t"> <span class="str">'cog.outl("Cog text")'</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1406" href="#t1406">1406</a></span><span class="t"> <span class="str">'//]]]'</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1407" href="#t1407">1407</a></span><span class="t"> <span class="str">'Cog text'</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1408" href="#t1408">1408</a></span><span class="t"> <span class="str">'//[[[end]]]'</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1409" href="#t1409">1409</a></span><span class="t"> <span class="str">'epilogue.'</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1410" href="#t1410">1410</a></span><span class="t"> <span class="str">''</span><span class="op">]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1411" href="#t1411">1411</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t1412" href="#t1412">1412</a></span><span class="t"> <span class="key">def</span> <span class="nam">testOutputNativeEol</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1413" href="#t1413">1413</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="op">{</span><span class="str">'infile'</span><span class="op">:</span> <span class="str">'\n'</span><span class="op">.</span><span class="nam">join</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">lines_in</span><span class="op">)</span><span class="op">}</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1414" href="#t1414">1414</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-o'</span><span class="op">,</span> <span class="str">'outfile'</span><span class="op">,</span> <span class="str">'infile'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1415" href="#t1415">1415</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFileContent</span><span class="op">(</span><span class="str">'outfile'</span><span class="op">,</span> <span class="nam">os</span><span class="op">.</span><span class="nam">linesep</span><span class="op">.</span><span class="nam">join</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">lines_out</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1416" href="#t1416">1416</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t1417" href="#t1417">1417</a></span><span class="t"> <span class="key">def</span> <span class="nam">testOutputLfEol</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1418" href="#t1418">1418</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="op">{</span><span class="str">'infile'</span><span class="op">:</span> <span class="str">'\n'</span><span class="op">.</span><span class="nam">join</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">lines_in</span><span class="op">)</span><span class="op">}</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1419" href="#t1419">1419</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-U'</span><span class="op">,</span> <span class="str">'-o'</span><span class="op">,</span> <span class="str">'outfile'</span><span class="op">,</span> <span class="str">'infile'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1420" href="#t1420">1420</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFileContent</span><span class="op">(</span><span class="str">'outfile'</span><span class="op">,</span> <span class="str">'\n'</span><span class="op">.</span><span class="nam">join</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">lines_out</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1421" href="#t1421">1421</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t1422" href="#t1422">1422</a></span><span class="t"> <span class="key">def</span> <span class="nam">testOutputNativeEol</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1423" href="#t1423">1423</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="op">{</span><span class="str">'infile'</span><span class="op">:</span> <span class="str">'\n'</span><span class="op">.</span><span class="nam">join</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">lines_in</span><span class="op">)</span><span class="op">}</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1424" href="#t1424">1424</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-o'</span><span class="op">,</span> <span class="str">'outfile'</span><span class="op">,</span> <span class="str">'infile'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1425" href="#t1425">1425</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFileContent</span><span class="op">(</span><span class="str">'outfile'</span><span class="op">,</span> <span class="nam">os</span><span class="op">.</span><span class="nam">linesep</span><span class="op">.</span><span class="nam">join</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">lines_out</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t1422" href="#t1422">1422</a></span><span class="t"> <span class="key">def</span> <span class="nam">testReplaceNativeEol</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1423" href="#t1423">1423</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="op">{</span><span class="str">'test.cog'</span><span class="op">:</span> <span class="str">'\n'</span><span class="op">.</span><span class="nam">join</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">lines_in</span><span class="op">)</span><span class="op">}</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1424" href="#t1424">1424</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'test.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1425" href="#t1425">1425</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFileContent</span><span class="op">(</span><span class="str">'test.cog'</span><span class="op">,</span> <span class="nam">os</span><span class="op">.</span><span class="nam">linesep</span><span class="op">.</span><span class="nam">join</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">lines_out</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1426" href="#t1426">1426</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t1427" href="#t1427">1427</a></span><span class="t"> <span class="key">def</span> <span class="nam">testOutputLfEol</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1428" href="#t1428">1428</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="op">{</span><span class="str">'infile'</span><span class="op">:</span> <span class="str">'\n'</span><span class="op">.</span><span class="nam">join</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">lines_in</span><span class="op">)</span><span class="op">}</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1429" href="#t1429">1429</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-U'</span><span class="op">,</span> <span class="str">'-o'</span><span class="op">,</span> <span class="str">'outfile'</span><span class="op">,</span> <span class="str">'infile'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1430" href="#t1430">1430</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFileContent</span><span class="op">(</span><span class="str">'outfile'</span><span class="op">,</span> <span class="str">'\n'</span><span class="op">.</span><span class="nam">join</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">lines_out</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t1427" href="#t1427">1427</a></span><span class="t"> <span class="key">def</span> <span class="nam">testReplaceLfEol</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1428" href="#t1428">1428</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="op">{</span><span class="str">'test.cog'</span><span class="op">:</span> <span class="str">'\n'</span><span class="op">.</span><span class="nam">join</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">lines_in</span><span class="op">)</span><span class="op">}</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1429" href="#t1429">1429</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-U'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'test.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1430" href="#t1430">1430</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFileContent</span><span class="op">(</span><span class="str">'test.cog'</span><span class="op">,</span> <span class="str">'\n'</span><span class="op">.</span><span class="nam">join</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">lines_out</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1431" href="#t1431">1431</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t1432" href="#t1432">1432</a></span><span class="t"> <span class="key">def</span> <span class="nam">testReplaceNativeEol</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1433" href="#t1433">1433</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="op">{</span><span class="str">'test.cog'</span><span class="op">:</span> <span class="str">'\n'</span><span class="op">.</span><span class="nam">join</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">lines_in</span><span class="op">)</span><span class="op">}</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1434" href="#t1434">1434</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'test.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1435" href="#t1435">1435</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFileContent</span><span class="op">(</span><span class="str">'test.cog'</span><span class="op">,</span> <span class="nam">os</span><span class="op">.</span><span class="nam">linesep</span><span class="op">.</span><span class="nam">join</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">lines_out</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1436" href="#t1436">1436</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t1437" href="#t1437">1437</a></span><span class="t"> <span class="key">def</span> <span class="nam">testReplaceLfEol</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1438" href="#t1438">1438</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="op">{</span><span class="str">'test.cog'</span><span class="op">:</span> <span class="str">'\n'</span><span class="op">.</span><span class="nam">join</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">lines_in</span><span class="op">)</span><span class="op">}</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1439" href="#t1439">1439</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-U'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'test.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1440" href="#t1440">1440</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFileContent</span><span class="op">(</span><span class="str">'test.cog'</span><span class="op">,</span> <span class="str">'\n'</span><span class="op">.</span><span class="nam">join</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">lines_out</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1441" href="#t1441">1441</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1442" href="#t1442">1442</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t1443" href="#t1443">1443</a></span><span class="t"><span class="key">class</span> <span class="nam">CogTestCharacterEncoding</span><span class="op">(</span><span class="nam">TestCaseWithTempDir</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1432" href="#t1432">1432</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t1433" href="#t1433">1433</a></span><span class="t"><span class="key">class</span> <span class="nam">CogTestCharacterEncoding</span><span class="op">(</span><span class="nam">TestCaseWithTempDir</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1434" href="#t1434">1434</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t1435" href="#t1435">1435</a></span><span class="t"> <span class="key">def</span> <span class="nam">testSimple</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1436" href="#t1436">1436</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1437" href="#t1437">1437</a></span><span class="t"> <span class="str">'test.cog'</span><span class="op">:</span> <span class="str">b"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1438" href="#t1438">1438</a></span><span class="t"><span class="str"> // This is my C++ file.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1439" href="#t1439">1439</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1440" href="#t1440">1440</a></span><span class="t"><span class="str"> cog.outl("// Unicode: \xe1\x88\xb4 (U+1234)")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1441" href="#t1441">1441</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1442" href="#t1442">1442</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1443" href="#t1443">1443</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1444" href="#t1444">1444</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t1445" href="#t1445">1445</a></span><span class="t"> <span class="key">def</span> <span class="nam">testSimple</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1446" href="#t1446">1446</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1447" href="#t1447">1447</a></span><span class="t"> <span class="str">'test.cog'</span><span class="op">:</span> <span class="str">b"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1448" href="#t1448">1448</a></span><span class="t"><span class="str"> // This is my C++ file.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1449" href="#t1449">1449</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1450" href="#t1450">1450</a></span><span class="t"><span class="str"> cog.outl("// Unicode: \xe1\x88\xb4 (U+1234)")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1451" href="#t1451">1451</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1452" href="#t1452">1452</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1453" href="#t1453">1453</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1445" href="#t1445">1445</a></span><span class="t"> <span class="str">'test.out'</span><span class="op">:</span> <span class="str">b"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1446" href="#t1446">1446</a></span><span class="t"><span class="str"> // This is my C++ file.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1447" href="#t1447">1447</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1448" href="#t1448">1448</a></span><span class="t"><span class="str"> cog.outl("// Unicode: \xe1\x88\xb4 (U+1234)")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1449" href="#t1449">1449</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1450" href="#t1450">1450</a></span><span class="t"><span class="str"> // Unicode: \xe1\x88\xb4 (U+1234)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1451" href="#t1451">1451</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1452" href="#t1452">1452</a></span><span class="t"><span class="str"> """</span><span class="op">.</span><span class="nam">replace</span><span class="op">(</span><span class="str">b"\n"</span><span class="op">,</span> <span class="nam">os</span><span class="op">.</span><span class="nam">linesep</span><span class="op">.</span><span class="nam">encode</span><span class="op">(</span><span class="op">)</span><span class="op">)</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1453" href="#t1453">1453</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1454" href="#t1454">1454</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1455" href="#t1455">1455</a></span><span class="t"> <span class="str">'test.out'</span><span class="op">:</span> <span class="str">b"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1456" href="#t1456">1456</a></span><span class="t"><span class="str"> // This is my C++ file.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1457" href="#t1457">1457</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1458" href="#t1458">1458</a></span><span class="t"><span class="str"> cog.outl("// Unicode: \xe1\x88\xb4 (U+1234)")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1459" href="#t1459">1459</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1460" href="#t1460">1460</a></span><span class="t"><span class="str"> // Unicode: \xe1\x88\xb4 (U+1234)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1461" href="#t1461">1461</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1462" href="#t1462">1462</a></span><span class="t"><span class="str"> """</span><span class="op">.</span><span class="nam">replace</span><span class="op">(</span><span class="str">b"\n"</span><span class="op">,</span> <span class="nam">os</span><span class="op">.</span><span class="nam">linesep</span><span class="op">.</span><span class="nam">encode</span><span class="op">(</span><span class="op">)</span><span class="op">)</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1463" href="#t1463">1463</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1464" href="#t1464">1464</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1465" href="#t1465">1465</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">,</span> <span class="nam">bytes</span><span class="op">=</span><span class="key">True</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1466" href="#t1466">1466</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'test.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1467" href="#t1467">1467</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'test.cog'</span><span class="op">,</span> <span class="str">'test.out'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1468" href="#t1468">1468</a></span><span class="t"> <span class="nam">output</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">output</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1469" href="#t1469">1469</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertIn</span><span class="op">(</span><span class="str">"(changed)"</span><span class="op">,</span> <span class="nam">output</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1455" href="#t1455">1455</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1456" href="#t1456">1456</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'test.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1457" href="#t1457">1457</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'test.cog'</span><span class="op">,</span> <span class="str">'test.out'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1458" href="#t1458">1458</a></span><span class="t"> <span class="nam">output</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">output</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1459" href="#t1459">1459</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertIn</span><span class="op">(</span><span class="str">"(changed)"</span><span class="op">,</span> <span class="nam">output</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1460" href="#t1460">1460</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t1461" href="#t1461">1461</a></span><span class="t"> <span class="key">def</span> <span class="nam">testFileEncodingOption</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1462" href="#t1462">1462</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1463" href="#t1463">1463</a></span><span class="t"> <span class="str">'test.cog'</span><span class="op">:</span> <span class="str">b"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1464" href="#t1464">1464</a></span><span class="t"><span class="str"> // \xca\xee\xe4\xe8\xf0\xe2\xea\xe0 Windows</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1465" href="#t1465">1465</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1466" href="#t1466">1466</a></span><span class="t"><span class="str"> cog.outl("\xd1\xfa\xe5\xf8\xfc \xe5\xf9\xb8 \xfd\xf2\xe8\xf5 \xec\xff\xe3\xea\xe8\xf5 \xf4\xf0\xe0\xed\xf6\xf3\xe7\xf1\xea\xe8\xf5 \xe1\xf3\xeb\xee\xea \xe4\xe0 \xe2\xfb\xef\xe5\xe9 \xf7\xe0\xfe")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1467" href="#t1467">1467</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1468" href="#t1468">1468</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1469" href="#t1469">1469</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1470" href="#t1470">1470</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t1471" href="#t1471">1471</a></span><span class="t"> <span class="key">def</span> <span class="nam">testFileEncodingOption</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1472" href="#t1472">1472</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1473" href="#t1473">1473</a></span><span class="t"> <span class="str">'test.cog'</span><span class="op">:</span> <span class="str">b"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1474" href="#t1474">1474</a></span><span class="t"><span class="str"> // \xca\xee\xe4\xe8\xf0\xe2\xea\xe0 Windows</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1475" href="#t1475">1475</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1476" href="#t1476">1476</a></span><span class="t"><span class="str"> cog.outl("\xd1\xfa\xe5\xf8\xfc \xe5\xf9\xb8 \xfd\xf2\xe8\xf5 \xec\xff\xe3\xea\xe8\xf5 \xf4\xf0\xe0\xed\xf6\xf3\xe7\xf1\xea\xe8\xf5 \xe1\xf3\xeb\xee\xea \xe4\xe0 \xe2\xfb\xef\xe5\xe9 \xf7\xe0\xfe")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1477" href="#t1477">1477</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1478" href="#t1478">1478</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1479" href="#t1479">1479</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1471" href="#t1471">1471</a></span><span class="t"> <span class="str">'test.out'</span><span class="op">:</span> <span class="str">b"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1472" href="#t1472">1472</a></span><span class="t"><span class="str"> // \xca\xee\xe4\xe8\xf0\xe2\xea\xe0 Windows</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1473" href="#t1473">1473</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1474" href="#t1474">1474</a></span><span class="t"><span class="str"> cog.outl("\xd1\xfa\xe5\xf8\xfc \xe5\xf9\xb8 \xfd\xf2\xe8\xf5 \xec\xff\xe3\xea\xe8\xf5 \xf4\xf0\xe0\xed\xf6\xf3\xe7\xf1\xea\xe8\xf5 \xe1\xf3\xeb\xee\xea \xe4\xe0 \xe2\xfb\xef\xe5\xe9 \xf7\xe0\xfe")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1475" href="#t1475">1475</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1476" href="#t1476">1476</a></span><span class="t"><span class="str"> \xd1\xfa\xe5\xf8\xfc \xe5\xf9\xb8 \xfd\xf2\xe8\xf5 \xec\xff\xe3\xea\xe8\xf5 \xf4\xf0\xe0\xed\xf6\xf3\xe7\xf1\xea\xe8\xf5 \xe1\xf3\xeb\xee\xea \xe4\xe0 \xe2\xfb\xef\xe5\xe9 \xf7\xe0\xfe</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1477" href="#t1477">1477</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1478" href="#t1478">1478</a></span><span class="t"><span class="str"> """</span><span class="op">.</span><span class="nam">replace</span><span class="op">(</span><span class="str">b"\n"</span><span class="op">,</span> <span class="nam">os</span><span class="op">.</span><span class="nam">linesep</span><span class="op">.</span><span class="nam">encode</span><span class="op">(</span><span class="op">)</span><span class="op">)</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1479" href="#t1479">1479</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1480" href="#t1480">1480</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1481" href="#t1481">1481</a></span><span class="t"> <span class="str">'test.out'</span><span class="op">:</span> <span class="str">b"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1482" href="#t1482">1482</a></span><span class="t"><span class="str"> // \xca\xee\xe4\xe8\xf0\xe2\xea\xe0 Windows</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1483" href="#t1483">1483</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1484" href="#t1484">1484</a></span><span class="t"><span class="str"> cog.outl("\xd1\xfa\xe5\xf8\xfc \xe5\xf9\xb8 \xfd\xf2\xe8\xf5 \xec\xff\xe3\xea\xe8\xf5 \xf4\xf0\xe0\xed\xf6\xf3\xe7\xf1\xea\xe8\xf5 \xe1\xf3\xeb\xee\xea \xe4\xe0 \xe2\xfb\xef\xe5\xe9 \xf7\xe0\xfe")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1485" href="#t1485">1485</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1486" href="#t1486">1486</a></span><span class="t"><span class="str"> \xd1\xfa\xe5\xf8\xfc \xe5\xf9\xb8 \xfd\xf2\xe8\xf5 \xec\xff\xe3\xea\xe8\xf5 \xf4\xf0\xe0\xed\xf6\xf3\xe7\xf1\xea\xe8\xf5 \xe1\xf3\xeb\xee\xea \xe4\xe0 \xe2\xfb\xef\xe5\xe9 \xf7\xe0\xfe</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1487" href="#t1487">1487</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1488" href="#t1488">1488</a></span><span class="t"><span class="str"> """</span><span class="op">.</span><span class="nam">replace</span><span class="op">(</span><span class="str">b"\n"</span><span class="op">,</span> <span class="nam">os</span><span class="op">.</span><span class="nam">linesep</span><span class="op">.</span><span class="nam">encode</span><span class="op">(</span><span class="op">)</span><span class="op">)</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1489" href="#t1489">1489</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1490" href="#t1490">1490</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1491" href="#t1491">1491</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">,</span> <span class="nam">bytes</span><span class="op">=</span><span class="key">True</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1492" href="#t1492">1492</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-n'</span><span class="op">,</span> <span class="str">'cp1251'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'test.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1493" href="#t1493">1493</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'test.cog'</span><span class="op">,</span> <span class="str">'test.out'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1494" href="#t1494">1494</a></span><span class="t"> <span class="nam">output</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">output</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1495" href="#t1495">1495</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertIn</span><span class="op">(</span><span class="str">"(changed)"</span><span class="op">,</span> <span class="nam">output</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1496" href="#t1496">1496</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1481" href="#t1481">1481</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1482" href="#t1482">1482</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-n'</span><span class="op">,</span> <span class="str">'cp1251'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'test.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1483" href="#t1483">1483</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'test.cog'</span><span class="op">,</span> <span class="str">'test.out'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1484" href="#t1484">1484</a></span><span class="t"> <span class="nam">output</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">output</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1485" href="#t1485">1485</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertIn</span><span class="op">(</span><span class="str">"(changed)"</span><span class="op">,</span> <span class="nam">output</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1486" href="#t1486">1486</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1487" href="#t1487">1487</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t1488" href="#t1488">1488</a></span><span class="t"><span class="key">class</span> <span class="nam">TestCaseWithImports</span><span class="op">(</span><span class="nam">TestCaseWithTempDir</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1489" href="#t1489">1489</a></span><span class="t"> <span class="str">""" When running tests which import modules, the sys.modules list</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1490" href="#t1490">1490</a></span><span class="t"><span class="str"> leaks from one test to the next. This test case class scrubs</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1491" href="#t1491">1491</a></span><span class="t"><span class="str"> the list after each run to keep the tests isolated from each other.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1492" href="#t1492">1492</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1493" href="#t1493">1493</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t1494" href="#t1494">1494</a></span><span class="t"> <span class="key">def</span> <span class="nam">setUp</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1495" href="#t1495">1495</a></span><span class="t"> <span class="nam">super</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">setUp</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1496" href="#t1496">1496</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">sysmodulekeys</span> <span class="op">=</span> <span class="nam">list</span><span class="op">(</span><span class="nam">sys</span><span class="op">.</span><span class="nam">modules</span><span class="op">)</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1497" href="#t1497">1497</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t1498" href="#t1498">1498</a></span><span class="t"><span class="key">class</span> <span class="nam">TestCaseWithImports</span><span class="op">(</span><span class="nam">TestCaseWithTempDir</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1499" href="#t1499">1499</a></span><span class="t"> <span class="str">""" When running tests which import modules, the sys.modules list</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1500" href="#t1500">1500</a></span><span class="t"><span class="str"> leaks from one test to the next. This test case class scrubs</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1501" href="#t1501">1501</a></span><span class="t"><span class="str"> the list after each run to keep the tests isolated from each other.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1502" href="#t1502">1502</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1503" href="#t1503">1503</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t1504" href="#t1504">1504</a></span><span class="t"> <span class="key">def</span> <span class="nam">setUp</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1505" href="#t1505">1505</a></span><span class="t"> <span class="nam">super</span><span class="op">(</span><span class="nam">TestCaseWithImports</span><span class="op">,</span> <span class="nam">self</span><span class="op">)</span><span class="op">.</span><span class="nam">setUp</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1506" href="#t1506">1506</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">sysmodulekeys</span> <span class="op">=</span> <span class="nam">list</span><span class="op">(</span><span class="nam">sys</span><span class="op">.</span><span class="nam">modules</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t1498" href="#t1498">1498</a></span><span class="t"> <span class="key">def</span> <span class="nam">tearDown</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1499" href="#t1499">1499</a></span><span class="t"> <span class="nam">modstoscrub</span> <span class="op">=</span> <span class="op">[</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1500" href="#t1500">1500</a></span><span class="t"> <span class="nam">modname</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1501" href="#t1501">1501</a></span><span class="t"> <span class="key">for</span> <span class="nam">modname</span> <span class="key">in</span> <span class="nam">sys</span><span class="op">.</span><span class="nam">modules</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1502" href="#t1502">1502</a></span><span class="t"> <span class="key">if</span> <span class="nam">modname</span> <span class="key">not</span> <span class="key">in</span> <span class="nam">self</span><span class="op">.</span><span class="nam">sysmodulekeys</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1503" href="#t1503">1503</a></span><span class="t"> <span class="op">]</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1504" href="#t1504">1504</a></span><span class="t"> <span class="key">for</span> <span class="nam">modname</span> <span class="key">in</span> <span class="nam">modstoscrub</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1505" href="#t1505">1505</a></span><span class="t"> <span class="key">del</span> <span class="nam">sys</span><span class="op">.</span><span class="nam">modules</span><span class="op">[</span><span class="nam">modname</span><span class="op">]</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1506" href="#t1506">1506</a></span><span class="t"> <span class="nam">super</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">tearDown</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1507" href="#t1507">1507</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t1508" href="#t1508">1508</a></span><span class="t"> <span class="key">def</span> <span class="nam">tearDown</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1509" href="#t1509">1509</a></span><span class="t"> <span class="nam">modstoscrub</span> <span class="op">=</span> <span class="op">[</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1510" href="#t1510">1510</a></span><span class="t"> <span class="nam">modname</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1511" href="#t1511">1511</a></span><span class="t"> <span class="key">for</span> <span class="nam">modname</span> <span class="key">in</span> <span class="nam">sys</span><span class="op">.</span><span class="nam">modules</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1512" href="#t1512">1512</a></span><span class="t"> <span class="key">if</span> <span class="nam">modname</span> <span class="key">not</span> <span class="key">in</span> <span class="nam">self</span><span class="op">.</span><span class="nam">sysmodulekeys</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1513" href="#t1513">1513</a></span><span class="t"> <span class="op">]</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1514" href="#t1514">1514</a></span><span class="t"> <span class="key">for</span> <span class="nam">modname</span> <span class="key">in</span> <span class="nam">modstoscrub</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1515" href="#t1515">1515</a></span><span class="t"> <span class="key">del</span> <span class="nam">sys</span><span class="op">.</span><span class="nam">modules</span><span class="op">[</span><span class="nam">modname</span><span class="op">]</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1516" href="#t1516">1516</a></span><span class="t"> <span class="nam">super</span><span class="op">(</span><span class="nam">TestCaseWithImports</span><span class="op">,</span> <span class="nam">self</span><span class="op">)</span><span class="op">.</span><span class="nam">tearDown</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1508" href="#t1508">1508</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t1509" href="#t1509">1509</a></span><span class="t"><span class="key">class</span> <span class="nam">CogIncludeTests</span><span class="op">(</span><span class="nam">TestCaseWithImports</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t1510" href="#t1510">1510</a></span><span class="t"> <span class="nam">dincludes</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1511" href="#t1511">1511</a></span><span class="t"> <span class="str">'test.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1512" href="#t1512">1512</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1513" href="#t1513">1513</a></span><span class="t"><span class="str"> import mymodule</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1514" href="#t1514">1514</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1515" href="#t1515">1515</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1516" href="#t1516">1516</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1517" href="#t1517">1517</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1518" href="#t1518">1518</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t1519" href="#t1519">1519</a></span><span class="t"><span class="key">class</span> <span class="nam">CogIncludeTests</span><span class="op">(</span><span class="nam">TestCaseWithImports</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t1520" href="#t1520">1520</a></span><span class="t"> <span class="nam">dincludes</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1521" href="#t1521">1521</a></span><span class="t"> <span class="str">'test.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1522" href="#t1522">1522</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1523" href="#t1523">1523</a></span><span class="t"><span class="str"> import mymodule</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1524" href="#t1524">1524</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1525" href="#t1525">1525</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1526" href="#t1526">1526</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1527" href="#t1527">1527</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1528" href="#t1528">1528</a></span><span class="t"> <span class="str">'test.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1529" href="#t1529">1529</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1530" href="#t1530">1530</a></span><span class="t"><span class="str"> import mymodule</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1531" href="#t1531">1531</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1532" href="#t1532">1532</a></span><span class="t"><span class="str"> Hello from mymodule</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1533" href="#t1533">1533</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1534" href="#t1534">1534</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1535" href="#t1535">1535</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1536" href="#t1536">1536</a></span><span class="t"> <span class="str">'test2.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1537" href="#t1537">1537</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1538" href="#t1538">1538</a></span><span class="t"><span class="str"> import mymodule</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1539" href="#t1539">1539</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1540" href="#t1540">1540</a></span><span class="t"><span class="str"> Hello from mymodule in inc2</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1541" href="#t1541">1541</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1542" href="#t1542">1542</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1543" href="#t1543">1543</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1544" href="#t1544">1544</a></span><span class="t"> <span class="str">'include'</span><span class="op">:</span> <span class="op">{</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1545" href="#t1545">1545</a></span><span class="t"> <span class="str">'mymodule.py'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1546" href="#t1546">1546</a></span><span class="t"><span class="str"> import cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1547" href="#t1547">1547</a></span><span class="t"><span class="str"> cog.outl("Hello from mymodule")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1548" href="#t1548">1548</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1549" href="#t1549">1549</a></span><span class="t"> <span class="op">}</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1550" href="#t1550">1550</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1551" href="#t1551">1551</a></span><span class="t"> <span class="str">'inc2'</span><span class="op">:</span> <span class="op">{</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1552" href="#t1552">1552</a></span><span class="t"> <span class="str">'mymodule.py'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1553" href="#t1553">1553</a></span><span class="t"><span class="str"> import cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1554" href="#t1554">1554</a></span><span class="t"><span class="str"> cog.outl("Hello from mymodule in inc2")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1555" href="#t1555">1555</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1556" href="#t1556">1556</a></span><span class="t"> <span class="op">}</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1557" href="#t1557">1557</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1558" href="#t1558">1558</a></span><span class="t"> <span class="str">'inc3'</span><span class="op">:</span> <span class="op">{</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1559" href="#t1559">1559</a></span><span class="t"> <span class="str">'someothermodule.py'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1560" href="#t1560">1560</a></span><span class="t"><span class="str"> import cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1561" href="#t1561">1561</a></span><span class="t"><span class="str"> cog.outl("This is some other module.")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1562" href="#t1562">1562</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1563" href="#t1563">1563</a></span><span class="t"> <span class="op">}</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1564" href="#t1564">1564</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1565" href="#t1565">1565</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t1566" href="#t1566">1566</a></span><span class="t"> <span class="key">def</span> <span class="nam">testNeedIncludePath</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1567" href="#t1567">1567</a></span><span class="t"> <span class="com"># Try it without the -I, to see that an ImportError happens.</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1568" href="#t1568">1568</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">dincludes</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1569" href="#t1569">1569</a></span><span class="t"> <span class="nam">msg</span> <span class="op">=</span> <span class="str">"(ImportError|ModuleNotFoundError): No module named '?mymodule'?"</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1570" href="#t1570">1570</a></span><span class="t"> <span class="key">with</span> <span class="nam">self</span><span class="op">.</span><span class="nam">assertRaisesRegex</span><span class="op">(</span><span class="nam">CogUserException</span><span class="op">,</span> <span class="nam">msg</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1571" href="#t1571">1571</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'test.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1572" href="#t1572">1572</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t1573" href="#t1573">1573</a></span><span class="t"> <span class="key">def</span> <span class="nam">testIncludePath</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1574" href="#t1574">1574</a></span><span class="t"> <span class="com"># Test that -I adds include directories properly.</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1575" href="#t1575">1575</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">dincludes</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1576" href="#t1576">1576</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'-I'</span><span class="op">,</span> <span class="str">'include'</span><span class="op">,</span> <span class="str">'test.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1577" href="#t1577">1577</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'test.cog'</span><span class="op">,</span> <span class="str">'test.out'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1578" href="#t1578">1578</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t1579" href="#t1579">1579</a></span><span class="t"> <span class="key">def</span> <span class="nam">testTwoIncludePaths</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1580" href="#t1580">1580</a></span><span class="t"> <span class="com"># Test that two -I's add include directories properly.</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1581" href="#t1581">1581</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">dincludes</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1582" href="#t1582">1582</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'-I'</span><span class="op">,</span> <span class="str">'include'</span><span class="op">,</span> <span class="str">'-I'</span><span class="op">,</span> <span class="str">'inc2'</span><span class="op">,</span> <span class="str">'test.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1583" href="#t1583">1583</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'test.cog'</span><span class="op">,</span> <span class="str">'test.out'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1584" href="#t1584">1584</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t1585" href="#t1585">1585</a></span><span class="t"> <span class="key">def</span> <span class="nam">testTwoIncludePaths2</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1586" href="#t1586">1586</a></span><span class="t"> <span class="com"># Test that two -I's add include directories properly.</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1587" href="#t1587">1587</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">dincludes</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1588" href="#t1588">1588</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'-I'</span><span class="op">,</span> <span class="str">'inc2'</span><span class="op">,</span> <span class="str">'-I'</span><span class="op">,</span> <span class="str">'include'</span><span class="op">,</span> <span class="str">'test.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1589" href="#t1589">1589</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'test.cog'</span><span class="op">,</span> <span class="str">'test2.out'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1590" href="#t1590">1590</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t1591" href="#t1591">1591</a></span><span class="t"> <span class="key">def</span> <span class="nam">testUselessIncludePath</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1592" href="#t1592">1592</a></span><span class="t"> <span class="com"># Test that the search will continue past the first directory.</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1593" href="#t1593">1593</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">dincludes</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1594" href="#t1594">1594</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'-I'</span><span class="op">,</span> <span class="str">'inc3'</span><span class="op">,</span> <span class="str">'-I'</span><span class="op">,</span> <span class="str">'include'</span><span class="op">,</span> <span class="str">'test.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1595" href="#t1595">1595</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'test.cog'</span><span class="op">,</span> <span class="str">'test.out'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1596" href="#t1596">1596</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t1597" href="#t1597">1597</a></span><span class="t"> <span class="key">def</span> <span class="nam">testSysPathIsUnchanged</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1598" href="#t1598">1598</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1599" href="#t1599">1599</a></span><span class="t"> <span class="str">'bad.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1600" href="#t1600">1600</a></span><span class="t"><span class="str"> //[[[cog cog.error("Oh no!") ]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1601" href="#t1601">1601</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1602" href="#t1602">1602</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1603" href="#t1603">1603</a></span><span class="t"> <span class="str">'good.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1604" href="#t1604">1604</a></span><span class="t"><span class="str"> //[[[cog cog.outl("Oh yes!") ]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1605" href="#t1605">1605</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1606" href="#t1606">1606</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1607" href="#t1607">1607</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1608" href="#t1608">1608</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1609" href="#t1609">1609</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1610" href="#t1610">1610</a></span><span class="t"> <span class="com"># Is it unchanged just by creating a cog engine?</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1611" href="#t1611">1611</a></span><span class="t"> <span class="nam">oldsyspath</span> <span class="op">=</span> <span class="nam">sys</span><span class="op">.</span><span class="nam">path</span><span class="op">[</span><span class="op">:</span><span class="op">]</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1612" href="#t1612">1612</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">newCog</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1613" href="#t1613">1613</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">oldsyspath</span><span class="op">,</span> <span class="nam">sys</span><span class="op">.</span><span class="nam">path</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1614" href="#t1614">1614</a></span><span class="t"> <span class="com"># Is it unchanged for a successful run?</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1615" href="#t1615">1615</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">newCog</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1616" href="#t1616">1616</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'good.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1617" href="#t1617">1617</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">oldsyspath</span><span class="op">,</span> <span class="nam">sys</span><span class="op">.</span><span class="nam">path</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1618" href="#t1618">1618</a></span><span class="t"> <span class="com"># Is it unchanged for a successful run with includes?</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1619" href="#t1619">1619</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">newCog</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1620" href="#t1620">1620</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'-I'</span><span class="op">,</span> <span class="str">'xyzzy'</span><span class="op">,</span> <span class="str">'good.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1621" href="#t1621">1621</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">oldsyspath</span><span class="op">,</span> <span class="nam">sys</span><span class="op">.</span><span class="nam">path</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1622" href="#t1622">1622</a></span><span class="t"> <span class="com"># Is it unchanged for a successful run with two includes?</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1623" href="#t1623">1623</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">newCog</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1624" href="#t1624">1624</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'-I'</span><span class="op">,</span> <span class="str">'xyzzy'</span><span class="op">,</span> <span class="str">'-I'</span><span class="op">,</span> <span class="str">'quux'</span><span class="op">,</span> <span class="str">'good.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1518" href="#t1518">1518</a></span><span class="t"> <span class="str">'test.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1519" href="#t1519">1519</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1520" href="#t1520">1520</a></span><span class="t"><span class="str"> import mymodule</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1521" href="#t1521">1521</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1522" href="#t1522">1522</a></span><span class="t"><span class="str"> Hello from mymodule</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1523" href="#t1523">1523</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1524" href="#t1524">1524</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1525" href="#t1525">1525</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1526" href="#t1526">1526</a></span><span class="t"> <span class="str">'test2.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1527" href="#t1527">1527</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1528" href="#t1528">1528</a></span><span class="t"><span class="str"> import mymodule</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1529" href="#t1529">1529</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1530" href="#t1530">1530</a></span><span class="t"><span class="str"> Hello from mymodule in inc2</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1531" href="#t1531">1531</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1532" href="#t1532">1532</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1533" href="#t1533">1533</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1534" href="#t1534">1534</a></span><span class="t"> <span class="str">'include'</span><span class="op">:</span> <span class="op">{</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1535" href="#t1535">1535</a></span><span class="t"> <span class="str">'mymodule.py'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1536" href="#t1536">1536</a></span><span class="t"><span class="str"> import cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1537" href="#t1537">1537</a></span><span class="t"><span class="str"> cog.outl("Hello from mymodule")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1538" href="#t1538">1538</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1539" href="#t1539">1539</a></span><span class="t"> <span class="op">}</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1540" href="#t1540">1540</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1541" href="#t1541">1541</a></span><span class="t"> <span class="str">'inc2'</span><span class="op">:</span> <span class="op">{</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1542" href="#t1542">1542</a></span><span class="t"> <span class="str">'mymodule.py'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1543" href="#t1543">1543</a></span><span class="t"><span class="str"> import cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1544" href="#t1544">1544</a></span><span class="t"><span class="str"> cog.outl("Hello from mymodule in inc2")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1545" href="#t1545">1545</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1546" href="#t1546">1546</a></span><span class="t"> <span class="op">}</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1547" href="#t1547">1547</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1548" href="#t1548">1548</a></span><span class="t"> <span class="str">'inc3'</span><span class="op">:</span> <span class="op">{</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1549" href="#t1549">1549</a></span><span class="t"> <span class="str">'someothermodule.py'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1550" href="#t1550">1550</a></span><span class="t"><span class="str"> import cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1551" href="#t1551">1551</a></span><span class="t"><span class="str"> cog.outl("This is some other module.")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1552" href="#t1552">1552</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1553" href="#t1553">1553</a></span><span class="t"> <span class="op">}</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1554" href="#t1554">1554</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1555" href="#t1555">1555</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t1556" href="#t1556">1556</a></span><span class="t"> <span class="key">def</span> <span class="nam">testNeedIncludePath</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1557" href="#t1557">1557</a></span><span class="t"> <span class="com"># Try it without the -I, to see that an ImportError happens.</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1558" href="#t1558">1558</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">dincludes</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1559" href="#t1559">1559</a></span><span class="t"> <span class="nam">msg</span> <span class="op">=</span> <span class="str">"(ImportError|ModuleNotFoundError): No module named '?mymodule'?"</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1560" href="#t1560">1560</a></span><span class="t"> <span class="key">with</span> <span class="nam">self</span><span class="op">.</span><span class="nam">assertRaisesRegex</span><span class="op">(</span><span class="nam">CogUserException</span><span class="op">,</span> <span class="nam">msg</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1561" href="#t1561">1561</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'test.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1562" href="#t1562">1562</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t1563" href="#t1563">1563</a></span><span class="t"> <span class="key">def</span> <span class="nam">testIncludePath</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1564" href="#t1564">1564</a></span><span class="t"> <span class="com"># Test that -I adds include directories properly.</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1565" href="#t1565">1565</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">dincludes</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1566" href="#t1566">1566</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'-I'</span><span class="op">,</span> <span class="str">'include'</span><span class="op">,</span> <span class="str">'test.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1567" href="#t1567">1567</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'test.cog'</span><span class="op">,</span> <span class="str">'test.out'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1568" href="#t1568">1568</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t1569" href="#t1569">1569</a></span><span class="t"> <span class="key">def</span> <span class="nam">testTwoIncludePaths</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1570" href="#t1570">1570</a></span><span class="t"> <span class="com"># Test that two -I's add include directories properly.</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1571" href="#t1571">1571</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">dincludes</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1572" href="#t1572">1572</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'-I'</span><span class="op">,</span> <span class="str">'include'</span><span class="op">,</span> <span class="str">'-I'</span><span class="op">,</span> <span class="str">'inc2'</span><span class="op">,</span> <span class="str">'test.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1573" href="#t1573">1573</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'test.cog'</span><span class="op">,</span> <span class="str">'test.out'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1574" href="#t1574">1574</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t1575" href="#t1575">1575</a></span><span class="t"> <span class="key">def</span> <span class="nam">testTwoIncludePaths2</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1576" href="#t1576">1576</a></span><span class="t"> <span class="com"># Test that two -I's add include directories properly.</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1577" href="#t1577">1577</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">dincludes</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1578" href="#t1578">1578</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'-I'</span><span class="op">,</span> <span class="str">'inc2'</span><span class="op">,</span> <span class="str">'-I'</span><span class="op">,</span> <span class="str">'include'</span><span class="op">,</span> <span class="str">'test.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1579" href="#t1579">1579</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'test.cog'</span><span class="op">,</span> <span class="str">'test2.out'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1580" href="#t1580">1580</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t1581" href="#t1581">1581</a></span><span class="t"> <span class="key">def</span> <span class="nam">testUselessIncludePath</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1582" href="#t1582">1582</a></span><span class="t"> <span class="com"># Test that the search will continue past the first directory.</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1583" href="#t1583">1583</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">dincludes</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1584" href="#t1584">1584</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'-I'</span><span class="op">,</span> <span class="str">'inc3'</span><span class="op">,</span> <span class="str">'-I'</span><span class="op">,</span> <span class="str">'include'</span><span class="op">,</span> <span class="str">'test.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1585" href="#t1585">1585</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'test.cog'</span><span class="op">,</span> <span class="str">'test.out'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1586" href="#t1586">1586</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t1587" href="#t1587">1587</a></span><span class="t"> <span class="key">def</span> <span class="nam">testSysPathIsUnchanged</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1588" href="#t1588">1588</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1589" href="#t1589">1589</a></span><span class="t"> <span class="str">'bad.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1590" href="#t1590">1590</a></span><span class="t"><span class="str"> //[[[cog cog.error("Oh no!") ]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1591" href="#t1591">1591</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1592" href="#t1592">1592</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1593" href="#t1593">1593</a></span><span class="t"> <span class="str">'good.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1594" href="#t1594">1594</a></span><span class="t"><span class="str"> //[[[cog cog.outl("Oh yes!") ]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1595" href="#t1595">1595</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1596" href="#t1596">1596</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1597" href="#t1597">1597</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1598" href="#t1598">1598</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1599" href="#t1599">1599</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1600" href="#t1600">1600</a></span><span class="t"> <span class="com"># Is it unchanged just by creating a cog engine?</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1601" href="#t1601">1601</a></span><span class="t"> <span class="nam">oldsyspath</span> <span class="op">=</span> <span class="nam">sys</span><span class="op">.</span><span class="nam">path</span><span class="op">[</span><span class="op">:</span><span class="op">]</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1602" href="#t1602">1602</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">newCog</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1603" href="#t1603">1603</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">oldsyspath</span><span class="op">,</span> <span class="nam">sys</span><span class="op">.</span><span class="nam">path</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1604" href="#t1604">1604</a></span><span class="t"> <span class="com"># Is it unchanged for a successful run?</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1605" href="#t1605">1605</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">newCog</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1606" href="#t1606">1606</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'good.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1607" href="#t1607">1607</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">oldsyspath</span><span class="op">,</span> <span class="nam">sys</span><span class="op">.</span><span class="nam">path</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1608" href="#t1608">1608</a></span><span class="t"> <span class="com"># Is it unchanged for a successful run with includes?</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1609" href="#t1609">1609</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">newCog</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1610" href="#t1610">1610</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'-I'</span><span class="op">,</span> <span class="str">'xyzzy'</span><span class="op">,</span> <span class="str">'good.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1611" href="#t1611">1611</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">oldsyspath</span><span class="op">,</span> <span class="nam">sys</span><span class="op">.</span><span class="nam">path</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1612" href="#t1612">1612</a></span><span class="t"> <span class="com"># Is it unchanged for a successful run with two includes?</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1613" href="#t1613">1613</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">newCog</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1614" href="#t1614">1614</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'-I'</span><span class="op">,</span> <span class="str">'xyzzy'</span><span class="op">,</span> <span class="str">'-I'</span><span class="op">,</span> <span class="str">'quux'</span><span class="op">,</span> <span class="str">'good.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1615" href="#t1615">1615</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">oldsyspath</span><span class="op">,</span> <span class="nam">sys</span><span class="op">.</span><span class="nam">path</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1616" href="#t1616">1616</a></span><span class="t"> <span class="com"># Is it unchanged for a failed run?</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1617" href="#t1617">1617</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">newCog</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1618" href="#t1618">1618</a></span><span class="t"> <span class="key">with</span> <span class="nam">self</span><span class="op">.</span><span class="nam">assertRaisesRegex</span><span class="op">(</span><span class="nam">CogError</span><span class="op">,</span> <span class="str">r"^Oh no!$"</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1619" href="#t1619">1619</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'bad.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1620" href="#t1620">1620</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">oldsyspath</span><span class="op">,</span> <span class="nam">sys</span><span class="op">.</span><span class="nam">path</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1621" href="#t1621">1621</a></span><span class="t"> <span class="com"># Is it unchanged for a failed run with includes?</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1622" href="#t1622">1622</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">newCog</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1623" href="#t1623">1623</a></span><span class="t"> <span class="key">with</span> <span class="nam">self</span><span class="op">.</span><span class="nam">assertRaisesRegex</span><span class="op">(</span><span class="nam">CogError</span><span class="op">,</span> <span class="str">r"^Oh no!$"</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1624" href="#t1624">1624</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'-I'</span><span class="op">,</span> <span class="str">'xyzzy'</span><span class="op">,</span> <span class="str">'bad.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> <p class="mis show_mis"><span class="n"><a id="t1625" href="#t1625">1625</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">oldsyspath</span><span class="op">,</span> <span class="nam">sys</span><span class="op">.</span><span class="nam">path</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1626" href="#t1626">1626</a></span><span class="t"> <span class="com"># Is it unchanged for a failed run?</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1626" href="#t1626">1626</a></span><span class="t"> <span class="com"># Is it unchanged for a failed run with two includes?</span> </span><span class="r"></span></p> <p class="mis show_mis"><span class="n"><a id="t1627" href="#t1627">1627</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">newCog</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> <p class="mis show_mis"><span class="n"><a id="t1628" href="#t1628">1628</a></span><span class="t"> <span class="key">with</span> <span class="nam">self</span><span class="op">.</span><span class="nam">assertRaisesRegex</span><span class="op">(</span><span class="nam">CogError</span><span class="op">,</span> <span class="str">r"^Oh no!$"</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1629" href="#t1629">1629</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'bad.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1629" href="#t1629">1629</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'-I'</span><span class="op">,</span> <span class="str">'xyzzy'</span><span class="op">,</span> <span class="str">'-I'</span><span class="op">,</span> <span class="str">'quux'</span><span class="op">,</span> <span class="str">'bad.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> <p class="mis show_mis"><span class="n"><a id="t1630" href="#t1630">1630</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">oldsyspath</span><span class="op">,</span> <span class="nam">sys</span><span class="op">.</span><span class="nam">path</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1631" href="#t1631">1631</a></span><span class="t"> <span class="com"># Is it unchanged for a failed run with includes?</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1632" href="#t1632">1632</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">newCog</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1633" href="#t1633">1633</a></span><span class="t"> <span class="key">with</span> <span class="nam">self</span><span class="op">.</span><span class="nam">assertRaisesRegex</span><span class="op">(</span><span class="nam">CogError</span><span class="op">,</span> <span class="str">r"^Oh no!$"</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1634" href="#t1634">1634</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'-I'</span><span class="op">,</span> <span class="str">'xyzzy'</span><span class="op">,</span> <span class="str">'bad.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1635" href="#t1635">1635</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">oldsyspath</span><span class="op">,</span> <span class="nam">sys</span><span class="op">.</span><span class="nam">path</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1636" href="#t1636">1636</a></span><span class="t"> <span class="com"># Is it unchanged for a failed run with two includes?</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1637" href="#t1637">1637</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">newCog</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1638" href="#t1638">1638</a></span><span class="t"> <span class="key">with</span> <span class="nam">self</span><span class="op">.</span><span class="nam">assertRaisesRegex</span><span class="op">(</span><span class="nam">CogError</span><span class="op">,</span> <span class="str">r"^Oh no!$"</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1639" href="#t1639">1639</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'-I'</span><span class="op">,</span> <span class="str">'xyzzy'</span><span class="op">,</span> <span class="str">'-I'</span><span class="op">,</span> <span class="str">'quux'</span><span class="op">,</span> <span class="str">'bad.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1640" href="#t1640">1640</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">oldsyspath</span><span class="op">,</span> <span class="nam">sys</span><span class="op">.</span><span class="nam">path</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1641" href="#t1641">1641</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t1642" href="#t1642">1642</a></span><span class="t"> <span class="key">def</span> <span class="nam">testSubDirectories</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1643" href="#t1643">1643</a></span><span class="t"> <span class="com"># Test that relative paths on the command line work, with includes.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1644" href="#t1644">1644</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1645" href="#t1645">1645</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1646" href="#t1646">1646</a></span><span class="t"> <span class="str">'code'</span><span class="op">:</span> <span class="op">{</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1647" href="#t1647">1647</a></span><span class="t"> <span class="str">'test.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1648" href="#t1648">1648</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1649" href="#t1649">1649</a></span><span class="t"><span class="str"> import mysubmodule</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1650" href="#t1650">1650</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1651" href="#t1651">1651</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1652" href="#t1652">1652</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1653" href="#t1653">1653</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1654" href="#t1654">1654</a></span><span class="t"> <span class="str">'test.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1655" href="#t1655">1655</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1656" href="#t1656">1656</a></span><span class="t"><span class="str"> import mysubmodule</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1657" href="#t1657">1657</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1658" href="#t1658">1658</a></span><span class="t"><span class="str"> Hello from mysubmodule</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1659" href="#t1659">1659</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1660" href="#t1660">1660</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1661" href="#t1661">1661</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1662" href="#t1662">1662</a></span><span class="t"> <span class="str">'mysubmodule.py'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1663" href="#t1663">1663</a></span><span class="t"><span class="str"> import cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1664" href="#t1664">1664</a></span><span class="t"><span class="str"> cog.outl("Hello from mysubmodule")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1665" href="#t1665">1665</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1666" href="#t1666">1666</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1667" href="#t1667">1667</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1668" href="#t1668">1668</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1669" href="#t1669">1669</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1670" href="#t1670">1670</a></span><span class="t"> <span class="com"># We should be able to invoke cog without the -I switch, and it will</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1671" href="#t1671">1671</a></span><span class="t"> <span class="com"># auto-include the current directory</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1672" href="#t1672">1672</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'code/test.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1673" href="#t1673">1673</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'code/test.cog'</span><span class="op">,</span> <span class="str">'code/test.out'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1674" href="#t1674">1674</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1675" href="#t1675">1675</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t1676" href="#t1676">1676</a></span><span class="t"><span class="key">class</span> <span class="nam">CogTestsInFiles</span><span class="op">(</span><span class="nam">TestCaseWithTempDir</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1677" href="#t1677">1677</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t1678" href="#t1678">1678</a></span><span class="t"> <span class="key">def</span> <span class="nam">testWarnIfNoCogCode</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1679" href="#t1679">1679</a></span><span class="t"> <span class="com"># Test that the -e switch warns if there is no Cog code.</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1680" href="#t1680">1680</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1681" href="#t1681">1681</a></span><span class="t"> <span class="str">'with.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1682" href="#t1682">1682</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1683" href="#t1683">1683</a></span><span class="t"><span class="str"> cog.outl("hello world")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1684" href="#t1684">1684</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1685" href="#t1685">1685</a></span><span class="t"><span class="str"> hello world</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1686" href="#t1686">1686</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1687" href="#t1687">1687</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1688" href="#t1688">1688</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1689" href="#t1689">1689</a></span><span class="t"> <span class="str">'without.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1690" href="#t1690">1690</a></span><span class="t"><span class="str"> There's no cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1691" href="#t1691">1691</a></span><span class="t"><span class="str"> code in this file.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1692" href="#t1692">1692</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1693" href="#t1693">1693</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1694" href="#t1694">1694</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1695" href="#t1695">1695</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1696" href="#t1696">1696</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-e'</span><span class="op">,</span> <span class="str">'with.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1697" href="#t1697">1697</a></span><span class="t"> <span class="nam">output</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">output</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1698" href="#t1698">1698</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertNotIn</span><span class="op">(</span><span class="str">"Warning"</span><span class="op">,</span> <span class="nam">output</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1699" href="#t1699">1699</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">newCog</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1700" href="#t1700">1700</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-e'</span><span class="op">,</span> <span class="str">'without.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1701" href="#t1701">1701</a></span><span class="t"> <span class="nam">output</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">output</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1702" href="#t1702">1702</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertIn</span><span class="op">(</span><span class="str">"Warning: no cog code found in without.cog"</span><span class="op">,</span> <span class="nam">output</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1703" href="#t1703">1703</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">newCog</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1704" href="#t1704">1704</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'without.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1705" href="#t1705">1705</a></span><span class="t"> <span class="nam">output</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">output</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1706" href="#t1706">1706</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertNotIn</span><span class="op">(</span><span class="str">"Warning"</span><span class="op">,</span> <span class="nam">output</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1631" href="#t1631">1631</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t1632" href="#t1632">1632</a></span><span class="t"> <span class="key">def</span> <span class="nam">testSubDirectories</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1633" href="#t1633">1633</a></span><span class="t"> <span class="com"># Test that relative paths on the command line work, with includes.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1634" href="#t1634">1634</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1635" href="#t1635">1635</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1636" href="#t1636">1636</a></span><span class="t"> <span class="str">'code'</span><span class="op">:</span> <span class="op">{</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1637" href="#t1637">1637</a></span><span class="t"> <span class="str">'test.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1638" href="#t1638">1638</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1639" href="#t1639">1639</a></span><span class="t"><span class="str"> import mysubmodule</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1640" href="#t1640">1640</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1641" href="#t1641">1641</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1642" href="#t1642">1642</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1643" href="#t1643">1643</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1644" href="#t1644">1644</a></span><span class="t"> <span class="str">'test.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1645" href="#t1645">1645</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1646" href="#t1646">1646</a></span><span class="t"><span class="str"> import mysubmodule</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1647" href="#t1647">1647</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1648" href="#t1648">1648</a></span><span class="t"><span class="str"> Hello from mysubmodule</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1649" href="#t1649">1649</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1650" href="#t1650">1650</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1651" href="#t1651">1651</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1652" href="#t1652">1652</a></span><span class="t"> <span class="str">'mysubmodule.py'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1653" href="#t1653">1653</a></span><span class="t"><span class="str"> import cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1654" href="#t1654">1654</a></span><span class="t"><span class="str"> cog.outl("Hello from mysubmodule")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1655" href="#t1655">1655</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1656" href="#t1656">1656</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1657" href="#t1657">1657</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1658" href="#t1658">1658</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1659" href="#t1659">1659</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1660" href="#t1660">1660</a></span><span class="t"> <span class="com"># We should be able to invoke cog without the -I switch, and it will</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1661" href="#t1661">1661</a></span><span class="t"> <span class="com"># auto-include the current directory</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1662" href="#t1662">1662</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'code/test.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1663" href="#t1663">1663</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'code/test.cog'</span><span class="op">,</span> <span class="str">'code/test.out'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1664" href="#t1664">1664</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1665" href="#t1665">1665</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t1666" href="#t1666">1666</a></span><span class="t"><span class="key">class</span> <span class="nam">CogTestsInFiles</span><span class="op">(</span><span class="nam">TestCaseWithTempDir</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1667" href="#t1667">1667</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t1668" href="#t1668">1668</a></span><span class="t"> <span class="key">def</span> <span class="nam">testWarnIfNoCogCode</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1669" href="#t1669">1669</a></span><span class="t"> <span class="com"># Test that the -e switch warns if there is no Cog code.</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1670" href="#t1670">1670</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1671" href="#t1671">1671</a></span><span class="t"> <span class="str">'with.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1672" href="#t1672">1672</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1673" href="#t1673">1673</a></span><span class="t"><span class="str"> cog.outl("hello world")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1674" href="#t1674">1674</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1675" href="#t1675">1675</a></span><span class="t"><span class="str"> hello world</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1676" href="#t1676">1676</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1677" href="#t1677">1677</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1678" href="#t1678">1678</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1679" href="#t1679">1679</a></span><span class="t"> <span class="str">'without.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1680" href="#t1680">1680</a></span><span class="t"><span class="str"> There's no cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1681" href="#t1681">1681</a></span><span class="t"><span class="str"> code in this file.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1682" href="#t1682">1682</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1683" href="#t1683">1683</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1684" href="#t1684">1684</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1685" href="#t1685">1685</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1686" href="#t1686">1686</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-e'</span><span class="op">,</span> <span class="str">'with.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1687" href="#t1687">1687</a></span><span class="t"> <span class="nam">output</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">output</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1688" href="#t1688">1688</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertNotIn</span><span class="op">(</span><span class="str">"Warning"</span><span class="op">,</span> <span class="nam">output</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1689" href="#t1689">1689</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">newCog</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1690" href="#t1690">1690</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-e'</span><span class="op">,</span> <span class="str">'without.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1691" href="#t1691">1691</a></span><span class="t"> <span class="nam">output</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">output</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1692" href="#t1692">1692</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertIn</span><span class="op">(</span><span class="str">"Warning: no cog code found in without.cog"</span><span class="op">,</span> <span class="nam">output</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1693" href="#t1693">1693</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">newCog</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1694" href="#t1694">1694</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'without.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1695" href="#t1695">1695</a></span><span class="t"> <span class="nam">output</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">output</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1696" href="#t1696">1696</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertNotIn</span><span class="op">(</span><span class="str">"Warning"</span><span class="op">,</span> <span class="nam">output</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1697" href="#t1697">1697</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t1698" href="#t1698">1698</a></span><span class="t"> <span class="key">def</span> <span class="nam">testFileNameProps</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1699" href="#t1699">1699</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1700" href="#t1700">1700</a></span><span class="t"> <span class="str">'cog1.txt'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1701" href="#t1701">1701</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1702" href="#t1702">1702</a></span><span class="t"><span class="str"> cog.outl("This is %s in, %s out" % (cog.inFile, cog.outFile))</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1703" href="#t1703">1703</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1704" href="#t1704">1704</a></span><span class="t"><span class="str"> this is cog1.txt in, cog1.txt out</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1705" href="#t1705">1705</a></span><span class="t"><span class="str"> [[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1706" href="#t1706">1706</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1707" href="#t1707">1707</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t1708" href="#t1708">1708</a></span><span class="t"> <span class="key">def</span> <span class="nam">testFileNameProps</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1709" href="#t1709">1709</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1710" href="#t1710">1710</a></span><span class="t"> <span class="str">'cog1.txt'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1711" href="#t1711">1711</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1712" href="#t1712">1712</a></span><span class="t"><span class="str"> cog.outl("This is %s in, %s out" % (cog.inFile, cog.outFile))</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1713" href="#t1713">1713</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1714" href="#t1714">1714</a></span><span class="t"><span class="str"> this is cog1.txt in, cog1.txt out</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1715" href="#t1715">1715</a></span><span class="t"><span class="str"> [[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1716" href="#t1716">1716</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1717" href="#t1717">1717</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1718" href="#t1718">1718</a></span><span class="t"> <span class="str">'cog1.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1719" href="#t1719">1719</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1720" href="#t1720">1720</a></span><span class="t"><span class="str"> cog.outl("This is %s in, %s out" % (cog.inFile, cog.outFile))</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1721" href="#t1721">1721</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1722" href="#t1722">1722</a></span><span class="t"><span class="str"> This is cog1.txt in, cog1.txt out</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1723" href="#t1723">1723</a></span><span class="t"><span class="str"> [[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1724" href="#t1724">1724</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1725" href="#t1725">1725</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1726" href="#t1726">1726</a></span><span class="t"> <span class="str">'cog1out.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1727" href="#t1727">1727</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1728" href="#t1728">1728</a></span><span class="t"><span class="str"> cog.outl("This is %s in, %s out" % (cog.inFile, cog.outFile))</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1729" href="#t1729">1729</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1730" href="#t1730">1730</a></span><span class="t"><span class="str"> This is cog1.txt in, cog1out.txt out</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1731" href="#t1731">1731</a></span><span class="t"><span class="str"> [[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1732" href="#t1732">1732</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1733" href="#t1733">1733</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1734" href="#t1734">1734</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1735" href="#t1735">1735</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1736" href="#t1736">1736</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'cog1.txt'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1737" href="#t1737">1737</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'cog1.txt'</span><span class="op">,</span> <span class="str">'cog1.out'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1738" href="#t1738">1738</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">newCog</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1739" href="#t1739">1739</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-o'</span><span class="op">,</span> <span class="str">'cog1out.txt'</span><span class="op">,</span> <span class="str">'cog1.txt'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1740" href="#t1740">1740</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'cog1out.txt'</span><span class="op">,</span> <span class="str">'cog1out.out'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1708" href="#t1708">1708</a></span><span class="t"> <span class="str">'cog1.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1709" href="#t1709">1709</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1710" href="#t1710">1710</a></span><span class="t"><span class="str"> cog.outl("This is %s in, %s out" % (cog.inFile, cog.outFile))</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1711" href="#t1711">1711</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1712" href="#t1712">1712</a></span><span class="t"><span class="str"> This is cog1.txt in, cog1.txt out</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1713" href="#t1713">1713</a></span><span class="t"><span class="str"> [[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1714" href="#t1714">1714</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1715" href="#t1715">1715</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1716" href="#t1716">1716</a></span><span class="t"> <span class="str">'cog1out.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1717" href="#t1717">1717</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1718" href="#t1718">1718</a></span><span class="t"><span class="str"> cog.outl("This is %s in, %s out" % (cog.inFile, cog.outFile))</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1719" href="#t1719">1719</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1720" href="#t1720">1720</a></span><span class="t"><span class="str"> This is cog1.txt in, cog1out.txt out</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1721" href="#t1721">1721</a></span><span class="t"><span class="str"> [[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1722" href="#t1722">1722</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1723" href="#t1723">1723</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1724" href="#t1724">1724</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1725" href="#t1725">1725</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1726" href="#t1726">1726</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'cog1.txt'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1727" href="#t1727">1727</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'cog1.txt'</span><span class="op">,</span> <span class="str">'cog1.out'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1728" href="#t1728">1728</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">newCog</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1729" href="#t1729">1729</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-o'</span><span class="op">,</span> <span class="str">'cog1out.txt'</span><span class="op">,</span> <span class="str">'cog1.txt'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1730" href="#t1730">1730</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'cog1out.txt'</span><span class="op">,</span> <span class="str">'cog1out.out'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1731" href="#t1731">1731</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t1732" href="#t1732">1732</a></span><span class="t"> <span class="key">def</span> <span class="nam">testGlobalsDontCrossFiles</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1733" href="#t1733">1733</a></span><span class="t"> <span class="com"># Make sure that global values don't get shared between files.</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1734" href="#t1734">1734</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1735" href="#t1735">1735</a></span><span class="t"> <span class="str">'one.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1736" href="#t1736">1736</a></span><span class="t"><span class="str"> //[[[cog s = "This was set in one.cog" ]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1737" href="#t1737">1737</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1738" href="#t1738">1738</a></span><span class="t"><span class="str"> //[[[cog cog.outl(s) ]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1739" href="#t1739">1739</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1740" href="#t1740">1740</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1741" href="#t1741">1741</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t1742" href="#t1742">1742</a></span><span class="t"> <span class="key">def</span> <span class="nam">testGlobalsDontCrossFiles</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1743" href="#t1743">1743</a></span><span class="t"> <span class="com"># Make sure that global values don't get shared between files.</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1744" href="#t1744">1744</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1745" href="#t1745">1745</a></span><span class="t"> <span class="str">'one.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1746" href="#t1746">1746</a></span><span class="t"><span class="str"> //[[[cog s = "This was set in one.cog" ]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1742" href="#t1742">1742</a></span><span class="t"> <span class="str">'one.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1743" href="#t1743">1743</a></span><span class="t"><span class="str"> //[[[cog s = "This was set in one.cog" ]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1744" href="#t1744">1744</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1745" href="#t1745">1745</a></span><span class="t"><span class="str"> //[[[cog cog.outl(s) ]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1746" href="#t1746">1746</a></span><span class="t"><span class="str"> This was set in one.cog</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1747" href="#t1747">1747</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1748" href="#t1748">1748</a></span><span class="t"><span class="str"> //[[[cog cog.outl(s) ]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1749" href="#t1749">1749</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1750" href="#t1750">1750</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1751" href="#t1751">1751</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1752" href="#t1752">1752</a></span><span class="t"> <span class="str">'one.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1753" href="#t1753">1753</a></span><span class="t"><span class="str"> //[[[cog s = "This was set in one.cog" ]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1754" href="#t1754">1754</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1755" href="#t1755">1755</a></span><span class="t"><span class="str"> //[[[cog cog.outl(s) ]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1756" href="#t1756">1756</a></span><span class="t"><span class="str"> This was set in one.cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1748" href="#t1748">1748</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1749" href="#t1749">1749</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1750" href="#t1750">1750</a></span><span class="t"> <span class="str">'two.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1751" href="#t1751">1751</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1752" href="#t1752">1752</a></span><span class="t"><span class="str"> try:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1753" href="#t1753">1753</a></span><span class="t"><span class="str"> cog.outl(s)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1754" href="#t1754">1754</a></span><span class="t"><span class="str"> except NameError:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1755" href="#t1755">1755</a></span><span class="t"><span class="str"> cog.outl("s isn't set!")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1756" href="#t1756">1756</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1757" href="#t1757">1757</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1758" href="#t1758">1758</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1759" href="#t1759">1759</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1760" href="#t1760">1760</a></span><span class="t"> <span class="str">'two.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1760" href="#t1760">1760</a></span><span class="t"> <span class="str">'two.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1761" href="#t1761">1761</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1762" href="#t1762">1762</a></span><span class="t"><span class="str"> try:</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1763" href="#t1763">1763</a></span><span class="t"><span class="str"> cog.outl(s)</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1764" href="#t1764">1764</a></span><span class="t"><span class="str"> except NameError:</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1765" href="#t1765">1765</a></span><span class="t"><span class="str"> cog.outl("s isn't set!")</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1766" href="#t1766">1766</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1767" href="#t1767">1767</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1768" href="#t1768">1768</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1769" href="#t1769">1769</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1770" href="#t1770">1770</a></span><span class="t"> <span class="str">'two.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1771" href="#t1771">1771</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1772" href="#t1772">1772</a></span><span class="t"><span class="str"> try:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1773" href="#t1773">1773</a></span><span class="t"><span class="str"> cog.outl(s)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1774" href="#t1774">1774</a></span><span class="t"><span class="str"> except NameError:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1775" href="#t1775">1775</a></span><span class="t"><span class="str"> cog.outl("s isn't set!")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1776" href="#t1776">1776</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1777" href="#t1777">1777</a></span><span class="t"><span class="str"> s isn't set!</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1778" href="#t1778">1778</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1779" href="#t1779">1779</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1780" href="#t1780">1780</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1781" href="#t1781">1781</a></span><span class="t"> <span class="str">'cogfiles.txt'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1782" href="#t1782">1782</a></span><span class="t"><span class="str"> # Please run cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1783" href="#t1783">1783</a></span><span class="t"><span class="str"> one.cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1784" href="#t1784">1784</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1785" href="#t1785">1785</a></span><span class="t"><span class="str"> two.cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1786" href="#t1786">1786</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1787" href="#t1787">1787</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1788" href="#t1788">1788</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1789" href="#t1789">1789</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1790" href="#t1790">1790</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'@cogfiles.txt'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1791" href="#t1791">1791</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'one.cog'</span><span class="op">,</span> <span class="str">'one.out'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1792" href="#t1792">1792</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'two.cog'</span><span class="op">,</span> <span class="str">'two.out'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1793" href="#t1793">1793</a></span><span class="t"> <span class="nam">output</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">output</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1794" href="#t1794">1794</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertIn</span><span class="op">(</span><span class="str">"(changed)"</span><span class="op">,</span> <span class="nam">output</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1795" href="#t1795">1795</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t1796" href="#t1796">1796</a></span><span class="t"> <span class="key">def</span> <span class="nam">testRemoveGeneratedOutput</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1797" href="#t1797">1797</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1798" href="#t1798">1798</a></span><span class="t"> <span class="str">'cog1.txt'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1799" href="#t1799">1799</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1800" href="#t1800">1800</a></span><span class="t"><span class="str"> cog.outl("This line was generated.")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1801" href="#t1801">1801</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1802" href="#t1802">1802</a></span><span class="t"><span class="str"> This line was generated.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1803" href="#t1803">1803</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1804" href="#t1804">1804</a></span><span class="t"><span class="str"> This line was not.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1805" href="#t1805">1805</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1806" href="#t1806">1806</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1807" href="#t1807">1807</a></span><span class="t"> <span class="str">'cog1.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1808" href="#t1808">1808</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1809" href="#t1809">1809</a></span><span class="t"><span class="str"> cog.outl("This line was generated.")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1810" href="#t1810">1810</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1811" href="#t1811">1811</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1812" href="#t1812">1812</a></span><span class="t"><span class="str"> This line was not.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1813" href="#t1813">1813</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1767" href="#t1767">1767</a></span><span class="t"><span class="str"> s isn't set!</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1768" href="#t1768">1768</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1769" href="#t1769">1769</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1770" href="#t1770">1770</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1771" href="#t1771">1771</a></span><span class="t"> <span class="str">'cogfiles.txt'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1772" href="#t1772">1772</a></span><span class="t"><span class="str"> # Please run cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1773" href="#t1773">1773</a></span><span class="t"><span class="str"> one.cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1774" href="#t1774">1774</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1775" href="#t1775">1775</a></span><span class="t"><span class="str"> two.cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1776" href="#t1776">1776</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1777" href="#t1777">1777</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1778" href="#t1778">1778</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1779" href="#t1779">1779</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1780" href="#t1780">1780</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'@cogfiles.txt'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1781" href="#t1781">1781</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'one.cog'</span><span class="op">,</span> <span class="str">'one.out'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1782" href="#t1782">1782</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'two.cog'</span><span class="op">,</span> <span class="str">'two.out'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1783" href="#t1783">1783</a></span><span class="t"> <span class="nam">output</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">output</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1784" href="#t1784">1784</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertIn</span><span class="op">(</span><span class="str">"(changed)"</span><span class="op">,</span> <span class="nam">output</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1785" href="#t1785">1785</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t1786" href="#t1786">1786</a></span><span class="t"> <span class="key">def</span> <span class="nam">testRemoveGeneratedOutput</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1787" href="#t1787">1787</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1788" href="#t1788">1788</a></span><span class="t"> <span class="str">'cog1.txt'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1789" href="#t1789">1789</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1790" href="#t1790">1790</a></span><span class="t"><span class="str"> cog.outl("This line was generated.")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1791" href="#t1791">1791</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1792" href="#t1792">1792</a></span><span class="t"><span class="str"> This line was generated.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1793" href="#t1793">1793</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1794" href="#t1794">1794</a></span><span class="t"><span class="str"> This line was not.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1795" href="#t1795">1795</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1796" href="#t1796">1796</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1797" href="#t1797">1797</a></span><span class="t"> <span class="str">'cog1.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1798" href="#t1798">1798</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1799" href="#t1799">1799</a></span><span class="t"><span class="str"> cog.outl("This line was generated.")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1800" href="#t1800">1800</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1801" href="#t1801">1801</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1802" href="#t1802">1802</a></span><span class="t"><span class="str"> This line was not.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1803" href="#t1803">1803</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1804" href="#t1804">1804</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1805" href="#t1805">1805</a></span><span class="t"> <span class="str">'cog1.out2'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1806" href="#t1806">1806</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1807" href="#t1807">1807</a></span><span class="t"><span class="str"> cog.outl("This line was generated.")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1808" href="#t1808">1808</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1809" href="#t1809">1809</a></span><span class="t"><span class="str"> This line was generated.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1810" href="#t1810">1810</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1811" href="#t1811">1811</a></span><span class="t"><span class="str"> This line was not.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1812" href="#t1812">1812</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1813" href="#t1813">1813</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1814" href="#t1814">1814</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1815" href="#t1815">1815</a></span><span class="t"> <span class="str">'cog1.out2'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1816" href="#t1816">1816</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1817" href="#t1817">1817</a></span><span class="t"><span class="str"> cog.outl("This line was generated.")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1818" href="#t1818">1818</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1819" href="#t1819">1819</a></span><span class="t"><span class="str"> This line was generated.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1820" href="#t1820">1820</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1821" href="#t1821">1821</a></span><span class="t"><span class="str"> This line was not.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1822" href="#t1822">1822</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1823" href="#t1823">1823</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1824" href="#t1824">1824</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1825" href="#t1825">1825</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1826" href="#t1826">1826</a></span><span class="t"> <span class="com"># Remove generated output.</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1827" href="#t1827">1827</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'-x'</span><span class="op">,</span> <span class="str">'cog1.txt'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1828" href="#t1828">1828</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'cog1.txt'</span><span class="op">,</span> <span class="str">'cog1.out'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1829" href="#t1829">1829</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">newCog</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1830" href="#t1830">1830</a></span><span class="t"> <span class="com"># Regenerate the generated output.</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1831" href="#t1831">1831</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'cog1.txt'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1832" href="#t1832">1832</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'cog1.txt'</span><span class="op">,</span> <span class="str">'cog1.out2'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1833" href="#t1833">1833</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">newCog</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1834" href="#t1834">1834</a></span><span class="t"> <span class="com"># Remove the generated output again.</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1835" href="#t1835">1835</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'-x'</span><span class="op">,</span> <span class="str">'cog1.txt'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1836" href="#t1836">1836</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'cog1.txt'</span><span class="op">,</span> <span class="str">'cog1.out'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1837" href="#t1837">1837</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t1838" href="#t1838">1838</a></span><span class="t"> <span class="key">def</span> <span class="nam">testMsgCall</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1839" href="#t1839">1839</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1840" href="#t1840">1840</a></span><span class="t"><span class="str"> #[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1841" href="#t1841">1841</a></span><span class="t"><span class="str"> cog.msg("Hello there!")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1842" href="#t1842">1842</a></span><span class="t"><span class="str"> #]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1843" href="#t1843">1843</a></span><span class="t"><span class="str"> #[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1844" href="#t1844">1844</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1845" href="#t1845">1845</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1846" href="#t1846">1846</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">processString</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span><span class="op">,</span> <span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1847" href="#t1847">1847</a></span><span class="t"> <span class="nam">output</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">output</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1848" href="#t1848">1848</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">output</span><span class="op">,</span> <span class="str">"Message: Hello there!\n"</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1849" href="#t1849">1849</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t1850" href="#t1850">1850</a></span><span class="t"> <span class="key">def</span> <span class="nam">testErrorMessageHasNoTraceback</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1851" href="#t1851">1851</a></span><span class="t"> <span class="com"># Test that a Cog error is printed to stderr with no traceback.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1852" href="#t1852">1852</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1853" href="#t1853">1853</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1854" href="#t1854">1854</a></span><span class="t"> <span class="str">'cog1.txt'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1855" href="#t1855">1855</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1856" href="#t1856">1856</a></span><span class="t"><span class="str"> cog.outl("This line was newly")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1857" href="#t1857">1857</a></span><span class="t"><span class="str"> cog.outl("generated by cog")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1858" href="#t1858">1858</a></span><span class="t"><span class="str"> cog.outl("blah blah.")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1859" href="#t1859">1859</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1860" href="#t1860">1860</a></span><span class="t"><span class="str"> Xhis line was newly</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1861" href="#t1861">1861</a></span><span class="t"><span class="str"> generated by cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1862" href="#t1862">1862</a></span><span class="t"><span class="str"> blah blah.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1863" href="#t1863">1863</a></span><span class="t"><span class="str"> //[[[end]]] (checksum: a8540982e5ad6b95c9e9a184b26f4346)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1864" href="#t1864">1864</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1865" href="#t1865">1865</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1866" href="#t1866">1866</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1867" href="#t1867">1867</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1868" href="#t1868">1868</a></span><span class="t"> <span class="nam">stderr</span> <span class="op">=</span> <span class="nam">StringIO</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1869" href="#t1869">1869</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">setOutput</span><span class="op">(</span><span class="nam">stderr</span><span class="op">=</span><span class="nam">stderr</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1870" href="#t1870">1870</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">main</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-c'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">"cog1.txt"</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1871" href="#t1871">1871</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">output</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span><span class="op">,</span> <span class="str">"Cogging cog1.txt\n"</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1872" href="#t1872">1872</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">stderr</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span><span class="op">,</span> <span class="str">"cog1.txt(9): Output has been edited! Delete old checksum to unprotect.\n"</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1873" href="#t1873">1873</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t1874" href="#t1874">1874</a></span><span class="t"> <span class="key">def</span> <span class="nam">testDashD</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1875" href="#t1875">1875</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1876" href="#t1876">1876</a></span><span class="t"> <span class="str">'test.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1877" href="#t1877">1877</a></span><span class="t"><span class="str"> --[[[cog cog.outl("Defined fooey as " + fooey) ]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1878" href="#t1878">1878</a></span><span class="t"><span class="str"> --[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1879" href="#t1879">1879</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1880" href="#t1880">1880</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1881" href="#t1881">1881</a></span><span class="t"> <span class="str">'test.kablooey'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1882" href="#t1882">1882</a></span><span class="t"><span class="str"> --[[[cog cog.outl("Defined fooey as " + fooey) ]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1883" href="#t1883">1883</a></span><span class="t"><span class="str"> Defined fooey as kablooey</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1884" href="#t1884">1884</a></span><span class="t"><span class="str"> --[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1885" href="#t1885">1885</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1886" href="#t1886">1886</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1887" href="#t1887">1887</a></span><span class="t"> <span class="str">'test.einstein'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1888" href="#t1888">1888</a></span><span class="t"><span class="str"> --[[[cog cog.outl("Defined fooey as " + fooey) ]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1889" href="#t1889">1889</a></span><span class="t"><span class="str"> Defined fooey as e=mc2</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1890" href="#t1890">1890</a></span><span class="t"><span class="str"> --[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1891" href="#t1891">1891</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1892" href="#t1892">1892</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1893" href="#t1893">1893</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1894" href="#t1894">1894</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1895" href="#t1895">1895</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'-D'</span><span class="op">,</span> <span class="str">'fooey=kablooey'</span><span class="op">,</span> <span class="str">'test.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1896" href="#t1896">1896</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'test.cog'</span><span class="op">,</span> <span class="str">'test.kablooey'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1897" href="#t1897">1897</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1898" href="#t1898">1898</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'-Dfooey=kablooey'</span><span class="op">,</span> <span class="str">'test.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1899" href="#t1899">1899</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'test.cog'</span><span class="op">,</span> <span class="str">'test.kablooey'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1900" href="#t1900">1900</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1901" href="#t1901">1901</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'-Dfooey=e=mc2'</span><span class="op">,</span> <span class="str">'test.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1902" href="#t1902">1902</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'test.cog'</span><span class="op">,</span> <span class="str">'test.einstein'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1903" href="#t1903">1903</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1904" href="#t1904">1904</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'-Dbar=quux'</span><span class="op">,</span> <span class="str">'-Dfooey=kablooey'</span><span class="op">,</span> <span class="str">'test.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1905" href="#t1905">1905</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'test.cog'</span><span class="op">,</span> <span class="str">'test.kablooey'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1906" href="#t1906">1906</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1907" href="#t1907">1907</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'-Dfooey=kablooey'</span><span class="op">,</span> <span class="str">'-Dbar=quux'</span><span class="op">,</span> <span class="str">'test.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1908" href="#t1908">1908</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'test.cog'</span><span class="op">,</span> <span class="str">'test.kablooey'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1909" href="#t1909">1909</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1910" href="#t1910">1910</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'-Dfooey=gooey'</span><span class="op">,</span> <span class="str">'-Dfooey=kablooey'</span><span class="op">,</span> <span class="str">'test.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1911" href="#t1911">1911</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'test.cog'</span><span class="op">,</span> <span class="str">'test.kablooey'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1912" href="#t1912">1912</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t1913" href="#t1913">1913</a></span><span class="t"> <span class="key">def</span> <span class="nam">testOutputToStdout</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1914" href="#t1914">1914</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1915" href="#t1915">1915</a></span><span class="t"> <span class="str">'test.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1916" href="#t1916">1916</a></span><span class="t"><span class="str"> --[[[cog cog.outl('Hey there!') ]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1917" href="#t1917">1917</a></span><span class="t"><span class="str"> --[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1918" href="#t1918">1918</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1919" href="#t1919">1919</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1920" href="#t1920">1920</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1921" href="#t1921">1921</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1922" href="#t1922">1922</a></span><span class="t"> <span class="nam">stderr</span> <span class="op">=</span> <span class="nam">StringIO</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1923" href="#t1923">1923</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">setOutput</span><span class="op">(</span><span class="nam">stderr</span><span class="op">=</span><span class="nam">stderr</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1924" href="#t1924">1924</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'test.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1925" href="#t1925">1925</a></span><span class="t"> <span class="nam">output</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">output</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1926" href="#t1926">1926</a></span><span class="t"> <span class="nam">outerr</span> <span class="op">=</span> <span class="nam">stderr</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1927" href="#t1927">1927</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">output</span><span class="op">,</span> <span class="str">"--[[[cog cog.outl('Hey there!') ]]]\nHey there!\n--[[[end]]]\n"</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1928" href="#t1928">1928</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">outerr</span><span class="op">,</span> <span class="str">""</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1929" href="#t1929">1929</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t1930" href="#t1930">1930</a></span><span class="t"> <span class="key">def</span> <span class="nam">testReadFromStdin</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1931" href="#t1931">1931</a></span><span class="t"> <span class="nam">stdin</span> <span class="op">=</span> <span class="nam">StringIO</span><span class="op">(</span><span class="str">"--[[[cog cog.outl('Wow') ]]]\n--[[[end]]]\n"</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1932" href="#t1932">1932</a></span><span class="t"> <span class="key">def</span> <span class="nam">restore_stdin</span><span class="op">(</span><span class="nam">old_stdin</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1933" href="#t1933">1933</a></span><span class="t"> <span class="nam">sys</span><span class="op">.</span><span class="nam">stdin</span> <span class="op">=</span> <span class="nam">old_stdin</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1934" href="#t1934">1934</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">addCleanup</span><span class="op">(</span><span class="nam">restore_stdin</span><span class="op">,</span> <span class="nam">sys</span><span class="op">.</span><span class="nam">stdin</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1935" href="#t1935">1935</a></span><span class="t"> <span class="nam">sys</span><span class="op">.</span><span class="nam">stdin</span> <span class="op">=</span> <span class="nam">stdin</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1936" href="#t1936">1936</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1937" href="#t1937">1937</a></span><span class="t"> <span class="nam">stderr</span> <span class="op">=</span> <span class="nam">StringIO</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1938" href="#t1938">1938</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">setOutput</span><span class="op">(</span><span class="nam">stderr</span><span class="op">=</span><span class="nam">stderr</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1939" href="#t1939">1939</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1940" href="#t1940">1940</a></span><span class="t"> <span class="nam">output</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">output</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1941" href="#t1941">1941</a></span><span class="t"> <span class="nam">outerr</span> <span class="op">=</span> <span class="nam">stderr</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1942" href="#t1942">1942</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">output</span><span class="op">,</span> <span class="str">"--[[[cog cog.outl('Wow') ]]]\nWow\n--[[[end]]]\n"</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1943" href="#t1943">1943</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">outerr</span><span class="op">,</span> <span class="str">""</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1944" href="#t1944">1944</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t1945" href="#t1945">1945</a></span><span class="t"> <span class="key">def</span> <span class="nam">testSuffixOutputLines</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1946" href="#t1946">1946</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1947" href="#t1947">1947</a></span><span class="t"> <span class="str">'test.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1948" href="#t1948">1948</a></span><span class="t"><span class="str"> Hey there.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1949" href="#t1949">1949</a></span><span class="t"><span class="str"> ;[[[cog cog.outl('a\\nb\\n \\nc') ]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1950" href="#t1950">1950</a></span><span class="t"><span class="str"> ;[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1951" href="#t1951">1951</a></span><span class="t"><span class="str"> Good bye.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1952" href="#t1952">1952</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1953" href="#t1953">1953</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1954" href="#t1954">1954</a></span><span class="t"> <span class="str">'test.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1955" href="#t1955">1955</a></span><span class="t"><span class="str"> Hey there.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1956" href="#t1956">1956</a></span><span class="t"><span class="str"> ;[[[cog cog.outl('a\\nb\\n \\nc') ]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1957" href="#t1957">1957</a></span><span class="t"><span class="str"> a (foo)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1958" href="#t1958">1958</a></span><span class="t"><span class="str"> b (foo)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1959" href="#t1959">1959</a></span><span class="t"><span class="str"> """</span> <span class="com"># These three trailing spaces are important.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1960" href="#t1960">1960</a></span><span class="t"> <span class="com"># The suffix is not applied to completely blank lines.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1961" href="#t1961">1961</a></span><span class="t"> <span class="str">"""</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1962" href="#t1962">1962</a></span><span class="t"><span class="str"> c (foo)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1963" href="#t1963">1963</a></span><span class="t"><span class="str"> ;[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1964" href="#t1964">1964</a></span><span class="t"><span class="str"> Good bye.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1965" href="#t1965">1965</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1966" href="#t1966">1966</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1967" href="#t1967">1967</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1968" href="#t1968">1968</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1969" href="#t1969">1969</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'-s'</span><span class="op">,</span> <span class="str">' (foo)'</span><span class="op">,</span> <span class="str">'test.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1970" href="#t1970">1970</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'test.cog'</span><span class="op">,</span> <span class="str">'test.out'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1971" href="#t1971">1971</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t1972" href="#t1972">1972</a></span><span class="t"> <span class="key">def</span> <span class="nam">testEmptySuffix</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1973" href="#t1973">1973</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1974" href="#t1974">1974</a></span><span class="t"> <span class="str">'test.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1975" href="#t1975">1975</a></span><span class="t"><span class="str"> ;[[[cog cog.outl('a\\nb\\nc') ]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1976" href="#t1976">1976</a></span><span class="t"><span class="str"> ;[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1977" href="#t1977">1977</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1978" href="#t1978">1978</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1979" href="#t1979">1979</a></span><span class="t"> <span class="str">'test.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1980" href="#t1980">1980</a></span><span class="t"><span class="str"> ;[[[cog cog.outl('a\\nb\\nc') ]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1981" href="#t1981">1981</a></span><span class="t"><span class="str"> a</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1982" href="#t1982">1982</a></span><span class="t"><span class="str"> b</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1983" href="#t1983">1983</a></span><span class="t"><span class="str"> c</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1984" href="#t1984">1984</a></span><span class="t"><span class="str"> ;[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1985" href="#t1985">1985</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1986" href="#t1986">1986</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1815" href="#t1815">1815</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1816" href="#t1816">1816</a></span><span class="t"> <span class="com"># Remove generated output.</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1817" href="#t1817">1817</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'-x'</span><span class="op">,</span> <span class="str">'cog1.txt'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1818" href="#t1818">1818</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'cog1.txt'</span><span class="op">,</span> <span class="str">'cog1.out'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1819" href="#t1819">1819</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">newCog</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1820" href="#t1820">1820</a></span><span class="t"> <span class="com"># Regenerate the generated output.</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1821" href="#t1821">1821</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'cog1.txt'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1822" href="#t1822">1822</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'cog1.txt'</span><span class="op">,</span> <span class="str">'cog1.out2'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1823" href="#t1823">1823</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">newCog</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1824" href="#t1824">1824</a></span><span class="t"> <span class="com"># Remove the generated output again.</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1825" href="#t1825">1825</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'-x'</span><span class="op">,</span> <span class="str">'cog1.txt'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1826" href="#t1826">1826</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'cog1.txt'</span><span class="op">,</span> <span class="str">'cog1.out'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1827" href="#t1827">1827</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t1828" href="#t1828">1828</a></span><span class="t"> <span class="key">def</span> <span class="nam">testMsgCall</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1829" href="#t1829">1829</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1830" href="#t1830">1830</a></span><span class="t"><span class="str"> #[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1831" href="#t1831">1831</a></span><span class="t"><span class="str"> cog.msg("Hello there!")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1832" href="#t1832">1832</a></span><span class="t"><span class="str"> #]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1833" href="#t1833">1833</a></span><span class="t"><span class="str"> #[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1834" href="#t1834">1834</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1835" href="#t1835">1835</a></span><span class="t"> <span class="nam">infile</span> <span class="op">=</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1836" href="#t1836">1836</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">processString</span><span class="op">(</span><span class="nam">infile</span><span class="op">)</span><span class="op">,</span> <span class="nam">infile</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1837" href="#t1837">1837</a></span><span class="t"> <span class="nam">output</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">output</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1838" href="#t1838">1838</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">output</span><span class="op">,</span> <span class="str">"Message: Hello there!\n"</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1839" href="#t1839">1839</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t1840" href="#t1840">1840</a></span><span class="t"> <span class="key">def</span> <span class="nam">testErrorMessageHasNoTraceback</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1841" href="#t1841">1841</a></span><span class="t"> <span class="com"># Test that a Cog error is printed to stderr with no traceback.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1842" href="#t1842">1842</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1843" href="#t1843">1843</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1844" href="#t1844">1844</a></span><span class="t"> <span class="str">'cog1.txt'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1845" href="#t1845">1845</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1846" href="#t1846">1846</a></span><span class="t"><span class="str"> cog.outl("This line was newly")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1847" href="#t1847">1847</a></span><span class="t"><span class="str"> cog.outl("generated by cog")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1848" href="#t1848">1848</a></span><span class="t"><span class="str"> cog.outl("blah blah.")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1849" href="#t1849">1849</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1850" href="#t1850">1850</a></span><span class="t"><span class="str"> Xhis line was newly</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1851" href="#t1851">1851</a></span><span class="t"><span class="str"> generated by cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1852" href="#t1852">1852</a></span><span class="t"><span class="str"> blah blah.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1853" href="#t1853">1853</a></span><span class="t"><span class="str"> //[[[end]]] (checksum: a8540982e5ad6b95c9e9a184b26f4346)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1854" href="#t1854">1854</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1855" href="#t1855">1855</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1856" href="#t1856">1856</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1857" href="#t1857">1857</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1858" href="#t1858">1858</a></span><span class="t"> <span class="nam">stderr</span> <span class="op">=</span> <span class="nam">io</span><span class="op">.</span><span class="nam">StringIO</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1859" href="#t1859">1859</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">setOutput</span><span class="op">(</span><span class="nam">stderr</span><span class="op">=</span><span class="nam">stderr</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1860" href="#t1860">1860</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">main</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-c'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">"cog1.txt"</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1861" href="#t1861">1861</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">output</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span><span class="op">,</span> <span class="str">"Cogging cog1.txt\n"</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1862" href="#t1862">1862</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">stderr</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span><span class="op">,</span> <span class="str">"cog1.txt(9): Output has been edited! Delete old checksum to unprotect.\n"</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1863" href="#t1863">1863</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t1864" href="#t1864">1864</a></span><span class="t"> <span class="key">def</span> <span class="nam">testDashD</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1865" href="#t1865">1865</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1866" href="#t1866">1866</a></span><span class="t"> <span class="str">'test.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1867" href="#t1867">1867</a></span><span class="t"><span class="str"> --[[[cog cog.outl("Defined fooey as " + fooey) ]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1868" href="#t1868">1868</a></span><span class="t"><span class="str"> --[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1869" href="#t1869">1869</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1870" href="#t1870">1870</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1871" href="#t1871">1871</a></span><span class="t"> <span class="str">'test.kablooey'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1872" href="#t1872">1872</a></span><span class="t"><span class="str"> --[[[cog cog.outl("Defined fooey as " + fooey) ]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1873" href="#t1873">1873</a></span><span class="t"><span class="str"> Defined fooey as kablooey</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1874" href="#t1874">1874</a></span><span class="t"><span class="str"> --[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1875" href="#t1875">1875</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1876" href="#t1876">1876</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1877" href="#t1877">1877</a></span><span class="t"> <span class="str">'test.einstein'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1878" href="#t1878">1878</a></span><span class="t"><span class="str"> --[[[cog cog.outl("Defined fooey as " + fooey) ]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1879" href="#t1879">1879</a></span><span class="t"><span class="str"> Defined fooey as e=mc2</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1880" href="#t1880">1880</a></span><span class="t"><span class="str"> --[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1881" href="#t1881">1881</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1882" href="#t1882">1882</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1883" href="#t1883">1883</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1884" href="#t1884">1884</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1885" href="#t1885">1885</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'-D'</span><span class="op">,</span> <span class="str">'fooey=kablooey'</span><span class="op">,</span> <span class="str">'test.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1886" href="#t1886">1886</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'test.cog'</span><span class="op">,</span> <span class="str">'test.kablooey'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1887" href="#t1887">1887</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1888" href="#t1888">1888</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'-Dfooey=kablooey'</span><span class="op">,</span> <span class="str">'test.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1889" href="#t1889">1889</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'test.cog'</span><span class="op">,</span> <span class="str">'test.kablooey'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1890" href="#t1890">1890</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1891" href="#t1891">1891</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'-Dfooey=e=mc2'</span><span class="op">,</span> <span class="str">'test.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1892" href="#t1892">1892</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'test.cog'</span><span class="op">,</span> <span class="str">'test.einstein'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1893" href="#t1893">1893</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1894" href="#t1894">1894</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'-Dbar=quux'</span><span class="op">,</span> <span class="str">'-Dfooey=kablooey'</span><span class="op">,</span> <span class="str">'test.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1895" href="#t1895">1895</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'test.cog'</span><span class="op">,</span> <span class="str">'test.kablooey'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1896" href="#t1896">1896</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1897" href="#t1897">1897</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'-Dfooey=kablooey'</span><span class="op">,</span> <span class="str">'-Dbar=quux'</span><span class="op">,</span> <span class="str">'test.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1898" href="#t1898">1898</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'test.cog'</span><span class="op">,</span> <span class="str">'test.kablooey'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1899" href="#t1899">1899</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1900" href="#t1900">1900</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'-Dfooey=gooey'</span><span class="op">,</span> <span class="str">'-Dfooey=kablooey'</span><span class="op">,</span> <span class="str">'test.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1901" href="#t1901">1901</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'test.cog'</span><span class="op">,</span> <span class="str">'test.kablooey'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1902" href="#t1902">1902</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t1903" href="#t1903">1903</a></span><span class="t"> <span class="key">def</span> <span class="nam">testOutputToStdout</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1904" href="#t1904">1904</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1905" href="#t1905">1905</a></span><span class="t"> <span class="str">'test.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1906" href="#t1906">1906</a></span><span class="t"><span class="str"> --[[[cog cog.outl('Hey there!') ]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1907" href="#t1907">1907</a></span><span class="t"><span class="str"> --[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1908" href="#t1908">1908</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1909" href="#t1909">1909</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1910" href="#t1910">1910</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1911" href="#t1911">1911</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1912" href="#t1912">1912</a></span><span class="t"> <span class="nam">stderr</span> <span class="op">=</span> <span class="nam">io</span><span class="op">.</span><span class="nam">StringIO</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1913" href="#t1913">1913</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">setOutput</span><span class="op">(</span><span class="nam">stderr</span><span class="op">=</span><span class="nam">stderr</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1914" href="#t1914">1914</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'test.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1915" href="#t1915">1915</a></span><span class="t"> <span class="nam">output</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">output</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1916" href="#t1916">1916</a></span><span class="t"> <span class="nam">outerr</span> <span class="op">=</span> <span class="nam">stderr</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1917" href="#t1917">1917</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">output</span><span class="op">,</span> <span class="str">"--[[[cog cog.outl('Hey there!') ]]]\nHey there!\n--[[[end]]]\n"</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1918" href="#t1918">1918</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">outerr</span><span class="op">,</span> <span class="str">""</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1919" href="#t1919">1919</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t1920" href="#t1920">1920</a></span><span class="t"> <span class="key">def</span> <span class="nam">testReadFromStdin</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1921" href="#t1921">1921</a></span><span class="t"> <span class="nam">stdin</span> <span class="op">=</span> <span class="nam">io</span><span class="op">.</span><span class="nam">StringIO</span><span class="op">(</span><span class="str">"--[[[cog cog.outl('Wow') ]]]\n--[[[end]]]\n"</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1922" href="#t1922">1922</a></span><span class="t"> <span class="key">def</span> <span class="nam">restore_stdin</span><span class="op">(</span><span class="nam">old_stdin</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1923" href="#t1923">1923</a></span><span class="t"> <span class="nam">sys</span><span class="op">.</span><span class="nam">stdin</span> <span class="op">=</span> <span class="nam">old_stdin</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1924" href="#t1924">1924</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">addCleanup</span><span class="op">(</span><span class="nam">restore_stdin</span><span class="op">,</span> <span class="nam">sys</span><span class="op">.</span><span class="nam">stdin</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1925" href="#t1925">1925</a></span><span class="t"> <span class="nam">sys</span><span class="op">.</span><span class="nam">stdin</span> <span class="op">=</span> <span class="nam">stdin</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1926" href="#t1926">1926</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1927" href="#t1927">1927</a></span><span class="t"> <span class="nam">stderr</span> <span class="op">=</span> <span class="nam">io</span><span class="op">.</span><span class="nam">StringIO</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1928" href="#t1928">1928</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">setOutput</span><span class="op">(</span><span class="nam">stderr</span><span class="op">=</span><span class="nam">stderr</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1929" href="#t1929">1929</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1930" href="#t1930">1930</a></span><span class="t"> <span class="nam">output</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">output</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1931" href="#t1931">1931</a></span><span class="t"> <span class="nam">outerr</span> <span class="op">=</span> <span class="nam">stderr</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1932" href="#t1932">1932</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">output</span><span class="op">,</span> <span class="str">"--[[[cog cog.outl('Wow') ]]]\nWow\n--[[[end]]]\n"</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1933" href="#t1933">1933</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">outerr</span><span class="op">,</span> <span class="str">""</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1934" href="#t1934">1934</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t1935" href="#t1935">1935</a></span><span class="t"> <span class="key">def</span> <span class="nam">testSuffixOutputLines</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1936" href="#t1936">1936</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1937" href="#t1937">1937</a></span><span class="t"> <span class="str">'test.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1938" href="#t1938">1938</a></span><span class="t"><span class="str"> Hey there.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1939" href="#t1939">1939</a></span><span class="t"><span class="str"> ;[[[cog cog.outl('a\\nb\\n \\nc') ]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1940" href="#t1940">1940</a></span><span class="t"><span class="str"> ;[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1941" href="#t1941">1941</a></span><span class="t"><span class="str"> Good bye.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1942" href="#t1942">1942</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1943" href="#t1943">1943</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1944" href="#t1944">1944</a></span><span class="t"> <span class="str">'test.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1945" href="#t1945">1945</a></span><span class="t"><span class="str"> Hey there.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1946" href="#t1946">1946</a></span><span class="t"><span class="str"> ;[[[cog cog.outl('a\\nb\\n \\nc') ]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1947" href="#t1947">1947</a></span><span class="t"><span class="str"> a (foo)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1948" href="#t1948">1948</a></span><span class="t"><span class="str"> b (foo)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1949" href="#t1949">1949</a></span><span class="t"><span class="str"> """</span> <span class="com"># These three trailing spaces are important.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1950" href="#t1950">1950</a></span><span class="t"> <span class="com"># The suffix is not applied to completely blank lines.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1951" href="#t1951">1951</a></span><span class="t"> <span class="str">"""</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1952" href="#t1952">1952</a></span><span class="t"><span class="str"> c (foo)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1953" href="#t1953">1953</a></span><span class="t"><span class="str"> ;[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1954" href="#t1954">1954</a></span><span class="t"><span class="str"> Good bye.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1955" href="#t1955">1955</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1956" href="#t1956">1956</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1957" href="#t1957">1957</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1958" href="#t1958">1958</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1959" href="#t1959">1959</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'-s'</span><span class="op">,</span> <span class="str">' (foo)'</span><span class="op">,</span> <span class="str">'test.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1960" href="#t1960">1960</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'test.cog'</span><span class="op">,</span> <span class="str">'test.out'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1961" href="#t1961">1961</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t1962" href="#t1962">1962</a></span><span class="t"> <span class="key">def</span> <span class="nam">testEmptySuffix</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1963" href="#t1963">1963</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1964" href="#t1964">1964</a></span><span class="t"> <span class="str">'test.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1965" href="#t1965">1965</a></span><span class="t"><span class="str"> ;[[[cog cog.outl('a\\nb\\nc') ]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1966" href="#t1966">1966</a></span><span class="t"><span class="str"> ;[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1967" href="#t1967">1967</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1968" href="#t1968">1968</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1969" href="#t1969">1969</a></span><span class="t"> <span class="str">'test.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1970" href="#t1970">1970</a></span><span class="t"><span class="str"> ;[[[cog cog.outl('a\\nb\\nc') ]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1971" href="#t1971">1971</a></span><span class="t"><span class="str"> a</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1972" href="#t1972">1972</a></span><span class="t"><span class="str"> b</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1973" href="#t1973">1973</a></span><span class="t"><span class="str"> c</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1974" href="#t1974">1974</a></span><span class="t"><span class="str"> ;[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1975" href="#t1975">1975</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1976" href="#t1976">1976</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1977" href="#t1977">1977</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1978" href="#t1978">1978</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1979" href="#t1979">1979</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'-s'</span><span class="op">,</span> <span class="str">''</span><span class="op">,</span> <span class="str">'test.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1980" href="#t1980">1980</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'test.cog'</span><span class="op">,</span> <span class="str">'test.out'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1981" href="#t1981">1981</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t1982" href="#t1982">1982</a></span><span class="t"> <span class="key">def</span> <span class="nam">testHellishSuffix</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1983" href="#t1983">1983</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1984" href="#t1984">1984</a></span><span class="t"> <span class="str">'test.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1985" href="#t1985">1985</a></span><span class="t"><span class="str"> ;[[[cog cog.outl('a\\n\\nb') ]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1986" href="#t1986">1986</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1987" href="#t1987">1987</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1988" href="#t1988">1988</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1989" href="#t1989">1989</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'-s'</span><span class="op">,</span> <span class="str">''</span><span class="op">,</span> <span class="str">'test.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1990" href="#t1990">1990</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'test.cog'</span><span class="op">,</span> <span class="str">'test.out'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1988" href="#t1988">1988</a></span><span class="t"> <span class="str">'test.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1989" href="#t1989">1989</a></span><span class="t"><span class="str"> ;[[[cog cog.outl('a\\n\\nb') ]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1990" href="#t1990">1990</a></span><span class="t"><span class="str"> a /\\n*+([)]><</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t1991" href="#t1991">1991</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t1992" href="#t1992">1992</a></span><span class="t"> <span class="key">def</span> <span class="nam">testHellishSuffix</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t1993" href="#t1993">1993</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1994" href="#t1994">1994</a></span><span class="t"> <span class="str">'test.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1995" href="#t1995">1995</a></span><span class="t"><span class="str"> ;[[[cog cog.outl('a\\n\\nb') ]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1996" href="#t1996">1996</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1997" href="#t1997">1997</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1998" href="#t1998">1998</a></span><span class="t"> <span class="str">'test.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t1999" href="#t1999">1999</a></span><span class="t"><span class="str"> ;[[[cog cog.outl('a\\n\\nb') ]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2000" href="#t2000">2000</a></span><span class="t"><span class="str"> a /\\n*+([)]><</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2001" href="#t2001">2001</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2002" href="#t2002">2002</a></span><span class="t"><span class="str"> b /\\n*+([)]><</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2003" href="#t2003">2003</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2004" href="#t2004">2004</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2005" href="#t2005">2005</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2006" href="#t2006">2006</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2007" href="#t2007">2007</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-z'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'-s'</span><span class="op">,</span> <span class="str">r' /\n*+([)]><'</span><span class="op">,</span> <span class="str">'test.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2008" href="#t2008">2008</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'test.cog'</span><span class="op">,</span> <span class="str">'test.out'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2009" href="#t2009">2009</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t2010" href="#t2010">2010</a></span><span class="t"> <span class="key">def</span> <span class="nam">testPrologue</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2011" href="#t2011">2011</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2012" href="#t2012">2012</a></span><span class="t"> <span class="str">'test.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2013" href="#t2013">2013</a></span><span class="t"><span class="str"> Some text.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2014" href="#t2014">2014</a></span><span class="t"><span class="str"> //[[[cog cog.outl(str(math.sqrt(2))[:12])]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2015" href="#t2015">2015</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2016" href="#t2016">2016</a></span><span class="t"><span class="str"> epilogue.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2017" href="#t2017">2017</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2018" href="#t2018">2018</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2019" href="#t2019">2019</a></span><span class="t"> <span class="str">'test.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2020" href="#t2020">2020</a></span><span class="t"><span class="str"> Some text.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2021" href="#t2021">2021</a></span><span class="t"><span class="str"> //[[[cog cog.outl(str(math.sqrt(2))[:12])]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2022" href="#t2022">2022</a></span><span class="t"><span class="str"> 1.4142135623</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2023" href="#t2023">2023</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2024" href="#t2024">2024</a></span><span class="t"><span class="str"> epilogue.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2025" href="#t2025">2025</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2026" href="#t2026">2026</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2027" href="#t2027">2027</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2028" href="#t2028">2028</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2029" href="#t2029">2029</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'-p'</span><span class="op">,</span> <span class="str">'import math'</span><span class="op">,</span> <span class="str">'test.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2030" href="#t2030">2030</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'test.cog'</span><span class="op">,</span> <span class="str">'test.out'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2031" href="#t2031">2031</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t2032" href="#t2032">2032</a></span><span class="t"> <span class="key">def</span> <span class="nam">testThreads</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2033" href="#t2033">2033</a></span><span class="t"> <span class="com"># Test that the implicitly imported cog module is actually different for</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2034" href="#t2034">2034</a></span><span class="t"> <span class="com"># different threads.</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2035" href="#t2035">2035</a></span><span class="t"> <span class="nam">numthreads</span> <span class="op">=</span> <span class="num">20</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2036" href="#t2036">2036</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2037" href="#t2037">2037</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span><span class="op">}</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2038" href="#t2038">2038</a></span><span class="t"> <span class="key">for</span> <span class="nam">i</span> <span class="key">in</span> <span class="nam">range</span><span class="op">(</span><span class="nam">numthreads</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2039" href="#t2039">2039</a></span><span class="t"> <span class="nam">d</span><span class="op">[</span><span class="str">'f{}.cog'</span><span class="op">.</span><span class="nam">format</span><span class="op">(</span><span class="nam">i</span><span class="op">)</span><span class="op">]</span> <span class="op">=</span> <span class="op">(</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2040" href="#t2040">2040</a></span><span class="t"> <span class="str">"x\n"</span> <span class="op">*</span> <span class="nam">i</span> <span class="op">+</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2041" href="#t2041">2041</a></span><span class="t"> <span class="str">"[[[cog\n"</span> <span class="op">+</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2042" href="#t2042">2042</a></span><span class="t"> <span class="str">"assert cog.firstLineNum == int(FIRST) == {}\n"</span><span class="op">.</span><span class="nam">format</span><span class="op">(</span><span class="nam">i</span><span class="op">+</span><span class="num">1</span><span class="op">)</span> <span class="op">+</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2043" href="#t2043">2043</a></span><span class="t"> <span class="str">"]]]\n"</span> <span class="op">+</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2044" href="#t2044">2044</a></span><span class="t"> <span class="str">"[[[end]]]\n"</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2045" href="#t2045">2045</a></span><span class="t"> <span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2046" href="#t2046">2046</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2047" href="#t2047">2047</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2048" href="#t2048">2048</a></span><span class="t"> <span class="nam">results</span> <span class="op">=</span> <span class="op">[</span><span class="op">]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2049" href="#t2049">2049</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2050" href="#t2050">2050</a></span><span class="t"> <span class="key">def</span> <span class="nam">thread_main</span><span class="op">(</span><span class="nam">num</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2051" href="#t2051">2051</a></span><span class="t"> <span class="key">try</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2052" href="#t2052">2052</a></span><span class="t"> <span class="nam">ret</span> <span class="op">=</span> <span class="nam">Cog</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">main</span><span class="op">(</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2053" href="#t2053">2053</a></span><span class="t"> <span class="op">[</span><span class="str">'cog.py'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'-D'</span><span class="op">,</span> <span class="str">'FIRST={}'</span><span class="op">.</span><span class="nam">format</span><span class="op">(</span><span class="nam">num</span><span class="op">+</span><span class="num">1</span><span class="op">)</span><span class="op">,</span> <span class="str">'f{}.cog'</span><span class="op">.</span><span class="nam">format</span><span class="op">(</span><span class="nam">num</span><span class="op">)</span><span class="op">]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2054" href="#t2054">2054</a></span><span class="t"> <span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2055" href="#t2055">2055</a></span><span class="t"> <span class="key">assert</span> <span class="nam">ret</span> <span class="op">==</span> <span class="num">0</span> </span><span class="r"></span></p> - <p class="exc show_exc"><span class="n"><a id="t2056" href="#t2056">2056</a></span><span class="t"> <span class="key">except</span> <span class="nam">Exception</span> <span class="key">as</span> <span class="nam">exc</span><span class="op">:</span> <span class="com"># pragma: no cover (only happens on test failure)</span> </span><span class="r"></span></p> - <p class="exc show_exc"><span class="n"><a id="t2057" href="#t2057">2057</a></span><span class="t"> <span class="nam">results</span><span class="op">.</span><span class="nam">append</span><span class="op">(</span><span class="nam">exc</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2058" href="#t2058">2058</a></span><span class="t"> <span class="key">else</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2059" href="#t2059">2059</a></span><span class="t"> <span class="nam">results</span><span class="op">.</span><span class="nam">append</span><span class="op">(</span><span class="key">None</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2060" href="#t2060">2060</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2061" href="#t2061">2061</a></span><span class="t"> <span class="nam">ts</span> <span class="op">=</span> <span class="op">[</span><span class="nam">threading</span><span class="op">.</span><span class="nam">Thread</span><span class="op">(</span><span class="nam">target</span><span class="op">=</span><span class="nam">thread_main</span><span class="op">,</span> <span class="nam">args</span><span class="op">=</span><span class="op">(</span><span class="nam">i</span><span class="op">,</span><span class="op">)</span><span class="op">)</span> <span class="key">for</span> <span class="nam">i</span> <span class="key">in</span> <span class="nam">range</span><span class="op">(</span><span class="nam">numthreads</span><span class="op">)</span><span class="op">]</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2062" href="#t2062">2062</a></span><span class="t"> <span class="key">for</span> <span class="nam">t</span> <span class="key">in</span> <span class="nam">ts</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2063" href="#t2063">2063</a></span><span class="t"> <span class="nam">t</span><span class="op">.</span><span class="nam">start</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2064" href="#t2064">2064</a></span><span class="t"> <span class="key">for</span> <span class="nam">t</span> <span class="key">in</span> <span class="nam">ts</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2065" href="#t2065">2065</a></span><span class="t"> <span class="nam">t</span><span class="op">.</span><span class="nam">join</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2066" href="#t2066">2066</a></span><span class="t"> <span class="key">assert</span> <span class="nam">results</span> <span class="op">==</span> <span class="op">[</span><span class="key">None</span><span class="op">]</span> <span class="op">*</span> <span class="nam">numthreads</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2067" href="#t2067">2067</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2068" href="#t2068">2068</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t2069" href="#t2069">2069</a></span><span class="t"><span class="key">class</span> <span class="nam">CheckTests</span><span class="op">(</span><span class="nam">TestCaseWithTempDir</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t2070" href="#t2070">2070</a></span><span class="t"> <span class="key">def</span> <span class="nam">run_check</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">args</span><span class="op">,</span> <span class="nam">status</span><span class="op">=</span><span class="num">0</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2071" href="#t2071">2071</a></span><span class="t"> <span class="nam">actual_status</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">main</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'--check'</span><span class="op">]</span> <span class="op">+</span> <span class="nam">args</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2072" href="#t2072">2072</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">output</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2073" href="#t2073">2073</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">status</span><span class="op">,</span> <span class="nam">actual_status</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2074" href="#t2074">2074</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t2075" href="#t2075">2075</a></span><span class="t"> <span class="key">def</span> <span class="nam">assert_made_files_unchanged</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">d</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2076" href="#t2076">2076</a></span><span class="t"> <span class="key">for</span> <span class="nam">name</span><span class="op">,</span> <span class="nam">content</span> <span class="key">in</span> <span class="nam">d</span><span class="op">.</span><span class="nam">items</span><span class="op">(</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2077" href="#t2077">2077</a></span><span class="t"> <span class="nam">content</span> <span class="op">=</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">content</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2078" href="#t2078">2078</a></span><span class="t"> <span class="key">if</span> <span class="nam">os</span><span class="op">.</span><span class="nam">name</span> <span class="op">==</span> <span class="str">'nt'</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2079" href="#t2079">2079</a></span><span class="t"> <span class="nam">content</span> <span class="op">=</span> <span class="nam">content</span><span class="op">.</span><span class="nam">replace</span><span class="op">(</span><span class="str">"\n"</span><span class="op">,</span> <span class="str">"\r\n"</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2080" href="#t2080">2080</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFileContent</span><span class="op">(</span><span class="nam">name</span><span class="op">,</span> <span class="nam">content</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2081" href="#t2081">2081</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t2082" href="#t2082">2082</a></span><span class="t"> <span class="key">def</span> <span class="nam">test_check_no_cog</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2083" href="#t2083">2083</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2084" href="#t2084">2084</a></span><span class="t"> <span class="str">'hello.txt'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2085" href="#t2085">2085</a></span><span class="t"><span class="str"> Hello.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2086" href="#t2086">2086</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2087" href="#t2087">2087</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2088" href="#t2088">2088</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2089" href="#t2089">2089</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">run_check</span><span class="op">(</span><span class="op">[</span><span class="str">'hello.txt'</span><span class="op">]</span><span class="op">,</span> <span class="nam">status</span><span class="op">=</span><span class="num">0</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2090" href="#t2090">2090</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">output</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span><span class="op">,</span> <span class="str">"Checking hello.txt\n"</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2091" href="#t2091">2091</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assert_made_files_unchanged</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2092" href="#t2092">2092</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t2093" href="#t2093">2093</a></span><span class="t"> <span class="key">def</span> <span class="nam">test_check_good</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2094" href="#t2094">2094</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2095" href="#t2095">2095</a></span><span class="t"> <span class="str">'unchanged.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2096" href="#t2096">2096</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2097" href="#t2097">2097</a></span><span class="t"><span class="str"> cog.outl("hello world")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2098" href="#t2098">2098</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2099" href="#t2099">2099</a></span><span class="t"><span class="str"> hello world</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2100" href="#t2100">2100</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2101" href="#t2101">2101</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2102" href="#t2102">2102</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2103" href="#t2103">2103</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2104" href="#t2104">2104</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">run_check</span><span class="op">(</span><span class="op">[</span><span class="str">'unchanged.cog'</span><span class="op">]</span><span class="op">,</span> <span class="nam">status</span><span class="op">=</span><span class="num">0</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2105" href="#t2105">2105</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">output</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span><span class="op">,</span> <span class="str">"Checking unchanged.cog\n"</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2106" href="#t2106">2106</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assert_made_files_unchanged</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2107" href="#t2107">2107</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t2108" href="#t2108">2108</a></span><span class="t"> <span class="key">def</span> <span class="nam">test_check_bad</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2109" href="#t2109">2109</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2110" href="#t2110">2110</a></span><span class="t"> <span class="str">'changed.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2111" href="#t2111">2111</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2112" href="#t2112">2112</a></span><span class="t"><span class="str"> cog.outl("goodbye world")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2113" href="#t2113">2113</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2114" href="#t2114">2114</a></span><span class="t"><span class="str"> hello world</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2115" href="#t2115">2115</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2116" href="#t2116">2116</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2117" href="#t2117">2117</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2118" href="#t2118">2118</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2119" href="#t2119">2119</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">run_check</span><span class="op">(</span><span class="op">[</span><span class="str">'changed.cog'</span><span class="op">]</span><span class="op">,</span> <span class="nam">status</span><span class="op">=</span><span class="num">5</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2120" href="#t2120">2120</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">output</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span><span class="op">,</span> <span class="str">"Checking changed.cog (changed)\nCheck failed\n"</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2121" href="#t2121">2121</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assert_made_files_unchanged</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2122" href="#t2122">2122</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t2123" href="#t2123">2123</a></span><span class="t"> <span class="key">def</span> <span class="nam">test_check_mixed</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2124" href="#t2124">2124</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2125" href="#t2125">2125</a></span><span class="t"> <span class="str">'unchanged.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2126" href="#t2126">2126</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2127" href="#t2127">2127</a></span><span class="t"><span class="str"> cog.outl("hello world")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2128" href="#t2128">2128</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2129" href="#t2129">2129</a></span><span class="t"><span class="str"> hello world</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2130" href="#t2130">2130</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2131" href="#t2131">2131</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2132" href="#t2132">2132</a></span><span class="t"> <span class="str">'changed.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2133" href="#t2133">2133</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2134" href="#t2134">2134</a></span><span class="t"><span class="str"> cog.outl("goodbye world")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2135" href="#t2135">2135</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2136" href="#t2136">2136</a></span><span class="t"><span class="str"> hello world</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2137" href="#t2137">2137</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2138" href="#t2138">2138</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2139" href="#t2139">2139</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2140" href="#t2140">2140</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2141" href="#t2141">2141</a></span><span class="t"> <span class="key">for</span> <span class="nam">verbosity</span><span class="op">,</span> <span class="nam">output</span> <span class="key">in</span> <span class="op">[</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2142" href="#t2142">2142</a></span><span class="t"> <span class="op">(</span><span class="str">"0"</span><span class="op">,</span> <span class="str">"Check failed\n"</span><span class="op">)</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2143" href="#t2143">2143</a></span><span class="t"> <span class="op">(</span><span class="str">"1"</span><span class="op">,</span> <span class="str">"Checking changed.cog (changed)\nCheck failed\n"</span><span class="op">)</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2144" href="#t2144">2144</a></span><span class="t"> <span class="op">(</span><span class="str">"2"</span><span class="op">,</span> <span class="str">"Checking unchanged.cog\nChecking changed.cog (changed)\nCheck failed\n"</span><span class="op">)</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2145" href="#t2145">2145</a></span><span class="t"> <span class="op">]</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2146" href="#t2146">2146</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">newCog</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2147" href="#t2147">2147</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">run_check</span><span class="op">(</span><span class="op">[</span><span class="str">'--verbosity=%s'</span> <span class="op">%</span> <span class="nam">verbosity</span><span class="op">,</span> <span class="str">'unchanged.cog'</span><span class="op">,</span> <span class="str">'changed.cog'</span><span class="op">]</span><span class="op">,</span> <span class="nam">status</span><span class="op">=</span><span class="num">5</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2148" href="#t2148">2148</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">output</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span><span class="op">,</span> <span class="nam">output</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2149" href="#t2149">2149</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assert_made_files_unchanged</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2150" href="#t2150">2150</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t2151" href="#t2151">2151</a></span><span class="t"> <span class="key">def</span> <span class="nam">test_check_with_good_checksum</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2152" href="#t2152">2152</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2153" href="#t2153">2153</a></span><span class="t"> <span class="str">'good.txt'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2154" href="#t2154">2154</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2155" href="#t2155">2155</a></span><span class="t"><span class="str"> cog.outl("This line was newly")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2156" href="#t2156">2156</a></span><span class="t"><span class="str"> cog.outl("generated by cog")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2157" href="#t2157">2157</a></span><span class="t"><span class="str"> cog.outl("blah blah.")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2158" href="#t2158">2158</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2159" href="#t2159">2159</a></span><span class="t"><span class="str"> This line was newly</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2160" href="#t2160">2160</a></span><span class="t"><span class="str"> generated by cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2161" href="#t2161">2161</a></span><span class="t"><span class="str"> blah blah.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2162" href="#t2162">2162</a></span><span class="t"><span class="str"> //[[[end]]] (checksum: a8540982e5ad6b95c9e9a184b26f4346)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2163" href="#t2163">2163</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2164" href="#t2164">2164</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2165" href="#t2165">2165</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2166" href="#t2166">2166</a></span><span class="t"> <span class="com"># Have to use -c with --check if there are checksums in the file.</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2167" href="#t2167">2167</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">run_check</span><span class="op">(</span><span class="op">[</span><span class="str">'-c'</span><span class="op">,</span> <span class="str">'good.txt'</span><span class="op">]</span><span class="op">,</span> <span class="nam">status</span><span class="op">=</span><span class="num">0</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2168" href="#t2168">2168</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">output</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span><span class="op">,</span> <span class="str">"Checking good.txt\n"</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2169" href="#t2169">2169</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assert_made_files_unchanged</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2170" href="#t2170">2170</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t2171" href="#t2171">2171</a></span><span class="t"> <span class="key">def</span> <span class="nam">test_check_with_bad_checksum</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2172" href="#t2172">2172</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2173" href="#t2173">2173</a></span><span class="t"> <span class="str">'bad.txt'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2174" href="#t2174">2174</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2175" href="#t2175">2175</a></span><span class="t"><span class="str"> cog.outl("This line was newly")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2176" href="#t2176">2176</a></span><span class="t"><span class="str"> cog.outl("generated by cog")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2177" href="#t2177">2177</a></span><span class="t"><span class="str"> cog.outl("blah blah.")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2178" href="#t2178">2178</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2179" href="#t2179">2179</a></span><span class="t"><span class="str"> This line was newly</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2180" href="#t2180">2180</a></span><span class="t"><span class="str"> generated by cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2181" href="#t2181">2181</a></span><span class="t"><span class="str"> blah blah.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2182" href="#t2182">2182</a></span><span class="t"><span class="str"> //[[[end]]] (checksum: a9999999e5ad6b95c9e9a184b26f4346)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2183" href="#t2183">2183</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2184" href="#t2184">2184</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2185" href="#t2185">2185</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2186" href="#t2186">2186</a></span><span class="t"> <span class="com"># Have to use -c with --check if there are checksums in the file.</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2187" href="#t2187">2187</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">run_check</span><span class="op">(</span><span class="op">[</span><span class="str">'-c'</span><span class="op">,</span> <span class="str">'bad.txt'</span><span class="op">]</span><span class="op">,</span> <span class="nam">status</span><span class="op">=</span><span class="num">1</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2188" href="#t2188">2188</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">output</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span><span class="op">,</span> <span class="str">"Checking bad.txt\nbad.txt(9): Output has been edited! Delete old checksum to unprotect.\n"</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2189" href="#t2189">2189</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assert_made_files_unchanged</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2190" href="#t2190">2190</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2191" href="#t2191">2191</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t2192" href="#t2192">2192</a></span><span class="t"><span class="key">class</span> <span class="nam">WritabilityTests</span><span class="op">(</span><span class="nam">TestCaseWithTempDir</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2193" href="#t2193">2193</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t2194" href="#t2194">2194</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2195" href="#t2195">2195</a></span><span class="t"> <span class="str">'test.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2196" href="#t2196">2196</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2197" href="#t2197">2197</a></span><span class="t"><span class="str"> for fn in ['DoSomething', 'DoAnotherThing', 'DoLastThing']:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2198" href="#t2198">2198</a></span><span class="t"><span class="str"> cog.outl("void %s();" % fn)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2199" href="#t2199">2199</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2200" href="#t2200">2200</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2201" href="#t2201">2201</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2202" href="#t2202">2202</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2203" href="#t2203">2203</a></span><span class="t"> <span class="str">'test.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2204" href="#t2204">2204</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2205" href="#t2205">2205</a></span><span class="t"><span class="str"> for fn in ['DoSomething', 'DoAnotherThing', 'DoLastThing']:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2206" href="#t2206">2206</a></span><span class="t"><span class="str"> cog.outl("void %s();" % fn)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2207" href="#t2207">2207</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2208" href="#t2208">2208</a></span><span class="t"><span class="str"> void DoSomething();</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2209" href="#t2209">2209</a></span><span class="t"><span class="str"> void DoAnotherThing();</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2210" href="#t2210">2210</a></span><span class="t"><span class="str"> void DoLastThing();</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2211" href="#t2211">2211</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2212" href="#t2212">2212</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2213" href="#t2213">2213</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2214" href="#t2214">2214</a></span><span class="t"> </span><span class="r"></span></p> - <p class="par run show_par"><span class="n"><a id="t2215" href="#t2215">2215</a></span><span class="t"> <span class="key">if</span> <span class="nam">os</span><span class="op">.</span><span class="nam">name</span> <span class="op">==</span> <span class="str">'nt'</span><span class="op">:</span> </span><span class="r"><span class="annotate short">2215 ↛ 2217</span><span class="annotate long">line 2215 didn't jump to line 2217, because the condition on line 2215 was never true</span></span></p> - <p class="pln"><span class="n"><a id="t2216" href="#t2216">2216</a></span><span class="t"> <span class="com"># for Windows</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2217" href="#t2217">2217</a></span><span class="t"> <span class="nam">cmd_w_args</span> <span class="op">=</span> <span class="str">'attrib -R %s'</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2218" href="#t2218">2218</a></span><span class="t"> <span class="nam">cmd_w_asterisk</span> <span class="op">=</span> <span class="str">'attrib -R *'</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2219" href="#t2219">2219</a></span><span class="t"> <span class="key">else</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2220" href="#t2220">2220</a></span><span class="t"> <span class="com"># for unix-like</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t2221" href="#t2221">2221</a></span><span class="t"> <span class="nam">cmd_w_args</span> <span class="op">=</span> <span class="str">'chmod +w %s'</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t2222" href="#t2222">2222</a></span><span class="t"> <span class="nam">cmd_w_asterisk</span> <span class="op">=</span> <span class="str">'chmod +w *'</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2223" href="#t2223">2223</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t2224" href="#t2224">2224</a></span><span class="t"> <span class="key">def</span> <span class="nam">setUp</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2225" href="#t2225">2225</a></span><span class="t"> <span class="nam">super</span><span class="op">(</span><span class="nam">WritabilityTests</span><span class="op">,</span> <span class="nam">self</span><span class="op">)</span><span class="op">.</span><span class="nam">setUp</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2226" href="#t2226">2226</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2227" href="#t2227">2227</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">testcog</span> <span class="op">=</span> <span class="nam">os</span><span class="op">.</span><span class="nam">path</span><span class="op">.</span><span class="nam">join</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">,</span> <span class="str">'test.cog'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2228" href="#t2228">2228</a></span><span class="t"> <span class="nam">os</span><span class="op">.</span><span class="nam">chmod</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">testcog</span><span class="op">,</span> <span class="nam">stat</span><span class="op">.</span><span class="nam">S_IREAD</span><span class="op">)</span> <span class="com"># Make the file readonly.</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2229" href="#t2229">2229</a></span><span class="t"> <span class="key">assert</span> <span class="key">not</span> <span class="nam">os</span><span class="op">.</span><span class="nam">access</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">testcog</span><span class="op">,</span> <span class="nam">os</span><span class="op">.</span><span class="nam">W_OK</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2230" href="#t2230">2230</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t2231" href="#t2231">2231</a></span><span class="t"> <span class="key">def</span> <span class="nam">tearDown</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2232" href="#t2232">2232</a></span><span class="t"> <span class="nam">os</span><span class="op">.</span><span class="nam">chmod</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">testcog</span><span class="op">,</span> <span class="nam">stat</span><span class="op">.</span><span class="nam">S_IWRITE</span><span class="op">)</span> <span class="com"># Make the file writable again.</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2233" href="#t2233">2233</a></span><span class="t"> <span class="nam">super</span><span class="op">(</span><span class="nam">WritabilityTests</span><span class="op">,</span> <span class="nam">self</span><span class="op">)</span><span class="op">.</span><span class="nam">tearDown</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1992" href="#t1992">1992</a></span><span class="t"><span class="str"> b /\\n*+([)]><</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1993" href="#t1993">1993</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1994" href="#t1994">1994</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1995" href="#t1995">1995</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1996" href="#t1996">1996</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1997" href="#t1997">1997</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-z'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'-s'</span><span class="op">,</span> <span class="str">r' /\n*+([)]><'</span><span class="op">,</span> <span class="str">'test.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t1998" href="#t1998">1998</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'test.cog'</span><span class="op">,</span> <span class="str">'test.out'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t1999" href="#t1999">1999</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t2000" href="#t2000">2000</a></span><span class="t"> <span class="key">def</span> <span class="nam">testPrologue</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2001" href="#t2001">2001</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2002" href="#t2002">2002</a></span><span class="t"> <span class="str">'test.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2003" href="#t2003">2003</a></span><span class="t"><span class="str"> Some text.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2004" href="#t2004">2004</a></span><span class="t"><span class="str"> //[[[cog cog.outl(str(math.sqrt(2))[:12])]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2005" href="#t2005">2005</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2006" href="#t2006">2006</a></span><span class="t"><span class="str"> epilogue.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2007" href="#t2007">2007</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2008" href="#t2008">2008</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2009" href="#t2009">2009</a></span><span class="t"> <span class="str">'test.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2010" href="#t2010">2010</a></span><span class="t"><span class="str"> Some text.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2011" href="#t2011">2011</a></span><span class="t"><span class="str"> //[[[cog cog.outl(str(math.sqrt(2))[:12])]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2012" href="#t2012">2012</a></span><span class="t"><span class="str"> 1.4142135623</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2013" href="#t2013">2013</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2014" href="#t2014">2014</a></span><span class="t"><span class="str"> epilogue.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2015" href="#t2015">2015</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2016" href="#t2016">2016</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2017" href="#t2017">2017</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2018" href="#t2018">2018</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2019" href="#t2019">2019</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'-p'</span><span class="op">,</span> <span class="str">'import math'</span><span class="op">,</span> <span class="str">'test.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2020" href="#t2020">2020</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'test.cog'</span><span class="op">,</span> <span class="str">'test.out'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2021" href="#t2021">2021</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t2022" href="#t2022">2022</a></span><span class="t"> <span class="key">def</span> <span class="nam">testThreads</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2023" href="#t2023">2023</a></span><span class="t"> <span class="com"># Test that the implicitly imported cog module is actually different for</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2024" href="#t2024">2024</a></span><span class="t"> <span class="com"># different threads.</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2025" href="#t2025">2025</a></span><span class="t"> <span class="nam">numthreads</span> <span class="op">=</span> <span class="num">20</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2026" href="#t2026">2026</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2027" href="#t2027">2027</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span><span class="op">}</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2028" href="#t2028">2028</a></span><span class="t"> <span class="key">for</span> <span class="nam">i</span> <span class="key">in</span> <span class="nam">range</span><span class="op">(</span><span class="nam">numthreads</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2029" href="#t2029">2029</a></span><span class="t"> <span class="nam">d</span><span class="op">[</span><span class="str">f'f{i}.cog'</span><span class="op">]</span> <span class="op">=</span> <span class="op">(</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2030" href="#t2030">2030</a></span><span class="t"> <span class="str">"x\n"</span> <span class="op">*</span> <span class="nam">i</span> <span class="op">+</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2031" href="#t2031">2031</a></span><span class="t"> <span class="str">"[[[cog\n"</span> <span class="op">+</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2032" href="#t2032">2032</a></span><span class="t"> <span class="str">f"assert cog.firstLineNum == int(FIRST) == {i+1}\n"</span> <span class="op">+</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2033" href="#t2033">2033</a></span><span class="t"> <span class="str">"]]]\n"</span> <span class="op">+</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2034" href="#t2034">2034</a></span><span class="t"> <span class="str">"[[[end]]]\n"</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2035" href="#t2035">2035</a></span><span class="t"> <span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2036" href="#t2036">2036</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2037" href="#t2037">2037</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2038" href="#t2038">2038</a></span><span class="t"> <span class="nam">results</span> <span class="op">=</span> <span class="op">[</span><span class="op">]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2039" href="#t2039">2039</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2040" href="#t2040">2040</a></span><span class="t"> <span class="key">def</span> <span class="nam">thread_main</span><span class="op">(</span><span class="nam">num</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2041" href="#t2041">2041</a></span><span class="t"> <span class="key">try</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2042" href="#t2042">2042</a></span><span class="t"> <span class="nam">ret</span> <span class="op">=</span> <span class="nam">Cog</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">main</span><span class="op">(</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2043" href="#t2043">2043</a></span><span class="t"> <span class="op">[</span><span class="str">'cog.py'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'-D'</span><span class="op">,</span> <span class="str">f'FIRST={num+1}'</span><span class="op">,</span> <span class="str">f'f{num}.cog'</span><span class="op">]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2044" href="#t2044">2044</a></span><span class="t"> <span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2045" href="#t2045">2045</a></span><span class="t"> <span class="key">assert</span> <span class="nam">ret</span> <span class="op">==</span> <span class="num">0</span> </span><span class="r"></span></p> + <p class="exc show_exc"><span class="n"><a id="t2046" href="#t2046">2046</a></span><span class="t"> <span class="key">except</span> <span class="nam">Exception</span> <span class="key">as</span> <span class="nam">exc</span><span class="op">:</span> <span class="com"># pragma: no cover (only happens on test failure)</span> </span><span class="r"></span></p> + <p class="exc show_exc"><span class="n"><a id="t2047" href="#t2047">2047</a></span><span class="t"> <span class="nam">results</span><span class="op">.</span><span class="nam">append</span><span class="op">(</span><span class="nam">exc</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2048" href="#t2048">2048</a></span><span class="t"> <span class="key">else</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2049" href="#t2049">2049</a></span><span class="t"> <span class="nam">results</span><span class="op">.</span><span class="nam">append</span><span class="op">(</span><span class="key">None</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2050" href="#t2050">2050</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2051" href="#t2051">2051</a></span><span class="t"> <span class="nam">ts</span> <span class="op">=</span> <span class="op">[</span><span class="nam">threading</span><span class="op">.</span><span class="nam">Thread</span><span class="op">(</span><span class="nam">target</span><span class="op">=</span><span class="nam">thread_main</span><span class="op">,</span> <span class="nam">args</span><span class="op">=</span><span class="op">(</span><span class="nam">i</span><span class="op">,</span><span class="op">)</span><span class="op">)</span> <span class="key">for</span> <span class="nam">i</span> <span class="key">in</span> <span class="nam">range</span><span class="op">(</span><span class="nam">numthreads</span><span class="op">)</span><span class="op">]</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2052" href="#t2052">2052</a></span><span class="t"> <span class="key">for</span> <span class="nam">t</span> <span class="key">in</span> <span class="nam">ts</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2053" href="#t2053">2053</a></span><span class="t"> <span class="nam">t</span><span class="op">.</span><span class="nam">start</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2054" href="#t2054">2054</a></span><span class="t"> <span class="key">for</span> <span class="nam">t</span> <span class="key">in</span> <span class="nam">ts</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2055" href="#t2055">2055</a></span><span class="t"> <span class="nam">t</span><span class="op">.</span><span class="nam">join</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2056" href="#t2056">2056</a></span><span class="t"> <span class="key">assert</span> <span class="nam">results</span> <span class="op">==</span> <span class="op">[</span><span class="key">None</span><span class="op">]</span> <span class="op">*</span> <span class="nam">numthreads</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2057" href="#t2057">2057</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2058" href="#t2058">2058</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t2059" href="#t2059">2059</a></span><span class="t"><span class="key">class</span> <span class="nam">CheckTests</span><span class="op">(</span><span class="nam">TestCaseWithTempDir</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t2060" href="#t2060">2060</a></span><span class="t"> <span class="key">def</span> <span class="nam">run_check</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">args</span><span class="op">,</span> <span class="nam">status</span><span class="op">=</span><span class="num">0</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2061" href="#t2061">2061</a></span><span class="t"> <span class="nam">actual_status</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">main</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'--check'</span><span class="op">]</span> <span class="op">+</span> <span class="nam">args</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2062" href="#t2062">2062</a></span><span class="t"> <span class="nam">print</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">output</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2063" href="#t2063">2063</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">status</span><span class="op">,</span> <span class="nam">actual_status</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2064" href="#t2064">2064</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t2065" href="#t2065">2065</a></span><span class="t"> <span class="key">def</span> <span class="nam">assert_made_files_unchanged</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">d</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2066" href="#t2066">2066</a></span><span class="t"> <span class="key">for</span> <span class="nam">name</span><span class="op">,</span> <span class="nam">content</span> <span class="key">in</span> <span class="nam">d</span><span class="op">.</span><span class="nam">items</span><span class="op">(</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2067" href="#t2067">2067</a></span><span class="t"> <span class="nam">content</span> <span class="op">=</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">content</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2068" href="#t2068">2068</a></span><span class="t"> <span class="key">if</span> <span class="nam">os</span><span class="op">.</span><span class="nam">name</span> <span class="op">==</span> <span class="str">'nt'</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2069" href="#t2069">2069</a></span><span class="t"> <span class="nam">content</span> <span class="op">=</span> <span class="nam">content</span><span class="op">.</span><span class="nam">replace</span><span class="op">(</span><span class="str">"\n"</span><span class="op">,</span> <span class="str">"\r\n"</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2070" href="#t2070">2070</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFileContent</span><span class="op">(</span><span class="nam">name</span><span class="op">,</span> <span class="nam">content</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2071" href="#t2071">2071</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t2072" href="#t2072">2072</a></span><span class="t"> <span class="key">def</span> <span class="nam">test_check_no_cog</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2073" href="#t2073">2073</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2074" href="#t2074">2074</a></span><span class="t"> <span class="str">'hello.txt'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2075" href="#t2075">2075</a></span><span class="t"><span class="str"> Hello.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2076" href="#t2076">2076</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2077" href="#t2077">2077</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2078" href="#t2078">2078</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2079" href="#t2079">2079</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">run_check</span><span class="op">(</span><span class="op">[</span><span class="str">'hello.txt'</span><span class="op">]</span><span class="op">,</span> <span class="nam">status</span><span class="op">=</span><span class="num">0</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2080" href="#t2080">2080</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">output</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span><span class="op">,</span> <span class="str">"Checking hello.txt\n"</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2081" href="#t2081">2081</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assert_made_files_unchanged</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2082" href="#t2082">2082</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t2083" href="#t2083">2083</a></span><span class="t"> <span class="key">def</span> <span class="nam">test_check_good</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2084" href="#t2084">2084</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2085" href="#t2085">2085</a></span><span class="t"> <span class="str">'unchanged.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2086" href="#t2086">2086</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2087" href="#t2087">2087</a></span><span class="t"><span class="str"> cog.outl("hello world")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2088" href="#t2088">2088</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2089" href="#t2089">2089</a></span><span class="t"><span class="str"> hello world</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2090" href="#t2090">2090</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2091" href="#t2091">2091</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2092" href="#t2092">2092</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2093" href="#t2093">2093</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2094" href="#t2094">2094</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">run_check</span><span class="op">(</span><span class="op">[</span><span class="str">'unchanged.cog'</span><span class="op">]</span><span class="op">,</span> <span class="nam">status</span><span class="op">=</span><span class="num">0</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2095" href="#t2095">2095</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">output</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span><span class="op">,</span> <span class="str">"Checking unchanged.cog\n"</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2096" href="#t2096">2096</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assert_made_files_unchanged</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2097" href="#t2097">2097</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t2098" href="#t2098">2098</a></span><span class="t"> <span class="key">def</span> <span class="nam">test_check_bad</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2099" href="#t2099">2099</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2100" href="#t2100">2100</a></span><span class="t"> <span class="str">'changed.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2101" href="#t2101">2101</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2102" href="#t2102">2102</a></span><span class="t"><span class="str"> cog.outl("goodbye world")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2103" href="#t2103">2103</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2104" href="#t2104">2104</a></span><span class="t"><span class="str"> hello world</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2105" href="#t2105">2105</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2106" href="#t2106">2106</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2107" href="#t2107">2107</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2108" href="#t2108">2108</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2109" href="#t2109">2109</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">run_check</span><span class="op">(</span><span class="op">[</span><span class="str">'changed.cog'</span><span class="op">]</span><span class="op">,</span> <span class="nam">status</span><span class="op">=</span><span class="num">5</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2110" href="#t2110">2110</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">output</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span><span class="op">,</span> <span class="str">"Checking changed.cog (changed)\nCheck failed\n"</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2111" href="#t2111">2111</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assert_made_files_unchanged</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2112" href="#t2112">2112</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t2113" href="#t2113">2113</a></span><span class="t"> <span class="key">def</span> <span class="nam">test_check_mixed</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2114" href="#t2114">2114</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2115" href="#t2115">2115</a></span><span class="t"> <span class="str">'unchanged.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2116" href="#t2116">2116</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2117" href="#t2117">2117</a></span><span class="t"><span class="str"> cog.outl("hello world")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2118" href="#t2118">2118</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2119" href="#t2119">2119</a></span><span class="t"><span class="str"> hello world</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2120" href="#t2120">2120</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2121" href="#t2121">2121</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2122" href="#t2122">2122</a></span><span class="t"> <span class="str">'changed.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2123" href="#t2123">2123</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2124" href="#t2124">2124</a></span><span class="t"><span class="str"> cog.outl("goodbye world")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2125" href="#t2125">2125</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2126" href="#t2126">2126</a></span><span class="t"><span class="str"> hello world</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2127" href="#t2127">2127</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2128" href="#t2128">2128</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2129" href="#t2129">2129</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2130" href="#t2130">2130</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2131" href="#t2131">2131</a></span><span class="t"> <span class="key">for</span> <span class="nam">verbosity</span><span class="op">,</span> <span class="nam">output</span> <span class="key">in</span> <span class="op">[</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2132" href="#t2132">2132</a></span><span class="t"> <span class="op">(</span><span class="str">"0"</span><span class="op">,</span> <span class="str">"Check failed\n"</span><span class="op">)</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2133" href="#t2133">2133</a></span><span class="t"> <span class="op">(</span><span class="str">"1"</span><span class="op">,</span> <span class="str">"Checking changed.cog (changed)\nCheck failed\n"</span><span class="op">)</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2134" href="#t2134">2134</a></span><span class="t"> <span class="op">(</span><span class="str">"2"</span><span class="op">,</span> <span class="str">"Checking unchanged.cog\nChecking changed.cog (changed)\nCheck failed\n"</span><span class="op">)</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2135" href="#t2135">2135</a></span><span class="t"> <span class="op">]</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2136" href="#t2136">2136</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">newCog</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2137" href="#t2137">2137</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">run_check</span><span class="op">(</span><span class="op">[</span><span class="str">'--verbosity=%s'</span> <span class="op">%</span> <span class="nam">verbosity</span><span class="op">,</span> <span class="str">'unchanged.cog'</span><span class="op">,</span> <span class="str">'changed.cog'</span><span class="op">]</span><span class="op">,</span> <span class="nam">status</span><span class="op">=</span><span class="num">5</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2138" href="#t2138">2138</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">output</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span><span class="op">,</span> <span class="nam">output</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2139" href="#t2139">2139</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assert_made_files_unchanged</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2140" href="#t2140">2140</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t2141" href="#t2141">2141</a></span><span class="t"> <span class="key">def</span> <span class="nam">test_check_with_good_checksum</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2142" href="#t2142">2142</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2143" href="#t2143">2143</a></span><span class="t"> <span class="str">'good.txt'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2144" href="#t2144">2144</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2145" href="#t2145">2145</a></span><span class="t"><span class="str"> cog.outl("This line was newly")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2146" href="#t2146">2146</a></span><span class="t"><span class="str"> cog.outl("generated by cog")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2147" href="#t2147">2147</a></span><span class="t"><span class="str"> cog.outl("blah blah.")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2148" href="#t2148">2148</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2149" href="#t2149">2149</a></span><span class="t"><span class="str"> This line was newly</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2150" href="#t2150">2150</a></span><span class="t"><span class="str"> generated by cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2151" href="#t2151">2151</a></span><span class="t"><span class="str"> blah blah.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2152" href="#t2152">2152</a></span><span class="t"><span class="str"> //[[[end]]] (checksum: a8540982e5ad6b95c9e9a184b26f4346)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2153" href="#t2153">2153</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2154" href="#t2154">2154</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2155" href="#t2155">2155</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2156" href="#t2156">2156</a></span><span class="t"> <span class="com"># Have to use -c with --check if there are checksums in the file.</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2157" href="#t2157">2157</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">run_check</span><span class="op">(</span><span class="op">[</span><span class="str">'-c'</span><span class="op">,</span> <span class="str">'good.txt'</span><span class="op">]</span><span class="op">,</span> <span class="nam">status</span><span class="op">=</span><span class="num">0</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2158" href="#t2158">2158</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">output</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span><span class="op">,</span> <span class="str">"Checking good.txt\n"</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2159" href="#t2159">2159</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assert_made_files_unchanged</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2160" href="#t2160">2160</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t2161" href="#t2161">2161</a></span><span class="t"> <span class="key">def</span> <span class="nam">test_check_with_bad_checksum</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2162" href="#t2162">2162</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2163" href="#t2163">2163</a></span><span class="t"> <span class="str">'bad.txt'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2164" href="#t2164">2164</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2165" href="#t2165">2165</a></span><span class="t"><span class="str"> cog.outl("This line was newly")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2166" href="#t2166">2166</a></span><span class="t"><span class="str"> cog.outl("generated by cog")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2167" href="#t2167">2167</a></span><span class="t"><span class="str"> cog.outl("blah blah.")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2168" href="#t2168">2168</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2169" href="#t2169">2169</a></span><span class="t"><span class="str"> This line was newly</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2170" href="#t2170">2170</a></span><span class="t"><span class="str"> generated by cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2171" href="#t2171">2171</a></span><span class="t"><span class="str"> blah blah.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2172" href="#t2172">2172</a></span><span class="t"><span class="str"> //[[[end]]] (checksum: a9999999e5ad6b95c9e9a184b26f4346)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2173" href="#t2173">2173</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2174" href="#t2174">2174</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2175" href="#t2175">2175</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2176" href="#t2176">2176</a></span><span class="t"> <span class="com"># Have to use -c with --check if there are checksums in the file.</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2177" href="#t2177">2177</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">run_check</span><span class="op">(</span><span class="op">[</span><span class="str">'-c'</span><span class="op">,</span> <span class="str">'bad.txt'</span><span class="op">]</span><span class="op">,</span> <span class="nam">status</span><span class="op">=</span><span class="num">1</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2178" href="#t2178">2178</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">output</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span><span class="op">,</span> <span class="str">"Checking bad.txt\nbad.txt(9): Output has been edited! Delete old checksum to unprotect.\n"</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2179" href="#t2179">2179</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assert_made_files_unchanged</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2180" href="#t2180">2180</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2181" href="#t2181">2181</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t2182" href="#t2182">2182</a></span><span class="t"><span class="key">class</span> <span class="nam">WritabilityTests</span><span class="op">(</span><span class="nam">TestCaseWithTempDir</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2183" href="#t2183">2183</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t2184" href="#t2184">2184</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2185" href="#t2185">2185</a></span><span class="t"> <span class="str">'test.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2186" href="#t2186">2186</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2187" href="#t2187">2187</a></span><span class="t"><span class="str"> for fn in ['DoSomething', 'DoAnotherThing', 'DoLastThing']:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2188" href="#t2188">2188</a></span><span class="t"><span class="str"> cog.outl("void %s();" % fn)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2189" href="#t2189">2189</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2190" href="#t2190">2190</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2191" href="#t2191">2191</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2192" href="#t2192">2192</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2193" href="#t2193">2193</a></span><span class="t"> <span class="str">'test.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2194" href="#t2194">2194</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2195" href="#t2195">2195</a></span><span class="t"><span class="str"> for fn in ['DoSomething', 'DoAnotherThing', 'DoLastThing']:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2196" href="#t2196">2196</a></span><span class="t"><span class="str"> cog.outl("void %s();" % fn)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2197" href="#t2197">2197</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2198" href="#t2198">2198</a></span><span class="t"><span class="str"> void DoSomething();</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2199" href="#t2199">2199</a></span><span class="t"><span class="str"> void DoAnotherThing();</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2200" href="#t2200">2200</a></span><span class="t"><span class="str"> void DoLastThing();</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2201" href="#t2201">2201</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2202" href="#t2202">2202</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2203" href="#t2203">2203</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2204" href="#t2204">2204</a></span><span class="t"> </span><span class="r"></span></p> + <p class="par run show_par"><span class="n"><a id="t2205" href="#t2205">2205</a></span><span class="t"> <span class="key">if</span> <span class="nam">os</span><span class="op">.</span><span class="nam">name</span> <span class="op">==</span> <span class="str">'nt'</span><span class="op">:</span> </span><span class="r"><span class="annotate short">2205 ↛ 2207</span><span class="annotate long">line 2205 didn't jump to line 2207, because the condition on line 2205 was never true</span></span></p> + <p class="pln"><span class="n"><a id="t2206" href="#t2206">2206</a></span><span class="t"> <span class="com"># for Windows</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2207" href="#t2207">2207</a></span><span class="t"> <span class="nam">cmd_w_args</span> <span class="op">=</span> <span class="str">'attrib -R %s'</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2208" href="#t2208">2208</a></span><span class="t"> <span class="nam">cmd_w_asterisk</span> <span class="op">=</span> <span class="str">'attrib -R *'</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2209" href="#t2209">2209</a></span><span class="t"> <span class="key">else</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2210" href="#t2210">2210</a></span><span class="t"> <span class="com"># for unix-like</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t2211" href="#t2211">2211</a></span><span class="t"> <span class="nam">cmd_w_args</span> <span class="op">=</span> <span class="str">'chmod +w %s'</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t2212" href="#t2212">2212</a></span><span class="t"> <span class="nam">cmd_w_asterisk</span> <span class="op">=</span> <span class="str">'chmod +w *'</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2213" href="#t2213">2213</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t2214" href="#t2214">2214</a></span><span class="t"> <span class="key">def</span> <span class="nam">setUp</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2215" href="#t2215">2215</a></span><span class="t"> <span class="nam">super</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">setUp</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2216" href="#t2216">2216</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2217" href="#t2217">2217</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">testcog</span> <span class="op">=</span> <span class="nam">os</span><span class="op">.</span><span class="nam">path</span><span class="op">.</span><span class="nam">join</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">,</span> <span class="str">'test.cog'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2218" href="#t2218">2218</a></span><span class="t"> <span class="nam">os</span><span class="op">.</span><span class="nam">chmod</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">testcog</span><span class="op">,</span> <span class="nam">stat</span><span class="op">.</span><span class="nam">S_IREAD</span><span class="op">)</span> <span class="com"># Make the file readonly.</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2219" href="#t2219">2219</a></span><span class="t"> <span class="key">assert</span> <span class="key">not</span> <span class="nam">os</span><span class="op">.</span><span class="nam">access</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">testcog</span><span class="op">,</span> <span class="nam">os</span><span class="op">.</span><span class="nam">W_OK</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2220" href="#t2220">2220</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t2221" href="#t2221">2221</a></span><span class="t"> <span class="key">def</span> <span class="nam">tearDown</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2222" href="#t2222">2222</a></span><span class="t"> <span class="nam">os</span><span class="op">.</span><span class="nam">chmod</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">testcog</span><span class="op">,</span> <span class="nam">stat</span><span class="op">.</span><span class="nam">S_IWRITE</span><span class="op">)</span> <span class="com"># Make the file writable again.</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2223" href="#t2223">2223</a></span><span class="t"> <span class="nam">super</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">tearDown</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2224" href="#t2224">2224</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t2225" href="#t2225">2225</a></span><span class="t"> <span class="key">def</span> <span class="nam">testReadonlyNoCommand</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2226" href="#t2226">2226</a></span><span class="t"> <span class="key">with</span> <span class="nam">self</span><span class="op">.</span><span class="nam">assertRaisesRegex</span><span class="op">(</span><span class="nam">CogError</span><span class="op">,</span> <span class="str">"^Can't overwrite test.cog$"</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2227" href="#t2227">2227</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'test.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2228" href="#t2228">2228</a></span><span class="t"> <span class="key">assert</span> <span class="key">not</span> <span class="nam">os</span><span class="op">.</span><span class="nam">access</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">testcog</span><span class="op">,</span> <span class="nam">os</span><span class="op">.</span><span class="nam">W_OK</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2229" href="#t2229">2229</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t2230" href="#t2230">2230</a></span><span class="t"> <span class="key">def</span> <span class="nam">testReadonlyWithCommand</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2231" href="#t2231">2231</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'-w'</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">cmd_w_args</span><span class="op">,</span> <span class="str">'test.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2232" href="#t2232">2232</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'test.cog'</span><span class="op">,</span> <span class="str">'test.out'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2233" href="#t2233">2233</a></span><span class="t"> <span class="key">assert</span> <span class="nam">os</span><span class="op">.</span><span class="nam">access</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">testcog</span><span class="op">,</span> <span class="nam">os</span><span class="op">.</span><span class="nam">W_OK</span><span class="op">)</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t2234" href="#t2234">2234</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t2235" href="#t2235">2235</a></span><span class="t"> <span class="key">def</span> <span class="nam">testReadonlyNoCommand</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2236" href="#t2236">2236</a></span><span class="t"> <span class="key">with</span> <span class="nam">self</span><span class="op">.</span><span class="nam">assertRaisesRegex</span><span class="op">(</span><span class="nam">CogError</span><span class="op">,</span> <span class="str">"^Can't overwrite test.cog$"</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2237" href="#t2237">2237</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'test.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2238" href="#t2238">2238</a></span><span class="t"> <span class="key">assert</span> <span class="key">not</span> <span class="nam">os</span><span class="op">.</span><span class="nam">access</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">testcog</span><span class="op">,</span> <span class="nam">os</span><span class="op">.</span><span class="nam">W_OK</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t2235" href="#t2235">2235</a></span><span class="t"> <span class="key">def</span> <span class="nam">testReadonlyWithCommandWithNoSlot</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2236" href="#t2236">2236</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'-w'</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">cmd_w_asterisk</span><span class="op">,</span> <span class="str">'test.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2237" href="#t2237">2237</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'test.cog'</span><span class="op">,</span> <span class="str">'test.out'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2238" href="#t2238">2238</a></span><span class="t"> <span class="key">assert</span> <span class="nam">os</span><span class="op">.</span><span class="nam">access</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">testcog</span><span class="op">,</span> <span class="nam">os</span><span class="op">.</span><span class="nam">W_OK</span><span class="op">)</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t2239" href="#t2239">2239</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t2240" href="#t2240">2240</a></span><span class="t"> <span class="key">def</span> <span class="nam">testReadonlyWithCommand</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2241" href="#t2241">2241</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'-w'</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">cmd_w_args</span><span class="op">,</span> <span class="str">'test.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2242" href="#t2242">2242</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'test.cog'</span><span class="op">,</span> <span class="str">'test.out'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2243" href="#t2243">2243</a></span><span class="t"> <span class="key">assert</span> <span class="nam">os</span><span class="op">.</span><span class="nam">access</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">testcog</span><span class="op">,</span> <span class="nam">os</span><span class="op">.</span><span class="nam">W_OK</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t2240" href="#t2240">2240</a></span><span class="t"> <span class="key">def</span> <span class="nam">testReadonlyWithIneffectualCommand</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2241" href="#t2241">2241</a></span><span class="t"> <span class="key">with</span> <span class="nam">self</span><span class="op">.</span><span class="nam">assertRaisesRegex</span><span class="op">(</span><span class="nam">CogError</span><span class="op">,</span> <span class="str">"^Couldn't make test.cog writable$"</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2242" href="#t2242">2242</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'-w'</span><span class="op">,</span> <span class="str">'echo %s'</span><span class="op">,</span> <span class="str">'test.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2243" href="#t2243">2243</a></span><span class="t"> <span class="key">assert</span> <span class="key">not</span> <span class="nam">os</span><span class="op">.</span><span class="nam">access</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">testcog</span><span class="op">,</span> <span class="nam">os</span><span class="op">.</span><span class="nam">W_OK</span><span class="op">)</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t2244" href="#t2244">2244</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t2245" href="#t2245">2245</a></span><span class="t"> <span class="key">def</span> <span class="nam">testReadonlyWithCommandWithNoSlot</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2246" href="#t2246">2246</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'-w'</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">cmd_w_asterisk</span><span class="op">,</span> <span class="str">'test.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2247" href="#t2247">2247</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'test.cog'</span><span class="op">,</span> <span class="str">'test.out'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2248" href="#t2248">2248</a></span><span class="t"> <span class="key">assert</span> <span class="nam">os</span><span class="op">.</span><span class="nam">access</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">testcog</span><span class="op">,</span> <span class="nam">os</span><span class="op">.</span><span class="nam">W_OK</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2249" href="#t2249">2249</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t2250" href="#t2250">2250</a></span><span class="t"> <span class="key">def</span> <span class="nam">testReadonlyWithIneffectualCommand</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2251" href="#t2251">2251</a></span><span class="t"> <span class="key">with</span> <span class="nam">self</span><span class="op">.</span><span class="nam">assertRaisesRegex</span><span class="op">(</span><span class="nam">CogError</span><span class="op">,</span> <span class="str">"^Couldn't make test.cog writable$"</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2252" href="#t2252">2252</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'-w'</span><span class="op">,</span> <span class="str">'echo %s'</span><span class="op">,</span> <span class="str">'test.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2253" href="#t2253">2253</a></span><span class="t"> <span class="key">assert</span> <span class="key">not</span> <span class="nam">os</span><span class="op">.</span><span class="nam">access</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">testcog</span><span class="op">,</span> <span class="nam">os</span><span class="op">.</span><span class="nam">W_OK</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2254" href="#t2254">2254</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2255" href="#t2255">2255</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t2256" href="#t2256">2256</a></span><span class="t"><span class="key">class</span> <span class="nam">ChecksumTests</span><span class="op">(</span><span class="nam">TestCaseWithTempDir</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2257" href="#t2257">2257</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t2258" href="#t2258">2258</a></span><span class="t"> <span class="key">def</span> <span class="nam">testCreateChecksumOutput</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2259" href="#t2259">2259</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2260" href="#t2260">2260</a></span><span class="t"> <span class="str">'cog1.txt'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2261" href="#t2261">2261</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2262" href="#t2262">2262</a></span><span class="t"><span class="str"> cog.outl("This line was generated.")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2263" href="#t2263">2263</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2264" href="#t2264">2264</a></span><span class="t"><span class="str"> This line was generated.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2265" href="#t2265">2265</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2266" href="#t2266">2266</a></span><span class="t"><span class="str"> This line was not.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2267" href="#t2267">2267</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2245" href="#t2245">2245</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t2246" href="#t2246">2246</a></span><span class="t"><span class="key">class</span> <span class="nam">ChecksumTests</span><span class="op">(</span><span class="nam">TestCaseWithTempDir</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2247" href="#t2247">2247</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t2248" href="#t2248">2248</a></span><span class="t"> <span class="key">def</span> <span class="nam">testCreateChecksumOutput</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2249" href="#t2249">2249</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2250" href="#t2250">2250</a></span><span class="t"> <span class="str">'cog1.txt'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2251" href="#t2251">2251</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2252" href="#t2252">2252</a></span><span class="t"><span class="str"> cog.outl("This line was generated.")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2253" href="#t2253">2253</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2254" href="#t2254">2254</a></span><span class="t"><span class="str"> This line was generated.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2255" href="#t2255">2255</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2256" href="#t2256">2256</a></span><span class="t"><span class="str"> This line was not.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2257" href="#t2257">2257</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2258" href="#t2258">2258</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2259" href="#t2259">2259</a></span><span class="t"> <span class="str">'cog1.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2260" href="#t2260">2260</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2261" href="#t2261">2261</a></span><span class="t"><span class="str"> cog.outl("This line was generated.")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2262" href="#t2262">2262</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2263" href="#t2263">2263</a></span><span class="t"><span class="str"> This line was generated.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2264" href="#t2264">2264</a></span><span class="t"><span class="str"> //[[[end]]] (checksum: 8adb13fb59b996a1c7f0065ea9f3d893)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2265" href="#t2265">2265</a></span><span class="t"><span class="str"> This line was not.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2266" href="#t2266">2266</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2267" href="#t2267">2267</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t2268" href="#t2268">2268</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2269" href="#t2269">2269</a></span><span class="t"> <span class="str">'cog1.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2270" href="#t2270">2270</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2271" href="#t2271">2271</a></span><span class="t"><span class="str"> cog.outl("This line was generated.")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2272" href="#t2272">2272</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2273" href="#t2273">2273</a></span><span class="t"><span class="str"> This line was generated.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2274" href="#t2274">2274</a></span><span class="t"><span class="str"> //[[[end]]] (checksum: 8adb13fb59b996a1c7f0065ea9f3d893)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2275" href="#t2275">2275</a></span><span class="t"><span class="str"> This line was not.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2276" href="#t2276">2276</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2277" href="#t2277">2277</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2278" href="#t2278">2278</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2279" href="#t2279">2279</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2280" href="#t2280">2280</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'-c'</span><span class="op">,</span> <span class="str">'cog1.txt'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2281" href="#t2281">2281</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'cog1.txt'</span><span class="op">,</span> <span class="str">'cog1.out'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2282" href="#t2282">2282</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t2283" href="#t2283">2283</a></span><span class="t"> <span class="key">def</span> <span class="nam">testCheckChecksumOutput</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2284" href="#t2284">2284</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2285" href="#t2285">2285</a></span><span class="t"> <span class="str">'cog1.txt'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2269" href="#t2269">2269</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2270" href="#t2270">2270</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'-c'</span><span class="op">,</span> <span class="str">'cog1.txt'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2271" href="#t2271">2271</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'cog1.txt'</span><span class="op">,</span> <span class="str">'cog1.out'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2272" href="#t2272">2272</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t2273" href="#t2273">2273</a></span><span class="t"> <span class="key">def</span> <span class="nam">testCheckChecksumOutput</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2274" href="#t2274">2274</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2275" href="#t2275">2275</a></span><span class="t"> <span class="str">'cog1.txt'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2276" href="#t2276">2276</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2277" href="#t2277">2277</a></span><span class="t"><span class="str"> cog.outl("This line was newly")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2278" href="#t2278">2278</a></span><span class="t"><span class="str"> cog.outl("generated by cog")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2279" href="#t2279">2279</a></span><span class="t"><span class="str"> cog.outl("blah blah.")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2280" href="#t2280">2280</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2281" href="#t2281">2281</a></span><span class="t"><span class="str"> This line was generated.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2282" href="#t2282">2282</a></span><span class="t"><span class="str"> //[[[end]]] (checksum: 8adb13fb59b996a1c7f0065ea9f3d893)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2283" href="#t2283">2283</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2284" href="#t2284">2284</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2285" href="#t2285">2285</a></span><span class="t"> <span class="str">'cog1.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t2286" href="#t2286">2286</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t2287" href="#t2287">2287</a></span><span class="t"><span class="str"> cog.outl("This line was newly")</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t2288" href="#t2288">2288</a></span><span class="t"><span class="str"> cog.outl("generated by cog")</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t2289" href="#t2289">2289</a></span><span class="t"><span class="str"> cog.outl("blah blah.")</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t2290" href="#t2290">2290</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2291" href="#t2291">2291</a></span><span class="t"><span class="str"> This line was generated.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2292" href="#t2292">2292</a></span><span class="t"><span class="str"> //[[[end]]] (checksum: 8adb13fb59b996a1c7f0065ea9f3d893)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2293" href="#t2293">2293</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2294" href="#t2294">2294</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2295" href="#t2295">2295</a></span><span class="t"> <span class="str">'cog1.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2296" href="#t2296">2296</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2297" href="#t2297">2297</a></span><span class="t"><span class="str"> cog.outl("This line was newly")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2298" href="#t2298">2298</a></span><span class="t"><span class="str"> cog.outl("generated by cog")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2299" href="#t2299">2299</a></span><span class="t"><span class="str"> cog.outl("blah blah.")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2300" href="#t2300">2300</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2301" href="#t2301">2301</a></span><span class="t"><span class="str"> This line was newly</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2302" href="#t2302">2302</a></span><span class="t"><span class="str"> generated by cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2303" href="#t2303">2303</a></span><span class="t"><span class="str"> blah blah.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2304" href="#t2304">2304</a></span><span class="t"><span class="str"> //[[[end]]] (checksum: a8540982e5ad6b95c9e9a184b26f4346)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2305" href="#t2305">2305</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2306" href="#t2306">2306</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2307" href="#t2307">2307</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2308" href="#t2308">2308</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2309" href="#t2309">2309</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'-c'</span><span class="op">,</span> <span class="str">'cog1.txt'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2310" href="#t2310">2310</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'cog1.txt'</span><span class="op">,</span> <span class="str">'cog1.out'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2311" href="#t2311">2311</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t2312" href="#t2312">2312</a></span><span class="t"> <span class="key">def</span> <span class="nam">testRemoveChecksumOutput</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2313" href="#t2313">2313</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2314" href="#t2314">2314</a></span><span class="t"> <span class="str">'cog1.txt'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2291" href="#t2291">2291</a></span><span class="t"><span class="str"> This line was newly</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2292" href="#t2292">2292</a></span><span class="t"><span class="str"> generated by cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2293" href="#t2293">2293</a></span><span class="t"><span class="str"> blah blah.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2294" href="#t2294">2294</a></span><span class="t"><span class="str"> //[[[end]]] (checksum: a8540982e5ad6b95c9e9a184b26f4346)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2295" href="#t2295">2295</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2296" href="#t2296">2296</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2297" href="#t2297">2297</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2298" href="#t2298">2298</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2299" href="#t2299">2299</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'-c'</span><span class="op">,</span> <span class="str">'cog1.txt'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2300" href="#t2300">2300</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'cog1.txt'</span><span class="op">,</span> <span class="str">'cog1.out'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2301" href="#t2301">2301</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t2302" href="#t2302">2302</a></span><span class="t"> <span class="key">def</span> <span class="nam">testRemoveChecksumOutput</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2303" href="#t2303">2303</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2304" href="#t2304">2304</a></span><span class="t"> <span class="str">'cog1.txt'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2305" href="#t2305">2305</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2306" href="#t2306">2306</a></span><span class="t"><span class="str"> cog.outl("This line was newly")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2307" href="#t2307">2307</a></span><span class="t"><span class="str"> cog.outl("generated by cog")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2308" href="#t2308">2308</a></span><span class="t"><span class="str"> cog.outl("blah blah.")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2309" href="#t2309">2309</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2310" href="#t2310">2310</a></span><span class="t"><span class="str"> This line was generated.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2311" href="#t2311">2311</a></span><span class="t"><span class="str"> //[[[end]]] (checksum: 8adb13fb59b996a1c7f0065ea9f3d893) fooey</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2312" href="#t2312">2312</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2313" href="#t2313">2313</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2314" href="#t2314">2314</a></span><span class="t"> <span class="str">'cog1.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t2315" href="#t2315">2315</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t2316" href="#t2316">2316</a></span><span class="t"><span class="str"> cog.outl("This line was newly")</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t2317" href="#t2317">2317</a></span><span class="t"><span class="str"> cog.outl("generated by cog")</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t2318" href="#t2318">2318</a></span><span class="t"><span class="str"> cog.outl("blah blah.")</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t2319" href="#t2319">2319</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2320" href="#t2320">2320</a></span><span class="t"><span class="str"> This line was generated.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2321" href="#t2321">2321</a></span><span class="t"><span class="str"> //[[[end]]] (checksum: 8adb13fb59b996a1c7f0065ea9f3d893) fooey</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2322" href="#t2322">2322</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2323" href="#t2323">2323</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2324" href="#t2324">2324</a></span><span class="t"> <span class="str">'cog1.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2325" href="#t2325">2325</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2326" href="#t2326">2326</a></span><span class="t"><span class="str"> cog.outl("This line was newly")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2327" href="#t2327">2327</a></span><span class="t"><span class="str"> cog.outl("generated by cog")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2328" href="#t2328">2328</a></span><span class="t"><span class="str"> cog.outl("blah blah.")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2329" href="#t2329">2329</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2330" href="#t2330">2330</a></span><span class="t"><span class="str"> This line was newly</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2331" href="#t2331">2331</a></span><span class="t"><span class="str"> generated by cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2332" href="#t2332">2332</a></span><span class="t"><span class="str"> blah blah.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2333" href="#t2333">2333</a></span><span class="t"><span class="str"> //[[[end]]] fooey</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2334" href="#t2334">2334</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2335" href="#t2335">2335</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2336" href="#t2336">2336</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2337" href="#t2337">2337</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2338" href="#t2338">2338</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'cog1.txt'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2339" href="#t2339">2339</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'cog1.txt'</span><span class="op">,</span> <span class="str">'cog1.out'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2340" href="#t2340">2340</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t2341" href="#t2341">2341</a></span><span class="t"> <span class="key">def</span> <span class="nam">testTamperedChecksumOutput</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2342" href="#t2342">2342</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2343" href="#t2343">2343</a></span><span class="t"> <span class="str">'cog1.txt'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2344" href="#t2344">2344</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2345" href="#t2345">2345</a></span><span class="t"><span class="str"> cog.outl("This line was newly")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2346" href="#t2346">2346</a></span><span class="t"><span class="str"> cog.outl("generated by cog")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2347" href="#t2347">2347</a></span><span class="t"><span class="str"> cog.outl("blah blah.")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2348" href="#t2348">2348</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2349" href="#t2349">2349</a></span><span class="t"><span class="str"> Xhis line was newly</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2350" href="#t2350">2350</a></span><span class="t"><span class="str"> generated by cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2351" href="#t2351">2351</a></span><span class="t"><span class="str"> blah blah.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2352" href="#t2352">2352</a></span><span class="t"><span class="str"> //[[[end]]] (checksum: a8540982e5ad6b95c9e9a184b26f4346)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2353" href="#t2353">2353</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2354" href="#t2354">2354</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2355" href="#t2355">2355</a></span><span class="t"> <span class="str">'cog2.txt'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2356" href="#t2356">2356</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2357" href="#t2357">2357</a></span><span class="t"><span class="str"> cog.outl("This line was newly")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2358" href="#t2358">2358</a></span><span class="t"><span class="str"> cog.outl("generated by cog")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2359" href="#t2359">2359</a></span><span class="t"><span class="str"> cog.outl("blah blah.")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2360" href="#t2360">2360</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2361" href="#t2361">2361</a></span><span class="t"><span class="str"> This line was newly</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2362" href="#t2362">2362</a></span><span class="t"><span class="str"> generated by cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2363" href="#t2363">2363</a></span><span class="t"><span class="str"> blah blah!</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2364" href="#t2364">2364</a></span><span class="t"><span class="str"> //[[[end]]] (checksum: a8540982e5ad6b95c9e9a184b26f4346)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2365" href="#t2365">2365</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2366" href="#t2366">2366</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2367" href="#t2367">2367</a></span><span class="t"> <span class="str">'cog3.txt'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2368" href="#t2368">2368</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2369" href="#t2369">2369</a></span><span class="t"><span class="str"> cog.outl("This line was newly")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2370" href="#t2370">2370</a></span><span class="t"><span class="str"> cog.outl("generated by cog")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2371" href="#t2371">2371</a></span><span class="t"><span class="str"> cog.outl("blah blah.")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2372" href="#t2372">2372</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2373" href="#t2373">2373</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2374" href="#t2374">2374</a></span><span class="t"><span class="str"> This line was newly</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2375" href="#t2375">2375</a></span><span class="t"><span class="str"> generated by cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2376" href="#t2376">2376</a></span><span class="t"><span class="str"> blah blah.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2377" href="#t2377">2377</a></span><span class="t"><span class="str"> //[[[end]]] (checksum: a8540982e5ad6b95c9e9a184b26f4346)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2378" href="#t2378">2378</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2379" href="#t2379">2379</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2380" href="#t2380">2380</a></span><span class="t"> <span class="str">'cog4.txt'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2381" href="#t2381">2381</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2382" href="#t2382">2382</a></span><span class="t"><span class="str"> cog.outl("This line was newly")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2383" href="#t2383">2383</a></span><span class="t"><span class="str"> cog.outl("generated by cog")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2384" href="#t2384">2384</a></span><span class="t"><span class="str"> cog.outl("blah blah.")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2385" href="#t2385">2385</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2386" href="#t2386">2386</a></span><span class="t"><span class="str"> This line was newly</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2387" href="#t2387">2387</a></span><span class="t"><span class="str"> generated by cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2388" href="#t2388">2388</a></span><span class="t"><span class="str"> blah blah..</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2389" href="#t2389">2389</a></span><span class="t"><span class="str"> //[[[end]]] (checksum: a8540982e5ad6b95c9e9a184b26f4346)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2390" href="#t2390">2390</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2391" href="#t2391">2391</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2392" href="#t2392">2392</a></span><span class="t"> <span class="str">'cog5.txt'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2393" href="#t2393">2393</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2394" href="#t2394">2394</a></span><span class="t"><span class="str"> cog.outl("This line was newly")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2395" href="#t2395">2395</a></span><span class="t"><span class="str"> cog.outl("generated by cog")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2396" href="#t2396">2396</a></span><span class="t"><span class="str"> cog.outl("blah blah.")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2397" href="#t2397">2397</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2398" href="#t2398">2398</a></span><span class="t"><span class="str"> This line was newly</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2399" href="#t2399">2399</a></span><span class="t"><span class="str"> generated by cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2400" href="#t2400">2400</a></span><span class="t"><span class="str"> blah blah.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2401" href="#t2401">2401</a></span><span class="t"><span class="str"> extra</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2402" href="#t2402">2402</a></span><span class="t"><span class="str"> //[[[end]]] (checksum: a8540982e5ad6b95c9e9a184b26f4346)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2403" href="#t2403">2403</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2320" href="#t2320">2320</a></span><span class="t"><span class="str"> This line was newly</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2321" href="#t2321">2321</a></span><span class="t"><span class="str"> generated by cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2322" href="#t2322">2322</a></span><span class="t"><span class="str"> blah blah.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2323" href="#t2323">2323</a></span><span class="t"><span class="str"> //[[[end]]] fooey</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2324" href="#t2324">2324</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2325" href="#t2325">2325</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2326" href="#t2326">2326</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2327" href="#t2327">2327</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2328" href="#t2328">2328</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'cog1.txt'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2329" href="#t2329">2329</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'cog1.txt'</span><span class="op">,</span> <span class="str">'cog1.out'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2330" href="#t2330">2330</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t2331" href="#t2331">2331</a></span><span class="t"> <span class="key">def</span> <span class="nam">testTamperedChecksumOutput</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2332" href="#t2332">2332</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2333" href="#t2333">2333</a></span><span class="t"> <span class="str">'cog1.txt'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2334" href="#t2334">2334</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2335" href="#t2335">2335</a></span><span class="t"><span class="str"> cog.outl("This line was newly")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2336" href="#t2336">2336</a></span><span class="t"><span class="str"> cog.outl("generated by cog")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2337" href="#t2337">2337</a></span><span class="t"><span class="str"> cog.outl("blah blah.")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2338" href="#t2338">2338</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2339" href="#t2339">2339</a></span><span class="t"><span class="str"> Xhis line was newly</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2340" href="#t2340">2340</a></span><span class="t"><span class="str"> generated by cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2341" href="#t2341">2341</a></span><span class="t"><span class="str"> blah blah.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2342" href="#t2342">2342</a></span><span class="t"><span class="str"> //[[[end]]] (checksum: a8540982e5ad6b95c9e9a184b26f4346)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2343" href="#t2343">2343</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2344" href="#t2344">2344</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2345" href="#t2345">2345</a></span><span class="t"> <span class="str">'cog2.txt'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2346" href="#t2346">2346</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2347" href="#t2347">2347</a></span><span class="t"><span class="str"> cog.outl("This line was newly")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2348" href="#t2348">2348</a></span><span class="t"><span class="str"> cog.outl("generated by cog")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2349" href="#t2349">2349</a></span><span class="t"><span class="str"> cog.outl("blah blah.")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2350" href="#t2350">2350</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2351" href="#t2351">2351</a></span><span class="t"><span class="str"> This line was newly</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2352" href="#t2352">2352</a></span><span class="t"><span class="str"> generated by cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2353" href="#t2353">2353</a></span><span class="t"><span class="str"> blah blah!</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2354" href="#t2354">2354</a></span><span class="t"><span class="str"> //[[[end]]] (checksum: a8540982e5ad6b95c9e9a184b26f4346)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2355" href="#t2355">2355</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2356" href="#t2356">2356</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2357" href="#t2357">2357</a></span><span class="t"> <span class="str">'cog3.txt'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2358" href="#t2358">2358</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2359" href="#t2359">2359</a></span><span class="t"><span class="str"> cog.outl("This line was newly")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2360" href="#t2360">2360</a></span><span class="t"><span class="str"> cog.outl("generated by cog")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2361" href="#t2361">2361</a></span><span class="t"><span class="str"> cog.outl("blah blah.")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2362" href="#t2362">2362</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2363" href="#t2363">2363</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2364" href="#t2364">2364</a></span><span class="t"><span class="str"> This line was newly</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2365" href="#t2365">2365</a></span><span class="t"><span class="str"> generated by cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2366" href="#t2366">2366</a></span><span class="t"><span class="str"> blah blah.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2367" href="#t2367">2367</a></span><span class="t"><span class="str"> //[[[end]]] (checksum: a8540982e5ad6b95c9e9a184b26f4346)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2368" href="#t2368">2368</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2369" href="#t2369">2369</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2370" href="#t2370">2370</a></span><span class="t"> <span class="str">'cog4.txt'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2371" href="#t2371">2371</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2372" href="#t2372">2372</a></span><span class="t"><span class="str"> cog.outl("This line was newly")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2373" href="#t2373">2373</a></span><span class="t"><span class="str"> cog.outl("generated by cog")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2374" href="#t2374">2374</a></span><span class="t"><span class="str"> cog.outl("blah blah.")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2375" href="#t2375">2375</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2376" href="#t2376">2376</a></span><span class="t"><span class="str"> This line was newly</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2377" href="#t2377">2377</a></span><span class="t"><span class="str"> generated by cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2378" href="#t2378">2378</a></span><span class="t"><span class="str"> blah blah..</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2379" href="#t2379">2379</a></span><span class="t"><span class="str"> //[[[end]]] (checksum: a8540982e5ad6b95c9e9a184b26f4346)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2380" href="#t2380">2380</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2381" href="#t2381">2381</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2382" href="#t2382">2382</a></span><span class="t"> <span class="str">'cog5.txt'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2383" href="#t2383">2383</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2384" href="#t2384">2384</a></span><span class="t"><span class="str"> cog.outl("This line was newly")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2385" href="#t2385">2385</a></span><span class="t"><span class="str"> cog.outl("generated by cog")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2386" href="#t2386">2386</a></span><span class="t"><span class="str"> cog.outl("blah blah.")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2387" href="#t2387">2387</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2388" href="#t2388">2388</a></span><span class="t"><span class="str"> This line was newly</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2389" href="#t2389">2389</a></span><span class="t"><span class="str"> generated by cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2390" href="#t2390">2390</a></span><span class="t"><span class="str"> blah blah.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2391" href="#t2391">2391</a></span><span class="t"><span class="str"> extra</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2392" href="#t2392">2392</a></span><span class="t"><span class="str"> //[[[end]]] (checksum: a8540982e5ad6b95c9e9a184b26f4346)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2393" href="#t2393">2393</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2394" href="#t2394">2394</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2395" href="#t2395">2395</a></span><span class="t"> <span class="str">'cog6.txt'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2396" href="#t2396">2396</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2397" href="#t2397">2397</a></span><span class="t"><span class="str"> cog.outl("This line was newly")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2398" href="#t2398">2398</a></span><span class="t"><span class="str"> cog.outl("generated by cog")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2399" href="#t2399">2399</a></span><span class="t"><span class="str"> cog.outl("blah blah.")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2400" href="#t2400">2400</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2401" href="#t2401">2401</a></span><span class="t"><span class="str"> //[[[end]]] (checksum: a8540982e5ad6b95c9e9a184b26f4346)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2402" href="#t2402">2402</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2403" href="#t2403">2403</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t2404" href="#t2404">2404</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2405" href="#t2405">2405</a></span><span class="t"> <span class="str">'cog6.txt'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2406" href="#t2406">2406</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2407" href="#t2407">2407</a></span><span class="t"><span class="str"> cog.outl("This line was newly")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2408" href="#t2408">2408</a></span><span class="t"><span class="str"> cog.outl("generated by cog")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2409" href="#t2409">2409</a></span><span class="t"><span class="str"> cog.outl("blah blah.")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2410" href="#t2410">2410</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2411" href="#t2411">2411</a></span><span class="t"><span class="str"> //[[[end]]] (checksum: a8540982e5ad6b95c9e9a184b26f4346)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2412" href="#t2412">2412</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2413" href="#t2413">2413</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2414" href="#t2414">2414</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2415" href="#t2415">2415</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2416" href="#t2416">2416</a></span><span class="t"> <span class="key">with</span> <span class="nam">self</span><span class="op">.</span><span class="nam">assertRaisesRegex</span><span class="op">(</span><span class="nam">CogError</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2417" href="#t2417">2417</a></span><span class="t"> <span class="str">r"^cog1.txt\(9\): Output has been edited! Delete old checksum to unprotect.$"</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2418" href="#t2418">2418</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-c'</span><span class="op">,</span> <span class="str">"cog1.txt"</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2419" href="#t2419">2419</a></span><span class="t"> <span class="key">with</span> <span class="nam">self</span><span class="op">.</span><span class="nam">assertRaisesRegex</span><span class="op">(</span><span class="nam">CogError</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2420" href="#t2420">2420</a></span><span class="t"> <span class="str">r"^cog2.txt\(9\): Output has been edited! Delete old checksum to unprotect.$"</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2421" href="#t2421">2421</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-c'</span><span class="op">,</span> <span class="str">"cog2.txt"</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2422" href="#t2422">2422</a></span><span class="t"> <span class="key">with</span> <span class="nam">self</span><span class="op">.</span><span class="nam">assertRaisesRegex</span><span class="op">(</span><span class="nam">CogError</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2423" href="#t2423">2423</a></span><span class="t"> <span class="str">r"^cog3.txt\(10\): Output has been edited! Delete old checksum to unprotect.$"</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2424" href="#t2424">2424</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-c'</span><span class="op">,</span> <span class="str">"cog3.txt"</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2425" href="#t2425">2425</a></span><span class="t"> <span class="key">with</span> <span class="nam">self</span><span class="op">.</span><span class="nam">assertRaisesRegex</span><span class="op">(</span><span class="nam">CogError</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2426" href="#t2426">2426</a></span><span class="t"> <span class="str">r"^cog4.txt\(9\): Output has been edited! Delete old checksum to unprotect.$"</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2427" href="#t2427">2427</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-c'</span><span class="op">,</span> <span class="str">"cog4.txt"</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2428" href="#t2428">2428</a></span><span class="t"> <span class="key">with</span> <span class="nam">self</span><span class="op">.</span><span class="nam">assertRaisesRegex</span><span class="op">(</span><span class="nam">CogError</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2429" href="#t2429">2429</a></span><span class="t"> <span class="str">r"^cog5.txt\(10\): Output has been edited! Delete old checksum to unprotect.$"</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2430" href="#t2430">2430</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-c'</span><span class="op">,</span> <span class="str">"cog5.txt"</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2431" href="#t2431">2431</a></span><span class="t"> <span class="key">with</span> <span class="nam">self</span><span class="op">.</span><span class="nam">assertRaisesRegex</span><span class="op">(</span><span class="nam">CogError</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2432" href="#t2432">2432</a></span><span class="t"> <span class="str">r"^cog6.txt\(6\): Output has been edited! Delete old checksum to unprotect.$"</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2433" href="#t2433">2433</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-c'</span><span class="op">,</span> <span class="str">"cog6.txt"</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2434" href="#t2434">2434</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t2435" href="#t2435">2435</a></span><span class="t"> <span class="key">def</span> <span class="nam">testArgvIsntModified</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2436" href="#t2436">2436</a></span><span class="t"> <span class="nam">argv</span> <span class="op">=</span> <span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-v'</span><span class="op">]</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2437" href="#t2437">2437</a></span><span class="t"> <span class="nam">orig_argv</span> <span class="op">=</span> <span class="nam">argv</span><span class="op">[</span><span class="op">:</span><span class="op">]</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2438" href="#t2438">2438</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="nam">argv</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2439" href="#t2439">2439</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">argv</span><span class="op">,</span> <span class="nam">orig_argv</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2440" href="#t2440">2440</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2441" href="#t2441">2441</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t2442" href="#t2442">2442</a></span><span class="t"><span class="key">class</span> <span class="nam">CustomMarkerTests</span><span class="op">(</span><span class="nam">TestCaseWithTempDir</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2443" href="#t2443">2443</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t2444" href="#t2444">2444</a></span><span class="t"> <span class="key">def</span> <span class="nam">testCustomerMarkers</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2445" href="#t2445">2445</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2446" href="#t2446">2446</a></span><span class="t"> <span class="str">'test.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2447" href="#t2447">2447</a></span><span class="t"><span class="str"> //{{</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2448" href="#t2448">2448</a></span><span class="t"><span class="str"> cog.outl("void %s();" % "MyFunction")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2449" href="#t2449">2449</a></span><span class="t"><span class="str"> //}}</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2450" href="#t2450">2450</a></span><span class="t"><span class="str"> //{{end}}</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2451" href="#t2451">2451</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2452" href="#t2452">2452</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2453" href="#t2453">2453</a></span><span class="t"> <span class="str">'test.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2454" href="#t2454">2454</a></span><span class="t"><span class="str"> //{{</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2455" href="#t2455">2455</a></span><span class="t"><span class="str"> cog.outl("void %s();" % "MyFunction")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2456" href="#t2456">2456</a></span><span class="t"><span class="str"> //}}</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2457" href="#t2457">2457</a></span><span class="t"><span class="str"> void MyFunction();</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2458" href="#t2458">2458</a></span><span class="t"><span class="str"> //{{end}}</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2459" href="#t2459">2459</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2460" href="#t2460">2460</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2461" href="#t2461">2461</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2462" href="#t2462">2462</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2463" href="#t2463">2463</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2464" href="#t2464">2464</a></span><span class="t"> <span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2465" href="#t2465">2465</a></span><span class="t"> <span class="str">'--markers={{ }} {{end}}'</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2466" href="#t2466">2466</a></span><span class="t"> <span class="str">'test.cog'</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2467" href="#t2467">2467</a></span><span class="t"> <span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2468" href="#t2468">2468</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'test.cog'</span><span class="op">,</span> <span class="str">'test.out'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2405" href="#t2405">2405</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2406" href="#t2406">2406</a></span><span class="t"> <span class="key">with</span> <span class="nam">self</span><span class="op">.</span><span class="nam">assertRaisesRegex</span><span class="op">(</span><span class="nam">CogError</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2407" href="#t2407">2407</a></span><span class="t"> <span class="str">r"^cog1.txt\(9\): Output has been edited! Delete old checksum to unprotect.$"</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2408" href="#t2408">2408</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-c'</span><span class="op">,</span> <span class="str">"cog1.txt"</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2409" href="#t2409">2409</a></span><span class="t"> <span class="key">with</span> <span class="nam">self</span><span class="op">.</span><span class="nam">assertRaisesRegex</span><span class="op">(</span><span class="nam">CogError</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2410" href="#t2410">2410</a></span><span class="t"> <span class="str">r"^cog2.txt\(9\): Output has been edited! Delete old checksum to unprotect.$"</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2411" href="#t2411">2411</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-c'</span><span class="op">,</span> <span class="str">"cog2.txt"</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2412" href="#t2412">2412</a></span><span class="t"> <span class="key">with</span> <span class="nam">self</span><span class="op">.</span><span class="nam">assertRaisesRegex</span><span class="op">(</span><span class="nam">CogError</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2413" href="#t2413">2413</a></span><span class="t"> <span class="str">r"^cog3.txt\(10\): Output has been edited! Delete old checksum to unprotect.$"</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2414" href="#t2414">2414</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-c'</span><span class="op">,</span> <span class="str">"cog3.txt"</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2415" href="#t2415">2415</a></span><span class="t"> <span class="key">with</span> <span class="nam">self</span><span class="op">.</span><span class="nam">assertRaisesRegex</span><span class="op">(</span><span class="nam">CogError</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2416" href="#t2416">2416</a></span><span class="t"> <span class="str">r"^cog4.txt\(9\): Output has been edited! Delete old checksum to unprotect.$"</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2417" href="#t2417">2417</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-c'</span><span class="op">,</span> <span class="str">"cog4.txt"</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2418" href="#t2418">2418</a></span><span class="t"> <span class="key">with</span> <span class="nam">self</span><span class="op">.</span><span class="nam">assertRaisesRegex</span><span class="op">(</span><span class="nam">CogError</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2419" href="#t2419">2419</a></span><span class="t"> <span class="str">r"^cog5.txt\(10\): Output has been edited! Delete old checksum to unprotect.$"</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2420" href="#t2420">2420</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-c'</span><span class="op">,</span> <span class="str">"cog5.txt"</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2421" href="#t2421">2421</a></span><span class="t"> <span class="key">with</span> <span class="nam">self</span><span class="op">.</span><span class="nam">assertRaisesRegex</span><span class="op">(</span><span class="nam">CogError</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2422" href="#t2422">2422</a></span><span class="t"> <span class="str">r"^cog6.txt\(6\): Output has been edited! Delete old checksum to unprotect.$"</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2423" href="#t2423">2423</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-c'</span><span class="op">,</span> <span class="str">"cog6.txt"</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2424" href="#t2424">2424</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t2425" href="#t2425">2425</a></span><span class="t"> <span class="key">def</span> <span class="nam">testArgvIsntModified</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2426" href="#t2426">2426</a></span><span class="t"> <span class="nam">argv</span> <span class="op">=</span> <span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-v'</span><span class="op">]</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2427" href="#t2427">2427</a></span><span class="t"> <span class="nam">orig_argv</span> <span class="op">=</span> <span class="nam">argv</span><span class="op">[</span><span class="op">:</span><span class="op">]</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2428" href="#t2428">2428</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="nam">argv</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2429" href="#t2429">2429</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">argv</span><span class="op">,</span> <span class="nam">orig_argv</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2430" href="#t2430">2430</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2431" href="#t2431">2431</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t2432" href="#t2432">2432</a></span><span class="t"><span class="key">class</span> <span class="nam">CustomMarkerTests</span><span class="op">(</span><span class="nam">TestCaseWithTempDir</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2433" href="#t2433">2433</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t2434" href="#t2434">2434</a></span><span class="t"> <span class="key">def</span> <span class="nam">testCustomerMarkers</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2435" href="#t2435">2435</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2436" href="#t2436">2436</a></span><span class="t"> <span class="str">'test.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2437" href="#t2437">2437</a></span><span class="t"><span class="str"> //{{</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2438" href="#t2438">2438</a></span><span class="t"><span class="str"> cog.outl("void %s();" % "MyFunction")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2439" href="#t2439">2439</a></span><span class="t"><span class="str"> //}}</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2440" href="#t2440">2440</a></span><span class="t"><span class="str"> //{{end}}</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2441" href="#t2441">2441</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2442" href="#t2442">2442</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2443" href="#t2443">2443</a></span><span class="t"> <span class="str">'test.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2444" href="#t2444">2444</a></span><span class="t"><span class="str"> //{{</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2445" href="#t2445">2445</a></span><span class="t"><span class="str"> cog.outl("void %s();" % "MyFunction")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2446" href="#t2446">2446</a></span><span class="t"><span class="str"> //}}</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2447" href="#t2447">2447</a></span><span class="t"><span class="str"> void MyFunction();</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2448" href="#t2448">2448</a></span><span class="t"><span class="str"> //{{end}}</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2449" href="#t2449">2449</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2450" href="#t2450">2450</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2451" href="#t2451">2451</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2452" href="#t2452">2452</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2453" href="#t2453">2453</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2454" href="#t2454">2454</a></span><span class="t"> <span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2455" href="#t2455">2455</a></span><span class="t"> <span class="str">'--markers={{ }} {{end}}'</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2456" href="#t2456">2456</a></span><span class="t"> <span class="str">'test.cog'</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2457" href="#t2457">2457</a></span><span class="t"> <span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2458" href="#t2458">2458</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'test.cog'</span><span class="op">,</span> <span class="str">'test.out'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2459" href="#t2459">2459</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t2460" href="#t2460">2460</a></span><span class="t"> <span class="key">def</span> <span class="nam">testTrulyWackyMarkers</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2461" href="#t2461">2461</a></span><span class="t"> <span class="com"># Make sure the markers are properly re-escaped.</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2462" href="#t2462">2462</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2463" href="#t2463">2463</a></span><span class="t"> <span class="str">'test.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2464" href="#t2464">2464</a></span><span class="t"><span class="str"> //**(</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2465" href="#t2465">2465</a></span><span class="t"><span class="str"> cog.outl("void %s();" % "MyFunction")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2466" href="#t2466">2466</a></span><span class="t"><span class="str"> //**)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2467" href="#t2467">2467</a></span><span class="t"><span class="str"> //**(end)**</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2468" href="#t2468">2468</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t2469" href="#t2469">2469</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t2470" href="#t2470">2470</a></span><span class="t"> <span class="key">def</span> <span class="nam">testTrulyWackyMarkers</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2471" href="#t2471">2471</a></span><span class="t"> <span class="com"># Make sure the markers are properly re-escaped.</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2472" href="#t2472">2472</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2473" href="#t2473">2473</a></span><span class="t"> <span class="str">'test.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2474" href="#t2474">2474</a></span><span class="t"><span class="str"> //**(</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2475" href="#t2475">2475</a></span><span class="t"><span class="str"> cog.outl("void %s();" % "MyFunction")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2476" href="#t2476">2476</a></span><span class="t"><span class="str"> //**)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2477" href="#t2477">2477</a></span><span class="t"><span class="str"> //**(end)**</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2478" href="#t2478">2478</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2479" href="#t2479">2479</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2480" href="#t2480">2480</a></span><span class="t"> <span class="str">'test.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2481" href="#t2481">2481</a></span><span class="t"><span class="str"> //**(</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2482" href="#t2482">2482</a></span><span class="t"><span class="str"> cog.outl("void %s();" % "MyFunction")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2483" href="#t2483">2483</a></span><span class="t"><span class="str"> //**)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2484" href="#t2484">2484</a></span><span class="t"><span class="str"> void MyFunction();</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2485" href="#t2485">2485</a></span><span class="t"><span class="str"> //**(end)**</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2486" href="#t2486">2486</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2487" href="#t2487">2487</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2488" href="#t2488">2488</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2489" href="#t2489">2489</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2490" href="#t2490">2490</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2491" href="#t2491">2491</a></span><span class="t"> <span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2492" href="#t2492">2492</a></span><span class="t"> <span class="str">'--markers=**( **) **(end)**'</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2493" href="#t2493">2493</a></span><span class="t"> <span class="str">'test.cog'</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2494" href="#t2494">2494</a></span><span class="t"> <span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2495" href="#t2495">2495</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'test.cog'</span><span class="op">,</span> <span class="str">'test.out'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2496" href="#t2496">2496</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t2497" href="#t2497">2497</a></span><span class="t"> <span class="key">def</span> <span class="nam">testChangeJustOneMarker</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2498" href="#t2498">2498</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2499" href="#t2499">2499</a></span><span class="t"> <span class="str">'test.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2500" href="#t2500">2500</a></span><span class="t"><span class="str"> //**(</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2501" href="#t2501">2501</a></span><span class="t"><span class="str"> cog.outl("void %s();" % "MyFunction")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2502" href="#t2502">2502</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2503" href="#t2503">2503</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2504" href="#t2504">2504</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2505" href="#t2505">2505</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2506" href="#t2506">2506</a></span><span class="t"> <span class="str">'test.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2507" href="#t2507">2507</a></span><span class="t"><span class="str"> //**(</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2508" href="#t2508">2508</a></span><span class="t"><span class="str"> cog.outl("void %s();" % "MyFunction")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2509" href="#t2509">2509</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2510" href="#t2510">2510</a></span><span class="t"><span class="str"> void MyFunction();</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2511" href="#t2511">2511</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2512" href="#t2512">2512</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2513" href="#t2513">2513</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2514" href="#t2514">2514</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2515" href="#t2515">2515</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2516" href="#t2516">2516</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2517" href="#t2517">2517</a></span><span class="t"> <span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2518" href="#t2518">2518</a></span><span class="t"> <span class="str">'--markers=**( ]]] [[[end]]]'</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2519" href="#t2519">2519</a></span><span class="t"> <span class="str">'test.cog'</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2520" href="#t2520">2520</a></span><span class="t"> <span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2521" href="#t2521">2521</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'test.cog'</span><span class="op">,</span> <span class="str">'test.out'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2522" href="#t2522">2522</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2523" href="#t2523">2523</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t2524" href="#t2524">2524</a></span><span class="t"><span class="key">class</span> <span class="nam">BlakeTests</span><span class="op">(</span><span class="nam">TestCaseWithTempDir</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2525" href="#t2525">2525</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2526" href="#t2526">2526</a></span><span class="t"> <span class="com"># Blake Winton's contributions.</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t2527" href="#t2527">2527</a></span><span class="t"> <span class="key">def</span> <span class="nam">testDeleteCode</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2528" href="#t2528">2528</a></span><span class="t"> <span class="com"># -o sets the output file.</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2529" href="#t2529">2529</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2530" href="#t2530">2530</a></span><span class="t"> <span class="str">'test.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2531" href="#t2531">2531</a></span><span class="t"><span class="str"> // This is my C++ file.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2532" href="#t2532">2532</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2533" href="#t2533">2533</a></span><span class="t"><span class="str"> fnames = ['DoSomething', 'DoAnotherThing', 'DoLastThing']</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2534" href="#t2534">2534</a></span><span class="t"><span class="str"> for fn in fnames:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2535" href="#t2535">2535</a></span><span class="t"><span class="str"> cog.outl("void %s();" % fn)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2536" href="#t2536">2536</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2537" href="#t2537">2537</a></span><span class="t"><span class="str"> Some Sample Code Here</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2538" href="#t2538">2538</a></span><span class="t"><span class="str"> //[[[end]]]Data Data</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2539" href="#t2539">2539</a></span><span class="t"><span class="str"> And Some More</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2540" href="#t2540">2540</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2541" href="#t2541">2541</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2542" href="#t2542">2542</a></span><span class="t"> <span class="str">'test.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2543" href="#t2543">2543</a></span><span class="t"><span class="str"> // This is my C++ file.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2544" href="#t2544">2544</a></span><span class="t"><span class="str"> void DoSomething();</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2545" href="#t2545">2545</a></span><span class="t"><span class="str"> void DoAnotherThing();</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2546" href="#t2546">2546</a></span><span class="t"><span class="str"> void DoLastThing();</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2547" href="#t2547">2547</a></span><span class="t"><span class="str"> And Some More</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2548" href="#t2548">2548</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2549" href="#t2549">2549</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2550" href="#t2550">2550</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2551" href="#t2551">2551</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2552" href="#t2552">2552</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-d'</span><span class="op">,</span> <span class="str">'-o'</span><span class="op">,</span> <span class="str">'test.cogged'</span><span class="op">,</span> <span class="str">'test.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2553" href="#t2553">2553</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'test.cogged'</span><span class="op">,</span> <span class="str">'test.out'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2554" href="#t2554">2554</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t2555" href="#t2555">2555</a></span><span class="t"> <span class="key">def</span> <span class="nam">testDeleteCodeWithDashRFails</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2556" href="#t2556">2556</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2557" href="#t2557">2557</a></span><span class="t"> <span class="str">'test.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2558" href="#t2558">2558</a></span><span class="t"><span class="str"> // This is my C++ file.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2559" href="#t2559">2559</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2560" href="#t2560">2560</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2561" href="#t2561">2561</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2562" href="#t2562">2562</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2563" href="#t2563">2563</a></span><span class="t"> <span class="key">with</span> <span class="nam">self</span><span class="op">.</span><span class="nam">assertRaisesRegex</span><span class="op">(</span><span class="nam">CogUsageError</span><span class="op">,</span> <span class="str">r"^Can't use -d with -r \(or you would delete all your source!\)$"</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2564" href="#t2564">2564</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'-d'</span><span class="op">,</span> <span class="str">'test.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2565" href="#t2565">2565</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t2566" href="#t2566">2566</a></span><span class="t"> <span class="key">def</span> <span class="nam">testSettingGlobals</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2567" href="#t2567">2567</a></span><span class="t"> <span class="com"># Blake Winton contributed a way to set the globals that will be used in</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2568" href="#t2568">2568</a></span><span class="t"> <span class="com"># processFile().</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2569" href="#t2569">2569</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2570" href="#t2570">2570</a></span><span class="t"> <span class="str">'test.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2571" href="#t2571">2571</a></span><span class="t"><span class="str"> // This is my C++ file.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2572" href="#t2572">2572</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2573" href="#t2573">2573</a></span><span class="t"><span class="str"> for fn in fnames:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2574" href="#t2574">2574</a></span><span class="t"><span class="str"> cog.outl("void %s();" % fn)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2575" href="#t2575">2575</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2576" href="#t2576">2576</a></span><span class="t"><span class="str"> Some Sample Code Here</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2577" href="#t2577">2577</a></span><span class="t"><span class="str"> //[[[end]]]"""</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2578" href="#t2578">2578</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2579" href="#t2579">2579</a></span><span class="t"> <span class="str">'test.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2580" href="#t2580">2580</a></span><span class="t"><span class="str"> // This is my C++ file.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2581" href="#t2581">2581</a></span><span class="t"><span class="str"> void DoBlake();</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2582" href="#t2582">2582</a></span><span class="t"><span class="str"> void DoWinton();</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2583" href="#t2583">2583</a></span><span class="t"><span class="str"> void DoContribution();</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2584" href="#t2584">2584</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2585" href="#t2585">2585</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2470" href="#t2470">2470</a></span><span class="t"> <span class="str">'test.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2471" href="#t2471">2471</a></span><span class="t"><span class="str"> //**(</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2472" href="#t2472">2472</a></span><span class="t"><span class="str"> cog.outl("void %s();" % "MyFunction")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2473" href="#t2473">2473</a></span><span class="t"><span class="str"> //**)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2474" href="#t2474">2474</a></span><span class="t"><span class="str"> void MyFunction();</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2475" href="#t2475">2475</a></span><span class="t"><span class="str"> //**(end)**</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2476" href="#t2476">2476</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2477" href="#t2477">2477</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2478" href="#t2478">2478</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2479" href="#t2479">2479</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2480" href="#t2480">2480</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2481" href="#t2481">2481</a></span><span class="t"> <span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2482" href="#t2482">2482</a></span><span class="t"> <span class="str">'--markers=**( **) **(end)**'</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2483" href="#t2483">2483</a></span><span class="t"> <span class="str">'test.cog'</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2484" href="#t2484">2484</a></span><span class="t"> <span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2485" href="#t2485">2485</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'test.cog'</span><span class="op">,</span> <span class="str">'test.out'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2486" href="#t2486">2486</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t2487" href="#t2487">2487</a></span><span class="t"> <span class="key">def</span> <span class="nam">testChangeJustOneMarker</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2488" href="#t2488">2488</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2489" href="#t2489">2489</a></span><span class="t"> <span class="str">'test.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2490" href="#t2490">2490</a></span><span class="t"><span class="str"> //**(</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2491" href="#t2491">2491</a></span><span class="t"><span class="str"> cog.outl("void %s();" % "MyFunction")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2492" href="#t2492">2492</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2493" href="#t2493">2493</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2494" href="#t2494">2494</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2495" href="#t2495">2495</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2496" href="#t2496">2496</a></span><span class="t"> <span class="str">'test.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2497" href="#t2497">2497</a></span><span class="t"><span class="str"> //**(</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2498" href="#t2498">2498</a></span><span class="t"><span class="str"> cog.outl("void %s();" % "MyFunction")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2499" href="#t2499">2499</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2500" href="#t2500">2500</a></span><span class="t"><span class="str"> void MyFunction();</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2501" href="#t2501">2501</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2502" href="#t2502">2502</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2503" href="#t2503">2503</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2504" href="#t2504">2504</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2505" href="#t2505">2505</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2506" href="#t2506">2506</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2507" href="#t2507">2507</a></span><span class="t"> <span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2508" href="#t2508">2508</a></span><span class="t"> <span class="str">'--markers=**( ]]] [[[end]]]'</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2509" href="#t2509">2509</a></span><span class="t"> <span class="str">'test.cog'</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2510" href="#t2510">2510</a></span><span class="t"> <span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2511" href="#t2511">2511</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'test.cog'</span><span class="op">,</span> <span class="str">'test.out'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2512" href="#t2512">2512</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2513" href="#t2513">2513</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t2514" href="#t2514">2514</a></span><span class="t"><span class="key">class</span> <span class="nam">BlakeTests</span><span class="op">(</span><span class="nam">TestCaseWithTempDir</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2515" href="#t2515">2515</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2516" href="#t2516">2516</a></span><span class="t"> <span class="com"># Blake Winton's contributions.</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t2517" href="#t2517">2517</a></span><span class="t"> <span class="key">def</span> <span class="nam">testDeleteCode</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2518" href="#t2518">2518</a></span><span class="t"> <span class="com"># -o sets the output file.</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2519" href="#t2519">2519</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2520" href="#t2520">2520</a></span><span class="t"> <span class="str">'test.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2521" href="#t2521">2521</a></span><span class="t"><span class="str"> // This is my C++ file.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2522" href="#t2522">2522</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2523" href="#t2523">2523</a></span><span class="t"><span class="str"> fnames = ['DoSomething', 'DoAnotherThing', 'DoLastThing']</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2524" href="#t2524">2524</a></span><span class="t"><span class="str"> for fn in fnames:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2525" href="#t2525">2525</a></span><span class="t"><span class="str"> cog.outl("void %s();" % fn)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2526" href="#t2526">2526</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2527" href="#t2527">2527</a></span><span class="t"><span class="str"> Some Sample Code Here</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2528" href="#t2528">2528</a></span><span class="t"><span class="str"> //[[[end]]]Data Data</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2529" href="#t2529">2529</a></span><span class="t"><span class="str"> And Some More</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2530" href="#t2530">2530</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2531" href="#t2531">2531</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2532" href="#t2532">2532</a></span><span class="t"> <span class="str">'test.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2533" href="#t2533">2533</a></span><span class="t"><span class="str"> // This is my C++ file.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2534" href="#t2534">2534</a></span><span class="t"><span class="str"> void DoSomething();</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2535" href="#t2535">2535</a></span><span class="t"><span class="str"> void DoAnotherThing();</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2536" href="#t2536">2536</a></span><span class="t"><span class="str"> void DoLastThing();</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2537" href="#t2537">2537</a></span><span class="t"><span class="str"> And Some More</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2538" href="#t2538">2538</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2539" href="#t2539">2539</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2540" href="#t2540">2540</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2541" href="#t2541">2541</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2542" href="#t2542">2542</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-d'</span><span class="op">,</span> <span class="str">'-o'</span><span class="op">,</span> <span class="str">'test.cogged'</span><span class="op">,</span> <span class="str">'test.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2543" href="#t2543">2543</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'test.cogged'</span><span class="op">,</span> <span class="str">'test.out'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2544" href="#t2544">2544</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t2545" href="#t2545">2545</a></span><span class="t"> <span class="key">def</span> <span class="nam">testDeleteCodeWithDashRFails</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2546" href="#t2546">2546</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2547" href="#t2547">2547</a></span><span class="t"> <span class="str">'test.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2548" href="#t2548">2548</a></span><span class="t"><span class="str"> // This is my C++ file.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2549" href="#t2549">2549</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2550" href="#t2550">2550</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2551" href="#t2551">2551</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2552" href="#t2552">2552</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2553" href="#t2553">2553</a></span><span class="t"> <span class="key">with</span> <span class="nam">self</span><span class="op">.</span><span class="nam">assertRaisesRegex</span><span class="op">(</span><span class="nam">CogUsageError</span><span class="op">,</span> <span class="str">r"^Can't use -d with -r \(or you would delete all your source!\)$"</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2554" href="#t2554">2554</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">callableMain</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'-d'</span><span class="op">,</span> <span class="str">'test.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2555" href="#t2555">2555</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t2556" href="#t2556">2556</a></span><span class="t"> <span class="key">def</span> <span class="nam">testSettingGlobals</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2557" href="#t2557">2557</a></span><span class="t"> <span class="com"># Blake Winton contributed a way to set the globals that will be used in</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2558" href="#t2558">2558</a></span><span class="t"> <span class="com"># processFile().</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2559" href="#t2559">2559</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2560" href="#t2560">2560</a></span><span class="t"> <span class="str">'test.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2561" href="#t2561">2561</a></span><span class="t"><span class="str"> // This is my C++ file.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2562" href="#t2562">2562</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2563" href="#t2563">2563</a></span><span class="t"><span class="str"> for fn in fnames:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2564" href="#t2564">2564</a></span><span class="t"><span class="str"> cog.outl("void %s();" % fn)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2565" href="#t2565">2565</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2566" href="#t2566">2566</a></span><span class="t"><span class="str"> Some Sample Code Here</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2567" href="#t2567">2567</a></span><span class="t"><span class="str"> //[[[end]]]"""</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2568" href="#t2568">2568</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2569" href="#t2569">2569</a></span><span class="t"> <span class="str">'test.out'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2570" href="#t2570">2570</a></span><span class="t"><span class="str"> // This is my C++ file.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2571" href="#t2571">2571</a></span><span class="t"><span class="str"> void DoBlake();</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2572" href="#t2572">2572</a></span><span class="t"><span class="str"> void DoWinton();</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2573" href="#t2573">2573</a></span><span class="t"><span class="str"> void DoContribution();</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2574" href="#t2574">2574</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2575" href="#t2575">2575</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2576" href="#t2576">2576</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2577" href="#t2577">2577</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2578" href="#t2578">2578</a></span><span class="t"> <span class="nam">globals</span> <span class="op">=</span> <span class="op">{</span><span class="op">}</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2579" href="#t2579">2579</a></span><span class="t"> <span class="nam">globals</span><span class="op">[</span><span class="str">'fnames'</span><span class="op">]</span> <span class="op">=</span> <span class="op">[</span><span class="str">'DoBlake'</span><span class="op">,</span> <span class="str">'DoWinton'</span><span class="op">,</span> <span class="str">'DoContribution'</span><span class="op">]</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2580" href="#t2580">2580</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">bDeleteCode</span> <span class="op">=</span> <span class="key">True</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2581" href="#t2581">2581</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">processFile</span><span class="op">(</span><span class="str">'test.cog'</span><span class="op">,</span> <span class="str">'test.cogged'</span><span class="op">,</span> <span class="nam">globals</span><span class="op">=</span><span class="nam">globals</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2582" href="#t2582">2582</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'test.cogged'</span><span class="op">,</span> <span class="str">'test.out'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2583" href="#t2583">2583</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2584" href="#t2584">2584</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t2585" href="#t2585">2585</a></span><span class="t"><span class="key">class</span> <span class="nam">ErrorCallTests</span><span class="op">(</span><span class="nam">TestCaseWithTempDir</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t2586" href="#t2586">2586</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2587" href="#t2587">2587</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2588" href="#t2588">2588</a></span><span class="t"> <span class="nam">globals</span> <span class="op">=</span> <span class="op">{</span><span class="op">}</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2589" href="#t2589">2589</a></span><span class="t"> <span class="nam">globals</span><span class="op">[</span><span class="str">'fnames'</span><span class="op">]</span> <span class="op">=</span> <span class="op">[</span><span class="str">'DoBlake'</span><span class="op">,</span> <span class="str">'DoWinton'</span><span class="op">,</span> <span class="str">'DoContribution'</span><span class="op">]</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2590" href="#t2590">2590</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">options</span><span class="op">.</span><span class="nam">bDeleteCode</span> <span class="op">=</span> <span class="key">True</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2591" href="#t2591">2591</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">processFile</span><span class="op">(</span><span class="str">'test.cog'</span><span class="op">,</span> <span class="str">'test.cogged'</span><span class="op">,</span> <span class="nam">globals</span><span class="op">=</span><span class="nam">globals</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2592" href="#t2592">2592</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertFilesSame</span><span class="op">(</span><span class="str">'test.cogged'</span><span class="op">,</span> <span class="str">'test.out'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2593" href="#t2593">2593</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2594" href="#t2594">2594</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t2595" href="#t2595">2595</a></span><span class="t"><span class="key">class</span> <span class="nam">ErrorCallTests</span><span class="op">(</span><span class="nam">TestCaseWithTempDir</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2596" href="#t2596">2596</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t2597" href="#t2597">2597</a></span><span class="t"> <span class="key">def</span> <span class="nam">testErrorCallHasNoTraceback</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2598" href="#t2598">2598</a></span><span class="t"> <span class="com"># Test that cog.error() doesn't show a traceback.</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2599" href="#t2599">2599</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2600" href="#t2600">2600</a></span><span class="t"> <span class="str">'error.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2601" href="#t2601">2601</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2602" href="#t2602">2602</a></span><span class="t"><span class="str"> cog.error("Something Bad!")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2603" href="#t2603">2603</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2604" href="#t2604">2604</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2605" href="#t2605">2605</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2606" href="#t2606">2606</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2607" href="#t2607">2607</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2608" href="#t2608">2608</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2609" href="#t2609">2609</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">main</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'error.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2610" href="#t2610">2610</a></span><span class="t"> <span class="nam">output</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">output</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2611" href="#t2611">2611</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">output</span><span class="op">,</span> <span class="str">"Cogging error.cog\nError: Something Bad!\n"</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2612" href="#t2612">2612</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t2613" href="#t2613">2613</a></span><span class="t"> <span class="key">def</span> <span class="nam">testRealErrorHasTraceback</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2614" href="#t2614">2614</a></span><span class="t"> <span class="com"># Test that a genuine error does show a traceback.</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2615" href="#t2615">2615</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2616" href="#t2616">2616</a></span><span class="t"> <span class="str">'error.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2617" href="#t2617">2617</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2618" href="#t2618">2618</a></span><span class="t"><span class="str"> raise RuntimeError("Hey!")</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2619" href="#t2619">2619</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2620" href="#t2620">2620</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2621" href="#t2621">2621</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2622" href="#t2622">2622</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2623" href="#t2623">2623</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2624" href="#t2624">2624</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2625" href="#t2625">2625</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">main</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'error.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2626" href="#t2626">2626</a></span><span class="t"> <span class="nam">output</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">output</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2627" href="#t2627">2627</a></span><span class="t"> <span class="nam">msg</span> <span class="op">=</span> <span class="str">'Actual output:\n'</span> <span class="op">+</span> <span class="nam">output</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2628" href="#t2628">2628</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertTrue</span><span class="op">(</span><span class="nam">output</span><span class="op">.</span><span class="nam">startswith</span><span class="op">(</span><span class="str">"Cogging error.cog\nTraceback (most recent"</span><span class="op">)</span><span class="op">,</span> <span class="nam">msg</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t2629" href="#t2629">2629</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertIn</span><span class="op">(</span><span class="str">"RuntimeError: Hey!"</span><span class="op">,</span> <span class="nam">output</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2630" href="#t2630">2630</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2631" href="#t2631">2631</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2632" href="#t2632">2632</a></span><span class="t"><span class="com"># Things not yet tested:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2633" href="#t2633">2633</a></span><span class="t"><span class="com"># - A bad -w command (currently fails silently).</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t2587" href="#t2587">2587</a></span><span class="t"> <span class="key">def</span> <span class="nam">testErrorCallHasNoTraceback</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2588" href="#t2588">2588</a></span><span class="t"> <span class="com"># Test that cog.error() doesn't show a traceback.</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2589" href="#t2589">2589</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2590" href="#t2590">2590</a></span><span class="t"> <span class="str">'error.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2591" href="#t2591">2591</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2592" href="#t2592">2592</a></span><span class="t"><span class="str"> cog.error("Something Bad!")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2593" href="#t2593">2593</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2594" href="#t2594">2594</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2595" href="#t2595">2595</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2596" href="#t2596">2596</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2597" href="#t2597">2597</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2598" href="#t2598">2598</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2599" href="#t2599">2599</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">main</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'error.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2600" href="#t2600">2600</a></span><span class="t"> <span class="nam">output</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">output</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2601" href="#t2601">2601</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">output</span><span class="op">,</span> <span class="str">"Cogging error.cog\nError: Something Bad!\n"</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2602" href="#t2602">2602</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t2603" href="#t2603">2603</a></span><span class="t"> <span class="key">def</span> <span class="nam">testRealErrorHasTraceback</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2604" href="#t2604">2604</a></span><span class="t"> <span class="com"># Test that a genuine error does show a traceback.</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2605" href="#t2605">2605</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2606" href="#t2606">2606</a></span><span class="t"> <span class="str">'error.cog'</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2607" href="#t2607">2607</a></span><span class="t"><span class="str"> //[[[cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2608" href="#t2608">2608</a></span><span class="t"><span class="str"> raise RuntimeError("Hey!")</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2609" href="#t2609">2609</a></span><span class="t"><span class="str"> //]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2610" href="#t2610">2610</a></span><span class="t"><span class="str"> //[[[end]]]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2611" href="#t2611">2611</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2612" href="#t2612">2612</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2613" href="#t2613">2613</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2614" href="#t2614">2614</a></span><span class="t"> <span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2615" href="#t2615">2615</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">cog</span><span class="op">.</span><span class="nam">main</span><span class="op">(</span><span class="op">[</span><span class="str">'argv0'</span><span class="op">,</span> <span class="str">'-r'</span><span class="op">,</span> <span class="str">'error.cog'</span><span class="op">]</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2616" href="#t2616">2616</a></span><span class="t"> <span class="nam">output</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">output</span><span class="op">.</span><span class="nam">getvalue</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2617" href="#t2617">2617</a></span><span class="t"> <span class="nam">msg</span> <span class="op">=</span> <span class="str">'Actual output:\n'</span> <span class="op">+</span> <span class="nam">output</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2618" href="#t2618">2618</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertTrue</span><span class="op">(</span><span class="nam">output</span><span class="op">.</span><span class="nam">startswith</span><span class="op">(</span><span class="str">"Cogging error.cog\nTraceback (most recent"</span><span class="op">)</span><span class="op">,</span> <span class="nam">msg</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t2619" href="#t2619">2619</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertIn</span><span class="op">(</span><span class="str">"RuntimeError: Hey!"</span><span class="op">,</span> <span class="nam">output</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2620" href="#t2620">2620</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2621" href="#t2621">2621</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2622" href="#t2622">2622</a></span><span class="t"><span class="com"># Things not yet tested:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2623" href="#t2623">2623</a></span><span class="t"><span class="com"># - A bad -w command (currently fails silently).</span> </span><span class="r"></span></p> </main> <footer> <div class="content"> @@ -2723,8 +2713,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80_test_makefiles_py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.1.0</a>, - created at 2023-01-24 19:37 -0500 + <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.2.0</a>, + created at 2023-02-22 18:50 -0500 </p> </div> </footer> diff --git a/doc/sample_html/d_7b071bdc2a35fa80_test_makefiles_py.html b/doc/sample_html/d_7b071bdc2a35fa80_test_makefiles_py.html index daa0f0eb0..d9534787c 100644 --- a/doc/sample_html/d_7b071bdc2a35fa80_test_makefiles_py.html +++ b/doc/sample_html/d_7b071bdc2a35fa80_test_makefiles_py.html @@ -2,7 +2,7 @@ <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> - <title>Coverage for cogapp/test_makefiles.py: 23.38%</title> + <title>Coverage for cogapp/test_makefiles.py: 22.37%</title> <link rel="icon" sizes="32x32" href="favicon_32.png"> <link rel="stylesheet" href="style.css" type="text/css"> <script type="text/javascript" src="coverage_html.js" defer></script> @@ -12,7 +12,7 @@ <div class="content"> <h1> <span class="text">Coverage for </span><b>cogapp/test_makefiles.py</b>: - <span class="pc_cov">23.38%</span> + <span class="pc_cov">22.37%</span> </h1> <aside id="help_panel_wrapper"> <input id="help_panel_state" type="checkbox"> @@ -55,8 +55,8 @@ <h1> </div> </aside> <h2> - <span class="text">71 statements </span> - <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">18<span class="text"> run</span></button> + <span class="text">70 statements </span> + <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">17<span class="text"> run</span></button> <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">53<span class="text"> missing</span></button> <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">0<span class="text"> excluded</span></button> <button type="button" class="par run show_par button_toggle_par" value="par" data-shortcut="p" title="Toggle lines partially run">0<span class="text"> partial</span></button> @@ -66,8 +66,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80_test_whiteutils_py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.1.0</a>, - created at 2023-01-24 19:37 -0500 + <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.2.0</a>, + created at 2023-02-22 18:50 -0500 </p> <aside class="hidden"> <button type="button" class="button_next_chunk" data-shortcut="j"/> @@ -83,127 +83,122 @@ <h2> </header> <main id="source"> <p class="pln"><span class="n"><a id="t1" href="#t1">1</a></span><span class="t"><span class="str">""" Test the cogapp.makefiles modules</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2" href="#t2">2</a></span><span class="t"><span class="str"> http://nedbatchelder.com/code/cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2" href="#t2">2</a></span><span class="t"><span class="str">"""</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t3" href="#t3">3</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t4" href="#t4">4</a></span><span class="t"><span class="str"> Copyright 2004-2019, Ned Batchelder.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t5" href="#t5">5</a></span><span class="t"><span class="str">"""</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t6" href="#t6">6</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t7" href="#t7">7</a></span><span class="t"><span class="key">from</span> <span class="nam">__future__</span> <span class="key">import</span> <span class="nam">absolute_import</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t8" href="#t8">8</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t9" href="#t9">9</a></span><span class="t"><span class="key">import</span> <span class="nam">shutil</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t10" href="#t10">10</a></span><span class="t"><span class="key">import</span> <span class="nam">os</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t11" href="#t11">11</a></span><span class="t"><span class="key">import</span> <span class="nam">random</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t12" href="#t12">12</a></span><span class="t"><span class="key">import</span> <span class="nam">tempfile</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t13" href="#t13">13</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t14" href="#t14">14</a></span><span class="t"><span class="key">from</span> <span class="op">.</span> <span class="key">import</span> <span class="nam">makefiles</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t15" href="#t15">15</a></span><span class="t"><span class="key">from</span> <span class="op">.</span><span class="nam">backward</span> <span class="key">import</span> <span class="nam">TestCase</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t16" href="#t16">16</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t17" href="#t17">17</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t18" href="#t18">18</a></span><span class="t"><span class="key">class</span> <span class="nam">SimpleTests</span><span class="op">(</span><span class="nam">TestCase</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t19" href="#t19">19</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t20" href="#t20">20</a></span><span class="t"> <span class="key">def</span> <span class="nam">setUp</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t21" href="#t21">21</a></span><span class="t"> <span class="com"># Create a temporary directory.</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t22" href="#t22">22</a></span><span class="t"> <span class="nam">my_dir</span> <span class="op">=</span> <span class="str">'testmakefiles_tempdir_'</span> <span class="op">+</span> <span class="nam">str</span><span class="op">(</span><span class="nam">random</span><span class="op">.</span><span class="nam">random</span><span class="op">(</span><span class="op">)</span><span class="op">)</span><span class="op">[</span><span class="num">2</span><span class="op">:</span><span class="op">]</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t23" href="#t23">23</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span> <span class="op">=</span> <span class="nam">os</span><span class="op">.</span><span class="nam">path</span><span class="op">.</span><span class="nam">join</span><span class="op">(</span><span class="nam">tempfile</span><span class="op">.</span><span class="nam">gettempdir</span><span class="op">(</span><span class="op">)</span><span class="op">,</span> <span class="nam">my_dir</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t24" href="#t24">24</a></span><span class="t"> <span class="nam">os</span><span class="op">.</span><span class="nam">mkdir</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t25" href="#t25">25</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t26" href="#t26">26</a></span><span class="t"> <span class="key">def</span> <span class="nam">tearDown</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t27" href="#t27">27</a></span><span class="t"> <span class="com"># Get rid of the temporary directory.</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t28" href="#t28">28</a></span><span class="t"> <span class="nam">shutil</span><span class="op">.</span><span class="nam">rmtree</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t29" href="#t29">29</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t30" href="#t30">30</a></span><span class="t"> <span class="key">def</span> <span class="nam">exists</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">dname</span><span class="op">,</span> <span class="nam">fname</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t31" href="#t31">31</a></span><span class="t"> <span class="key">return</span> <span class="nam">os</span><span class="op">.</span><span class="nam">path</span><span class="op">.</span><span class="nam">exists</span><span class="op">(</span><span class="nam">os</span><span class="op">.</span><span class="nam">path</span><span class="op">.</span><span class="nam">join</span><span class="op">(</span><span class="nam">dname</span><span class="op">,</span> <span class="nam">fname</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t32" href="#t32">32</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t33" href="#t33">33</a></span><span class="t"> <span class="key">def</span> <span class="nam">checkFilesExist</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">d</span><span class="op">,</span> <span class="nam">dname</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t34" href="#t34">34</a></span><span class="t"> <span class="key">for</span> <span class="nam">fname</span> <span class="key">in</span> <span class="nam">d</span><span class="op">.</span><span class="nam">keys</span><span class="op">(</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t35" href="#t35">35</a></span><span class="t"> <span class="key">assert</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">exists</span><span class="op">(</span><span class="nam">dname</span><span class="op">,</span> <span class="nam">fname</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t36" href="#t36">36</a></span><span class="t"> <span class="key">if</span> <span class="nam">type</span><span class="op">(</span><span class="nam">d</span><span class="op">[</span><span class="nam">fname</span><span class="op">]</span><span class="op">)</span> <span class="op">==</span> <span class="nam">type</span><span class="op">(</span><span class="op">{</span><span class="op">}</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t37" href="#t37">37</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">checkFilesExist</span><span class="op">(</span><span class="nam">d</span><span class="op">[</span><span class="nam">fname</span><span class="op">]</span><span class="op">,</span> <span class="nam">os</span><span class="op">.</span><span class="nam">path</span><span class="op">.</span><span class="nam">join</span><span class="op">(</span><span class="nam">dname</span><span class="op">,</span> <span class="nam">fname</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t38" href="#t38">38</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t39" href="#t39">39</a></span><span class="t"> <span class="key">def</span> <span class="nam">checkFilesDontExist</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">d</span><span class="op">,</span> <span class="nam">dname</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t40" href="#t40">40</a></span><span class="t"> <span class="key">for</span> <span class="nam">fname</span> <span class="key">in</span> <span class="nam">d</span><span class="op">.</span><span class="nam">keys</span><span class="op">(</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t41" href="#t41">41</a></span><span class="t"> <span class="key">assert</span><span class="op">(</span><span class="key">not</span> <span class="nam">self</span><span class="op">.</span><span class="nam">exists</span><span class="op">(</span><span class="nam">dname</span><span class="op">,</span> <span class="nam">fname</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t42" href="#t42">42</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t43" href="#t43">43</a></span><span class="t"> <span class="key">def</span> <span class="nam">testOneFile</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t44" href="#t44">44</a></span><span class="t"> <span class="nam">fname</span> <span class="op">=</span> <span class="str">'foo.txt'</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t45" href="#t45">45</a></span><span class="t"> <span class="nam">notfname</span> <span class="op">=</span> <span class="str">'not_here.txt'</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t46" href="#t46">46</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> <span class="nam">fname</span><span class="op">:</span> <span class="str">"howdy"</span> <span class="op">}</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t47" href="#t47">47</a></span><span class="t"> <span class="key">assert</span><span class="op">(</span><span class="key">not</span> <span class="nam">self</span><span class="op">.</span><span class="nam">exists</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">,</span> <span class="nam">fname</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t48" href="#t48">48</a></span><span class="t"> <span class="key">assert</span><span class="op">(</span><span class="key">not</span> <span class="nam">self</span><span class="op">.</span><span class="nam">exists</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">,</span> <span class="nam">notfname</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t49" href="#t49">49</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t50" href="#t50">50</a></span><span class="t"> <span class="nam">makefiles</span><span class="op">.</span><span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t51" href="#t51">51</a></span><span class="t"> <span class="key">assert</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">exists</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">,</span> <span class="nam">fname</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t52" href="#t52">52</a></span><span class="t"> <span class="key">assert</span><span class="op">(</span><span class="key">not</span> <span class="nam">self</span><span class="op">.</span><span class="nam">exists</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">,</span> <span class="nam">notfname</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t53" href="#t53">53</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t54" href="#t54">54</a></span><span class="t"> <span class="nam">makefiles</span><span class="op">.</span><span class="nam">removeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t55" href="#t55">55</a></span><span class="t"> <span class="key">assert</span><span class="op">(</span><span class="key">not</span> <span class="nam">self</span><span class="op">.</span><span class="nam">exists</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">,</span> <span class="nam">fname</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t56" href="#t56">56</a></span><span class="t"> <span class="key">assert</span><span class="op">(</span><span class="key">not</span> <span class="nam">self</span><span class="op">.</span><span class="nam">exists</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">,</span> <span class="nam">notfname</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t57" href="#t57">57</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t58" href="#t58">58</a></span><span class="t"> <span class="key">def</span> <span class="nam">testManyFiles</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t59" href="#t59">59</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t60" href="#t60">60</a></span><span class="t"> <span class="str">'top1.txt'</span><span class="op">:</span> <span class="str">"howdy"</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t61" href="#t61">61</a></span><span class="t"> <span class="str">'top2.txt'</span><span class="op">:</span> <span class="str">"hello"</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t62" href="#t62">62</a></span><span class="t"> <span class="str">'sub'</span><span class="op">:</span> <span class="op">{</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t63" href="#t63">63</a></span><span class="t"> <span class="str">'sub1.txt'</span><span class="op">:</span> <span class="str">"inside"</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t64" href="#t64">64</a></span><span class="t"> <span class="str">'sub2.txt'</span><span class="op">:</span> <span class="str">"inside2"</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t65" href="#t65">65</a></span><span class="t"> <span class="op">}</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t66" href="#t66">66</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t67" href="#t67">67</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t68" href="#t68">68</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">checkFilesDontExist</span><span class="op">(</span><span class="nam">d</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t69" href="#t69">69</a></span><span class="t"> <span class="nam">makefiles</span><span class="op">.</span><span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t70" href="#t70">70</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">checkFilesExist</span><span class="op">(</span><span class="nam">d</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t71" href="#t71">71</a></span><span class="t"> <span class="nam">makefiles</span><span class="op">.</span><span class="nam">removeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t72" href="#t72">72</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">checkFilesDontExist</span><span class="op">(</span><span class="nam">d</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t73" href="#t73">73</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t74" href="#t74">74</a></span><span class="t"> <span class="key">def</span> <span class="nam">testOverlapping</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t75" href="#t75">75</a></span><span class="t"> <span class="nam">d1</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t76" href="#t76">76</a></span><span class="t"> <span class="str">'top1.txt'</span><span class="op">:</span> <span class="str">"howdy"</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t77" href="#t77">77</a></span><span class="t"> <span class="str">'sub'</span><span class="op">:</span> <span class="op">{</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t78" href="#t78">78</a></span><span class="t"> <span class="str">'sub1.txt'</span><span class="op">:</span> <span class="str">"inside"</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t79" href="#t79">79</a></span><span class="t"> <span class="op">}</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t80" href="#t80">80</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t81" href="#t81">81</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t82" href="#t82">82</a></span><span class="t"> <span class="nam">d2</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t83" href="#t83">83</a></span><span class="t"> <span class="str">'top2.txt'</span><span class="op">:</span> <span class="str">"hello"</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t84" href="#t84">84</a></span><span class="t"> <span class="str">'sub'</span><span class="op">:</span> <span class="op">{</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t85" href="#t85">85</a></span><span class="t"> <span class="str">'sub2.txt'</span><span class="op">:</span> <span class="str">"inside2"</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t86" href="#t86">86</a></span><span class="t"> <span class="op">}</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t87" href="#t87">87</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t88" href="#t88">88</a></span><span class="t"> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t89" href="#t89">89</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">checkFilesDontExist</span><span class="op">(</span><span class="nam">d1</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t90" href="#t90">90</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">checkFilesDontExist</span><span class="op">(</span><span class="nam">d2</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t91" href="#t91">91</a></span><span class="t"> <span class="nam">makefiles</span><span class="op">.</span><span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d1</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t92" href="#t92">92</a></span><span class="t"> <span class="nam">makefiles</span><span class="op">.</span><span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d2</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t93" href="#t93">93</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">checkFilesExist</span><span class="op">(</span><span class="nam">d1</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t94" href="#t94">94</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">checkFilesExist</span><span class="op">(</span><span class="nam">d2</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t95" href="#t95">95</a></span><span class="t"> <span class="nam">makefiles</span><span class="op">.</span><span class="nam">removeFiles</span><span class="op">(</span><span class="nam">d1</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t96" href="#t96">96</a></span><span class="t"> <span class="nam">makefiles</span><span class="op">.</span><span class="nam">removeFiles</span><span class="op">(</span><span class="nam">d2</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t97" href="#t97">97</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">checkFilesDontExist</span><span class="op">(</span><span class="nam">d1</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t98" href="#t98">98</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">checkFilesDontExist</span><span class="op">(</span><span class="nam">d2</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t99" href="#t99">99</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t100" href="#t100">100</a></span><span class="t"> <span class="key">def</span> <span class="nam">testContents</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t101" href="#t101">101</a></span><span class="t"> <span class="nam">fname</span> <span class="op">=</span> <span class="str">'bar.txt'</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t102" href="#t102">102</a></span><span class="t"> <span class="nam">cont0</span> <span class="op">=</span> <span class="str">"I am bar.txt"</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t103" href="#t103">103</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> <span class="nam">fname</span><span class="op">:</span> <span class="nam">cont0</span> <span class="op">}</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t104" href="#t104">104</a></span><span class="t"> <span class="nam">makefiles</span><span class="op">.</span><span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t105" href="#t105">105</a></span><span class="t"> <span class="nam">fcont1</span> <span class="op">=</span> <span class="nam">open</span><span class="op">(</span><span class="nam">os</span><span class="op">.</span><span class="nam">path</span><span class="op">.</span><span class="nam">join</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">,</span> <span class="nam">fname</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t106" href="#t106">106</a></span><span class="t"> <span class="key">assert</span><span class="op">(</span><span class="nam">fcont1</span><span class="op">.</span><span class="nam">read</span><span class="op">(</span><span class="op">)</span> <span class="op">==</span> <span class="nam">cont0</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t107" href="#t107">107</a></span><span class="t"> <span class="nam">fcont1</span><span class="op">.</span><span class="nam">close</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t108" href="#t108">108</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t109" href="#t109">109</a></span><span class="t"> <span class="key">def</span> <span class="nam">testDedent</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t110" href="#t110">110</a></span><span class="t"> <span class="nam">fname</span> <span class="op">=</span> <span class="str">'dedent.txt'</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t111" href="#t111">111</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t112" href="#t112">112</a></span><span class="t"> <span class="nam">fname</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t113" href="#t113">113</a></span><span class="t"><span class="str"> This is dedent.txt</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t114" href="#t114">114</a></span><span class="t"><span class="str"> \tTabbed in.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t115" href="#t115">115</a></span><span class="t"><span class="str"> spaced in.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t116" href="#t116">116</a></span><span class="t"><span class="str"> OK.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t117" href="#t117">117</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t118" href="#t118">118</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t119" href="#t119">119</a></span><span class="t"> <span class="nam">makefiles</span><span class="op">.</span><span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t120" href="#t120">120</a></span><span class="t"> <span class="nam">fcont</span> <span class="op">=</span> <span class="nam">open</span><span class="op">(</span><span class="nam">os</span><span class="op">.</span><span class="nam">path</span><span class="op">.</span><span class="nam">join</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">,</span> <span class="nam">fname</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t121" href="#t121">121</a></span><span class="t"> <span class="key">assert</span><span class="op">(</span><span class="nam">fcont</span><span class="op">.</span><span class="nam">read</span><span class="op">(</span><span class="op">)</span> <span class="op">==</span> <span class="str">"This is dedent.txt\n\tTabbed in.\n spaced in.\nOK.\n"</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t122" href="#t122">122</a></span><span class="t"> <span class="nam">fcont</span><span class="op">.</span><span class="nam">close</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t4" href="#t4">4</a></span><span class="t"><span class="key">import</span> <span class="nam">shutil</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t5" href="#t5">5</a></span><span class="t"><span class="key">import</span> <span class="nam">os</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t6" href="#t6">6</a></span><span class="t"><span class="key">import</span> <span class="nam">random</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t7" href="#t7">7</a></span><span class="t"><span class="key">import</span> <span class="nam">tempfile</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t8" href="#t8">8</a></span><span class="t"><span class="key">from</span> <span class="nam">unittest</span> <span class="key">import</span> <span class="nam">TestCase</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t9" href="#t9">9</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t10" href="#t10">10</a></span><span class="t"><span class="key">from</span> <span class="op">.</span> <span class="key">import</span> <span class="nam">makefiles</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t11" href="#t11">11</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t12" href="#t12">12</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t13" href="#t13">13</a></span><span class="t"><span class="key">class</span> <span class="nam">SimpleTests</span><span class="op">(</span><span class="nam">TestCase</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t14" href="#t14">14</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t15" href="#t15">15</a></span><span class="t"> <span class="key">def</span> <span class="nam">setUp</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t16" href="#t16">16</a></span><span class="t"> <span class="com"># Create a temporary directory.</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t17" href="#t17">17</a></span><span class="t"> <span class="nam">my_dir</span> <span class="op">=</span> <span class="str">'testmakefiles_tempdir_'</span> <span class="op">+</span> <span class="nam">str</span><span class="op">(</span><span class="nam">random</span><span class="op">.</span><span class="nam">random</span><span class="op">(</span><span class="op">)</span><span class="op">)</span><span class="op">[</span><span class="num">2</span><span class="op">:</span><span class="op">]</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t18" href="#t18">18</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span> <span class="op">=</span> <span class="nam">os</span><span class="op">.</span><span class="nam">path</span><span class="op">.</span><span class="nam">join</span><span class="op">(</span><span class="nam">tempfile</span><span class="op">.</span><span class="nam">gettempdir</span><span class="op">(</span><span class="op">)</span><span class="op">,</span> <span class="nam">my_dir</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t19" href="#t19">19</a></span><span class="t"> <span class="nam">os</span><span class="op">.</span><span class="nam">mkdir</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t20" href="#t20">20</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t21" href="#t21">21</a></span><span class="t"> <span class="key">def</span> <span class="nam">tearDown</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t22" href="#t22">22</a></span><span class="t"> <span class="com"># Get rid of the temporary directory.</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t23" href="#t23">23</a></span><span class="t"> <span class="nam">shutil</span><span class="op">.</span><span class="nam">rmtree</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t24" href="#t24">24</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t25" href="#t25">25</a></span><span class="t"> <span class="key">def</span> <span class="nam">exists</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">dname</span><span class="op">,</span> <span class="nam">fname</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t26" href="#t26">26</a></span><span class="t"> <span class="key">return</span> <span class="nam">os</span><span class="op">.</span><span class="nam">path</span><span class="op">.</span><span class="nam">exists</span><span class="op">(</span><span class="nam">os</span><span class="op">.</span><span class="nam">path</span><span class="op">.</span><span class="nam">join</span><span class="op">(</span><span class="nam">dname</span><span class="op">,</span> <span class="nam">fname</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t27" href="#t27">27</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t28" href="#t28">28</a></span><span class="t"> <span class="key">def</span> <span class="nam">checkFilesExist</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">d</span><span class="op">,</span> <span class="nam">dname</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t29" href="#t29">29</a></span><span class="t"> <span class="key">for</span> <span class="nam">fname</span> <span class="key">in</span> <span class="nam">d</span><span class="op">.</span><span class="nam">keys</span><span class="op">(</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t30" href="#t30">30</a></span><span class="t"> <span class="key">assert</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">exists</span><span class="op">(</span><span class="nam">dname</span><span class="op">,</span> <span class="nam">fname</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t31" href="#t31">31</a></span><span class="t"> <span class="key">if</span> <span class="nam">type</span><span class="op">(</span><span class="nam">d</span><span class="op">[</span><span class="nam">fname</span><span class="op">]</span><span class="op">)</span> <span class="op">==</span> <span class="nam">type</span><span class="op">(</span><span class="op">{</span><span class="op">}</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t32" href="#t32">32</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">checkFilesExist</span><span class="op">(</span><span class="nam">d</span><span class="op">[</span><span class="nam">fname</span><span class="op">]</span><span class="op">,</span> <span class="nam">os</span><span class="op">.</span><span class="nam">path</span><span class="op">.</span><span class="nam">join</span><span class="op">(</span><span class="nam">dname</span><span class="op">,</span> <span class="nam">fname</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t33" href="#t33">33</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t34" href="#t34">34</a></span><span class="t"> <span class="key">def</span> <span class="nam">checkFilesDontExist</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">d</span><span class="op">,</span> <span class="nam">dname</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t35" href="#t35">35</a></span><span class="t"> <span class="key">for</span> <span class="nam">fname</span> <span class="key">in</span> <span class="nam">d</span><span class="op">.</span><span class="nam">keys</span><span class="op">(</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t36" href="#t36">36</a></span><span class="t"> <span class="key">assert</span><span class="op">(</span><span class="key">not</span> <span class="nam">self</span><span class="op">.</span><span class="nam">exists</span><span class="op">(</span><span class="nam">dname</span><span class="op">,</span> <span class="nam">fname</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t37" href="#t37">37</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t38" href="#t38">38</a></span><span class="t"> <span class="key">def</span> <span class="nam">testOneFile</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t39" href="#t39">39</a></span><span class="t"> <span class="nam">fname</span> <span class="op">=</span> <span class="str">'foo.txt'</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t40" href="#t40">40</a></span><span class="t"> <span class="nam">notfname</span> <span class="op">=</span> <span class="str">'not_here.txt'</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t41" href="#t41">41</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> <span class="nam">fname</span><span class="op">:</span> <span class="str">"howdy"</span> <span class="op">}</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t42" href="#t42">42</a></span><span class="t"> <span class="key">assert</span><span class="op">(</span><span class="key">not</span> <span class="nam">self</span><span class="op">.</span><span class="nam">exists</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">,</span> <span class="nam">fname</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t43" href="#t43">43</a></span><span class="t"> <span class="key">assert</span><span class="op">(</span><span class="key">not</span> <span class="nam">self</span><span class="op">.</span><span class="nam">exists</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">,</span> <span class="nam">notfname</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t44" href="#t44">44</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t45" href="#t45">45</a></span><span class="t"> <span class="nam">makefiles</span><span class="op">.</span><span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t46" href="#t46">46</a></span><span class="t"> <span class="key">assert</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">exists</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">,</span> <span class="nam">fname</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t47" href="#t47">47</a></span><span class="t"> <span class="key">assert</span><span class="op">(</span><span class="key">not</span> <span class="nam">self</span><span class="op">.</span><span class="nam">exists</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">,</span> <span class="nam">notfname</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t48" href="#t48">48</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t49" href="#t49">49</a></span><span class="t"> <span class="nam">makefiles</span><span class="op">.</span><span class="nam">removeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t50" href="#t50">50</a></span><span class="t"> <span class="key">assert</span><span class="op">(</span><span class="key">not</span> <span class="nam">self</span><span class="op">.</span><span class="nam">exists</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">,</span> <span class="nam">fname</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t51" href="#t51">51</a></span><span class="t"> <span class="key">assert</span><span class="op">(</span><span class="key">not</span> <span class="nam">self</span><span class="op">.</span><span class="nam">exists</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">,</span> <span class="nam">notfname</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t52" href="#t52">52</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t53" href="#t53">53</a></span><span class="t"> <span class="key">def</span> <span class="nam">testManyFiles</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t54" href="#t54">54</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t55" href="#t55">55</a></span><span class="t"> <span class="str">'top1.txt'</span><span class="op">:</span> <span class="str">"howdy"</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t56" href="#t56">56</a></span><span class="t"> <span class="str">'top2.txt'</span><span class="op">:</span> <span class="str">"hello"</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t57" href="#t57">57</a></span><span class="t"> <span class="str">'sub'</span><span class="op">:</span> <span class="op">{</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t58" href="#t58">58</a></span><span class="t"> <span class="str">'sub1.txt'</span><span class="op">:</span> <span class="str">"inside"</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t59" href="#t59">59</a></span><span class="t"> <span class="str">'sub2.txt'</span><span class="op">:</span> <span class="str">"inside2"</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t60" href="#t60">60</a></span><span class="t"> <span class="op">}</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t61" href="#t61">61</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t62" href="#t62">62</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t63" href="#t63">63</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">checkFilesDontExist</span><span class="op">(</span><span class="nam">d</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t64" href="#t64">64</a></span><span class="t"> <span class="nam">makefiles</span><span class="op">.</span><span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t65" href="#t65">65</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">checkFilesExist</span><span class="op">(</span><span class="nam">d</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t66" href="#t66">66</a></span><span class="t"> <span class="nam">makefiles</span><span class="op">.</span><span class="nam">removeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t67" href="#t67">67</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">checkFilesDontExist</span><span class="op">(</span><span class="nam">d</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t68" href="#t68">68</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t69" href="#t69">69</a></span><span class="t"> <span class="key">def</span> <span class="nam">testOverlapping</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t70" href="#t70">70</a></span><span class="t"> <span class="nam">d1</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t71" href="#t71">71</a></span><span class="t"> <span class="str">'top1.txt'</span><span class="op">:</span> <span class="str">"howdy"</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t72" href="#t72">72</a></span><span class="t"> <span class="str">'sub'</span><span class="op">:</span> <span class="op">{</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t73" href="#t73">73</a></span><span class="t"> <span class="str">'sub1.txt'</span><span class="op">:</span> <span class="str">"inside"</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t74" href="#t74">74</a></span><span class="t"> <span class="op">}</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t75" href="#t75">75</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t76" href="#t76">76</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t77" href="#t77">77</a></span><span class="t"> <span class="nam">d2</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t78" href="#t78">78</a></span><span class="t"> <span class="str">'top2.txt'</span><span class="op">:</span> <span class="str">"hello"</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t79" href="#t79">79</a></span><span class="t"> <span class="str">'sub'</span><span class="op">:</span> <span class="op">{</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t80" href="#t80">80</a></span><span class="t"> <span class="str">'sub2.txt'</span><span class="op">:</span> <span class="str">"inside2"</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t81" href="#t81">81</a></span><span class="t"> <span class="op">}</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t82" href="#t82">82</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t83" href="#t83">83</a></span><span class="t"> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t84" href="#t84">84</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">checkFilesDontExist</span><span class="op">(</span><span class="nam">d1</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t85" href="#t85">85</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">checkFilesDontExist</span><span class="op">(</span><span class="nam">d2</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t86" href="#t86">86</a></span><span class="t"> <span class="nam">makefiles</span><span class="op">.</span><span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d1</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t87" href="#t87">87</a></span><span class="t"> <span class="nam">makefiles</span><span class="op">.</span><span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d2</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t88" href="#t88">88</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">checkFilesExist</span><span class="op">(</span><span class="nam">d1</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t89" href="#t89">89</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">checkFilesExist</span><span class="op">(</span><span class="nam">d2</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t90" href="#t90">90</a></span><span class="t"> <span class="nam">makefiles</span><span class="op">.</span><span class="nam">removeFiles</span><span class="op">(</span><span class="nam">d1</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t91" href="#t91">91</a></span><span class="t"> <span class="nam">makefiles</span><span class="op">.</span><span class="nam">removeFiles</span><span class="op">(</span><span class="nam">d2</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t92" href="#t92">92</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">checkFilesDontExist</span><span class="op">(</span><span class="nam">d1</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t93" href="#t93">93</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">checkFilesDontExist</span><span class="op">(</span><span class="nam">d2</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t94" href="#t94">94</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t95" href="#t95">95</a></span><span class="t"> <span class="key">def</span> <span class="nam">testContents</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t96" href="#t96">96</a></span><span class="t"> <span class="nam">fname</span> <span class="op">=</span> <span class="str">'bar.txt'</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t97" href="#t97">97</a></span><span class="t"> <span class="nam">cont0</span> <span class="op">=</span> <span class="str">"I am bar.txt"</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t98" href="#t98">98</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> <span class="nam">fname</span><span class="op">:</span> <span class="nam">cont0</span> <span class="op">}</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t99" href="#t99">99</a></span><span class="t"> <span class="nam">makefiles</span><span class="op">.</span><span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t100" href="#t100">100</a></span><span class="t"> <span class="nam">fcont1</span> <span class="op">=</span> <span class="nam">open</span><span class="op">(</span><span class="nam">os</span><span class="op">.</span><span class="nam">path</span><span class="op">.</span><span class="nam">join</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">,</span> <span class="nam">fname</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t101" href="#t101">101</a></span><span class="t"> <span class="key">assert</span><span class="op">(</span><span class="nam">fcont1</span><span class="op">.</span><span class="nam">read</span><span class="op">(</span><span class="op">)</span> <span class="op">==</span> <span class="nam">cont0</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t102" href="#t102">102</a></span><span class="t"> <span class="nam">fcont1</span><span class="op">.</span><span class="nam">close</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t103" href="#t103">103</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t104" href="#t104">104</a></span><span class="t"> <span class="key">def</span> <span class="nam">testDedent</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t105" href="#t105">105</a></span><span class="t"> <span class="nam">fname</span> <span class="op">=</span> <span class="str">'dedent.txt'</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t106" href="#t106">106</a></span><span class="t"> <span class="nam">d</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t107" href="#t107">107</a></span><span class="t"> <span class="nam">fname</span><span class="op">:</span> <span class="str">"""\</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t108" href="#t108">108</a></span><span class="t"><span class="str"> This is dedent.txt</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t109" href="#t109">109</a></span><span class="t"><span class="str"> \tTabbed in.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t110" href="#t110">110</a></span><span class="t"><span class="str"> spaced in.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t111" href="#t111">111</a></span><span class="t"><span class="str"> OK.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t112" href="#t112">112</a></span><span class="t"><span class="str"> """</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t113" href="#t113">113</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t114" href="#t114">114</a></span><span class="t"> <span class="nam">makefiles</span><span class="op">.</span><span class="nam">makeFiles</span><span class="op">(</span><span class="nam">d</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t115" href="#t115">115</a></span><span class="t"> <span class="nam">fcont</span> <span class="op">=</span> <span class="nam">open</span><span class="op">(</span><span class="nam">os</span><span class="op">.</span><span class="nam">path</span><span class="op">.</span><span class="nam">join</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">tempdir</span><span class="op">,</span> <span class="nam">fname</span><span class="op">)</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t116" href="#t116">116</a></span><span class="t"> <span class="key">assert</span><span class="op">(</span><span class="nam">fcont</span><span class="op">.</span><span class="nam">read</span><span class="op">(</span><span class="op">)</span> <span class="op">==</span> <span class="str">"This is dedent.txt\n\tTabbed in.\n spaced in.\nOK.\n"</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t117" href="#t117">117</a></span><span class="t"> <span class="nam">fcont</span><span class="op">.</span><span class="nam">close</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p> </main> <footer> <div class="content"> @@ -212,8 +207,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80_test_whiteutils_py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.1.0</a>, - created at 2023-01-24 19:37 -0500 + <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.2.0</a>, + created at 2023-02-22 18:50 -0500 </p> </div> </footer> diff --git a/doc/sample_html/d_7b071bdc2a35fa80_test_whiteutils_py.html b/doc/sample_html/d_7b071bdc2a35fa80_test_whiteutils_py.html index 8d0118cc0..dda37a178 100644 --- a/doc/sample_html/d_7b071bdc2a35fa80_test_whiteutils_py.html +++ b/doc/sample_html/d_7b071bdc2a35fa80_test_whiteutils_py.html @@ -2,7 +2,7 @@ <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> - <title>Coverage for cogapp/test_whiteutils.py: 27.54%</title> + <title>Coverage for cogapp/test_whiteutils.py: 26.47%</title> <link rel="icon" sizes="32x32" href="favicon_32.png"> <link rel="stylesheet" href="style.css" type="text/css"> <script type="text/javascript" src="coverage_html.js" defer></script> @@ -12,7 +12,7 @@ <div class="content"> <h1> <span class="text">Coverage for </span><b>cogapp/test_whiteutils.py</b>: - <span class="pc_cov">27.54%</span> + <span class="pc_cov">26.47%</span> </h1> <aside id="help_panel_wrapper"> <input id="help_panel_state" type="checkbox"> @@ -55,8 +55,8 @@ <h1> </div> </aside> <h2> - <span class="text">69 statements </span> - <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">19<span class="text"> run</span></button> + <span class="text">68 statements </span> + <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">18<span class="text"> run</span></button> <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">50<span class="text"> missing</span></button> <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">0<span class="text"> excluded</span></button> <button type="button" class="par run show_par button_toggle_par" value="par" data-shortcut="p" title="Toggle lines partially run">0<span class="text"> partial</span></button> @@ -66,8 +66,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80_whiteutils_py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.1.0</a>, - created at 2023-01-24 19:37 -0500 + <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.2.0</a>, + created at 2023-02-22 18:50 -0500 </p> <aside class="hidden"> <button type="button" class="button_next_chunk" data-shortcut="j"/> @@ -83,106 +83,102 @@ <h2> </header> <main id="source"> <p class="pln"><span class="n"><a id="t1" href="#t1">1</a></span><span class="t"><span class="str">""" Test the cogapp.whiteutils module.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2" href="#t2">2</a></span><span class="t"><span class="str"> http://nedbatchelder.com/code/cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2" href="#t2">2</a></span><span class="t"><span class="str">"""</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t3" href="#t3">3</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t4" href="#t4">4</a></span><span class="t"><span class="str"> Copyright 2004-2019, Ned Batchelder.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t5" href="#t5">5</a></span><span class="t"><span class="str">"""</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t6" href="#t6">6</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t7" href="#t7">7</a></span><span class="t"><span class="key">from</span> <span class="nam">__future__</span> <span class="key">import</span> <span class="nam">absolute_import</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t4" href="#t4">4</a></span><span class="t"><span class="key">from</span> <span class="nam">unittest</span> <span class="key">import</span> <span class="nam">TestCase</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t5" href="#t5">5</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t6" href="#t6">6</a></span><span class="t"><span class="key">from</span> <span class="op">.</span><span class="nam">whiteutils</span> <span class="key">import</span> <span class="nam">commonPrefix</span><span class="op">,</span> <span class="nam">reindentBlock</span><span class="op">,</span> <span class="nam">whitePrefix</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t7" href="#t7">7</a></span><span class="t"> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t8" href="#t8">8</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t9" href="#t9">9</a></span><span class="t"><span class="key">from</span> <span class="op">.</span><span class="nam">backward</span> <span class="key">import</span> <span class="nam">TestCase</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t10" href="#t10">10</a></span><span class="t"><span class="key">from</span> <span class="op">.</span><span class="nam">whiteutils</span> <span class="key">import</span> <span class="op">*</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t11" href="#t11">11</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t12" href="#t12">12</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t13" href="#t13">13</a></span><span class="t"><span class="key">class</span> <span class="nam">WhitePrefixTests</span><span class="op">(</span><span class="nam">TestCase</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t14" href="#t14">14</a></span><span class="t"> <span class="str">""" Test cases for cogapp.whiteutils.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t15" href="#t15">15</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t16" href="#t16">16</a></span><span class="t"> <span class="key">def</span> <span class="nam">testSingleLine</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t17" href="#t17">17</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">whitePrefix</span><span class="op">(</span><span class="op">[</span><span class="str">''</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> <span class="str">''</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t18" href="#t18">18</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">whitePrefix</span><span class="op">(</span><span class="op">[</span><span class="str">' '</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> <span class="str">''</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t19" href="#t19">19</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">whitePrefix</span><span class="op">(</span><span class="op">[</span><span class="str">'x'</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> <span class="str">''</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t20" href="#t20">20</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">whitePrefix</span><span class="op">(</span><span class="op">[</span><span class="str">' x'</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> <span class="str">' '</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t21" href="#t21">21</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">whitePrefix</span><span class="op">(</span><span class="op">[</span><span class="str">'\tx'</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> <span class="str">'\t'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t22" href="#t22">22</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">whitePrefix</span><span class="op">(</span><span class="op">[</span><span class="str">' x'</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> <span class="str">' '</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t23" href="#t23">23</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">whitePrefix</span><span class="op">(</span><span class="op">[</span><span class="str">' \t \tx '</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> <span class="str">' \t \t'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t24" href="#t24">24</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t25" href="#t25">25</a></span><span class="t"> <span class="key">def</span> <span class="nam">testMultiLine</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t26" href="#t26">26</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">whitePrefix</span><span class="op">(</span><span class="op">[</span><span class="str">' x'</span><span class="op">,</span><span class="str">' x'</span><span class="op">,</span><span class="str">' x'</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> <span class="str">' '</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t27" href="#t27">27</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">whitePrefix</span><span class="op">(</span><span class="op">[</span><span class="str">' y'</span><span class="op">,</span><span class="str">' y'</span><span class="op">,</span><span class="str">' y'</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> <span class="str">' '</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t28" href="#t28">28</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">whitePrefix</span><span class="op">(</span><span class="op">[</span><span class="str">' y'</span><span class="op">,</span><span class="str">' y'</span><span class="op">,</span><span class="str">' y'</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> <span class="str">' '</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t29" href="#t29">29</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t30" href="#t30">30</a></span><span class="t"> <span class="key">def</span> <span class="nam">testBlankLinesAreIgnored</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t31" href="#t31">31</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">whitePrefix</span><span class="op">(</span><span class="op">[</span><span class="str">' x'</span><span class="op">,</span><span class="str">' x'</span><span class="op">,</span><span class="str">''</span><span class="op">,</span><span class="str">' x'</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> <span class="str">' '</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t32" href="#t32">32</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">whitePrefix</span><span class="op">(</span><span class="op">[</span><span class="str">''</span><span class="op">,</span><span class="str">' x'</span><span class="op">,</span><span class="str">' x'</span><span class="op">,</span><span class="str">' x'</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> <span class="str">' '</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t33" href="#t33">33</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">whitePrefix</span><span class="op">(</span><span class="op">[</span><span class="str">' x'</span><span class="op">,</span><span class="str">' x'</span><span class="op">,</span><span class="str">' x'</span><span class="op">,</span><span class="str">''</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> <span class="str">' '</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t34" href="#t34">34</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">whitePrefix</span><span class="op">(</span><span class="op">[</span><span class="str">' x'</span><span class="op">,</span><span class="str">' x'</span><span class="op">,</span><span class="str">' '</span><span class="op">,</span><span class="str">' x'</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> <span class="str">' '</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t35" href="#t35">35</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t36" href="#t36">36</a></span><span class="t"> <span class="key">def</span> <span class="nam">testTabCharacters</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t37" href="#t37">37</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">whitePrefix</span><span class="op">(</span><span class="op">[</span><span class="str">'\timport sys'</span><span class="op">,</span> <span class="str">''</span><span class="op">,</span> <span class="str">'\tprint sys.argv'</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> <span class="str">'\t'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t9" href="#t9">9</a></span><span class="t"><span class="key">class</span> <span class="nam">WhitePrefixTests</span><span class="op">(</span><span class="nam">TestCase</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t10" href="#t10">10</a></span><span class="t"> <span class="str">""" Test cases for cogapp.whiteutils.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t11" href="#t11">11</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t12" href="#t12">12</a></span><span class="t"> <span class="key">def</span> <span class="nam">testSingleLine</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t13" href="#t13">13</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">whitePrefix</span><span class="op">(</span><span class="op">[</span><span class="str">''</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> <span class="str">''</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t14" href="#t14">14</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">whitePrefix</span><span class="op">(</span><span class="op">[</span><span class="str">' '</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> <span class="str">''</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t15" href="#t15">15</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">whitePrefix</span><span class="op">(</span><span class="op">[</span><span class="str">'x'</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> <span class="str">''</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t16" href="#t16">16</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">whitePrefix</span><span class="op">(</span><span class="op">[</span><span class="str">' x'</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> <span class="str">' '</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t17" href="#t17">17</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">whitePrefix</span><span class="op">(</span><span class="op">[</span><span class="str">'\tx'</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> <span class="str">'\t'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t18" href="#t18">18</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">whitePrefix</span><span class="op">(</span><span class="op">[</span><span class="str">' x'</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> <span class="str">' '</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t19" href="#t19">19</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">whitePrefix</span><span class="op">(</span><span class="op">[</span><span class="str">' \t \tx '</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> <span class="str">' \t \t'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t20" href="#t20">20</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t21" href="#t21">21</a></span><span class="t"> <span class="key">def</span> <span class="nam">testMultiLine</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t22" href="#t22">22</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">whitePrefix</span><span class="op">(</span><span class="op">[</span><span class="str">' x'</span><span class="op">,</span><span class="str">' x'</span><span class="op">,</span><span class="str">' x'</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> <span class="str">' '</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t23" href="#t23">23</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">whitePrefix</span><span class="op">(</span><span class="op">[</span><span class="str">' y'</span><span class="op">,</span><span class="str">' y'</span><span class="op">,</span><span class="str">' y'</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> <span class="str">' '</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t24" href="#t24">24</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">whitePrefix</span><span class="op">(</span><span class="op">[</span><span class="str">' y'</span><span class="op">,</span><span class="str">' y'</span><span class="op">,</span><span class="str">' y'</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> <span class="str">' '</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t25" href="#t25">25</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t26" href="#t26">26</a></span><span class="t"> <span class="key">def</span> <span class="nam">testBlankLinesAreIgnored</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t27" href="#t27">27</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">whitePrefix</span><span class="op">(</span><span class="op">[</span><span class="str">' x'</span><span class="op">,</span><span class="str">' x'</span><span class="op">,</span><span class="str">''</span><span class="op">,</span><span class="str">' x'</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> <span class="str">' '</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t28" href="#t28">28</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">whitePrefix</span><span class="op">(</span><span class="op">[</span><span class="str">''</span><span class="op">,</span><span class="str">' x'</span><span class="op">,</span><span class="str">' x'</span><span class="op">,</span><span class="str">' x'</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> <span class="str">' '</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t29" href="#t29">29</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">whitePrefix</span><span class="op">(</span><span class="op">[</span><span class="str">' x'</span><span class="op">,</span><span class="str">' x'</span><span class="op">,</span><span class="str">' x'</span><span class="op">,</span><span class="str">''</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> <span class="str">' '</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t30" href="#t30">30</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">whitePrefix</span><span class="op">(</span><span class="op">[</span><span class="str">' x'</span><span class="op">,</span><span class="str">' x'</span><span class="op">,</span><span class="str">' '</span><span class="op">,</span><span class="str">' x'</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> <span class="str">' '</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t31" href="#t31">31</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t32" href="#t32">32</a></span><span class="t"> <span class="key">def</span> <span class="nam">testTabCharacters</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t33" href="#t33">33</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">whitePrefix</span><span class="op">(</span><span class="op">[</span><span class="str">'\timport sys'</span><span class="op">,</span> <span class="str">''</span><span class="op">,</span> <span class="str">'\tprint sys.argv'</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> <span class="str">'\t'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t34" href="#t34">34</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t35" href="#t35">35</a></span><span class="t"> <span class="key">def</span> <span class="nam">testDecreasingLengths</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t36" href="#t36">36</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">whitePrefix</span><span class="op">(</span><span class="op">[</span><span class="str">' x'</span><span class="op">,</span><span class="str">' x'</span><span class="op">,</span><span class="str">' x'</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> <span class="str">' '</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t37" href="#t37">37</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">whitePrefix</span><span class="op">(</span><span class="op">[</span><span class="str">' x'</span><span class="op">,</span><span class="str">' x'</span><span class="op">,</span><span class="str">' x'</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> <span class="str">' '</span><span class="op">)</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t38" href="#t38">38</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t39" href="#t39">39</a></span><span class="t"> <span class="key">def</span> <span class="nam">testDecreasingLengths</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t40" href="#t40">40</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">whitePrefix</span><span class="op">(</span><span class="op">[</span><span class="str">' x'</span><span class="op">,</span><span class="str">' x'</span><span class="op">,</span><span class="str">' x'</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> <span class="str">' '</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t41" href="#t41">41</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">whitePrefix</span><span class="op">(</span><span class="op">[</span><span class="str">' x'</span><span class="op">,</span><span class="str">' x'</span><span class="op">,</span><span class="str">' x'</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> <span class="str">' '</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t42" href="#t42">42</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t43" href="#t43">43</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t44" href="#t44">44</a></span><span class="t"><span class="key">class</span> <span class="nam">ReindentBlockTests</span><span class="op">(</span><span class="nam">TestCase</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t45" href="#t45">45</a></span><span class="t"> <span class="str">""" Test cases for cogapp.reindentBlock.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t46" href="#t46">46</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t47" href="#t47">47</a></span><span class="t"> <span class="key">def</span> <span class="nam">testNonTermLine</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t48" href="#t48">48</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">reindentBlock</span><span class="op">(</span><span class="str">''</span><span class="op">)</span><span class="op">,</span> <span class="str">''</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t49" href="#t49">49</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">reindentBlock</span><span class="op">(</span><span class="str">'x'</span><span class="op">)</span><span class="op">,</span> <span class="str">'x'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t50" href="#t50">50</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">reindentBlock</span><span class="op">(</span><span class="str">' x'</span><span class="op">)</span><span class="op">,</span> <span class="str">'x'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t51" href="#t51">51</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">reindentBlock</span><span class="op">(</span><span class="str">' x'</span><span class="op">)</span><span class="op">,</span> <span class="str">'x'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t52" href="#t52">52</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">reindentBlock</span><span class="op">(</span><span class="str">'\tx'</span><span class="op">)</span><span class="op">,</span> <span class="str">'x'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t53" href="#t53">53</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">reindentBlock</span><span class="op">(</span><span class="str">'x'</span><span class="op">,</span> <span class="str">' '</span><span class="op">)</span><span class="op">,</span> <span class="str">' x'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t54" href="#t54">54</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">reindentBlock</span><span class="op">(</span><span class="str">'x'</span><span class="op">,</span> <span class="str">'\t'</span><span class="op">)</span><span class="op">,</span> <span class="str">'\tx'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t55" href="#t55">55</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">reindentBlock</span><span class="op">(</span><span class="str">' x'</span><span class="op">,</span> <span class="str">' '</span><span class="op">)</span><span class="op">,</span> <span class="str">' x'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t56" href="#t56">56</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">reindentBlock</span><span class="op">(</span><span class="str">' x'</span><span class="op">,</span> <span class="str">'\t'</span><span class="op">)</span><span class="op">,</span> <span class="str">'\tx'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t57" href="#t57">57</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">reindentBlock</span><span class="op">(</span><span class="str">' x'</span><span class="op">,</span> <span class="str">' '</span><span class="op">)</span><span class="op">,</span> <span class="str">' x'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t58" href="#t58">58</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t59" href="#t59">59</a></span><span class="t"> <span class="key">def</span> <span class="nam">testSingleLine</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t60" href="#t60">60</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">reindentBlock</span><span class="op">(</span><span class="str">'\n'</span><span class="op">)</span><span class="op">,</span> <span class="str">'\n'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t61" href="#t61">61</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">reindentBlock</span><span class="op">(</span><span class="str">'x\n'</span><span class="op">)</span><span class="op">,</span> <span class="str">'x\n'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t62" href="#t62">62</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">reindentBlock</span><span class="op">(</span><span class="str">' x\n'</span><span class="op">)</span><span class="op">,</span> <span class="str">'x\n'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t63" href="#t63">63</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">reindentBlock</span><span class="op">(</span><span class="str">' x\n'</span><span class="op">)</span><span class="op">,</span> <span class="str">'x\n'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t64" href="#t64">64</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">reindentBlock</span><span class="op">(</span><span class="str">'\tx\n'</span><span class="op">)</span><span class="op">,</span> <span class="str">'x\n'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t65" href="#t65">65</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">reindentBlock</span><span class="op">(</span><span class="str">'x\n'</span><span class="op">,</span> <span class="str">' '</span><span class="op">)</span><span class="op">,</span> <span class="str">' x\n'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t66" href="#t66">66</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">reindentBlock</span><span class="op">(</span><span class="str">'x\n'</span><span class="op">,</span> <span class="str">'\t'</span><span class="op">)</span><span class="op">,</span> <span class="str">'\tx\n'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t67" href="#t67">67</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">reindentBlock</span><span class="op">(</span><span class="str">' x\n'</span><span class="op">,</span> <span class="str">' '</span><span class="op">)</span><span class="op">,</span> <span class="str">' x\n'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t68" href="#t68">68</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">reindentBlock</span><span class="op">(</span><span class="str">' x\n'</span><span class="op">,</span> <span class="str">'\t'</span><span class="op">)</span><span class="op">,</span> <span class="str">'\tx\n'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t69" href="#t69">69</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">reindentBlock</span><span class="op">(</span><span class="str">' x\n'</span><span class="op">,</span> <span class="str">' '</span><span class="op">)</span><span class="op">,</span> <span class="str">' x\n'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t70" href="#t70">70</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t71" href="#t71">71</a></span><span class="t"> <span class="key">def</span> <span class="nam">testRealBlock</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t72" href="#t72">72</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t73" href="#t73">73</a></span><span class="t"> <span class="nam">reindentBlock</span><span class="op">(</span><span class="str">'\timport sys\n\n\tprint sys.argv\n'</span><span class="op">)</span><span class="op">,</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t74" href="#t74">74</a></span><span class="t"> <span class="str">'import sys\n\nprint sys.argv\n'</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t75" href="#t75">75</a></span><span class="t"> <span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t76" href="#t76">76</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t77" href="#t77">77</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t78" href="#t78">78</a></span><span class="t"><span class="key">class</span> <span class="nam">CommonPrefixTests</span><span class="op">(</span><span class="nam">TestCase</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t79" href="#t79">79</a></span><span class="t"> <span class="str">""" Test cases for cogapp.commonPrefix.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t80" href="#t80">80</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t81" href="#t81">81</a></span><span class="t"> <span class="key">def</span> <span class="nam">testDegenerateCases</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t82" href="#t82">82</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">commonPrefix</span><span class="op">(</span><span class="op">[</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> <span class="str">''</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t83" href="#t83">83</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">commonPrefix</span><span class="op">(</span><span class="op">[</span><span class="str">''</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> <span class="str">''</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t84" href="#t84">84</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">commonPrefix</span><span class="op">(</span><span class="op">[</span><span class="str">''</span><span class="op">,</span><span class="str">''</span><span class="op">,</span><span class="str">''</span><span class="op">,</span><span class="str">''</span><span class="op">,</span><span class="str">''</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> <span class="str">''</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t85" href="#t85">85</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">commonPrefix</span><span class="op">(</span><span class="op">[</span><span class="str">'cat in the hat'</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> <span class="str">'cat in the hat'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t86" href="#t86">86</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t87" href="#t87">87</a></span><span class="t"> <span class="key">def</span> <span class="nam">testNoCommonPrefix</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t88" href="#t88">88</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">commonPrefix</span><span class="op">(</span><span class="op">[</span><span class="str">'a'</span><span class="op">,</span><span class="str">'b'</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> <span class="str">''</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t89" href="#t89">89</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">commonPrefix</span><span class="op">(</span><span class="op">[</span><span class="str">'a'</span><span class="op">,</span><span class="str">'b'</span><span class="op">,</span><span class="str">'c'</span><span class="op">,</span><span class="str">'d'</span><span class="op">,</span><span class="str">'e'</span><span class="op">,</span><span class="str">'f'</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> <span class="str">''</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t90" href="#t90">90</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">commonPrefix</span><span class="op">(</span><span class="op">[</span><span class="str">'a'</span><span class="op">,</span><span class="str">'a'</span><span class="op">,</span><span class="str">'a'</span><span class="op">,</span><span class="str">'a'</span><span class="op">,</span><span class="str">'a'</span><span class="op">,</span><span class="str">'x'</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> <span class="str">''</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t91" href="#t91">91</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t92" href="#t92">92</a></span><span class="t"> <span class="key">def</span> <span class="nam">testUsualCases</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t93" href="#t93">93</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">commonPrefix</span><span class="op">(</span><span class="op">[</span><span class="str">'ab'</span><span class="op">,</span> <span class="str">'ac'</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> <span class="str">'a'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t94" href="#t94">94</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">commonPrefix</span><span class="op">(</span><span class="op">[</span><span class="str">'aab'</span><span class="op">,</span> <span class="str">'aac'</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> <span class="str">'aa'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t95" href="#t95">95</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">commonPrefix</span><span class="op">(</span><span class="op">[</span><span class="str">'aab'</span><span class="op">,</span> <span class="str">'aab'</span><span class="op">,</span> <span class="str">'aab'</span><span class="op">,</span> <span class="str">'aac'</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> <span class="str">'aa'</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t96" href="#t96">96</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t97" href="#t97">97</a></span><span class="t"> <span class="key">def</span> <span class="nam">testBlankLine</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t98" href="#t98">98</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">commonPrefix</span><span class="op">(</span><span class="op">[</span><span class="str">'abc'</span><span class="op">,</span> <span class="str">'abx'</span><span class="op">,</span> <span class="str">''</span><span class="op">,</span> <span class="str">'aby'</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> <span class="str">''</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t99" href="#t99">99</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t100" href="#t100">100</a></span><span class="t"> <span class="key">def</span> <span class="nam">testDecreasingLengths</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t101" href="#t101">101</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">commonPrefix</span><span class="op">(</span><span class="op">[</span><span class="str">'abcd'</span><span class="op">,</span> <span class="str">'abc'</span><span class="op">,</span> <span class="str">'ab'</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> <span class="str">'ab'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t39" href="#t39">39</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t40" href="#t40">40</a></span><span class="t"><span class="key">class</span> <span class="nam">ReindentBlockTests</span><span class="op">(</span><span class="nam">TestCase</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t41" href="#t41">41</a></span><span class="t"> <span class="str">""" Test cases for cogapp.reindentBlock.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t42" href="#t42">42</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t43" href="#t43">43</a></span><span class="t"> <span class="key">def</span> <span class="nam">testNonTermLine</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t44" href="#t44">44</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">reindentBlock</span><span class="op">(</span><span class="str">''</span><span class="op">)</span><span class="op">,</span> <span class="str">''</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t45" href="#t45">45</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">reindentBlock</span><span class="op">(</span><span class="str">'x'</span><span class="op">)</span><span class="op">,</span> <span class="str">'x'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t46" href="#t46">46</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">reindentBlock</span><span class="op">(</span><span class="str">' x'</span><span class="op">)</span><span class="op">,</span> <span class="str">'x'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t47" href="#t47">47</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">reindentBlock</span><span class="op">(</span><span class="str">' x'</span><span class="op">)</span><span class="op">,</span> <span class="str">'x'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t48" href="#t48">48</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">reindentBlock</span><span class="op">(</span><span class="str">'\tx'</span><span class="op">)</span><span class="op">,</span> <span class="str">'x'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t49" href="#t49">49</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">reindentBlock</span><span class="op">(</span><span class="str">'x'</span><span class="op">,</span> <span class="str">' '</span><span class="op">)</span><span class="op">,</span> <span class="str">' x'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t50" href="#t50">50</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">reindentBlock</span><span class="op">(</span><span class="str">'x'</span><span class="op">,</span> <span class="str">'\t'</span><span class="op">)</span><span class="op">,</span> <span class="str">'\tx'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t51" href="#t51">51</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">reindentBlock</span><span class="op">(</span><span class="str">' x'</span><span class="op">,</span> <span class="str">' '</span><span class="op">)</span><span class="op">,</span> <span class="str">' x'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t52" href="#t52">52</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">reindentBlock</span><span class="op">(</span><span class="str">' x'</span><span class="op">,</span> <span class="str">'\t'</span><span class="op">)</span><span class="op">,</span> <span class="str">'\tx'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t53" href="#t53">53</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">reindentBlock</span><span class="op">(</span><span class="str">' x'</span><span class="op">,</span> <span class="str">' '</span><span class="op">)</span><span class="op">,</span> <span class="str">' x'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t54" href="#t54">54</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t55" href="#t55">55</a></span><span class="t"> <span class="key">def</span> <span class="nam">testSingleLine</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t56" href="#t56">56</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">reindentBlock</span><span class="op">(</span><span class="str">'\n'</span><span class="op">)</span><span class="op">,</span> <span class="str">'\n'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t57" href="#t57">57</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">reindentBlock</span><span class="op">(</span><span class="str">'x\n'</span><span class="op">)</span><span class="op">,</span> <span class="str">'x\n'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t58" href="#t58">58</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">reindentBlock</span><span class="op">(</span><span class="str">' x\n'</span><span class="op">)</span><span class="op">,</span> <span class="str">'x\n'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t59" href="#t59">59</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">reindentBlock</span><span class="op">(</span><span class="str">' x\n'</span><span class="op">)</span><span class="op">,</span> <span class="str">'x\n'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t60" href="#t60">60</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">reindentBlock</span><span class="op">(</span><span class="str">'\tx\n'</span><span class="op">)</span><span class="op">,</span> <span class="str">'x\n'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t61" href="#t61">61</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">reindentBlock</span><span class="op">(</span><span class="str">'x\n'</span><span class="op">,</span> <span class="str">' '</span><span class="op">)</span><span class="op">,</span> <span class="str">' x\n'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t62" href="#t62">62</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">reindentBlock</span><span class="op">(</span><span class="str">'x\n'</span><span class="op">,</span> <span class="str">'\t'</span><span class="op">)</span><span class="op">,</span> <span class="str">'\tx\n'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t63" href="#t63">63</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">reindentBlock</span><span class="op">(</span><span class="str">' x\n'</span><span class="op">,</span> <span class="str">' '</span><span class="op">)</span><span class="op">,</span> <span class="str">' x\n'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t64" href="#t64">64</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">reindentBlock</span><span class="op">(</span><span class="str">' x\n'</span><span class="op">,</span> <span class="str">'\t'</span><span class="op">)</span><span class="op">,</span> <span class="str">'\tx\n'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t65" href="#t65">65</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">reindentBlock</span><span class="op">(</span><span class="str">' x\n'</span><span class="op">,</span> <span class="str">' '</span><span class="op">)</span><span class="op">,</span> <span class="str">' x\n'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t66" href="#t66">66</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t67" href="#t67">67</a></span><span class="t"> <span class="key">def</span> <span class="nam">testRealBlock</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t68" href="#t68">68</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t69" href="#t69">69</a></span><span class="t"> <span class="nam">reindentBlock</span><span class="op">(</span><span class="str">'\timport sys\n\n\tprint sys.argv\n'</span><span class="op">)</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t70" href="#t70">70</a></span><span class="t"> <span class="str">'import sys\n\nprint sys.argv\n'</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t71" href="#t71">71</a></span><span class="t"> <span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t72" href="#t72">72</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t73" href="#t73">73</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t74" href="#t74">74</a></span><span class="t"><span class="key">class</span> <span class="nam">CommonPrefixTests</span><span class="op">(</span><span class="nam">TestCase</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t75" href="#t75">75</a></span><span class="t"> <span class="str">""" Test cases for cogapp.commonPrefix.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t76" href="#t76">76</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t77" href="#t77">77</a></span><span class="t"> <span class="key">def</span> <span class="nam">testDegenerateCases</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t78" href="#t78">78</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">commonPrefix</span><span class="op">(</span><span class="op">[</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> <span class="str">''</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t79" href="#t79">79</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">commonPrefix</span><span class="op">(</span><span class="op">[</span><span class="str">''</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> <span class="str">''</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t80" href="#t80">80</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">commonPrefix</span><span class="op">(</span><span class="op">[</span><span class="str">''</span><span class="op">,</span><span class="str">''</span><span class="op">,</span><span class="str">''</span><span class="op">,</span><span class="str">''</span><span class="op">,</span><span class="str">''</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> <span class="str">''</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t81" href="#t81">81</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">commonPrefix</span><span class="op">(</span><span class="op">[</span><span class="str">'cat in the hat'</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> <span class="str">'cat in the hat'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t82" href="#t82">82</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t83" href="#t83">83</a></span><span class="t"> <span class="key">def</span> <span class="nam">testNoCommonPrefix</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t84" href="#t84">84</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">commonPrefix</span><span class="op">(</span><span class="op">[</span><span class="str">'a'</span><span class="op">,</span><span class="str">'b'</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> <span class="str">''</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t85" href="#t85">85</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">commonPrefix</span><span class="op">(</span><span class="op">[</span><span class="str">'a'</span><span class="op">,</span><span class="str">'b'</span><span class="op">,</span><span class="str">'c'</span><span class="op">,</span><span class="str">'d'</span><span class="op">,</span><span class="str">'e'</span><span class="op">,</span><span class="str">'f'</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> <span class="str">''</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t86" href="#t86">86</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">commonPrefix</span><span class="op">(</span><span class="op">[</span><span class="str">'a'</span><span class="op">,</span><span class="str">'a'</span><span class="op">,</span><span class="str">'a'</span><span class="op">,</span><span class="str">'a'</span><span class="op">,</span><span class="str">'a'</span><span class="op">,</span><span class="str">'x'</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> <span class="str">''</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t87" href="#t87">87</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t88" href="#t88">88</a></span><span class="t"> <span class="key">def</span> <span class="nam">testUsualCases</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t89" href="#t89">89</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">commonPrefix</span><span class="op">(</span><span class="op">[</span><span class="str">'ab'</span><span class="op">,</span> <span class="str">'ac'</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> <span class="str">'a'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t90" href="#t90">90</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">commonPrefix</span><span class="op">(</span><span class="op">[</span><span class="str">'aab'</span><span class="op">,</span> <span class="str">'aac'</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> <span class="str">'aa'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t91" href="#t91">91</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">commonPrefix</span><span class="op">(</span><span class="op">[</span><span class="str">'aab'</span><span class="op">,</span> <span class="str">'aab'</span><span class="op">,</span> <span class="str">'aab'</span><span class="op">,</span> <span class="str">'aac'</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> <span class="str">'aa'</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t92" href="#t92">92</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t93" href="#t93">93</a></span><span class="t"> <span class="key">def</span> <span class="nam">testBlankLine</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t94" href="#t94">94</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">commonPrefix</span><span class="op">(</span><span class="op">[</span><span class="str">'abc'</span><span class="op">,</span> <span class="str">'abx'</span><span class="op">,</span> <span class="str">''</span><span class="op">,</span> <span class="str">'aby'</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> <span class="str">''</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t95" href="#t95">95</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t96" href="#t96">96</a></span><span class="t"> <span class="key">def</span> <span class="nam">testDecreasingLengths</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t97" href="#t97">97</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">assertEqual</span><span class="op">(</span><span class="nam">commonPrefix</span><span class="op">(</span><span class="op">[</span><span class="str">'abcd'</span><span class="op">,</span> <span class="str">'abc'</span><span class="op">,</span> <span class="str">'ab'</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> <span class="str">'ab'</span><span class="op">)</span> </span><span class="r"></span></p> </main> <footer> <div class="content"> @@ -191,8 +187,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80_whiteutils_py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.1.0</a>, - created at 2023-01-24 19:37 -0500 + <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.2.0</a>, + created at 2023-02-22 18:50 -0500 </p> </div> </footer> diff --git a/doc/sample_html/d_7b071bdc2a35fa80_whiteutils_py.html b/doc/sample_html/d_7b071bdc2a35fa80_whiteutils_py.html index 2bcc3c0aa..9f5b48869 100644 --- a/doc/sample_html/d_7b071bdc2a35fa80_whiteutils_py.html +++ b/doc/sample_html/d_7b071bdc2a35fa80_whiteutils_py.html @@ -2,7 +2,7 @@ <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> - <title>Coverage for cogapp/whiteutils.py: 88.61%</title> + <title>Coverage for cogapp/whiteutils.py: 88.31%</title> <link rel="icon" sizes="32x32" href="favicon_32.png"> <link rel="stylesheet" href="style.css" type="text/css"> <script type="text/javascript" src="coverage_html.js" defer></script> @@ -12,7 +12,7 @@ <div class="content"> <h1> <span class="text">Coverage for </span><b>cogapp/whiteutils.py</b>: - <span class="pc_cov">88.61%</span> + <span class="pc_cov">88.31%</span> </h1> <aside id="help_panel_wrapper"> <input id="help_panel_state" type="checkbox"> @@ -55,8 +55,8 @@ <h1> </div> </aside> <h2> - <span class="text">45 statements </span> - <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">40<span class="text"> run</span></button> + <span class="text">43 statements </span> + <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">38<span class="text"> run</span></button> <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">5<span class="text"> missing</span></button> <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">0<span class="text"> excluded</span></button> <button type="button" class="par run show_par button_toggle_par" value="par" data-shortcut="p" title="Toggle lines partially run">4<span class="text"> partial</span></button> @@ -66,8 +66,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="index.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.1.0</a>, - created at 2023-01-24 19:37 -0500 + <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.2.0</a>, + created at 2023-02-22 18:50 -0500 </p> <aside class="hidden"> <button type="button" class="button_next_chunk" data-shortcut="j"/> @@ -83,78 +83,72 @@ <h2> </header> <main id="source"> <p class="pln"><span class="n"><a id="t1" href="#t1">1</a></span><span class="t"><span class="str">""" Indentation utilities for Cog.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t2" href="#t2">2</a></span><span class="t"><span class="str"> http://nedbatchelder.com/code/cog</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2" href="#t2">2</a></span><span class="t"><span class="str">"""</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t3" href="#t3">3</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t4" href="#t4">4</a></span><span class="t"><span class="str"> Copyright 2004-2019, Ned Batchelder.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t5" href="#t5">5</a></span><span class="t"><span class="str">"""</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t4" href="#t4">4</a></span><span class="t"><span class="key">import</span> <span class="nam">re</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t5" href="#t5">5</a></span><span class="t"> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t6" href="#t6">6</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t7" href="#t7">7</a></span><span class="t"><span class="key">from</span> <span class="nam">__future__</span> <span class="key">import</span> <span class="nam">absolute_import</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t8" href="#t8">8</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t9" href="#t9">9</a></span><span class="t"><span class="key">import</span> <span class="nam">re</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t10" href="#t10">10</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t11" href="#t11">11</a></span><span class="t"><span class="key">from</span> <span class="op">.</span><span class="nam">backward</span> <span class="key">import</span> <span class="nam">string_types</span><span class="op">,</span> <span class="nam">bytes_types</span><span class="op">,</span> <span class="nam">to_bytes</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t12" href="#t12">12</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t13" href="#t13">13</a></span><span class="t"><span class="key">def</span> <span class="nam">whitePrefix</span><span class="op">(</span><span class="nam">strings</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t14" href="#t14">14</a></span><span class="t"> <span class="str">""" Determine the whitespace prefix common to all non-blank lines</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t15" href="#t15">15</a></span><span class="t"><span class="str"> in the argument list.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t16" href="#t16">16</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t17" href="#t17">17</a></span><span class="t"> <span class="com"># Remove all blank lines from the list</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t18" href="#t18">18</a></span><span class="t"> <span class="nam">strings</span> <span class="op">=</span> <span class="op">[</span><span class="nam">s</span> <span class="key">for</span> <span class="nam">s</span> <span class="key">in</span> <span class="nam">strings</span> <span class="key">if</span> <span class="nam">s</span><span class="op">.</span><span class="nam">strip</span><span class="op">(</span><span class="op">)</span> <span class="op">!=</span> <span class="str">''</span><span class="op">]</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t19" href="#t19">19</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t20" href="#t20">20</a></span><span class="t"> <span class="key">if</span> <span class="key">not</span> <span class="nam">strings</span><span class="op">:</span> <span class="key">return</span> <span class="str">''</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t21" href="#t21">21</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t22" href="#t22">22</a></span><span class="t"> <span class="com"># Find initial whitespace chunk in the first line.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t23" href="#t23">23</a></span><span class="t"> <span class="com"># This is the best prefix we can hope for.</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t24" href="#t24">24</a></span><span class="t"> <span class="nam">pat</span> <span class="op">=</span> <span class="str">r'\s*'</span> </span><span class="r"></span></p> - <p class="par run show_par"><span class="n"><a id="t25" href="#t25">25</a></span><span class="t"> <span class="key">if</span> <span class="nam">isinstance</span><span class="op">(</span><span class="nam">strings</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">,</span> <span class="nam">bytes_types</span><span class="op">)</span><span class="op">:</span> </span><span class="r"><span class="annotate short">25 ↛ 26</span><span class="annotate long">line 25 didn't jump to line 26, because the condition on line 25 was never true</span></span></p> - <p class="mis show_mis"><span class="n"><a id="t26" href="#t26">26</a></span><span class="t"> <span class="nam">pat</span> <span class="op">=</span> <span class="nam">to_bytes</span><span class="op">(</span><span class="nam">pat</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t27" href="#t27">27</a></span><span class="t"> <span class="nam">prefix</span> <span class="op">=</span> <span class="nam">re</span><span class="op">.</span><span class="nam">match</span><span class="op">(</span><span class="nam">pat</span><span class="op">,</span> <span class="nam">strings</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">)</span><span class="op">.</span><span class="nam">group</span><span class="op">(</span><span class="num">0</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t28" href="#t28">28</a></span><span class="t"> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t29" href="#t29">29</a></span><span class="t"> <span class="com"># Loop over the other strings, keeping only as much of</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t30" href="#t30">30</a></span><span class="t"> <span class="com"># the prefix as matches each string.</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t31" href="#t31">31</a></span><span class="t"> <span class="key">for</span> <span class="nam">s</span> <span class="key">in</span> <span class="nam">strings</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t32" href="#t32">32</a></span><span class="t"> <span class="key">for</span> <span class="nam">i</span> <span class="key">in</span> <span class="nam">range</span><span class="op">(</span><span class="nam">len</span><span class="op">(</span><span class="nam">prefix</span><span class="op">)</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="par run show_par"><span class="n"><a id="t33" href="#t33">33</a></span><span class="t"> <span class="key">if</span> <span class="nam">prefix</span><span class="op">[</span><span class="nam">i</span><span class="op">]</span> <span class="op">!=</span> <span class="nam">s</span><span class="op">[</span><span class="nam">i</span><span class="op">]</span><span class="op">:</span> </span><span class="r"><span class="annotate short">33 ↛ 34</span><span class="annotate long">line 33 didn't jump to line 34, because the condition on line 33 was never true</span></span></p> - <p class="mis show_mis"><span class="n"><a id="t34" href="#t34">34</a></span><span class="t"> <span class="nam">prefix</span> <span class="op">=</span> <span class="nam">prefix</span><span class="op">[</span><span class="op">:</span><span class="nam">i</span><span class="op">]</span> </span><span class="r"></span></p> - <p class="mis show_mis"><span class="n"><a id="t35" href="#t35">35</a></span><span class="t"> <span class="key">break</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t36" href="#t36">36</a></span><span class="t"> <span class="key">return</span> <span class="nam">prefix</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t37" href="#t37">37</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t38" href="#t38">38</a></span><span class="t"><span class="key">def</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">lines</span><span class="op">,</span> <span class="nam">newIndent</span><span class="op">=</span><span class="str">''</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t39" href="#t39">39</a></span><span class="t"> <span class="str">""" Take a block of text as a string or list of lines.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t40" href="#t40">40</a></span><span class="t"><span class="str"> Remove any common whitespace indentation.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t41" href="#t41">41</a></span><span class="t"><span class="str"> Re-indent using newIndent, and return it as a single string.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t42" href="#t42">42</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t43" href="#t43">43</a></span><span class="t"> <span class="nam">sep</span><span class="op">,</span> <span class="nam">nothing</span> <span class="op">=</span> <span class="str">'\n'</span><span class="op">,</span> <span class="str">''</span> </span><span class="r"></span></p> - <p class="par run show_par"><span class="n"><a id="t44" href="#t44">44</a></span><span class="t"> <span class="key">if</span> <span class="nam">isinstance</span><span class="op">(</span><span class="nam">lines</span><span class="op">,</span> <span class="nam">bytes_types</span><span class="op">)</span><span class="op">:</span> </span><span class="r"><span class="annotate short">44 ↛ 45</span><span class="annotate long">line 44 didn't jump to line 45, because the condition on line 44 was never true</span></span></p> - <p class="mis show_mis"><span class="n"><a id="t45" href="#t45">45</a></span><span class="t"> <span class="nam">sep</span><span class="op">,</span> <span class="nam">nothing</span> <span class="op">=</span> <span class="str">b'\n'</span><span class="op">,</span> <span class="str">b''</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t46" href="#t46">46</a></span><span class="t"> <span class="key">if</span> <span class="nam">isinstance</span><span class="op">(</span><span class="nam">lines</span><span class="op">,</span> <span class="nam">string_types</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t47" href="#t47">47</a></span><span class="t"> <span class="nam">lines</span> <span class="op">=</span> <span class="nam">lines</span><span class="op">.</span><span class="nam">split</span><span class="op">(</span><span class="nam">sep</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t48" href="#t48">48</a></span><span class="t"> <span class="nam">oldIndent</span> <span class="op">=</span> <span class="nam">whitePrefix</span><span class="op">(</span><span class="nam">lines</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t49" href="#t49">49</a></span><span class="t"> <span class="nam">outLines</span> <span class="op">=</span> <span class="op">[</span><span class="op">]</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t50" href="#t50">50</a></span><span class="t"> <span class="key">for</span> <span class="nam">l</span> <span class="key">in</span> <span class="nam">lines</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t51" href="#t51">51</a></span><span class="t"> <span class="key">if</span> <span class="nam">oldIndent</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t52" href="#t52">52</a></span><span class="t"> <span class="nam">l</span> <span class="op">=</span> <span class="nam">l</span><span class="op">.</span><span class="nam">replace</span><span class="op">(</span><span class="nam">oldIndent</span><span class="op">,</span> <span class="nam">nothing</span><span class="op">,</span> <span class="num">1</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t53" href="#t53">53</a></span><span class="t"> <span class="key">if</span> <span class="nam">l</span> <span class="key">and</span> <span class="nam">newIndent</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t54" href="#t54">54</a></span><span class="t"> <span class="nam">l</span> <span class="op">=</span> <span class="nam">newIndent</span> <span class="op">+</span> <span class="nam">l</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t55" href="#t55">55</a></span><span class="t"> <span class="nam">outLines</span><span class="op">.</span><span class="nam">append</span><span class="op">(</span><span class="nam">l</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t56" href="#t56">56</a></span><span class="t"> <span class="key">return</span> <span class="nam">sep</span><span class="op">.</span><span class="nam">join</span><span class="op">(</span><span class="nam">outLines</span><span class="op">)</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t57" href="#t57">57</a></span><span class="t"> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t58" href="#t58">58</a></span><span class="t"><span class="key">def</span> <span class="nam">commonPrefix</span><span class="op">(</span><span class="nam">strings</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t59" href="#t59">59</a></span><span class="t"> <span class="str">""" Find the longest string that is a prefix of all the strings.</span> </span><span class="r"></span></p> - <p class="pln"><span class="n"><a id="t60" href="#t60">60</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> - <p class="par run show_par"><span class="n"><a id="t61" href="#t61">61</a></span><span class="t"> <span class="key">if</span> <span class="key">not</span> <span class="nam">strings</span><span class="op">:</span> </span><span class="r"><span class="annotate short">61 ↛ 62</span><span class="annotate long">line 61 didn't jump to line 62, because the condition on line 61 was never true</span></span></p> - <p class="mis show_mis"><span class="n"><a id="t62" href="#t62">62</a></span><span class="t"> <span class="key">return</span> <span class="str">''</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t63" href="#t63">63</a></span><span class="t"> <span class="nam">prefix</span> <span class="op">=</span> <span class="nam">strings</span><span class="op">[</span><span class="num">0</span><span class="op">]</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t64" href="#t64">64</a></span><span class="t"> <span class="key">for</span> <span class="nam">s</span> <span class="key">in</span> <span class="nam">strings</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t65" href="#t65">65</a></span><span class="t"> <span class="key">if</span> <span class="nam">len</span><span class="op">(</span><span class="nam">s</span><span class="op">)</span> <span class="op"><</span> <span class="nam">len</span><span class="op">(</span><span class="nam">prefix</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t66" href="#t66">66</a></span><span class="t"> <span class="nam">prefix</span> <span class="op">=</span> <span class="nam">prefix</span><span class="op">[</span><span class="op">:</span><span class="nam">len</span><span class="op">(</span><span class="nam">s</span><span class="op">)</span><span class="op">]</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t67" href="#t67">67</a></span><span class="t"> <span class="key">if</span> <span class="key">not</span> <span class="nam">prefix</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t68" href="#t68">68</a></span><span class="t"> <span class="key">return</span> <span class="str">''</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t69" href="#t69">69</a></span><span class="t"> <span class="key">for</span> <span class="nam">i</span> <span class="key">in</span> <span class="nam">range</span><span class="op">(</span><span class="nam">len</span><span class="op">(</span><span class="nam">prefix</span><span class="op">)</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t70" href="#t70">70</a></span><span class="t"> <span class="key">if</span> <span class="nam">prefix</span><span class="op">[</span><span class="nam">i</span><span class="op">]</span> <span class="op">!=</span> <span class="nam">s</span><span class="op">[</span><span class="nam">i</span><span class="op">]</span><span class="op">:</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t71" href="#t71">71</a></span><span class="t"> <span class="nam">prefix</span> <span class="op">=</span> <span class="nam">prefix</span><span class="op">[</span><span class="op">:</span><span class="nam">i</span><span class="op">]</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t72" href="#t72">72</a></span><span class="t"> <span class="key">break</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t73" href="#t73">73</a></span><span class="t"> <span class="key">return</span> <span class="nam">prefix</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t7" href="#t7">7</a></span><span class="t"><span class="key">def</span> <span class="nam">whitePrefix</span><span class="op">(</span><span class="nam">strings</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t8" href="#t8">8</a></span><span class="t"> <span class="str">""" Determine the whitespace prefix common to all non-blank lines</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t9" href="#t9">9</a></span><span class="t"><span class="str"> in the argument list.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t10" href="#t10">10</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t11" href="#t11">11</a></span><span class="t"> <span class="com"># Remove all blank lines from the list</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t12" href="#t12">12</a></span><span class="t"> <span class="nam">strings</span> <span class="op">=</span> <span class="op">[</span><span class="nam">s</span> <span class="key">for</span> <span class="nam">s</span> <span class="key">in</span> <span class="nam">strings</span> <span class="key">if</span> <span class="nam">s</span><span class="op">.</span><span class="nam">strip</span><span class="op">(</span><span class="op">)</span> <span class="op">!=</span> <span class="str">''</span><span class="op">]</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t13" href="#t13">13</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t14" href="#t14">14</a></span><span class="t"> <span class="key">if</span> <span class="key">not</span> <span class="nam">strings</span><span class="op">:</span> <span class="key">return</span> <span class="str">''</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t15" href="#t15">15</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t16" href="#t16">16</a></span><span class="t"> <span class="com"># Find initial whitespace chunk in the first line.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t17" href="#t17">17</a></span><span class="t"> <span class="com"># This is the best prefix we can hope for.</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t18" href="#t18">18</a></span><span class="t"> <span class="nam">pat</span> <span class="op">=</span> <span class="str">r'\s*'</span> </span><span class="r"></span></p> + <p class="par run show_par"><span class="n"><a id="t19" href="#t19">19</a></span><span class="t"> <span class="key">if</span> <span class="nam">isinstance</span><span class="op">(</span><span class="nam">strings</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">,</span> <span class="nam">bytes</span><span class="op">)</span><span class="op">:</span> </span><span class="r"><span class="annotate short">19 ↛ 20</span><span class="annotate long">line 19 didn't jump to line 20, because the condition on line 19 was never true</span></span></p> + <p class="mis show_mis"><span class="n"><a id="t20" href="#t20">20</a></span><span class="t"> <span class="nam">pat</span> <span class="op">=</span> <span class="nam">pat</span><span class="op">.</span><span class="nam">encode</span><span class="op">(</span><span class="str">"utf-8"</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t21" href="#t21">21</a></span><span class="t"> <span class="nam">prefix</span> <span class="op">=</span> <span class="nam">re</span><span class="op">.</span><span class="nam">match</span><span class="op">(</span><span class="nam">pat</span><span class="op">,</span> <span class="nam">strings</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">)</span><span class="op">.</span><span class="nam">group</span><span class="op">(</span><span class="num">0</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t22" href="#t22">22</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t23" href="#t23">23</a></span><span class="t"> <span class="com"># Loop over the other strings, keeping only as much of</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t24" href="#t24">24</a></span><span class="t"> <span class="com"># the prefix as matches each string.</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t25" href="#t25">25</a></span><span class="t"> <span class="key">for</span> <span class="nam">s</span> <span class="key">in</span> <span class="nam">strings</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t26" href="#t26">26</a></span><span class="t"> <span class="key">for</span> <span class="nam">i</span> <span class="key">in</span> <span class="nam">range</span><span class="op">(</span><span class="nam">len</span><span class="op">(</span><span class="nam">prefix</span><span class="op">)</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="par run show_par"><span class="n"><a id="t27" href="#t27">27</a></span><span class="t"> <span class="key">if</span> <span class="nam">prefix</span><span class="op">[</span><span class="nam">i</span><span class="op">]</span> <span class="op">!=</span> <span class="nam">s</span><span class="op">[</span><span class="nam">i</span><span class="op">]</span><span class="op">:</span> </span><span class="r"><span class="annotate short">27 ↛ 28</span><span class="annotate long">line 27 didn't jump to line 28, because the condition on line 27 was never true</span></span></p> + <p class="mis show_mis"><span class="n"><a id="t28" href="#t28">28</a></span><span class="t"> <span class="nam">prefix</span> <span class="op">=</span> <span class="nam">prefix</span><span class="op">[</span><span class="op">:</span><span class="nam">i</span><span class="op">]</span> </span><span class="r"></span></p> + <p class="mis show_mis"><span class="n"><a id="t29" href="#t29">29</a></span><span class="t"> <span class="key">break</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t30" href="#t30">30</a></span><span class="t"> <span class="key">return</span> <span class="nam">prefix</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t31" href="#t31">31</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t32" href="#t32">32</a></span><span class="t"><span class="key">def</span> <span class="nam">reindentBlock</span><span class="op">(</span><span class="nam">lines</span><span class="op">,</span> <span class="nam">newIndent</span><span class="op">=</span><span class="str">''</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t33" href="#t33">33</a></span><span class="t"> <span class="str">""" Take a block of text as a string or list of lines.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t34" href="#t34">34</a></span><span class="t"><span class="str"> Remove any common whitespace indentation.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t35" href="#t35">35</a></span><span class="t"><span class="str"> Re-indent using newIndent, and return it as a single string.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t36" href="#t36">36</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t37" href="#t37">37</a></span><span class="t"> <span class="nam">sep</span><span class="op">,</span> <span class="nam">nothing</span> <span class="op">=</span> <span class="str">'\n'</span><span class="op">,</span> <span class="str">''</span> </span><span class="r"></span></p> + <p class="par run show_par"><span class="n"><a id="t38" href="#t38">38</a></span><span class="t"> <span class="key">if</span> <span class="nam">isinstance</span><span class="op">(</span><span class="nam">lines</span><span class="op">,</span> <span class="nam">bytes</span><span class="op">)</span><span class="op">:</span> </span><span class="r"><span class="annotate short">38 ↛ 39</span><span class="annotate long">line 38 didn't jump to line 39, because the condition on line 38 was never true</span></span></p> + <p class="mis show_mis"><span class="n"><a id="t39" href="#t39">39</a></span><span class="t"> <span class="nam">sep</span><span class="op">,</span> <span class="nam">nothing</span> <span class="op">=</span> <span class="str">b'\n'</span><span class="op">,</span> <span class="str">b''</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t40" href="#t40">40</a></span><span class="t"> <span class="key">if</span> <span class="nam">isinstance</span><span class="op">(</span><span class="nam">lines</span><span class="op">,</span> <span class="op">(</span><span class="nam">bytes</span><span class="op">,</span> <span class="nam">str</span><span class="op">)</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t41" href="#t41">41</a></span><span class="t"> <span class="nam">lines</span> <span class="op">=</span> <span class="nam">lines</span><span class="op">.</span><span class="nam">split</span><span class="op">(</span><span class="nam">sep</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t42" href="#t42">42</a></span><span class="t"> <span class="nam">oldIndent</span> <span class="op">=</span> <span class="nam">whitePrefix</span><span class="op">(</span><span class="nam">lines</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t43" href="#t43">43</a></span><span class="t"> <span class="nam">outLines</span> <span class="op">=</span> <span class="op">[</span><span class="op">]</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t44" href="#t44">44</a></span><span class="t"> <span class="key">for</span> <span class="nam">l</span> <span class="key">in</span> <span class="nam">lines</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t45" href="#t45">45</a></span><span class="t"> <span class="key">if</span> <span class="nam">oldIndent</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t46" href="#t46">46</a></span><span class="t"> <span class="nam">l</span> <span class="op">=</span> <span class="nam">l</span><span class="op">.</span><span class="nam">replace</span><span class="op">(</span><span class="nam">oldIndent</span><span class="op">,</span> <span class="nam">nothing</span><span class="op">,</span> <span class="num">1</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t47" href="#t47">47</a></span><span class="t"> <span class="key">if</span> <span class="nam">l</span> <span class="key">and</span> <span class="nam">newIndent</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t48" href="#t48">48</a></span><span class="t"> <span class="nam">l</span> <span class="op">=</span> <span class="nam">newIndent</span> <span class="op">+</span> <span class="nam">l</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t49" href="#t49">49</a></span><span class="t"> <span class="nam">outLines</span><span class="op">.</span><span class="nam">append</span><span class="op">(</span><span class="nam">l</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t50" href="#t50">50</a></span><span class="t"> <span class="key">return</span> <span class="nam">sep</span><span class="op">.</span><span class="nam">join</span><span class="op">(</span><span class="nam">outLines</span><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t51" href="#t51">51</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t52" href="#t52">52</a></span><span class="t"><span class="key">def</span> <span class="nam">commonPrefix</span><span class="op">(</span><span class="nam">strings</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t53" href="#t53">53</a></span><span class="t"> <span class="str">""" Find the longest string that is a prefix of all the strings.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t54" href="#t54">54</a></span><span class="t"><span class="str"> """</span> </span><span class="r"></span></p> + <p class="par run show_par"><span class="n"><a id="t55" href="#t55">55</a></span><span class="t"> <span class="key">if</span> <span class="key">not</span> <span class="nam">strings</span><span class="op">:</span> </span><span class="r"><span class="annotate short">55 ↛ 56</span><span class="annotate long">line 55 didn't jump to line 56, because the condition on line 55 was never true</span></span></p> + <p class="mis show_mis"><span class="n"><a id="t56" href="#t56">56</a></span><span class="t"> <span class="key">return</span> <span class="str">''</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t57" href="#t57">57</a></span><span class="t"> <span class="nam">prefix</span> <span class="op">=</span> <span class="nam">strings</span><span class="op">[</span><span class="num">0</span><span class="op">]</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t58" href="#t58">58</a></span><span class="t"> <span class="key">for</span> <span class="nam">s</span> <span class="key">in</span> <span class="nam">strings</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t59" href="#t59">59</a></span><span class="t"> <span class="key">if</span> <span class="nam">len</span><span class="op">(</span><span class="nam">s</span><span class="op">)</span> <span class="op"><</span> <span class="nam">len</span><span class="op">(</span><span class="nam">prefix</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t60" href="#t60">60</a></span><span class="t"> <span class="nam">prefix</span> <span class="op">=</span> <span class="nam">prefix</span><span class="op">[</span><span class="op">:</span><span class="nam">len</span><span class="op">(</span><span class="nam">s</span><span class="op">)</span><span class="op">]</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t61" href="#t61">61</a></span><span class="t"> <span class="key">if</span> <span class="key">not</span> <span class="nam">prefix</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t62" href="#t62">62</a></span><span class="t"> <span class="key">return</span> <span class="str">''</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t63" href="#t63">63</a></span><span class="t"> <span class="key">for</span> <span class="nam">i</span> <span class="key">in</span> <span class="nam">range</span><span class="op">(</span><span class="nam">len</span><span class="op">(</span><span class="nam">prefix</span><span class="op">)</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t64" href="#t64">64</a></span><span class="t"> <span class="key">if</span> <span class="nam">prefix</span><span class="op">[</span><span class="nam">i</span><span class="op">]</span> <span class="op">!=</span> <span class="nam">s</span><span class="op">[</span><span class="nam">i</span><span class="op">]</span><span class="op">:</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t65" href="#t65">65</a></span><span class="t"> <span class="nam">prefix</span> <span class="op">=</span> <span class="nam">prefix</span><span class="op">[</span><span class="op">:</span><span class="nam">i</span><span class="op">]</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t66" href="#t66">66</a></span><span class="t"> <span class="key">break</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t67" href="#t67">67</a></span><span class="t"> <span class="key">return</span> <span class="nam">prefix</span> </span><span class="r"></span></p> </main> <footer> <div class="content"> @@ -163,8 +157,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="index.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.1.0</a>, - created at 2023-01-24 19:37 -0500 + <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.2.0</a>, + created at 2023-02-22 18:50 -0500 </p> </div> </footer> diff --git a/doc/sample_html/index.html b/doc/sample_html/index.html index 5c735a4f2..9cd539d65 100644 --- a/doc/sample_html/index.html +++ b/doc/sample_html/index.html @@ -11,7 +11,7 @@ <header> <div class="content"> <h1>Cog coverage: - <span class="pc_cov">39.11%</span> + <span class="pc_cov">38.75%</span> </h1> <aside id="help_panel_wrapper"> <input id="help_panel_state" type="checkbox"> @@ -46,8 +46,8 @@ <h1>Cog coverage: <input id="filter" type="text" value="" placeholder="filter..." /> </form> <p class="text"> - <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.1.0</a>, - created at 2023-01-24 19:37 -0500 + <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.2.0</a>, + created at 2023-02-22 18:50 -0500 </p> </div> </header> @@ -67,12 +67,12 @@ <h1>Cog coverage: <tbody> <tr class="file"> <td class="name left"><a href="d_7b071bdc2a35fa80___init___py.html">cogapp/__init__.py</a></td> - <td>2</td> + <td>1</td> <td>0</td> <td>0</td> <td>0</td> <td>0</td> - <td class="right" data-ratio="2 2">100.00%</td> + <td class="right" data-ratio="1 1">100.00%</td> </tr> <tr class="file"> <td class="name left"><a href="d_7b071bdc2a35fa80___main___py.html">cogapp/__main__.py</a></td> @@ -83,79 +83,70 @@ <h1>Cog coverage: <td>0</td> <td class="right" data-ratio="0 3">0.00%</td> </tr> - <tr class="file"> - <td class="name left"><a href="d_7b071bdc2a35fa80_backward_py.html">cogapp/backward.py</a></td> - <td>22</td> - <td>6</td> - <td>0</td> - <td>4</td> - <td>2</td> - <td class="right" data-ratio="18 26">69.23%</td> - </tr> <tr class="file"> <td class="name left"><a href="d_7b071bdc2a35fa80_cogapp_py.html">cogapp/cogapp.py</a></td> - <td>510</td> - <td>230</td> + <td>500</td> + <td>224</td> <td>1</td> - <td>216</td> + <td>210</td> <td>30</td> - <td class="right" data-ratio="352 726">48.48%</td> + <td class="right" data-ratio="348 710">49.01%</td> </tr> <tr class="file"> <td class="name left"><a href="d_7b071bdc2a35fa80_makefiles_py.html">cogapp/makefiles.py</a></td> - <td>27</td> - <td>20</td> + <td>22</td> + <td>18</td> <td>0</td> <td>14</td> <td>0</td> - <td class="right" data-ratio="7 41">17.07%</td> + <td class="right" data-ratio="4 36">11.11%</td> </tr> <tr class="file"> <td class="name left"><a href="d_7b071bdc2a35fa80_test_cogapp_py.html">cogapp/test_cogapp.py</a></td> - <td>849</td> - <td>595</td> + <td>845</td> + <td>591</td> <td>2</td> - <td>28</td> + <td>24</td> <td>1</td> - <td class="right" data-ratio="257 877">29.30%</td> + <td class="right" data-ratio="257 869">29.57%</td> </tr> <tr class="file"> <td class="name left"><a href="d_7b071bdc2a35fa80_test_makefiles_py.html">cogapp/test_makefiles.py</a></td> - <td>71</td> + <td>70</td> <td>53</td> <td>0</td> <td>6</td> <td>0</td> - <td class="right" data-ratio="18 77">23.38%</td> + <td class="right" data-ratio="17 76">22.37%</td> </tr> <tr class="file"> <td class="name left"><a href="d_7b071bdc2a35fa80_test_whiteutils_py.html">cogapp/test_whiteutils.py</a></td> - <td>69</td> + <td>68</td> <td>50</td> <td>0</td> <td>0</td> <td>0</td> - <td class="right" data-ratio="19 69">27.54%</td> + <td class="right" data-ratio="18 68">26.47%</td> </tr> <tr class="file"> <td class="name left"><a href="d_7b071bdc2a35fa80_whiteutils_py.html">cogapp/whiteutils.py</a></td> - <td>45</td> + <td>43</td> <td>5</td> <td>0</td> <td>34</td> <td>4</td> - <td class="right" data-ratio="70 79">88.61%</td> + <td class="right" data-ratio="68 77">88.31%</td> </tr> </tbody> <tfoot> <tr class="total"> <td class="name left">Total</td> - <td>1598</td> - <td>962</td> + <td>1552</td> + <td>944</td> <td>3</td> - <td>302</td> - <td>37</td> - <td class="right" data-ratio="743 1900">39.11%</td> + <td>288</td> + <td>35</td> + <td class="right" data-ratio="713 1840">38.75%</td> </tr> </tfoot> </table> @@ -166,8 +157,8 @@ <h1>Cog coverage: <footer> <div class="content"> <p> - <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.1.0</a>, - created at 2023-01-24 19:37 -0500 + <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.2.0</a>, + created at 2023-02-22 18:50 -0500 </p> </div> <aside class="hidden"> diff --git a/doc/sample_html/status.json b/doc/sample_html/status.json index f44f9af0b..236774d3e 100644 --- a/doc/sample_html/status.json +++ b/doc/sample_html/status.json @@ -1 +1 @@ -{"format":2,"version":"7.1.0","globals":"7055224a7bc2d5650caf977ebd61f5fe","files":{"d_7b071bdc2a35fa80___init___py":{"hash":"29cdbd59f3692c82f37e41536e3a2417","index":{"nums":[2,1,2,0,0,0,0,0],"html_filename":"d_7b071bdc2a35fa80___init___py.html","relative_filename":"cogapp/__init__.py"}},"d_7b071bdc2a35fa80___main___py":{"hash":"ffe6befa655d4d0b0b31eb0c73811311","index":{"nums":[2,1,3,0,3,0,0,0],"html_filename":"d_7b071bdc2a35fa80___main___py.html","relative_filename":"cogapp/__main__.py"}},"d_7b071bdc2a35fa80_backward_py":{"hash":"8f127f1e99243534806b5e7842d7bd7c","index":{"nums":[2,1,22,0,6,4,2,2],"html_filename":"d_7b071bdc2a35fa80_backward_py.html","relative_filename":"cogapp/backward.py"}},"d_7b071bdc2a35fa80_cogapp_py":{"hash":"659112bebf3e453082a54c29ddc9be18","index":{"nums":[2,1,510,1,230,216,30,144],"html_filename":"d_7b071bdc2a35fa80_cogapp_py.html","relative_filename":"cogapp/cogapp.py"}},"d_7b071bdc2a35fa80_makefiles_py":{"hash":"4cac5bcd4b2151cb0f865736ff610acc","index":{"nums":[2,1,27,0,20,14,0,14],"html_filename":"d_7b071bdc2a35fa80_makefiles_py.html","relative_filename":"cogapp/makefiles.py"}},"d_7b071bdc2a35fa80_test_cogapp_py":{"hash":"dab21c99d2584fd9dd1245ae7eb199cd","index":{"nums":[2,1,849,2,595,28,1,25],"html_filename":"d_7b071bdc2a35fa80_test_cogapp_py.html","relative_filename":"cogapp/test_cogapp.py"}},"d_7b071bdc2a35fa80_test_makefiles_py":{"hash":"150060801c7a23f407563647d09899ff","index":{"nums":[2,1,71,0,53,6,0,6],"html_filename":"d_7b071bdc2a35fa80_test_makefiles_py.html","relative_filename":"cogapp/test_makefiles.py"}},"d_7b071bdc2a35fa80_test_whiteutils_py":{"hash":"6c4e351912582b16a450ab46df5d390c","index":{"nums":[2,1,69,0,50,0,0,0],"html_filename":"d_7b071bdc2a35fa80_test_whiteutils_py.html","relative_filename":"cogapp/test_whiteutils.py"}},"d_7b071bdc2a35fa80_whiteutils_py":{"hash":"755965ecdf5d51b6b9350f179070494f","index":{"nums":[2,1,45,0,5,34,4,4],"html_filename":"d_7b071bdc2a35fa80_whiteutils_py.html","relative_filename":"cogapp/whiteutils.py"}}}} \ No newline at end of file +{"format":2,"version":"7.2.0","globals":"06b1ac9f4a6596354db77ceb72079454","files":{"d_7b071bdc2a35fa80___init___py":{"hash":"70ef41e14b11d599cdbcf53f562ebb16","index":{"nums":[2,1,1,0,0,0,0,0],"html_filename":"d_7b071bdc2a35fa80___init___py.html","relative_filename":"cogapp/__init__.py"}},"d_7b071bdc2a35fa80___main___py":{"hash":"6d9d0d551879aa3e73791f40c5739845","index":{"nums":[2,1,3,0,3,0,0,0],"html_filename":"d_7b071bdc2a35fa80___main___py.html","relative_filename":"cogapp/__main__.py"}},"d_7b071bdc2a35fa80_cogapp_py":{"hash":"7428c811d741c23b10655ff6c20fb85f","index":{"nums":[2,1,500,1,224,210,30,138],"html_filename":"d_7b071bdc2a35fa80_cogapp_py.html","relative_filename":"cogapp/cogapp.py"}},"d_7b071bdc2a35fa80_makefiles_py":{"hash":"4b73eaf76fbb53af575b40165e831aac","index":{"nums":[2,1,22,0,18,14,0,14],"html_filename":"d_7b071bdc2a35fa80_makefiles_py.html","relative_filename":"cogapp/makefiles.py"}},"d_7b071bdc2a35fa80_test_cogapp_py":{"hash":"34099de695d2cac204436597408d33d2","index":{"nums":[2,1,845,2,591,24,1,21],"html_filename":"d_7b071bdc2a35fa80_test_cogapp_py.html","relative_filename":"cogapp/test_cogapp.py"}},"d_7b071bdc2a35fa80_test_makefiles_py":{"hash":"63fd1bdc011935abfd11301da94b383e","index":{"nums":[2,1,70,0,53,6,0,6],"html_filename":"d_7b071bdc2a35fa80_test_makefiles_py.html","relative_filename":"cogapp/test_makefiles.py"}},"d_7b071bdc2a35fa80_test_whiteutils_py":{"hash":"ec69457cbd6dfbc85eefabdfc0931c99","index":{"nums":[2,1,68,0,50,0,0,0],"html_filename":"d_7b071bdc2a35fa80_test_whiteutils_py.html","relative_filename":"cogapp/test_whiteutils.py"}},"d_7b071bdc2a35fa80_whiteutils_py":{"hash":"6dbf59193ab1bdcba86b017c86bb4724","index":{"nums":[2,1,43,0,5,34,4,4],"html_filename":"d_7b071bdc2a35fa80_whiteutils_py.html","relative_filename":"cogapp/whiteutils.py"}}}} \ No newline at end of file From e2e9d6ebe70ba3e56b7089fc63c6a1173275e666 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Wed, 22 Feb 2023 20:03:54 -0500 Subject: [PATCH 072/139] build: bump version --- CHANGES.rst | 6 ++++++ coverage/version.py | 4 ++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index d62d8f5f6..ac5d29b67 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -17,6 +17,12 @@ development at the same time, such as 4.5.x and 5.0. .. Version 9.8.1 — 2027-07-27 .. -------------------------- +Unreleased +---------- + +Nothing yet. + + .. scriv-start-here .. _changes_7-2-0: diff --git a/coverage/version.py b/coverage/version.py index 592ae30ba..48e5f2b95 100644 --- a/coverage/version.py +++ b/coverage/version.py @@ -8,8 +8,8 @@ # version_info: same semantics as sys.version_info. # _dev: the .devN suffix if any. -version_info = (7, 2, 0, "final", 0) -_dev = 0 +version_info = (7, 2, 1, "alpha", 0) +_dev = 1 def _make_version( From 808daea0e900509a49dbfd4fa00e21140ec1e787 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Thu, 23 Feb 2023 06:45:24 -0500 Subject: [PATCH 073/139] chore: make upgrade --- doc/requirements.pip | 24 ++++++------- requirements/dev.pip | 42 +++++++++++----------- requirements/kit.pip | 12 +++---- requirements/lint.pip | 54 ++++++++++++++-------------- requirements/mypy.pip | 72 +++++++++++++++++++------------------- requirements/pip-tools.pip | 18 +++++----- requirements/pip.pip | 18 +++++----- requirements/pytest.pip | 18 +++++----- requirements/tox.pip | 18 +++++----- 9 files changed, 138 insertions(+), 138 deletions(-) diff --git a/doc/requirements.pip b/doc/requirements.pip index 875333d05..8b368e77c 100644 --- a/doc/requirements.pip +++ b/doc/requirements.pip @@ -237,9 +237,9 @@ requests==2.28.2 \ # via # scriv # sphinx -scriv==1.2.0 \ - --hash=sha256:26b65a903da7d9aefc712a0d4150b8638302b4758bd428bbd773dd918c61c621 \ - --hash=sha256:bb61c30fea73158a4d18c28bbb57821c308245683efb0d897bd45e4a7856b472 +scriv==1.2.1 \ + --hash=sha256:0ceec6243ebf02f6a685507eec72f890ca9d9da4cafcfcfce640b1f027cec17d \ + --hash=sha256:95edfd76642cf7ae6b5cd40975545d8af58f6398cabfe83ff755e8eedb8ddd4e # via -r doc/requirements.in six==1.16.0 \ --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ @@ -298,9 +298,9 @@ sphinxcontrib-serializinghtml==1.1.5 \ --hash=sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd \ --hash=sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952 # via sphinx -sphinxcontrib-spelling==7.7.0 \ - --hash=sha256:56561c3f6a155b0946914e4de988729859315729dc181b5e4dc8a68fe78de35a \ - --hash=sha256:95a0defef8ffec6526f9e83b20cc24b08c9179298729d87976891840e3aa3064 +sphinxcontrib-spelling==8.0.0 \ + --hash=sha256:199d0a16902ad80c387c2966dc9eb10f565b1fb15ccce17210402db7c2443e5c \ + --hash=sha256:b27e0a16aef00bcfc888a6490dc3f16651f901dc475446c6882834278c8dc7b3 # via -r doc/requirements.in tornado==6.2 \ --hash=sha256:1d54d13ab8414ed44de07efecb97d4ef7c39f7438cf5e976ccd356bebb1b5fca \ @@ -315,17 +315,17 @@ tornado==6.2 \ --hash=sha256:d3a2f5999215a3a06a4fc218026cd84c61b8b2b40ac5296a6db1f1451ef04c1e \ --hash=sha256:e5f923aa6a47e133d1cf87d60700889d7eae68988704e20c75fb2d65677a8e4b # via livereload -typing-extensions==4.4.0 \ - --hash=sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa \ - --hash=sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e +typing-extensions==4.5.0 \ + --hash=sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb \ + --hash=sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4 # via importlib-metadata urllib3==1.26.14 \ --hash=sha256:076907bf8fd355cde77728471316625a4d2f7e713c125f51953bb5b3eecf4f72 \ --hash=sha256:75edcdc2f7d85b137124a6c3c9fc3933cdeaa12ecb9a6a959f22797a0feca7e1 # via requests -zipp==3.13.0 \ - --hash=sha256:23f70e964bc11a34cef175bc90ba2914e1e4545ea1e3e2f67c079671883f9cb6 \ - --hash=sha256:e8b2a36ea17df80ffe9e2c4fda3f693c3dad6df1697d3cd3af232db680950b0b +zipp==3.14.0 \ + --hash=sha256:188834565033387710d046e3fe96acfc9b5e86cbca7f39ff69cf21a4128198b7 \ + --hash=sha256:9e5421e176ef5ab4c0ad896624e87a7b2f07aca746c9b2aa305952800cb8eecb # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: diff --git a/requirements/dev.pip b/requirements/dev.pip index c19b00138..d077f6694 100644 --- a/requirements/dev.pip +++ b/requirements/dev.pip @@ -246,9 +246,9 @@ greenlet==2.0.2 \ --hash=sha256:f82d4d717d8ef19188687aa32b8363e96062911e63ba22a0cff7802a8e58e5f1 \ --hash=sha256:fc3a569657468b6f3fb60587e48356fe512c1754ca05a564f11366ac9e306526 # via -r requirements/dev.in -hypothesis==6.68.1 \ - --hash=sha256:3ff6076920e61d4e6362e93edaf09be3034ea7e39e3a75e731d4d1c525dafd84 \ - --hash=sha256:b37bd77b4b7f404a59ff965e24be8aec4209323866e34ececdf416522c6d0854 +hypothesis==6.68.2 \ + --hash=sha256:2a41cc766cde52705895e54547374af89c617e8ec7bc4186cb7f03884a667d4e \ + --hash=sha256:a7eb2b0c9a18560d8197fe35047ceb58e7e8ab7623a3e5a82613f6a2cd71cffa # via -r requirements/pytest.pip idna==3.4 \ --hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 \ @@ -267,9 +267,9 @@ importlib-metadata==6.0.0 \ # tox # twine # virtualenv -importlib-resources==5.10.2 \ - --hash=sha256:7d543798b0beca10b6a01ac7cafda9f822c54db9e8376a6bf57e0cbd74d486b6 \ - --hash=sha256:e4a96c8cc0339647ff9a5e0550d9f276fc5a01ffa276012b58ec108cfd7b8484 +importlib-resources==5.12.0 \ + --hash=sha256:4be82589bf5c1d7999aedf2a45159d10cb3ca4f19b2271f8792bc8e6da7b22f6 \ + --hash=sha256:7b1deeebbf351c7578e09bf2f63fa2ce8b5ffec296e0d349139d43cca061a81a # via keyring iniconfig==2.0.0 \ --hash=sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3 \ @@ -338,9 +338,9 @@ libsass==0.22.0 \ --hash=sha256:89c5ce497fcf3aba1dd1b19aae93b99f68257e5f2026b731b00a872f13324c7f \ --hash=sha256:f1efc1b612299c88aec9e39d6ca0c266d360daa5b19d9430bdeaffffa86993f9 # via -r requirements/dev.in -markdown-it-py==2.1.0 \ - --hash=sha256:93de681e5c021a432c63147656fe21790bc01231e0cd2da73626f1aa3ac0fe27 \ - --hash=sha256:cf7e59fed14b5ae17c0006eff14a2d9a00ed5f3a846148153899a0224e2c07da +markdown-it-py==2.2.0 \ + --hash=sha256:5a35f8d1870171d9acc47b99612dc146129b631baf04970128b568f190d0cc30 \ + --hash=sha256:7c9a5e412688bc771c67432cbfebcdd686c93ce6484913dccf06cb5a0bea35a1 # via rich mccabe==0.7.0 \ --hash=sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325 \ @@ -476,9 +476,9 @@ tomlkit==0.11.6 \ --hash=sha256:07de26b0d8cfc18f871aec595fda24d95b08fef89d147caa861939f37230bf4b \ --hash=sha256:71b952e5721688937fb02cf9d354dbcf0785066149d2855e44531ebdd2b65d73 # via pylint -tox==4.4.5 \ - --hash=sha256:1081864f1a1393ffa11ebe9beaa280349020579310d217a594a4e7b6124c5425 \ - --hash=sha256:f9bc83c5da8666baa2a4d4e884bbbda124fe646e4b1c0e412949cecc2b6e8f90 +tox==4.4.6 \ + --hash=sha256:9786671d23b673ace7499c602c5746e2a225d1ecd9d9f624d0461303f40bd93b \ + --hash=sha256:e3d4a65852f029e5ba441a01824d2d839d30bb8fb071635ef9cb53952698e6bf # via # -r requirements/tox.pip # tox-gh @@ -516,9 +516,9 @@ typed-ast==1.5.4 \ --hash=sha256:ebd9d7f80ccf7a82ac5f88c521115cc55d84e35bf8b446fcd7836eb6b98929a3 \ --hash=sha256:ed855bbe3eb3715fca349c80174cfcfd699c2f9de574d40527b8429acae23a66 # via astroid -typing-extensions==4.4.0 \ - --hash=sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa \ - --hash=sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e +typing-extensions==4.5.0 \ + --hash=sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb \ + --hash=sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4 # via # -r requirements/pip.pip # -r requirements/pytest.pip @@ -620,9 +620,9 @@ wrapt==1.14.1 \ --hash=sha256:ee6acae74a2b91865910eef5e7de37dc6895ad96fa23603d1d27ea69df545015 \ --hash=sha256:ef3f72c9666bba2bab70d2a8b79f2c6d2c1a42a7f7e2b0ec83bb2f9e383950af # via astroid -zipp==3.13.0 \ - --hash=sha256:23f70e964bc11a34cef175bc90ba2914e1e4545ea1e3e2f67c079671883f9cb6 \ - --hash=sha256:e8b2a36ea17df80ffe9e2c4fda3f693c3dad6df1697d3cd3af232db680950b0b +zipp==3.14.0 \ + --hash=sha256:188834565033387710d046e3fe96acfc9b5e86cbca7f39ff69cf21a4128198b7 \ + --hash=sha256:9e5421e176ef5ab4c0ad896624e87a7b2f07aca746c9b2aa305952800cb8eecb # via # -r requirements/pip.pip # -r requirements/pytest.pip @@ -630,9 +630,9 @@ zipp==3.13.0 \ # importlib-resources # The following packages are considered to be unsafe in a requirements file: -pip==23.0 \ - --hash=sha256:aee438284e82c8def684b0bcc50b1f6ed5e941af97fa940e83e2e8ef1a59da9b \ - --hash=sha256:b5f88adff801f5ef052bcdef3daa31b55eb67b0fccd6d0106c206fa248e0463c +pip==23.0.1 \ + --hash=sha256:236bcb61156d76c4b8a05821b988c7b8c35bf0da28a4b614e8d6ab5212c25c6f \ + --hash=sha256:cd015ea1bfb0fcef59d8a286c1f8bebcb983f6317719d415dc5351efb7cd7024 # via -r requirements/pip.pip setuptools==65.7.0 \ --hash=sha256:4d3c92fac8f1118bb77a22181355e29c239cabfe2b9effdaa665c66b711136d7 \ diff --git a/requirements/kit.pip b/requirements/kit.pip index 25193660d..b8fa0a779 100644 --- a/requirements/kit.pip +++ b/requirements/kit.pip @@ -67,9 +67,9 @@ tomli==2.0.1 \ # build # cibuildwheel # pyproject-hooks -typing-extensions==4.4.0 \ - --hash=sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa \ - --hash=sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e +typing-extensions==4.5.0 \ + --hash=sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb \ + --hash=sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4 # via # cibuildwheel # importlib-metadata @@ -78,9 +78,9 @@ wheel==0.38.4 \ --hash=sha256:965f5259b566725405b05e7cf774052044b1ed30119b5d586b2703aafe8719ac \ --hash=sha256:b60533f3f5d530e971d6737ca6d58681ee434818fab630c83a734bb10c083ce8 # via -r requirements/kit.in -zipp==3.13.0 \ - --hash=sha256:23f70e964bc11a34cef175bc90ba2914e1e4545ea1e3e2f67c079671883f9cb6 \ - --hash=sha256:e8b2a36ea17df80ffe9e2c4fda3f693c3dad6df1697d3cd3af232db680950b0b +zipp==3.14.0 \ + --hash=sha256:188834565033387710d046e3fe96acfc9b5e86cbca7f39ff69cf21a4128198b7 \ + --hash=sha256:9e5421e176ef5ab4c0ad896624e87a7b2f07aca746c9b2aa305952800cb8eecb # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: diff --git a/requirements/lint.pip b/requirements/lint.pip index d5579466f..af7b9d19e 100644 --- a/requirements/lint.pip +++ b/requirements/lint.pip @@ -271,9 +271,9 @@ greenlet==2.0.2 \ --hash=sha256:f82d4d717d8ef19188687aa32b8363e96062911e63ba22a0cff7802a8e58e5f1 \ --hash=sha256:fc3a569657468b6f3fb60587e48356fe512c1754ca05a564f11366ac9e306526 # via -r requirements/dev.in -hypothesis==6.68.1 \ - --hash=sha256:3ff6076920e61d4e6362e93edaf09be3034ea7e39e3a75e731d4d1c525dafd84 \ - --hash=sha256:b37bd77b4b7f404a59ff965e24be8aec4209323866e34ececdf416522c6d0854 +hypothesis==6.68.2 \ + --hash=sha256:2a41cc766cde52705895e54547374af89c617e8ec7bc4186cb7f03884a667d4e \ + --hash=sha256:a7eb2b0c9a18560d8197fe35047ceb58e7e8ab7623a3e5a82613f6a2cd71cffa # via -r requirements/pytest.pip idna==3.4 \ --hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 \ @@ -299,9 +299,9 @@ importlib-metadata==6.0.0 \ # tox # twine # virtualenv -importlib-resources==5.10.2 \ - --hash=sha256:7d543798b0beca10b6a01ac7cafda9f822c54db9e8376a6bf57e0cbd74d486b6 \ - --hash=sha256:e4a96c8cc0339647ff9a5e0550d9f276fc5a01ffa276012b58ec108cfd7b8484 +importlib-resources==5.12.0 \ + --hash=sha256:4be82589bf5c1d7999aedf2a45159d10cb3ca4f19b2271f8792bc8e6da7b22f6 \ + --hash=sha256:7b1deeebbf351c7578e09bf2f63fa2ce8b5ffec296e0d349139d43cca061a81a # via keyring iniconfig==2.0.0 \ --hash=sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3 \ @@ -380,9 +380,9 @@ livereload==2.6.3 \ --hash=sha256:776f2f865e59fde56490a56bcc6773b6917366bce0c267c60ee8aaf1a0959869 \ --hash=sha256:ad4ac6f53b2d62bb6ce1a5e6e96f1f00976a32348afedcb4b6d68df2a1d346e4 # via sphinx-autobuild -markdown-it-py==2.1.0 \ - --hash=sha256:93de681e5c021a432c63147656fe21790bc01231e0cd2da73626f1aa3ac0fe27 \ - --hash=sha256:cf7e59fed14b5ae17c0006eff14a2d9a00ed5f3a846148153899a0224e2c07da +markdown-it-py==2.2.0 \ + --hash=sha256:5a35f8d1870171d9acc47b99612dc146129b631baf04970128b568f190d0cc30 \ + --hash=sha256:7c9a5e412688bc771c67432cbfebcdd686c93ce6484913dccf06cb5a0bea35a1 # via rich markupsafe==2.1.2 \ --hash=sha256:0576fe974b40a400449768941d5d0858cc624e3249dfd1e0c33674e5c7ca7aed \ @@ -559,9 +559,9 @@ rich==13.3.1 \ --hash=sha256:125d96d20c92b946b983d0d392b84ff945461e5a06d3867e9f9e575f8697b67f \ --hash=sha256:8aa57747f3fc3e977684f0176a88e789be314a99f99b43b75d1e9cb5dc6db9e9 # via twine -scriv==1.2.0 \ - --hash=sha256:26b65a903da7d9aefc712a0d4150b8638302b4758bd428bbd773dd918c61c621 \ - --hash=sha256:bb61c30fea73158a4d18c28bbb57821c308245683efb0d897bd45e4a7856b472 +scriv==1.2.1 \ + --hash=sha256:0ceec6243ebf02f6a685507eec72f890ca9d9da4cafcfcfce640b1f027cec17d \ + --hash=sha256:95edfd76642cf7ae6b5cd40975545d8af58f6398cabfe83ff755e8eedb8ddd4e # via -r doc/requirements.in six==1.16.0 \ --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ @@ -628,9 +628,9 @@ sphinxcontrib-serializinghtml==1.1.5 \ --hash=sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd \ --hash=sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952 # via sphinx -sphinxcontrib-spelling==7.7.0 \ - --hash=sha256:56561c3f6a155b0946914e4de988729859315729dc181b5e4dc8a68fe78de35a \ - --hash=sha256:95a0defef8ffec6526f9e83b20cc24b08c9179298729d87976891840e3aa3064 +sphinxcontrib-spelling==8.0.0 \ + --hash=sha256:199d0a16902ad80c387c2966dc9eb10f565b1fb15ccce17210402db7c2443e5c \ + --hash=sha256:b27e0a16aef00bcfc888a6490dc3f16651f901dc475446c6882834278c8dc7b3 # via -r doc/requirements.in tomli==2.0.1 \ --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ @@ -662,9 +662,9 @@ tornado==6.2 \ --hash=sha256:d3a2f5999215a3a06a4fc218026cd84c61b8b2b40ac5296a6db1f1451ef04c1e \ --hash=sha256:e5f923aa6a47e133d1cf87d60700889d7eae68988704e20c75fb2d65677a8e4b # via livereload -tox==4.4.5 \ - --hash=sha256:1081864f1a1393ffa11ebe9beaa280349020579310d217a594a4e7b6124c5425 \ - --hash=sha256:f9bc83c5da8666baa2a4d4e884bbbda124fe646e4b1c0e412949cecc2b6e8f90 +tox==4.4.6 \ + --hash=sha256:9786671d23b673ace7499c602c5746e2a225d1ecd9d9f624d0461303f40bd93b \ + --hash=sha256:e3d4a65852f029e5ba441a01824d2d839d30bb8fb071635ef9cb53952698e6bf # via # -r requirements/tox.pip # tox-gh @@ -702,9 +702,9 @@ typed-ast==1.5.4 \ --hash=sha256:ebd9d7f80ccf7a82ac5f88c521115cc55d84e35bf8b446fcd7836eb6b98929a3 \ --hash=sha256:ed855bbe3eb3715fca349c80174cfcfd699c2f9de574d40527b8429acae23a66 # via astroid -typing-extensions==4.4.0 \ - --hash=sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa \ - --hash=sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e +typing-extensions==4.5.0 \ + --hash=sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb \ + --hash=sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4 # via # -r requirements/pip.pip # -r requirements/pytest.pip @@ -806,9 +806,9 @@ wrapt==1.14.1 \ --hash=sha256:ee6acae74a2b91865910eef5e7de37dc6895ad96fa23603d1d27ea69df545015 \ --hash=sha256:ef3f72c9666bba2bab70d2a8b79f2c6d2c1a42a7f7e2b0ec83bb2f9e383950af # via astroid -zipp==3.13.0 \ - --hash=sha256:23f70e964bc11a34cef175bc90ba2914e1e4545ea1e3e2f67c079671883f9cb6 \ - --hash=sha256:e8b2a36ea17df80ffe9e2c4fda3f693c3dad6df1697d3cd3af232db680950b0b +zipp==3.14.0 \ + --hash=sha256:188834565033387710d046e3fe96acfc9b5e86cbca7f39ff69cf21a4128198b7 \ + --hash=sha256:9e5421e176ef5ab4c0ad896624e87a7b2f07aca746c9b2aa305952800cb8eecb # via # -r requirements/pip.pip # -r requirements/pytest.pip @@ -816,9 +816,9 @@ zipp==3.13.0 \ # importlib-resources # The following packages are considered to be unsafe in a requirements file: -pip==23.0 \ - --hash=sha256:aee438284e82c8def684b0bcc50b1f6ed5e941af97fa940e83e2e8ef1a59da9b \ - --hash=sha256:b5f88adff801f5ef052bcdef3daa31b55eb67b0fccd6d0106c206fa248e0463c +pip==23.0.1 \ + --hash=sha256:236bcb61156d76c4b8a05821b988c7b8c35bf0da28a4b614e8d6ab5212c25c6f \ + --hash=sha256:cd015ea1bfb0fcef59d8a286c1f8bebcb983f6317719d415dc5351efb7cd7024 # via -r requirements/pip.pip setuptools==65.7.0 \ --hash=sha256:4d3c92fac8f1118bb77a22181355e29c239cabfe2b9effdaa665c66b711136d7 \ diff --git a/requirements/mypy.pip b/requirements/mypy.pip index 3e846de95..73fc96620 100644 --- a/requirements/mypy.pip +++ b/requirements/mypy.pip @@ -32,9 +32,9 @@ flaky==3.7.0 \ --hash=sha256:3ad100780721a1911f57a165809b7ea265a7863305acb66708220820caf8aa0d \ --hash=sha256:d6eda73cab5ae7364504b7c44670f70abed9e75f77dd116352f662817592ec9c # via -r requirements/pytest.pip -hypothesis==6.68.1 \ - --hash=sha256:3ff6076920e61d4e6362e93edaf09be3034ea7e39e3a75e731d4d1c525dafd84 \ - --hash=sha256:b37bd77b4b7f404a59ff965e24be8aec4209323866e34ececdf416522c6d0854 +hypothesis==6.68.2 \ + --hash=sha256:2a41cc766cde52705895e54547374af89c617e8ec7bc4186cb7f03884a667d4e \ + --hash=sha256:a7eb2b0c9a18560d8197fe35047ceb58e7e8ab7623a3e5a82613f6a2cd71cffa # via -r requirements/pytest.pip importlib-metadata==6.0.0 \ --hash=sha256:7efb448ec9a5e313a57655d35aa54cd3e01b7e1fbcf72dce1bf06119420f5bad \ @@ -49,33 +49,33 @@ iniconfig==2.0.0 \ # via # -r requirements/pytest.pip # pytest -mypy==1.0.0 \ - --hash=sha256:01b1b9e1ed40544ef486fa8ac022232ccc57109f379611633ede8e71630d07d2 \ - --hash=sha256:0ab090d9240d6b4e99e1fa998c2d0aa5b29fc0fb06bd30e7ad6183c95fa07593 \ - --hash=sha256:14d776869a3e6c89c17eb943100f7868f677703c8a4e00b3803918f86aafbc52 \ - --hash=sha256:1ace23f6bb4aec4604b86c4843276e8fa548d667dbbd0cb83a3ae14b18b2db6c \ - --hash=sha256:2efa963bdddb27cb4a0d42545cd137a8d2b883bd181bbc4525b568ef6eca258f \ - --hash=sha256:2f6ac8c87e046dc18c7d1d7f6653a66787a4555085b056fe2d599f1f1a2a2d21 \ - --hash=sha256:3ae4c7a99e5153496243146a3baf33b9beff714464ca386b5f62daad601d87af \ - --hash=sha256:3cfad08f16a9c6611e6143485a93de0e1e13f48cfb90bcad7d5fde1c0cec3d36 \ - --hash=sha256:4e5175026618c178dfba6188228b845b64131034ab3ba52acaffa8f6c361f805 \ - --hash=sha256:50979d5efff8d4135d9db293c6cb2c42260e70fb010cbc697b1311a4d7a39ddb \ - --hash=sha256:5cd187d92b6939617f1168a4fe68f68add749902c010e66fe574c165c742ed88 \ - --hash=sha256:5cfca124f0ac6707747544c127880893ad72a656e136adc935c8600740b21ff5 \ - --hash=sha256:5e398652d005a198a7f3c132426b33c6b85d98aa7dc852137a2a3be8890c4072 \ - --hash=sha256:67cced7f15654710386e5c10b96608f1ee3d5c94ca1da5a2aad5889793a824c1 \ - --hash=sha256:7306edca1c6f1b5fa0bc9aa645e6ac8393014fa82d0fa180d0ebc990ebe15964 \ - --hash=sha256:7cc2c01dfc5a3cbddfa6c13f530ef3b95292f926329929001d45e124342cd6b7 \ - --hash=sha256:87edfaf344c9401942883fad030909116aa77b0fa7e6e8e1c5407e14549afe9a \ - --hash=sha256:8845125d0b7c57838a10fd8925b0f5f709d0e08568ce587cc862aacce453e3dd \ - --hash=sha256:92024447a339400ea00ac228369cd242e988dd775640755fa4ac0c126e49bb74 \ - --hash=sha256:a86b794e8a56ada65c573183756eac8ac5b8d3d59daf9d5ebd72ecdbb7867a43 \ - --hash=sha256:bb2782a036d9eb6b5a6efcdda0986774bf798beef86a62da86cb73e2a10b423d \ - --hash=sha256:be78077064d016bc1b639c2cbcc5be945b47b4261a4f4b7d8923f6c69c5c9457 \ - --hash=sha256:c7cf862aef988b5fbaa17764ad1d21b4831436701c7d2b653156a9497d92c83c \ - --hash=sha256:e0626db16705ab9f7fa6c249c017c887baf20738ce7f9129da162bb3075fc1af \ - --hash=sha256:f34495079c8d9da05b183f9f7daec2878280c2ad7cc81da686ef0b484cea2ecf \ - --hash=sha256:fe523fcbd52c05040c7bee370d66fee8373c5972171e4fbc323153433198592d +mypy==1.0.1 \ + --hash=sha256:0af4f0e20706aadf4e6f8f8dc5ab739089146b83fd53cb4a7e0e850ef3de0bb6 \ + --hash=sha256:15b5a824b58c7c822c51bc66308e759243c32631896743f030daf449fe3677f3 \ + --hash=sha256:17455cda53eeee0a4adb6371a21dd3dbf465897de82843751cf822605d152c8c \ + --hash=sha256:2013226d17f20468f34feddd6aae4635a55f79626549099354ce641bc7d40262 \ + --hash=sha256:24189f23dc66f83b839bd1cce2dfc356020dfc9a8bae03978477b15be61b062e \ + --hash=sha256:27a0f74a298769d9fdc8498fcb4f2beb86f0564bcdb1a37b58cbbe78e55cf8c0 \ + --hash=sha256:28cea5a6392bb43d266782983b5a4216c25544cd7d80be681a155ddcdafd152d \ + --hash=sha256:448de661536d270ce04f2d7dddaa49b2fdba6e3bd8a83212164d4174ff43aa65 \ + --hash=sha256:48525aec92b47baed9b3380371ab8ab6e63a5aab317347dfe9e55e02aaad22e8 \ + --hash=sha256:5bc8d6bd3b274dd3846597855d96d38d947aedba18776aa998a8d46fabdaed76 \ + --hash=sha256:5deb252fd42a77add936b463033a59b8e48eb2eaec2976d76b6878d031933fe4 \ + --hash=sha256:5f546ac34093c6ce33f6278f7c88f0f147a4849386d3bf3ae193702f4fe31407 \ + --hash=sha256:5fdd63e4f50e3538617887e9aee91855368d9fc1dea30da743837b0df7373bc4 \ + --hash=sha256:65b122a993d9c81ea0bfde7689b3365318a88bde952e4dfa1b3a8b4ac05d168b \ + --hash=sha256:71a808334d3f41ef011faa5a5cd8153606df5fc0b56de5b2e89566c8093a0c9a \ + --hash=sha256:920169f0184215eef19294fa86ea49ffd4635dedfdea2b57e45cb4ee85d5ccaf \ + --hash=sha256:93a85495fb13dc484251b4c1fd7a5ac370cd0d812bbfc3b39c1bafefe95275d5 \ + --hash=sha256:a2948c40a7dd46c1c33765718936669dc1f628f134013b02ff5ac6c7ef6942bf \ + --hash=sha256:c6c2ccb7af7154673c591189c3687b013122c5a891bb5651eca3db8e6c6c55bd \ + --hash=sha256:c96b8a0c019fe29040d520d9257d8c8f122a7343a8307bf8d6d4a43f5c5bfcc8 \ + --hash=sha256:d42a98e76070a365a1d1c220fcac8aa4ada12ae0db679cb4d910fabefc88b994 \ + --hash=sha256:dbeb24514c4acbc78d205f85dd0e800f34062efcc1f4a4857c57e4b4b8712bff \ + --hash=sha256:e60d0b09f62ae97a94605c3f73fd952395286cf3e3b9e7b97f60b01ddfbbda88 \ + --hash=sha256:e64f48c6176e243ad015e995de05af7f22bbe370dbb5b32bd6988438ec873919 \ + --hash=sha256:e831662208055b006eef68392a768ff83596035ffd6d846786578ba1714ba8f6 \ + --hash=sha256:eda5c8b9949ed411ff752b9a01adda31afe7eae1e53e946dbdf9db23865e66c4 # via -r requirements/mypy.in mypy-extensions==1.0.0 \ --hash=sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d \ @@ -142,16 +142,16 @@ typed-ast==1.5.4 \ --hash=sha256:ebd9d7f80ccf7a82ac5f88c521115cc55d84e35bf8b446fcd7836eb6b98929a3 \ --hash=sha256:ed855bbe3eb3715fca349c80174cfcfd699c2f9de574d40527b8429acae23a66 # via mypy -typing-extensions==4.4.0 \ - --hash=sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa \ - --hash=sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e +typing-extensions==4.5.0 \ + --hash=sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb \ + --hash=sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4 # via # -r requirements/pytest.pip # importlib-metadata # mypy -zipp==3.13.0 \ - --hash=sha256:23f70e964bc11a34cef175bc90ba2914e1e4545ea1e3e2f67c079671883f9cb6 \ - --hash=sha256:e8b2a36ea17df80ffe9e2c4fda3f693c3dad6df1697d3cd3af232db680950b0b +zipp==3.14.0 \ + --hash=sha256:188834565033387710d046e3fe96acfc9b5e86cbca7f39ff69cf21a4128198b7 \ + --hash=sha256:9e5421e176ef5ab4c0ad896624e87a7b2f07aca746c9b2aa305952800cb8eecb # via # -r requirements/pytest.pip # importlib-metadata diff --git a/requirements/pip-tools.pip b/requirements/pip-tools.pip index a6d9ab148..1d5ee31a4 100644 --- a/requirements/pip-tools.pip +++ b/requirements/pip-tools.pip @@ -36,23 +36,23 @@ tomli==2.0.1 \ # via # build # pyproject-hooks -typing-extensions==4.4.0 \ - --hash=sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa \ - --hash=sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e +typing-extensions==4.5.0 \ + --hash=sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb \ + --hash=sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4 # via importlib-metadata wheel==0.38.4 \ --hash=sha256:965f5259b566725405b05e7cf774052044b1ed30119b5d586b2703aafe8719ac \ --hash=sha256:b60533f3f5d530e971d6737ca6d58681ee434818fab630c83a734bb10c083ce8 # via pip-tools -zipp==3.13.0 \ - --hash=sha256:23f70e964bc11a34cef175bc90ba2914e1e4545ea1e3e2f67c079671883f9cb6 \ - --hash=sha256:e8b2a36ea17df80ffe9e2c4fda3f693c3dad6df1697d3cd3af232db680950b0b +zipp==3.14.0 \ + --hash=sha256:188834565033387710d046e3fe96acfc9b5e86cbca7f39ff69cf21a4128198b7 \ + --hash=sha256:9e5421e176ef5ab4c0ad896624e87a7b2f07aca746c9b2aa305952800cb8eecb # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: -pip==23.0 \ - --hash=sha256:aee438284e82c8def684b0bcc50b1f6ed5e941af97fa940e83e2e8ef1a59da9b \ - --hash=sha256:b5f88adff801f5ef052bcdef3daa31b55eb67b0fccd6d0106c206fa248e0463c +pip==23.0.1 \ + --hash=sha256:236bcb61156d76c4b8a05821b988c7b8c35bf0da28a4b614e8d6ab5212c25c6f \ + --hash=sha256:cd015ea1bfb0fcef59d8a286c1f8bebcb983f6317719d415dc5351efb7cd7024 # via pip-tools setuptools==65.7.0 \ --hash=sha256:4d3c92fac8f1118bb77a22181355e29c239cabfe2b9effdaa665c66b711136d7 \ diff --git a/requirements/pip.pip b/requirements/pip.pip index e41964177..0779f8232 100644 --- a/requirements/pip.pip +++ b/requirements/pip.pip @@ -20,9 +20,9 @@ platformdirs==3.0.0 \ --hash=sha256:8a1228abb1ef82d788f74139988b137e78692984ec7b08eaa6c65f1723af28f9 \ --hash=sha256:b1d5eb14f221506f50d6604a561f4c5786d9e80355219694a1b244bcd96f4567 # via virtualenv -typing-extensions==4.4.0 \ - --hash=sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa \ - --hash=sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e +typing-extensions==4.5.0 \ + --hash=sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb \ + --hash=sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4 # via # importlib-metadata # platformdirs @@ -30,15 +30,15 @@ virtualenv==20.19.0 \ --hash=sha256:37a640ba82ed40b226599c522d411e4be5edb339a0c0de030c0dc7b646d61590 \ --hash=sha256:54eb59e7352b573aa04d53f80fc9736ed0ad5143af445a1e539aada6eb947dd1 # via -r requirements/pip.in -zipp==3.13.0 \ - --hash=sha256:23f70e964bc11a34cef175bc90ba2914e1e4545ea1e3e2f67c079671883f9cb6 \ - --hash=sha256:e8b2a36ea17df80ffe9e2c4fda3f693c3dad6df1697d3cd3af232db680950b0b +zipp==3.14.0 \ + --hash=sha256:188834565033387710d046e3fe96acfc9b5e86cbca7f39ff69cf21a4128198b7 \ + --hash=sha256:9e5421e176ef5ab4c0ad896624e87a7b2f07aca746c9b2aa305952800cb8eecb # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: -pip==23.0 \ - --hash=sha256:aee438284e82c8def684b0bcc50b1f6ed5e941af97fa940e83e2e8ef1a59da9b \ - --hash=sha256:b5f88adff801f5ef052bcdef3daa31b55eb67b0fccd6d0106c206fa248e0463c +pip==23.0.1 \ + --hash=sha256:236bcb61156d76c4b8a05821b988c7b8c35bf0da28a4b614e8d6ab5212c25c6f \ + --hash=sha256:cd015ea1bfb0fcef59d8a286c1f8bebcb983f6317719d415dc5351efb7cd7024 # via -r requirements/pip.in setuptools==65.7.0 \ --hash=sha256:4d3c92fac8f1118bb77a22181355e29c239cabfe2b9effdaa665c66b711136d7 \ diff --git a/requirements/pytest.pip b/requirements/pytest.pip index 8bd50f12e..5d1c83292 100644 --- a/requirements/pytest.pip +++ b/requirements/pytest.pip @@ -28,9 +28,9 @@ flaky==3.7.0 \ --hash=sha256:3ad100780721a1911f57a165809b7ea265a7863305acb66708220820caf8aa0d \ --hash=sha256:d6eda73cab5ae7364504b7c44670f70abed9e75f77dd116352f662817592ec9c # via -r requirements/pytest.in -hypothesis==6.68.1 \ - --hash=sha256:3ff6076920e61d4e6362e93edaf09be3034ea7e39e3a75e731d4d1c525dafd84 \ - --hash=sha256:b37bd77b4b7f404a59ff965e24be8aec4209323866e34ececdf416522c6d0854 +hypothesis==6.68.2 \ + --hash=sha256:2a41cc766cde52705895e54547374af89c617e8ec7bc4186cb7f03884a667d4e \ + --hash=sha256:a7eb2b0c9a18560d8197fe35047ceb58e7e8ab7623a3e5a82613f6a2cd71cffa # via -r requirements/pytest.in importlib-metadata==6.0.0 \ --hash=sha256:7efb448ec9a5e313a57655d35aa54cd3e01b7e1fbcf72dce1bf06119420f5bad \ @@ -68,11 +68,11 @@ tomli==2.0.1 \ --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f # via pytest -typing-extensions==4.4.0 \ - --hash=sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa \ - --hash=sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e +typing-extensions==4.5.0 \ + --hash=sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb \ + --hash=sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4 # via importlib-metadata -zipp==3.13.0 \ - --hash=sha256:23f70e964bc11a34cef175bc90ba2914e1e4545ea1e3e2f67c079671883f9cb6 \ - --hash=sha256:e8b2a36ea17df80ffe9e2c4fda3f693c3dad6df1697d3cd3af232db680950b0b +zipp==3.14.0 \ + --hash=sha256:188834565033387710d046e3fe96acfc9b5e86cbca7f39ff69cf21a4128198b7 \ + --hash=sha256:9e5421e176ef5ab4c0ad896624e87a7b2f07aca746c9b2aa305952800cb8eecb # via importlib-metadata diff --git a/requirements/tox.pip b/requirements/tox.pip index 2e354ffdc..ad371549e 100644 --- a/requirements/tox.pip +++ b/requirements/tox.pip @@ -61,9 +61,9 @@ tomli==2.0.1 \ # via # pyproject-api # tox -tox==4.4.5 \ - --hash=sha256:1081864f1a1393ffa11ebe9beaa280349020579310d217a594a4e7b6124c5425 \ - --hash=sha256:f9bc83c5da8666baa2a4d4e884bbbda124fe646e4b1c0e412949cecc2b6e8f90 +tox==4.4.6 \ + --hash=sha256:9786671d23b673ace7499c602c5746e2a225d1ecd9d9f624d0461303f40bd93b \ + --hash=sha256:e3d4a65852f029e5ba441a01824d2d839d30bb8fb071635ef9cb53952698e6bf # via # -r requirements/tox.in # tox-gh @@ -71,9 +71,9 @@ tox-gh==1.0.0 \ --hash=sha256:9cfbaa927946887d53bc19ae86621f4e5dc8516f3771ba4e74daeb1a1775efcd \ --hash=sha256:bda94ac15dbb62ef1e517672c05f8039faad5afaf9d1b4c9fa32d07f18027571 # via -r requirements/tox.in -typing-extensions==4.4.0 \ - --hash=sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa \ - --hash=sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e +typing-extensions==4.5.0 \ + --hash=sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb \ + --hash=sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4 # via # importlib-metadata # platformdirs @@ -82,7 +82,7 @@ virtualenv==20.19.0 \ --hash=sha256:37a640ba82ed40b226599c522d411e4be5edb339a0c0de030c0dc7b646d61590 \ --hash=sha256:54eb59e7352b573aa04d53f80fc9736ed0ad5143af445a1e539aada6eb947dd1 # via tox -zipp==3.13.0 \ - --hash=sha256:23f70e964bc11a34cef175bc90ba2914e1e4545ea1e3e2f67c079671883f9cb6 \ - --hash=sha256:e8b2a36ea17df80ffe9e2c4fda3f693c3dad6df1697d3cd3af232db680950b0b +zipp==3.14.0 \ + --hash=sha256:188834565033387710d046e3fe96acfc9b5e86cbca7f39ff69cf21a4128198b7 \ + --hash=sha256:9e5421e176ef5ab4c0ad896624e87a7b2f07aca746c9b2aa305952800cb8eecb # via importlib-metadata From 2f81370c7258164249d553250966fb501916a78b Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Thu, 23 Feb 2023 07:05:27 -0500 Subject: [PATCH 074/139] fix(docs): wrong link syntax --- CHANGES.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.rst b/CHANGES.rst index ac5d29b67..e73d5c0ff 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -32,7 +32,7 @@ Version 7.2.0 — 2023-02-22 - Added a new setting ``[report] exclude_also`` to let you add more exclusions without overwriting the defaults. Thanks, `Alpha Chen <pull 1557_>`_, - closing `issue 1391_`. + closing `issue 1391`_. - Added a :meth:`.CoverageData.purge_files` method to remove recorded data for a particular file. Contributed by `Stephan Deibel <pull 1547_>`_. From 857833e9e901e667f2f3ae419282f8e1a1dd0b6c Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Fri, 24 Feb 2023 18:40:35 -0500 Subject: [PATCH 075/139] fix: always use full-version rtfd links #1566 --- CHANGES.rst | 5 ++++- coverage/version.py | 9 ++++----- tests/test_version.py | 3 ++- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index e73d5c0ff..b493f68e7 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -20,7 +20,10 @@ development at the same time, such as 4.5.x and 5.0. Unreleased ---------- -Nothing yet. +- Fix: the PyPI page had broken links to documentation pages, but no longer + does, closing `issue 1566`_. + +.. _issue 1566: https://github.com/nedbat/coveragepy/issues/1566 .. scriv-start-here diff --git a/coverage/version.py b/coverage/version.py index 48e5f2b95..95491ed53 100644 --- a/coverage/version.py +++ b/coverage/version.py @@ -40,11 +40,10 @@ def _make_url( dev: int = 0, ) -> str: """Make the URL people should start at for this version of coverage.py.""" - url = "https://coverage.readthedocs.io" - if releaselevel != "final" or dev != 0: - # For pre-releases, use a version-specific URL. - url += "/en/" + _make_version(major, minor, micro, releaselevel, serial, dev) - return url + return ( + "https://coverage.readthedocs.io/en/" + + _make_version(major, minor, micro, releaselevel, serial, dev) + ) __version__ = _make_version(*version_info, _dev) diff --git a/tests/test_version.py b/tests/test_version.py index 9efa228ab..7e8935257 100644 --- a/tests/test_version.py +++ b/tests/test_version.py @@ -33,7 +33,8 @@ def test_make_version(self) -> None: assert _make_version(5, 10, 2, 'candidate', 7, 3) == "5.10.2rc7.dev3" def test_make_url(self) -> None: - assert _make_url(4, 0, 0, 'final') == "https://coverage.readthedocs.io" + expected = "https://coverage.readthedocs.io/en/4.1.2" + assert _make_url(4, 1, 2, 'final') == expected expected = "https://coverage.readthedocs.io/en/4.1.2b3" assert _make_url(4, 1, 2, 'beta', 3) == expected expected = "https://coverage.readthedocs.io/en/4.1.2b3.dev17" From f217d0dbf14567ba5ecdc0108cb29b0c4164b1a4 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Sat, 25 Feb 2023 16:05:14 -0500 Subject: [PATCH 076/139] refactor: remove unneeded pydoc weirdness --- coverage/__init__.py | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/coverage/__init__.py b/coverage/__init__.py index 429a7bd02..efd0a6f03 100644 --- a/coverage/__init__.py +++ b/coverage/__init__.py @@ -1,10 +1,11 @@ # Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0 # For details: https://github.com/nedbat/coveragepy/blob/master/NOTICE.txt -"""Code coverage measurement for Python. +""" +Code coverage measurement for Python. Ned Batchelder -https://nedbatchelder.com/code/coverage +https://coverage.readthedocs.io """ @@ -25,12 +26,3 @@ # the encodings.utf_8 module is loaded and then unloaded, I don't know why. # Adding a reference here prevents it from being unloaded. Yuk. import encodings.utf_8 # pylint: disable=wrong-import-position, wrong-import-order - -# Because of the "from coverage.control import fooey" lines at the top of the -# file, there's an entry for coverage.coverage in sys.modules, mapped to None. -# This makes some inspection tools (like pydoc) unable to find the class -# coverage.coverage. So remove that entry. -try: - del sys.modules['coverage.coverage'] -except KeyError: - pass From c3a3421721788d863012330bc0789b828ce4bcd0 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Fri, 24 Feb 2023 07:34:19 -0500 Subject: [PATCH 077/139] fix: export our public names for type checking. #1564 --- CHANGES.rst | 4 ++++ coverage/__init__.py | 28 +++++++++++++++++++++------- coverage/cmdline.py | 2 ++ coverage/html.py | 3 ++- coverage/xmlreport.py | 3 ++- 5 files changed, 31 insertions(+), 9 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index b493f68e7..b7e8fd27b 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -23,6 +23,10 @@ Unreleased - Fix: the PyPI page had broken links to documentation pages, but no longer does, closing `issue 1566`_. +- Fix: public members of the coverage module are now properly indicated so that + mypy will find them, fixing `issue 1564`_. + +.. _issue 1564: https://github.com/nedbat/coveragepy/issues/1564 .. _issue 1566: https://github.com/nedbat/coveragepy/issues/1566 diff --git a/coverage/__init__.py b/coverage/__init__.py index efd0a6f03..054e37dff 100644 --- a/coverage/__init__.py +++ b/coverage/__init__.py @@ -9,15 +9,29 @@ """ -import sys +# mypy's convention is that "import as" names are public from the module. +# We import names as themselves to indicate that. Pylint sees it as pointless, +# so disable its warning. +# pylint: disable=useless-import-alias -from coverage.version import __version__, __url__, version_info +import sys -from coverage.control import Coverage, process_startup -from coverage.data import CoverageData -from coverage.exceptions import CoverageException -from coverage.plugin import CoveragePlugin, FileTracer, FileReporter -from coverage.pytracer import PyTracer +from coverage.version import ( + __version__ as __version__, + version_info as version_info, +) + +from coverage.control import ( + Coverage as Coverage, + process_startup as process_startup, +) +from coverage.data import CoverageData as CoverageData +from coverage.exceptions import CoverageException as CoverageException +from coverage.plugin import ( + CoveragePlugin as CoveragePlugin, + FileReporter as FileReporter, + FileTracer as FileTracer, +) # Backward compatibility. coverage = Coverage diff --git a/coverage/cmdline.py b/coverage/cmdline.py index 338d8a25a..ef760a503 100644 --- a/coverage/cmdline.py +++ b/coverage/cmdline.py @@ -27,6 +27,7 @@ from coverage.exceptions import _BaseCoverageException, _ExceptionDuringRun, NoSource from coverage.execfile import PyRunner from coverage.results import Numbers, should_fail_under +from coverage.version import __url__ # When adding to this file, alphabetization is important. Look for # "alphabetize" comments throughout. @@ -574,6 +575,7 @@ def show_help( program_name = program_name[:-len(auto_suffix)] help_params = dict(coverage.__dict__) + help_params["__url__"] = __url__ help_params['program_name'] = program_name if HAS_CTRACER: help_params['extension_modifier'] = 'with C extension' diff --git a/coverage/html.py b/coverage/html.py index 9e1b11b20..ae09bc37d 100644 --- a/coverage/html.py +++ b/coverage/html.py @@ -24,6 +24,7 @@ from coverage.results import Analysis, Numbers from coverage.templite import Templite from coverage.types import TLineNo, TMorf +from coverage.version import __url__ if TYPE_CHECKING: @@ -238,7 +239,7 @@ def __init__(self, cov: Coverage) -> None: 'len': len, # Constants for this report. - '__url__': coverage.__url__, + '__url__': __url__, '__version__': coverage.__version__, 'title': title, 'time_stamp': format_local_datetime(datetime.datetime.now()), diff --git a/coverage/xmlreport.py b/coverage/xmlreport.py index 6867f2e92..65da11d23 100644 --- a/coverage/xmlreport.py +++ b/coverage/xmlreport.py @@ -14,12 +14,13 @@ from dataclasses import dataclass from typing import Any, Dict, IO, Iterable, Optional, TYPE_CHECKING, cast -from coverage import __url__, __version__, files +from coverage import __version__, files from coverage.misc import isolate_module, human_sorted, human_sorted_items from coverage.plugin import FileReporter from coverage.report import get_analysis_to_report from coverage.results import Analysis from coverage.types import TMorf +from coverage.version import __url__ if TYPE_CHECKING: from coverage import Coverage From fe807db35e6efbfb1df359dec162891df1e56f81 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Sun, 26 Feb 2023 08:14:03 -0500 Subject: [PATCH 078/139] docs: build steps need to make a release-prep branch sooner --- howto.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/howto.txt b/howto.txt index 105547e86..b0d58c625 100644 --- a/howto.txt +++ b/howto.txt @@ -1,6 +1,7 @@ * Release checklist - Check that the current virtualenv matches the current coverage branch. +- start branch for release work - Version number in coverage/version.py version_info = (4, 0, 2, "alpha", 1) version_info = (4, 0, 2, "beta", 1) @@ -32,7 +33,7 @@ $ make sample_html check in the new sample html - Done with changes to source files - - check them in on a branch + - check them in on the release prep branch - wait for ci to finish - merge to master - git push From 795a56adfc80db88b7a9a6a4ed1f70417be08dda Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Sun, 26 Feb 2023 08:14:47 -0500 Subject: [PATCH 079/139] docs: prep for 7.2.1 --- CHANGES.rst | 10 ++++++---- coverage/version.py | 4 ++-- doc/conf.py | 6 +++--- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index b7e8fd27b..5714a6c80 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -17,8 +17,12 @@ development at the same time, such as 4.5.x and 5.0. .. Version 9.8.1 — 2027-07-27 .. -------------------------- -Unreleased ----------- +.. scriv-start-here + +.. _changes_7-2-1: + +Version 7.2.1 — 2023-02-26 +-------------------------- - Fix: the PyPI page had broken links to documentation pages, but no longer does, closing `issue 1566`_. @@ -30,8 +34,6 @@ Unreleased .. _issue 1566: https://github.com/nedbat/coveragepy/issues/1566 -.. scriv-start-here - .. _changes_7-2-0: Version 7.2.0 — 2023-02-22 diff --git a/coverage/version.py b/coverage/version.py index 95491ed53..2e4c472cc 100644 --- a/coverage/version.py +++ b/coverage/version.py @@ -8,8 +8,8 @@ # version_info: same semantics as sys.version_info. # _dev: the .devN suffix if any. -version_info = (7, 2, 1, "alpha", 0) -_dev = 1 +version_info = (7, 2, 1, "final", 0) +_dev = 0 def _make_version( diff --git a/doc/conf.py b/doc/conf.py index 32caae09d..13c8d928a 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -67,11 +67,11 @@ # @@@ editable copyright = "2009–2023, Ned Batchelder" # pylint: disable=redefined-builtin # The short X.Y.Z version. -version = "7.2.0" +version = "7.2.1" # The full version, including alpha/beta/rc tags. -release = "7.2.0" +release = "7.2.1" # The date of release, in "monthname day, year" format. -release_date = "February 22, 2023" +release_date = "February 26, 2023" # @@@ end rst_epilog = """ From 9fcf1d66771fd20e5b6848485730f13bc87bb756 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Sun, 26 Feb 2023 08:15:21 -0500 Subject: [PATCH 080/139] docs: sample html for 7.2.1 --- doc/sample_html/d_7b071bdc2a35fa80___init___py.html | 8 ++++---- doc/sample_html/d_7b071bdc2a35fa80___main___py.html | 8 ++++---- doc/sample_html/d_7b071bdc2a35fa80_cogapp_py.html | 8 ++++---- doc/sample_html/d_7b071bdc2a35fa80_makefiles_py.html | 8 ++++---- doc/sample_html/d_7b071bdc2a35fa80_test_cogapp_py.html | 8 ++++---- doc/sample_html/d_7b071bdc2a35fa80_test_makefiles_py.html | 8 ++++---- .../d_7b071bdc2a35fa80_test_whiteutils_py.html | 8 ++++---- doc/sample_html/d_7b071bdc2a35fa80_whiteutils_py.html | 8 ++++---- doc/sample_html/index.html | 8 ++++---- doc/sample_html/status.json | 2 +- 10 files changed, 37 insertions(+), 37 deletions(-) diff --git a/doc/sample_html/d_7b071bdc2a35fa80___init___py.html b/doc/sample_html/d_7b071bdc2a35fa80___init___py.html index 125251723..509e0ff6f 100644 --- a/doc/sample_html/d_7b071bdc2a35fa80___init___py.html +++ b/doc/sample_html/d_7b071bdc2a35fa80___init___py.html @@ -66,8 +66,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80___main___py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.2.0</a>, - created at 2023-02-22 18:50 -0500 + <a class="nav" href="https://coverage.readthedocs.io/en/7.2.1">coverage.py v7.2.1</a>, + created at 2023-02-26 08:15 -0500 </p> <aside class="hidden"> <button type="button" class="button_next_chunk" data-shortcut="j"/> @@ -97,8 +97,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80___main___py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.2.0</a>, - created at 2023-02-22 18:50 -0500 + <a class="nav" href="https://coverage.readthedocs.io/en/7.2.1">coverage.py v7.2.1</a>, + created at 2023-02-26 08:15 -0500 </p> </div> </footer> diff --git a/doc/sample_html/d_7b071bdc2a35fa80___main___py.html b/doc/sample_html/d_7b071bdc2a35fa80___main___py.html index 4910e0175..3f489d6b7 100644 --- a/doc/sample_html/d_7b071bdc2a35fa80___main___py.html +++ b/doc/sample_html/d_7b071bdc2a35fa80___main___py.html @@ -66,8 +66,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80_cogapp_py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.2.0</a>, - created at 2023-02-22 18:50 -0500 + <a class="nav" href="https://coverage.readthedocs.io/en/7.2.1">coverage.py v7.2.1</a>, + created at 2023-02-26 08:15 -0500 </p> <aside class="hidden"> <button type="button" class="button_next_chunk" data-shortcut="j"/> @@ -97,8 +97,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80_cogapp_py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.2.0</a>, - created at 2023-02-22 18:50 -0500 + <a class="nav" href="https://coverage.readthedocs.io/en/7.2.1">coverage.py v7.2.1</a>, + created at 2023-02-26 08:15 -0500 </p> </div> </footer> diff --git a/doc/sample_html/d_7b071bdc2a35fa80_cogapp_py.html b/doc/sample_html/d_7b071bdc2a35fa80_cogapp_py.html index bc4874ad6..10df74dc7 100644 --- a/doc/sample_html/d_7b071bdc2a35fa80_cogapp_py.html +++ b/doc/sample_html/d_7b071bdc2a35fa80_cogapp_py.html @@ -66,8 +66,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80_makefiles_py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.2.0</a>, - created at 2023-02-22 18:50 -0500 + <a class="nav" href="https://coverage.readthedocs.io/en/7.2.1">coverage.py v7.2.1</a>, + created at 2023-02-26 08:15 -0500 </p> <aside class="hidden"> <button type="button" class="button_next_chunk" data-shortcut="j"/> @@ -938,8 +938,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80_makefiles_py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.2.0</a>, - created at 2023-02-22 18:50 -0500 + <a class="nav" href="https://coverage.readthedocs.io/en/7.2.1">coverage.py v7.2.1</a>, + created at 2023-02-26 08:15 -0500 </p> </div> </footer> diff --git a/doc/sample_html/d_7b071bdc2a35fa80_makefiles_py.html b/doc/sample_html/d_7b071bdc2a35fa80_makefiles_py.html index a719ade03..9e3994ee0 100644 --- a/doc/sample_html/d_7b071bdc2a35fa80_makefiles_py.html +++ b/doc/sample_html/d_7b071bdc2a35fa80_makefiles_py.html @@ -66,8 +66,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80_test_cogapp_py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.2.0</a>, - created at 2023-02-22 18:50 -0500 + <a class="nav" href="https://coverage.readthedocs.io/en/7.2.1">coverage.py v7.2.1</a>, + created at 2023-02-26 08:15 -0500 </p> <aside class="hidden"> <button type="button" class="button_next_chunk" data-shortcut="j"/> @@ -126,8 +126,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80_test_cogapp_py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.2.0</a>, - created at 2023-02-22 18:50 -0500 + <a class="nav" href="https://coverage.readthedocs.io/en/7.2.1">coverage.py v7.2.1</a>, + created at 2023-02-26 08:15 -0500 </p> </div> </footer> diff --git a/doc/sample_html/d_7b071bdc2a35fa80_test_cogapp_py.html b/doc/sample_html/d_7b071bdc2a35fa80_test_cogapp_py.html index 6ac6fa440..05e99ff5d 100644 --- a/doc/sample_html/d_7b071bdc2a35fa80_test_cogapp_py.html +++ b/doc/sample_html/d_7b071bdc2a35fa80_test_cogapp_py.html @@ -66,8 +66,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80_test_makefiles_py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.2.0</a>, - created at 2023-02-22 18:50 -0500 + <a class="nav" href="https://coverage.readthedocs.io/en/7.2.1">coverage.py v7.2.1</a>, + created at 2023-02-26 08:15 -0500 </p> <aside class="hidden"> <button type="button" class="button_next_chunk" data-shortcut="j"/> @@ -2713,8 +2713,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80_test_makefiles_py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.2.0</a>, - created at 2023-02-22 18:50 -0500 + <a class="nav" href="https://coverage.readthedocs.io/en/7.2.1">coverage.py v7.2.1</a>, + created at 2023-02-26 08:15 -0500 </p> </div> </footer> diff --git a/doc/sample_html/d_7b071bdc2a35fa80_test_makefiles_py.html b/doc/sample_html/d_7b071bdc2a35fa80_test_makefiles_py.html index d9534787c..8e407c197 100644 --- a/doc/sample_html/d_7b071bdc2a35fa80_test_makefiles_py.html +++ b/doc/sample_html/d_7b071bdc2a35fa80_test_makefiles_py.html @@ -66,8 +66,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80_test_whiteutils_py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.2.0</a>, - created at 2023-02-22 18:50 -0500 + <a class="nav" href="https://coverage.readthedocs.io/en/7.2.1">coverage.py v7.2.1</a>, + created at 2023-02-26 08:15 -0500 </p> <aside class="hidden"> <button type="button" class="button_next_chunk" data-shortcut="j"/> @@ -207,8 +207,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80_test_whiteutils_py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.2.0</a>, - created at 2023-02-22 18:50 -0500 + <a class="nav" href="https://coverage.readthedocs.io/en/7.2.1">coverage.py v7.2.1</a>, + created at 2023-02-26 08:15 -0500 </p> </div> </footer> diff --git a/doc/sample_html/d_7b071bdc2a35fa80_test_whiteutils_py.html b/doc/sample_html/d_7b071bdc2a35fa80_test_whiteutils_py.html index dda37a178..2ca3aac04 100644 --- a/doc/sample_html/d_7b071bdc2a35fa80_test_whiteutils_py.html +++ b/doc/sample_html/d_7b071bdc2a35fa80_test_whiteutils_py.html @@ -66,8 +66,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80_whiteutils_py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.2.0</a>, - created at 2023-02-22 18:50 -0500 + <a class="nav" href="https://coverage.readthedocs.io/en/7.2.1">coverage.py v7.2.1</a>, + created at 2023-02-26 08:15 -0500 </p> <aside class="hidden"> <button type="button" class="button_next_chunk" data-shortcut="j"/> @@ -187,8 +187,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80_whiteutils_py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.2.0</a>, - created at 2023-02-22 18:50 -0500 + <a class="nav" href="https://coverage.readthedocs.io/en/7.2.1">coverage.py v7.2.1</a>, + created at 2023-02-26 08:15 -0500 </p> </div> </footer> diff --git a/doc/sample_html/d_7b071bdc2a35fa80_whiteutils_py.html b/doc/sample_html/d_7b071bdc2a35fa80_whiteutils_py.html index 9f5b48869..35ae58216 100644 --- a/doc/sample_html/d_7b071bdc2a35fa80_whiteutils_py.html +++ b/doc/sample_html/d_7b071bdc2a35fa80_whiteutils_py.html @@ -66,8 +66,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="index.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.2.0</a>, - created at 2023-02-22 18:50 -0500 + <a class="nav" href="https://coverage.readthedocs.io/en/7.2.1">coverage.py v7.2.1</a>, + created at 2023-02-26 08:15 -0500 </p> <aside class="hidden"> <button type="button" class="button_next_chunk" data-shortcut="j"/> @@ -157,8 +157,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="index.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.2.0</a>, - created at 2023-02-22 18:50 -0500 + <a class="nav" href="https://coverage.readthedocs.io/en/7.2.1">coverage.py v7.2.1</a>, + created at 2023-02-26 08:15 -0500 </p> </div> </footer> diff --git a/doc/sample_html/index.html b/doc/sample_html/index.html index 9cd539d65..89b9250c8 100644 --- a/doc/sample_html/index.html +++ b/doc/sample_html/index.html @@ -46,8 +46,8 @@ <h1>Cog coverage: <input id="filter" type="text" value="" placeholder="filter..." /> </form> <p class="text"> - <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.2.0</a>, - created at 2023-02-22 18:50 -0500 + <a class="nav" href="https://coverage.readthedocs.io/en/7.2.1">coverage.py v7.2.1</a>, + created at 2023-02-26 08:15 -0500 </p> </div> </header> @@ -157,8 +157,8 @@ <h1>Cog coverage: <footer> <div class="content"> <p> - <a class="nav" href="https://coverage.readthedocs.io">coverage.py v7.2.0</a>, - created at 2023-02-22 18:50 -0500 + <a class="nav" href="https://coverage.readthedocs.io/en/7.2.1">coverage.py v7.2.1</a>, + created at 2023-02-26 08:15 -0500 </p> </div> <aside class="hidden"> diff --git a/doc/sample_html/status.json b/doc/sample_html/status.json index 236774d3e..511846fec 100644 --- a/doc/sample_html/status.json +++ b/doc/sample_html/status.json @@ -1 +1 @@ -{"format":2,"version":"7.2.0","globals":"06b1ac9f4a6596354db77ceb72079454","files":{"d_7b071bdc2a35fa80___init___py":{"hash":"70ef41e14b11d599cdbcf53f562ebb16","index":{"nums":[2,1,1,0,0,0,0,0],"html_filename":"d_7b071bdc2a35fa80___init___py.html","relative_filename":"cogapp/__init__.py"}},"d_7b071bdc2a35fa80___main___py":{"hash":"6d9d0d551879aa3e73791f40c5739845","index":{"nums":[2,1,3,0,3,0,0,0],"html_filename":"d_7b071bdc2a35fa80___main___py.html","relative_filename":"cogapp/__main__.py"}},"d_7b071bdc2a35fa80_cogapp_py":{"hash":"7428c811d741c23b10655ff6c20fb85f","index":{"nums":[2,1,500,1,224,210,30,138],"html_filename":"d_7b071bdc2a35fa80_cogapp_py.html","relative_filename":"cogapp/cogapp.py"}},"d_7b071bdc2a35fa80_makefiles_py":{"hash":"4b73eaf76fbb53af575b40165e831aac","index":{"nums":[2,1,22,0,18,14,0,14],"html_filename":"d_7b071bdc2a35fa80_makefiles_py.html","relative_filename":"cogapp/makefiles.py"}},"d_7b071bdc2a35fa80_test_cogapp_py":{"hash":"34099de695d2cac204436597408d33d2","index":{"nums":[2,1,845,2,591,24,1,21],"html_filename":"d_7b071bdc2a35fa80_test_cogapp_py.html","relative_filename":"cogapp/test_cogapp.py"}},"d_7b071bdc2a35fa80_test_makefiles_py":{"hash":"63fd1bdc011935abfd11301da94b383e","index":{"nums":[2,1,70,0,53,6,0,6],"html_filename":"d_7b071bdc2a35fa80_test_makefiles_py.html","relative_filename":"cogapp/test_makefiles.py"}},"d_7b071bdc2a35fa80_test_whiteutils_py":{"hash":"ec69457cbd6dfbc85eefabdfc0931c99","index":{"nums":[2,1,68,0,50,0,0,0],"html_filename":"d_7b071bdc2a35fa80_test_whiteutils_py.html","relative_filename":"cogapp/test_whiteutils.py"}},"d_7b071bdc2a35fa80_whiteutils_py":{"hash":"6dbf59193ab1bdcba86b017c86bb4724","index":{"nums":[2,1,43,0,5,34,4,4],"html_filename":"d_7b071bdc2a35fa80_whiteutils_py.html","relative_filename":"cogapp/whiteutils.py"}}}} \ No newline at end of file +{"format":2,"version":"7.2.1","globals":"06b1ac9f4a6596354db77ceb72079454","files":{"d_7b071bdc2a35fa80___init___py":{"hash":"70ef41e14b11d599cdbcf53f562ebb16","index":{"nums":[2,1,1,0,0,0,0,0],"html_filename":"d_7b071bdc2a35fa80___init___py.html","relative_filename":"cogapp/__init__.py"}},"d_7b071bdc2a35fa80___main___py":{"hash":"6d9d0d551879aa3e73791f40c5739845","index":{"nums":[2,1,3,0,3,0,0,0],"html_filename":"d_7b071bdc2a35fa80___main___py.html","relative_filename":"cogapp/__main__.py"}},"d_7b071bdc2a35fa80_cogapp_py":{"hash":"7428c811d741c23b10655ff6c20fb85f","index":{"nums":[2,1,500,1,224,210,30,138],"html_filename":"d_7b071bdc2a35fa80_cogapp_py.html","relative_filename":"cogapp/cogapp.py"}},"d_7b071bdc2a35fa80_makefiles_py":{"hash":"4b73eaf76fbb53af575b40165e831aac","index":{"nums":[2,1,22,0,18,14,0,14],"html_filename":"d_7b071bdc2a35fa80_makefiles_py.html","relative_filename":"cogapp/makefiles.py"}},"d_7b071bdc2a35fa80_test_cogapp_py":{"hash":"34099de695d2cac204436597408d33d2","index":{"nums":[2,1,845,2,591,24,1,21],"html_filename":"d_7b071bdc2a35fa80_test_cogapp_py.html","relative_filename":"cogapp/test_cogapp.py"}},"d_7b071bdc2a35fa80_test_makefiles_py":{"hash":"63fd1bdc011935abfd11301da94b383e","index":{"nums":[2,1,70,0,53,6,0,6],"html_filename":"d_7b071bdc2a35fa80_test_makefiles_py.html","relative_filename":"cogapp/test_makefiles.py"}},"d_7b071bdc2a35fa80_test_whiteutils_py":{"hash":"ec69457cbd6dfbc85eefabdfc0931c99","index":{"nums":[2,1,68,0,50,0,0,0],"html_filename":"d_7b071bdc2a35fa80_test_whiteutils_py.html","relative_filename":"cogapp/test_whiteutils.py"}},"d_7b071bdc2a35fa80_whiteutils_py":{"hash":"6dbf59193ab1bdcba86b017c86bb4724","index":{"nums":[2,1,43,0,5,34,4,4],"html_filename":"d_7b071bdc2a35fa80_whiteutils_py.html","relative_filename":"cogapp/whiteutils.py"}}}} \ No newline at end of file From 499f4f52f738fac6133c9889b4a94b998628ac6f Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Sun, 26 Feb 2023 09:01:04 -0500 Subject: [PATCH 081/139] build: bump version --- CHANGES.rst | 6 ++++++ coverage/version.py | 4 ++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index 5714a6c80..558f9daf4 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -17,6 +17,12 @@ development at the same time, such as 4.5.x and 5.0. .. Version 9.8.1 — 2027-07-27 .. -------------------------- +Unreleased +---------- + +Nothing yet. + + .. scriv-start-here .. _changes_7-2-1: diff --git a/coverage/version.py b/coverage/version.py index 2e4c472cc..c0a0cbcf1 100644 --- a/coverage/version.py +++ b/coverage/version.py @@ -8,8 +8,8 @@ # version_info: same semantics as sys.version_info. # _dev: the .devN suffix if any. -version_info = (7, 2, 1, "final", 0) -_dev = 0 +version_info = (7, 2, 2, "alpha", 0) +_dev = 1 def _make_version( From 489579769acc2f0bf41b220773c13fde2b550770 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Tue, 7 Mar 2023 09:23:22 -0500 Subject: [PATCH 082/139] chore: make upgrade --- doc/requirements.pip | 177 +++++++++--------- requirements/dev.pip | 354 ++++++++++++++++++------------------ requirements/kit.pip | 12 +- requirements/lint.pip | 360 ++++++++++++++++++------------------- requirements/mypy.pip | 66 +++---- requirements/pip-tools.pip | 12 +- requirements/pip.pip | 18 +- requirements/pytest.pip | 12 +- requirements/tox.pip | 18 +- 9 files changed, 506 insertions(+), 523 deletions(-) diff --git a/doc/requirements.pip b/doc/requirements.pip index 8b368e77c..6a34eac03 100644 --- a/doc/requirements.pip +++ b/doc/requirements.pip @@ -12,103 +12,90 @@ attrs==22.2.0 \ --hash=sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836 \ --hash=sha256:c9227bfc2f01993c03f68db37d1d15c9690188323c067c641f1a35ca58185f99 # via scriv -babel==2.11.0 \ - --hash=sha256:1ad3eca1c885218f6dce2ab67291178944f810a10a9b5f3cb8382a5a232b64fe \ - --hash=sha256:5ef4b3226b0180dedded4229651c8b0e1a3a6a2837d45a073272f313e4cf97f6 +babel==2.12.1 \ + --hash=sha256:b4246fb7677d3b98f501a39d43396d3cafdc8eadb045f4a31be01863f655c610 \ + --hash=sha256:cc2d99999cd01d44420ae725a21c9e3711b3aadc7976d6147f622d8581963455 # via sphinx certifi==2022.12.7 \ --hash=sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3 \ --hash=sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18 # via requests -charset-normalizer==3.0.1 \ - --hash=sha256:00d3ffdaafe92a5dc603cb9bd5111aaa36dfa187c8285c543be562e61b755f6b \ - --hash=sha256:024e606be3ed92216e2b6952ed859d86b4cfa52cd5bc5f050e7dc28f9b43ec42 \ - --hash=sha256:0298eafff88c99982a4cf66ba2efa1128e4ddaca0b05eec4c456bbc7db691d8d \ - --hash=sha256:02a51034802cbf38db3f89c66fb5d2ec57e6fe7ef2f4a44d070a593c3688667b \ - --hash=sha256:083c8d17153ecb403e5e1eb76a7ef4babfc2c48d58899c98fcaa04833e7a2f9a \ - --hash=sha256:0a11e971ed097d24c534c037d298ad32c6ce81a45736d31e0ff0ad37ab437d59 \ - --hash=sha256:0bf2dae5291758b6f84cf923bfaa285632816007db0330002fa1de38bfcb7154 \ - --hash=sha256:0c0a590235ccd933d9892c627dec5bc7511ce6ad6c1011fdf5b11363022746c1 \ - --hash=sha256:0f438ae3532723fb6ead77e7c604be7c8374094ef4ee2c5e03a3a17f1fca256c \ - --hash=sha256:109487860ef6a328f3eec66f2bf78b0b72400280d8f8ea05f69c51644ba6521a \ - --hash=sha256:11b53acf2411c3b09e6af37e4b9005cba376c872503c8f28218c7243582df45d \ - --hash=sha256:12db3b2c533c23ab812c2b25934f60383361f8a376ae272665f8e48b88e8e1c6 \ - --hash=sha256:14e76c0f23218b8f46c4d87018ca2e441535aed3632ca134b10239dfb6dadd6b \ - --hash=sha256:16a8663d6e281208d78806dbe14ee9903715361cf81f6d4309944e4d1e59ac5b \ - --hash=sha256:292d5e8ba896bbfd6334b096e34bffb56161c81408d6d036a7dfa6929cff8783 \ - --hash=sha256:2c03cc56021a4bd59be889c2b9257dae13bf55041a3372d3295416f86b295fb5 \ - --hash=sha256:2e396d70bc4ef5325b72b593a72c8979999aa52fb8bcf03f701c1b03e1166918 \ - --hash=sha256:2edb64ee7bf1ed524a1da60cdcd2e1f6e2b4f66ef7c077680739f1641f62f555 \ - --hash=sha256:31a9ddf4718d10ae04d9b18801bd776693487cbb57d74cc3458a7673f6f34639 \ - --hash=sha256:356541bf4381fa35856dafa6a965916e54bed415ad8a24ee6de6e37deccf2786 \ - --hash=sha256:358a7c4cb8ba9b46c453b1dd8d9e431452d5249072e4f56cfda3149f6ab1405e \ - --hash=sha256:37f8febc8ec50c14f3ec9637505f28e58d4f66752207ea177c1d67df25da5aed \ - --hash=sha256:39049da0ffb96c8cbb65cbf5c5f3ca3168990adf3551bd1dee10c48fce8ae820 \ - --hash=sha256:39cf9ed17fe3b1bc81f33c9ceb6ce67683ee7526e65fde1447c772afc54a1bb8 \ - --hash=sha256:3ae1de54a77dc0d6d5fcf623290af4266412a7c4be0b1ff7444394f03f5c54e3 \ - --hash=sha256:3b590df687e3c5ee0deef9fc8c547d81986d9a1b56073d82de008744452d6541 \ - --hash=sha256:3e45867f1f2ab0711d60c6c71746ac53537f1684baa699f4f668d4c6f6ce8e14 \ - --hash=sha256:3fc1c4a2ffd64890aebdb3f97e1278b0cc72579a08ca4de8cd2c04799a3a22be \ - --hash=sha256:4457ea6774b5611f4bed5eaa5df55f70abde42364d498c5134b7ef4c6958e20e \ - --hash=sha256:44ba614de5361b3e5278e1241fda3dc1838deed864b50a10d7ce92983797fa76 \ - --hash=sha256:4a8fcf28c05c1f6d7e177a9a46a1c52798bfe2ad80681d275b10dcf317deaf0b \ - --hash=sha256:4b0d02d7102dd0f997580b51edc4cebcf2ab6397a7edf89f1c73b586c614272c \ - --hash=sha256:502218f52498a36d6bf5ea77081844017bf7982cdbe521ad85e64cabee1b608b \ - --hash=sha256:503e65837c71b875ecdd733877d852adbc465bd82c768a067badd953bf1bc5a3 \ - --hash=sha256:5995f0164fa7df59db4746112fec3f49c461dd6b31b841873443bdb077c13cfc \ - --hash=sha256:59e5686dd847347e55dffcc191a96622f016bc0ad89105e24c14e0d6305acbc6 \ - --hash=sha256:601f36512f9e28f029d9481bdaf8e89e5148ac5d89cffd3b05cd533eeb423b59 \ - --hash=sha256:608862a7bf6957f2333fc54ab4399e405baad0163dc9f8d99cb236816db169d4 \ - --hash=sha256:62595ab75873d50d57323a91dd03e6966eb79c41fa834b7a1661ed043b2d404d \ - --hash=sha256:70990b9c51340e4044cfc394a81f614f3f90d41397104d226f21e66de668730d \ - --hash=sha256:71140351489970dfe5e60fc621ada3e0f41104a5eddaca47a7acb3c1b851d6d3 \ - --hash=sha256:72966d1b297c741541ca8cf1223ff262a6febe52481af742036a0b296e35fa5a \ - --hash=sha256:74292fc76c905c0ef095fe11e188a32ebd03bc38f3f3e9bcb85e4e6db177b7ea \ - --hash=sha256:761e8904c07ad053d285670f36dd94e1b6ab7f16ce62b9805c475b7aa1cffde6 \ - --hash=sha256:772b87914ff1152b92a197ef4ea40efe27a378606c39446ded52c8f80f79702e \ - --hash=sha256:79909e27e8e4fcc9db4addea88aa63f6423ebb171db091fb4373e3312cb6d603 \ - --hash=sha256:7e189e2e1d3ed2f4aebabd2d5b0f931e883676e51c7624826e0a4e5fe8a0bf24 \ - --hash=sha256:7eb33a30d75562222b64f569c642ff3dc6689e09adda43a082208397f016c39a \ - --hash=sha256:81d6741ab457d14fdedc215516665050f3822d3e56508921cc7239f8c8e66a58 \ - --hash=sha256:8499ca8f4502af841f68135133d8258f7b32a53a1d594aa98cc52013fff55678 \ - --hash=sha256:84c3990934bae40ea69a82034912ffe5a62c60bbf6ec5bc9691419641d7d5c9a \ - --hash=sha256:87701167f2a5c930b403e9756fab1d31d4d4da52856143b609e30a1ce7160f3c \ - --hash=sha256:88600c72ef7587fe1708fd242b385b6ed4b8904976d5da0893e31df8b3480cb6 \ - --hash=sha256:8ac7b6a045b814cf0c47f3623d21ebd88b3e8cf216a14790b455ea7ff0135d18 \ - --hash=sha256:8b8af03d2e37866d023ad0ddea594edefc31e827fee64f8de5611a1dbc373174 \ - --hash=sha256:8c7fe7afa480e3e82eed58e0ca89f751cd14d767638e2550c77a92a9e749c317 \ - --hash=sha256:8eade758719add78ec36dc13201483f8e9b5d940329285edcd5f70c0a9edbd7f \ - --hash=sha256:911d8a40b2bef5b8bbae2e36a0b103f142ac53557ab421dc16ac4aafee6f53dc \ - --hash=sha256:93ad6d87ac18e2a90b0fe89df7c65263b9a99a0eb98f0a3d2e079f12a0735837 \ - --hash=sha256:95dea361dd73757c6f1c0a1480ac499952c16ac83f7f5f4f84f0658a01b8ef41 \ - --hash=sha256:9ab77acb98eba3fd2a85cd160851816bfce6871d944d885febf012713f06659c \ - --hash=sha256:9cb3032517f1627cc012dbc80a8ec976ae76d93ea2b5feaa9d2a5b8882597579 \ - --hash=sha256:9cf4e8ad252f7c38dd1f676b46514f92dc0ebeb0db5552f5f403509705e24753 \ - --hash=sha256:9d9153257a3f70d5f69edf2325357251ed20f772b12e593f3b3377b5f78e7ef8 \ - --hash=sha256:a152f5f33d64a6be73f1d30c9cc82dfc73cec6477ec268e7c6e4c7d23c2d2291 \ - --hash=sha256:a16418ecf1329f71df119e8a65f3aa68004a3f9383821edcb20f0702934d8087 \ - --hash=sha256:a60332922359f920193b1d4826953c507a877b523b2395ad7bc716ddd386d866 \ - --hash=sha256:a8d0fc946c784ff7f7c3742310cc8a57c5c6dc31631269876a88b809dbeff3d3 \ - --hash=sha256:ab5de034a886f616a5668aa5d098af2b5385ed70142090e2a31bcbd0af0fdb3d \ - --hash=sha256:c22d3fe05ce11d3671297dc8973267daa0f938b93ec716e12e0f6dee81591dc1 \ - --hash=sha256:c2ac1b08635a8cd4e0cbeaf6f5e922085908d48eb05d44c5ae9eabab148512ca \ - --hash=sha256:c512accbd6ff0270939b9ac214b84fb5ada5f0409c44298361b2f5e13f9aed9e \ - --hash=sha256:c75ffc45f25324e68ab238cb4b5c0a38cd1c3d7f1fb1f72b5541de469e2247db \ - --hash=sha256:c95a03c79bbe30eec3ec2b7f076074f4281526724c8685a42872974ef4d36b72 \ - --hash=sha256:cadaeaba78750d58d3cc6ac4d1fd867da6fc73c88156b7a3212a3cd4819d679d \ - --hash=sha256:cd6056167405314a4dc3c173943f11249fa0f1b204f8b51ed4bde1a9cd1834dc \ - --hash=sha256:db72b07027db150f468fbada4d85b3b2729a3db39178abf5c543b784c1254539 \ - --hash=sha256:df2c707231459e8a4028eabcd3cfc827befd635b3ef72eada84ab13b52e1574d \ - --hash=sha256:e62164b50f84e20601c1ff8eb55620d2ad25fb81b59e3cd776a1902527a788af \ - --hash=sha256:e696f0dd336161fca9adbb846875d40752e6eba585843c768935ba5c9960722b \ - --hash=sha256:eaa379fcd227ca235d04152ca6704c7cb55564116f8bc52545ff357628e10602 \ - --hash=sha256:ebea339af930f8ca5d7a699b921106c6e29c617fe9606fa7baa043c1cdae326f \ - --hash=sha256:f4c39b0e3eac288fedc2b43055cfc2ca7a60362d0e5e87a637beac5d801ef478 \ - --hash=sha256:f5057856d21e7586765171eac8b9fc3f7d44ef39425f85dbcccb13b3ebea806c \ - --hash=sha256:f6f45710b4459401609ebebdbcfb34515da4fc2aa886f95107f556ac69a9147e \ - --hash=sha256:f97e83fa6c25693c7a35de154681fcc257c1c41b38beb0304b9c4d2d9e164479 \ - --hash=sha256:f9d0c5c045a3ca9bedfc35dca8526798eb91a07aa7a2c0fee134c6c6f321cbd7 \ - --hash=sha256:ff6f3db31555657f3163b15a6b7c6938d08df7adbfc9dd13d9d19edad678f1e8 +charset-normalizer==3.1.0 \ + --hash=sha256:04afa6387e2b282cf78ff3dbce20f0cc071c12dc8f685bd40960cc68644cfea6 \ + --hash=sha256:04eefcee095f58eaabe6dc3cc2262f3bcd776d2c67005880894f447b3f2cb9c1 \ + --hash=sha256:0be65ccf618c1e7ac9b849c315cc2e8a8751d9cfdaa43027d4f6624bd587ab7e \ + --hash=sha256:0c95f12b74681e9ae127728f7e5409cbbef9cd914d5896ef238cc779b8152373 \ + --hash=sha256:0ca564606d2caafb0abe6d1b5311c2649e8071eb241b2d64e75a0d0065107e62 \ + --hash=sha256:10c93628d7497c81686e8e5e557aafa78f230cd9e77dd0c40032ef90c18f2230 \ + --hash=sha256:11d117e6c63e8f495412d37e7dc2e2fff09c34b2d09dbe2bee3c6229577818be \ + --hash=sha256:11d3bcb7be35e7b1bba2c23beedac81ee893ac9871d0ba79effc7fc01167db6c \ + --hash=sha256:12a2b561af122e3d94cdb97fe6fb2bb2b82cef0cdca131646fdb940a1eda04f0 \ + --hash=sha256:12d1a39aa6b8c6f6248bb54550efcc1c38ce0d8096a146638fd4738e42284448 \ + --hash=sha256:1435ae15108b1cb6fffbcea2af3d468683b7afed0169ad718451f8db5d1aff6f \ + --hash=sha256:1c60b9c202d00052183c9be85e5eaf18a4ada0a47d188a83c8f5c5b23252f649 \ + --hash=sha256:1e8fcdd8f672a1c4fc8d0bd3a2b576b152d2a349782d1eb0f6b8e52e9954731d \ + --hash=sha256:20064ead0717cf9a73a6d1e779b23d149b53daf971169289ed2ed43a71e8d3b0 \ + --hash=sha256:21fa558996782fc226b529fdd2ed7866c2c6ec91cee82735c98a197fae39f706 \ + --hash=sha256:22908891a380d50738e1f978667536f6c6b526a2064156203d418f4856d6e86a \ + --hash=sha256:3160a0fd9754aab7d47f95a6b63ab355388d890163eb03b2d2b87ab0a30cfa59 \ + --hash=sha256:322102cdf1ab682ecc7d9b1c5eed4ec59657a65e1c146a0da342b78f4112db23 \ + --hash=sha256:34e0a2f9c370eb95597aae63bf85eb5e96826d81e3dcf88b8886012906f509b5 \ + --hash=sha256:3573d376454d956553c356df45bb824262c397c6e26ce43e8203c4c540ee0acb \ + --hash=sha256:3747443b6a904001473370d7810aa19c3a180ccd52a7157aacc264a5ac79265e \ + --hash=sha256:38e812a197bf8e71a59fe55b757a84c1f946d0ac114acafaafaf21667a7e169e \ + --hash=sha256:3a06f32c9634a8705f4ca9946d667609f52cf130d5548881401f1eb2c39b1e2c \ + --hash=sha256:3a5fc78f9e3f501a1614a98f7c54d3969f3ad9bba8ba3d9b438c3bc5d047dd28 \ + --hash=sha256:3d9098b479e78c85080c98e1e35ff40b4a31d8953102bb0fd7d1b6f8a2111a3d \ + --hash=sha256:3dc5b6a8ecfdc5748a7e429782598e4f17ef378e3e272eeb1340ea57c9109f41 \ + --hash=sha256:4155b51ae05ed47199dc5b2a4e62abccb274cee6b01da5b895099b61b1982974 \ + --hash=sha256:49919f8400b5e49e961f320c735388ee686a62327e773fa5b3ce6721f7e785ce \ + --hash=sha256:53d0a3fa5f8af98a1e261de6a3943ca631c526635eb5817a87a59d9a57ebf48f \ + --hash=sha256:5f008525e02908b20e04707a4f704cd286d94718f48bb33edddc7d7b584dddc1 \ + --hash=sha256:628c985afb2c7d27a4800bfb609e03985aaecb42f955049957814e0491d4006d \ + --hash=sha256:65ed923f84a6844de5fd29726b888e58c62820e0769b76565480e1fdc3d062f8 \ + --hash=sha256:6734e606355834f13445b6adc38b53c0fd45f1a56a9ba06c2058f86893ae8017 \ + --hash=sha256:6baf0baf0d5d265fa7944feb9f7451cc316bfe30e8df1a61b1bb08577c554f31 \ + --hash=sha256:6f4f4668e1831850ebcc2fd0b1cd11721947b6dc7c00bf1c6bd3c929ae14f2c7 \ + --hash=sha256:6f5c2e7bc8a4bf7c426599765b1bd33217ec84023033672c1e9a8b35eaeaaaf8 \ + --hash=sha256:6f6c7a8a57e9405cad7485f4c9d3172ae486cfef1344b5ddd8e5239582d7355e \ + --hash=sha256:7381c66e0561c5757ffe616af869b916c8b4e42b367ab29fedc98481d1e74e14 \ + --hash=sha256:73dc03a6a7e30b7edc5b01b601e53e7fc924b04e1835e8e407c12c037e81adbd \ + --hash=sha256:74db0052d985cf37fa111828d0dd230776ac99c740e1a758ad99094be4f1803d \ + --hash=sha256:75f2568b4189dda1c567339b48cba4ac7384accb9c2a7ed655cd86b04055c795 \ + --hash=sha256:78cacd03e79d009d95635e7d6ff12c21eb89b894c354bd2b2ed0b4763373693b \ + --hash=sha256:80d1543d58bd3d6c271b66abf454d437a438dff01c3e62fdbcd68f2a11310d4b \ + --hash=sha256:830d2948a5ec37c386d3170c483063798d7879037492540f10a475e3fd6f244b \ + --hash=sha256:891cf9b48776b5c61c700b55a598621fdb7b1e301a550365571e9624f270c203 \ + --hash=sha256:8f25e17ab3039b05f762b0a55ae0b3632b2e073d9c8fc88e89aca31a6198e88f \ + --hash=sha256:9a3267620866c9d17b959a84dd0bd2d45719b817245e49371ead79ed4f710d19 \ + --hash=sha256:a04f86f41a8916fe45ac5024ec477f41f886b3c435da2d4e3d2709b22ab02af1 \ + --hash=sha256:aaf53a6cebad0eae578f062c7d462155eada9c172bd8c4d250b8c1d8eb7f916a \ + --hash=sha256:abc1185d79f47c0a7aaf7e2412a0eb2c03b724581139193d2d82b3ad8cbb00ac \ + --hash=sha256:ac0aa6cd53ab9a31d397f8303f92c42f534693528fafbdb997c82bae6e477ad9 \ + --hash=sha256:ac3775e3311661d4adace3697a52ac0bab17edd166087d493b52d4f4f553f9f0 \ + --hash=sha256:b06f0d3bf045158d2fb8837c5785fe9ff9b8c93358be64461a1089f5da983137 \ + --hash=sha256:b116502087ce8a6b7a5f1814568ccbd0e9f6cfd99948aa59b0e241dc57cf739f \ + --hash=sha256:b82fab78e0b1329e183a65260581de4375f619167478dddab510c6c6fb04d9b6 \ + --hash=sha256:bd7163182133c0c7701b25e604cf1611c0d87712e56e88e7ee5d72deab3e76b5 \ + --hash=sha256:c36bcbc0d5174a80d6cccf43a0ecaca44e81d25be4b7f90f0ed7bcfbb5a00909 \ + --hash=sha256:c3af8e0f07399d3176b179f2e2634c3ce9c1301379a6b8c9c9aeecd481da494f \ + --hash=sha256:c84132a54c750fda57729d1e2599bb598f5fa0344085dbde5003ba429a4798c0 \ + --hash=sha256:cb7b2ab0188829593b9de646545175547a70d9a6e2b63bf2cd87a0a391599324 \ + --hash=sha256:cca4def576f47a09a943666b8f829606bcb17e2bc2d5911a46c8f8da45f56755 \ + --hash=sha256:cf6511efa4801b9b38dc5546d7547d5b5c6ef4b081c60b23e4d941d0eba9cbeb \ + --hash=sha256:d16fd5252f883eb074ca55cb622bc0bee49b979ae4e8639fff6ca3ff44f9f854 \ + --hash=sha256:d2686f91611f9e17f4548dbf050e75b079bbc2a82be565832bc8ea9047b61c8c \ + --hash=sha256:d7fc3fca01da18fbabe4625d64bb612b533533ed10045a2ac3dd194bfa656b60 \ + --hash=sha256:dd5653e67b149503c68c4018bf07e42eeed6b4e956b24c00ccdf93ac79cdff84 \ + --hash=sha256:de5695a6f1d8340b12a5d6d4484290ee74d61e467c39ff03b39e30df62cf83a0 \ + --hash=sha256:e0ac8959c929593fee38da1c2b64ee9778733cdf03c482c9ff1d508b6b593b2b \ + --hash=sha256:e1b25e3ad6c909f398df8921780d6a3d120d8c09466720226fc621605b6f92b1 \ + --hash=sha256:e633940f28c1e913615fd624fcdd72fdba807bf53ea6925d6a588e84e1151531 \ + --hash=sha256:e89df2958e5159b811af9ff0f92614dabf4ff617c03a4c1c6ff53bf1c399e0e1 \ + --hash=sha256:ea9f9c6034ea2d93d9147818f17c2a0860d41b71c38b9ce4d55f21b6f9165a11 \ + --hash=sha256:f645caaf0008bacf349875a974220f1f1da349c5dbe7c4ec93048cdc785a3326 \ + --hash=sha256:f8303414c7b03f794347ad062c0516cee0e15f7a612abd0ce1e25caf6ceb47df \ + --hash=sha256:fca62a8301b605b954ad2e9c3666f9d97f63872aa4efcae5492baca2056b74ab # via requests click==8.1.3 \ --hash=sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e \ @@ -323,9 +310,9 @@ urllib3==1.26.14 \ --hash=sha256:076907bf8fd355cde77728471316625a4d2f7e713c125f51953bb5b3eecf4f72 \ --hash=sha256:75edcdc2f7d85b137124a6c3c9fc3933cdeaa12ecb9a6a959f22797a0feca7e1 # via requests -zipp==3.14.0 \ - --hash=sha256:188834565033387710d046e3fe96acfc9b5e86cbca7f39ff69cf21a4128198b7 \ - --hash=sha256:9e5421e176ef5ab4c0ad896624e87a7b2f07aca746c9b2aa305952800cb8eecb +zipp==3.15.0 \ + --hash=sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b \ + --hash=sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556 # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: diff --git a/requirements/dev.pip b/requirements/dev.pip index d077f6694..4a80692d4 100644 --- a/requirements/dev.pip +++ b/requirements/dev.pip @@ -4,9 +4,9 @@ # # make upgrade # -astroid==2.14.2 \ - --hash=sha256:0e0e3709d64fbffd3037e4ff403580550f14471fd3eaae9fa11cc9a5c7901153 \ - --hash=sha256:a3cf9f02c53dd259144a7e8f3ccd75d67c9a8c716ef183e0c1f291bc5d7bb3cf +astroid==2.15.0 \ + --hash=sha256:525f126d5dc1b8b0b6ee398b33159105615d92dc4a17f2cd064125d57f6186fa \ + --hash=sha256:e3e4d0ffc2d15d954065579689c36aac57a339a4679a679579af6401db4d3fdb # via pylint attrs==22.2.0 \ --hash=sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836 \ @@ -39,95 +39,82 @@ chardet==5.1.0 \ # via # -r requirements/tox.pip # tox -charset-normalizer==3.0.1 \ - --hash=sha256:00d3ffdaafe92a5dc603cb9bd5111aaa36dfa187c8285c543be562e61b755f6b \ - --hash=sha256:024e606be3ed92216e2b6952ed859d86b4cfa52cd5bc5f050e7dc28f9b43ec42 \ - --hash=sha256:0298eafff88c99982a4cf66ba2efa1128e4ddaca0b05eec4c456bbc7db691d8d \ - --hash=sha256:02a51034802cbf38db3f89c66fb5d2ec57e6fe7ef2f4a44d070a593c3688667b \ - --hash=sha256:083c8d17153ecb403e5e1eb76a7ef4babfc2c48d58899c98fcaa04833e7a2f9a \ - --hash=sha256:0a11e971ed097d24c534c037d298ad32c6ce81a45736d31e0ff0ad37ab437d59 \ - --hash=sha256:0bf2dae5291758b6f84cf923bfaa285632816007db0330002fa1de38bfcb7154 \ - --hash=sha256:0c0a590235ccd933d9892c627dec5bc7511ce6ad6c1011fdf5b11363022746c1 \ - --hash=sha256:0f438ae3532723fb6ead77e7c604be7c8374094ef4ee2c5e03a3a17f1fca256c \ - --hash=sha256:109487860ef6a328f3eec66f2bf78b0b72400280d8f8ea05f69c51644ba6521a \ - --hash=sha256:11b53acf2411c3b09e6af37e4b9005cba376c872503c8f28218c7243582df45d \ - --hash=sha256:12db3b2c533c23ab812c2b25934f60383361f8a376ae272665f8e48b88e8e1c6 \ - --hash=sha256:14e76c0f23218b8f46c4d87018ca2e441535aed3632ca134b10239dfb6dadd6b \ - --hash=sha256:16a8663d6e281208d78806dbe14ee9903715361cf81f6d4309944e4d1e59ac5b \ - --hash=sha256:292d5e8ba896bbfd6334b096e34bffb56161c81408d6d036a7dfa6929cff8783 \ - --hash=sha256:2c03cc56021a4bd59be889c2b9257dae13bf55041a3372d3295416f86b295fb5 \ - --hash=sha256:2e396d70bc4ef5325b72b593a72c8979999aa52fb8bcf03f701c1b03e1166918 \ - --hash=sha256:2edb64ee7bf1ed524a1da60cdcd2e1f6e2b4f66ef7c077680739f1641f62f555 \ - --hash=sha256:31a9ddf4718d10ae04d9b18801bd776693487cbb57d74cc3458a7673f6f34639 \ - --hash=sha256:356541bf4381fa35856dafa6a965916e54bed415ad8a24ee6de6e37deccf2786 \ - --hash=sha256:358a7c4cb8ba9b46c453b1dd8d9e431452d5249072e4f56cfda3149f6ab1405e \ - --hash=sha256:37f8febc8ec50c14f3ec9637505f28e58d4f66752207ea177c1d67df25da5aed \ - --hash=sha256:39049da0ffb96c8cbb65cbf5c5f3ca3168990adf3551bd1dee10c48fce8ae820 \ - --hash=sha256:39cf9ed17fe3b1bc81f33c9ceb6ce67683ee7526e65fde1447c772afc54a1bb8 \ - --hash=sha256:3ae1de54a77dc0d6d5fcf623290af4266412a7c4be0b1ff7444394f03f5c54e3 \ - --hash=sha256:3b590df687e3c5ee0deef9fc8c547d81986d9a1b56073d82de008744452d6541 \ - --hash=sha256:3e45867f1f2ab0711d60c6c71746ac53537f1684baa699f4f668d4c6f6ce8e14 \ - --hash=sha256:3fc1c4a2ffd64890aebdb3f97e1278b0cc72579a08ca4de8cd2c04799a3a22be \ - --hash=sha256:4457ea6774b5611f4bed5eaa5df55f70abde42364d498c5134b7ef4c6958e20e \ - --hash=sha256:44ba614de5361b3e5278e1241fda3dc1838deed864b50a10d7ce92983797fa76 \ - --hash=sha256:4a8fcf28c05c1f6d7e177a9a46a1c52798bfe2ad80681d275b10dcf317deaf0b \ - --hash=sha256:4b0d02d7102dd0f997580b51edc4cebcf2ab6397a7edf89f1c73b586c614272c \ - --hash=sha256:502218f52498a36d6bf5ea77081844017bf7982cdbe521ad85e64cabee1b608b \ - --hash=sha256:503e65837c71b875ecdd733877d852adbc465bd82c768a067badd953bf1bc5a3 \ - --hash=sha256:5995f0164fa7df59db4746112fec3f49c461dd6b31b841873443bdb077c13cfc \ - --hash=sha256:59e5686dd847347e55dffcc191a96622f016bc0ad89105e24c14e0d6305acbc6 \ - --hash=sha256:601f36512f9e28f029d9481bdaf8e89e5148ac5d89cffd3b05cd533eeb423b59 \ - --hash=sha256:608862a7bf6957f2333fc54ab4399e405baad0163dc9f8d99cb236816db169d4 \ - --hash=sha256:62595ab75873d50d57323a91dd03e6966eb79c41fa834b7a1661ed043b2d404d \ - --hash=sha256:70990b9c51340e4044cfc394a81f614f3f90d41397104d226f21e66de668730d \ - --hash=sha256:71140351489970dfe5e60fc621ada3e0f41104a5eddaca47a7acb3c1b851d6d3 \ - --hash=sha256:72966d1b297c741541ca8cf1223ff262a6febe52481af742036a0b296e35fa5a \ - --hash=sha256:74292fc76c905c0ef095fe11e188a32ebd03bc38f3f3e9bcb85e4e6db177b7ea \ - --hash=sha256:761e8904c07ad053d285670f36dd94e1b6ab7f16ce62b9805c475b7aa1cffde6 \ - --hash=sha256:772b87914ff1152b92a197ef4ea40efe27a378606c39446ded52c8f80f79702e \ - --hash=sha256:79909e27e8e4fcc9db4addea88aa63f6423ebb171db091fb4373e3312cb6d603 \ - --hash=sha256:7e189e2e1d3ed2f4aebabd2d5b0f931e883676e51c7624826e0a4e5fe8a0bf24 \ - --hash=sha256:7eb33a30d75562222b64f569c642ff3dc6689e09adda43a082208397f016c39a \ - --hash=sha256:81d6741ab457d14fdedc215516665050f3822d3e56508921cc7239f8c8e66a58 \ - --hash=sha256:8499ca8f4502af841f68135133d8258f7b32a53a1d594aa98cc52013fff55678 \ - --hash=sha256:84c3990934bae40ea69a82034912ffe5a62c60bbf6ec5bc9691419641d7d5c9a \ - --hash=sha256:87701167f2a5c930b403e9756fab1d31d4d4da52856143b609e30a1ce7160f3c \ - --hash=sha256:88600c72ef7587fe1708fd242b385b6ed4b8904976d5da0893e31df8b3480cb6 \ - --hash=sha256:8ac7b6a045b814cf0c47f3623d21ebd88b3e8cf216a14790b455ea7ff0135d18 \ - --hash=sha256:8b8af03d2e37866d023ad0ddea594edefc31e827fee64f8de5611a1dbc373174 \ - --hash=sha256:8c7fe7afa480e3e82eed58e0ca89f751cd14d767638e2550c77a92a9e749c317 \ - --hash=sha256:8eade758719add78ec36dc13201483f8e9b5d940329285edcd5f70c0a9edbd7f \ - --hash=sha256:911d8a40b2bef5b8bbae2e36a0b103f142ac53557ab421dc16ac4aafee6f53dc \ - --hash=sha256:93ad6d87ac18e2a90b0fe89df7c65263b9a99a0eb98f0a3d2e079f12a0735837 \ - --hash=sha256:95dea361dd73757c6f1c0a1480ac499952c16ac83f7f5f4f84f0658a01b8ef41 \ - --hash=sha256:9ab77acb98eba3fd2a85cd160851816bfce6871d944d885febf012713f06659c \ - --hash=sha256:9cb3032517f1627cc012dbc80a8ec976ae76d93ea2b5feaa9d2a5b8882597579 \ - --hash=sha256:9cf4e8ad252f7c38dd1f676b46514f92dc0ebeb0db5552f5f403509705e24753 \ - --hash=sha256:9d9153257a3f70d5f69edf2325357251ed20f772b12e593f3b3377b5f78e7ef8 \ - --hash=sha256:a152f5f33d64a6be73f1d30c9cc82dfc73cec6477ec268e7c6e4c7d23c2d2291 \ - --hash=sha256:a16418ecf1329f71df119e8a65f3aa68004a3f9383821edcb20f0702934d8087 \ - --hash=sha256:a60332922359f920193b1d4826953c507a877b523b2395ad7bc716ddd386d866 \ - --hash=sha256:a8d0fc946c784ff7f7c3742310cc8a57c5c6dc31631269876a88b809dbeff3d3 \ - --hash=sha256:ab5de034a886f616a5668aa5d098af2b5385ed70142090e2a31bcbd0af0fdb3d \ - --hash=sha256:c22d3fe05ce11d3671297dc8973267daa0f938b93ec716e12e0f6dee81591dc1 \ - --hash=sha256:c2ac1b08635a8cd4e0cbeaf6f5e922085908d48eb05d44c5ae9eabab148512ca \ - --hash=sha256:c512accbd6ff0270939b9ac214b84fb5ada5f0409c44298361b2f5e13f9aed9e \ - --hash=sha256:c75ffc45f25324e68ab238cb4b5c0a38cd1c3d7f1fb1f72b5541de469e2247db \ - --hash=sha256:c95a03c79bbe30eec3ec2b7f076074f4281526724c8685a42872974ef4d36b72 \ - --hash=sha256:cadaeaba78750d58d3cc6ac4d1fd867da6fc73c88156b7a3212a3cd4819d679d \ - --hash=sha256:cd6056167405314a4dc3c173943f11249fa0f1b204f8b51ed4bde1a9cd1834dc \ - --hash=sha256:db72b07027db150f468fbada4d85b3b2729a3db39178abf5c543b784c1254539 \ - --hash=sha256:df2c707231459e8a4028eabcd3cfc827befd635b3ef72eada84ab13b52e1574d \ - --hash=sha256:e62164b50f84e20601c1ff8eb55620d2ad25fb81b59e3cd776a1902527a788af \ - --hash=sha256:e696f0dd336161fca9adbb846875d40752e6eba585843c768935ba5c9960722b \ - --hash=sha256:eaa379fcd227ca235d04152ca6704c7cb55564116f8bc52545ff357628e10602 \ - --hash=sha256:ebea339af930f8ca5d7a699b921106c6e29c617fe9606fa7baa043c1cdae326f \ - --hash=sha256:f4c39b0e3eac288fedc2b43055cfc2ca7a60362d0e5e87a637beac5d801ef478 \ - --hash=sha256:f5057856d21e7586765171eac8b9fc3f7d44ef39425f85dbcccb13b3ebea806c \ - --hash=sha256:f6f45710b4459401609ebebdbcfb34515da4fc2aa886f95107f556ac69a9147e \ - --hash=sha256:f97e83fa6c25693c7a35de154681fcc257c1c41b38beb0304b9c4d2d9e164479 \ - --hash=sha256:f9d0c5c045a3ca9bedfc35dca8526798eb91a07aa7a2c0fee134c6c6f321cbd7 \ - --hash=sha256:ff6f3db31555657f3163b15a6b7c6938d08df7adbfc9dd13d9d19edad678f1e8 +charset-normalizer==3.1.0 \ + --hash=sha256:04afa6387e2b282cf78ff3dbce20f0cc071c12dc8f685bd40960cc68644cfea6 \ + --hash=sha256:04eefcee095f58eaabe6dc3cc2262f3bcd776d2c67005880894f447b3f2cb9c1 \ + --hash=sha256:0be65ccf618c1e7ac9b849c315cc2e8a8751d9cfdaa43027d4f6624bd587ab7e \ + --hash=sha256:0c95f12b74681e9ae127728f7e5409cbbef9cd914d5896ef238cc779b8152373 \ + --hash=sha256:0ca564606d2caafb0abe6d1b5311c2649e8071eb241b2d64e75a0d0065107e62 \ + --hash=sha256:10c93628d7497c81686e8e5e557aafa78f230cd9e77dd0c40032ef90c18f2230 \ + --hash=sha256:11d117e6c63e8f495412d37e7dc2e2fff09c34b2d09dbe2bee3c6229577818be \ + --hash=sha256:11d3bcb7be35e7b1bba2c23beedac81ee893ac9871d0ba79effc7fc01167db6c \ + --hash=sha256:12a2b561af122e3d94cdb97fe6fb2bb2b82cef0cdca131646fdb940a1eda04f0 \ + --hash=sha256:12d1a39aa6b8c6f6248bb54550efcc1c38ce0d8096a146638fd4738e42284448 \ + --hash=sha256:1435ae15108b1cb6fffbcea2af3d468683b7afed0169ad718451f8db5d1aff6f \ + --hash=sha256:1c60b9c202d00052183c9be85e5eaf18a4ada0a47d188a83c8f5c5b23252f649 \ + --hash=sha256:1e8fcdd8f672a1c4fc8d0bd3a2b576b152d2a349782d1eb0f6b8e52e9954731d \ + --hash=sha256:20064ead0717cf9a73a6d1e779b23d149b53daf971169289ed2ed43a71e8d3b0 \ + --hash=sha256:21fa558996782fc226b529fdd2ed7866c2c6ec91cee82735c98a197fae39f706 \ + --hash=sha256:22908891a380d50738e1f978667536f6c6b526a2064156203d418f4856d6e86a \ + --hash=sha256:3160a0fd9754aab7d47f95a6b63ab355388d890163eb03b2d2b87ab0a30cfa59 \ + --hash=sha256:322102cdf1ab682ecc7d9b1c5eed4ec59657a65e1c146a0da342b78f4112db23 \ + --hash=sha256:34e0a2f9c370eb95597aae63bf85eb5e96826d81e3dcf88b8886012906f509b5 \ + --hash=sha256:3573d376454d956553c356df45bb824262c397c6e26ce43e8203c4c540ee0acb \ + --hash=sha256:3747443b6a904001473370d7810aa19c3a180ccd52a7157aacc264a5ac79265e \ + --hash=sha256:38e812a197bf8e71a59fe55b757a84c1f946d0ac114acafaafaf21667a7e169e \ + --hash=sha256:3a06f32c9634a8705f4ca9946d667609f52cf130d5548881401f1eb2c39b1e2c \ + --hash=sha256:3a5fc78f9e3f501a1614a98f7c54d3969f3ad9bba8ba3d9b438c3bc5d047dd28 \ + --hash=sha256:3d9098b479e78c85080c98e1e35ff40b4a31d8953102bb0fd7d1b6f8a2111a3d \ + --hash=sha256:3dc5b6a8ecfdc5748a7e429782598e4f17ef378e3e272eeb1340ea57c9109f41 \ + --hash=sha256:4155b51ae05ed47199dc5b2a4e62abccb274cee6b01da5b895099b61b1982974 \ + --hash=sha256:49919f8400b5e49e961f320c735388ee686a62327e773fa5b3ce6721f7e785ce \ + --hash=sha256:53d0a3fa5f8af98a1e261de6a3943ca631c526635eb5817a87a59d9a57ebf48f \ + --hash=sha256:5f008525e02908b20e04707a4f704cd286d94718f48bb33edddc7d7b584dddc1 \ + --hash=sha256:628c985afb2c7d27a4800bfb609e03985aaecb42f955049957814e0491d4006d \ + --hash=sha256:65ed923f84a6844de5fd29726b888e58c62820e0769b76565480e1fdc3d062f8 \ + --hash=sha256:6734e606355834f13445b6adc38b53c0fd45f1a56a9ba06c2058f86893ae8017 \ + --hash=sha256:6baf0baf0d5d265fa7944feb9f7451cc316bfe30e8df1a61b1bb08577c554f31 \ + --hash=sha256:6f4f4668e1831850ebcc2fd0b1cd11721947b6dc7c00bf1c6bd3c929ae14f2c7 \ + --hash=sha256:6f5c2e7bc8a4bf7c426599765b1bd33217ec84023033672c1e9a8b35eaeaaaf8 \ + --hash=sha256:6f6c7a8a57e9405cad7485f4c9d3172ae486cfef1344b5ddd8e5239582d7355e \ + --hash=sha256:7381c66e0561c5757ffe616af869b916c8b4e42b367ab29fedc98481d1e74e14 \ + --hash=sha256:73dc03a6a7e30b7edc5b01b601e53e7fc924b04e1835e8e407c12c037e81adbd \ + --hash=sha256:74db0052d985cf37fa111828d0dd230776ac99c740e1a758ad99094be4f1803d \ + --hash=sha256:75f2568b4189dda1c567339b48cba4ac7384accb9c2a7ed655cd86b04055c795 \ + --hash=sha256:78cacd03e79d009d95635e7d6ff12c21eb89b894c354bd2b2ed0b4763373693b \ + --hash=sha256:80d1543d58bd3d6c271b66abf454d437a438dff01c3e62fdbcd68f2a11310d4b \ + --hash=sha256:830d2948a5ec37c386d3170c483063798d7879037492540f10a475e3fd6f244b \ + --hash=sha256:891cf9b48776b5c61c700b55a598621fdb7b1e301a550365571e9624f270c203 \ + --hash=sha256:8f25e17ab3039b05f762b0a55ae0b3632b2e073d9c8fc88e89aca31a6198e88f \ + --hash=sha256:9a3267620866c9d17b959a84dd0bd2d45719b817245e49371ead79ed4f710d19 \ + --hash=sha256:a04f86f41a8916fe45ac5024ec477f41f886b3c435da2d4e3d2709b22ab02af1 \ + --hash=sha256:aaf53a6cebad0eae578f062c7d462155eada9c172bd8c4d250b8c1d8eb7f916a \ + --hash=sha256:abc1185d79f47c0a7aaf7e2412a0eb2c03b724581139193d2d82b3ad8cbb00ac \ + --hash=sha256:ac0aa6cd53ab9a31d397f8303f92c42f534693528fafbdb997c82bae6e477ad9 \ + --hash=sha256:ac3775e3311661d4adace3697a52ac0bab17edd166087d493b52d4f4f553f9f0 \ + --hash=sha256:b06f0d3bf045158d2fb8837c5785fe9ff9b8c93358be64461a1089f5da983137 \ + --hash=sha256:b116502087ce8a6b7a5f1814568ccbd0e9f6cfd99948aa59b0e241dc57cf739f \ + --hash=sha256:b82fab78e0b1329e183a65260581de4375f619167478dddab510c6c6fb04d9b6 \ + --hash=sha256:bd7163182133c0c7701b25e604cf1611c0d87712e56e88e7ee5d72deab3e76b5 \ + --hash=sha256:c36bcbc0d5174a80d6cccf43a0ecaca44e81d25be4b7f90f0ed7bcfbb5a00909 \ + --hash=sha256:c3af8e0f07399d3176b179f2e2634c3ce9c1301379a6b8c9c9aeecd481da494f \ + --hash=sha256:c84132a54c750fda57729d1e2599bb598f5fa0344085dbde5003ba429a4798c0 \ + --hash=sha256:cb7b2ab0188829593b9de646545175547a70d9a6e2b63bf2cd87a0a391599324 \ + --hash=sha256:cca4def576f47a09a943666b8f829606bcb17e2bc2d5911a46c8f8da45f56755 \ + --hash=sha256:cf6511efa4801b9b38dc5546d7547d5b5c6ef4b081c60b23e4d941d0eba9cbeb \ + --hash=sha256:d16fd5252f883eb074ca55cb622bc0bee49b979ae4e8639fff6ca3ff44f9f854 \ + --hash=sha256:d2686f91611f9e17f4548dbf050e75b079bbc2a82be565832bc8ea9047b61c8c \ + --hash=sha256:d7fc3fca01da18fbabe4625d64bb612b533533ed10045a2ac3dd194bfa656b60 \ + --hash=sha256:dd5653e67b149503c68c4018bf07e42eeed6b4e956b24c00ccdf93ac79cdff84 \ + --hash=sha256:de5695a6f1d8340b12a5d6d4484290ee74d61e467c39ff03b39e30df62cf83a0 \ + --hash=sha256:e0ac8959c929593fee38da1c2b64ee9778733cdf03c482c9ff1d508b6b593b2b \ + --hash=sha256:e1b25e3ad6c909f398df8921780d6a3d120d8c09466720226fc621605b6f92b1 \ + --hash=sha256:e633940f28c1e913615fd624fcdd72fdba807bf53ea6925d6a588e84e1151531 \ + --hash=sha256:e89df2958e5159b811af9ff0f92614dabf4ff617c03a4c1c6ff53bf1c399e0e1 \ + --hash=sha256:ea9f9c6034ea2d93d9147818f17c2a0860d41b71c38b9ce4d55f21b6f9165a11 \ + --hash=sha256:f645caaf0008bacf349875a974220f1f1da349c5dbe7c4ec93048cdc785a3326 \ + --hash=sha256:f8303414c7b03f794347ad062c0516cee0e15f7a612abd0ce1e25caf6ceb47df \ + --hash=sha256:fca62a8301b605b954ad2e9c3666f9d97f63872aa4efcae5492baca2056b74ab # via requests check-manifest==0.49 \ --hash=sha256:058cd30057714c39b96ce4d83f254fc770e3145c7b1932b5940b4e3efb5521ef \ @@ -350,9 +337,9 @@ mdurl==0.1.2 \ --hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \ --hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba # via markdown-it-py -more-itertools==9.0.0 \ - --hash=sha256:250e83d7e81d0c87ca6bd942e6aeab8cc9daa6096d12c5308f3f92fa5e5c1f41 \ - --hash=sha256:5a6257e40878ef0520b1803990e3e22303a41b5714006c32a3fd8304b26ea1ab +more-itertools==9.1.0 \ + --hash=sha256:cabaa341ad0389ea83c17a94566a53ae4c9d07349861ecb14dc6d0345cf9ac5d \ + --hash=sha256:d2bc7f02446e86a68911e58ded76d6561eea00cddfb2a91e7019bbb586c799f3 # via jaraco-classes packaging==23.0 \ --hash=sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2 \ @@ -373,9 +360,9 @@ pkginfo==1.9.6 \ --hash=sha256:4b7a555a6d5a22169fcc9cf7bfd78d296b0361adad412a346c1226849af5e546 \ --hash=sha256:8fd5896e8718a4372f0ea9cc9d96f6417c9b986e23a4d116dda26b62cc29d046 # via twine -platformdirs==3.0.0 \ - --hash=sha256:8a1228abb1ef82d788f74139988b137e78692984ec7b08eaa6c65f1723af28f9 \ - --hash=sha256:b1d5eb14f221506f50d6604a561f4c5786d9e80355219694a1b244bcd96f4567 +platformdirs==3.1.0 \ + --hash=sha256:13b08a53ed71021350c9e300d4ea8668438fb0046ab3937ac9a29913a1a1350a \ + --hash=sha256:accc3665857288317f32c7bebb5a8e482ba717b474f3fc1d18ca7f9214be0cef # via # -r requirements/pip.pip # -r requirements/tox.pip @@ -400,9 +387,9 @@ pygments==2.14.0 \ # pudb # readme-renderer # rich -pylint==2.16.2 \ - --hash=sha256:13b2c805a404a9bf57d002cd5f054ca4d40b0b87542bdaba5e05321ae8262c84 \ - --hash=sha256:ff22dde9c2128cd257c145cfd51adeff0be7df4d80d669055f24a962b351bbe4 +pylint==2.16.4 \ + --hash=sha256:4a770bb74fde0550fa0ab4248a2ad04e7887462f9f425baa0cd8d3c1d098eaee \ + --hash=sha256:8841f26a0dbc3503631b6a20ee368b3f5e0e5461a1d95cf15d103dab748a0db3 # via -r requirements/dev.in pyproject-api==1.5.0 \ --hash=sha256:0962df21f3e633b8ddb9567c011e6c1b3dcdfc31b7860c0ede7e24c5a1200fbe \ @@ -414,9 +401,9 @@ pyproject-hooks==1.0.0 \ --hash=sha256:283c11acd6b928d2f6a7c73fa0d01cb2bdc5f07c57a2eeb6e83d5e56b97976f8 \ --hash=sha256:f271b298b97f5955d53fb12b72c1fb1948c22c1a6b70b315c54cedaca0264ef5 # via build -pytest==7.2.1 \ - --hash=sha256:c7c6ca206e93355074ae32f7403e8ea12163b1163c976fee7d4d84027c162be5 \ - --hash=sha256:d45e0952f3727241918b8fd0f376f5ff6b301cc0777c6f9a556935c92d8a7d42 +pytest==7.2.2 \ + --hash=sha256:130328f552dcfac0b1cec75c12e3f005619dc5f874f0a06e8ff7263f0ee6225e \ + --hash=sha256:c99ab0c73aceb050f68929bc93af19ab6db0558791c6a0715723abe9d0ade9d4 # via # -r requirements/pytest.pip # pytest-xdist @@ -445,9 +432,9 @@ rfc3986==2.0.0 \ --hash=sha256:50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd \ --hash=sha256:97aacf9dbd4bfd829baad6e6309fa6573aaf1be3f6fa735c8ab05e46cecb261c # via twine -rich==13.3.1 \ - --hash=sha256:125d96d20c92b946b983d0d392b84ff945461e5a06d3867e9f9e575f8697b67f \ - --hash=sha256:8aa57747f3fc3e977684f0176a88e789be314a99f99b43b75d1e9cb5dc6db9e9 +rich==13.3.2 \ + --hash=sha256:91954fe80cfb7985727a467ca98a7618e5dd15178cc2da10f553b36a93859001 \ + --hash=sha256:a104f37270bf677148d8acb07d33be1569eeee87e2d1beb286a4e9113caf6f2f # via twine six==1.16.0 \ --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ @@ -543,9 +530,9 @@ urwid==2.1.2 \ urwid-readline==0.13 \ --hash=sha256:018020cbc864bb5ed87be17dc26b069eae2755cb29f3a9c569aac3bded1efaf4 # via pudb -virtualenv==20.19.0 \ - --hash=sha256:37a640ba82ed40b226599c522d411e4be5edb339a0c0de030c0dc7b646d61590 \ - --hash=sha256:54eb59e7352b573aa04d53f80fc9736ed0ad5143af445a1e539aada6eb947dd1 +virtualenv==20.20.0 \ + --hash=sha256:3c22fa5a7c7aa106ced59934d2c20a2ecb7f49b4130b8bf444178a16b880fa45 \ + --hash=sha256:a8a4b8ca1e28f864b7514a253f98c1d62b64e31e77325ba279248c65fb4fcef4 # via # -r requirements/pip.pip # -r requirements/tox.pip @@ -554,75 +541,86 @@ webencodings==0.5.1 \ --hash=sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78 \ --hash=sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923 # via bleach -wrapt==1.14.1 \ - --hash=sha256:00b6d4ea20a906c0ca56d84f93065b398ab74b927a7a3dbd470f6fc503f95dc3 \ - --hash=sha256:01c205616a89d09827986bc4e859bcabd64f5a0662a7fe95e0d359424e0e071b \ - --hash=sha256:02b41b633c6261feff8ddd8d11c711df6842aba629fdd3da10249a53211a72c4 \ - --hash=sha256:07f7a7d0f388028b2df1d916e94bbb40624c59b48ecc6cbc232546706fac74c2 \ - --hash=sha256:11871514607b15cfeb87c547a49bca19fde402f32e2b1c24a632506c0a756656 \ - --hash=sha256:1b376b3f4896e7930f1f772ac4b064ac12598d1c38d04907e696cc4d794b43d3 \ - --hash=sha256:21ac0156c4b089b330b7666db40feee30a5d52634cc4560e1905d6529a3897ff \ - --hash=sha256:257fd78c513e0fb5cdbe058c27a0624c9884e735bbd131935fd49e9fe719d310 \ - --hash=sha256:2b39d38039a1fdad98c87279b48bc5dce2c0ca0d73483b12cb72aa9609278e8a \ - --hash=sha256:2cf71233a0ed05ccdabe209c606fe0bac7379fdcf687f39b944420d2a09fdb57 \ - --hash=sha256:2fe803deacd09a233e4762a1adcea5db5d31e6be577a43352936179d14d90069 \ - --hash=sha256:3232822c7d98d23895ccc443bbdf57c7412c5a65996c30442ebe6ed3df335383 \ - --hash=sha256:34aa51c45f28ba7f12accd624225e2b1e5a3a45206aa191f6f9aac931d9d56fe \ - --hash=sha256:36f582d0c6bc99d5f39cd3ac2a9062e57f3cf606ade29a0a0d6b323462f4dd87 \ - --hash=sha256:380a85cf89e0e69b7cfbe2ea9f765f004ff419f34194018a6827ac0e3edfed4d \ - --hash=sha256:40e7bc81c9e2b2734ea4bc1aceb8a8f0ceaac7c5299bc5d69e37c44d9081d43b \ - --hash=sha256:43ca3bbbe97af00f49efb06e352eae40434ca9d915906f77def219b88e85d907 \ - --hash=sha256:4fcc4649dc762cddacd193e6b55bc02edca674067f5f98166d7713b193932b7f \ - --hash=sha256:5a0f54ce2c092aaf439813735584b9537cad479575a09892b8352fea5e988dc0 \ - --hash=sha256:5a9a0d155deafd9448baff28c08e150d9b24ff010e899311ddd63c45c2445e28 \ - --hash=sha256:5b02d65b9ccf0ef6c34cba6cf5bf2aab1bb2f49c6090bafeecc9cd81ad4ea1c1 \ - --hash=sha256:60db23fa423575eeb65ea430cee741acb7c26a1365d103f7b0f6ec412b893853 \ - --hash=sha256:642c2e7a804fcf18c222e1060df25fc210b9c58db7c91416fb055897fc27e8cc \ - --hash=sha256:6a9a25751acb379b466ff6be78a315e2b439d4c94c1e99cb7266d40a537995d3 \ - --hash=sha256:6b1a564e6cb69922c7fe3a678b9f9a3c54e72b469875aa8018f18b4d1dd1adf3 \ - --hash=sha256:6d323e1554b3d22cfc03cd3243b5bb815a51f5249fdcbb86fda4bf62bab9e164 \ - --hash=sha256:6e743de5e9c3d1b7185870f480587b75b1cb604832e380d64f9504a0535912d1 \ - --hash=sha256:709fe01086a55cf79d20f741f39325018f4df051ef39fe921b1ebe780a66184c \ - --hash=sha256:7b7c050ae976e286906dd3f26009e117eb000fb2cf3533398c5ad9ccc86867b1 \ - --hash=sha256:7d2872609603cb35ca513d7404a94d6d608fc13211563571117046c9d2bcc3d7 \ - --hash=sha256:7ef58fb89674095bfc57c4069e95d7a31cfdc0939e2a579882ac7d55aadfd2a1 \ - --hash=sha256:80bb5c256f1415f747011dc3604b59bc1f91c6e7150bd7db03b19170ee06b320 \ - --hash=sha256:81b19725065dcb43df02b37e03278c011a09e49757287dca60c5aecdd5a0b8ed \ - --hash=sha256:833b58d5d0b7e5b9832869f039203389ac7cbf01765639c7309fd50ef619e0b1 \ - --hash=sha256:88bd7b6bd70a5b6803c1abf6bca012f7ed963e58c68d76ee20b9d751c74a3248 \ - --hash=sha256:8ad85f7f4e20964db4daadcab70b47ab05c7c1cf2a7c1e51087bfaa83831854c \ - --hash=sha256:8c0ce1e99116d5ab21355d8ebe53d9460366704ea38ae4d9f6933188f327b456 \ - --hash=sha256:8d649d616e5c6a678b26d15ece345354f7c2286acd6db868e65fcc5ff7c24a77 \ - --hash=sha256:903500616422a40a98a5a3c4ff4ed9d0066f3b4c951fa286018ecdf0750194ef \ - --hash=sha256:9736af4641846491aedb3c3f56b9bc5568d92b0692303b5a305301a95dfd38b1 \ - --hash=sha256:988635d122aaf2bdcef9e795435662bcd65b02f4f4c1ae37fbee7401c440b3a7 \ - --hash=sha256:9cca3c2cdadb362116235fdbd411735de4328c61425b0aa9f872fd76d02c4e86 \ - --hash=sha256:9e0fd32e0148dd5dea6af5fee42beb949098564cc23211a88d799e434255a1f4 \ - --hash=sha256:9f3e6f9e05148ff90002b884fbc2a86bd303ae847e472f44ecc06c2cd2fcdb2d \ - --hash=sha256:a85d2b46be66a71bedde836d9e41859879cc54a2a04fad1191eb50c2066f6e9d \ - --hash=sha256:a9a52172be0b5aae932bef82a79ec0a0ce87288c7d132946d645eba03f0ad8a8 \ - --hash=sha256:aa31fdcc33fef9eb2552cbcbfee7773d5a6792c137b359e82879c101e98584c5 \ - --hash=sha256:b014c23646a467558be7da3d6b9fa409b2c567d2110599b7cf9a0c5992b3b471 \ - --hash=sha256:b21bb4c09ffabfa0e85e3a6b623e19b80e7acd709b9f91452b8297ace2a8ab00 \ - --hash=sha256:b5901a312f4d14c59918c221323068fad0540e34324925c8475263841dbdfe68 \ - --hash=sha256:b9b7a708dd92306328117d8c4b62e2194d00c365f18eff11a9b53c6f923b01e3 \ - --hash=sha256:d1967f46ea8f2db647c786e78d8cc7e4313dbd1b0aca360592d8027b8508e24d \ - --hash=sha256:d52a25136894c63de15a35bc0bdc5adb4b0e173b9c0d07a2be9d3ca64a332735 \ - --hash=sha256:d77c85fedff92cf788face9bfa3ebaa364448ebb1d765302e9af11bf449ca36d \ - --hash=sha256:d79d7d5dc8a32b7093e81e97dad755127ff77bcc899e845f41bf71747af0c569 \ - --hash=sha256:dbcda74c67263139358f4d188ae5faae95c30929281bc6866d00573783c422b7 \ - --hash=sha256:ddaea91abf8b0d13443f6dac52e89051a5063c7d014710dcb4d4abb2ff811a59 \ - --hash=sha256:dee0ce50c6a2dd9056c20db781e9c1cfd33e77d2d569f5d1d9321c641bb903d5 \ - --hash=sha256:dee60e1de1898bde3b238f18340eec6148986da0455d8ba7848d50470a7a32fb \ - --hash=sha256:e2f83e18fe2f4c9e7db597e988f72712c0c3676d337d8b101f6758107c42425b \ - --hash=sha256:e3fb1677c720409d5f671e39bac6c9e0e422584e5f518bfd50aa4cbbea02433f \ - --hash=sha256:ee2b1b1769f6707a8a445162ea16dddf74285c3964f605877a20e38545c3c462 \ - --hash=sha256:ee6acae74a2b91865910eef5e7de37dc6895ad96fa23603d1d27ea69df545015 \ - --hash=sha256:ef3f72c9666bba2bab70d2a8b79f2c6d2c1a42a7f7e2b0ec83bb2f9e383950af +wrapt==1.15.0 \ + --hash=sha256:02fce1852f755f44f95af51f69d22e45080102e9d00258053b79367d07af39c0 \ + --hash=sha256:077ff0d1f9d9e4ce6476c1a924a3332452c1406e59d90a2cf24aeb29eeac9420 \ + --hash=sha256:078e2a1a86544e644a68422f881c48b84fef6d18f8c7a957ffd3f2e0a74a0d4a \ + --hash=sha256:0970ddb69bba00670e58955f8019bec4a42d1785db3faa043c33d81de2bf843c \ + --hash=sha256:1286eb30261894e4c70d124d44b7fd07825340869945c79d05bda53a40caa079 \ + --hash=sha256:21f6d9a0d5b3a207cdf7acf8e58d7d13d463e639f0c7e01d82cdb671e6cb7923 \ + --hash=sha256:230ae493696a371f1dbffaad3dafbb742a4d27a0afd2b1aecebe52b740167e7f \ + --hash=sha256:26458da5653aa5b3d8dc8b24192f574a58984c749401f98fff994d41d3f08da1 \ + --hash=sha256:2cf56d0e237280baed46f0b5316661da892565ff58309d4d2ed7dba763d984b8 \ + --hash=sha256:2e51de54d4fb8fb50d6ee8327f9828306a959ae394d3e01a1ba8b2f937747d86 \ + --hash=sha256:2fbfbca668dd15b744418265a9607baa970c347eefd0db6a518aaf0cfbd153c0 \ + --hash=sha256:38adf7198f8f154502883242f9fe7333ab05a5b02de7d83aa2d88ea621f13364 \ + --hash=sha256:3a8564f283394634a7a7054b7983e47dbf39c07712d7b177b37e03f2467a024e \ + --hash=sha256:3abbe948c3cbde2689370a262a8d04e32ec2dd4f27103669a45c6929bcdbfe7c \ + --hash=sha256:3bbe623731d03b186b3d6b0d6f51865bf598587c38d6f7b0be2e27414f7f214e \ + --hash=sha256:40737a081d7497efea35ab9304b829b857f21558acfc7b3272f908d33b0d9d4c \ + --hash=sha256:41d07d029dd4157ae27beab04d22b8e261eddfc6ecd64ff7000b10dc8b3a5727 \ + --hash=sha256:46ed616d5fb42f98630ed70c3529541408166c22cdfd4540b88d5f21006b0eff \ + --hash=sha256:493d389a2b63c88ad56cdc35d0fa5752daac56ca755805b1b0c530f785767d5e \ + --hash=sha256:4ff0d20f2e670800d3ed2b220d40984162089a6e2c9646fdb09b85e6f9a8fc29 \ + --hash=sha256:54accd4b8bc202966bafafd16e69da9d5640ff92389d33d28555c5fd4f25ccb7 \ + --hash=sha256:56374914b132c702aa9aa9959c550004b8847148f95e1b824772d453ac204a72 \ + --hash=sha256:578383d740457fa790fdf85e6d346fda1416a40549fe8db08e5e9bd281c6a475 \ + --hash=sha256:58d7a75d731e8c63614222bcb21dd992b4ab01a399f1f09dd82af17bbfc2368a \ + --hash=sha256:5c5aa28df055697d7c37d2099a7bc09f559d5053c3349b1ad0c39000e611d317 \ + --hash=sha256:5fc8e02f5984a55d2c653f5fea93531e9836abbd84342c1d1e17abc4a15084c2 \ + --hash=sha256:63424c681923b9f3bfbc5e3205aafe790904053d42ddcc08542181a30a7a51bd \ + --hash=sha256:64b1df0f83706b4ef4cfb4fb0e4c2669100fd7ecacfb59e091fad300d4e04640 \ + --hash=sha256:74934ebd71950e3db69960a7da29204f89624dde411afbfb3b4858c1409b1e98 \ + --hash=sha256:75669d77bb2c071333417617a235324a1618dba66f82a750362eccbe5b61d248 \ + --hash=sha256:75760a47c06b5974aa5e01949bf7e66d2af4d08cb8c1d6516af5e39595397f5e \ + --hash=sha256:76407ab327158c510f44ded207e2f76b657303e17cb7a572ffe2f5a8a48aa04d \ + --hash=sha256:76e9c727a874b4856d11a32fb0b389afc61ce8aaf281ada613713ddeadd1cfec \ + --hash=sha256:77d4c1b881076c3ba173484dfa53d3582c1c8ff1f914c6461ab70c8428b796c1 \ + --hash=sha256:780c82a41dc493b62fc5884fb1d3a3b81106642c5c5c78d6a0d4cbe96d62ba7e \ + --hash=sha256:7dc0713bf81287a00516ef43137273b23ee414fe41a3c14be10dd95ed98a2df9 \ + --hash=sha256:7eebcdbe3677e58dd4c0e03b4f2cfa346ed4049687d839adad68cc38bb559c92 \ + --hash=sha256:896689fddba4f23ef7c718279e42f8834041a21342d95e56922e1c10c0cc7afb \ + --hash=sha256:96177eb5645b1c6985f5c11d03fc2dbda9ad24ec0f3a46dcce91445747e15094 \ + --hash=sha256:96e25c8603a155559231c19c0349245eeb4ac0096fe3c1d0be5c47e075bd4f46 \ + --hash=sha256:9d37ac69edc5614b90516807de32d08cb8e7b12260a285ee330955604ed9dd29 \ + --hash=sha256:9ed6aa0726b9b60911f4aed8ec5b8dd7bf3491476015819f56473ffaef8959bd \ + --hash=sha256:a487f72a25904e2b4bbc0817ce7a8de94363bd7e79890510174da9d901c38705 \ + --hash=sha256:a4cbb9ff5795cd66f0066bdf5947f170f5d63a9274f99bdbca02fd973adcf2a8 \ + --hash=sha256:a74d56552ddbde46c246b5b89199cb3fd182f9c346c784e1a93e4dc3f5ec9975 \ + --hash=sha256:a89ce3fd220ff144bd9d54da333ec0de0399b52c9ac3d2ce34b569cf1a5748fb \ + --hash=sha256:abd52a09d03adf9c763d706df707c343293d5d106aea53483e0ec8d9e310ad5e \ + --hash=sha256:abd8f36c99512755b8456047b7be10372fca271bf1467a1caa88db991e7c421b \ + --hash=sha256:af5bd9ccb188f6a5fdda9f1f09d9f4c86cc8a539bd48a0bfdc97723970348418 \ + --hash=sha256:b02f21c1e2074943312d03d243ac4388319f2456576b2c6023041c4d57cd7019 \ + --hash=sha256:b06fa97478a5f478fb05e1980980a7cdf2712015493b44d0c87606c1513ed5b1 \ + --hash=sha256:b0724f05c396b0a4c36a3226c31648385deb6a65d8992644c12a4963c70326ba \ + --hash=sha256:b130fe77361d6771ecf5a219d8e0817d61b236b7d8b37cc045172e574ed219e6 \ + --hash=sha256:b56d5519e470d3f2fe4aa7585f0632b060d532d0696c5bdfb5e8319e1d0f69a2 \ + --hash=sha256:b67b819628e3b748fd3c2192c15fb951f549d0f47c0449af0764d7647302fda3 \ + --hash=sha256:ba1711cda2d30634a7e452fc79eabcadaffedf241ff206db2ee93dd2c89a60e7 \ + --hash=sha256:bbeccb1aa40ab88cd29e6c7d8585582c99548f55f9b2581dfc5ba68c59a85752 \ + --hash=sha256:bd84395aab8e4d36263cd1b9308cd504f6cf713b7d6d3ce25ea55670baec5416 \ + --hash=sha256:c99f4309f5145b93eca6e35ac1a988f0dc0a7ccf9ccdcd78d3c0adf57224e62f \ + --hash=sha256:ca1cccf838cd28d5a0883b342474c630ac48cac5df0ee6eacc9c7290f76b11c1 \ + --hash=sha256:cd525e0e52a5ff16653a3fc9e3dd827981917d34996600bbc34c05d048ca35cc \ + --hash=sha256:cdb4f085756c96a3af04e6eca7f08b1345e94b53af8921b25c72f096e704e145 \ + --hash=sha256:ce42618f67741d4697684e501ef02f29e758a123aa2d669e2d964ff734ee00ee \ + --hash=sha256:d06730c6aed78cee4126234cf2d071e01b44b915e725a6cb439a879ec9754a3a \ + --hash=sha256:d5fe3e099cf07d0fb5a1e23d399e5d4d1ca3e6dfcbe5c8570ccff3e9208274f7 \ + --hash=sha256:d6bcbfc99f55655c3d93feb7ef3800bd5bbe963a755687cbf1f490a71fb7794b \ + --hash=sha256:d787272ed958a05b2c86311d3a4135d3c2aeea4fc655705f074130aa57d71653 \ + --hash=sha256:e169e957c33576f47e21864cf3fc9ff47c223a4ebca8960079b8bd36cb014fd0 \ + --hash=sha256:e20076a211cd6f9b44a6be58f7eeafa7ab5720eb796975d0c03f05b47d89eb90 \ + --hash=sha256:e826aadda3cae59295b95343db8f3d965fb31059da7de01ee8d1c40a60398b29 \ + --hash=sha256:eef4d64c650f33347c1f9266fa5ae001440b232ad9b98f1f43dfe7a79435c0a6 \ + --hash=sha256:f2e69b3ed24544b0d3dbe2c5c0ba5153ce50dcebb576fdc4696d52aa22db6034 \ + --hash=sha256:f87ec75864c37c4c6cb908d282e1969e79763e0d9becdfe9fe5473b7bb1e5f09 \ + --hash=sha256:fbec11614dba0424ca72f4e8ba3c420dba07b4a7c206c8c8e4e73f2e98f4c559 \ + --hash=sha256:fd69666217b62fa5d7c6aa88e507493a34dec4fa20c5bd925e4bc12fce586639 # via astroid -zipp==3.14.0 \ - --hash=sha256:188834565033387710d046e3fe96acfc9b5e86cbca7f39ff69cf21a4128198b7 \ - --hash=sha256:9e5421e176ef5ab4c0ad896624e87a7b2f07aca746c9b2aa305952800cb8eecb +zipp==3.15.0 \ + --hash=sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b \ + --hash=sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556 # via # -r requirements/pip.pip # -r requirements/pytest.pip diff --git a/requirements/kit.pip b/requirements/kit.pip index b8fa0a779..50efcfdaa 100644 --- a/requirements/kit.pip +++ b/requirements/kit.pip @@ -48,9 +48,9 @@ packaging==23.0 \ # via # build # cibuildwheel -platformdirs==3.0.0 \ - --hash=sha256:8a1228abb1ef82d788f74139988b137e78692984ec7b08eaa6c65f1723af28f9 \ - --hash=sha256:b1d5eb14f221506f50d6604a561f4c5786d9e80355219694a1b244bcd96f4567 +platformdirs==3.1.0 \ + --hash=sha256:13b08a53ed71021350c9e300d4ea8668438fb0046ab3937ac9a29913a1a1350a \ + --hash=sha256:accc3665857288317f32c7bebb5a8e482ba717b474f3fc1d18ca7f9214be0cef # via cibuildwheel pyelftools==0.29 \ --hash=sha256:519f38cf412f073b2d7393aa4682b0190fa901f7c3fa0bff2b82d537690c7fc1 \ @@ -78,9 +78,9 @@ wheel==0.38.4 \ --hash=sha256:965f5259b566725405b05e7cf774052044b1ed30119b5d586b2703aafe8719ac \ --hash=sha256:b60533f3f5d530e971d6737ca6d58681ee434818fab630c83a734bb10c083ce8 # via -r requirements/kit.in -zipp==3.14.0 \ - --hash=sha256:188834565033387710d046e3fe96acfc9b5e86cbca7f39ff69cf21a4128198b7 \ - --hash=sha256:9e5421e176ef5ab4c0ad896624e87a7b2f07aca746c9b2aa305952800cb8eecb +zipp==3.15.0 \ + --hash=sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b \ + --hash=sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556 # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: diff --git a/requirements/lint.pip b/requirements/lint.pip index af7b9d19e..bb09991f4 100644 --- a/requirements/lint.pip +++ b/requirements/lint.pip @@ -8,9 +8,9 @@ alabaster==0.7.13 \ --hash=sha256:1ee19aca801bbabb5ba3f5f258e4422dfa86f82f3e9cefb0859b283cdd7f62a3 \ --hash=sha256:a27a4a084d5e690e16e01e03ad2b2e552c61a65469419b907243193de1a84ae2 # via sphinx -astroid==2.14.2 \ - --hash=sha256:0e0e3709d64fbffd3037e4ff403580550f14471fd3eaae9fa11cc9a5c7901153 \ - --hash=sha256:a3cf9f02c53dd259144a7e8f3ccd75d67c9a8c716ef183e0c1f291bc5d7bb3cf +astroid==2.15.0 \ + --hash=sha256:525f126d5dc1b8b0b6ee398b33159105615d92dc4a17f2cd064125d57f6186fa \ + --hash=sha256:e3e4d0ffc2d15d954065579689c36aac57a339a4679a679579af6401db4d3fdb # via pylint attrs==22.2.0 \ --hash=sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836 \ @@ -20,9 +20,9 @@ attrs==22.2.0 \ # hypothesis # pytest # scriv -babel==2.11.0 \ - --hash=sha256:1ad3eca1c885218f6dce2ab67291178944f810a10a9b5f3cb8382a5a232b64fe \ - --hash=sha256:5ef4b3226b0180dedded4229651c8b0e1a3a6a2837d45a073272f313e4cf97f6 +babel==2.12.1 \ + --hash=sha256:b4246fb7677d3b98f501a39d43396d3cafdc8eadb045f4a31be01863f655c610 \ + --hash=sha256:cc2d99999cd01d44420ae725a21c9e3711b3aadc7976d6147f622d8581963455 # via sphinx bleach==6.0.0 \ --hash=sha256:1a1a85c1595e07d8db14c5f09f09e6433502c51c595970edc090551f0db99414 \ @@ -48,95 +48,82 @@ chardet==5.1.0 \ # via # -r requirements/tox.pip # tox -charset-normalizer==3.0.1 \ - --hash=sha256:00d3ffdaafe92a5dc603cb9bd5111aaa36dfa187c8285c543be562e61b755f6b \ - --hash=sha256:024e606be3ed92216e2b6952ed859d86b4cfa52cd5bc5f050e7dc28f9b43ec42 \ - --hash=sha256:0298eafff88c99982a4cf66ba2efa1128e4ddaca0b05eec4c456bbc7db691d8d \ - --hash=sha256:02a51034802cbf38db3f89c66fb5d2ec57e6fe7ef2f4a44d070a593c3688667b \ - --hash=sha256:083c8d17153ecb403e5e1eb76a7ef4babfc2c48d58899c98fcaa04833e7a2f9a \ - --hash=sha256:0a11e971ed097d24c534c037d298ad32c6ce81a45736d31e0ff0ad37ab437d59 \ - --hash=sha256:0bf2dae5291758b6f84cf923bfaa285632816007db0330002fa1de38bfcb7154 \ - --hash=sha256:0c0a590235ccd933d9892c627dec5bc7511ce6ad6c1011fdf5b11363022746c1 \ - --hash=sha256:0f438ae3532723fb6ead77e7c604be7c8374094ef4ee2c5e03a3a17f1fca256c \ - --hash=sha256:109487860ef6a328f3eec66f2bf78b0b72400280d8f8ea05f69c51644ba6521a \ - --hash=sha256:11b53acf2411c3b09e6af37e4b9005cba376c872503c8f28218c7243582df45d \ - --hash=sha256:12db3b2c533c23ab812c2b25934f60383361f8a376ae272665f8e48b88e8e1c6 \ - --hash=sha256:14e76c0f23218b8f46c4d87018ca2e441535aed3632ca134b10239dfb6dadd6b \ - --hash=sha256:16a8663d6e281208d78806dbe14ee9903715361cf81f6d4309944e4d1e59ac5b \ - --hash=sha256:292d5e8ba896bbfd6334b096e34bffb56161c81408d6d036a7dfa6929cff8783 \ - --hash=sha256:2c03cc56021a4bd59be889c2b9257dae13bf55041a3372d3295416f86b295fb5 \ - --hash=sha256:2e396d70bc4ef5325b72b593a72c8979999aa52fb8bcf03f701c1b03e1166918 \ - --hash=sha256:2edb64ee7bf1ed524a1da60cdcd2e1f6e2b4f66ef7c077680739f1641f62f555 \ - --hash=sha256:31a9ddf4718d10ae04d9b18801bd776693487cbb57d74cc3458a7673f6f34639 \ - --hash=sha256:356541bf4381fa35856dafa6a965916e54bed415ad8a24ee6de6e37deccf2786 \ - --hash=sha256:358a7c4cb8ba9b46c453b1dd8d9e431452d5249072e4f56cfda3149f6ab1405e \ - --hash=sha256:37f8febc8ec50c14f3ec9637505f28e58d4f66752207ea177c1d67df25da5aed \ - --hash=sha256:39049da0ffb96c8cbb65cbf5c5f3ca3168990adf3551bd1dee10c48fce8ae820 \ - --hash=sha256:39cf9ed17fe3b1bc81f33c9ceb6ce67683ee7526e65fde1447c772afc54a1bb8 \ - --hash=sha256:3ae1de54a77dc0d6d5fcf623290af4266412a7c4be0b1ff7444394f03f5c54e3 \ - --hash=sha256:3b590df687e3c5ee0deef9fc8c547d81986d9a1b56073d82de008744452d6541 \ - --hash=sha256:3e45867f1f2ab0711d60c6c71746ac53537f1684baa699f4f668d4c6f6ce8e14 \ - --hash=sha256:3fc1c4a2ffd64890aebdb3f97e1278b0cc72579a08ca4de8cd2c04799a3a22be \ - --hash=sha256:4457ea6774b5611f4bed5eaa5df55f70abde42364d498c5134b7ef4c6958e20e \ - --hash=sha256:44ba614de5361b3e5278e1241fda3dc1838deed864b50a10d7ce92983797fa76 \ - --hash=sha256:4a8fcf28c05c1f6d7e177a9a46a1c52798bfe2ad80681d275b10dcf317deaf0b \ - --hash=sha256:4b0d02d7102dd0f997580b51edc4cebcf2ab6397a7edf89f1c73b586c614272c \ - --hash=sha256:502218f52498a36d6bf5ea77081844017bf7982cdbe521ad85e64cabee1b608b \ - --hash=sha256:503e65837c71b875ecdd733877d852adbc465bd82c768a067badd953bf1bc5a3 \ - --hash=sha256:5995f0164fa7df59db4746112fec3f49c461dd6b31b841873443bdb077c13cfc \ - --hash=sha256:59e5686dd847347e55dffcc191a96622f016bc0ad89105e24c14e0d6305acbc6 \ - --hash=sha256:601f36512f9e28f029d9481bdaf8e89e5148ac5d89cffd3b05cd533eeb423b59 \ - --hash=sha256:608862a7bf6957f2333fc54ab4399e405baad0163dc9f8d99cb236816db169d4 \ - --hash=sha256:62595ab75873d50d57323a91dd03e6966eb79c41fa834b7a1661ed043b2d404d \ - --hash=sha256:70990b9c51340e4044cfc394a81f614f3f90d41397104d226f21e66de668730d \ - --hash=sha256:71140351489970dfe5e60fc621ada3e0f41104a5eddaca47a7acb3c1b851d6d3 \ - --hash=sha256:72966d1b297c741541ca8cf1223ff262a6febe52481af742036a0b296e35fa5a \ - --hash=sha256:74292fc76c905c0ef095fe11e188a32ebd03bc38f3f3e9bcb85e4e6db177b7ea \ - --hash=sha256:761e8904c07ad053d285670f36dd94e1b6ab7f16ce62b9805c475b7aa1cffde6 \ - --hash=sha256:772b87914ff1152b92a197ef4ea40efe27a378606c39446ded52c8f80f79702e \ - --hash=sha256:79909e27e8e4fcc9db4addea88aa63f6423ebb171db091fb4373e3312cb6d603 \ - --hash=sha256:7e189e2e1d3ed2f4aebabd2d5b0f931e883676e51c7624826e0a4e5fe8a0bf24 \ - --hash=sha256:7eb33a30d75562222b64f569c642ff3dc6689e09adda43a082208397f016c39a \ - --hash=sha256:81d6741ab457d14fdedc215516665050f3822d3e56508921cc7239f8c8e66a58 \ - --hash=sha256:8499ca8f4502af841f68135133d8258f7b32a53a1d594aa98cc52013fff55678 \ - --hash=sha256:84c3990934bae40ea69a82034912ffe5a62c60bbf6ec5bc9691419641d7d5c9a \ - --hash=sha256:87701167f2a5c930b403e9756fab1d31d4d4da52856143b609e30a1ce7160f3c \ - --hash=sha256:88600c72ef7587fe1708fd242b385b6ed4b8904976d5da0893e31df8b3480cb6 \ - --hash=sha256:8ac7b6a045b814cf0c47f3623d21ebd88b3e8cf216a14790b455ea7ff0135d18 \ - --hash=sha256:8b8af03d2e37866d023ad0ddea594edefc31e827fee64f8de5611a1dbc373174 \ - --hash=sha256:8c7fe7afa480e3e82eed58e0ca89f751cd14d767638e2550c77a92a9e749c317 \ - --hash=sha256:8eade758719add78ec36dc13201483f8e9b5d940329285edcd5f70c0a9edbd7f \ - --hash=sha256:911d8a40b2bef5b8bbae2e36a0b103f142ac53557ab421dc16ac4aafee6f53dc \ - --hash=sha256:93ad6d87ac18e2a90b0fe89df7c65263b9a99a0eb98f0a3d2e079f12a0735837 \ - --hash=sha256:95dea361dd73757c6f1c0a1480ac499952c16ac83f7f5f4f84f0658a01b8ef41 \ - --hash=sha256:9ab77acb98eba3fd2a85cd160851816bfce6871d944d885febf012713f06659c \ - --hash=sha256:9cb3032517f1627cc012dbc80a8ec976ae76d93ea2b5feaa9d2a5b8882597579 \ - --hash=sha256:9cf4e8ad252f7c38dd1f676b46514f92dc0ebeb0db5552f5f403509705e24753 \ - --hash=sha256:9d9153257a3f70d5f69edf2325357251ed20f772b12e593f3b3377b5f78e7ef8 \ - --hash=sha256:a152f5f33d64a6be73f1d30c9cc82dfc73cec6477ec268e7c6e4c7d23c2d2291 \ - --hash=sha256:a16418ecf1329f71df119e8a65f3aa68004a3f9383821edcb20f0702934d8087 \ - --hash=sha256:a60332922359f920193b1d4826953c507a877b523b2395ad7bc716ddd386d866 \ - --hash=sha256:a8d0fc946c784ff7f7c3742310cc8a57c5c6dc31631269876a88b809dbeff3d3 \ - --hash=sha256:ab5de034a886f616a5668aa5d098af2b5385ed70142090e2a31bcbd0af0fdb3d \ - --hash=sha256:c22d3fe05ce11d3671297dc8973267daa0f938b93ec716e12e0f6dee81591dc1 \ - --hash=sha256:c2ac1b08635a8cd4e0cbeaf6f5e922085908d48eb05d44c5ae9eabab148512ca \ - --hash=sha256:c512accbd6ff0270939b9ac214b84fb5ada5f0409c44298361b2f5e13f9aed9e \ - --hash=sha256:c75ffc45f25324e68ab238cb4b5c0a38cd1c3d7f1fb1f72b5541de469e2247db \ - --hash=sha256:c95a03c79bbe30eec3ec2b7f076074f4281526724c8685a42872974ef4d36b72 \ - --hash=sha256:cadaeaba78750d58d3cc6ac4d1fd867da6fc73c88156b7a3212a3cd4819d679d \ - --hash=sha256:cd6056167405314a4dc3c173943f11249fa0f1b204f8b51ed4bde1a9cd1834dc \ - --hash=sha256:db72b07027db150f468fbada4d85b3b2729a3db39178abf5c543b784c1254539 \ - --hash=sha256:df2c707231459e8a4028eabcd3cfc827befd635b3ef72eada84ab13b52e1574d \ - --hash=sha256:e62164b50f84e20601c1ff8eb55620d2ad25fb81b59e3cd776a1902527a788af \ - --hash=sha256:e696f0dd336161fca9adbb846875d40752e6eba585843c768935ba5c9960722b \ - --hash=sha256:eaa379fcd227ca235d04152ca6704c7cb55564116f8bc52545ff357628e10602 \ - --hash=sha256:ebea339af930f8ca5d7a699b921106c6e29c617fe9606fa7baa043c1cdae326f \ - --hash=sha256:f4c39b0e3eac288fedc2b43055cfc2ca7a60362d0e5e87a637beac5d801ef478 \ - --hash=sha256:f5057856d21e7586765171eac8b9fc3f7d44ef39425f85dbcccb13b3ebea806c \ - --hash=sha256:f6f45710b4459401609ebebdbcfb34515da4fc2aa886f95107f556ac69a9147e \ - --hash=sha256:f97e83fa6c25693c7a35de154681fcc257c1c41b38beb0304b9c4d2d9e164479 \ - --hash=sha256:f9d0c5c045a3ca9bedfc35dca8526798eb91a07aa7a2c0fee134c6c6f321cbd7 \ - --hash=sha256:ff6f3db31555657f3163b15a6b7c6938d08df7adbfc9dd13d9d19edad678f1e8 +charset-normalizer==3.1.0 \ + --hash=sha256:04afa6387e2b282cf78ff3dbce20f0cc071c12dc8f685bd40960cc68644cfea6 \ + --hash=sha256:04eefcee095f58eaabe6dc3cc2262f3bcd776d2c67005880894f447b3f2cb9c1 \ + --hash=sha256:0be65ccf618c1e7ac9b849c315cc2e8a8751d9cfdaa43027d4f6624bd587ab7e \ + --hash=sha256:0c95f12b74681e9ae127728f7e5409cbbef9cd914d5896ef238cc779b8152373 \ + --hash=sha256:0ca564606d2caafb0abe6d1b5311c2649e8071eb241b2d64e75a0d0065107e62 \ + --hash=sha256:10c93628d7497c81686e8e5e557aafa78f230cd9e77dd0c40032ef90c18f2230 \ + --hash=sha256:11d117e6c63e8f495412d37e7dc2e2fff09c34b2d09dbe2bee3c6229577818be \ + --hash=sha256:11d3bcb7be35e7b1bba2c23beedac81ee893ac9871d0ba79effc7fc01167db6c \ + --hash=sha256:12a2b561af122e3d94cdb97fe6fb2bb2b82cef0cdca131646fdb940a1eda04f0 \ + --hash=sha256:12d1a39aa6b8c6f6248bb54550efcc1c38ce0d8096a146638fd4738e42284448 \ + --hash=sha256:1435ae15108b1cb6fffbcea2af3d468683b7afed0169ad718451f8db5d1aff6f \ + --hash=sha256:1c60b9c202d00052183c9be85e5eaf18a4ada0a47d188a83c8f5c5b23252f649 \ + --hash=sha256:1e8fcdd8f672a1c4fc8d0bd3a2b576b152d2a349782d1eb0f6b8e52e9954731d \ + --hash=sha256:20064ead0717cf9a73a6d1e779b23d149b53daf971169289ed2ed43a71e8d3b0 \ + --hash=sha256:21fa558996782fc226b529fdd2ed7866c2c6ec91cee82735c98a197fae39f706 \ + --hash=sha256:22908891a380d50738e1f978667536f6c6b526a2064156203d418f4856d6e86a \ + --hash=sha256:3160a0fd9754aab7d47f95a6b63ab355388d890163eb03b2d2b87ab0a30cfa59 \ + --hash=sha256:322102cdf1ab682ecc7d9b1c5eed4ec59657a65e1c146a0da342b78f4112db23 \ + --hash=sha256:34e0a2f9c370eb95597aae63bf85eb5e96826d81e3dcf88b8886012906f509b5 \ + --hash=sha256:3573d376454d956553c356df45bb824262c397c6e26ce43e8203c4c540ee0acb \ + --hash=sha256:3747443b6a904001473370d7810aa19c3a180ccd52a7157aacc264a5ac79265e \ + --hash=sha256:38e812a197bf8e71a59fe55b757a84c1f946d0ac114acafaafaf21667a7e169e \ + --hash=sha256:3a06f32c9634a8705f4ca9946d667609f52cf130d5548881401f1eb2c39b1e2c \ + --hash=sha256:3a5fc78f9e3f501a1614a98f7c54d3969f3ad9bba8ba3d9b438c3bc5d047dd28 \ + --hash=sha256:3d9098b479e78c85080c98e1e35ff40b4a31d8953102bb0fd7d1b6f8a2111a3d \ + --hash=sha256:3dc5b6a8ecfdc5748a7e429782598e4f17ef378e3e272eeb1340ea57c9109f41 \ + --hash=sha256:4155b51ae05ed47199dc5b2a4e62abccb274cee6b01da5b895099b61b1982974 \ + --hash=sha256:49919f8400b5e49e961f320c735388ee686a62327e773fa5b3ce6721f7e785ce \ + --hash=sha256:53d0a3fa5f8af98a1e261de6a3943ca631c526635eb5817a87a59d9a57ebf48f \ + --hash=sha256:5f008525e02908b20e04707a4f704cd286d94718f48bb33edddc7d7b584dddc1 \ + --hash=sha256:628c985afb2c7d27a4800bfb609e03985aaecb42f955049957814e0491d4006d \ + --hash=sha256:65ed923f84a6844de5fd29726b888e58c62820e0769b76565480e1fdc3d062f8 \ + --hash=sha256:6734e606355834f13445b6adc38b53c0fd45f1a56a9ba06c2058f86893ae8017 \ + --hash=sha256:6baf0baf0d5d265fa7944feb9f7451cc316bfe30e8df1a61b1bb08577c554f31 \ + --hash=sha256:6f4f4668e1831850ebcc2fd0b1cd11721947b6dc7c00bf1c6bd3c929ae14f2c7 \ + --hash=sha256:6f5c2e7bc8a4bf7c426599765b1bd33217ec84023033672c1e9a8b35eaeaaaf8 \ + --hash=sha256:6f6c7a8a57e9405cad7485f4c9d3172ae486cfef1344b5ddd8e5239582d7355e \ + --hash=sha256:7381c66e0561c5757ffe616af869b916c8b4e42b367ab29fedc98481d1e74e14 \ + --hash=sha256:73dc03a6a7e30b7edc5b01b601e53e7fc924b04e1835e8e407c12c037e81adbd \ + --hash=sha256:74db0052d985cf37fa111828d0dd230776ac99c740e1a758ad99094be4f1803d \ + --hash=sha256:75f2568b4189dda1c567339b48cba4ac7384accb9c2a7ed655cd86b04055c795 \ + --hash=sha256:78cacd03e79d009d95635e7d6ff12c21eb89b894c354bd2b2ed0b4763373693b \ + --hash=sha256:80d1543d58bd3d6c271b66abf454d437a438dff01c3e62fdbcd68f2a11310d4b \ + --hash=sha256:830d2948a5ec37c386d3170c483063798d7879037492540f10a475e3fd6f244b \ + --hash=sha256:891cf9b48776b5c61c700b55a598621fdb7b1e301a550365571e9624f270c203 \ + --hash=sha256:8f25e17ab3039b05f762b0a55ae0b3632b2e073d9c8fc88e89aca31a6198e88f \ + --hash=sha256:9a3267620866c9d17b959a84dd0bd2d45719b817245e49371ead79ed4f710d19 \ + --hash=sha256:a04f86f41a8916fe45ac5024ec477f41f886b3c435da2d4e3d2709b22ab02af1 \ + --hash=sha256:aaf53a6cebad0eae578f062c7d462155eada9c172bd8c4d250b8c1d8eb7f916a \ + --hash=sha256:abc1185d79f47c0a7aaf7e2412a0eb2c03b724581139193d2d82b3ad8cbb00ac \ + --hash=sha256:ac0aa6cd53ab9a31d397f8303f92c42f534693528fafbdb997c82bae6e477ad9 \ + --hash=sha256:ac3775e3311661d4adace3697a52ac0bab17edd166087d493b52d4f4f553f9f0 \ + --hash=sha256:b06f0d3bf045158d2fb8837c5785fe9ff9b8c93358be64461a1089f5da983137 \ + --hash=sha256:b116502087ce8a6b7a5f1814568ccbd0e9f6cfd99948aa59b0e241dc57cf739f \ + --hash=sha256:b82fab78e0b1329e183a65260581de4375f619167478dddab510c6c6fb04d9b6 \ + --hash=sha256:bd7163182133c0c7701b25e604cf1611c0d87712e56e88e7ee5d72deab3e76b5 \ + --hash=sha256:c36bcbc0d5174a80d6cccf43a0ecaca44e81d25be4b7f90f0ed7bcfbb5a00909 \ + --hash=sha256:c3af8e0f07399d3176b179f2e2634c3ce9c1301379a6b8c9c9aeecd481da494f \ + --hash=sha256:c84132a54c750fda57729d1e2599bb598f5fa0344085dbde5003ba429a4798c0 \ + --hash=sha256:cb7b2ab0188829593b9de646545175547a70d9a6e2b63bf2cd87a0a391599324 \ + --hash=sha256:cca4def576f47a09a943666b8f829606bcb17e2bc2d5911a46c8f8da45f56755 \ + --hash=sha256:cf6511efa4801b9b38dc5546d7547d5b5c6ef4b081c60b23e4d941d0eba9cbeb \ + --hash=sha256:d16fd5252f883eb074ca55cb622bc0bee49b979ae4e8639fff6ca3ff44f9f854 \ + --hash=sha256:d2686f91611f9e17f4548dbf050e75b079bbc2a82be565832bc8ea9047b61c8c \ + --hash=sha256:d7fc3fca01da18fbabe4625d64bb612b533533ed10045a2ac3dd194bfa656b60 \ + --hash=sha256:dd5653e67b149503c68c4018bf07e42eeed6b4e956b24c00ccdf93ac79cdff84 \ + --hash=sha256:de5695a6f1d8340b12a5d6d4484290ee74d61e467c39ff03b39e30df62cf83a0 \ + --hash=sha256:e0ac8959c929593fee38da1c2b64ee9778733cdf03c482c9ff1d508b6b593b2b \ + --hash=sha256:e1b25e3ad6c909f398df8921780d6a3d120d8c09466720226fc621605b6f92b1 \ + --hash=sha256:e633940f28c1e913615fd624fcdd72fdba807bf53ea6925d6a588e84e1151531 \ + --hash=sha256:e89df2958e5159b811af9ff0f92614dabf4ff617c03a4c1c6ff53bf1c399e0e1 \ + --hash=sha256:ea9f9c6034ea2d93d9147818f17c2a0860d41b71c38b9ce4d55f21b6f9165a11 \ + --hash=sha256:f645caaf0008bacf349875a974220f1f1da349c5dbe7c4ec93048cdc785a3326 \ + --hash=sha256:f8303414c7b03f794347ad062c0516cee0e15f7a612abd0ce1e25caf6ceb47df \ + --hash=sha256:fca62a8301b605b954ad2e9c3666f9d97f63872aa4efcae5492baca2056b74ab # via requests check-manifest==0.49 \ --hash=sha256:058cd30057714c39b96ce4d83f254fc770e3145c7b1932b5940b4e3efb5521ef \ @@ -444,9 +431,9 @@ mdurl==0.1.2 \ --hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \ --hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba # via markdown-it-py -more-itertools==9.0.0 \ - --hash=sha256:250e83d7e81d0c87ca6bd942e6aeab8cc9daa6096d12c5308f3f92fa5e5c1f41 \ - --hash=sha256:5a6257e40878ef0520b1803990e3e22303a41b5714006c32a3fd8304b26ea1ab +more-itertools==9.1.0 \ + --hash=sha256:cabaa341ad0389ea83c17a94566a53ae4c9d07349861ecb14dc6d0345cf9ac5d \ + --hash=sha256:d2bc7f02446e86a68911e58ded76d6561eea00cddfb2a91e7019bbb586c799f3 # via jaraco-classes packaging==23.0 \ --hash=sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2 \ @@ -468,9 +455,9 @@ pkginfo==1.9.6 \ --hash=sha256:4b7a555a6d5a22169fcc9cf7bfd78d296b0361adad412a346c1226849af5e546 \ --hash=sha256:8fd5896e8718a4372f0ea9cc9d96f6417c9b986e23a4d116dda26b62cc29d046 # via twine -platformdirs==3.0.0 \ - --hash=sha256:8a1228abb1ef82d788f74139988b137e78692984ec7b08eaa6c65f1723af28f9 \ - --hash=sha256:b1d5eb14f221506f50d6604a561f4c5786d9e80355219694a1b244bcd96f4567 +platformdirs==3.1.0 \ + --hash=sha256:13b08a53ed71021350c9e300d4ea8668438fb0046ab3937ac9a29913a1a1350a \ + --hash=sha256:accc3665857288317f32c7bebb5a8e482ba717b474f3fc1d18ca7f9214be0cef # via # -r requirements/pip.pip # -r requirements/tox.pip @@ -504,9 +491,9 @@ pygments==2.14.0 \ # readme-renderer # rich # sphinx -pylint==2.16.2 \ - --hash=sha256:13b2c805a404a9bf57d002cd5f054ca4d40b0b87542bdaba5e05321ae8262c84 \ - --hash=sha256:ff22dde9c2128cd257c145cfd51adeff0be7df4d80d669055f24a962b351bbe4 +pylint==2.16.4 \ + --hash=sha256:4a770bb74fde0550fa0ab4248a2ad04e7887462f9f425baa0cd8d3c1d098eaee \ + --hash=sha256:8841f26a0dbc3503631b6a20ee368b3f5e0e5461a1d95cf15d103dab748a0db3 # via -r requirements/dev.in pyproject-api==1.5.0 \ --hash=sha256:0962df21f3e633b8ddb9567c011e6c1b3dcdfc31b7860c0ede7e24c5a1200fbe \ @@ -518,9 +505,9 @@ pyproject-hooks==1.0.0 \ --hash=sha256:283c11acd6b928d2f6a7c73fa0d01cb2bdc5f07c57a2eeb6e83d5e56b97976f8 \ --hash=sha256:f271b298b97f5955d53fb12b72c1fb1948c22c1a6b70b315c54cedaca0264ef5 # via build -pytest==7.2.1 \ - --hash=sha256:c7c6ca206e93355074ae32f7403e8ea12163b1163c976fee7d4d84027c162be5 \ - --hash=sha256:d45e0952f3727241918b8fd0f376f5ff6b301cc0777c6f9a556935c92d8a7d42 +pytest==7.2.2 \ + --hash=sha256:130328f552dcfac0b1cec75c12e3f005619dc5f874f0a06e8ff7263f0ee6225e \ + --hash=sha256:c99ab0c73aceb050f68929bc93af19ab6db0558791c6a0715723abe9d0ade9d4 # via # -r requirements/pytest.pip # pytest-xdist @@ -555,9 +542,9 @@ rfc3986==2.0.0 \ --hash=sha256:50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd \ --hash=sha256:97aacf9dbd4bfd829baad6e6309fa6573aaf1be3f6fa735c8ab05e46cecb261c # via twine -rich==13.3.1 \ - --hash=sha256:125d96d20c92b946b983d0d392b84ff945461e5a06d3867e9f9e575f8697b67f \ - --hash=sha256:8aa57747f3fc3e977684f0176a88e789be314a99f99b43b75d1e9cb5dc6db9e9 +rich==13.3.2 \ + --hash=sha256:91954fe80cfb7985727a467ca98a7618e5dd15178cc2da10f553b36a93859001 \ + --hash=sha256:a104f37270bf677148d8acb07d33be1569eeee87e2d1beb286a4e9113caf6f2f # via twine scriv==1.2.1 \ --hash=sha256:0ceec6243ebf02f6a685507eec72f890ca9d9da4cafcfcfce640b1f027cec17d \ @@ -729,9 +716,9 @@ urwid==2.1.2 \ urwid-readline==0.13 \ --hash=sha256:018020cbc864bb5ed87be17dc26b069eae2755cb29f3a9c569aac3bded1efaf4 # via pudb -virtualenv==20.19.0 \ - --hash=sha256:37a640ba82ed40b226599c522d411e4be5edb339a0c0de030c0dc7b646d61590 \ - --hash=sha256:54eb59e7352b573aa04d53f80fc9736ed0ad5143af445a1e539aada6eb947dd1 +virtualenv==20.20.0 \ + --hash=sha256:3c22fa5a7c7aa106ced59934d2c20a2ecb7f49b4130b8bf444178a16b880fa45 \ + --hash=sha256:a8a4b8ca1e28f864b7514a253f98c1d62b64e31e77325ba279248c65fb4fcef4 # via # -r requirements/pip.pip # -r requirements/tox.pip @@ -740,75 +727,86 @@ webencodings==0.5.1 \ --hash=sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78 \ --hash=sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923 # via bleach -wrapt==1.14.1 \ - --hash=sha256:00b6d4ea20a906c0ca56d84f93065b398ab74b927a7a3dbd470f6fc503f95dc3 \ - --hash=sha256:01c205616a89d09827986bc4e859bcabd64f5a0662a7fe95e0d359424e0e071b \ - --hash=sha256:02b41b633c6261feff8ddd8d11c711df6842aba629fdd3da10249a53211a72c4 \ - --hash=sha256:07f7a7d0f388028b2df1d916e94bbb40624c59b48ecc6cbc232546706fac74c2 \ - --hash=sha256:11871514607b15cfeb87c547a49bca19fde402f32e2b1c24a632506c0a756656 \ - --hash=sha256:1b376b3f4896e7930f1f772ac4b064ac12598d1c38d04907e696cc4d794b43d3 \ - --hash=sha256:21ac0156c4b089b330b7666db40feee30a5d52634cc4560e1905d6529a3897ff \ - --hash=sha256:257fd78c513e0fb5cdbe058c27a0624c9884e735bbd131935fd49e9fe719d310 \ - --hash=sha256:2b39d38039a1fdad98c87279b48bc5dce2c0ca0d73483b12cb72aa9609278e8a \ - --hash=sha256:2cf71233a0ed05ccdabe209c606fe0bac7379fdcf687f39b944420d2a09fdb57 \ - --hash=sha256:2fe803deacd09a233e4762a1adcea5db5d31e6be577a43352936179d14d90069 \ - --hash=sha256:3232822c7d98d23895ccc443bbdf57c7412c5a65996c30442ebe6ed3df335383 \ - --hash=sha256:34aa51c45f28ba7f12accd624225e2b1e5a3a45206aa191f6f9aac931d9d56fe \ - --hash=sha256:36f582d0c6bc99d5f39cd3ac2a9062e57f3cf606ade29a0a0d6b323462f4dd87 \ - --hash=sha256:380a85cf89e0e69b7cfbe2ea9f765f004ff419f34194018a6827ac0e3edfed4d \ - --hash=sha256:40e7bc81c9e2b2734ea4bc1aceb8a8f0ceaac7c5299bc5d69e37c44d9081d43b \ - --hash=sha256:43ca3bbbe97af00f49efb06e352eae40434ca9d915906f77def219b88e85d907 \ - --hash=sha256:4fcc4649dc762cddacd193e6b55bc02edca674067f5f98166d7713b193932b7f \ - --hash=sha256:5a0f54ce2c092aaf439813735584b9537cad479575a09892b8352fea5e988dc0 \ - --hash=sha256:5a9a0d155deafd9448baff28c08e150d9b24ff010e899311ddd63c45c2445e28 \ - --hash=sha256:5b02d65b9ccf0ef6c34cba6cf5bf2aab1bb2f49c6090bafeecc9cd81ad4ea1c1 \ - --hash=sha256:60db23fa423575eeb65ea430cee741acb7c26a1365d103f7b0f6ec412b893853 \ - --hash=sha256:642c2e7a804fcf18c222e1060df25fc210b9c58db7c91416fb055897fc27e8cc \ - --hash=sha256:6a9a25751acb379b466ff6be78a315e2b439d4c94c1e99cb7266d40a537995d3 \ - --hash=sha256:6b1a564e6cb69922c7fe3a678b9f9a3c54e72b469875aa8018f18b4d1dd1adf3 \ - --hash=sha256:6d323e1554b3d22cfc03cd3243b5bb815a51f5249fdcbb86fda4bf62bab9e164 \ - --hash=sha256:6e743de5e9c3d1b7185870f480587b75b1cb604832e380d64f9504a0535912d1 \ - --hash=sha256:709fe01086a55cf79d20f741f39325018f4df051ef39fe921b1ebe780a66184c \ - --hash=sha256:7b7c050ae976e286906dd3f26009e117eb000fb2cf3533398c5ad9ccc86867b1 \ - --hash=sha256:7d2872609603cb35ca513d7404a94d6d608fc13211563571117046c9d2bcc3d7 \ - --hash=sha256:7ef58fb89674095bfc57c4069e95d7a31cfdc0939e2a579882ac7d55aadfd2a1 \ - --hash=sha256:80bb5c256f1415f747011dc3604b59bc1f91c6e7150bd7db03b19170ee06b320 \ - --hash=sha256:81b19725065dcb43df02b37e03278c011a09e49757287dca60c5aecdd5a0b8ed \ - --hash=sha256:833b58d5d0b7e5b9832869f039203389ac7cbf01765639c7309fd50ef619e0b1 \ - --hash=sha256:88bd7b6bd70a5b6803c1abf6bca012f7ed963e58c68d76ee20b9d751c74a3248 \ - --hash=sha256:8ad85f7f4e20964db4daadcab70b47ab05c7c1cf2a7c1e51087bfaa83831854c \ - --hash=sha256:8c0ce1e99116d5ab21355d8ebe53d9460366704ea38ae4d9f6933188f327b456 \ - --hash=sha256:8d649d616e5c6a678b26d15ece345354f7c2286acd6db868e65fcc5ff7c24a77 \ - --hash=sha256:903500616422a40a98a5a3c4ff4ed9d0066f3b4c951fa286018ecdf0750194ef \ - --hash=sha256:9736af4641846491aedb3c3f56b9bc5568d92b0692303b5a305301a95dfd38b1 \ - --hash=sha256:988635d122aaf2bdcef9e795435662bcd65b02f4f4c1ae37fbee7401c440b3a7 \ - --hash=sha256:9cca3c2cdadb362116235fdbd411735de4328c61425b0aa9f872fd76d02c4e86 \ - --hash=sha256:9e0fd32e0148dd5dea6af5fee42beb949098564cc23211a88d799e434255a1f4 \ - --hash=sha256:9f3e6f9e05148ff90002b884fbc2a86bd303ae847e472f44ecc06c2cd2fcdb2d \ - --hash=sha256:a85d2b46be66a71bedde836d9e41859879cc54a2a04fad1191eb50c2066f6e9d \ - --hash=sha256:a9a52172be0b5aae932bef82a79ec0a0ce87288c7d132946d645eba03f0ad8a8 \ - --hash=sha256:aa31fdcc33fef9eb2552cbcbfee7773d5a6792c137b359e82879c101e98584c5 \ - --hash=sha256:b014c23646a467558be7da3d6b9fa409b2c567d2110599b7cf9a0c5992b3b471 \ - --hash=sha256:b21bb4c09ffabfa0e85e3a6b623e19b80e7acd709b9f91452b8297ace2a8ab00 \ - --hash=sha256:b5901a312f4d14c59918c221323068fad0540e34324925c8475263841dbdfe68 \ - --hash=sha256:b9b7a708dd92306328117d8c4b62e2194d00c365f18eff11a9b53c6f923b01e3 \ - --hash=sha256:d1967f46ea8f2db647c786e78d8cc7e4313dbd1b0aca360592d8027b8508e24d \ - --hash=sha256:d52a25136894c63de15a35bc0bdc5adb4b0e173b9c0d07a2be9d3ca64a332735 \ - --hash=sha256:d77c85fedff92cf788face9bfa3ebaa364448ebb1d765302e9af11bf449ca36d \ - --hash=sha256:d79d7d5dc8a32b7093e81e97dad755127ff77bcc899e845f41bf71747af0c569 \ - --hash=sha256:dbcda74c67263139358f4d188ae5faae95c30929281bc6866d00573783c422b7 \ - --hash=sha256:ddaea91abf8b0d13443f6dac52e89051a5063c7d014710dcb4d4abb2ff811a59 \ - --hash=sha256:dee0ce50c6a2dd9056c20db781e9c1cfd33e77d2d569f5d1d9321c641bb903d5 \ - --hash=sha256:dee60e1de1898bde3b238f18340eec6148986da0455d8ba7848d50470a7a32fb \ - --hash=sha256:e2f83e18fe2f4c9e7db597e988f72712c0c3676d337d8b101f6758107c42425b \ - --hash=sha256:e3fb1677c720409d5f671e39bac6c9e0e422584e5f518bfd50aa4cbbea02433f \ - --hash=sha256:ee2b1b1769f6707a8a445162ea16dddf74285c3964f605877a20e38545c3c462 \ - --hash=sha256:ee6acae74a2b91865910eef5e7de37dc6895ad96fa23603d1d27ea69df545015 \ - --hash=sha256:ef3f72c9666bba2bab70d2a8b79f2c6d2c1a42a7f7e2b0ec83bb2f9e383950af +wrapt==1.15.0 \ + --hash=sha256:02fce1852f755f44f95af51f69d22e45080102e9d00258053b79367d07af39c0 \ + --hash=sha256:077ff0d1f9d9e4ce6476c1a924a3332452c1406e59d90a2cf24aeb29eeac9420 \ + --hash=sha256:078e2a1a86544e644a68422f881c48b84fef6d18f8c7a957ffd3f2e0a74a0d4a \ + --hash=sha256:0970ddb69bba00670e58955f8019bec4a42d1785db3faa043c33d81de2bf843c \ + --hash=sha256:1286eb30261894e4c70d124d44b7fd07825340869945c79d05bda53a40caa079 \ + --hash=sha256:21f6d9a0d5b3a207cdf7acf8e58d7d13d463e639f0c7e01d82cdb671e6cb7923 \ + --hash=sha256:230ae493696a371f1dbffaad3dafbb742a4d27a0afd2b1aecebe52b740167e7f \ + --hash=sha256:26458da5653aa5b3d8dc8b24192f574a58984c749401f98fff994d41d3f08da1 \ + --hash=sha256:2cf56d0e237280baed46f0b5316661da892565ff58309d4d2ed7dba763d984b8 \ + --hash=sha256:2e51de54d4fb8fb50d6ee8327f9828306a959ae394d3e01a1ba8b2f937747d86 \ + --hash=sha256:2fbfbca668dd15b744418265a9607baa970c347eefd0db6a518aaf0cfbd153c0 \ + --hash=sha256:38adf7198f8f154502883242f9fe7333ab05a5b02de7d83aa2d88ea621f13364 \ + --hash=sha256:3a8564f283394634a7a7054b7983e47dbf39c07712d7b177b37e03f2467a024e \ + --hash=sha256:3abbe948c3cbde2689370a262a8d04e32ec2dd4f27103669a45c6929bcdbfe7c \ + --hash=sha256:3bbe623731d03b186b3d6b0d6f51865bf598587c38d6f7b0be2e27414f7f214e \ + --hash=sha256:40737a081d7497efea35ab9304b829b857f21558acfc7b3272f908d33b0d9d4c \ + --hash=sha256:41d07d029dd4157ae27beab04d22b8e261eddfc6ecd64ff7000b10dc8b3a5727 \ + --hash=sha256:46ed616d5fb42f98630ed70c3529541408166c22cdfd4540b88d5f21006b0eff \ + --hash=sha256:493d389a2b63c88ad56cdc35d0fa5752daac56ca755805b1b0c530f785767d5e \ + --hash=sha256:4ff0d20f2e670800d3ed2b220d40984162089a6e2c9646fdb09b85e6f9a8fc29 \ + --hash=sha256:54accd4b8bc202966bafafd16e69da9d5640ff92389d33d28555c5fd4f25ccb7 \ + --hash=sha256:56374914b132c702aa9aa9959c550004b8847148f95e1b824772d453ac204a72 \ + --hash=sha256:578383d740457fa790fdf85e6d346fda1416a40549fe8db08e5e9bd281c6a475 \ + --hash=sha256:58d7a75d731e8c63614222bcb21dd992b4ab01a399f1f09dd82af17bbfc2368a \ + --hash=sha256:5c5aa28df055697d7c37d2099a7bc09f559d5053c3349b1ad0c39000e611d317 \ + --hash=sha256:5fc8e02f5984a55d2c653f5fea93531e9836abbd84342c1d1e17abc4a15084c2 \ + --hash=sha256:63424c681923b9f3bfbc5e3205aafe790904053d42ddcc08542181a30a7a51bd \ + --hash=sha256:64b1df0f83706b4ef4cfb4fb0e4c2669100fd7ecacfb59e091fad300d4e04640 \ + --hash=sha256:74934ebd71950e3db69960a7da29204f89624dde411afbfb3b4858c1409b1e98 \ + --hash=sha256:75669d77bb2c071333417617a235324a1618dba66f82a750362eccbe5b61d248 \ + --hash=sha256:75760a47c06b5974aa5e01949bf7e66d2af4d08cb8c1d6516af5e39595397f5e \ + --hash=sha256:76407ab327158c510f44ded207e2f76b657303e17cb7a572ffe2f5a8a48aa04d \ + --hash=sha256:76e9c727a874b4856d11a32fb0b389afc61ce8aaf281ada613713ddeadd1cfec \ + --hash=sha256:77d4c1b881076c3ba173484dfa53d3582c1c8ff1f914c6461ab70c8428b796c1 \ + --hash=sha256:780c82a41dc493b62fc5884fb1d3a3b81106642c5c5c78d6a0d4cbe96d62ba7e \ + --hash=sha256:7dc0713bf81287a00516ef43137273b23ee414fe41a3c14be10dd95ed98a2df9 \ + --hash=sha256:7eebcdbe3677e58dd4c0e03b4f2cfa346ed4049687d839adad68cc38bb559c92 \ + --hash=sha256:896689fddba4f23ef7c718279e42f8834041a21342d95e56922e1c10c0cc7afb \ + --hash=sha256:96177eb5645b1c6985f5c11d03fc2dbda9ad24ec0f3a46dcce91445747e15094 \ + --hash=sha256:96e25c8603a155559231c19c0349245eeb4ac0096fe3c1d0be5c47e075bd4f46 \ + --hash=sha256:9d37ac69edc5614b90516807de32d08cb8e7b12260a285ee330955604ed9dd29 \ + --hash=sha256:9ed6aa0726b9b60911f4aed8ec5b8dd7bf3491476015819f56473ffaef8959bd \ + --hash=sha256:a487f72a25904e2b4bbc0817ce7a8de94363bd7e79890510174da9d901c38705 \ + --hash=sha256:a4cbb9ff5795cd66f0066bdf5947f170f5d63a9274f99bdbca02fd973adcf2a8 \ + --hash=sha256:a74d56552ddbde46c246b5b89199cb3fd182f9c346c784e1a93e4dc3f5ec9975 \ + --hash=sha256:a89ce3fd220ff144bd9d54da333ec0de0399b52c9ac3d2ce34b569cf1a5748fb \ + --hash=sha256:abd52a09d03adf9c763d706df707c343293d5d106aea53483e0ec8d9e310ad5e \ + --hash=sha256:abd8f36c99512755b8456047b7be10372fca271bf1467a1caa88db991e7c421b \ + --hash=sha256:af5bd9ccb188f6a5fdda9f1f09d9f4c86cc8a539bd48a0bfdc97723970348418 \ + --hash=sha256:b02f21c1e2074943312d03d243ac4388319f2456576b2c6023041c4d57cd7019 \ + --hash=sha256:b06fa97478a5f478fb05e1980980a7cdf2712015493b44d0c87606c1513ed5b1 \ + --hash=sha256:b0724f05c396b0a4c36a3226c31648385deb6a65d8992644c12a4963c70326ba \ + --hash=sha256:b130fe77361d6771ecf5a219d8e0817d61b236b7d8b37cc045172e574ed219e6 \ + --hash=sha256:b56d5519e470d3f2fe4aa7585f0632b060d532d0696c5bdfb5e8319e1d0f69a2 \ + --hash=sha256:b67b819628e3b748fd3c2192c15fb951f549d0f47c0449af0764d7647302fda3 \ + --hash=sha256:ba1711cda2d30634a7e452fc79eabcadaffedf241ff206db2ee93dd2c89a60e7 \ + --hash=sha256:bbeccb1aa40ab88cd29e6c7d8585582c99548f55f9b2581dfc5ba68c59a85752 \ + --hash=sha256:bd84395aab8e4d36263cd1b9308cd504f6cf713b7d6d3ce25ea55670baec5416 \ + --hash=sha256:c99f4309f5145b93eca6e35ac1a988f0dc0a7ccf9ccdcd78d3c0adf57224e62f \ + --hash=sha256:ca1cccf838cd28d5a0883b342474c630ac48cac5df0ee6eacc9c7290f76b11c1 \ + --hash=sha256:cd525e0e52a5ff16653a3fc9e3dd827981917d34996600bbc34c05d048ca35cc \ + --hash=sha256:cdb4f085756c96a3af04e6eca7f08b1345e94b53af8921b25c72f096e704e145 \ + --hash=sha256:ce42618f67741d4697684e501ef02f29e758a123aa2d669e2d964ff734ee00ee \ + --hash=sha256:d06730c6aed78cee4126234cf2d071e01b44b915e725a6cb439a879ec9754a3a \ + --hash=sha256:d5fe3e099cf07d0fb5a1e23d399e5d4d1ca3e6dfcbe5c8570ccff3e9208274f7 \ + --hash=sha256:d6bcbfc99f55655c3d93feb7ef3800bd5bbe963a755687cbf1f490a71fb7794b \ + --hash=sha256:d787272ed958a05b2c86311d3a4135d3c2aeea4fc655705f074130aa57d71653 \ + --hash=sha256:e169e957c33576f47e21864cf3fc9ff47c223a4ebca8960079b8bd36cb014fd0 \ + --hash=sha256:e20076a211cd6f9b44a6be58f7eeafa7ab5720eb796975d0c03f05b47d89eb90 \ + --hash=sha256:e826aadda3cae59295b95343db8f3d965fb31059da7de01ee8d1c40a60398b29 \ + --hash=sha256:eef4d64c650f33347c1f9266fa5ae001440b232ad9b98f1f43dfe7a79435c0a6 \ + --hash=sha256:f2e69b3ed24544b0d3dbe2c5c0ba5153ce50dcebb576fdc4696d52aa22db6034 \ + --hash=sha256:f87ec75864c37c4c6cb908d282e1969e79763e0d9becdfe9fe5473b7bb1e5f09 \ + --hash=sha256:fbec11614dba0424ca72f4e8ba3c420dba07b4a7c206c8c8e4e73f2e98f4c559 \ + --hash=sha256:fd69666217b62fa5d7c6aa88e507493a34dec4fa20c5bd925e4bc12fce586639 # via astroid -zipp==3.14.0 \ - --hash=sha256:188834565033387710d046e3fe96acfc9b5e86cbca7f39ff69cf21a4128198b7 \ - --hash=sha256:9e5421e176ef5ab4c0ad896624e87a7b2f07aca746c9b2aa305952800cb8eecb +zipp==3.15.0 \ + --hash=sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b \ + --hash=sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556 # via # -r requirements/pip.pip # -r requirements/pytest.pip diff --git a/requirements/mypy.pip b/requirements/mypy.pip index 73fc96620..a3d9ed768 100644 --- a/requirements/mypy.pip +++ b/requirements/mypy.pip @@ -49,33 +49,33 @@ iniconfig==2.0.0 \ # via # -r requirements/pytest.pip # pytest -mypy==1.0.1 \ - --hash=sha256:0af4f0e20706aadf4e6f8f8dc5ab739089146b83fd53cb4a7e0e850ef3de0bb6 \ - --hash=sha256:15b5a824b58c7c822c51bc66308e759243c32631896743f030daf449fe3677f3 \ - --hash=sha256:17455cda53eeee0a4adb6371a21dd3dbf465897de82843751cf822605d152c8c \ - --hash=sha256:2013226d17f20468f34feddd6aae4635a55f79626549099354ce641bc7d40262 \ - --hash=sha256:24189f23dc66f83b839bd1cce2dfc356020dfc9a8bae03978477b15be61b062e \ - --hash=sha256:27a0f74a298769d9fdc8498fcb4f2beb86f0564bcdb1a37b58cbbe78e55cf8c0 \ - --hash=sha256:28cea5a6392bb43d266782983b5a4216c25544cd7d80be681a155ddcdafd152d \ - --hash=sha256:448de661536d270ce04f2d7dddaa49b2fdba6e3bd8a83212164d4174ff43aa65 \ - --hash=sha256:48525aec92b47baed9b3380371ab8ab6e63a5aab317347dfe9e55e02aaad22e8 \ - --hash=sha256:5bc8d6bd3b274dd3846597855d96d38d947aedba18776aa998a8d46fabdaed76 \ - --hash=sha256:5deb252fd42a77add936b463033a59b8e48eb2eaec2976d76b6878d031933fe4 \ - --hash=sha256:5f546ac34093c6ce33f6278f7c88f0f147a4849386d3bf3ae193702f4fe31407 \ - --hash=sha256:5fdd63e4f50e3538617887e9aee91855368d9fc1dea30da743837b0df7373bc4 \ - --hash=sha256:65b122a993d9c81ea0bfde7689b3365318a88bde952e4dfa1b3a8b4ac05d168b \ - --hash=sha256:71a808334d3f41ef011faa5a5cd8153606df5fc0b56de5b2e89566c8093a0c9a \ - --hash=sha256:920169f0184215eef19294fa86ea49ffd4635dedfdea2b57e45cb4ee85d5ccaf \ - --hash=sha256:93a85495fb13dc484251b4c1fd7a5ac370cd0d812bbfc3b39c1bafefe95275d5 \ - --hash=sha256:a2948c40a7dd46c1c33765718936669dc1f628f134013b02ff5ac6c7ef6942bf \ - --hash=sha256:c6c2ccb7af7154673c591189c3687b013122c5a891bb5651eca3db8e6c6c55bd \ - --hash=sha256:c96b8a0c019fe29040d520d9257d8c8f122a7343a8307bf8d6d4a43f5c5bfcc8 \ - --hash=sha256:d42a98e76070a365a1d1c220fcac8aa4ada12ae0db679cb4d910fabefc88b994 \ - --hash=sha256:dbeb24514c4acbc78d205f85dd0e800f34062efcc1f4a4857c57e4b4b8712bff \ - --hash=sha256:e60d0b09f62ae97a94605c3f73fd952395286cf3e3b9e7b97f60b01ddfbbda88 \ - --hash=sha256:e64f48c6176e243ad015e995de05af7f22bbe370dbb5b32bd6988438ec873919 \ - --hash=sha256:e831662208055b006eef68392a768ff83596035ffd6d846786578ba1714ba8f6 \ - --hash=sha256:eda5c8b9949ed411ff752b9a01adda31afe7eae1e53e946dbdf9db23865e66c4 +mypy==1.1.1 \ + --hash=sha256:0a28a76785bf57655a8ea5eb0540a15b0e781c807b5aa798bd463779988fa1d5 \ + --hash=sha256:19ba15f9627a5723e522d007fe708007bae52b93faab00f95d72f03e1afa9598 \ + --hash=sha256:21b437be1c02712a605591e1ed1d858aba681757a1e55fe678a15c2244cd68a5 \ + --hash=sha256:26cdd6a22b9b40b2fd71881a8a4f34b4d7914c679f154f43385ca878a8297389 \ + --hash=sha256:2888ce4fe5aae5a673386fa232473014056967f3904f5abfcf6367b5af1f612a \ + --hash=sha256:2b0c373d071593deefbcdd87ec8db91ea13bd8f1328d44947e88beae21e8d5e9 \ + --hash=sha256:315ac73cc1cce4771c27d426b7ea558fb4e2836f89cb0296cbe056894e3a1f78 \ + --hash=sha256:39c7119335be05630611ee798cc982623b9e8f0cff04a0b48dfc26100e0b97af \ + --hash=sha256:4b398d8b1f4fba0e3c6463e02f8ad3346f71956b92287af22c9b12c3ec965a9f \ + --hash=sha256:4e4e8b362cdf99ba00c2b218036002bdcdf1e0de085cdb296a49df03fb31dfc4 \ + --hash=sha256:59bbd71e5c58eed2e992ce6523180e03c221dcd92b52f0e792f291d67b15a71c \ + --hash=sha256:5b5f81b40d94c785f288948c16e1f2da37203c6006546c5d947aab6f90aefef2 \ + --hash=sha256:5cb14ff9919b7df3538590fc4d4c49a0f84392237cbf5f7a816b4161c061829e \ + --hash=sha256:61bf08362e93b6b12fad3eab68c4ea903a077b87c90ac06c11e3d7a09b56b9c1 \ + --hash=sha256:64cc3afb3e9e71a79d06e3ed24bb508a6d66f782aff7e56f628bf35ba2e0ba51 \ + --hash=sha256:69b35d1dcb5707382810765ed34da9db47e7f95b3528334a3c999b0c90fe523f \ + --hash=sha256:9401e33814cec6aec8c03a9548e9385e0e228fc1b8b0a37b9ea21038e64cdd8a \ + --hash=sha256:a380c041db500e1410bb5b16b3c1c35e61e773a5c3517926b81dfdab7582be54 \ + --hash=sha256:ae9ceae0f5b9059f33dbc62dea087e942c0ccab4b7a003719cb70f9b8abfa32f \ + --hash=sha256:b7c7b708fe9a871a96626d61912e3f4ddd365bf7f39128362bc50cbd74a634d5 \ + --hash=sha256:c1c10fa12df1232c936830839e2e935d090fc9ee315744ac33b8a32216b93707 \ + --hash=sha256:ce61663faf7a8e5ec6f456857bfbcec2901fbdb3ad958b778403f63b9e606a1b \ + --hash=sha256:d64c28e03ce40d5303450f547e07418c64c241669ab20610f273c9e6290b4b0b \ + --hash=sha256:d809f88734f44a0d44959d795b1e6f64b2bbe0ea4d9cc4776aa588bb4229fc1c \ + --hash=sha256:dbb19c9f662e41e474e0cff502b7064a7edc6764f5262b6cd91d698163196799 \ + --hash=sha256:ef6a01e563ec6a4940784c574d33f6ac1943864634517984471642908b30b6f7 # via -r requirements/mypy.in mypy-extensions==1.0.0 \ --hash=sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d \ @@ -93,9 +93,9 @@ pluggy==1.0.0 \ # via # -r requirements/pytest.pip # pytest -pytest==7.2.1 \ - --hash=sha256:c7c6ca206e93355074ae32f7403e8ea12163b1163c976fee7d4d84027c162be5 \ - --hash=sha256:d45e0952f3727241918b8fd0f376f5ff6b301cc0777c6f9a556935c92d8a7d42 +pytest==7.2.2 \ + --hash=sha256:130328f552dcfac0b1cec75c12e3f005619dc5f874f0a06e8ff7263f0ee6225e \ + --hash=sha256:c99ab0c73aceb050f68929bc93af19ab6db0558791c6a0715723abe9d0ade9d4 # via # -r requirements/pytest.pip # pytest-xdist @@ -149,9 +149,9 @@ typing-extensions==4.5.0 \ # -r requirements/pytest.pip # importlib-metadata # mypy -zipp==3.14.0 \ - --hash=sha256:188834565033387710d046e3fe96acfc9b5e86cbca7f39ff69cf21a4128198b7 \ - --hash=sha256:9e5421e176ef5ab4c0ad896624e87a7b2f07aca746c9b2aa305952800cb8eecb +zipp==3.15.0 \ + --hash=sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b \ + --hash=sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556 # via # -r requirements/pytest.pip # importlib-metadata diff --git a/requirements/pip-tools.pip b/requirements/pip-tools.pip index 1d5ee31a4..c68214c3e 100644 --- a/requirements/pip-tools.pip +++ b/requirements/pip-tools.pip @@ -22,9 +22,9 @@ packaging==23.0 \ --hash=sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2 \ --hash=sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97 # via build -pip-tools==6.12.2 \ - --hash=sha256:6a51f4fd67140d5e83703ebfa9610fb61398727151f56a1be02a972d062e4679 \ - --hash=sha256:8b903696df4598b10d469026ef9995c5f9a874b416e88e7a214884ebe4a70245 +pip-tools==6.12.3 \ + --hash=sha256:480d44fae6e09fad3f9bd3d0a7e8423088715d10477e8ef0663440db25e3114f \ + --hash=sha256:8510420f46572b2e26c357541390593d9365eb6edd2d1e7505267910ecaec080 # via -r requirements/pip-tools.in pyproject-hooks==1.0.0 \ --hash=sha256:283c11acd6b928d2f6a7c73fa0d01cb2bdc5f07c57a2eeb6e83d5e56b97976f8 \ @@ -44,9 +44,9 @@ wheel==0.38.4 \ --hash=sha256:965f5259b566725405b05e7cf774052044b1ed30119b5d586b2703aafe8719ac \ --hash=sha256:b60533f3f5d530e971d6737ca6d58681ee434818fab630c83a734bb10c083ce8 # via pip-tools -zipp==3.14.0 \ - --hash=sha256:188834565033387710d046e3fe96acfc9b5e86cbca7f39ff69cf21a4128198b7 \ - --hash=sha256:9e5421e176ef5ab4c0ad896624e87a7b2f07aca746c9b2aa305952800cb8eecb +zipp==3.15.0 \ + --hash=sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b \ + --hash=sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556 # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: diff --git a/requirements/pip.pip b/requirements/pip.pip index 0779f8232..cda95b9a4 100644 --- a/requirements/pip.pip +++ b/requirements/pip.pip @@ -16,9 +16,9 @@ importlib-metadata==6.0.0 \ --hash=sha256:7efb448ec9a5e313a57655d35aa54cd3e01b7e1fbcf72dce1bf06119420f5bad \ --hash=sha256:e354bedeb60efa6affdcc8ae121b73544a7aa74156d047311948f6d711cd378d # via virtualenv -platformdirs==3.0.0 \ - --hash=sha256:8a1228abb1ef82d788f74139988b137e78692984ec7b08eaa6c65f1723af28f9 \ - --hash=sha256:b1d5eb14f221506f50d6604a561f4c5786d9e80355219694a1b244bcd96f4567 +platformdirs==3.1.0 \ + --hash=sha256:13b08a53ed71021350c9e300d4ea8668438fb0046ab3937ac9a29913a1a1350a \ + --hash=sha256:accc3665857288317f32c7bebb5a8e482ba717b474f3fc1d18ca7f9214be0cef # via virtualenv typing-extensions==4.5.0 \ --hash=sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb \ @@ -26,13 +26,13 @@ typing-extensions==4.5.0 \ # via # importlib-metadata # platformdirs -virtualenv==20.19.0 \ - --hash=sha256:37a640ba82ed40b226599c522d411e4be5edb339a0c0de030c0dc7b646d61590 \ - --hash=sha256:54eb59e7352b573aa04d53f80fc9736ed0ad5143af445a1e539aada6eb947dd1 +virtualenv==20.20.0 \ + --hash=sha256:3c22fa5a7c7aa106ced59934d2c20a2ecb7f49b4130b8bf444178a16b880fa45 \ + --hash=sha256:a8a4b8ca1e28f864b7514a253f98c1d62b64e31e77325ba279248c65fb4fcef4 # via -r requirements/pip.in -zipp==3.14.0 \ - --hash=sha256:188834565033387710d046e3fe96acfc9b5e86cbca7f39ff69cf21a4128198b7 \ - --hash=sha256:9e5421e176ef5ab4c0ad896624e87a7b2f07aca746c9b2aa305952800cb8eecb +zipp==3.15.0 \ + --hash=sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b \ + --hash=sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556 # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: diff --git a/requirements/pytest.pip b/requirements/pytest.pip index 5d1c83292..883d0e266 100644 --- a/requirements/pytest.pip +++ b/requirements/pytest.pip @@ -50,9 +50,9 @@ pluggy==1.0.0 \ --hash=sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159 \ --hash=sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3 # via pytest -pytest==7.2.1 \ - --hash=sha256:c7c6ca206e93355074ae32f7403e8ea12163b1163c976fee7d4d84027c162be5 \ - --hash=sha256:d45e0952f3727241918b8fd0f376f5ff6b301cc0777c6f9a556935c92d8a7d42 +pytest==7.2.2 \ + --hash=sha256:130328f552dcfac0b1cec75c12e3f005619dc5f874f0a06e8ff7263f0ee6225e \ + --hash=sha256:c99ab0c73aceb050f68929bc93af19ab6db0558791c6a0715723abe9d0ade9d4 # via # -r requirements/pytest.in # pytest-xdist @@ -72,7 +72,7 @@ typing-extensions==4.5.0 \ --hash=sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb \ --hash=sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4 # via importlib-metadata -zipp==3.14.0 \ - --hash=sha256:188834565033387710d046e3fe96acfc9b5e86cbca7f39ff69cf21a4128198b7 \ - --hash=sha256:9e5421e176ef5ab4c0ad896624e87a7b2f07aca746c9b2aa305952800cb8eecb +zipp==3.15.0 \ + --hash=sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b \ + --hash=sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556 # via importlib-metadata diff --git a/requirements/tox.pip b/requirements/tox.pip index ad371549e..279dcd181 100644 --- a/requirements/tox.pip +++ b/requirements/tox.pip @@ -41,9 +41,9 @@ packaging==23.0 \ # via # pyproject-api # tox -platformdirs==3.0.0 \ - --hash=sha256:8a1228abb1ef82d788f74139988b137e78692984ec7b08eaa6c65f1723af28f9 \ - --hash=sha256:b1d5eb14f221506f50d6604a561f4c5786d9e80355219694a1b244bcd96f4567 +platformdirs==3.1.0 \ + --hash=sha256:13b08a53ed71021350c9e300d4ea8668438fb0046ab3937ac9a29913a1a1350a \ + --hash=sha256:accc3665857288317f32c7bebb5a8e482ba717b474f3fc1d18ca7f9214be0cef # via # tox # virtualenv @@ -78,11 +78,11 @@ typing-extensions==4.5.0 \ # importlib-metadata # platformdirs # tox -virtualenv==20.19.0 \ - --hash=sha256:37a640ba82ed40b226599c522d411e4be5edb339a0c0de030c0dc7b646d61590 \ - --hash=sha256:54eb59e7352b573aa04d53f80fc9736ed0ad5143af445a1e539aada6eb947dd1 +virtualenv==20.20.0 \ + --hash=sha256:3c22fa5a7c7aa106ced59934d2c20a2ecb7f49b4130b8bf444178a16b880fa45 \ + --hash=sha256:a8a4b8ca1e28f864b7514a253f98c1d62b64e31e77325ba279248c65fb4fcef4 # via tox -zipp==3.14.0 \ - --hash=sha256:188834565033387710d046e3fe96acfc9b5e86cbca7f39ff69cf21a4128198b7 \ - --hash=sha256:9e5421e176ef5ab4c0ad896624e87a7b2f07aca746c9b2aa305952800cb8eecb +zipp==3.15.0 \ + --hash=sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b \ + --hash=sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556 # via importlib-metadata From d76daad2f184a0c9ec4dc8e80e4ca20ea9e39d7c Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Tue, 7 Mar 2023 11:00:59 -0500 Subject: [PATCH 083/139] build: run mypy by default, and fix "unused" errors from updated mypy --- coverage/execfile.py | 2 +- tests/coveragetest.py | 6 +++--- tox.ini | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/coverage/execfile.py b/coverage/execfile.py index 66cf931c8..ef0277d61 100644 --- a/coverage/execfile.py +++ b/coverage/execfile.py @@ -294,7 +294,7 @@ def make_code_from_py(filename: str) -> CodeType: except (OSError, NoSource) as exc: raise NoSource(f"No file to run: '{filename}'") from exc - return compile(source, filename, "exec", dont_inherit=True) # type: ignore[no-any-return] + return compile(source, filename, "exec", dont_inherit=True) def make_code_from_pyc(filename: str) -> CodeType: diff --git a/tests/coveragetest.py b/tests/coveragetest.py index 0055c691e..cec565ef2 100644 --- a/tests/coveragetest.py +++ b/tests/coveragetest.py @@ -293,7 +293,7 @@ def assert_warnings( def capture_warning( msg: str, slug: Optional[str] = None, - once: bool = False, # pylint: disable=unused-argument + once: bool = False, # pylint: disable=unused-argument ) -> None: """A fake implementation of Coverage._warn, to capture warnings.""" # NOTE: we don't implement `once`. @@ -302,7 +302,7 @@ def capture_warning( saved_warnings.append(msg) original_warn = cov._warn - cov._warn = capture_warning # type: ignore[assignment] + cov._warn = capture_warning # type: ignore[method-assign] try: yield @@ -327,7 +327,7 @@ def capture_warning( if saved_warnings: assert False, f"Unexpected warnings: {saved_warnings!r}" finally: - cov._warn = original_warn # type: ignore[assignment] + cov._warn = original_warn # type: ignore[method-assign] def assert_same_files(self, flist1: Iterable[str], flist2: Iterable[str]) -> None: """Assert that `flist1` and `flist2` are the same set of file names.""" diff --git a/tox.ini b/tox.ini index 70b56a3f3..0a1fa6f60 100644 --- a/tox.ini +++ b/tox.ini @@ -4,7 +4,7 @@ [tox] # When changing this list, be sure to check the [gh] list below. # PYVERSIONS -envlist = py{37,38,39,310,311,312}, pypy3, doc, lint +envlist = py{37,38,39,310,311,312}, pypy3, doc, lint, mypy skip_missing_interpreters = {env:COVERAGE_SKIP_MISSING_INTERPRETERS:True} toxworkdir = {env:TOXWORKDIR:.tox} From d276fa4f5a20dc3eb4dbf18bf4b8898fb3e24a79 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Sun, 12 Mar 2023 11:28:49 -0400 Subject: [PATCH 084/139] debug: label the assert messages --- tests/coveragetest.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/coveragetest.py b/tests/coveragetest.py index cec565ef2..9d1ef06fa 100644 --- a/tests/coveragetest.py +++ b/tests/coveragetest.py @@ -202,7 +202,7 @@ def check_coverage( if isinstance(lines[0], int): # lines is just a list of numbers, it must match the statements # found in the code. - assert statements == lines, f"{statements!r} != {lines!r}" + assert statements == lines, f"lines: {statements!r} != {lines!r}" else: # lines is a list of possible line number lists, one of them # must match. @@ -214,7 +214,7 @@ def check_coverage( missing_formatted = analysis.missing_formatted() if isinstance(missing, str): - msg = f"{missing_formatted!r} != {missing!r}" + msg = f"missing: {missing_formatted!r} != {missing!r}" assert missing_formatted == missing, msg else: for missing_list in missing: From 8eb95b5ad2ed1cee1204b1ce95bad9118063d178 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Sun, 12 Mar 2023 08:31:12 -0400 Subject: [PATCH 085/139] fix: recent pypy3.9 now omits lines after jumps We were seeing these failures in the nightly builds: ``` FAILED tests/test_arcs.py::LoopArcTest::test_continue - AssertionError: Possible arcs differ: minus is expected, plus is actual (-1, 1) # .1 (1, 2) # 12 (1, 5) # 15 (2, 3) # 23 (3, 1) # 31 - (4, 1) # 41 (5, -1) # 5. Missing arcs differ: minus is expected, plus is actual - (4, 1) # 41 + assert False FAILED tests/test_arcs.py::LoopArcTest::test_break - AssertionError: Possible arcs differ: minus is expected, plus is actual (-1, 1) # .1 (1, 2) # 12 (1, 5) # 15 (2, 3) # 23 (3, 5) # 35 - (4, 1) # 41 (5, -1) # 5. Missing arcs differ: minus is expected, plus is actual (1, 5) # 15 - (4, 1) # 41 assert False FAILED tests/test_arcs.py::ExceptionArcTest::test_raise_followed_by_statement - AssertionError: Possible arcs differ: minus is expected, plus is actual (-1, 1) # .1 (1, 2) # 12 (2, 3) # 23 (3, 4) # 34 (4, 6) # 46 - (5, 8) # 58 (6, 7) # 67 (7, 8) # 78 (8, -1) # 8. Missing arcs differ: minus is expected, plus is actual - (5, 8) # 58 + assert False FAILED tests/test_coverage.py::SimpleStatementTest::test_raise_followed_by_statement - AssertionError: [1, 2, 4, 5] != [1, 2, 3, 4, 5] assert [1, 2, 4, 5] == [1, 2, 3, 4, 5] At index 2 diff: 4 != 3 Right contains one more item: 5 Full diff: - [1, 2, 3, 4, 5] ? --- + [1, 2, 4, 5] FAILED tests/test_coverage.py::SimpleStatementTest::test_break - AssertionError: [1, 2, 3, 5] != [1, 2, 3, 4, 5] assert [1, 2, 3, 5] == [1, 2, 3, 4, 5] At index 3 diff: 5 != 4 Right contains one more item: 5 Full diff: - [1, 2, 3, 4, 5] ? --- + [1, 2, 3, 5] FAILED tests/test_coverage.py::SimpleStatementTest::test_continue - AssertionError: [1, 2, 3, 5] != [1, 2, 3, 4, 5] assert [1, 2, 3, 5] == [1, 2, 3, 4, 5] At index 3 diff: 5 != 4 Right contains one more item: 5 Full diff: - [1, 2, 3, 4, 5] ? --- + [1, 2, 3, 5] ``` --- coverage/env.py | 8 +++++++- tests/test_coverage.py | 6 +++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/coverage/env.py b/coverage/env.py index 5d69a2348..b22292818 100644 --- a/coverage/env.py +++ b/coverage/env.py @@ -106,11 +106,17 @@ class PYBEHAVIOR: # Lines after break/continue/return/raise are no longer compiled into the # bytecode. They used to be marked as missing, now they aren't executable. - omit_after_jump = pep626 + omit_after_jump = ( + pep626 + or (PYPY and PYVERSION >= (3, 9) and PYPYVERSION >= (7, 3, 12)) + ) # PyPy has always omitted statements after return. omit_after_return = omit_after_jump or PYPY + # Optimize away unreachable try-else clauses. + optimize_unreachable_try_else = pep626 + # Modules used to have firstlineno equal to the line number of the first # real line of code. Now they always start at 1. module_firstline_1 = pep626 diff --git a/tests/test_coverage.py b/tests/test_coverage.py index 1992ebb89..1cade9cbc 100644 --- a/tests/test_coverage.py +++ b/tests/test_coverage.py @@ -1121,7 +1121,7 @@ def test_try_except(self) -> None: ) def test_try_except_stranded_else(self) -> None: - if env.PYBEHAVIOR.omit_after_jump: + if env.PYBEHAVIOR.optimize_unreachable_try_else: # The else can't be reached because the try ends with a raise. lines = [1,2,3,4,5,6,9] missing = "" @@ -1498,7 +1498,7 @@ def test_excluding_try_except(self) -> None: ) def test_excluding_try_except_stranded_else(self) -> None: - if env.PYBEHAVIOR.omit_after_jump: + if env.PYBEHAVIOR.optimize_unreachable_try_else: # The else can't be reached because the try ends with a raise. arcz = ".1 12 23 34 45 56 69 9." arcz_missing = "" @@ -1801,7 +1801,7 @@ def test_try_except_finally(self) -> None: ) def test_try_except_finally_stranded_else(self) -> None: - if env.PYBEHAVIOR.omit_after_jump: + if env.PYBEHAVIOR.optimize_unreachable_try_else: # The else can't be reached because the try ends with a raise. lines = [1,2,3,4,5,6,10,11] missing = "" From 28aa7bed088c4a01797faba5f152f6a323b2544c Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Sun, 12 Mar 2023 12:01:49 -0400 Subject: [PATCH 086/139] build: make the coverage workflow more similar to the testsuite workflow --- .github/workflows/coverage.yml | 10 +++++----- .github/workflows/python-nightly.yml | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml index 6af6adedc..6404a7c21 100644 --- a/.github/workflows/coverage.yml +++ b/.github/workflows/coverage.yml @@ -29,15 +29,15 @@ concurrency: jobs: coverage: - name: "Python ${{ matrix.python-version }} on ${{ matrix.os }}" - runs-on: "${{ matrix.os }}" + name: "${{ matrix.python-version }} on ${{ matrix.os }}" + runs-on: "${{ matrix.os }}-latest" strategy: matrix: os: - - ubuntu-latest - - macos-latest - - windows-latest + - ubuntu + - macos + - windows python-version: # When changing this list, be sure to check the [gh] list in # tox.ini so that tox will run properly. PYVERSIONS diff --git a/.github/workflows/python-nightly.yml b/.github/workflows/python-nightly.yml index 967fd0c8c..c2ba98e60 100644 --- a/.github/workflows/python-nightly.yml +++ b/.github/workflows/python-nightly.yml @@ -31,7 +31,7 @@ concurrency: jobs: tests: - name: "Python ${{ matrix.python-version }}" + name: "${{ matrix.python-version }}" # Choose a recent Ubuntu that deadsnakes still builds all the versions for. # For example, deadsnakes doesn't provide 3.10 nightly for 22.04 (jammy) # because jammy ships 3.10, and deadsnakes doesn't want to clobber it. From f0a8b6ffe07b24398ab01b2fb8654572966fa5f4 Mon Sep 17 00:00:00 2001 From: Ian Moore <ianmoore@google.com> Date: Mon, 13 Mar 2023 23:24:25 +0000 Subject: [PATCH 087/139] Fix lcov coverage --- coverage/lcovreport.py | 4 ++-- tests/test_lcov.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/coverage/lcovreport.py b/coverage/lcovreport.py index 5a84f0f26..1789c17e6 100644 --- a/coverage/lcovreport.py +++ b/coverage/lcovreport.py @@ -81,8 +81,8 @@ def get_lcov(self, fr: FileReporter, analysis: Analysis, outfile: IO[str]) -> No hashed = base64.b64encode(md5(line).digest()).decode().rstrip("=") outfile.write(f"DA:{missed},0,{hashed}\n") - outfile.write(f"LF:{len(analysis.statements)}\n") - outfile.write(f"LH:{len(analysis.executed)}\n") + outfile.write(f"LF:{analysis.numbers.n_statements}\n") + outfile.write(f"LH:{analysis.numbers.n_executed}\n") # More information dense branch coverage data. missing_arcs = analysis.missing_branch_arcs() diff --git a/tests/test_lcov.py b/tests/test_lcov.py index 30065a8d2..6d50b62b5 100644 --- a/tests/test_lcov.py +++ b/tests/test_lcov.py @@ -286,7 +286,7 @@ def test_empty_init_files(self) -> None: SF:__init__.py DA:1,1,1B2M2Y8AsgTpgAmY7PhCfg LF:0 - LH:1 + LH:0 BRF:0 BRH:0 end_of_record From 44cb89f79304ab09a147a85f0788e7dd13bbbba3 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Tue, 14 Mar 2023 06:01:52 -0400 Subject: [PATCH 088/139] docs: changelog for #1583 --- CHANGES.rst | 6 +++++- CONTRIBUTORS.txt | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGES.rst b/CHANGES.rst index 558f9daf4..bb180f886 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -20,7 +20,11 @@ development at the same time, such as 4.5.x and 5.0. Unreleased ---------- -Nothing yet. +- Fix: the ``coverage lcov`` command could create a .lcov file with incorrect + LF (lines found) and LH (lines hit) totals. This is now fixed, thanks to + `Ian Moore <pull 1583_>`_. + +.. _pull 1583: https://github.com/nedbat/coveragepy/pull/1583 .. scriv-start-here diff --git a/CONTRIBUTORS.txt b/CONTRIBUTORS.txt index f9f028a4d..0d6c7f602 100644 --- a/CONTRIBUTORS.txt +++ b/CONTRIBUTORS.txt @@ -79,6 +79,7 @@ Greg Rogers Guido van Rossum Guillaume Chazarain Hugo van Kemenade +Ian Moore Ilia Meerovich Imri Goldberg Ionel Cristian Mărieș From 1de34697321fc9db0c819cae686476ffd37e7268 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Tue, 14 Mar 2023 06:12:57 -0400 Subject: [PATCH 089/139] docs: never run pip directly --- doc/contributing.rst | 2 +- doc/index.rst | 2 +- doc/install.rst | 6 +++--- doc/plugins.rst | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/doc/contributing.rst b/doc/contributing.rst index af255fe19..165ae40b2 100644 --- a/doc/contributing.rst +++ b/doc/contributing.rst @@ -48,7 +48,7 @@ these steps: #. Install the requirements:: - $ pip install -r requirements/dev.pip + $ python3 -m pip install -r requirements/dev.pip #. Install a number of versions of Python. Coverage.py supports a range of Python versions. The more you can test with, the more easily your code diff --git a/doc/index.rst b/doc/index.rst index 2b2f45bde..e416bb657 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -56,7 +56,7 @@ Getting started is easy: #. Install coverage.py:: - $ pip install coverage + $ python3 -m pip install coverage For more details, see :ref:`install`. diff --git a/doc/install.rst b/doc/install.rst index f3e015e46..1b940b4bb 100644 --- a/doc/install.rst +++ b/doc/install.rst @@ -15,19 +15,19 @@ Installation You can install coverage.py in the usual ways. The simplest way is with pip:: - $ pip install coverage + $ python3 -m pip install coverage .. ifconfig:: prerelease To install a pre-release version, you will need to specify ``--pre``:: - $ pip install --pre coverage + $ python3 -m pip install --pre coverage or the exact version you want to install: .. parsed-literal:: - $ pip install |coverage-equals-release| + $ python3 -m pip install |coverage-equals-release| .. _install_extension: diff --git a/doc/plugins.rst b/doc/plugins.rst index c76e4f9b8..a289ba7e6 100644 --- a/doc/plugins.rst +++ b/doc/plugins.rst @@ -29,7 +29,7 @@ a coverage.py plug-in called ``something.plugin``. .. code-block:: sh - $ pip install something + $ python3 -m pip install something #. Configure coverage.py to use the plug-in. You do this by editing (or creating) your .coveragerc file, as described in :ref:`config`. The From 9620278cbe246d3a9e9f978dea9c63da51bca884 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Tue, 14 Mar 2023 06:30:44 -0400 Subject: [PATCH 090/139] chore: make upgrade --- doc/requirements.pip | 6 +++--- requirements/dev.pip | 48 ++++++++++++++++++++--------------------- requirements/kit.pip | 12 +++++------ requirements/lint.pip | 48 ++++++++++++++++++++--------------------- requirements/mypy.pip | 12 +++++------ requirements/pip.pip | 12 +++++------ requirements/pytest.pip | 12 +++++------ requirements/tox.pip | 24 ++++++++++----------- 8 files changed, 87 insertions(+), 87 deletions(-) diff --git a/doc/requirements.pip b/doc/requirements.pip index 6a34eac03..5ef2a81b2 100644 --- a/doc/requirements.pip +++ b/doc/requirements.pip @@ -306,9 +306,9 @@ typing-extensions==4.5.0 \ --hash=sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb \ --hash=sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4 # via importlib-metadata -urllib3==1.26.14 \ - --hash=sha256:076907bf8fd355cde77728471316625a4d2f7e713c125f51953bb5b3eecf4f72 \ - --hash=sha256:75edcdc2f7d85b137124a6c3c9fc3933cdeaa12ecb9a6a959f22797a0feca7e1 +urllib3==1.26.15 \ + --hash=sha256:8a388717b9476f934a21484e8c8e61875ab60644d29b9b39e11e4b9dc1c6b305 \ + --hash=sha256:aa751d169e23c7479ce47a0cb0da579e3ede798f994f5816a74e4f4500dcea42 # via requests zipp==3.15.0 \ --hash=sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b \ diff --git a/requirements/dev.pip b/requirements/dev.pip index 4a80692d4..2152b52eb 100644 --- a/requirements/dev.pip +++ b/requirements/dev.pip @@ -146,9 +146,9 @@ docutils==0.19 \ --hash=sha256:33995a6753c30b7f577febfc2c50411fec6aac7f7ffeb7c4cfe5991072dcf9e6 \ --hash=sha256:5e1de4d849fee02c63b040a4a3fd567f4ab104defd8a5511fbbc24a8a017efbc # via readme-renderer -exceptiongroup==1.1.0 \ - --hash=sha256:327cbda3da756e2de031a3107b81ab7b3770a602c4d16ca618298c526f4bec1e \ - --hash=sha256:bcb67d800a4497e1b404c2dd44fca47d3b7a5e5433dbab67f96c1a685cdfdf23 +exceptiongroup==1.1.1 \ + --hash=sha256:232c37c63e4f682982c8b6459f33a8981039e5fb8756b2074364e5055c498c9e \ + --hash=sha256:d484c3090ba2889ae2928419117447a14daf3c1231d5e30d0aae34f354f01785 # via # -r requirements/pytest.pip # hypothesis @@ -360,9 +360,9 @@ pkginfo==1.9.6 \ --hash=sha256:4b7a555a6d5a22169fcc9cf7bfd78d296b0361adad412a346c1226849af5e546 \ --hash=sha256:8fd5896e8718a4372f0ea9cc9d96f6417c9b986e23a4d116dda26b62cc29d046 # via twine -platformdirs==3.1.0 \ - --hash=sha256:13b08a53ed71021350c9e300d4ea8668438fb0046ab3937ac9a29913a1a1350a \ - --hash=sha256:accc3665857288317f32c7bebb5a8e482ba717b474f3fc1d18ca7f9214be0cef +platformdirs==3.1.1 \ + --hash=sha256:024996549ee88ec1a9aa99ff7f8fc819bb59e2c3477b410d90a16d32d6e707aa \ + --hash=sha256:e5986afb596e4bb5bde29a79ac9061aa955b94fca2399b7aaac4090860920dd8 # via # -r requirements/pip.pip # -r requirements/tox.pip @@ -387,13 +387,13 @@ pygments==2.14.0 \ # pudb # readme-renderer # rich -pylint==2.16.4 \ - --hash=sha256:4a770bb74fde0550fa0ab4248a2ad04e7887462f9f425baa0cd8d3c1d098eaee \ - --hash=sha256:8841f26a0dbc3503631b6a20ee368b3f5e0e5461a1d95cf15d103dab748a0db3 +pylint==2.17.0 \ + --hash=sha256:1460829b6397cb5eb0cdb0b4fc4b556348e515cdca32115f74a1eb7c20b896b4 \ + --hash=sha256:e097d8325f8c88e14ad12844e3fe2d963d3de871ea9a8f8ad25ab1c109889ddc # via -r requirements/dev.in -pyproject-api==1.5.0 \ - --hash=sha256:0962df21f3e633b8ddb9567c011e6c1b3dcdfc31b7860c0ede7e24c5a1200fbe \ - --hash=sha256:4c111277dfb96bcd562c6245428f27250b794bfe3e210b8714c4f893952f2c17 +pyproject-api==1.5.1 \ + --hash=sha256:435f46547a9ff22cf4208ee274fca3e2869aeb062a4834adfc99a4dd64af3cf9 \ + --hash=sha256:4698a3777c2e0f6b624f8a4599131e2a25376d90fe8d146d7ac74c67c6f97c43 # via # -r requirements/tox.pip # tox @@ -407,9 +407,9 @@ pytest==7.2.2 \ # via # -r requirements/pytest.pip # pytest-xdist -pytest-xdist==3.2.0 \ - --hash=sha256:336098e3bbd8193276867cc87db8b22903c3927665dff9d1ac8684c02f597b68 \ - --hash=sha256:fa10f95a2564cd91652f2d132725183c3b590d9fdcdec09d3677386ecf4c1ce9 +pytest-xdist==3.2.1 \ + --hash=sha256:1849bd98d8b242b948e472db7478e090bf3361912a8fed87992ed94085f54727 \ + --hash=sha256:37290d161638a20b672401deef1cba812d110ac27e35d213f091d15b8beb40c9 # via -r requirements/pytest.pip readme-renderer==37.3 \ --hash=sha256:cd653186dfc73055656f090f227f5cb22a046d7f71a841dfa305f55c9a513273 \ @@ -463,9 +463,9 @@ tomlkit==0.11.6 \ --hash=sha256:07de26b0d8cfc18f871aec595fda24d95b08fef89d147caa861939f37230bf4b \ --hash=sha256:71b952e5721688937fb02cf9d354dbcf0785066149d2855e44531ebdd2b65d73 # via pylint -tox==4.4.6 \ - --hash=sha256:9786671d23b673ace7499c602c5746e2a225d1ecd9d9f624d0461303f40bd93b \ - --hash=sha256:e3d4a65852f029e5ba441a01824d2d839d30bb8fb071635ef9cb53952698e6bf +tox==4.4.7 \ + --hash=sha256:52c92a96e2c3fd47c5301e9c26f5a871466133d5376958c1ed95ef4ff4629cbe \ + --hash=sha256:da10ca1d809b99fae80b706b9dc9656b1daf505a395ac427d130a8a85502d08f # via # -r requirements/tox.pip # tox-gh @@ -516,9 +516,9 @@ typing-extensions==4.5.0 \ # pylint # rich # tox -urllib3==1.26.14 \ - --hash=sha256:076907bf8fd355cde77728471316625a4d2f7e713c125f51953bb5b3eecf4f72 \ - --hash=sha256:75edcdc2f7d85b137124a6c3c9fc3933cdeaa12ecb9a6a959f22797a0feca7e1 +urllib3==1.26.15 \ + --hash=sha256:8a388717b9476f934a21484e8c8e61875ab60644d29b9b39e11e4b9dc1c6b305 \ + --hash=sha256:aa751d169e23c7479ce47a0cb0da579e3ede798f994f5816a74e4f4500dcea42 # via # requests # twine @@ -530,9 +530,9 @@ urwid==2.1.2 \ urwid-readline==0.13 \ --hash=sha256:018020cbc864bb5ed87be17dc26b069eae2755cb29f3a9c569aac3bded1efaf4 # via pudb -virtualenv==20.20.0 \ - --hash=sha256:3c22fa5a7c7aa106ced59934d2c20a2ecb7f49b4130b8bf444178a16b880fa45 \ - --hash=sha256:a8a4b8ca1e28f864b7514a253f98c1d62b64e31e77325ba279248c65fb4fcef4 +virtualenv==20.21.0 \ + --hash=sha256:31712f8f2a17bd06234fa97fdf19609e789dd4e3e4bf108c3da71d710651adbc \ + --hash=sha256:f50e3e60f990a0757c9b68333c9fdaa72d7188caa417f96af9e52407831a3b68 # via # -r requirements/pip.pip # -r requirements/tox.pip diff --git a/requirements/kit.pip b/requirements/kit.pip index 50efcfdaa..6a03f7a1e 100644 --- a/requirements/kit.pip +++ b/requirements/kit.pip @@ -24,9 +24,9 @@ certifi==2022.12.7 \ --hash=sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3 \ --hash=sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18 # via cibuildwheel -cibuildwheel==2.12.0 \ - --hash=sha256:3d75d58f8e9909f2c9fe4923d03682e9ae27a45d38deba2a76b757114bdcf361 \ - --hash=sha256:510b13a5cc8d854a82c1a6fa819c874b1f6a3064b90e31fda7b7a649bc8e80af +cibuildwheel==2.12.1 \ + --hash=sha256:ca0861f7c31c82c09daf4f80304341d93b0a2b35e6bde2f83c6ebde79a710f0d \ + --hash=sha256:e2f9d88dda9542b5773434d0278ead954c43234c0486067bf5c218a60854487d # via -r requirements/kit.in colorama==0.4.6 \ --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \ @@ -48,9 +48,9 @@ packaging==23.0 \ # via # build # cibuildwheel -platformdirs==3.1.0 \ - --hash=sha256:13b08a53ed71021350c9e300d4ea8668438fb0046ab3937ac9a29913a1a1350a \ - --hash=sha256:accc3665857288317f32c7bebb5a8e482ba717b474f3fc1d18ca7f9214be0cef +platformdirs==3.1.1 \ + --hash=sha256:024996549ee88ec1a9aa99ff7f8fc819bb59e2c3477b410d90a16d32d6e707aa \ + --hash=sha256:e5986afb596e4bb5bde29a79ac9061aa955b94fca2399b7aaac4090860920dd8 # via cibuildwheel pyelftools==0.29 \ --hash=sha256:519f38cf412f073b2d7393aa4682b0190fa901f7c3fa0bff2b82d537690c7fc1 \ diff --git a/requirements/lint.pip b/requirements/lint.pip index bb09991f4..a08a49c69 100644 --- a/requirements/lint.pip +++ b/requirements/lint.pip @@ -171,9 +171,9 @@ docutils==0.18.1 \ # readme-renderer # sphinx # sphinx-rtd-theme -exceptiongroup==1.1.0 \ - --hash=sha256:327cbda3da756e2de031a3107b81ab7b3770a602c4d16ca618298c526f4bec1e \ - --hash=sha256:bcb67d800a4497e1b404c2dd44fca47d3b7a5e5433dbab67f96c1a685cdfdf23 +exceptiongroup==1.1.1 \ + --hash=sha256:232c37c63e4f682982c8b6459f33a8981039e5fb8756b2074364e5055c498c9e \ + --hash=sha256:d484c3090ba2889ae2928419117447a14daf3c1231d5e30d0aae34f354f01785 # via # -r requirements/pytest.pip # hypothesis @@ -455,9 +455,9 @@ pkginfo==1.9.6 \ --hash=sha256:4b7a555a6d5a22169fcc9cf7bfd78d296b0361adad412a346c1226849af5e546 \ --hash=sha256:8fd5896e8718a4372f0ea9cc9d96f6417c9b986e23a4d116dda26b62cc29d046 # via twine -platformdirs==3.1.0 \ - --hash=sha256:13b08a53ed71021350c9e300d4ea8668438fb0046ab3937ac9a29913a1a1350a \ - --hash=sha256:accc3665857288317f32c7bebb5a8e482ba717b474f3fc1d18ca7f9214be0cef +platformdirs==3.1.1 \ + --hash=sha256:024996549ee88ec1a9aa99ff7f8fc819bb59e2c3477b410d90a16d32d6e707aa \ + --hash=sha256:e5986afb596e4bb5bde29a79ac9061aa955b94fca2399b7aaac4090860920dd8 # via # -r requirements/pip.pip # -r requirements/tox.pip @@ -491,13 +491,13 @@ pygments==2.14.0 \ # readme-renderer # rich # sphinx -pylint==2.16.4 \ - --hash=sha256:4a770bb74fde0550fa0ab4248a2ad04e7887462f9f425baa0cd8d3c1d098eaee \ - --hash=sha256:8841f26a0dbc3503631b6a20ee368b3f5e0e5461a1d95cf15d103dab748a0db3 +pylint==2.17.0 \ + --hash=sha256:1460829b6397cb5eb0cdb0b4fc4b556348e515cdca32115f74a1eb7c20b896b4 \ + --hash=sha256:e097d8325f8c88e14ad12844e3fe2d963d3de871ea9a8f8ad25ab1c109889ddc # via -r requirements/dev.in -pyproject-api==1.5.0 \ - --hash=sha256:0962df21f3e633b8ddb9567c011e6c1b3dcdfc31b7860c0ede7e24c5a1200fbe \ - --hash=sha256:4c111277dfb96bcd562c6245428f27250b794bfe3e210b8714c4f893952f2c17 +pyproject-api==1.5.1 \ + --hash=sha256:435f46547a9ff22cf4208ee274fca3e2869aeb062a4834adfc99a4dd64af3cf9 \ + --hash=sha256:4698a3777c2e0f6b624f8a4599131e2a25376d90fe8d146d7ac74c67c6f97c43 # via # -r requirements/tox.pip # tox @@ -511,9 +511,9 @@ pytest==7.2.2 \ # via # -r requirements/pytest.pip # pytest-xdist -pytest-xdist==3.2.0 \ - --hash=sha256:336098e3bbd8193276867cc87db8b22903c3927665dff9d1ac8684c02f597b68 \ - --hash=sha256:fa10f95a2564cd91652f2d132725183c3b590d9fdcdec09d3677386ecf4c1ce9 +pytest-xdist==3.2.1 \ + --hash=sha256:1849bd98d8b242b948e472db7478e090bf3361912a8fed87992ed94085f54727 \ + --hash=sha256:37290d161638a20b672401deef1cba812d110ac27e35d213f091d15b8beb40c9 # via -r requirements/pytest.pip pytz==2022.7.1 \ --hash=sha256:01a0681c4b9684a28304615eba55d1ab31ae00bf68ec157ec3708a8182dbbcd0 \ @@ -649,9 +649,9 @@ tornado==6.2 \ --hash=sha256:d3a2f5999215a3a06a4fc218026cd84c61b8b2b40ac5296a6db1f1451ef04c1e \ --hash=sha256:e5f923aa6a47e133d1cf87d60700889d7eae68988704e20c75fb2d65677a8e4b # via livereload -tox==4.4.6 \ - --hash=sha256:9786671d23b673ace7499c602c5746e2a225d1ecd9d9f624d0461303f40bd93b \ - --hash=sha256:e3d4a65852f029e5ba441a01824d2d839d30bb8fb071635ef9cb53952698e6bf +tox==4.4.7 \ + --hash=sha256:52c92a96e2c3fd47c5301e9c26f5a871466133d5376958c1ed95ef4ff4629cbe \ + --hash=sha256:da10ca1d809b99fae80b706b9dc9656b1daf505a395ac427d130a8a85502d08f # via # -r requirements/tox.pip # tox-gh @@ -702,9 +702,9 @@ typing-extensions==4.5.0 \ # pylint # rich # tox -urllib3==1.26.14 \ - --hash=sha256:076907bf8fd355cde77728471316625a4d2f7e713c125f51953bb5b3eecf4f72 \ - --hash=sha256:75edcdc2f7d85b137124a6c3c9fc3933cdeaa12ecb9a6a959f22797a0feca7e1 +urllib3==1.26.15 \ + --hash=sha256:8a388717b9476f934a21484e8c8e61875ab60644d29b9b39e11e4b9dc1c6b305 \ + --hash=sha256:aa751d169e23c7479ce47a0cb0da579e3ede798f994f5816a74e4f4500dcea42 # via # requests # twine @@ -716,9 +716,9 @@ urwid==2.1.2 \ urwid-readline==0.13 \ --hash=sha256:018020cbc864bb5ed87be17dc26b069eae2755cb29f3a9c569aac3bded1efaf4 # via pudb -virtualenv==20.20.0 \ - --hash=sha256:3c22fa5a7c7aa106ced59934d2c20a2ecb7f49b4130b8bf444178a16b880fa45 \ - --hash=sha256:a8a4b8ca1e28f864b7514a253f98c1d62b64e31e77325ba279248c65fb4fcef4 +virtualenv==20.21.0 \ + --hash=sha256:31712f8f2a17bd06234fa97fdf19609e789dd4e3e4bf108c3da71d710651adbc \ + --hash=sha256:f50e3e60f990a0757c9b68333c9fdaa72d7188caa417f96af9e52407831a3b68 # via # -r requirements/pip.pip # -r requirements/tox.pip diff --git a/requirements/mypy.pip b/requirements/mypy.pip index a3d9ed768..db465a2d2 100644 --- a/requirements/mypy.pip +++ b/requirements/mypy.pip @@ -15,9 +15,9 @@ colorama==0.4.6 \ --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \ --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 # via -r requirements/pytest.pip -exceptiongroup==1.1.0 \ - --hash=sha256:327cbda3da756e2de031a3107b81ab7b3770a602c4d16ca618298c526f4bec1e \ - --hash=sha256:bcb67d800a4497e1b404c2dd44fca47d3b7a5e5433dbab67f96c1a685cdfdf23 +exceptiongroup==1.1.1 \ + --hash=sha256:232c37c63e4f682982c8b6459f33a8981039e5fb8756b2074364e5055c498c9e \ + --hash=sha256:d484c3090ba2889ae2928419117447a14daf3c1231d5e30d0aae34f354f01785 # via # -r requirements/pytest.pip # hypothesis @@ -99,9 +99,9 @@ pytest==7.2.2 \ # via # -r requirements/pytest.pip # pytest-xdist -pytest-xdist==3.2.0 \ - --hash=sha256:336098e3bbd8193276867cc87db8b22903c3927665dff9d1ac8684c02f597b68 \ - --hash=sha256:fa10f95a2564cd91652f2d132725183c3b590d9fdcdec09d3677386ecf4c1ce9 +pytest-xdist==3.2.1 \ + --hash=sha256:1849bd98d8b242b948e472db7478e090bf3361912a8fed87992ed94085f54727 \ + --hash=sha256:37290d161638a20b672401deef1cba812d110ac27e35d213f091d15b8beb40c9 # via -r requirements/pytest.pip sortedcontainers==2.4.0 \ --hash=sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88 \ diff --git a/requirements/pip.pip b/requirements/pip.pip index cda95b9a4..133754b77 100644 --- a/requirements/pip.pip +++ b/requirements/pip.pip @@ -16,9 +16,9 @@ importlib-metadata==6.0.0 \ --hash=sha256:7efb448ec9a5e313a57655d35aa54cd3e01b7e1fbcf72dce1bf06119420f5bad \ --hash=sha256:e354bedeb60efa6affdcc8ae121b73544a7aa74156d047311948f6d711cd378d # via virtualenv -platformdirs==3.1.0 \ - --hash=sha256:13b08a53ed71021350c9e300d4ea8668438fb0046ab3937ac9a29913a1a1350a \ - --hash=sha256:accc3665857288317f32c7bebb5a8e482ba717b474f3fc1d18ca7f9214be0cef +platformdirs==3.1.1 \ + --hash=sha256:024996549ee88ec1a9aa99ff7f8fc819bb59e2c3477b410d90a16d32d6e707aa \ + --hash=sha256:e5986afb596e4bb5bde29a79ac9061aa955b94fca2399b7aaac4090860920dd8 # via virtualenv typing-extensions==4.5.0 \ --hash=sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb \ @@ -26,9 +26,9 @@ typing-extensions==4.5.0 \ # via # importlib-metadata # platformdirs -virtualenv==20.20.0 \ - --hash=sha256:3c22fa5a7c7aa106ced59934d2c20a2ecb7f49b4130b8bf444178a16b880fa45 \ - --hash=sha256:a8a4b8ca1e28f864b7514a253f98c1d62b64e31e77325ba279248c65fb4fcef4 +virtualenv==20.21.0 \ + --hash=sha256:31712f8f2a17bd06234fa97fdf19609e789dd4e3e4bf108c3da71d710651adbc \ + --hash=sha256:f50e3e60f990a0757c9b68333c9fdaa72d7188caa417f96af9e52407831a3b68 # via -r requirements/pip.in zipp==3.15.0 \ --hash=sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b \ diff --git a/requirements/pytest.pip b/requirements/pytest.pip index 883d0e266..23abfc236 100644 --- a/requirements/pytest.pip +++ b/requirements/pytest.pip @@ -14,9 +14,9 @@ colorama==0.4.6 \ --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \ --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 # via -r requirements/pytest.in -exceptiongroup==1.1.0 \ - --hash=sha256:327cbda3da756e2de031a3107b81ab7b3770a602c4d16ca618298c526f4bec1e \ - --hash=sha256:bcb67d800a4497e1b404c2dd44fca47d3b7a5e5433dbab67f96c1a685cdfdf23 +exceptiongroup==1.1.1 \ + --hash=sha256:232c37c63e4f682982c8b6459f33a8981039e5fb8756b2074364e5055c498c9e \ + --hash=sha256:d484c3090ba2889ae2928419117447a14daf3c1231d5e30d0aae34f354f01785 # via # hypothesis # pytest @@ -56,9 +56,9 @@ pytest==7.2.2 \ # via # -r requirements/pytest.in # pytest-xdist -pytest-xdist==3.2.0 \ - --hash=sha256:336098e3bbd8193276867cc87db8b22903c3927665dff9d1ac8684c02f597b68 \ - --hash=sha256:fa10f95a2564cd91652f2d132725183c3b590d9fdcdec09d3677386ecf4c1ce9 +pytest-xdist==3.2.1 \ + --hash=sha256:1849bd98d8b242b948e472db7478e090bf3361912a8fed87992ed94085f54727 \ + --hash=sha256:37290d161638a20b672401deef1cba812d110ac27e35d213f091d15b8beb40c9 # via -r requirements/pytest.in sortedcontainers==2.4.0 \ --hash=sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88 \ diff --git a/requirements/tox.pip b/requirements/tox.pip index 279dcd181..e1cd1e1ca 100644 --- a/requirements/tox.pip +++ b/requirements/tox.pip @@ -41,9 +41,9 @@ packaging==23.0 \ # via # pyproject-api # tox -platformdirs==3.1.0 \ - --hash=sha256:13b08a53ed71021350c9e300d4ea8668438fb0046ab3937ac9a29913a1a1350a \ - --hash=sha256:accc3665857288317f32c7bebb5a8e482ba717b474f3fc1d18ca7f9214be0cef +platformdirs==3.1.1 \ + --hash=sha256:024996549ee88ec1a9aa99ff7f8fc819bb59e2c3477b410d90a16d32d6e707aa \ + --hash=sha256:e5986afb596e4bb5bde29a79ac9061aa955b94fca2399b7aaac4090860920dd8 # via # tox # virtualenv @@ -51,9 +51,9 @@ pluggy==1.0.0 \ --hash=sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159 \ --hash=sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3 # via tox -pyproject-api==1.5.0 \ - --hash=sha256:0962df21f3e633b8ddb9567c011e6c1b3dcdfc31b7860c0ede7e24c5a1200fbe \ - --hash=sha256:4c111277dfb96bcd562c6245428f27250b794bfe3e210b8714c4f893952f2c17 +pyproject-api==1.5.1 \ + --hash=sha256:435f46547a9ff22cf4208ee274fca3e2869aeb062a4834adfc99a4dd64af3cf9 \ + --hash=sha256:4698a3777c2e0f6b624f8a4599131e2a25376d90fe8d146d7ac74c67c6f97c43 # via tox tomli==2.0.1 \ --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ @@ -61,9 +61,9 @@ tomli==2.0.1 \ # via # pyproject-api # tox -tox==4.4.6 \ - --hash=sha256:9786671d23b673ace7499c602c5746e2a225d1ecd9d9f624d0461303f40bd93b \ - --hash=sha256:e3d4a65852f029e5ba441a01824d2d839d30bb8fb071635ef9cb53952698e6bf +tox==4.4.7 \ + --hash=sha256:52c92a96e2c3fd47c5301e9c26f5a871466133d5376958c1ed95ef4ff4629cbe \ + --hash=sha256:da10ca1d809b99fae80b706b9dc9656b1daf505a395ac427d130a8a85502d08f # via # -r requirements/tox.in # tox-gh @@ -78,9 +78,9 @@ typing-extensions==4.5.0 \ # importlib-metadata # platformdirs # tox -virtualenv==20.20.0 \ - --hash=sha256:3c22fa5a7c7aa106ced59934d2c20a2ecb7f49b4130b8bf444178a16b880fa45 \ - --hash=sha256:a8a4b8ca1e28f864b7514a253f98c1d62b64e31e77325ba279248c65fb4fcef4 +virtualenv==20.21.0 \ + --hash=sha256:31712f8f2a17bd06234fa97fdf19609e789dd4e3e4bf108c3da71d710651adbc \ + --hash=sha256:f50e3e60f990a0757c9b68333c9fdaa72d7188caa417f96af9e52407831a3b68 # via tox zipp==3.15.0 \ --hash=sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b \ From 9e94ddb8d30b0f052532edf942bbde803eb2c347 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Tue, 14 Mar 2023 06:52:32 -0400 Subject: [PATCH 091/139] build: use .in from .in We build the .pip files on Mac. Some transitive dependencies are different on other OS's, and so would fail there, like this: ``` ERROR: In --require-hashes mode, all requirements must have their versions pinned with ==. These do not: SecretStorage>=3.2 from https://files.pythonhosted.org/packages/54/24/b4293291fa1dd830f353d2cb163295742fa87f179fcc8a20a306a81978b7/SecretStorage-3.3.3-py3-none-any.whl#sha256=f356e6628222568e3af06f2eba8df495efa13b3b63081dafd4f7d9a7b7bc9f99 (from keyring==23.13.1->-r requirements/dev.pip (line 279)) ``` By keeping the .in files self-contained, we provide a way to install without hashes. --- doc/contributing.rst | 5 +++ requirements/dev.in | 6 ++-- requirements/dev.pip | 71 ++++++++++++------------------------------- requirements/lint.pip | 71 ++++++++++++------------------------------- requirements/mypy.in | 2 +- requirements/mypy.pip | 39 +++++++----------------- 6 files changed, 58 insertions(+), 136 deletions(-) diff --git a/doc/contributing.rst b/doc/contributing.rst index 165ae40b2..e9d2c3a40 100644 --- a/doc/contributing.rst +++ b/doc/contributing.rst @@ -50,6 +50,11 @@ these steps: $ python3 -m pip install -r requirements/dev.pip + If this fails due to incorrect or missing hashes, use + ``dev.in`` instead:: + + $ python3 -m pip install -r requirements/dev.in + #. Install a number of versions of Python. Coverage.py supports a range of Python versions. The more you can test with, the more easily your code can be used as-is. If you only have one version, that's OK too, but may diff --git a/requirements/dev.in b/requirements/dev.in index 3fa980ca0..2374e343b 100644 --- a/requirements/dev.in +++ b/requirements/dev.in @@ -5,11 +5,11 @@ # "make upgrade" turns this into requirements/dev.pip. -c pins.pip --r pip.pip +-r pip.in # PyPI requirements for running tests. --r tox.pip --r pytest.pip +-r tox.in +-r pytest.in # for linting. check-manifest diff --git a/requirements/dev.pip b/requirements/dev.pip index 2152b52eb..03540351d 100644 --- a/requirements/dev.pip +++ b/requirements/dev.pip @@ -12,7 +12,6 @@ attrs==22.2.0 \ --hash=sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836 \ --hash=sha256:c9227bfc2f01993c03f68db37d1d15c9690188323c067c641f1a35ca58185f99 # via - # -r requirements/pytest.pip # hypothesis # pytest bleach==6.0.0 \ @@ -26,9 +25,7 @@ build==0.10.0 \ cachetools==5.3.0 \ --hash=sha256:13dfddc7b8df938c21a940dfa6557ce6e94a2f1cdfa58eb90c805721d58f2c14 \ --hash=sha256:429e1a1e845c008ea6c85aa35d4b98b65d6a9763eeef3e37e92728a12d1de9d4 - # via - # -r requirements/tox.pip - # tox + # via tox certifi==2022.12.7 \ --hash=sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3 \ --hash=sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18 @@ -36,9 +33,7 @@ certifi==2022.12.7 \ chardet==5.1.0 \ --hash=sha256:0d62712b956bc154f85fb0a266e2a3c5913c2967e00348701b32411d6def31e5 \ --hash=sha256:362777fb014af596ad31334fde1e8c327dfdb076e1960d1694662d46a6917ab9 - # via - # -r requirements/tox.pip - # tox + # via tox charset-normalizer==3.1.0 \ --hash=sha256:04afa6387e2b282cf78ff3dbce20f0cc071c12dc8f685bd40960cc68644cfea6 \ --hash=sha256:04eefcee095f58eaabe6dc3cc2262f3bcd776d2c67005880894f447b3f2cb9c1 \ @@ -128,8 +123,8 @@ colorama==0.4.6 \ --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \ --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 # via - # -r requirements/pytest.pip - # -r requirements/tox.pip + # -r requirements/pytest.in + # -r requirements/tox.in # tox dill==0.3.6 \ --hash=sha256:a07ffd2351b8c678dfc4a856a3005f8067aea51d6ba6c700796a4d9e280f39f0 \ @@ -138,10 +133,7 @@ dill==0.3.6 \ distlib==0.3.6 \ --hash=sha256:14bad2d9b04d3a36127ac97f30b12a19268f211063d8f8ee4f47108896e11b46 \ --hash=sha256:f35c4b692542ca110de7ef0bea44d73981caeb34ca0b9b6b2e6d7790dda8f80e - # via - # -r requirements/pip.pip - # -r requirements/tox.pip - # virtualenv + # via virtualenv docutils==0.19 \ --hash=sha256:33995a6753c30b7f577febfc2c50411fec6aac7f7ffeb7c4cfe5991072dcf9e6 \ --hash=sha256:5e1de4d849fee02c63b040a4a3fd567f4ab104defd8a5511fbbc24a8a017efbc @@ -150,27 +142,22 @@ exceptiongroup==1.1.1 \ --hash=sha256:232c37c63e4f682982c8b6459f33a8981039e5fb8756b2074364e5055c498c9e \ --hash=sha256:d484c3090ba2889ae2928419117447a14daf3c1231d5e30d0aae34f354f01785 # via - # -r requirements/pytest.pip # hypothesis # pytest execnet==1.9.0 \ --hash=sha256:8f694f3ba9cc92cab508b152dcfe322153975c29bda272e2fd7f3f00f36e47c5 \ --hash=sha256:a295f7cc774947aac58dde7fdc85f4aa00c42adf5d8f5468fc630c1acf30a142 - # via - # -r requirements/pytest.pip - # pytest-xdist + # via pytest-xdist filelock==3.9.0 \ --hash=sha256:7b319f24340b51f55a2bf7a12ac0755a9b03e718311dac567a0f4f7fabd2f5de \ --hash=sha256:f58d535af89bb9ad5cd4df046f741f8553a418c01a7856bf0d173bbc9f6bd16d # via - # -r requirements/pip.pip - # -r requirements/tox.pip # tox # virtualenv flaky==3.7.0 \ --hash=sha256:3ad100780721a1911f57a165809b7ea265a7863305acb66708220820caf8aa0d \ --hash=sha256:d6eda73cab5ae7364504b7c44670f70abed9e75f77dd116352f662817592ec9c - # via -r requirements/pytest.pip + # via -r requirements/pytest.in greenlet==2.0.2 \ --hash=sha256:03a8f4f3430c3b3ff8d10a2a86028c660355ab637cee9333d63d66b56f09d52a \ --hash=sha256:0bf60faf0bc2468089bdc5edd10555bab6e85152191df713e2ab1fcc86382b5a \ @@ -236,7 +223,7 @@ greenlet==2.0.2 \ hypothesis==6.68.2 \ --hash=sha256:2a41cc766cde52705895e54547374af89c617e8ec7bc4186cb7f03884a667d4e \ --hash=sha256:a7eb2b0c9a18560d8197fe35047ceb58e7e8ab7623a3e5a82613f6a2cd71cffa - # via -r requirements/pytest.pip + # via -r requirements/pytest.in idna==3.4 \ --hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 \ --hash=sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2 @@ -245,8 +232,6 @@ importlib-metadata==6.0.0 \ --hash=sha256:7efb448ec9a5e313a57655d35aa54cd3e01b7e1fbcf72dce1bf06119420f5bad \ --hash=sha256:e354bedeb60efa6affdcc8ae121b73544a7aa74156d047311948f6d711cd378d # via - # -r requirements/pip.pip - # -r requirements/pytest.pip # build # keyring # pluggy @@ -261,9 +246,7 @@ importlib-resources==5.12.0 \ iniconfig==2.0.0 \ --hash=sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3 \ --hash=sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374 - # via - # -r requirements/pytest.pip - # pytest + # via pytest isort==5.11.5 \ --hash=sha256:6be1f76a507cb2ecf16c7cf14a37e41609ca082330be4e3436a18ef74add55db \ --hash=sha256:ba1d72fb2595a01c7895a5128f9585a5cc4b6d395f1c8d514989b9a7eb2a8746 @@ -345,8 +328,6 @@ packaging==23.0 \ --hash=sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2 \ --hash=sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97 # via - # -r requirements/pytest.pip - # -r requirements/tox.pip # build # pudb # pyproject-api @@ -364,8 +345,6 @@ platformdirs==3.1.1 \ --hash=sha256:024996549ee88ec1a9aa99ff7f8fc819bb59e2c3477b410d90a16d32d6e707aa \ --hash=sha256:e5986afb596e4bb5bde29a79ac9061aa955b94fca2399b7aaac4090860920dd8 # via - # -r requirements/pip.pip - # -r requirements/tox.pip # pylint # tox # virtualenv @@ -373,8 +352,6 @@ pluggy==1.0.0 \ --hash=sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159 \ --hash=sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3 # via - # -r requirements/pytest.pip - # -r requirements/tox.pip # pytest # tox pudb==2022.1.3 \ @@ -394,9 +371,7 @@ pylint==2.17.0 \ pyproject-api==1.5.1 \ --hash=sha256:435f46547a9ff22cf4208ee274fca3e2869aeb062a4834adfc99a4dd64af3cf9 \ --hash=sha256:4698a3777c2e0f6b624f8a4599131e2a25376d90fe8d146d7ac74c67c6f97c43 - # via - # -r requirements/tox.pip - # tox + # via tox pyproject-hooks==1.0.0 \ --hash=sha256:283c11acd6b928d2f6a7c73fa0d01cb2bdc5f07c57a2eeb6e83d5e56b97976f8 \ --hash=sha256:f271b298b97f5955d53fb12b72c1fb1948c22c1a6b70b315c54cedaca0264ef5 @@ -405,12 +380,12 @@ pytest==7.2.2 \ --hash=sha256:130328f552dcfac0b1cec75c12e3f005619dc5f874f0a06e8ff7263f0ee6225e \ --hash=sha256:c99ab0c73aceb050f68929bc93af19ab6db0558791c6a0715723abe9d0ade9d4 # via - # -r requirements/pytest.pip + # -r requirements/pytest.in # pytest-xdist pytest-xdist==3.2.1 \ --hash=sha256:1849bd98d8b242b948e472db7478e090bf3361912a8fed87992ed94085f54727 \ --hash=sha256:37290d161638a20b672401deef1cba812d110ac27e35d213f091d15b8beb40c9 - # via -r requirements/pytest.pip + # via -r requirements/pytest.in readme-renderer==37.3 \ --hash=sha256:cd653186dfc73055656f090f227f5cb22a046d7f71a841dfa305f55c9a513273 \ --hash=sha256:f67a16caedfa71eef48a31b39708637a6f4664c4394801a7b0d6432d13907343 @@ -443,15 +418,11 @@ six==1.16.0 \ sortedcontainers==2.4.0 \ --hash=sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88 \ --hash=sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0 - # via - # -r requirements/pytest.pip - # hypothesis + # via hypothesis tomli==2.0.1 \ --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f # via - # -r requirements/pytest.pip - # -r requirements/tox.pip # build # check-manifest # pylint @@ -467,12 +438,12 @@ tox==4.4.7 \ --hash=sha256:52c92a96e2c3fd47c5301e9c26f5a871466133d5376958c1ed95ef4ff4629cbe \ --hash=sha256:da10ca1d809b99fae80b706b9dc9656b1daf505a395ac427d130a8a85502d08f # via - # -r requirements/tox.pip + # -r requirements/tox.in # tox-gh tox-gh==1.0.0 \ --hash=sha256:9cfbaa927946887d53bc19ae86621f4e5dc8516f3771ba4e74daeb1a1775efcd \ --hash=sha256:bda94ac15dbb62ef1e517672c05f8039faad5afaf9d1b4c9fa32d07f18027571 - # via -r requirements/tox.pip + # via -r requirements/tox.in twine==4.0.2 \ --hash=sha256:929bc3c280033347a00f847236564d1c52a3e61b1ac2516c97c48f3ceab756d8 \ --hash=sha256:9e102ef5fdd5a20661eb88fad46338806c3bd32cf1db729603fe3697b1bc83c8 @@ -507,8 +478,6 @@ typing-extensions==4.5.0 \ --hash=sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb \ --hash=sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4 # via - # -r requirements/pip.pip - # -r requirements/pytest.pip # astroid # importlib-metadata # markdown-it-py @@ -534,8 +503,7 @@ virtualenv==20.21.0 \ --hash=sha256:31712f8f2a17bd06234fa97fdf19609e789dd4e3e4bf108c3da71d710651adbc \ --hash=sha256:f50e3e60f990a0757c9b68333c9fdaa72d7188caa417f96af9e52407831a3b68 # via - # -r requirements/pip.pip - # -r requirements/tox.pip + # -r requirements/pip.in # tox webencodings==0.5.1 \ --hash=sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78 \ @@ -622,8 +590,6 @@ zipp==3.15.0 \ --hash=sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b \ --hash=sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556 # via - # -r requirements/pip.pip - # -r requirements/pytest.pip # importlib-metadata # importlib-resources @@ -631,10 +597,11 @@ zipp==3.15.0 \ pip==23.0.1 \ --hash=sha256:236bcb61156d76c4b8a05821b988c7b8c35bf0da28a4b614e8d6ab5212c25c6f \ --hash=sha256:cd015ea1bfb0fcef59d8a286c1f8bebcb983f6317719d415dc5351efb7cd7024 - # via -r requirements/pip.pip + # via -r requirements/pip.in setuptools==65.7.0 \ --hash=sha256:4d3c92fac8f1118bb77a22181355e29c239cabfe2b9effdaa665c66b711136d7 \ --hash=sha256:8ab4f1dbf2b4a65f7eec5ad0c620e84c34111a68d3349833494b9088212214dd # via - # -r requirements/pip.pip + # -c requirements/pins.pip + # -r requirements/pip.in # check-manifest diff --git a/requirements/lint.pip b/requirements/lint.pip index a08a49c69..6e04da410 100644 --- a/requirements/lint.pip +++ b/requirements/lint.pip @@ -16,7 +16,6 @@ attrs==22.2.0 \ --hash=sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836 \ --hash=sha256:c9227bfc2f01993c03f68db37d1d15c9690188323c067c641f1a35ca58185f99 # via - # -r requirements/pytest.pip # hypothesis # pytest # scriv @@ -35,9 +34,7 @@ build==0.10.0 \ cachetools==5.3.0 \ --hash=sha256:13dfddc7b8df938c21a940dfa6557ce6e94a2f1cdfa58eb90c805721d58f2c14 \ --hash=sha256:429e1a1e845c008ea6c85aa35d4b98b65d6a9763eeef3e37e92728a12d1de9d4 - # via - # -r requirements/tox.pip - # tox + # via tox certifi==2022.12.7 \ --hash=sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3 \ --hash=sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18 @@ -45,9 +42,7 @@ certifi==2022.12.7 \ chardet==5.1.0 \ --hash=sha256:0d62712b956bc154f85fb0a266e2a3c5913c2967e00348701b32411d6def31e5 \ --hash=sha256:362777fb014af596ad31334fde1e8c327dfdb076e1960d1694662d46a6917ab9 - # via - # -r requirements/tox.pip - # tox + # via tox charset-normalizer==3.1.0 \ --hash=sha256:04afa6387e2b282cf78ff3dbce20f0cc071c12dc8f685bd40960cc68644cfea6 \ --hash=sha256:04eefcee095f58eaabe6dc3cc2262f3bcd776d2c67005880894f447b3f2cb9c1 \ @@ -149,8 +144,8 @@ colorama==0.4.6 \ --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \ --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 # via - # -r requirements/pytest.pip - # -r requirements/tox.pip + # -r requirements/pytest.in + # -r requirements/tox.in # sphinx-autobuild # tox dill==0.3.6 \ @@ -160,10 +155,7 @@ dill==0.3.6 \ distlib==0.3.6 \ --hash=sha256:14bad2d9b04d3a36127ac97f30b12a19268f211063d8f8ee4f47108896e11b46 \ --hash=sha256:f35c4b692542ca110de7ef0bea44d73981caeb34ca0b9b6b2e6d7790dda8f80e - # via - # -r requirements/pip.pip - # -r requirements/tox.pip - # virtualenv + # via virtualenv docutils==0.18.1 \ --hash=sha256:23010f129180089fbcd3bc08cfefccb3b890b0050e1ca00c867036e9d161b98c \ --hash=sha256:679987caf361a7539d76e584cbeddc311e3aee937877c87346f31debc63e9d06 @@ -175,27 +167,22 @@ exceptiongroup==1.1.1 \ --hash=sha256:232c37c63e4f682982c8b6459f33a8981039e5fb8756b2074364e5055c498c9e \ --hash=sha256:d484c3090ba2889ae2928419117447a14daf3c1231d5e30d0aae34f354f01785 # via - # -r requirements/pytest.pip # hypothesis # pytest execnet==1.9.0 \ --hash=sha256:8f694f3ba9cc92cab508b152dcfe322153975c29bda272e2fd7f3f00f36e47c5 \ --hash=sha256:a295f7cc774947aac58dde7fdc85f4aa00c42adf5d8f5468fc630c1acf30a142 - # via - # -r requirements/pytest.pip - # pytest-xdist + # via pytest-xdist filelock==3.9.0 \ --hash=sha256:7b319f24340b51f55a2bf7a12ac0755a9b03e718311dac567a0f4f7fabd2f5de \ --hash=sha256:f58d535af89bb9ad5cd4df046f741f8553a418c01a7856bf0d173bbc9f6bd16d # via - # -r requirements/pip.pip - # -r requirements/tox.pip # tox # virtualenv flaky==3.7.0 \ --hash=sha256:3ad100780721a1911f57a165809b7ea265a7863305acb66708220820caf8aa0d \ --hash=sha256:d6eda73cab5ae7364504b7c44670f70abed9e75f77dd116352f662817592ec9c - # via -r requirements/pytest.pip + # via -r requirements/pytest.in greenlet==2.0.2 \ --hash=sha256:03a8f4f3430c3b3ff8d10a2a86028c660355ab637cee9333d63d66b56f09d52a \ --hash=sha256:0bf60faf0bc2468089bdc5edd10555bab6e85152191df713e2ab1fcc86382b5a \ @@ -261,7 +248,7 @@ greenlet==2.0.2 \ hypothesis==6.68.2 \ --hash=sha256:2a41cc766cde52705895e54547374af89c617e8ec7bc4186cb7f03884a667d4e \ --hash=sha256:a7eb2b0c9a18560d8197fe35047ceb58e7e8ab7623a3e5a82613f6a2cd71cffa - # via -r requirements/pytest.pip + # via -r requirements/pytest.in idna==3.4 \ --hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 \ --hash=sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2 @@ -274,8 +261,6 @@ importlib-metadata==6.0.0 \ --hash=sha256:7efb448ec9a5e313a57655d35aa54cd3e01b7e1fbcf72dce1bf06119420f5bad \ --hash=sha256:e354bedeb60efa6affdcc8ae121b73544a7aa74156d047311948f6d711cd378d # via - # -r requirements/pip.pip - # -r requirements/pytest.pip # build # click # keyring @@ -293,9 +278,7 @@ importlib-resources==5.12.0 \ iniconfig==2.0.0 \ --hash=sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3 \ --hash=sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374 - # via - # -r requirements/pytest.pip - # pytest + # via pytest isort==5.11.5 \ --hash=sha256:6be1f76a507cb2ecf16c7cf14a37e41609ca082330be4e3436a18ef74add55db \ --hash=sha256:ba1d72fb2595a01c7895a5128f9585a5cc4b6d395f1c8d514989b9a7eb2a8746 @@ -439,8 +422,6 @@ packaging==23.0 \ --hash=sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2 \ --hash=sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97 # via - # -r requirements/pytest.pip - # -r requirements/tox.pip # build # pudb # pyproject-api @@ -459,8 +440,6 @@ platformdirs==3.1.1 \ --hash=sha256:024996549ee88ec1a9aa99ff7f8fc819bb59e2c3477b410d90a16d32d6e707aa \ --hash=sha256:e5986afb596e4bb5bde29a79ac9061aa955b94fca2399b7aaac4090860920dd8 # via - # -r requirements/pip.pip - # -r requirements/tox.pip # pylint # tox # virtualenv @@ -468,8 +447,6 @@ pluggy==1.0.0 \ --hash=sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159 \ --hash=sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3 # via - # -r requirements/pytest.pip - # -r requirements/tox.pip # pytest # tox pudb==2022.1.3 \ @@ -498,9 +475,7 @@ pylint==2.17.0 \ pyproject-api==1.5.1 \ --hash=sha256:435f46547a9ff22cf4208ee274fca3e2869aeb062a4834adfc99a4dd64af3cf9 \ --hash=sha256:4698a3777c2e0f6b624f8a4599131e2a25376d90fe8d146d7ac74c67c6f97c43 - # via - # -r requirements/tox.pip - # tox + # via tox pyproject-hooks==1.0.0 \ --hash=sha256:283c11acd6b928d2f6a7c73fa0d01cb2bdc5f07c57a2eeb6e83d5e56b97976f8 \ --hash=sha256:f271b298b97f5955d53fb12b72c1fb1948c22c1a6b70b315c54cedaca0264ef5 @@ -509,12 +484,12 @@ pytest==7.2.2 \ --hash=sha256:130328f552dcfac0b1cec75c12e3f005619dc5f874f0a06e8ff7263f0ee6225e \ --hash=sha256:c99ab0c73aceb050f68929bc93af19ab6db0558791c6a0715723abe9d0ade9d4 # via - # -r requirements/pytest.pip + # -r requirements/pytest.in # pytest-xdist pytest-xdist==3.2.1 \ --hash=sha256:1849bd98d8b242b948e472db7478e090bf3361912a8fed87992ed94085f54727 \ --hash=sha256:37290d161638a20b672401deef1cba812d110ac27e35d213f091d15b8beb40c9 - # via -r requirements/pytest.pip + # via -r requirements/pytest.in pytz==2022.7.1 \ --hash=sha256:01a0681c4b9684a28304615eba55d1ab31ae00bf68ec157ec3708a8182dbbcd0 \ --hash=sha256:78f4f37d8198e0627c5f1143240bb0206b8691d8d7ac6d78fee88b78733f8c4a @@ -563,9 +538,7 @@ snowballstemmer==2.2.0 \ sortedcontainers==2.4.0 \ --hash=sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88 \ --hash=sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0 - # via - # -r requirements/pytest.pip - # hypothesis + # via hypothesis sphinx==5.3.0 \ --hash=sha256:060ca5c9f7ba57a08a1219e547b269fadf125ae25b06b9fa7f66768efb652d6d \ --hash=sha256:51026de0a9ff9fc13c05d74913ad66047e104f56a129ff73e174eb5c3ee794b5 @@ -623,8 +596,6 @@ tomli==2.0.1 \ --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f # via - # -r requirements/pytest.pip - # -r requirements/tox.pip # build # check-manifest # pylint @@ -653,12 +624,12 @@ tox==4.4.7 \ --hash=sha256:52c92a96e2c3fd47c5301e9c26f5a871466133d5376958c1ed95ef4ff4629cbe \ --hash=sha256:da10ca1d809b99fae80b706b9dc9656b1daf505a395ac427d130a8a85502d08f # via - # -r requirements/tox.pip + # -r requirements/tox.in # tox-gh tox-gh==1.0.0 \ --hash=sha256:9cfbaa927946887d53bc19ae86621f4e5dc8516f3771ba4e74daeb1a1775efcd \ --hash=sha256:bda94ac15dbb62ef1e517672c05f8039faad5afaf9d1b4c9fa32d07f18027571 - # via -r requirements/tox.pip + # via -r requirements/tox.in twine==4.0.2 \ --hash=sha256:929bc3c280033347a00f847236564d1c52a3e61b1ac2516c97c48f3ceab756d8 \ --hash=sha256:9e102ef5fdd5a20661eb88fad46338806c3bd32cf1db729603fe3697b1bc83c8 @@ -693,8 +664,6 @@ typing-extensions==4.5.0 \ --hash=sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb \ --hash=sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4 # via - # -r requirements/pip.pip - # -r requirements/pytest.pip # astroid # importlib-metadata # markdown-it-py @@ -720,8 +689,7 @@ virtualenv==20.21.0 \ --hash=sha256:31712f8f2a17bd06234fa97fdf19609e789dd4e3e4bf108c3da71d710651adbc \ --hash=sha256:f50e3e60f990a0757c9b68333c9fdaa72d7188caa417f96af9e52407831a3b68 # via - # -r requirements/pip.pip - # -r requirements/tox.pip + # -r requirements/pip.in # tox webencodings==0.5.1 \ --hash=sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78 \ @@ -808,8 +776,6 @@ zipp==3.15.0 \ --hash=sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b \ --hash=sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556 # via - # -r requirements/pip.pip - # -r requirements/pytest.pip # importlib-metadata # importlib-resources @@ -817,11 +783,12 @@ zipp==3.15.0 \ pip==23.0.1 \ --hash=sha256:236bcb61156d76c4b8a05821b988c7b8c35bf0da28a4b614e8d6ab5212c25c6f \ --hash=sha256:cd015ea1bfb0fcef59d8a286c1f8bebcb983f6317719d415dc5351efb7cd7024 - # via -r requirements/pip.pip + # via -r requirements/pip.in setuptools==65.7.0 \ --hash=sha256:4d3c92fac8f1118bb77a22181355e29c239cabfe2b9effdaa665c66b711136d7 \ --hash=sha256:8ab4f1dbf2b4a65f7eec5ad0c620e84c34111a68d3349833494b9088212214dd # via - # -r requirements/pip.pip + # -c requirements/pins.pip + # -r requirements/pip.in # check-manifest # sphinxcontrib-jquery diff --git a/requirements/mypy.in b/requirements/mypy.in index 871c589c3..25f421b44 100644 --- a/requirements/mypy.in +++ b/requirements/mypy.in @@ -4,6 +4,6 @@ -c pins.pip # So that we have pytest types. --r pytest.pip +-r pytest.in mypy diff --git a/requirements/mypy.pip b/requirements/mypy.pip index db465a2d2..d34a39024 100644 --- a/requirements/mypy.pip +++ b/requirements/mypy.pip @@ -8,47 +8,40 @@ attrs==22.2.0 \ --hash=sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836 \ --hash=sha256:c9227bfc2f01993c03f68db37d1d15c9690188323c067c641f1a35ca58185f99 # via - # -r requirements/pytest.pip # hypothesis # pytest colorama==0.4.6 \ --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \ --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 - # via -r requirements/pytest.pip + # via -r requirements/pytest.in exceptiongroup==1.1.1 \ --hash=sha256:232c37c63e4f682982c8b6459f33a8981039e5fb8756b2074364e5055c498c9e \ --hash=sha256:d484c3090ba2889ae2928419117447a14daf3c1231d5e30d0aae34f354f01785 # via - # -r requirements/pytest.pip # hypothesis # pytest execnet==1.9.0 \ --hash=sha256:8f694f3ba9cc92cab508b152dcfe322153975c29bda272e2fd7f3f00f36e47c5 \ --hash=sha256:a295f7cc774947aac58dde7fdc85f4aa00c42adf5d8f5468fc630c1acf30a142 - # via - # -r requirements/pytest.pip - # pytest-xdist + # via pytest-xdist flaky==3.7.0 \ --hash=sha256:3ad100780721a1911f57a165809b7ea265a7863305acb66708220820caf8aa0d \ --hash=sha256:d6eda73cab5ae7364504b7c44670f70abed9e75f77dd116352f662817592ec9c - # via -r requirements/pytest.pip + # via -r requirements/pytest.in hypothesis==6.68.2 \ --hash=sha256:2a41cc766cde52705895e54547374af89c617e8ec7bc4186cb7f03884a667d4e \ --hash=sha256:a7eb2b0c9a18560d8197fe35047ceb58e7e8ab7623a3e5a82613f6a2cd71cffa - # via -r requirements/pytest.pip + # via -r requirements/pytest.in importlib-metadata==6.0.0 \ --hash=sha256:7efb448ec9a5e313a57655d35aa54cd3e01b7e1fbcf72dce1bf06119420f5bad \ --hash=sha256:e354bedeb60efa6affdcc8ae121b73544a7aa74156d047311948f6d711cd378d # via - # -r requirements/pytest.pip # pluggy # pytest iniconfig==2.0.0 \ --hash=sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3 \ --hash=sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374 - # via - # -r requirements/pytest.pip - # pytest + # via pytest mypy==1.1.1 \ --hash=sha256:0a28a76785bf57655a8ea5eb0540a15b0e781c807b5aa798bd463779988fa1d5 \ --hash=sha256:19ba15f9627a5723e522d007fe708007bae52b93faab00f95d72f03e1afa9598 \ @@ -84,36 +77,29 @@ mypy-extensions==1.0.0 \ packaging==23.0 \ --hash=sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2 \ --hash=sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97 - # via - # -r requirements/pytest.pip - # pytest + # via pytest pluggy==1.0.0 \ --hash=sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159 \ --hash=sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3 - # via - # -r requirements/pytest.pip - # pytest + # via pytest pytest==7.2.2 \ --hash=sha256:130328f552dcfac0b1cec75c12e3f005619dc5f874f0a06e8ff7263f0ee6225e \ --hash=sha256:c99ab0c73aceb050f68929bc93af19ab6db0558791c6a0715723abe9d0ade9d4 # via - # -r requirements/pytest.pip + # -r requirements/pytest.in # pytest-xdist pytest-xdist==3.2.1 \ --hash=sha256:1849bd98d8b242b948e472db7478e090bf3361912a8fed87992ed94085f54727 \ --hash=sha256:37290d161638a20b672401deef1cba812d110ac27e35d213f091d15b8beb40c9 - # via -r requirements/pytest.pip + # via -r requirements/pytest.in sortedcontainers==2.4.0 \ --hash=sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88 \ --hash=sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0 - # via - # -r requirements/pytest.pip - # hypothesis + # via hypothesis tomli==2.0.1 \ --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f # via - # -r requirements/pytest.pip # mypy # pytest typed-ast==1.5.4 \ @@ -146,12 +132,9 @@ typing-extensions==4.5.0 \ --hash=sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb \ --hash=sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4 # via - # -r requirements/pytest.pip # importlib-metadata # mypy zipp==3.15.0 \ --hash=sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b \ --hash=sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556 - # via - # -r requirements/pytest.pip - # importlib-metadata + # via importlib-metadata From dc83ac55bd58a0531b71b851ac0a7d217bfc1f83 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Tue, 14 Mar 2023 07:37:41 -0400 Subject: [PATCH 092/139] build: run dependency check on pushes, for more action uniformity --- .github/workflows/dependency-review.yml | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/.github/workflows/dependency-review.yml b/.github/workflows/dependency-review.yml index 34b14c395..d10f16226 100644 --- a/.github/workflows/dependency-review.yml +++ b/.github/workflows/dependency-review.yml @@ -4,8 +4,15 @@ # # Source repository: https://github.com/actions/dependency-review-action # Public documentation: https://docs.github.com/en/code-security/supply-chain-security/understanding-your-software-supply-chain/about-dependency-review#dependency-review-enforcement + name: 'Dependency Review' -on: [pull_request] +on: + push: + branches: + - master + - nedbat/* + pull_request: + workflow_dispatch: permissions: contents: read @@ -18,3 +25,6 @@ jobs: uses: actions/checkout@v3 - name: 'Dependency Review' uses: actions/dependency-review-action@v3 + with: + base-ref: ${{ github.event.pull_request.base.ref || 'master' }} + head-ref: ${{ github.event.pull_request.head.ref || github.ref }} From e47f35462dc7e8b28d2fa94de65a1bf34608d4c8 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Tue, 14 Mar 2023 18:32:42 -0400 Subject: [PATCH 093/139] build: will this work on fork pr's? With .ref, on a PR from a fork, I got: ``` Run actions/dependency-review-action@v3 with: base-ref: master head-ref: xml_duplicate_fix repo-token: *** fail-on-severity: low fail-on-scopes: runtime Error: Bad Request ``` --- .github/workflows/dependency-review.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/dependency-review.yml b/.github/workflows/dependency-review.yml index d10f16226..943a4b57c 100644 --- a/.github/workflows/dependency-review.yml +++ b/.github/workflows/dependency-review.yml @@ -26,5 +26,5 @@ jobs: - name: 'Dependency Review' uses: actions/dependency-review-action@v3 with: - base-ref: ${{ github.event.pull_request.base.ref || 'master' }} - head-ref: ${{ github.event.pull_request.head.ref || github.ref }} + base-ref: ${{ github.event.pull_request.base.sha || 'master' }} + head-ref: ${{ github.event.pull_request.head.sha || github.ref }} From 45d76fa644b9f2e082de1721a55f91eacdcdc520 Mon Sep 17 00:00:00 2001 From: Benjamin Parzella <bparzella@gmail.com> Date: Wed, 15 Mar 2023 00:55:47 +0100 Subject: [PATCH 094/139] fix: generate xml report packages correctly on windows (#1574) * fix: generate xml report packages correctly on windows * test: check duplicate package names in xml report * fix: shorten long line in test_xml --- coverage/xmlreport.py | 2 +- tests/test_xml.py | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/coverage/xmlreport.py b/coverage/xmlreport.py index 65da11d23..fd2e9f81b 100644 --- a/coverage/xmlreport.py +++ b/coverage/xmlreport.py @@ -182,7 +182,7 @@ def xml_file(self, fr: FileReporter, analysis: Analysis, has_arcs: bool) -> None rel_name = filename[len(source_path)+1:] break else: - rel_name = fr.relative_filename() + rel_name = fr.relative_filename().replace("\\", "/") self.source_paths.add(fr.filename[:-len(rel_name)].rstrip(r"\/")) dirname = os.path.dirname(rel_name) or "." diff --git a/tests/test_xml.py b/tests/test_xml.py index c21a9dd4a..94b310e3e 100644 --- a/tests/test_xml.py +++ b/tests/test_xml.py @@ -318,6 +318,39 @@ def test_accented_directory(self) -> None: "name": "â", } + def test_no_duplicate_packages(self) -> None: + self.make_file( + "namespace/package/__init__.py", + "from . import sample; from . import test; from .subpackage import test" + ) + self.make_file("namespace/package/sample.py", "print('package.sample')") + self.make_file("namespace/package/test.py", "print('package.test')") + self.make_file("namespace/package/subpackage/test.py", "print('package.subpackage.test')") + + # no source path passed to coverage! + # problem occurs when they are dynamically generated during xml report + cov = coverage.Coverage() + + cov.start() + import_local_file("foo", "namespace/package/__init__.py") # pragma: nested + cov.stop() # pragma: nested + + cov.xml_report() + + dom = ElementTree.parse("coverage.xml") + + # only two packages should be present + packages = dom.findall(".//package") + assert len(packages) == 2 + + # one of them is namespace.package + named_package = dom.findall(".//package[@name='namespace.package']") + assert len(named_package) == 1 + + # the other one namespace.package.subpackage + named_sub_package = dom.findall(".//package[@name='namespace.package.subpackage']") + assert len(named_sub_package) == 1 + def unbackslash(v: Any) -> Any: """Find strings in `v`, and replace backslashes with slashes throughout.""" From f95ce970a7870e636105cf6f9193701760d3135f Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Tue, 14 Mar 2023 21:03:56 -0400 Subject: [PATCH 095/139] docs: #1573 is fixed, thanks Benjamin Parzella --- CHANGES.rst | 6 ++++++ CONTRIBUTORS.txt | 1 + 2 files changed, 7 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index bb180f886..1e549eea7 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -24,6 +24,12 @@ Unreleased LF (lines found) and LH (lines hit) totals. This is now fixed, thanks to `Ian Moore <pull 1583_>`_. +- Fix: the ``coverage xml`` command on Windows could create a .xml file with duplicate + ``<package>`` elements. This is now fixed, thanks to `Benjamin Parzella <pull + 1574_>`_, closing `issue 1573`_. + +.. _issue 1573: https://github.com/nedbat/coveragepy/issues/1573 +.. _pull 1574: https://github.com/nedbat/coveragepy/pull/1574 .. _pull 1583: https://github.com/nedbat/coveragepy/pull/1583 diff --git a/CONTRIBUTORS.txt b/CONTRIBUTORS.txt index 0d6c7f602..bb69b823b 100644 --- a/CONTRIBUTORS.txt +++ b/CONTRIBUTORS.txt @@ -25,6 +25,7 @@ Arthur Deygin Arthur Rio Ben Carlsson Ben Finney +Benjamin Parzella Benjamin Schubert Bernát Gábor Bill Hart From dd7959dbf4eede4d2f2254f607113e45071cc8d3 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Wed, 15 Mar 2023 05:44:14 -0400 Subject: [PATCH 096/139] docs: wrap long lines --- CHANGES.rst | 6 +++--- doc/changes.rst | 7 ++++--- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index 1e549eea7..74f2d4bcc 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -24,9 +24,9 @@ Unreleased LF (lines found) and LH (lines hit) totals. This is now fixed, thanks to `Ian Moore <pull 1583_>`_. -- Fix: the ``coverage xml`` command on Windows could create a .xml file with duplicate - ``<package>`` elements. This is now fixed, thanks to `Benjamin Parzella <pull - 1574_>`_, closing `issue 1573`_. +- Fix: the ``coverage xml`` command on Windows could create a .xml file with + duplicate ``<package>`` elements. This is now fixed, thanks to `Benjamin + Parzella <pull 1574_>`_, closing `issue 1573`_. .. _issue 1573: https://github.com/nedbat/coveragepy/issues/1573 .. _pull 1574: https://github.com/nedbat/coveragepy/pull/1574 diff --git a/doc/changes.rst b/doc/changes.rst index 7f2df6181..54a3c81be 100644 --- a/doc/changes.rst +++ b/doc/changes.rst @@ -2234,9 +2234,10 @@ Version 3.4 — 2010-09-19 Version 3.4b2 — 2010-09-06 -------------------------- -- Completely un-executed files can now be included in coverage results, reported - as 0% covered. This only happens if the --source option is specified, since - coverage.py needs guidance about where to look for source files. +- Completely un-executed files can now be included in coverage results, + reported as 0% covered. This only happens if the --source option is + specified, since coverage.py needs guidance about where to look for source + files. - The XML report output now properly includes a percentage for branch coverage, fixing `issue 65`_ and `issue 81`_. From 4574ecf128ae51c2b950f6c9cb2486b86f5354e7 Mon Sep 17 00:00:00 2001 From: Manuel Jacob <me@manueljacob.de> Date: Tue, 21 Feb 2023 03:03:55 +0100 Subject: [PATCH 097/139] fix: don't measure all third-party packages if source is in third-party location There is logic to not measure third-party packages inside configured sources. However, when a (i.e. another) configured source was inside a third-party location, this logic was previously disabled completely. This caused a problem if a virtual env is set up inside a configured source directory and a configured source package gets installed inside the virtual env. Previously in this case, coverage was measured for all files in the virtual env for the reason described in the previous paragraph. This commit changes the code to collect all configured source directories inside third-party locations and disable coverage for code in third-party locations only if its not in one of these collected source directories. --- CHANGES.rst | 7 +++++++ CONTRIBUTORS.txt | 1 + coverage/inorout.py | 25 +++++++++++++------------ tests/test_venv.py | 26 +++++++++++++++++++++++--- 4 files changed, 44 insertions(+), 15 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index 74f2d4bcc..b40607464 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -20,6 +20,12 @@ development at the same time, such as 4.5.x and 5.0. Unreleased ---------- +- Fix: if a virtualenv was created inside a source directory, and a sourced + package was installed inside the virtualenv, then all of the third-party + packages inside the virtualenv would be measured. This was incorrect, but + has now been fixed: only the specified packages will be measured, thanks to + `Manuel Jacob <pull 1560_>`_. + - Fix: the ``coverage lcov`` command could create a .lcov file with incorrect LF (lines found) and LH (lines hit) totals. This is now fixed, thanks to `Ian Moore <pull 1583_>`_. @@ -28,6 +34,7 @@ Unreleased duplicate ``<package>`` elements. This is now fixed, thanks to `Benjamin Parzella <pull 1574_>`_, closing `issue 1573`_. +.. _pull 1560: https://github.com/nedbat/coveragepy/pull/1560 .. _issue 1573: https://github.com/nedbat/coveragepy/issues/1573 .. _pull 1574: https://github.com/nedbat/coveragepy/pull/1574 .. _pull 1583: https://github.com/nedbat/coveragepy/pull/1583 diff --git a/CONTRIBUTORS.txt b/CONTRIBUTORS.txt index bb69b823b..a50138f85 100644 --- a/CONTRIBUTORS.txt +++ b/CONTRIBUTORS.txt @@ -107,6 +107,7 @@ Leonardo Pistone Lex Berezhny Loïc Dachary Lorenzo Micò +Manuel Jacob Marc Abramowitz Marc Legendre Marcelo Trylesinski diff --git a/coverage/inorout.py b/coverage/inorout.py index babaa3d80..d0d0ef913 100644 --- a/coverage/inorout.py +++ b/coverage/inorout.py @@ -262,7 +262,7 @@ def _debug(msg: str) -> None: # Check if the source we want to measure has been installed as a # third-party package. # Is the source inside a third-party area? - self.source_in_third = False + self.source_in_third_paths = set() with sys_modules_saved(): for pkg in self.source_pkgs: try: @@ -274,22 +274,23 @@ def _debug(msg: str) -> None: if modfile: if self.third_match.match(modfile): _debug( - f"Source is in third-party because of source_pkg {pkg!r} at {modfile!r}" + f"Source in third-party: source_pkg {pkg!r} at {modfile!r}" ) - self.source_in_third = True + self.source_in_third_paths.add(canonical_path(source_for_file(modfile))) else: for pathdir in path: if self.third_match.match(pathdir): _debug( - f"Source is in third-party because of {pkg!r} path directory " + - f"at {pathdir!r}" + f"Source in third-party: {pkg!r} path directory at {pathdir!r}" ) - self.source_in_third = True + self.source_in_third_paths.add(pathdir) for src in self.source: if self.third_match.match(src): - _debug(f"Source is in third-party because of source directory {src!r}") - self.source_in_third = True + _debug(f"Source in third-party: source directory {src!r}") + self.source_in_third_paths.add(src) + self.source_in_third_match = TreeMatcher(self.source_in_third_paths, "source_in_third") + _debug(f"Source in third-party matching: {self.source_in_third_match}") self.plugins: Plugins self.disp_class: Type[TFileDisposition] = FileDisposition @@ -419,9 +420,8 @@ def check_include_omit_etc(self, filename: str, frame: Optional[FrameType]) -> O ok = True if not ok: return extra + "falls outside the --source spec" - if not self.source_in_third: - if self.third_match.match(filename): - return "inside --source, but is third-party" + if self.third_match.match(filename) and not self.source_in_third_match.match(filename): + return "inside --source, but is third-party" elif self.include_match: if not self.include_match.match(filename): return "falls outside the --include trees" @@ -576,12 +576,13 @@ def sys_info(self) -> Iterable[Tuple[str, Any]]: ("coverage_paths", self.cover_paths), ("stdlib_paths", self.pylib_paths), ("third_party_paths", self.third_paths), + ("source_in_third_party_paths", self.source_in_third_paths), ] matcher_names = [ 'source_match', 'source_pkgs_match', 'include_match', 'omit_match', - 'cover_match', 'pylib_match', 'third_match', + 'cover_match', 'pylib_match', 'third_match', 'source_in_third_match', ] for matcher_name in matcher_names: diff --git a/tests/test_venv.py b/tests/test_venv.py index de7ebbe18..ae5b303f7 100644 --- a/tests/test_venv.py +++ b/tests/test_venv.py @@ -198,8 +198,28 @@ def get_trace_output(self) -> str: with open("debug_out.txt") as f: return f.read() - def test_third_party_venv_isnt_measured(self, coverage_command: str) -> None: - out = run_in_venv(coverage_command + " run --source=. myproduct.py") + @pytest.mark.parametrize('install_source_in_venv', [True, False]) + def test_third_party_venv_isnt_measured( + self, coverage_command: str, install_source_in_venv: bool + ) -> None: + if install_source_in_venv: + make_file("setup.py", """\ + import setuptools + setuptools.setup( + name="myproduct", + py_modules = ["myproduct"], + ) + """) + try: + run_in_venv("python -m pip install .") + finally: + shutil.rmtree("build", ignore_errors=True) + shutil.rmtree("myproduct.egg-info", ignore_errors=True) + # Ensure that coverage doesn't run the non-installed module. + os.remove('myproduct.py') + out = run_in_venv(coverage_command + " run --source=.,myproduct -m myproduct") + else: + out = run_in_venv(coverage_command + " run --source=. myproduct.py") # In particular, this warning doesn't appear: # Already imported a file that will be measured: .../coverage/__main__.py assert out == self.expected_stdout @@ -213,7 +233,7 @@ def test_third_party_venv_isnt_measured(self, coverage_command: str) -> None: ) assert re_lines(r"^Tracing .*\bmyproduct.py", debug_out) assert re_lines( - r"^Not tracing .*\bcolorsys.py': falls outside the --source spec", + r"^Not tracing .*\bcolorsys.py': (module 'colorsys' |)?falls outside the --source spec", debug_out, ) From 021a99f3f50eca77abb85e2f25f26af65ad06128 Mon Sep 17 00:00:00 2001 From: KotlinIsland <65446343+KotlinIsland@users.noreply.github.com> Date: Wed, 15 Mar 2023 20:45:27 +1000 Subject: [PATCH 098/139] fix: Remove missing type parameter (#1570) Co-authored-by: KotlinIsland <kotlinisland@users.noreply.github.com> Co-authored-by: Ned Batchelder <ned@nedbatchelder.com> --- coverage/types.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/coverage/types.py b/coverage/types.py index e01f451e6..828ab20bb 100644 --- a/coverage/types.py +++ b/coverage/types.py @@ -29,7 +29,11 @@ class Protocol: # pylint: disable=missing-class-docstring ## File paths # For arguments that are file paths: -FilePath = Union[str, os.PathLike] +if TYPE_CHECKING: + FilePath = Union[str, os.PathLike[str]] +else: + # PathLike < python3.9 doesn't support subscription + FilePath = Union[str, os.PathLike] # For testing FilePath arguments FilePathClasses = [str, pathlib.Path] FilePathType = Union[Type[str], Type[pathlib.Path]] From 4192f8b6a431f98c26c9e9f70aacdc06c646ef8f Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Thu, 16 Mar 2023 07:52:16 -0400 Subject: [PATCH 099/139] docs: prep for 7.2.2 --- CHANGES.rst | 10 ++++++---- README.rst | 2 +- coverage/version.py | 4 ++-- doc/conf.py | 6 +++--- doc/index.rst | 2 +- 5 files changed, 13 insertions(+), 11 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index b40607464..209eb6ad8 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -17,8 +17,12 @@ development at the same time, such as 4.5.x and 5.0. .. Version 9.8.1 — 2027-07-27 .. -------------------------- -Unreleased ----------- +.. scriv-start-here + +.. _changes_7-2-2: + +Version 7.2.2 — 2023-03-16 +-------------------------- - Fix: if a virtualenv was created inside a source directory, and a sourced package was installed inside the virtualenv, then all of the third-party @@ -40,8 +44,6 @@ Unreleased .. _pull 1583: https://github.com/nedbat/coveragepy/pull/1583 -.. scriv-start-here - .. _changes_7-2-1: Version 7.2.1 — 2023-02-26 diff --git a/README.rst b/README.rst index 1f01a62e9..25239393e 100644 --- a/README.rst +++ b/README.rst @@ -28,7 +28,7 @@ Coverage.py runs on these versions of Python: .. PYVERSIONS -* CPython 3.7 through 3.12.0a5 +* CPython 3.7 through 3.12.0a6 * PyPy3 7.3.11. Documentation is on `Read the Docs`_. Code repository and issue tracker are on diff --git a/coverage/version.py b/coverage/version.py index c0a0cbcf1..c9e8d7f7e 100644 --- a/coverage/version.py +++ b/coverage/version.py @@ -8,8 +8,8 @@ # version_info: same semantics as sys.version_info. # _dev: the .devN suffix if any. -version_info = (7, 2, 2, "alpha", 0) -_dev = 1 +version_info = (7, 2, 2, "final", 0) +_dev = 0 def _make_version( diff --git a/doc/conf.py b/doc/conf.py index 13c8d928a..59907127a 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -67,11 +67,11 @@ # @@@ editable copyright = "2009–2023, Ned Batchelder" # pylint: disable=redefined-builtin # The short X.Y.Z version. -version = "7.2.1" +version = "7.2.2" # The full version, including alpha/beta/rc tags. -release = "7.2.1" +release = "7.2.2" # The date of release, in "monthname day, year" format. -release_date = "February 26, 2023" +release_date = "March 16, 2023" # @@@ end rst_epilog = """ diff --git a/doc/index.rst b/doc/index.rst index e416bb657..e5ac5a0ae 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -18,7 +18,7 @@ supported on: .. PYVERSIONS -* Python versions 3.7 through 3.12.0a5. +* Python versions 3.7 through 3.12.0a6. * PyPy3 7.3.11. .. ifconfig:: prerelease From 3971cc85ee77fc07d7a79912c4c10c93c3e94e1d Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Thu, 16 Mar 2023 07:53:10 -0400 Subject: [PATCH 100/139] docs: sample html for 7.2.2 --- doc/sample_html/d_7b071bdc2a35fa80___init___py.html | 8 ++++---- doc/sample_html/d_7b071bdc2a35fa80___main___py.html | 8 ++++---- doc/sample_html/d_7b071bdc2a35fa80_cogapp_py.html | 8 ++++---- doc/sample_html/d_7b071bdc2a35fa80_makefiles_py.html | 8 ++++---- doc/sample_html/d_7b071bdc2a35fa80_test_cogapp_py.html | 8 ++++---- doc/sample_html/d_7b071bdc2a35fa80_test_makefiles_py.html | 8 ++++---- .../d_7b071bdc2a35fa80_test_whiteutils_py.html | 8 ++++---- doc/sample_html/d_7b071bdc2a35fa80_whiteutils_py.html | 8 ++++---- doc/sample_html/index.html | 8 ++++---- doc/sample_html/status.json | 2 +- 10 files changed, 37 insertions(+), 37 deletions(-) diff --git a/doc/sample_html/d_7b071bdc2a35fa80___init___py.html b/doc/sample_html/d_7b071bdc2a35fa80___init___py.html index 509e0ff6f..dce7d87cb 100644 --- a/doc/sample_html/d_7b071bdc2a35fa80___init___py.html +++ b/doc/sample_html/d_7b071bdc2a35fa80___init___py.html @@ -66,8 +66,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80___main___py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io/en/7.2.1">coverage.py v7.2.1</a>, - created at 2023-02-26 08:15 -0500 + <a class="nav" href="https://coverage.readthedocs.io/en/7.2.2">coverage.py v7.2.2</a>, + created at 2023-03-16 07:52 -0400 </p> <aside class="hidden"> <button type="button" class="button_next_chunk" data-shortcut="j"/> @@ -97,8 +97,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80___main___py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io/en/7.2.1">coverage.py v7.2.1</a>, - created at 2023-02-26 08:15 -0500 + <a class="nav" href="https://coverage.readthedocs.io/en/7.2.2">coverage.py v7.2.2</a>, + created at 2023-03-16 07:52 -0400 </p> </div> </footer> diff --git a/doc/sample_html/d_7b071bdc2a35fa80___main___py.html b/doc/sample_html/d_7b071bdc2a35fa80___main___py.html index 3f489d6b7..3ed5da113 100644 --- a/doc/sample_html/d_7b071bdc2a35fa80___main___py.html +++ b/doc/sample_html/d_7b071bdc2a35fa80___main___py.html @@ -66,8 +66,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80_cogapp_py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io/en/7.2.1">coverage.py v7.2.1</a>, - created at 2023-02-26 08:15 -0500 + <a class="nav" href="https://coverage.readthedocs.io/en/7.2.2">coverage.py v7.2.2</a>, + created at 2023-03-16 07:52 -0400 </p> <aside class="hidden"> <button type="button" class="button_next_chunk" data-shortcut="j"/> @@ -97,8 +97,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80_cogapp_py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io/en/7.2.1">coverage.py v7.2.1</a>, - created at 2023-02-26 08:15 -0500 + <a class="nav" href="https://coverage.readthedocs.io/en/7.2.2">coverage.py v7.2.2</a>, + created at 2023-03-16 07:52 -0400 </p> </div> </footer> diff --git a/doc/sample_html/d_7b071bdc2a35fa80_cogapp_py.html b/doc/sample_html/d_7b071bdc2a35fa80_cogapp_py.html index 10df74dc7..7d54ec112 100644 --- a/doc/sample_html/d_7b071bdc2a35fa80_cogapp_py.html +++ b/doc/sample_html/d_7b071bdc2a35fa80_cogapp_py.html @@ -66,8 +66,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80_makefiles_py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io/en/7.2.1">coverage.py v7.2.1</a>, - created at 2023-02-26 08:15 -0500 + <a class="nav" href="https://coverage.readthedocs.io/en/7.2.2">coverage.py v7.2.2</a>, + created at 2023-03-16 07:52 -0400 </p> <aside class="hidden"> <button type="button" class="button_next_chunk" data-shortcut="j"/> @@ -938,8 +938,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80_makefiles_py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io/en/7.2.1">coverage.py v7.2.1</a>, - created at 2023-02-26 08:15 -0500 + <a class="nav" href="https://coverage.readthedocs.io/en/7.2.2">coverage.py v7.2.2</a>, + created at 2023-03-16 07:52 -0400 </p> </div> </footer> diff --git a/doc/sample_html/d_7b071bdc2a35fa80_makefiles_py.html b/doc/sample_html/d_7b071bdc2a35fa80_makefiles_py.html index 9e3994ee0..a198865ef 100644 --- a/doc/sample_html/d_7b071bdc2a35fa80_makefiles_py.html +++ b/doc/sample_html/d_7b071bdc2a35fa80_makefiles_py.html @@ -66,8 +66,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80_test_cogapp_py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io/en/7.2.1">coverage.py v7.2.1</a>, - created at 2023-02-26 08:15 -0500 + <a class="nav" href="https://coverage.readthedocs.io/en/7.2.2">coverage.py v7.2.2</a>, + created at 2023-03-16 07:52 -0400 </p> <aside class="hidden"> <button type="button" class="button_next_chunk" data-shortcut="j"/> @@ -126,8 +126,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80_test_cogapp_py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io/en/7.2.1">coverage.py v7.2.1</a>, - created at 2023-02-26 08:15 -0500 + <a class="nav" href="https://coverage.readthedocs.io/en/7.2.2">coverage.py v7.2.2</a>, + created at 2023-03-16 07:52 -0400 </p> </div> </footer> diff --git a/doc/sample_html/d_7b071bdc2a35fa80_test_cogapp_py.html b/doc/sample_html/d_7b071bdc2a35fa80_test_cogapp_py.html index 05e99ff5d..74bb4ab57 100644 --- a/doc/sample_html/d_7b071bdc2a35fa80_test_cogapp_py.html +++ b/doc/sample_html/d_7b071bdc2a35fa80_test_cogapp_py.html @@ -66,8 +66,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80_test_makefiles_py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io/en/7.2.1">coverage.py v7.2.1</a>, - created at 2023-02-26 08:15 -0500 + <a class="nav" href="https://coverage.readthedocs.io/en/7.2.2">coverage.py v7.2.2</a>, + created at 2023-03-16 07:52 -0400 </p> <aside class="hidden"> <button type="button" class="button_next_chunk" data-shortcut="j"/> @@ -2713,8 +2713,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80_test_makefiles_py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io/en/7.2.1">coverage.py v7.2.1</a>, - created at 2023-02-26 08:15 -0500 + <a class="nav" href="https://coverage.readthedocs.io/en/7.2.2">coverage.py v7.2.2</a>, + created at 2023-03-16 07:52 -0400 </p> </div> </footer> diff --git a/doc/sample_html/d_7b071bdc2a35fa80_test_makefiles_py.html b/doc/sample_html/d_7b071bdc2a35fa80_test_makefiles_py.html index 8e407c197..ffe5456be 100644 --- a/doc/sample_html/d_7b071bdc2a35fa80_test_makefiles_py.html +++ b/doc/sample_html/d_7b071bdc2a35fa80_test_makefiles_py.html @@ -66,8 +66,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80_test_whiteutils_py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io/en/7.2.1">coverage.py v7.2.1</a>, - created at 2023-02-26 08:15 -0500 + <a class="nav" href="https://coverage.readthedocs.io/en/7.2.2">coverage.py v7.2.2</a>, + created at 2023-03-16 07:52 -0400 </p> <aside class="hidden"> <button type="button" class="button_next_chunk" data-shortcut="j"/> @@ -207,8 +207,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80_test_whiteutils_py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io/en/7.2.1">coverage.py v7.2.1</a>, - created at 2023-02-26 08:15 -0500 + <a class="nav" href="https://coverage.readthedocs.io/en/7.2.2">coverage.py v7.2.2</a>, + created at 2023-03-16 07:52 -0400 </p> </div> </footer> diff --git a/doc/sample_html/d_7b071bdc2a35fa80_test_whiteutils_py.html b/doc/sample_html/d_7b071bdc2a35fa80_test_whiteutils_py.html index 2ca3aac04..0d3fd4f63 100644 --- a/doc/sample_html/d_7b071bdc2a35fa80_test_whiteutils_py.html +++ b/doc/sample_html/d_7b071bdc2a35fa80_test_whiteutils_py.html @@ -66,8 +66,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80_whiteutils_py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io/en/7.2.1">coverage.py v7.2.1</a>, - created at 2023-02-26 08:15 -0500 + <a class="nav" href="https://coverage.readthedocs.io/en/7.2.2">coverage.py v7.2.2</a>, + created at 2023-03-16 07:52 -0400 </p> <aside class="hidden"> <button type="button" class="button_next_chunk" data-shortcut="j"/> @@ -187,8 +187,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80_whiteutils_py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io/en/7.2.1">coverage.py v7.2.1</a>, - created at 2023-02-26 08:15 -0500 + <a class="nav" href="https://coverage.readthedocs.io/en/7.2.2">coverage.py v7.2.2</a>, + created at 2023-03-16 07:52 -0400 </p> </div> </footer> diff --git a/doc/sample_html/d_7b071bdc2a35fa80_whiteutils_py.html b/doc/sample_html/d_7b071bdc2a35fa80_whiteutils_py.html index 35ae58216..4272b315d 100644 --- a/doc/sample_html/d_7b071bdc2a35fa80_whiteutils_py.html +++ b/doc/sample_html/d_7b071bdc2a35fa80_whiteutils_py.html @@ -66,8 +66,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="index.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io/en/7.2.1">coverage.py v7.2.1</a>, - created at 2023-02-26 08:15 -0500 + <a class="nav" href="https://coverage.readthedocs.io/en/7.2.2">coverage.py v7.2.2</a>, + created at 2023-03-16 07:52 -0400 </p> <aside class="hidden"> <button type="button" class="button_next_chunk" data-shortcut="j"/> @@ -157,8 +157,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="index.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io/en/7.2.1">coverage.py v7.2.1</a>, - created at 2023-02-26 08:15 -0500 + <a class="nav" href="https://coverage.readthedocs.io/en/7.2.2">coverage.py v7.2.2</a>, + created at 2023-03-16 07:52 -0400 </p> </div> </footer> diff --git a/doc/sample_html/index.html b/doc/sample_html/index.html index 89b9250c8..c304d54ad 100644 --- a/doc/sample_html/index.html +++ b/doc/sample_html/index.html @@ -46,8 +46,8 @@ <h1>Cog coverage: <input id="filter" type="text" value="" placeholder="filter..." /> </form> <p class="text"> - <a class="nav" href="https://coverage.readthedocs.io/en/7.2.1">coverage.py v7.2.1</a>, - created at 2023-02-26 08:15 -0500 + <a class="nav" href="https://coverage.readthedocs.io/en/7.2.2">coverage.py v7.2.2</a>, + created at 2023-03-16 07:52 -0400 </p> </div> </header> @@ -157,8 +157,8 @@ <h1>Cog coverage: <footer> <div class="content"> <p> - <a class="nav" href="https://coverage.readthedocs.io/en/7.2.1">coverage.py v7.2.1</a>, - created at 2023-02-26 08:15 -0500 + <a class="nav" href="https://coverage.readthedocs.io/en/7.2.2">coverage.py v7.2.2</a>, + created at 2023-03-16 07:52 -0400 </p> </div> <aside class="hidden"> diff --git a/doc/sample_html/status.json b/doc/sample_html/status.json index 511846fec..133a3406c 100644 --- a/doc/sample_html/status.json +++ b/doc/sample_html/status.json @@ -1 +1 @@ -{"format":2,"version":"7.2.1","globals":"06b1ac9f4a6596354db77ceb72079454","files":{"d_7b071bdc2a35fa80___init___py":{"hash":"70ef41e14b11d599cdbcf53f562ebb16","index":{"nums":[2,1,1,0,0,0,0,0],"html_filename":"d_7b071bdc2a35fa80___init___py.html","relative_filename":"cogapp/__init__.py"}},"d_7b071bdc2a35fa80___main___py":{"hash":"6d9d0d551879aa3e73791f40c5739845","index":{"nums":[2,1,3,0,3,0,0,0],"html_filename":"d_7b071bdc2a35fa80___main___py.html","relative_filename":"cogapp/__main__.py"}},"d_7b071bdc2a35fa80_cogapp_py":{"hash":"7428c811d741c23b10655ff6c20fb85f","index":{"nums":[2,1,500,1,224,210,30,138],"html_filename":"d_7b071bdc2a35fa80_cogapp_py.html","relative_filename":"cogapp/cogapp.py"}},"d_7b071bdc2a35fa80_makefiles_py":{"hash":"4b73eaf76fbb53af575b40165e831aac","index":{"nums":[2,1,22,0,18,14,0,14],"html_filename":"d_7b071bdc2a35fa80_makefiles_py.html","relative_filename":"cogapp/makefiles.py"}},"d_7b071bdc2a35fa80_test_cogapp_py":{"hash":"34099de695d2cac204436597408d33d2","index":{"nums":[2,1,845,2,591,24,1,21],"html_filename":"d_7b071bdc2a35fa80_test_cogapp_py.html","relative_filename":"cogapp/test_cogapp.py"}},"d_7b071bdc2a35fa80_test_makefiles_py":{"hash":"63fd1bdc011935abfd11301da94b383e","index":{"nums":[2,1,70,0,53,6,0,6],"html_filename":"d_7b071bdc2a35fa80_test_makefiles_py.html","relative_filename":"cogapp/test_makefiles.py"}},"d_7b071bdc2a35fa80_test_whiteutils_py":{"hash":"ec69457cbd6dfbc85eefabdfc0931c99","index":{"nums":[2,1,68,0,50,0,0,0],"html_filename":"d_7b071bdc2a35fa80_test_whiteutils_py.html","relative_filename":"cogapp/test_whiteutils.py"}},"d_7b071bdc2a35fa80_whiteutils_py":{"hash":"6dbf59193ab1bdcba86b017c86bb4724","index":{"nums":[2,1,43,0,5,34,4,4],"html_filename":"d_7b071bdc2a35fa80_whiteutils_py.html","relative_filename":"cogapp/whiteutils.py"}}}} \ No newline at end of file +{"format":2,"version":"7.2.2","globals":"06b1ac9f4a6596354db77ceb72079454","files":{"d_7b071bdc2a35fa80___init___py":{"hash":"70ef41e14b11d599cdbcf53f562ebb16","index":{"nums":[2,1,1,0,0,0,0,0],"html_filename":"d_7b071bdc2a35fa80___init___py.html","relative_filename":"cogapp/__init__.py"}},"d_7b071bdc2a35fa80___main___py":{"hash":"6d9d0d551879aa3e73791f40c5739845","index":{"nums":[2,1,3,0,3,0,0,0],"html_filename":"d_7b071bdc2a35fa80___main___py.html","relative_filename":"cogapp/__main__.py"}},"d_7b071bdc2a35fa80_cogapp_py":{"hash":"7428c811d741c23b10655ff6c20fb85f","index":{"nums":[2,1,500,1,224,210,30,138],"html_filename":"d_7b071bdc2a35fa80_cogapp_py.html","relative_filename":"cogapp/cogapp.py"}},"d_7b071bdc2a35fa80_makefiles_py":{"hash":"4b73eaf76fbb53af575b40165e831aac","index":{"nums":[2,1,22,0,18,14,0,14],"html_filename":"d_7b071bdc2a35fa80_makefiles_py.html","relative_filename":"cogapp/makefiles.py"}},"d_7b071bdc2a35fa80_test_cogapp_py":{"hash":"34099de695d2cac204436597408d33d2","index":{"nums":[2,1,845,2,591,24,1,21],"html_filename":"d_7b071bdc2a35fa80_test_cogapp_py.html","relative_filename":"cogapp/test_cogapp.py"}},"d_7b071bdc2a35fa80_test_makefiles_py":{"hash":"63fd1bdc011935abfd11301da94b383e","index":{"nums":[2,1,70,0,53,6,0,6],"html_filename":"d_7b071bdc2a35fa80_test_makefiles_py.html","relative_filename":"cogapp/test_makefiles.py"}},"d_7b071bdc2a35fa80_test_whiteutils_py":{"hash":"ec69457cbd6dfbc85eefabdfc0931c99","index":{"nums":[2,1,68,0,50,0,0,0],"html_filename":"d_7b071bdc2a35fa80_test_whiteutils_py.html","relative_filename":"cogapp/test_whiteutils.py"}},"d_7b071bdc2a35fa80_whiteutils_py":{"hash":"6dbf59193ab1bdcba86b017c86bb4724","index":{"nums":[2,1,43,0,5,34,4,4],"html_filename":"d_7b071bdc2a35fa80_whiteutils_py.html","relative_filename":"cogapp/whiteutils.py"}}}} \ No newline at end of file From a56705780ab1f807ccebd416dc06166a89a288a2 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Thu, 16 Mar 2023 10:46:39 -0400 Subject: [PATCH 101/139] build: bump version --- CHANGES.rst | 6 ++++++ coverage/version.py | 4 ++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index 209eb6ad8..c139d6c91 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -17,6 +17,12 @@ development at the same time, such as 4.5.x and 5.0. .. Version 9.8.1 — 2027-07-27 .. -------------------------- +Unreleased +---------- + +Nothing yet. + + .. scriv-start-here .. _changes_7-2-2: diff --git a/coverage/version.py b/coverage/version.py index c9e8d7f7e..ace1d2595 100644 --- a/coverage/version.py +++ b/coverage/version.py @@ -8,8 +8,8 @@ # version_info: same semantics as sys.version_info. # _dev: the .devN suffix if any. -version_info = (7, 2, 2, "final", 0) -_dev = 0 +version_info = (7, 2, 3, "alpha", 0) +_dev = 1 def _make_version( From 98d410af8430d427675742e6ad88ff95aa029407 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Thu, 16 Mar 2023 08:01:49 -0400 Subject: [PATCH 102/139] build: slightly more release automation --- Makefile | 9 +++++++++ howto.txt | 5 ++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 7f6959208..ce3772c82 100644 --- a/Makefile +++ b/Makefile @@ -158,6 +158,15 @@ REPO_OWNER = nedbat/coveragepy edit_for_release: ## Edit sources to insert release facts. python igor.py edit_for_release +relbranch: ## Create the branch for releasing. + echo git switch -c nedbat/release-$$(date +%Y%m%d) + +relcommit1: ## Commit the first release changes. + git commit -am "docs: prep for $$(python setup.py --version)" + +relcommit2: ## Commit the latest sample HTML report. + git commit -am "docs: sample HTML for $$(python setup.py --version)" + kit: ## Make the source distribution. python -m build diff --git a/howto.txt b/howto.txt index b0d58c625..4125ec77e 100644 --- a/howto.txt +++ b/howto.txt @@ -2,6 +2,7 @@ - Check that the current virtualenv matches the current coverage branch. - start branch for release work + $ make relbranch - Version number in coverage/version.py version_info = (4, 0, 2, "alpha", 1) version_info = (4, 0, 2, "beta", 1) @@ -26,12 +27,14 @@ - Check that the docs build correctly: $ tox -e doc - commit the release-prep changes + $ make relcommit1 - Generate new sample_html to get the latest, incl footer version number: - IF PRE-RELEASE: $ make sample_html_beta - IF NOT PRE-RELEASE: $ make sample_html - check in the new sample html + - check in the new sample html + $ make relcommit2 - Done with changes to source files - check them in on the release prep branch - wait for ci to finish From 83857010d479c209385baea72dcebc76f0ca668a Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Thu, 16 Mar 2023 11:44:17 -0400 Subject: [PATCH 103/139] chore: make upgrade --- doc/requirements.pip | 15 ++++----------- requirements/dev.pip | 12 ++++++------ requirements/kit.pip | 12 ++++++------ requirements/lint.pip | 20 ++++++++++---------- requirements/mypy.pip | 6 +++--- requirements/pip-tools.pip | 6 +++--- requirements/pip.pip | 6 +++--- requirements/pytest.pip | 6 +++--- requirements/tox.pip | 6 +++--- 9 files changed, 41 insertions(+), 48 deletions(-) diff --git a/doc/requirements.pip b/doc/requirements.pip index 5ef2a81b2..a3d5bb388 100644 --- a/doc/requirements.pip +++ b/doc/requirements.pip @@ -243,6 +243,7 @@ sphinx==5.3.0 \ # -r doc/requirements.in # sphinx-autobuild # sphinx-rtd-theme + # sphinxcontrib-jquery # sphinxcontrib-restbuilder # sphinxcontrib-spelling sphinx-autobuild==2021.3.14 \ @@ -265,9 +266,9 @@ sphinxcontrib-htmlhelp==2.0.0 \ --hash=sha256:d412243dfb797ae3ec2b59eca0e52dac12e75a241bf0e4eb861e450d06c6ed07 \ --hash=sha256:f5f8bb2d0d629f398bf47d0d69c07bc13b65f75a81ad9e2f71a63d4b7a2f6db2 # via sphinx -sphinxcontrib-jquery==2.0.0 \ - --hash=sha256:8fb65f6dba84bf7bcd1aea1f02ab3955ac34611d838bcc95d4983b805b234daa \ - --hash=sha256:ed47fa425c338ffebe3c37e1cdb56e30eb806116b85f01055b158c7057fdb995 +sphinxcontrib-jquery==4.1 \ + --hash=sha256:1620739f04e36a2c779f1a131a2dfd49b2fd07351bf1968ced074365933abc7a \ + --hash=sha256:f936030d7d0147dd026a4f2b5a57343d233f1fc7b363f68b3d4f1cb0993878ae # via sphinx-rtd-theme sphinxcontrib-jsmath==1.0.1 \ --hash=sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178 \ @@ -314,11 +315,3 @@ zipp==3.15.0 \ --hash=sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b \ --hash=sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556 # via importlib-metadata - -# The following packages are considered to be unsafe in a requirements file: -setuptools==65.7.0 \ - --hash=sha256:4d3c92fac8f1118bb77a22181355e29c239cabfe2b9effdaa665c66b711136d7 \ - --hash=sha256:8ab4f1dbf2b4a65f7eec5ad0c620e84c34111a68d3349833494b9088212214dd - # via - # -c doc/../requirements/pins.pip - # sphinxcontrib-jquery diff --git a/requirements/dev.pip b/requirements/dev.pip index 03540351d..fb94546ac 100644 --- a/requirements/dev.pip +++ b/requirements/dev.pip @@ -148,9 +148,9 @@ execnet==1.9.0 \ --hash=sha256:8f694f3ba9cc92cab508b152dcfe322153975c29bda272e2fd7f3f00f36e47c5 \ --hash=sha256:a295f7cc774947aac58dde7fdc85f4aa00c42adf5d8f5468fc630c1acf30a142 # via pytest-xdist -filelock==3.9.0 \ - --hash=sha256:7b319f24340b51f55a2bf7a12ac0755a9b03e718311dac567a0f4f7fabd2f5de \ - --hash=sha256:f58d535af89bb9ad5cd4df046f741f8553a418c01a7856bf0d173bbc9f6bd16d +filelock==3.10.0 \ + --hash=sha256:3199fd0d3faea8b911be52b663dfccceb84c95949dd13179aa21436d1a79c4ce \ + --hash=sha256:e90b34656470756edf8b19656785c5fea73afa1953f3e1b0d645cef11cab3182 # via # tox # virtualenv @@ -220,9 +220,9 @@ greenlet==2.0.2 \ --hash=sha256:f82d4d717d8ef19188687aa32b8363e96062911e63ba22a0cff7802a8e58e5f1 \ --hash=sha256:fc3a569657468b6f3fb60587e48356fe512c1754ca05a564f11366ac9e306526 # via -r requirements/dev.in -hypothesis==6.68.2 \ - --hash=sha256:2a41cc766cde52705895e54547374af89c617e8ec7bc4186cb7f03884a667d4e \ - --hash=sha256:a7eb2b0c9a18560d8197fe35047ceb58e7e8ab7623a3e5a82613f6a2cd71cffa +hypothesis==6.70.0 \ + --hash=sha256:be395f71d6337a5e8ed2f695c568360a686056c3b00c98bd818874c674b24586 \ + --hash=sha256:f5cae09417d0ffc7711f602cdcfa3b7baf344597a672a84658186605b04f4a4f # via -r requirements/pytest.in idna==3.4 \ --hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 \ diff --git a/requirements/kit.pip b/requirements/kit.pip index 6a03f7a1e..b8e402844 100644 --- a/requirements/kit.pip +++ b/requirements/kit.pip @@ -32,9 +32,9 @@ colorama==0.4.6 \ --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \ --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 # via -r requirements/kit.in -filelock==3.9.0 \ - --hash=sha256:7b319f24340b51f55a2bf7a12ac0755a9b03e718311dac567a0f4f7fabd2f5de \ - --hash=sha256:f58d535af89bb9ad5cd4df046f741f8553a418c01a7856bf0d173bbc9f6bd16d +filelock==3.10.0 \ + --hash=sha256:3199fd0d3faea8b911be52b663dfccceb84c95949dd13179aa21436d1a79c4ce \ + --hash=sha256:e90b34656470756edf8b19656785c5fea73afa1953f3e1b0d645cef11cab3182 # via cibuildwheel importlib-metadata==6.0.0 \ --hash=sha256:7efb448ec9a5e313a57655d35aa54cd3e01b7e1fbcf72dce1bf06119420f5bad \ @@ -74,9 +74,9 @@ typing-extensions==4.5.0 \ # cibuildwheel # importlib-metadata # platformdirs -wheel==0.38.4 \ - --hash=sha256:965f5259b566725405b05e7cf774052044b1ed30119b5d586b2703aafe8719ac \ - --hash=sha256:b60533f3f5d530e971d6737ca6d58681ee434818fab630c83a734bb10c083ce8 +wheel==0.40.0 \ + --hash=sha256:cd1196f3faee2b31968d626e1731c94f99cbdb67cf5a46e4f5656cbee7738873 \ + --hash=sha256:d236b20e7cb522daf2390fa84c55eea81c5c30190f90f29ae2ca1ad8355bf247 # via -r requirements/kit.in zipp==3.15.0 \ --hash=sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b \ diff --git a/requirements/lint.pip b/requirements/lint.pip index 6e04da410..1a19210d3 100644 --- a/requirements/lint.pip +++ b/requirements/lint.pip @@ -173,9 +173,9 @@ execnet==1.9.0 \ --hash=sha256:8f694f3ba9cc92cab508b152dcfe322153975c29bda272e2fd7f3f00f36e47c5 \ --hash=sha256:a295f7cc774947aac58dde7fdc85f4aa00c42adf5d8f5468fc630c1acf30a142 # via pytest-xdist -filelock==3.9.0 \ - --hash=sha256:7b319f24340b51f55a2bf7a12ac0755a9b03e718311dac567a0f4f7fabd2f5de \ - --hash=sha256:f58d535af89bb9ad5cd4df046f741f8553a418c01a7856bf0d173bbc9f6bd16d +filelock==3.10.0 \ + --hash=sha256:3199fd0d3faea8b911be52b663dfccceb84c95949dd13179aa21436d1a79c4ce \ + --hash=sha256:e90b34656470756edf8b19656785c5fea73afa1953f3e1b0d645cef11cab3182 # via # tox # virtualenv @@ -245,9 +245,9 @@ greenlet==2.0.2 \ --hash=sha256:f82d4d717d8ef19188687aa32b8363e96062911e63ba22a0cff7802a8e58e5f1 \ --hash=sha256:fc3a569657468b6f3fb60587e48356fe512c1754ca05a564f11366ac9e306526 # via -r requirements/dev.in -hypothesis==6.68.2 \ - --hash=sha256:2a41cc766cde52705895e54547374af89c617e8ec7bc4186cb7f03884a667d4e \ - --hash=sha256:a7eb2b0c9a18560d8197fe35047ceb58e7e8ab7623a3e5a82613f6a2cd71cffa +hypothesis==6.70.0 \ + --hash=sha256:be395f71d6337a5e8ed2f695c568360a686056c3b00c98bd818874c674b24586 \ + --hash=sha256:f5cae09417d0ffc7711f602cdcfa3b7baf344597a672a84658186605b04f4a4f # via -r requirements/pytest.in idna==3.4 \ --hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 \ @@ -546,6 +546,7 @@ sphinx==5.3.0 \ # -r doc/requirements.in # sphinx-autobuild # sphinx-rtd-theme + # sphinxcontrib-jquery # sphinxcontrib-restbuilder # sphinxcontrib-spelling sphinx-autobuild==2021.3.14 \ @@ -568,9 +569,9 @@ sphinxcontrib-htmlhelp==2.0.0 \ --hash=sha256:d412243dfb797ae3ec2b59eca0e52dac12e75a241bf0e4eb861e450d06c6ed07 \ --hash=sha256:f5f8bb2d0d629f398bf47d0d69c07bc13b65f75a81ad9e2f71a63d4b7a2f6db2 # via sphinx -sphinxcontrib-jquery==2.0.0 \ - --hash=sha256:8fb65f6dba84bf7bcd1aea1f02ab3955ac34611d838bcc95d4983b805b234daa \ - --hash=sha256:ed47fa425c338ffebe3c37e1cdb56e30eb806116b85f01055b158c7057fdb995 +sphinxcontrib-jquery==4.1 \ + --hash=sha256:1620739f04e36a2c779f1a131a2dfd49b2fd07351bf1968ced074365933abc7a \ + --hash=sha256:f936030d7d0147dd026a4f2b5a57343d233f1fc7b363f68b3d4f1cb0993878ae # via sphinx-rtd-theme sphinxcontrib-jsmath==1.0.1 \ --hash=sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178 \ @@ -791,4 +792,3 @@ setuptools==65.7.0 \ # -c requirements/pins.pip # -r requirements/pip.in # check-manifest - # sphinxcontrib-jquery diff --git a/requirements/mypy.pip b/requirements/mypy.pip index d34a39024..0f8aa4b27 100644 --- a/requirements/mypy.pip +++ b/requirements/mypy.pip @@ -28,9 +28,9 @@ flaky==3.7.0 \ --hash=sha256:3ad100780721a1911f57a165809b7ea265a7863305acb66708220820caf8aa0d \ --hash=sha256:d6eda73cab5ae7364504b7c44670f70abed9e75f77dd116352f662817592ec9c # via -r requirements/pytest.in -hypothesis==6.68.2 \ - --hash=sha256:2a41cc766cde52705895e54547374af89c617e8ec7bc4186cb7f03884a667d4e \ - --hash=sha256:a7eb2b0c9a18560d8197fe35047ceb58e7e8ab7623a3e5a82613f6a2cd71cffa +hypothesis==6.70.0 \ + --hash=sha256:be395f71d6337a5e8ed2f695c568360a686056c3b00c98bd818874c674b24586 \ + --hash=sha256:f5cae09417d0ffc7711f602cdcfa3b7baf344597a672a84658186605b04f4a4f # via -r requirements/pytest.in importlib-metadata==6.0.0 \ --hash=sha256:7efb448ec9a5e313a57655d35aa54cd3e01b7e1fbcf72dce1bf06119420f5bad \ diff --git a/requirements/pip-tools.pip b/requirements/pip-tools.pip index c68214c3e..aed2efc7b 100644 --- a/requirements/pip-tools.pip +++ b/requirements/pip-tools.pip @@ -40,9 +40,9 @@ typing-extensions==4.5.0 \ --hash=sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb \ --hash=sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4 # via importlib-metadata -wheel==0.38.4 \ - --hash=sha256:965f5259b566725405b05e7cf774052044b1ed30119b5d586b2703aafe8719ac \ - --hash=sha256:b60533f3f5d530e971d6737ca6d58681ee434818fab630c83a734bb10c083ce8 +wheel==0.40.0 \ + --hash=sha256:cd1196f3faee2b31968d626e1731c94f99cbdb67cf5a46e4f5656cbee7738873 \ + --hash=sha256:d236b20e7cb522daf2390fa84c55eea81c5c30190f90f29ae2ca1ad8355bf247 # via pip-tools zipp==3.15.0 \ --hash=sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b \ diff --git a/requirements/pip.pip b/requirements/pip.pip index 133754b77..7427f804f 100644 --- a/requirements/pip.pip +++ b/requirements/pip.pip @@ -8,9 +8,9 @@ distlib==0.3.6 \ --hash=sha256:14bad2d9b04d3a36127ac97f30b12a19268f211063d8f8ee4f47108896e11b46 \ --hash=sha256:f35c4b692542ca110de7ef0bea44d73981caeb34ca0b9b6b2e6d7790dda8f80e # via virtualenv -filelock==3.9.0 \ - --hash=sha256:7b319f24340b51f55a2bf7a12ac0755a9b03e718311dac567a0f4f7fabd2f5de \ - --hash=sha256:f58d535af89bb9ad5cd4df046f741f8553a418c01a7856bf0d173bbc9f6bd16d +filelock==3.10.0 \ + --hash=sha256:3199fd0d3faea8b911be52b663dfccceb84c95949dd13179aa21436d1a79c4ce \ + --hash=sha256:e90b34656470756edf8b19656785c5fea73afa1953f3e1b0d645cef11cab3182 # via virtualenv importlib-metadata==6.0.0 \ --hash=sha256:7efb448ec9a5e313a57655d35aa54cd3e01b7e1fbcf72dce1bf06119420f5bad \ diff --git a/requirements/pytest.pip b/requirements/pytest.pip index 23abfc236..3171df182 100644 --- a/requirements/pytest.pip +++ b/requirements/pytest.pip @@ -28,9 +28,9 @@ flaky==3.7.0 \ --hash=sha256:3ad100780721a1911f57a165809b7ea265a7863305acb66708220820caf8aa0d \ --hash=sha256:d6eda73cab5ae7364504b7c44670f70abed9e75f77dd116352f662817592ec9c # via -r requirements/pytest.in -hypothesis==6.68.2 \ - --hash=sha256:2a41cc766cde52705895e54547374af89c617e8ec7bc4186cb7f03884a667d4e \ - --hash=sha256:a7eb2b0c9a18560d8197fe35047ceb58e7e8ab7623a3e5a82613f6a2cd71cffa +hypothesis==6.70.0 \ + --hash=sha256:be395f71d6337a5e8ed2f695c568360a686056c3b00c98bd818874c674b24586 \ + --hash=sha256:f5cae09417d0ffc7711f602cdcfa3b7baf344597a672a84658186605b04f4a4f # via -r requirements/pytest.in importlib-metadata==6.0.0 \ --hash=sha256:7efb448ec9a5e313a57655d35aa54cd3e01b7e1fbcf72dce1bf06119420f5bad \ diff --git a/requirements/tox.pip b/requirements/tox.pip index e1cd1e1ca..73831b7a4 100644 --- a/requirements/tox.pip +++ b/requirements/tox.pip @@ -22,9 +22,9 @@ distlib==0.3.6 \ --hash=sha256:14bad2d9b04d3a36127ac97f30b12a19268f211063d8f8ee4f47108896e11b46 \ --hash=sha256:f35c4b692542ca110de7ef0bea44d73981caeb34ca0b9b6b2e6d7790dda8f80e # via virtualenv -filelock==3.9.0 \ - --hash=sha256:7b319f24340b51f55a2bf7a12ac0755a9b03e718311dac567a0f4f7fabd2f5de \ - --hash=sha256:f58d535af89bb9ad5cd4df046f741f8553a418c01a7856bf0d173bbc9f6bd16d +filelock==3.10.0 \ + --hash=sha256:3199fd0d3faea8b911be52b663dfccceb84c95949dd13179aa21436d1a79c4ce \ + --hash=sha256:e90b34656470756edf8b19656785c5fea73afa1953f3e1b0d645cef11cab3182 # via # tox # virtualenv From 02b759919323a5e6c664a9a3ef3468234997f5a9 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Thu, 16 Mar 2023 11:55:42 -0400 Subject: [PATCH 104/139] build: more conventional job names for kit.yml --- .github/workflows/kit.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/kit.yml b/.github/workflows/kit.yml index fd1b3a307..ec3750e68 100644 --- a/.github/workflows/kit.yml +++ b/.github/workflows/kit.yml @@ -47,7 +47,7 @@ concurrency: jobs: wheels: - name: "Build ${{ matrix.os }} ${{ matrix.py }} ${{ matrix.arch }} wheels" + name: "${{ matrix.py }} ${{ matrix.os }} ${{ matrix.arch }} wheels" runs-on: ${{ matrix.os }}-latest strategy: matrix: @@ -177,7 +177,7 @@ jobs: path: wheelhouse/*.whl sdist: - name: "Build source distribution" + name: "Source distribution" runs-on: ubuntu-latest steps: - name: "Check out the repo" @@ -209,7 +209,7 @@ jobs: path: dist/*.tar.gz pypy: - name: "Build PyPy wheel" + name: "PyPy wheel" runs-on: ubuntu-latest steps: - name: "Check out the repo" From 402858f0e57a095e890ea34a0170caff321d4a04 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Thu, 16 Mar 2023 17:42:06 -0400 Subject: [PATCH 105/139] build: more convenient cheats --- .gitignore | 1 + Makefile | 4 ++++ howto.txt | 7 ++++--- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 2373d5dc7..a49767e77 100644 --- a/.gitignore +++ b/.gitignore @@ -21,6 +21,7 @@ coverage.json # Stuff in the root. build *.egg-info +cheats.txt dist htmlcov MANIFEST diff --git a/Makefile b/Makefile index ce3772c82..bcca29ea7 100644 --- a/Makefile +++ b/Makefile @@ -36,6 +36,7 @@ clean: clean_platform ## Remove artifacts of test execution, installation, etc sterile: clean ## Remove all non-controlled content, even if expensive. rm -rf .tox + rm -f cheats.txt help: ## Show this help. @# Adapted from https://www.thapaliya.com/en/writings/well-documented-makefiles/ @@ -158,6 +159,9 @@ REPO_OWNER = nedbat/coveragepy edit_for_release: ## Edit sources to insert release facts. python igor.py edit_for_release +cheats: ## Create some useful snippets for releasing. + python igor.py cheats | tee cheats.txt + relbranch: ## Create the branch for releasing. echo git switch -c nedbat/release-$$(date +%Y%m%d) diff --git a/howto.txt b/howto.txt index 4125ec77e..24f01ecb6 100644 --- a/howto.txt +++ b/howto.txt @@ -3,16 +3,17 @@ - Check that the current virtualenv matches the current coverage branch. - start branch for release work $ make relbranch -- Version number in coverage/version.py +- Edit version number in coverage/version.py version_info = (4, 0, 2, "alpha", 1) version_info = (4, 0, 2, "beta", 1) version_info = (4, 0, 2, "candidate", 1) version_info = (4, 0, 2, "final", 0) - make sure: _dev = 0 -- Supported Python version numbers. Search for "PYVERSIONS". +- Edit supported Python version numbers. Search for "PYVERSIONS". - Update source files with release facts: $ make edit_for_release -- run `python igor.py cheats` to get useful snippets for next steps. +- Get useful snippets for next steps, and beyond, in cheats.txt + $ make cheats - Look over CHANGES.rst - Update README.rst - "New in x.y:" From 4024ef48612f3c2d20f320ee19b8724d19704bc0 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Mon, 20 Mar 2023 07:00:18 -0400 Subject: [PATCH 106/139] docs: more details, and current output, in contributing.rst --- doc/contributing.rst | 121 ++++++++++++++++++++++++++++--------------- 1 file changed, 78 insertions(+), 43 deletions(-) diff --git a/doc/contributing.rst b/doc/contributing.rst index e9d2c3a40..410d0d4cc 100644 --- a/doc/contributing.rst +++ b/doc/contributing.rst @@ -67,57 +67,91 @@ Running the tests The tests are written mostly as standard unittest-style tests, and are run with pytest running under `tox`_:: - $ tox - py37 create: /Users/nedbat/coverage/trunk/.tox/py37 - py37 installdeps: -rrequirements/pip.pip, -rrequirements/pytest.pip, eventlet==0.25.1, greenlet==0.4.15 - py37 develop-inst: /Users/nedbat/coverage/trunk - py37 installed: apipkg==1.5,appdirs==1.4.4,attrs==20.3.0,backports.functools-lru-cache==1.6.4,-e git+git@github.com:nedbat/coveragepy.git@36ef0e03c0439159c2245d38de70734fa08cddb4#egg=coverage,decorator==5.0.7,distlib==0.3.1,dnspython==2.1.0,eventlet==0.25.1,execnet==1.8.0,filelock==3.0.12,flaky==3.7.0,future==0.18.2,greenlet==0.4.15,hypothesis==6.10.1,importlib-metadata==4.0.1,iniconfig==1.1.1,monotonic==1.6,packaging==20.9,pluggy==0.13.1,py==1.10.0,PyContracts @ git+https://github.com/slorg1/contracts@c5a6da27d4dc9985f68e574d20d86000880919c3,pyparsing==2.4.7,pytest==6.2.3,pytest-forked==1.3.0,pytest-xdist==2.2.1,qualname==0.1.0,six==1.15.0,sortedcontainers==2.3.0,toml==0.10.2,typing-extensions==3.10.0.0,virtualenv==20.4.4,zipp==3.4.1 - py37 run-test-pre: PYTHONHASHSEED='376882681' - py37 run-test: commands[0] | python setup.py --quiet clean develop - py37 run-test: commands[1] | python igor.py zip_mods remove_extension - py37 run-test: commands[2] | python igor.py test_with_tracer py - === CPython 3.7.10 with Python tracer (.tox/py37/bin/python) === + % tox + ROOT: tox-gh won't override envlist because tox is not running in GitHub Actions + .pkg: _optional_hooks> python /usr/local/virtualenvs/coverage/lib/python3.7/site-packages/pyproject_api/_backend.py True setuptools.build_meta + .pkg: get_requires_for_build_editable> python /usr/local/virtualenvs/coverage/lib/python3.7/site-packages/pyproject_api/_backend.py True setuptools.build_meta + .pkg: build_editable> python /usr/local/virtualenvs/coverage/lib/python3.7/site-packages/pyproject_api/_backend.py True setuptools.build_meta + py37: install_package> python -m pip install -U --force-reinstall --no-deps .tox/.tmp/package/87/coverage-7.2.3a0.dev1-0.editable-cp37-cp37m-macosx_10_15_x86_64.whl + py37: commands[0]> python igor.py zip_mods + py37: commands[1]> python setup.py --quiet build_ext --inplace + py37: commands[2]> python -m pip install -q -e . + py37: commands[3]> python igor.py test_with_tracer c + === CPython 3.7.15 with C tracer (.tox/py37/bin/python) === bringing up nodes... - ........................................................................................................................................................... [ 15%] - ........................................................................................................................................................... [ 31%] - ...........................................................................................................................................s............... [ 47%] - ...........................................s...................................................................................sss.sssssssssssssssssss..... [ 63%] - ........................................................................................................................................................s.. [ 79%] - ......................................s..................................s................................................................................. [ 95%] - ........................................ss...... [100%] - 949 passed, 29 skipped in 40.56s - py37 run-test: commands[3] | python setup.py --quiet build_ext --inplace - py37 run-test: commands[4] | python igor.py test_with_tracer c - === CPython 3.7.10 with C tracer (.tox/py37/bin/python) === + .........................................................................................................................x.................s....s....... [ 11%] + ..s.....x.............................................s................................................................................................. [ 22%] + ........................................................................................................................................................ [ 34%] + ........................................................................................................................................................ [ 45%] + ........................................................................................................................................................ [ 57%] + .........s....................................................................................................................s......................... [ 68%] + .................................s..............................s...............s..................................s.................................... [ 80%] + ........................................................s............................................................................................... [ 91%] + ......................................s......................................................................... [100%] + 1316 passed, 12 skipped, 2 xfailed in 36.42s + py37: commands[4]> python igor.py remove_extension + py37: commands[5]> python igor.py test_with_tracer py + === CPython 3.7.15 with Python tracer (.tox/py37/bin/python) === bringing up nodes... - ........................................................................................................................................................... [ 15%] - ........................................................................................................................................................... [ 31%] - ......................................................................s.................................................................................... [ 47%] - ........................................................................................................................................................... [ 63%] - ..........................s................................................s............................................................................... [ 79%] - .................................................................................s......................................................................... [ 95%] - ......................................s......... [100%] - 973 passed, 5 skipped in 41.36s - ____________________________________________________________________________ summary _____________________________________________________________________________ - py37: commands succeeded - congratulations :) + ................................................................................................x...........................x.................s......... [ 11%] + .....s.............s.s.....................................................s..............ss............................s.ss....ss.ss................... [ 22%] + ......................................................................................................................................s................. [ 34%] + ..................................................................................................................s..................................... [ 45%] + ...................s.ss.....................................................................................s....................s.ss................... [ 57%] + ..................s.s................................................................................................................................... [ 68%] + ..........................s.........................................ssss...............s.................s...sss..................s...ss...ssss.s....... [ 80%] + .......................................................................................................................................................s [ 91%] + .........................................................................s.................................ss.... [100%] + 1281 passed, 47 skipped, 2 xfailed in 33.86s + .pkg: _exit> python /usr/local/virtualenvs/coverage/lib/python3.7/site-packages/pyproject_api/_backend.py True setuptools.build_meta + py37: OK (82.38=setup[2.80]+cmd[0.20,0.35,7.30,37.20,0.21,34.32] seconds) + congratulations :) (83.61 seconds) Tox runs the complete test suite twice for each version of Python you have -installed. The first run uses the Python implementation of the trace function, -the second uses the C implementation. +installed. The first run uses the C implementation of the trace function, +the second uses the Python implementation. To limit tox to just a few versions of Python, use the ``-e`` switch:: $ tox -e py37,py39 -To run just a few tests, you can use `pytest test selectors`_:: - - $ tox tests/test_misc.py - $ tox tests/test_misc.py::HasherTest - $ tox tests/test_misc.py::HasherTest::test_string_hashing - -These command run the tests in one file, one class, and just one test, -respectively. +On the tox command line, options after ``--`` are passed to pytest. To run +just a few tests, you can use `pytest test selectors`_:: + + $ tox -- tests/test_misc.py + $ tox -- tests/test_misc.py::HasherTest + $ tox -- tests/test_misc.py::HasherTest::test_string_hashing + +These commands run the tests in one file, one class, and just one test, +respectively. The pytest ``-k`` option selects tests based on a word in their +name, which can be very convenient for ad-hoc test selection. Of course you +can combine tox and pytest options:: + + $ tox -q -e py37 -- -n 0 -vv -k hash + === CPython 3.7.15 with C tracer (.tox/py37/bin/python) === + ======================================= test session starts ======================================== + platform darwin -- Python 3.7.15, pytest-7.2.2, pluggy-1.0.0 -- /Users/nedbat/coverage/.tox/py37/bin/python + cachedir: .tox/py37/.pytest_cache + rootdir: /Users/nedbat/coverage, configfile: setup.cfg + plugins: flaky-3.7.0, hypothesis-6.70.0, xdist-3.2.1 + collected 1330 items / 1320 deselected / 10 selected + run-last-failure: no previously failed tests, not deselecting items. + + tests/test_data.py::CoverageDataTest::test_add_to_hash_with_lines PASSED [ 10%] + tests/test_data.py::CoverageDataTest::test_add_to_hash_with_arcs PASSED [ 20%] + tests/test_data.py::CoverageDataTest::test_add_to_lines_hash_with_missing_file PASSED [ 30%] + tests/test_data.py::CoverageDataTest::test_add_to_arcs_hash_with_missing_file PASSED [ 40%] + tests/test_execfile.py::RunPycFileTest::test_running_hashed_pyc PASSED [ 50%] + tests/test_misc.py::HasherTest::test_string_hashing PASSED [ 60%] + tests/test_misc.py::HasherTest::test_bytes_hashing PASSED [ 70%] + tests/test_misc.py::HasherTest::test_unicode_hashing PASSED [ 80%] + tests/test_misc.py::HasherTest::test_dict_hashing PASSED [ 90%] + tests/test_misc.py::HasherTest::test_dict_collision PASSED [100%] + + =============================== 10 passed, 1320 deselected in 1.88s ================================ + Skipping tests with Python tracer: Only one tracer: no Python tracer for CPython + py37: OK (12.22=setup[2.19]+cmd[0.20,0.36,6.57,2.51,0.20,0.19] seconds) + congratulations :) (13.10 seconds) You can also affect the test runs with environment variables. Define any of these as 1 to use them: @@ -156,7 +190,8 @@ some warnings. Please try to keep it that way, but don't let pylint warnings keep you from sending patches. I can clean them up. Lines should be kept to a 100-character maximum length. I recommend an -`editorconfig.org`_ plugin for your editor of choice. +`editorconfig.org`_ plugin for your editor of choice, which will also help with +indentation, line endings and so on. Other style questions are best answered by looking at the existing code. Formatting of docstrings, comments, long lines, and so on, should match the From 67b9e6c9b8422ddb20ebc6c637f058de5519df01 Mon Sep 17 00:00:00 2001 From: "neiljp (Neil Pilgrim)" <github@kepier.clara.net> Date: Mon, 20 Mar 2023 10:08:32 -0700 Subject: [PATCH 107/139] build: Migrate pytest configuration to pyproject.toml. --- pyproject.toml | 26 ++++++++++++++++++++++++++ setup.cfg | 23 ----------------------- 2 files changed, 26 insertions(+), 23 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index e11a5af1d..6b02c6a47 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -28,6 +28,32 @@ exclude = """(?x)( | ^tests/balance_xdist_plugin\\.py$ # not part of our test suite. )""" +[tool.pytest.ini_options] +addopts = "-q -n auto -p no:legacypath --strict-markers --no-flaky-report -rfEX --failed-first" +python_classes = "*Test" +markers = [ + "expensive: too slow to run during \"make smoke\"", +] + +# How come these warnings are suppressed successfully here, but not in conftest.py?? +filterwarnings = [ + "ignore:the imp module is deprecated in favour of importlib:DeprecationWarning", + "ignore:distutils Version classes are deprecated:DeprecationWarning", + "ignore:The distutils package is deprecated and slated for removal in Python 3.12:DeprecationWarning", +] + +# xfail tests that pass should fail the test suite +xfail_strict = true + +balanced_clumps = [ + # Because of expensive session-scoped fixture: + "VirtualenvTest", + # Because of shared-file manipulations (~/tests/actual/testing): + "CompareTest", + # No idea why this one fails if run on separate workers: + "GetZipBytesTest", +] + [tool.scriv] # Changelog management: https://pypi.org/project/scriv/ format = "rst" diff --git a/setup.cfg b/setup.cfg index adbdfb11a..db3fdce8e 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,28 +1,5 @@ # Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0 # For details: https://github.com/nedbat/coveragepy/blob/master/NOTICE.txt -[tool:pytest] -addopts = -q -n auto -p no:legacypath --strict-markers --no-flaky-report -rfEX --failed-first -python_classes = *Test -markers = - expensive: too slow to run during "make smoke" - -# How come these warnings are suppressed successfully here, but not in conftest.py?? -filterwarnings = - ignore:the imp module is deprecated in favour of importlib:DeprecationWarning - ignore:distutils Version classes are deprecated:DeprecationWarning - ignore:The distutils package is deprecated and slated for removal in Python 3.12:DeprecationWarning - -# xfail tests that pass should fail the test suite -xfail_strict = true - -balanced_clumps = - ; Because of expensive session-scoped fixture: - VirtualenvTest - ; Because of shared-file manipulations (~/tests/actual/testing): - CompareTest - ; No idea why this one fails if run on separate workers: - GetZipBytesTest - [metadata] license_files = LICENSE.txt From ea6db5e1aa9efd31b2569eb2f35597733358a388 Mon Sep 17 00:00:00 2001 From: Kassandra Keeton <ProsperousHeart@users.noreply.github.com> Date: Mon, 20 Mar 2023 17:01:18 -0500 Subject: [PATCH 108/139] docs: additional clarity for getting started + contributing (#1590) * additional clarity for getting started + contributing * Apply suggestions from code review Updating formatting (limitation of 79 characters for linting),. Co-authored-by: Ned Batchelder <ned@nedbatchelder.com> --------- Co-authored-by: Ned Batchelder <ned@nedbatchelder.com> --- README.rst | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.rst b/README.rst index 25239393e..8e3ffd940 100644 --- a/README.rst +++ b/README.rst @@ -70,7 +70,8 @@ For Enterprise Getting Started --------------- -See the `Quick Start section`_ of the docs. +Looking to run ``coverage`` on your test suite? See the `Quick Start section`_ +of the docs. .. _Quick Start section: https://coverage.readthedocs.io/#quick-start @@ -96,7 +97,8 @@ Community Code of Conduct`_. Contributing ------------ -See the `Contributing section`_ of the docs. +Found a bug? Want to help improve the code or documentation? See the +`Contributing section`_ of the docs. .. _Contributing section: https://coverage.readthedocs.io/en/latest/contributing.html From 14beae2e44155b4d833fed3c4e16084924db7fd5 Mon Sep 17 00:00:00 2001 From: polkapolka <7219835+polkapolka@users.noreply.github.com> Date: Mon, 20 Mar 2023 16:09:22 -0700 Subject: [PATCH 109/139] docs: update contribution instructions (#1591) * Updating contribution to include fork instructions * Fixing urls * Fix urls --- doc/contributing.rst | 45 ++++++++++++++++++++++++++++---------------- 1 file changed, 29 insertions(+), 16 deletions(-) diff --git a/doc/contributing.rst b/doc/contributing.rst index 410d0d4cc..c7b755364 100644 --- a/doc/contributing.rst +++ b/doc/contributing.rst @@ -33,17 +33,27 @@ you frustration. Getting the code ---------------- -The coverage.py code is hosted on a GitHub repository at -https://github.com/nedbat/coveragepy. To get a working environment, follow -these steps: +Fork the repo into your own github repository. If you have not forked a +repository before then please follow the `fork instructions`_ provided by +github. + +.. _fork instructions: https://docs.github.com/en/get-started/quickstart/fork-a-repo + +The coverage.py code will then be copied into a GitHub repository at +https://github.com/GITHUB_USER/coveragepy where GITHUB_USER is your github +username. To get a working development environment, follow these steps: .. minimum of PYVERSIONS: -#. Create a Python 3.7 virtualenv to work in, and activate it. +#. Create a virtualenv using one of the common virtualenv formats (conda, +venv, pipenv, etc) and a version of python greater than 3.7 to work in, and +activate it. Please follow your virtualenv format specific creation and +activation instructions. + #. Clone the repository:: - $ git clone https://github.com/nedbat/coveragepy + $ git clone https://github.com/GITHUB_USER/coveragepy $ cd coveragepy #. Install the requirements:: @@ -54,20 +64,23 @@ these steps: ``dev.in`` instead:: $ python3 -m pip install -r requirements/dev.in + + Note: You may need to upgrade pip to install the requirements. -#. Install a number of versions of Python. Coverage.py supports a range - of Python versions. The more you can test with, the more easily your code - can be used as-is. If you only have one version, that's OK too, but may - mean more work integrating your contribution. +#. (Optional) Install more versions of Python. By default, Coverage.py won't + run the tests on a version of python that isn't installed. Coverage.py + supports a range of Python versions. The more you can test with, the more + easily your code can be used as-is. If you only have one version, that's + OK too, but may mean more work integrating your contribution. Running the tests ----------------- The tests are written mostly as standard unittest-style tests, and are run with -pytest running under `tox`_:: +pytest running under `tox`_ by using the command `python3 -m tox`:: - % tox + % python3 -m tox ROOT: tox-gh won't override envlist because tox is not running in GitHub Actions .pkg: _optional_hooks> python /usr/local/virtualenvs/coverage/lib/python3.7/site-packages/pyproject_api/_backend.py True setuptools.build_meta .pkg: get_requires_for_build_editable> python /usr/local/virtualenvs/coverage/lib/python3.7/site-packages/pyproject_api/_backend.py True setuptools.build_meta @@ -113,21 +126,21 @@ the second uses the Python implementation. To limit tox to just a few versions of Python, use the ``-e`` switch:: - $ tox -e py37,py39 + $ python3 -m tox -e py37,py39 On the tox command line, options after ``--`` are passed to pytest. To run just a few tests, you can use `pytest test selectors`_:: - $ tox -- tests/test_misc.py - $ tox -- tests/test_misc.py::HasherTest - $ tox -- tests/test_misc.py::HasherTest::test_string_hashing + $ python3 -m tox -- tests/test_misc.py + $ python3 -m tox -- tests/test_misc.py::HasherTest + $ python3 -m tox -- tests/test_misc.py::HasherTest::test_string_hashing These commands run the tests in one file, one class, and just one test, respectively. The pytest ``-k`` option selects tests based on a word in their name, which can be very convenient for ad-hoc test selection. Of course you can combine tox and pytest options:: - $ tox -q -e py37 -- -n 0 -vv -k hash + $ python3 -m tox -q -e py37 -- -n 0 -vv -k hash === CPython 3.7.15 with C tracer (.tox/py37/bin/python) === ======================================= test session starts ======================================== platform darwin -- Python 3.7.15, pytest-7.2.2, pluggy-1.0.0 -- /Users/nedbat/coverage/.tox/py37/bin/python From 1469085b50e887f3f0a592bfff55c525321619f9 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Mon, 20 Mar 2023 19:11:58 -0400 Subject: [PATCH 110/139] docs: further slimming down of contribution instructions --- doc/contributing.rst | 39 ++++++++++++--------------------------- 1 file changed, 12 insertions(+), 27 deletions(-) diff --git a/doc/contributing.rst b/doc/contributing.rst index c7b755364..7cba0859e 100644 --- a/doc/contributing.rst +++ b/doc/contributing.rst @@ -33,23 +33,19 @@ you frustration. Getting the code ---------------- -Fork the repo into your own github repository. If you have not forked a -repository before then please follow the `fork instructions`_ provided by -github. +The coverage.py code is hosted on a GitHub repository at +https://github.com/nedbat/coveragepy. To get a working environment, follow +these steps: -.. _fork instructions: https://docs.github.com/en/get-started/quickstart/fork-a-repo +#. `Fork the repo`__ into your own GitHub account. The coverage.py code +will then be copied into a GitHub repository at +https://github.com/GITHUB_USER/coveragepy where GITHUB_USER is your GitHub +username. -The coverage.py code will then be copied into a GitHub repository at -https://github.com/GITHUB_USER/coveragepy where GITHUB_USER is your github -username. To get a working development environment, follow these steps: - -.. minimum of PYVERSIONS: - -#. Create a virtualenv using one of the common virtualenv formats (conda, -venv, pipenv, etc) and a version of python greater than 3.7 to work in, and -activate it. Please follow your virtualenv format specific creation and -activation instructions. +__ https://docs.github.com/en/get-started/quickstart/fork-a-repo +#. (Optional) Create a virtualenv to work in, and activate it. There +are a number of ways to do this. Use the method you are comfortable with. #. Clone the repository:: @@ -58,27 +54,16 @@ activation instructions. #. Install the requirements:: - $ python3 -m pip install -r requirements/dev.pip - - If this fails due to incorrect or missing hashes, use - ``dev.in`` instead:: - $ python3 -m pip install -r requirements/dev.in - - Note: You may need to upgrade pip to install the requirements. -#. (Optional) Install more versions of Python. By default, Coverage.py won't - run the tests on a version of python that isn't installed. Coverage.py - supports a range of Python versions. The more you can test with, the more - easily your code can be used as-is. If you only have one version, that's - OK too, but may mean more work integrating your contribution. + Note: You may need to upgrade pip to install the requirements. Running the tests ----------------- The tests are written mostly as standard unittest-style tests, and are run with -pytest running under `tox`_ by using the command `python3 -m tox`:: +pytest running under `tox`_:: % python3 -m tox ROOT: tox-gh won't override envlist because tox is not running in GitHub Actions From e73c858a603f23da9076a40f89c923ed86af9da2 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Mon, 20 Mar 2023 19:15:17 -0400 Subject: [PATCH 111/139] docs: correct name alphabetization --- CONTRIBUTORS.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CONTRIBUTORS.txt b/CONTRIBUTORS.txt index a50138f85..2c8a92e52 100644 --- a/CONTRIBUTORS.txt +++ b/CONTRIBUTORS.txt @@ -125,15 +125,15 @@ Michał Bultrowicz Michał Górny Mickie Betz Mike Fiedler -Naveen Yadav Nathan Land +Naveen Yadav Nikita Bloshchanevich Nils Kattenbeck Noel O'Boyle Olivier Grisel Ori Avtalion -Pankaj Pandey Pablo Carballo +Pankaj Pandey Patrick Mezard Peter Baughman Peter Ebden @@ -168,8 +168,8 @@ Thijs Triemstra Thomas Grainger Titus Brown Valentin Lab -Vince Salvino Ville Skyttä +Vince Salvino Xie Yanbo Yilei "Dolee" Yang Yury Selivanov From 5b39a88baf651628621510a60a3b8d6e4e183cab Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Mon, 20 Mar 2023 19:17:39 -0400 Subject: [PATCH 112/139] docs: three PRs from the PyCascades sprint --- CONTRIBUTORS.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CONTRIBUTORS.txt b/CONTRIBUTORS.txt index 2c8a92e52..06a0605a5 100644 --- a/CONTRIBUTORS.txt +++ b/CONTRIBUTORS.txt @@ -99,6 +99,7 @@ Judson Neer Julian Berman Julien Voisin Justas Sadzevičius +Kassandra Keeton Kjell Braden Krystian Kichewko Kyle Altendorf @@ -127,6 +128,7 @@ Mickie Betz Mike Fiedler Nathan Land Naveen Yadav +Neil Pilgrim Nikita Bloshchanevich Nils Kattenbeck Noel O'Boyle @@ -138,6 +140,7 @@ Patrick Mezard Peter Baughman Peter Ebden Peter Portante +Phebe Polk Reya B Rodrigue Cloutier Roger Hu From 3ca4a7047a17a651e4eed9ca053735192634ece1 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Tue, 21 Mar 2023 06:51:51 -0400 Subject: [PATCH 113/139] build: make sure build can be deleted If the virtualenv tests fail, they somehow leave behind build directories with 000 permissions. --- Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/Makefile b/Makefile index bcca29ea7..565f0ab66 100644 --- a/Makefile +++ b/Makefile @@ -19,6 +19,7 @@ clean: clean_platform ## Remove artifacts of test execution, installation, etc @echo "Cleaning..." @-pip uninstall -yq coverage @rm -f *.pyd */*.pyd + @chmod -R 777 build @rm -rf build coverage.egg-info dist htmlcov @rm -f *.bak */*.bak */*/*.bak */*/*/*.bak */*/*/*/*.bak */*/*/*/*/*.bak @rm -f *$$py.class */*$$py.class */*/*$$py.class */*/*/*$$py.class */*/*/*/*$$py.class */*/*/*/*/*$$py.class From 220e6a724ed49fde399ab6c9ecbdf72367ba36a8 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Tue, 21 Mar 2023 07:00:47 -0400 Subject: [PATCH 114/139] build: tidy up the clean action clean_platform was added in 7379c811580cd27e8695763ed5eb15746b133275 so we could remove platform-specific pyc files to run Linux tests. Those were removed in 76e80108c11b042e6e929641fe3f38975f5765ba, but it couldn't hurt to keep things organized this way. --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 565f0ab66..1adda37b8 100644 --- a/Makefile +++ b/Makefile @@ -11,18 +11,18 @@ clean_platform: @rm -f *.so */*.so + @rm -f *.pyd */*.pyd @rm -rf __pycache__ */__pycache__ */*/__pycache__ */*/*/__pycache__ */*/*/*/__pycache__ */*/*/*/*/__pycache__ @rm -f *.pyc */*.pyc */*/*.pyc */*/*/*.pyc */*/*/*/*.pyc */*/*/*/*/*.pyc @rm -f *.pyo */*.pyo */*/*.pyo */*/*/*.pyo */*/*/*/*.pyo */*/*/*/*/*.pyo + @rm -f *$$py.class */*$$py.class */*/*$$py.class */*/*/*$$py.class */*/*/*/*$$py.class */*/*/*/*/*$$py.class clean: clean_platform ## Remove artifacts of test execution, installation, etc. @echo "Cleaning..." @-pip uninstall -yq coverage - @rm -f *.pyd */*.pyd @chmod -R 777 build @rm -rf build coverage.egg-info dist htmlcov @rm -f *.bak */*.bak */*/*.bak */*/*/*.bak */*/*/*/*.bak */*/*/*/*/*.bak - @rm -f *$$py.class */*$$py.class */*/*$$py.class */*/*/*$$py.class */*/*/*/*$$py.class */*/*/*/*/*$$py.class @rm -f coverage/*,cover @rm -f MANIFEST @rm -f .coverage .coverage.* coverage.xml coverage.json .metacov* From 019f0996ec3dcfd6c8237b336ac8d81256e58239 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Tue, 21 Mar 2023 08:36:25 -0400 Subject: [PATCH 115/139] test: provide more guidance about working with gold files And make it easier to add new gold tests. --- tests/gold/README.rst | 18 ++++++++++++++---- tests/gold/html/Makefile | 2 +- tests/goldtest.py | 6 +++++- tests/test_goldtest.py | 6 +++++- 4 files changed, 25 insertions(+), 7 deletions(-) diff --git a/tests/gold/README.rst b/tests/gold/README.rst index aec1d6370..ec4081825 100644 --- a/tests/gold/README.rst +++ b/tests/gold/README.rst @@ -9,16 +9,26 @@ these comparisons is in tests/goldtest.py. If gold tests are failing, you may need to update the gold files by copying the current output of the tests into the gold files. When a test fails, the actual -output is in the tests/actual directory. Do not commit those files to git. +output is in the tests/actual directory. Those files are ignored by git. -You can run just the failed tests again with:: +There's a Makefile in the html directory for working with gold files and their +associated support files. If actual outputs have changed so that comparisons +are failing, but the new output is correct, you can use "make update-gold" to +copy the actual output as the new gold files. + +If you have added a gold test, you'll need to manually copy the tests/actual +files to tests/gold. + +Once you've copied the actual results to the gold files, or to check your work +again, you can run just the failed tests again with:: tox -e py39 -- -n 0 --lf The saved HTML files in the html directories can't be viewed properly without the supporting CSS and Javascript files. But we don't want to save copies of -those files in every subdirectory. There's a Makefile in the html directory -for working with the saved copies of the support files. +those files in every subdirectory. The make target "make complete" in +tests/gold/html will copy the support file so you can open the HTML files to +see how they look. If the output files are correct, you can update the gold files with "make update-gold". If there are version-specific gold files (for example, diff --git a/tests/gold/html/Makefile b/tests/gold/html/Makefile index 7be71f841..1b75f73d5 100644 --- a/tests/gold/html/Makefile +++ b/tests/gold/html/Makefile @@ -17,7 +17,7 @@ complete: ## Copy support files into directories so the HTML can be viewed prop clean: ## Remove the effects of this Makefile. @git clean -fq . -update-gold: ## Copy output files from latest tests to gold files. +update-gold: ## Copy actual output files from latest tests to gold files. @for sub in ../../actual/html/*; do \ rsync --verbose --existing --recursive $$sub/ $$(basename $$sub) ; \ done ; \ diff --git a/tests/goldtest.py b/tests/goldtest.py index 12a04af66..f7bd2e9b6 100644 --- a/tests/goldtest.py +++ b/tests/goldtest.py @@ -46,6 +46,8 @@ def compare( """ __tracebackhide__ = True # pytest, please don't show me this function. assert os_sep("/gold/") in expected_dir + assert os.path.exists(actual_dir) + os.makedirs(expected_dir, exist_ok=True) dc = filecmp.dircmp(expected_dir, actual_dir) diff_files = _fnmatch_list(dc.diff_files, file_pattern) @@ -56,9 +58,11 @@ def save_mismatch(f: str) -> None: """Save a mismatched result to tests/actual.""" save_path = expected_dir.replace(os_sep("/gold/"), os_sep("/actual/")) os.makedirs(save_path, exist_ok=True) - with open(os.path.join(save_path, f), "w") as savef: + save_file = os.path.join(save_path, f) + with open(save_file, "w") as savef: with open(os.path.join(actual_dir, f)) as readf: savef.write(readf.read()) + print(os_sep(f"Saved actual output to '{save_file}': see tests/gold/README.rst")) # filecmp only compares in binary mode, but we want text mode. So # look through the list of different files, and compare them diff --git a/tests/test_goldtest.py b/tests/test_goldtest.py index def5ee90e..297f21b0e 100644 --- a/tests/test_goldtest.py +++ b/tests/test_goldtest.py @@ -13,7 +13,7 @@ from tests.coveragetest import CoverageTest, TESTS_DIR from tests.goldtest import compare, gold_path from tests.goldtest import contains, contains_any, contains_rx, doesnt_contain -from tests.helpers import re_line, remove_tree +from tests.helpers import os_sep, re_line, remove_tree GOOD_GETTY = """\ Four score and seven years ago our fathers brought forth upon this continent, a @@ -73,6 +73,10 @@ def test_bad(self) -> None: assert "+ Five score" in stdout assert re_line(rf"^:::: diff '.*{GOLD_PATH_RX}' and '{OUT_PATH_RX}'", stdout) assert re_line(rf"^:::: end diff '.*{GOLD_PATH_RX}' and '{OUT_PATH_RX}'", stdout) + assert ( + os_sep(f"Saved actual output to '{ACTUAL_GETTY_FILE}': see tests/gold/README.rst") + in os_sep(stdout) + ) assert " D/D/D, Gxxx, Pennsylvania" in stdout # The actual file was saved. From eaa3c8adf13d3cfa0e83a6230b445a6ac54109de Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Tue, 21 Mar 2023 08:51:02 -0400 Subject: [PATCH 116/139] test: check the HTML for context output --- tests/gold/html/contexts/index.html | 102 ++++++++++++++++++ tests/gold/html/contexts/two_tests_py.html | 119 +++++++++++++++++++++ tests/test_html.py | 3 + 3 files changed, 224 insertions(+) create mode 100644 tests/gold/html/contexts/index.html create mode 100644 tests/gold/html/contexts/two_tests_py.html diff --git a/tests/gold/html/contexts/index.html b/tests/gold/html/contexts/index.html new file mode 100644 index 000000000..05d6a457f --- /dev/null +++ b/tests/gold/html/contexts/index.html @@ -0,0 +1,102 @@ +<!DOCTYPE html> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <title>Coverage report</title> + <link rel="icon" sizes="32x32" href="favicon_32.png"> + <link rel="stylesheet" href="style.css" type="text/css"> + <script type="text/javascript" src="coverage_html.js" defer></script> +</head> +<body class="indexfile"> +<header> + <div class="content"> + <h1>Coverage report: + <span class="pc_cov">94%</span> + </h1> + <aside id="help_panel_wrapper"> + <input id="help_panel_state" type="checkbox"> + <label for="help_panel_state"> + <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" /> + </label> + <div id="help_panel"> + <p class="legend">Shortcuts on this page</p> + <div class="keyhelp"> + <p> + <kbd>n</kbd> + <kbd>s</kbd> + <kbd>m</kbd> + <kbd>x</kbd> + <kbd>c</kbd> + change column sorting + </p> + <p> + <kbd>[</kbd> + <kbd>]</kbd> + prev/next file + </p> + <p> + <kbd>?</kbd> show/hide this help + </p> + </div> + </div> + </aside> + <form id="filter_container"> + <input id="filter" type="text" value="" placeholder="filter..." /> + </form> + <p class="text"> + <a class="nav" href="https://coverage.readthedocs.io/en/7.2.3a0.dev1">coverage.py v7.2.3a0.dev1</a>, + created at 2023-03-21 08:44 -0400 + </p> + </div> +</header> +<main id="index"> + <table class="index" data-sortable> + <thead> + <tr class="tablehead" title="Click to sort"> + <th class="name left" aria-sort="none" data-shortcut="n">Module</th> + <th aria-sort="none" data-default-sort-order="descending" data-shortcut="s">statements</th> + <th aria-sort="none" data-default-sort-order="descending" data-shortcut="m">missing</th> + <th aria-sort="none" data-default-sort-order="descending" data-shortcut="x">excluded</th> + <th class="right" aria-sort="none" data-shortcut="c">coverage</th> + </tr> + </thead> + <tbody> + <tr class="file"> + <td class="name left"><a href="two_tests_py.html">two_tests.py</a></td> + <td>17</td> + <td>1</td> + <td>0</td> + <td class="right" data-ratio="16 17">94%</td> + </tr> + </tbody> + <tfoot> + <tr class="total"> + <td class="name left">Total</td> + <td>17</td> + <td>1</td> + <td>0</td> + <td class="right" data-ratio="16 17">94%</td> + </tr> + </tfoot> + </table> + <p id="no_rows"> + No items found using the specified filter. + </p> +</main> +<footer> + <div class="content"> + <p> + <a class="nav" href="https://coverage.readthedocs.io/en/7.2.3a0.dev1">coverage.py v7.2.3a0.dev1</a>, + created at 2023-03-21 08:44 -0400 + </p> + </div> + <aside class="hidden"> + <a id="prevFileLink" class="nav" href="two_tests_py.html"/> + <a id="nextFileLink" class="nav" href="two_tests_py.html"/> + <button type="button" class="button_prev_file" data-shortcut="["/> + <button type="button" class="button_next_file" data-shortcut="]"/> + <button type="button" class="button_show_hide_help" data-shortcut="?"/> + </aside> +</footer> +</body> +</html> diff --git a/tests/gold/html/contexts/two_tests_py.html b/tests/gold/html/contexts/two_tests_py.html new file mode 100644 index 000000000..5e107b5eb --- /dev/null +++ b/tests/gold/html/contexts/two_tests_py.html @@ -0,0 +1,119 @@ +<!DOCTYPE html> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <title>Coverage for two_tests.py: 94%</title> + <link rel="icon" sizes="32x32" href="favicon_32.png"> + <link rel="stylesheet" href="style.css" type="text/css"> + <script type="text/javascript" src="coverage_html.js" defer></script> +</head> +<body class="pyfile"> +<header> + <div class="content"> + <h1> + <span class="text">Coverage for </span><b>two_tests.py</b>: + <span class="pc_cov">94%</span> + </h1> + <aside id="help_panel_wrapper"> + <input id="help_panel_state" type="checkbox"> + <label for="help_panel_state"> + <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" /> + </label> + <div id="help_panel"> + <p class="legend">Shortcuts on this page</p> + <div class="keyhelp"> + <p> + <kbd>r</kbd> + <kbd>m</kbd> + <kbd>x</kbd> + toggle line displays + </p> + <p> + <kbd>j</kbd> + <kbd>k</kbd> + next/prev highlighted chunk + </p> + <p> + <kbd>0</kbd> (zero) top of page + </p> + <p> + <kbd>1</kbd> (one) first highlighted chunk + </p> + <p> + <kbd>[</kbd> + <kbd>]</kbd> + prev/next file + </p> + <p> + <kbd>u</kbd> up to the index + </p> + <p> + <kbd>?</kbd> show/hide this help + </p> + </div> + </div> + </aside> + <h2> + <span class="text">17 statements </span> + <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">16<span class="text"> run</span></button> + <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">1<span class="text"> missing</span></button> + <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">0<span class="text"> excluded</span></button> + </h2> + <p class="text"> + <a id="prevFileLink" class="nav" href="index.html">« prev</a> + <a id="indexLink" class="nav" href="index.html">^ index</a> + <a id="nextFileLink" class="nav" href="index.html">» next</a> + + <a class="nav" href="https://coverage.readthedocs.io/en/7.2.3a0.dev1">coverage.py v7.2.3a0.dev1</a>, + created at 2023-03-21 08:44 -0400 + </p> + <aside class="hidden"> + <button type="button" class="button_next_chunk" data-shortcut="j"/> + <button type="button" class="button_prev_chunk" data-shortcut="k"/> + <button type="button" class="button_top_of_page" data-shortcut="0"/> + <button type="button" class="button_first_chunk" data-shortcut="1"/> + <button type="button" class="button_prev_file" data-shortcut="["/> + <button type="button" class="button_next_file" data-shortcut="]"/> + <button type="button" class="button_to_index" data-shortcut="u"/> + <button type="button" class="button_show_hide_help" data-shortcut="?"/> + </aside> + </div> +</header> +<main id="source"> + <p class="run"><span class="n"><a id="t1" href="#t1">1</a></span><span class="t"><span class="key">def</span> <span class="nam">helper</span><span class="op">(</span><span class="nam">lineno</span><span class="op">)</span><span class="op">:</span> </span><span class="r"><label for="ctxs1" class="ctx">(empty)</label></span></p> + <p class="run"><span class="n"><a id="t2" href="#t2">2</a></span><span class="t"> <span class="nam">x</span> <span class="op">=</span> <span class="num">2</span> </span><input type="checkbox" id="ctxs2" /><span class="r"><label for="ctxs2" class="ctx">3 ctx</label></span><span class="ctxs"><span>(empty)</span><span>two_tests.test_one</span><span>two_tests.test_two</span></span></p> + <p class="pln"><span class="n"><a id="t3" href="#t3">3</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t4" href="#t4">4</a></span><span class="t"><span class="key">def</span> <span class="nam">test_one</span><span class="op">(</span><span class="op">)</span><span class="op">:</span> </span><span class="r"><label for="ctxs4" class="ctx">(empty)</label></span></p> + <p class="run"><span class="n"><a id="t5" href="#t5">5</a></span><span class="t"> <span class="nam">a</span> <span class="op">=</span> <span class="num">5</span> </span><input type="checkbox" id="ctxs5" /><span class="r"><label for="ctxs5" class="ctx">1 ctx</label></span><span class="ctxs"><span>two_tests.test_one</span></span></p> + <p class="run"><span class="n"><a id="t6" href="#t6">6</a></span><span class="t"> <span class="nam">helper</span><span class="op">(</span><span class="num">6</span><span class="op">)</span> </span><input type="checkbox" id="ctxs6" /><span class="r"><label for="ctxs6" class="ctx">1 ctx</label></span><span class="ctxs"><span>two_tests.test_one</span></span></p> + <p class="pln"><span class="n"><a id="t7" href="#t7">7</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t8" href="#t8">8</a></span><span class="t"><span class="key">def</span> <span class="nam">test_two</span><span class="op">(</span><span class="op">)</span><span class="op">:</span> </span><span class="r"><label for="ctxs8" class="ctx">(empty)</label></span></p> + <p class="run"><span class="n"><a id="t9" href="#t9">9</a></span><span class="t"> <span class="nam">a</span> <span class="op">=</span> <span class="num">9</span> </span><input type="checkbox" id="ctxs9" /><span class="r"><label for="ctxs9" class="ctx">1 ctx</label></span><span class="ctxs"><span>two_tests.test_two</span></span></p> + <p class="run"><span class="n"><a id="t10" href="#t10">10</a></span><span class="t"> <span class="nam">b</span> <span class="op">=</span> <span class="num">10</span> </span><input type="checkbox" id="ctxs10" /><span class="r"><label for="ctxs10" class="ctx">1 ctx</label></span><span class="ctxs"><span>two_tests.test_two</span></span></p> + <p class="run"><span class="n"><a id="t11" href="#t11">11</a></span><span class="t"> <span class="key">if</span> <span class="nam">a</span> <span class="op">></span> <span class="num">11</span><span class="op">:</span> </span><input type="checkbox" id="ctxs11" /><span class="r"><label for="ctxs11" class="ctx">1 ctx</label></span><span class="ctxs"><span>two_tests.test_two</span></span></p> + <p class="mis show_mis"><span class="n"><a id="t12" href="#t12">12</a></span><span class="t"> <span class="nam">b</span> <span class="op">=</span> <span class="num">12</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t13" href="#t13">13</a></span><span class="t"> <span class="key">assert</span> <span class="nam">a</span> <span class="op">==</span> <span class="op">(</span><span class="num">13</span><span class="op">-</span><span class="num">4</span><span class="op">)</span> </span><input type="checkbox" id="ctxs13" /><span class="r"><label for="ctxs13" class="ctx">1 ctx</label></span><span class="ctxs"><span>two_tests.test_two</span></span></p> + <p class="run"><span class="n"><a id="t14" href="#t14">14</a></span><span class="t"> <span class="key">assert</span> <span class="nam">b</span> <span class="op">==</span> <span class="op">(</span><span class="num">14</span><span class="op">-</span><span class="num">4</span><span class="op">)</span> </span><input type="checkbox" id="ctxs14" /><span class="r"><label for="ctxs14" class="ctx">1 ctx</label></span><span class="ctxs"><span>two_tests.test_two</span></span></p> + <p class="run"><span class="n"><a id="t15" href="#t15">15</a></span><span class="t"> <span class="nam">helper</span><span class="op">(</span> </span><input type="checkbox" id="ctxs15" /><span class="r"><label for="ctxs15" class="ctx">1 ctx</label></span><span class="ctxs"><span>two_tests.test_two</span></span></p> + <p class="pln"><span class="n"><a id="t16" href="#t16">16</a></span><span class="t"> <span class="num">16</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t17" href="#t17">17</a></span><span class="t"> <span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t18" href="#t18">18</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t19" href="#t19">19</a></span><span class="t"><span class="nam">test_one</span><span class="op">(</span><span class="op">)</span> </span><span class="r"><label for="ctxs19" class="ctx">(empty)</label></span></p> + <p class="run"><span class="n"><a id="t20" href="#t20">20</a></span><span class="t"><span class="nam">x</span> <span class="op">=</span> <span class="num">20</span> </span><span class="r"><label for="ctxs20" class="ctx">(empty)</label></span></p> + <p class="run"><span class="n"><a id="t21" href="#t21">21</a></span><span class="t"><span class="nam">helper</span><span class="op">(</span><span class="num">21</span><span class="op">)</span> </span><span class="r"><label for="ctxs21" class="ctx">(empty)</label></span></p> + <p class="run"><span class="n"><a id="t22" href="#t22">22</a></span><span class="t"><span class="nam">test_two</span><span class="op">(</span><span class="op">)</span> </span><span class="r"><label for="ctxs22" class="ctx">(empty)</label></span></p> +</main> +<footer> + <div class="content"> + <p> + <a id="prevFileLink" class="nav" href="index.html">« prev</a> + <a id="indexLink" class="nav" href="index.html">^ index</a> + <a id="nextFileLink" class="nav" href="index.html">» next</a> + + <a class="nav" href="https://coverage.readthedocs.io/en/7.2.3a0.dev1">coverage.py v7.2.3a0.dev1</a>, + created at 2023-03-21 08:44 -0400 + </p> + </div> +</footer> +</body> +</html> diff --git a/tests/test_html.py b/tests/test_html.py index 5113cd06e..89ad8d1c2 100644 --- a/tests/test_html.py +++ b/tests/test_html.py @@ -1199,6 +1199,9 @@ def test_dynamic_contexts(self) -> None: ] assert sorted(expected) == sorted(actual) + cov.html_report(mod, directory="out/contexts") + compare_html(gold_path("html/contexts"), "out/contexts") + def test_filtered_dynamic_contexts(self) -> None: self.make_file("two_tests.py", self.SOURCE) cov = coverage.Coverage(source=["."]) From ef40735a819df29be7a2cdd39c4d2c2d480283fd Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Tue, 21 Mar 2023 13:30:57 -0400 Subject: [PATCH 117/139] build(docs): only load sphinxcontrib.spelling if we are spell-checking #1593 --- doc/conf.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/doc/conf.py b/doc/conf.py index 59907127a..92eb97997 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -36,7 +36,6 @@ 'sphinx.ext.autodoc', 'sphinx.ext.todo', 'sphinx.ext.ifconfig', - 'sphinxcontrib.spelling', 'sphinx.ext.intersphinx', 'sphinxcontrib.restbuilder', 'sphinx.ext.napoleon', @@ -220,6 +219,9 @@ # -- Spelling --- if any("spell" in arg for arg in sys.argv): + # sphinxcontrib.spelling needs the native "enchant" library, which often is + # missing, so only use the extension if we are specifically spell-checking. + extensions += ['sphinxcontrib.spelling'] names_file = tempfile.NamedTemporaryFile(mode='w', prefix="coverage_names_", suffix=".txt") with open("../CONTRIBUTORS.txt") as contributors: names = set(re.split(r"[^\w']", contributors.read())) From 72c61ed64e9bd960479eef81e8f22f31000e3440 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Tue, 21 Mar 2023 13:35:24 -0400 Subject: [PATCH 118/139] build(docs): sort the spelling dict --- doc/dict.txt | 48 ++++++++++++++++++++++++------------------------ 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/doc/dict.txt b/doc/dict.txt index 63544dcde..74f5a1e09 100644 --- a/doc/dict.txt +++ b/doc/dict.txt @@ -1,18 +1,35 @@ +API +BOM +BTW +CPython +CTracer +Cobertura +Consolas +Cython +DOCTYPE +DOM +HTML +Jinja +Mako +OK +PYTHONPATH +TODO +Tidelift +URL +UTF +XML activestate -api apache -API +api args argv ascii basename basenames bitbucket -BOM bom boolean booleans -BTW btw builtin builtins @@ -27,7 +44,6 @@ canonicalizes chdir'd clickable cmdline -Cobertura codecs colorsys combinable @@ -38,15 +54,11 @@ configurability configurability's configurer configurers -Consolas cov coveragepy coveragerc covhtml -CPython css -CTracer -Cython datetime deallocating dedent @@ -62,8 +74,6 @@ docstring docstrings doctest doctests -DOCTYPE -DOM encodable encodings endfor @@ -99,7 +109,6 @@ greenlet hotkey hotkeys html -HTML htmlcov http https @@ -111,15 +120,13 @@ ints invariants iterable iterables -Jinja -jquery jQuery +jquery json jython kwargs lcov localStorage -Mako manylinux matcher matchers @@ -151,7 +158,6 @@ num numbits numpy ok -OK opcode opcodes optparse @@ -165,8 +171,8 @@ pathnames plugin plugins pragma -pragmas pragma'd +pragmas pre prepended prepending @@ -181,7 +187,6 @@ pyproject pypy pytest pythonpath -PYTHONPATH pyw rcfile readme @@ -217,12 +222,10 @@ symlink symlinks syntaxes sys -templite templating +templite testability -Tidelift todo -TODO tokenization tokenize tokenized @@ -248,8 +251,6 @@ unrunnable unsubscriptable untokenizable username -URL -UTF utf vendored versionadded @@ -259,6 +260,5 @@ wildcard wildcards www xml -XML xrange xyzzy From 00d2ecf893fef59d17bfd434ef7e2d5e2fd50818 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Tue, 21 Mar 2023 13:40:40 -0400 Subject: [PATCH 119/139] docs: correct some misspellings and add good words to the dict --- CONTRIBUTORS.txt | 1 + doc/dict.txt | 19 +++++++++++++++++++ doc/faq.rst | 2 +- 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/CONTRIBUTORS.txt b/CONTRIBUTORS.txt index 06a0605a5..0da824b8c 100644 --- a/CONTRIBUTORS.txt +++ b/CONTRIBUTORS.txt @@ -116,6 +116,7 @@ Marcus Cobden Marius Gedminas Mark van der Wal Martin Fuzzey +Mathieu Kniewallner Matt Bachmann Matthew Boehm Matthew Desmarais diff --git a/doc/dict.txt b/doc/dict.txt index 74f5a1e09..41d8c94f4 100644 --- a/doc/dict.txt +++ b/doc/dict.txt @@ -24,6 +24,7 @@ api args argv ascii +async basename basenames bitbucket @@ -59,8 +60,11 @@ coveragepy coveragerc covhtml css +dataio datetime deallocating +debounce +decodable dedent defaultdict deserialize @@ -85,6 +89,7 @@ exec'ing execfile executability executable's +execv expr extensibility favicon @@ -106,6 +111,7 @@ github gitignore globals greenlet +hintedness hotkey hotkeys html @@ -143,8 +149,10 @@ monospaced morf morfs multi +multiproc mumbo mycode +mypy namespace namespaces nano @@ -152,6 +160,8 @@ nbsp ned nedbat nedbatchelder +newb +nocover nosetests nullary num @@ -167,6 +177,7 @@ overridable parallelizing parsable parsers +pathlib pathnames plugin plugins @@ -174,6 +185,7 @@ pragma pragma'd pragmas pre +premain prepended prepending programmability @@ -181,7 +193,9 @@ programmatically py py's pyc +pyenv pyexpat +pylib pylint pyproject pypy @@ -191,6 +205,7 @@ pyw rcfile readme readthedocs +realpath recordable refactored refactoring @@ -199,9 +214,11 @@ regex regexes reimplemented renderer +rootname runnable runtime scrollbar +septatrix serializable settrace setuptools @@ -250,6 +267,7 @@ unparsable unrunnable unsubscriptable untokenizable +usecache username utf vendored @@ -259,6 +277,7 @@ wikipedia wildcard wildcards www +xdist xml xrange xyzzy diff --git a/doc/faq.rst b/doc/faq.rst index 8252eeb98..b25dce0fd 100644 --- a/doc/faq.rst +++ b/doc/faq.rst @@ -23,7 +23,7 @@ environment variable. This will write a line for each file considered, indicating whether it is traced or not, and if not, why not. Be careful though: the output might be swallowed by your test runner. If so, a ``COVERAGE_DEBUG_FILE=/tmp/cov.out`` -environemnt variable can direct the output to a file insttead to ensure you see +environment variable can direct the output to a file instead to ensure you see everything. From 551522eb214ad0c3f1dc48cd112a4f0ba6ddc6b6 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Tue, 21 Mar 2023 13:48:30 -0400 Subject: [PATCH 120/139] docs: fix some formatting in contributing.rst --- doc/contributing.rst | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/doc/contributing.rst b/doc/contributing.rst index 7cba0859e..fa7bb9f0c 100644 --- a/doc/contributing.rst +++ b/doc/contributing.rst @@ -37,15 +37,13 @@ The coverage.py code is hosted on a GitHub repository at https://github.com/nedbat/coveragepy. To get a working environment, follow these steps: -#. `Fork the repo`__ into your own GitHub account. The coverage.py code -will then be copied into a GitHub repository at -https://github.com/GITHUB_USER/coveragepy where GITHUB_USER is your GitHub -username. - -__ https://docs.github.com/en/get-started/quickstart/fork-a-repo +#. `Fork the repo`_ into your own GitHub account. The coverage.py code will + then be copied into a GitHub repository at + ``https://github.com/GITHUB_USER/coveragepy`` where GITHUB_USER is your + GitHub username. #. (Optional) Create a virtualenv to work in, and activate it. There -are a number of ways to do this. Use the method you are comfortable with. + are a number of ways to do this. Use the method you are comfortable with. #. Clone the repository:: @@ -253,6 +251,7 @@ All contributions are expected to include tests for new functionality and fixes. If you need help writing tests, please ask. +.. _fork the repo: https://docs.github.com/en/get-started/quickstart/fork-a-repo .. _editorconfig.org: http://editorconfig.org .. _tox: https://tox.readthedocs.io/ .. _black: https://pypi.org/project/black/ From d6cb1cdca6d15f5ec02eb6708314589290321faf Mon Sep 17 00:00:00 2001 From: Oleh Krehel <ohwoeowho@gmail.com> Date: Wed, 22 Mar 2023 17:42:35 +0100 Subject: [PATCH 121/139] fix: put contexts dict in <script> and reveal them using JavaScript (#1587) * Put contexts dict in <script> and reveal them using JavaScript Fixes #1584 * Address review comments * coverage/htmlfiles/style.css: Align the contexts to the right * coverage/htmlfiles/style.scss: Match style.css * coverage/html.py: Fix linting and mypy errors * two_tests_py.html: make update-gold --- coverage/html.py | 14 +++++++++++ coverage/htmlfiles/coverage_html.js | 21 ++++++++++++++++ coverage/htmlfiles/pyfile.html | 13 +++++++--- coverage/htmlfiles/style.css | 2 +- coverage/htmlfiles/style.scss | 1 + tests/gold/html/contexts/two_tests_py.html | 29 ++++++++++++++-------- tests/gold/html/styled/style.css | 2 +- 7 files changed, 65 insertions(+), 17 deletions(-) diff --git a/coverage/html.py b/coverage/html.py index ae09bc37d..23fba3f0a 100644 --- a/coverage/html.py +++ b/coverage/html.py @@ -10,6 +10,7 @@ import os import re import shutil +from collections import Counter from dataclasses import dataclass from typing import Any, Dict, Iterable, List, Optional, Tuple, TYPE_CHECKING, cast @@ -84,6 +85,7 @@ class LineData: short_annotations: List[str] long_annotations: List[str] html: str = "" + context_str: Optional[str] = None annotate: Optional[str] = None annotate_long: Optional[str] = None css_class: str = "" @@ -367,6 +369,11 @@ def write_html_file(self, ftr: FileToReport, prev_html: str, next_html: str) -> # Write the HTML page for this file. file_data = self.datagen.data_for_file(ftr.fr, ftr.analysis) + + contexts = Counter(c for cline in file_data.lines for c in cline.contexts) + context_codes = {y: i for (i, y) in enumerate(x[0] for x in contexts.most_common())} + contexts_json = json.dumps({v: k for (k, v) in context_codes.items()}, indent=2) + for ldata in file_data.lines: # Build the HTML for the line. html_parts = [] @@ -380,6 +387,9 @@ def write_html_file(self, ftr: FileToReport, prev_html: str, next_html: str) -> ) ldata.html = ''.join(html_parts) + ldata.context_str = ",".join( + str(context_codes[c_context]) for c_context in ldata.context_list) + if ldata.short_annotations: # 202F is NARROW NO-BREAK SPACE. # 219B is RIGHTWARDS ARROW WITH STROKE. @@ -412,6 +422,10 @@ def write_html_file(self, ftr: FileToReport, prev_html: str, next_html: str) -> ) ldata.css_class = ' '.join(css_classes) or "pln" + if context_codes: + file_data.__dict__["contexts_json"] = contexts_json + else: + file_data.__dict__["contexts_json"] = None html_path = os.path.join(self.directory, ftr.html_filename) html = self.source_tmpl.render({ **file_data.__dict__, diff --git a/coverage/htmlfiles/coverage_html.js b/coverage/htmlfiles/coverage_html.js index 1c4eb9881..8b7fb96f1 100644 --- a/coverage/htmlfiles/coverage_html.js +++ b/coverage/htmlfiles/coverage_html.js @@ -212,6 +212,11 @@ coverage.index_ready = function () { coverage.LINE_FILTERS_STORAGE = "COVERAGE_LINE_FILTERS"; coverage.pyfile_ready = function () { + cboxes = document.querySelectorAll('[id^=ctxs]') + cboxes.forEach(function(cbox) { + cbox.addEventListener("click", coverage.showContexts) + }); + // If we're directed to a particular line number, highlight the line. var frag = location.hash; if (frag.length > 2 && frag[1] === 't') { @@ -595,10 +600,26 @@ coverage.wire_up_sticky_header = function () { updateHeader(); }; +coverage.showContexts = function (e) { + span = e.target.nextElementSibling.nextElementSibling; + span_text = span.textContent; + + if (/^[0-9,]+$/.test(span_text)) + { + span.textContent = ""; + span_text.split(",").forEach(function(s) { + ctx = contexts[s]; + span.appendChild(document.createTextNode(ctx)); + span.appendChild(document.createElement("br")); + }) + } +}; + document.addEventListener("DOMContentLoaded", () => { if (document.body.classList.contains("indexfile")) { coverage.index_ready(); } else { coverage.pyfile_ready(); } + }); diff --git a/coverage/htmlfiles/pyfile.html b/coverage/htmlfiles/pyfile.html index 8fcfc660a..1921e1c20 100644 --- a/coverage/htmlfiles/pyfile.html +++ b/coverage/htmlfiles/pyfile.html @@ -11,6 +11,13 @@ {% if extra_css %} <link rel="stylesheet" href="{{ extra_css }}" type="text/css"> {% endif %} + + {% if contexts_json %} + <script type="text/javascript"> + contexts = {{ contexts_json }} + </script> + {% endif %} + <script type="text/javascript" src="coverage_html.js" defer></script> </head> <body class="pyfile"> @@ -117,11 +124,9 @@ <h2> {% endif %} </span> {# Things that should appear below the line. #} - {% if line.context_list %} + {% if line.context_str %} <span class="ctxs"> - {% for context in line.context_list %} - <span>{{context}}</span> - {% endfor %} + {{ line.context_str }} </span> {% endif %} </p> diff --git a/coverage/htmlfiles/style.css b/coverage/htmlfiles/style.css index d6768a35e..ace48c2cf 100644 --- a/coverage/htmlfiles/style.css +++ b/coverage/htmlfiles/style.css @@ -258,7 +258,7 @@ kbd { border: 1px solid black; border-color: #888 #333 #333 #888; padding: .1em @media (prefers-color-scheme: dark) { #source p label.ctx { color: #777; } } -#source p .ctxs { display: block; max-height: 0; overflow-y: hidden; transition: all .2s; padding: 0 .5em; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; white-space: nowrap; background: #d0e8ff; border-radius: .25em; margin-right: 1.75em; } +#source p .ctxs { display: block; max-height: 0; overflow-y: hidden; transition: all .2s; padding: 0 .5em; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; white-space: nowrap; background: #d0e8ff; border-radius: .25em; margin-right: 1.75em; text-align: right; } @media (prefers-color-scheme: dark) { #source p .ctxs { background: #056; } } diff --git a/coverage/htmlfiles/style.scss b/coverage/htmlfiles/style.scss index 1e9103fd1..fe3884871 100644 --- a/coverage/htmlfiles/style.scss +++ b/coverage/htmlfiles/style.scss @@ -622,6 +622,7 @@ $border-indicator-width: .2em; @include background-dark($dark-context-bg-color); border-radius: .25em; margin-right: 1.75em; + text-align: right; span { display: block; text-align: right; diff --git a/tests/gold/html/contexts/two_tests_py.html b/tests/gold/html/contexts/two_tests_py.html index 5e107b5eb..86239bd88 100644 --- a/tests/gold/html/contexts/two_tests_py.html +++ b/tests/gold/html/contexts/two_tests_py.html @@ -5,6 +5,13 @@ <title>Coverage for two_tests.py: 94%</title> <link rel="icon" sizes="32x32" href="favicon_32.png"> <link rel="stylesheet" href="style.css" type="text/css"> + <script type="text/javascript"> + contexts = { + "0": "(empty)", + "1": "two_tests.test_two", + "2": "two_tests.test_one" +} + </script> <script type="text/javascript" src="coverage_html.js" defer></script> </head> <body class="pyfile"> @@ -65,7 +72,7 @@ <h2> <a id="nextFileLink" class="nav" href="index.html">» next</a> <a class="nav" href="https://coverage.readthedocs.io/en/7.2.3a0.dev1">coverage.py v7.2.3a0.dev1</a>, - created at 2023-03-21 08:44 -0400 + created at 2023-03-22 16:13 +0100 </p> <aside class="hidden"> <button type="button" class="button_next_chunk" data-shortcut="j"/> @@ -81,20 +88,20 @@ <h2> </header> <main id="source"> <p class="run"><span class="n"><a id="t1" href="#t1">1</a></span><span class="t"><span class="key">def</span> <span class="nam">helper</span><span class="op">(</span><span class="nam">lineno</span><span class="op">)</span><span class="op">:</span> </span><span class="r"><label for="ctxs1" class="ctx">(empty)</label></span></p> - <p class="run"><span class="n"><a id="t2" href="#t2">2</a></span><span class="t"> <span class="nam">x</span> <span class="op">=</span> <span class="num">2</span> </span><input type="checkbox" id="ctxs2" /><span class="r"><label for="ctxs2" class="ctx">3 ctx</label></span><span class="ctxs"><span>(empty)</span><span>two_tests.test_one</span><span>two_tests.test_two</span></span></p> + <p class="run"><span class="n"><a id="t2" href="#t2">2</a></span><span class="t"> <span class="nam">x</span> <span class="op">=</span> <span class="num">2</span> </span><input type="checkbox" id="ctxs2" /><span class="r"><label for="ctxs2" class="ctx">3 ctx</label></span><span class="ctxs">0,2,1</span></p> <p class="pln"><span class="n"><a id="t3" href="#t3">3</a></span><span class="t"> </span><span class="r"></span></p> <p class="run"><span class="n"><a id="t4" href="#t4">4</a></span><span class="t"><span class="key">def</span> <span class="nam">test_one</span><span class="op">(</span><span class="op">)</span><span class="op">:</span> </span><span class="r"><label for="ctxs4" class="ctx">(empty)</label></span></p> - <p class="run"><span class="n"><a id="t5" href="#t5">5</a></span><span class="t"> <span class="nam">a</span> <span class="op">=</span> <span class="num">5</span> </span><input type="checkbox" id="ctxs5" /><span class="r"><label for="ctxs5" class="ctx">1 ctx</label></span><span class="ctxs"><span>two_tests.test_one</span></span></p> - <p class="run"><span class="n"><a id="t6" href="#t6">6</a></span><span class="t"> <span class="nam">helper</span><span class="op">(</span><span class="num">6</span><span class="op">)</span> </span><input type="checkbox" id="ctxs6" /><span class="r"><label for="ctxs6" class="ctx">1 ctx</label></span><span class="ctxs"><span>two_tests.test_one</span></span></p> + <p class="run"><span class="n"><a id="t5" href="#t5">5</a></span><span class="t"> <span class="nam">a</span> <span class="op">=</span> <span class="num">5</span> </span><input type="checkbox" id="ctxs5" /><span class="r"><label for="ctxs5" class="ctx">1 ctx</label></span><span class="ctxs">2</span></p> + <p class="run"><span class="n"><a id="t6" href="#t6">6</a></span><span class="t"> <span class="nam">helper</span><span class="op">(</span><span class="num">6</span><span class="op">)</span> </span><input type="checkbox" id="ctxs6" /><span class="r"><label for="ctxs6" class="ctx">1 ctx</label></span><span class="ctxs">2</span></p> <p class="pln"><span class="n"><a id="t7" href="#t7">7</a></span><span class="t"> </span><span class="r"></span></p> <p class="run"><span class="n"><a id="t8" href="#t8">8</a></span><span class="t"><span class="key">def</span> <span class="nam">test_two</span><span class="op">(</span><span class="op">)</span><span class="op">:</span> </span><span class="r"><label for="ctxs8" class="ctx">(empty)</label></span></p> - <p class="run"><span class="n"><a id="t9" href="#t9">9</a></span><span class="t"> <span class="nam">a</span> <span class="op">=</span> <span class="num">9</span> </span><input type="checkbox" id="ctxs9" /><span class="r"><label for="ctxs9" class="ctx">1 ctx</label></span><span class="ctxs"><span>two_tests.test_two</span></span></p> - <p class="run"><span class="n"><a id="t10" href="#t10">10</a></span><span class="t"> <span class="nam">b</span> <span class="op">=</span> <span class="num">10</span> </span><input type="checkbox" id="ctxs10" /><span class="r"><label for="ctxs10" class="ctx">1 ctx</label></span><span class="ctxs"><span>two_tests.test_two</span></span></p> - <p class="run"><span class="n"><a id="t11" href="#t11">11</a></span><span class="t"> <span class="key">if</span> <span class="nam">a</span> <span class="op">></span> <span class="num">11</span><span class="op">:</span> </span><input type="checkbox" id="ctxs11" /><span class="r"><label for="ctxs11" class="ctx">1 ctx</label></span><span class="ctxs"><span>two_tests.test_two</span></span></p> + <p class="run"><span class="n"><a id="t9" href="#t9">9</a></span><span class="t"> <span class="nam">a</span> <span class="op">=</span> <span class="num">9</span> </span><input type="checkbox" id="ctxs9" /><span class="r"><label for="ctxs9" class="ctx">1 ctx</label></span><span class="ctxs">1</span></p> + <p class="run"><span class="n"><a id="t10" href="#t10">10</a></span><span class="t"> <span class="nam">b</span> <span class="op">=</span> <span class="num">10</span> </span><input type="checkbox" id="ctxs10" /><span class="r"><label for="ctxs10" class="ctx">1 ctx</label></span><span class="ctxs">1</span></p> + <p class="run"><span class="n"><a id="t11" href="#t11">11</a></span><span class="t"> <span class="key">if</span> <span class="nam">a</span> <span class="op">></span> <span class="num">11</span><span class="op">:</span> </span><input type="checkbox" id="ctxs11" /><span class="r"><label for="ctxs11" class="ctx">1 ctx</label></span><span class="ctxs">1</span></p> <p class="mis show_mis"><span class="n"><a id="t12" href="#t12">12</a></span><span class="t"> <span class="nam">b</span> <span class="op">=</span> <span class="num">12</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t13" href="#t13">13</a></span><span class="t"> <span class="key">assert</span> <span class="nam">a</span> <span class="op">==</span> <span class="op">(</span><span class="num">13</span><span class="op">-</span><span class="num">4</span><span class="op">)</span> </span><input type="checkbox" id="ctxs13" /><span class="r"><label for="ctxs13" class="ctx">1 ctx</label></span><span class="ctxs"><span>two_tests.test_two</span></span></p> - <p class="run"><span class="n"><a id="t14" href="#t14">14</a></span><span class="t"> <span class="key">assert</span> <span class="nam">b</span> <span class="op">==</span> <span class="op">(</span><span class="num">14</span><span class="op">-</span><span class="num">4</span><span class="op">)</span> </span><input type="checkbox" id="ctxs14" /><span class="r"><label for="ctxs14" class="ctx">1 ctx</label></span><span class="ctxs"><span>two_tests.test_two</span></span></p> - <p class="run"><span class="n"><a id="t15" href="#t15">15</a></span><span class="t"> <span class="nam">helper</span><span class="op">(</span> </span><input type="checkbox" id="ctxs15" /><span class="r"><label for="ctxs15" class="ctx">1 ctx</label></span><span class="ctxs"><span>two_tests.test_two</span></span></p> + <p class="run"><span class="n"><a id="t13" href="#t13">13</a></span><span class="t"> <span class="key">assert</span> <span class="nam">a</span> <span class="op">==</span> <span class="op">(</span><span class="num">13</span><span class="op">-</span><span class="num">4</span><span class="op">)</span> </span><input type="checkbox" id="ctxs13" /><span class="r"><label for="ctxs13" class="ctx">1 ctx</label></span><span class="ctxs">1</span></p> + <p class="run"><span class="n"><a id="t14" href="#t14">14</a></span><span class="t"> <span class="key">assert</span> <span class="nam">b</span> <span class="op">==</span> <span class="op">(</span><span class="num">14</span><span class="op">-</span><span class="num">4</span><span class="op">)</span> </span><input type="checkbox" id="ctxs14" /><span class="r"><label for="ctxs14" class="ctx">1 ctx</label></span><span class="ctxs">1</span></p> + <p class="run"><span class="n"><a id="t15" href="#t15">15</a></span><span class="t"> <span class="nam">helper</span><span class="op">(</span> </span><input type="checkbox" id="ctxs15" /><span class="r"><label for="ctxs15" class="ctx">1 ctx</label></span><span class="ctxs">1</span></p> <p class="pln"><span class="n"><a id="t16" href="#t16">16</a></span><span class="t"> <span class="num">16</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t17" href="#t17">17</a></span><span class="t"> <span class="op">)</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t18" href="#t18">18</a></span><span class="t"> </span><span class="r"></span></p> @@ -111,7 +118,7 @@ <h2> <a id="nextFileLink" class="nav" href="index.html">» next</a> <a class="nav" href="https://coverage.readthedocs.io/en/7.2.3a0.dev1">coverage.py v7.2.3a0.dev1</a>, - created at 2023-03-21 08:44 -0400 + created at 2023-03-22 16:13 +0100 </p> </div> </footer> diff --git a/tests/gold/html/styled/style.css b/tests/gold/html/styled/style.css index d6768a35e..ace48c2cf 100644 --- a/tests/gold/html/styled/style.css +++ b/tests/gold/html/styled/style.css @@ -258,7 +258,7 @@ kbd { border: 1px solid black; border-color: #888 #333 #333 #888; padding: .1em @media (prefers-color-scheme: dark) { #source p label.ctx { color: #777; } } -#source p .ctxs { display: block; max-height: 0; overflow-y: hidden; transition: all .2s; padding: 0 .5em; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; white-space: nowrap; background: #d0e8ff; border-radius: .25em; margin-right: 1.75em; } +#source p .ctxs { display: block; max-height: 0; overflow-y: hidden; transition: all .2s; padding: 0 .5em; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; white-space: nowrap; background: #d0e8ff; border-radius: .25em; margin-right: 1.75em; text-align: right; } @media (prefers-color-scheme: dark) { #source p .ctxs { background: #056; } } From a5dc01131b1a38bb7c7908ad968488d87e3664ed Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Wed, 22 Mar 2023 12:49:51 -0400 Subject: [PATCH 122/139] docs: add compact HTML context reports to the changelog --- CHANGES.rst | 7 ++++++- CONTRIBUTORS.txt | 1 + 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGES.rst b/CHANGES.rst index c139d6c91..6b12c8fc8 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -20,7 +20,12 @@ development at the same time, such as 4.5.x and 5.0. Unreleased ---------- -Nothing yet. +- Performance: HTML reports with context information are now much more compact, + with file sizes typically as small as one-third the previous size. This + closes `issue 1584`_ thanks to `Oleh Krehel <pull 1587_>`_. + +.. _issue 1584: https://github.com/nedbat/coveragepy/issues/1584 +.. _pull 1587: https://github.com/nedbat/coveragepy/pull/1587 .. scriv-start-here diff --git a/CONTRIBUTORS.txt b/CONTRIBUTORS.txt index 0da824b8c..a35dcfd0c 100644 --- a/CONTRIBUTORS.txt +++ b/CONTRIBUTORS.txt @@ -133,6 +133,7 @@ Neil Pilgrim Nikita Bloshchanevich Nils Kattenbeck Noel O'Boyle +Oleh Krehel Olivier Grisel Ori Avtalion Pablo Carballo From 63f3e495b184ebd9aa4c9d757fb78ed148580d29 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Wed, 22 Mar 2023 13:12:16 -0400 Subject: [PATCH 123/139] style: clean up #1587 --- CHANGES.rst | 7 ++++--- coverage/html.py | 22 +++++++++----------- coverage/htmlfiles/coverage_html.js | 3 +-- coverage/htmlfiles/pyfile.html | 6 ++---- coverage/htmlfiles/style.css | 2 -- coverage/htmlfiles/style.scss | 4 ---- tests/gold/html/contexts/two_tests_py.html | 6 +++--- tests/gold/html/styled/style.css | 2 -- tests/gold/html/support/coverage_html.js | 24 ++++++++++++++++++++-- tests/gold/html/support/style.css | 4 +--- 10 files changed, 43 insertions(+), 37 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index 6b12c8fc8..51d6bead2 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -20,9 +20,10 @@ development at the same time, such as 4.5.x and 5.0. Unreleased ---------- -- Performance: HTML reports with context information are now much more compact, - with file sizes typically as small as one-third the previous size. This - closes `issue 1584`_ thanks to `Oleh Krehel <pull 1587_>`_. +- Performance: HTML reports with context information are now much more compact. + File sizes are typically as small as one-third the previous size, but can be + dramatically smaller. This closes `issue 1584`_ thanks to `Oleh Krehel + <pull 1587_>`_. .. _issue 1584: https://github.com/nedbat/coveragepy/issues/1584 .. _pull 1587: https://github.com/nedbat/coveragepy/pull/1587 diff --git a/coverage/html.py b/coverage/html.py index 23fba3f0a..d172e8969 100644 --- a/coverage/html.py +++ b/coverage/html.py @@ -5,12 +5,12 @@ from __future__ import annotations +import collections import datetime import json import os import re import shutil -from collections import Counter from dataclasses import dataclass from typing import Any, Dict, Iterable, List, Optional, Tuple, TYPE_CHECKING, cast @@ -370,9 +370,12 @@ def write_html_file(self, ftr: FileToReport, prev_html: str, next_html: str) -> # Write the HTML page for this file. file_data = self.datagen.data_for_file(ftr.fr, ftr.analysis) - contexts = Counter(c for cline in file_data.lines for c in cline.contexts) + contexts = collections.Counter(c for cline in file_data.lines for c in cline.contexts) context_codes = {y: i for (i, y) in enumerate(x[0] for x in contexts.most_common())} - contexts_json = json.dumps({v: k for (k, v) in context_codes.items()}, indent=2) + if context_codes: + contexts_json = json.dumps({v: k for (k, v) in context_codes.items()}, indent=2) + else: + contexts_json = None for ldata in file_data.lines: # Build the HTML for the line. @@ -382,13 +385,11 @@ def write_html_file(self, ftr: FileToReport, prev_html: str, next_html: str) -> html_parts.append(escape(tok_text)) else: tok_html = escape(tok_text) or ' ' - html_parts.append( - f'<span class="{tok_type}">{tok_html}</span>' - ) + html_parts.append(f'<span class="{tok_type}">{tok_html}</span>') ldata.html = ''.join(html_parts) - ldata.context_str = ",".join( - str(context_codes[c_context]) for c_context in ldata.context_list) + str(context_codes[c_context]) for c_context in ldata.context_list + ) if ldata.short_annotations: # 202F is NARROW NO-BREAK SPACE. @@ -422,13 +423,10 @@ def write_html_file(self, ftr: FileToReport, prev_html: str, next_html: str) -> ) ldata.css_class = ' '.join(css_classes) or "pln" - if context_codes: - file_data.__dict__["contexts_json"] = contexts_json - else: - file_data.__dict__["contexts_json"] = None html_path = os.path.join(self.directory, ftr.html_filename) html = self.source_tmpl.render({ **file_data.__dict__, + "contexts_json": contexts_json, 'prev_html': prev_html, 'next_html': next_html, }) diff --git a/coverage/htmlfiles/coverage_html.js b/coverage/htmlfiles/coverage_html.js index 8b7fb96f1..1cd2b5d4c 100644 --- a/coverage/htmlfiles/coverage_html.js +++ b/coverage/htmlfiles/coverage_html.js @@ -604,8 +604,7 @@ coverage.showContexts = function (e) { span = e.target.nextElementSibling.nextElementSibling; span_text = span.textContent; - if (/^[0-9,]+$/.test(span_text)) - { + if (/^[0-9,]+$/.test(span_text)) { span.textContent = ""; span_text.split(",").forEach(function(s) { ctx = contexts[s]; diff --git a/coverage/htmlfiles/pyfile.html b/coverage/htmlfiles/pyfile.html index 1921e1c20..bc8fa697d 100644 --- a/coverage/htmlfiles/pyfile.html +++ b/coverage/htmlfiles/pyfile.html @@ -14,7 +14,7 @@ {% if contexts_json %} <script type="text/javascript"> - contexts = {{ contexts_json }} + contexts = {{ contexts_json }} </script> {% endif %} @@ -125,9 +125,7 @@ <h2> </span> {# Things that should appear below the line. #} {% if line.context_str %} - <span class="ctxs"> - {{ line.context_str }} - </span> + <span class="ctxs">{{ line.context_str }}</span> {% endif %} </p> {% endjoined %} diff --git a/coverage/htmlfiles/style.css b/coverage/htmlfiles/style.css index ace48c2cf..11b24c4e7 100644 --- a/coverage/htmlfiles/style.css +++ b/coverage/htmlfiles/style.css @@ -262,8 +262,6 @@ kbd { border: 1px solid black; border-color: #888 #333 #333 #888; padding: .1em @media (prefers-color-scheme: dark) { #source p .ctxs { background: #056; } } -#source p .ctxs span { display: block; text-align: right; } - #index { font-family: SFMono-Regular, Menlo, Monaco, Consolas, monospace; font-size: 0.875em; } #index table.index { margin-left: -.5em; } diff --git a/coverage/htmlfiles/style.scss b/coverage/htmlfiles/style.scss index fe3884871..b1465154e 100644 --- a/coverage/htmlfiles/style.scss +++ b/coverage/htmlfiles/style.scss @@ -623,10 +623,6 @@ $border-indicator-width: .2em; border-radius: .25em; margin-right: 1.75em; text-align: right; - span { - display: block; - text-align: right; - } } } } diff --git a/tests/gold/html/contexts/two_tests_py.html b/tests/gold/html/contexts/two_tests_py.html index 86239bd88..cbb6e5739 100644 --- a/tests/gold/html/contexts/two_tests_py.html +++ b/tests/gold/html/contexts/two_tests_py.html @@ -6,7 +6,7 @@ <link rel="icon" sizes="32x32" href="favicon_32.png"> <link rel="stylesheet" href="style.css" type="text/css"> <script type="text/javascript"> - contexts = { + contexts = { "0": "(empty)", "1": "two_tests.test_two", "2": "two_tests.test_one" @@ -72,7 +72,7 @@ <h2> <a id="nextFileLink" class="nav" href="index.html">» next</a> <a class="nav" href="https://coverage.readthedocs.io/en/7.2.3a0.dev1">coverage.py v7.2.3a0.dev1</a>, - created at 2023-03-22 16:13 +0100 + created at 2023-03-22 13:16 -0400 </p> <aside class="hidden"> <button type="button" class="button_next_chunk" data-shortcut="j"/> @@ -118,7 +118,7 @@ <h2> <a id="nextFileLink" class="nav" href="index.html">» next</a> <a class="nav" href="https://coverage.readthedocs.io/en/7.2.3a0.dev1">coverage.py v7.2.3a0.dev1</a>, - created at 2023-03-22 16:13 +0100 + created at 2023-03-22 13:16 -0400 </p> </div> </footer> diff --git a/tests/gold/html/styled/style.css b/tests/gold/html/styled/style.css index ace48c2cf..11b24c4e7 100644 --- a/tests/gold/html/styled/style.css +++ b/tests/gold/html/styled/style.css @@ -262,8 +262,6 @@ kbd { border: 1px solid black; border-color: #888 #333 #333 #888; padding: .1em @media (prefers-color-scheme: dark) { #source p .ctxs { background: #056; } } -#source p .ctxs span { display: block; text-align: right; } - #index { font-family: SFMono-Regular, Menlo, Monaco, Consolas, monospace; font-size: 0.875em; } #index table.index { margin-left: -.5em; } diff --git a/tests/gold/html/support/coverage_html.js b/tests/gold/html/support/coverage_html.js index 084a4970c..1cd2b5d4c 100644 --- a/tests/gold/html/support/coverage_html.js +++ b/tests/gold/html/support/coverage_html.js @@ -166,7 +166,7 @@ coverage.wire_up_filter = function () { // Trigger change event on setup, to force filter on page refresh // (filter value may still be present). - document.getElementById("filter").dispatchEvent(new Event("change")); + document.getElementById("filter").dispatchEvent(new Event("input")); }; coverage.INDEX_SORT_STORAGE = "COVERAGE_INDEX_SORT_2"; @@ -212,6 +212,11 @@ coverage.index_ready = function () { coverage.LINE_FILTERS_STORAGE = "COVERAGE_LINE_FILTERS"; coverage.pyfile_ready = function () { + cboxes = document.querySelectorAll('[id^=ctxs]') + cboxes.forEach(function(cbox) { + cbox.addEventListener("click", coverage.showContexts) + }); + // If we're directed to a particular line number, highlight the line. var frag = location.hash; if (frag.length > 2 && frag[1] === 't') { @@ -553,7 +558,7 @@ coverage.build_scroll_markers = function () { 'p.show_run, p.show_mis, p.show_exc, p.show_exc, p.show_par' ).forEach(element => { const line_top = Math.floor(element.offsetTop * marker_scale); - const line_number = parseInt(element.id.substr(1)); + const line_number = parseInt(element.querySelector(".n a").id.substr(1)); if (line_number === previous_line + 1) { // If this solid missed block just make previous mark higher. @@ -595,10 +600,25 @@ coverage.wire_up_sticky_header = function () { updateHeader(); }; +coverage.showContexts = function (e) { + span = e.target.nextElementSibling.nextElementSibling; + span_text = span.textContent; + + if (/^[0-9,]+$/.test(span_text)) { + span.textContent = ""; + span_text.split(",").forEach(function(s) { + ctx = contexts[s]; + span.appendChild(document.createTextNode(ctx)); + span.appendChild(document.createElement("br")); + }) + } +}; + document.addEventListener("DOMContentLoaded", () => { if (document.body.classList.contains("indexfile")) { coverage.index_ready(); } else { coverage.pyfile_ready(); } + }); diff --git a/tests/gold/html/support/style.css b/tests/gold/html/support/style.css index d6768a35e..11b24c4e7 100644 --- a/tests/gold/html/support/style.css +++ b/tests/gold/html/support/style.css @@ -258,12 +258,10 @@ kbd { border: 1px solid black; border-color: #888 #333 #333 #888; padding: .1em @media (prefers-color-scheme: dark) { #source p label.ctx { color: #777; } } -#source p .ctxs { display: block; max-height: 0; overflow-y: hidden; transition: all .2s; padding: 0 .5em; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; white-space: nowrap; background: #d0e8ff; border-radius: .25em; margin-right: 1.75em; } +#source p .ctxs { display: block; max-height: 0; overflow-y: hidden; transition: all .2s; padding: 0 .5em; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; white-space: nowrap; background: #d0e8ff; border-radius: .25em; margin-right: 1.75em; text-align: right; } @media (prefers-color-scheme: dark) { #source p .ctxs { background: #056; } } -#source p .ctxs span { display: block; text-align: right; } - #index { font-family: SFMono-Regular, Menlo, Monaco, Consolas, monospace; font-size: 0.875em; } #index table.index { margin-left: -.5em; } From 16abd82b6e87753184e8308c4b2606ff3979f8d3 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Wed, 22 Mar 2023 14:28:42 -0400 Subject: [PATCH 124/139] style: use double-quotes --- coverage/annotate.py | 22 +++---- coverage/cmdline.py | 136 ++++++++++++++++++++--------------------- coverage/html.py | 106 ++++++++++++++++---------------- coverage/jsonreport.py | 54 ++++++++-------- coverage/lcovreport.py | 2 +- coverage/summary.py | 12 ++-- coverage/xmlreport.py | 8 +-- 7 files changed, 170 insertions(+), 170 deletions(-) diff --git a/coverage/annotate.py b/coverage/annotate.py index 13dbe9b6e..b4a02cb47 100644 --- a/coverage/annotate.py +++ b/coverage/annotate.py @@ -40,8 +40,8 @@ class AnnotateReporter: > h(2) - Executed lines use '>', lines not executed use '!', lines excluded from - consideration use '-'. + Executed lines use ">", lines not executed use "!", lines excluded from + consideration use "-". """ @@ -83,7 +83,7 @@ def annotate_file(self, fr: FileReporter, analysis: Analysis) -> None: else: dest_file = fr.filename + ",cover" - with open(dest_file, 'w', encoding='utf-8') as dest: + with open(dest_file, "w", encoding="utf-8") as dest: i = j = 0 covered = True source = fr.source() @@ -95,20 +95,20 @@ def annotate_file(self, fr: FileReporter, analysis: Analysis) -> None: if i < len(statements) and statements[i] == lineno: covered = j >= len(missing) or missing[j] > lineno if self.blank_re.match(line): - dest.write(' ') + dest.write(" ") elif self.else_re.match(line): - # Special logic for lines containing only 'else:'. + # Special logic for lines containing only "else:". if j >= len(missing): - dest.write('> ') + dest.write("> ") elif statements[i] == missing[j]: - dest.write('! ') + dest.write("! ") else: - dest.write('> ') + dest.write("> ") elif lineno in excluded: - dest.write('- ') + dest.write("- ") elif covered: - dest.write('> ') + dest.write("> ") else: - dest.write('! ') + dest.write("! ") dest.write(line) diff --git a/coverage/cmdline.py b/coverage/cmdline.py index ef760a503..4498eeec3 100644 --- a/coverage/cmdline.py +++ b/coverage/cmdline.py @@ -39,130 +39,130 @@ class Opts: # appears on the command line. append = optparse.make_option( - '-a', '--append', action='store_true', + "-a", "--append", action="store_true", help="Append coverage data to .coverage, otherwise it starts clean each time.", ) keep = optparse.make_option( - '', '--keep', action='store_true', + "", "--keep", action="store_true", help="Keep original coverage files, otherwise they are deleted.", ) branch = optparse.make_option( - '', '--branch', action='store_true', + "", "--branch", action="store_true", help="Measure branch coverage in addition to statement coverage.", ) concurrency = optparse.make_option( - '', '--concurrency', action='store', metavar="LIBS", + "", "--concurrency", action="store", metavar="LIBS", help=( "Properly measure code using a concurrency library. " + "Valid values are: {}, or a comma-list of them." ).format(", ".join(sorted(CoverageConfig.CONCURRENCY_CHOICES))), ) context = optparse.make_option( - '', '--context', action='store', metavar="LABEL", + "", "--context", action="store", metavar="LABEL", help="The context label to record for this coverage run.", ) contexts = optparse.make_option( - '', '--contexts', action='store', metavar="REGEX1,REGEX2,...", + "", "--contexts", action="store", metavar="REGEX1,REGEX2,...", help=( "Only display data from lines covered in the given contexts. " + "Accepts Python regexes, which must be quoted." ), ) combine_datafile = optparse.make_option( - '', '--data-file', action='store', metavar="DATAFILE", + "", "--data-file", action="store", metavar="DATAFILE", help=( "Base name of the data files to operate on. " + "Defaults to '.coverage'. [env: COVERAGE_FILE]" ), ) input_datafile = optparse.make_option( - '', '--data-file', action='store', metavar="INFILE", + "", "--data-file", action="store", metavar="INFILE", help=( "Read coverage data for report generation from this file. " + "Defaults to '.coverage'. [env: COVERAGE_FILE]" ), ) output_datafile = optparse.make_option( - '', '--data-file', action='store', metavar="OUTFILE", + "", "--data-file", action="store", metavar="OUTFILE", help=( "Write the recorded coverage data to this file. " + "Defaults to '.coverage'. [env: COVERAGE_FILE]" ), ) debug = optparse.make_option( - '', '--debug', action='store', metavar="OPTS", + "", "--debug", action="store", metavar="OPTS", help="Debug options, separated by commas. [env: COVERAGE_DEBUG]", ) directory = optparse.make_option( - '-d', '--directory', action='store', metavar="DIR", + "-d", "--directory", action="store", metavar="DIR", help="Write the output files to DIR.", ) fail_under = optparse.make_option( - '', '--fail-under', action='store', metavar="MIN", type="float", + "", "--fail-under", action="store", metavar="MIN", type="float", help="Exit with a status of 2 if the total coverage is less than MIN.", ) format = optparse.make_option( - '', '--format', action='store', metavar="FORMAT", + "", "--format", action="store", metavar="FORMAT", help="Output format, either text (default), markdown, or total.", ) help = optparse.make_option( - '-h', '--help', action='store_true', + "-h", "--help", action="store_true", help="Get help on this command.", ) ignore_errors = optparse.make_option( - '-i', '--ignore-errors', action='store_true', + "-i", "--ignore-errors", action="store_true", help="Ignore errors while reading source files.", ) include = optparse.make_option( - '', '--include', action='store', metavar="PAT1,PAT2,...", + "", "--include", action="store", metavar="PAT1,PAT2,...", help=( "Include only files whose paths match one of these patterns. " + "Accepts shell-style wildcards, which must be quoted." ), ) pylib = optparse.make_option( - '-L', '--pylib', action='store_true', + "-L", "--pylib", action="store_true", help=( "Measure coverage even inside the Python installed library, " + "which isn't done by default." ), ) show_missing = optparse.make_option( - '-m', '--show-missing', action='store_true', + "-m", "--show-missing", action="store_true", help="Show line numbers of statements in each module that weren't executed.", ) module = optparse.make_option( - '-m', '--module', action='store_true', + "-m", "--module", action="store_true", help=( "<pyfile> is an importable Python module, not a script path, " + "to be run as 'python -m' would run it." ), ) omit = optparse.make_option( - '', '--omit', action='store', metavar="PAT1,PAT2,...", + "", "--omit", action="store", metavar="PAT1,PAT2,...", help=( "Omit files whose paths match one of these patterns. " + "Accepts shell-style wildcards, which must be quoted." ), ) output_xml = optparse.make_option( - '-o', '', action='store', dest="outfile", metavar="OUTFILE", + "-o", "", action="store", dest="outfile", metavar="OUTFILE", help="Write the XML report to this file. Defaults to 'coverage.xml'", ) output_json = optparse.make_option( - '-o', '', action='store', dest="outfile", metavar="OUTFILE", + "-o", "", action="store", dest="outfile", metavar="OUTFILE", help="Write the JSON report to this file. Defaults to 'coverage.json'", ) output_lcov = optparse.make_option( - '-o', '', action='store', dest='outfile', metavar="OUTFILE", + "-o", "", action="store", dest="outfile", metavar="OUTFILE", help="Write the LCOV report to this file. Defaults to 'coverage.lcov'", ) json_pretty_print = optparse.make_option( - '', '--pretty-print', action='store_true', + "", "--pretty-print", action="store_true", help="Format the JSON for human readers.", ) parallel_mode = optparse.make_option( - '-p', '--parallel-mode', action='store_true', + "-p", "--parallel-mode", action="store_true", help=( "Append the machine name, process id and random number to the " + "data file name to simplify collecting data from " + @@ -170,18 +170,18 @@ class Opts: ), ) precision = optparse.make_option( - '', '--precision', action='store', metavar='N', type=int, + "", "--precision", action="store", metavar="N", type=int, help=( "Number of digits after the decimal point to display for " + "reported coverage percentages." ), ) quiet = optparse.make_option( - '-q', '--quiet', action='store_true', + "-q", "--quiet", action="store_true", help="Don't print messages about what is happening.", ) rcfile = optparse.make_option( - '', '--rcfile', action='store', + "", "--rcfile", action="store", help=( "Specify configuration file. " + "By default '.coveragerc', 'setup.cfg', 'tox.ini', and " + @@ -189,45 +189,45 @@ class Opts: ), ) show_contexts = optparse.make_option( - '--show-contexts', action='store_true', + "--show-contexts", action="store_true", help="Show contexts for covered lines.", ) skip_covered = optparse.make_option( - '--skip-covered', action='store_true', + "--skip-covered", action="store_true", help="Skip files with 100% coverage.", ) no_skip_covered = optparse.make_option( - '--no-skip-covered', action='store_false', dest='skip_covered', + "--no-skip-covered", action="store_false", dest="skip_covered", help="Disable --skip-covered.", ) skip_empty = optparse.make_option( - '--skip-empty', action='store_true', + "--skip-empty", action="store_true", help="Skip files with no code.", ) sort = optparse.make_option( - '--sort', action='store', metavar='COLUMN', + "--sort", action="store", metavar="COLUMN", help=( "Sort the report by the named column: name, stmts, miss, branch, brpart, or cover. " + "Default is name." ), ) source = optparse.make_option( - '', '--source', action='store', metavar="SRC1,SRC2,...", + "", "--source", action="store", metavar="SRC1,SRC2,...", help="A list of directories or importable names of code to measure.", ) timid = optparse.make_option( - '', '--timid', action='store_true', + "", "--timid", action="store_true", help=( "Use a simpler but slower trace method. Try this if you get " + "seemingly impossible results!" ), ) title = optparse.make_option( - '', '--title', action='store', metavar="TITLE", + "", "--title", action="store", metavar="TITLE", help="A text string to use as the title on the HTML.", ) version = optparse.make_option( - '', '--version', action='store_true', + "", "--version", action="store_true", help="Display version information and exit.", ) @@ -369,7 +369,7 @@ def get_prog_name(self) -> str: ] COMMANDS = { - 'annotate': CmdOptionParser( + "annotate": CmdOptionParser( "annotate", [ Opts.directory, @@ -385,7 +385,7 @@ def get_prog_name(self) -> str: ), ), - 'combine': CmdOptionParser( + "combine": CmdOptionParser( "combine", [ Opts.append, @@ -404,7 +404,7 @@ def get_prog_name(self) -> str: ), ), - 'debug': CmdOptionParser( + "debug": CmdOptionParser( "debug", GLOBAL_ARGS, usage="<topic>", description=( @@ -419,7 +419,7 @@ def get_prog_name(self) -> str: ), ), - 'erase': CmdOptionParser( + "erase": CmdOptionParser( "erase", [ Opts.combine_datafile @@ -427,13 +427,13 @@ def get_prog_name(self) -> str: description="Erase previously collected coverage data.", ), - 'help': CmdOptionParser( + "help": CmdOptionParser( "help", GLOBAL_ARGS, usage="[command]", description="Describe how to use coverage.py", ), - 'html': CmdOptionParser( + "html": CmdOptionParser( "html", [ Opts.contexts, @@ -459,7 +459,7 @@ def get_prog_name(self) -> str: ), ), - 'json': CmdOptionParser( + "json": CmdOptionParser( "json", [ Opts.contexts, @@ -477,7 +477,7 @@ def get_prog_name(self) -> str: description="Generate a JSON report of coverage results.", ), - 'lcov': CmdOptionParser( + "lcov": CmdOptionParser( "lcov", [ Opts.input_datafile, @@ -492,7 +492,7 @@ def get_prog_name(self) -> str: description="Generate an LCOV report of coverage results.", ), - 'report': CmdOptionParser( + "report": CmdOptionParser( "report", [ Opts.contexts, @@ -513,7 +513,7 @@ def get_prog_name(self) -> str: description="Report coverage statistics on modules.", ), - 'run': CmdOptionParser( + "run": CmdOptionParser( "run", [ Opts.append, @@ -533,7 +533,7 @@ def get_prog_name(self) -> str: description="Run a Python program, measuring code execution.", ), - 'xml': CmdOptionParser( + "xml": CmdOptionParser( "xml", [ Opts.input_datafile, @@ -560,12 +560,12 @@ def show_help( assert error or topic or parser program_path = sys.argv[0] - if program_path.endswith(os.path.sep + '__main__.py'): + if program_path.endswith(os.path.sep + "__main__.py"): # The path is the main module of a package; get that path instead. program_path = os.path.dirname(program_path) program_name = os.path.basename(program_path) if env.WINDOWS: - # entry_points={'console_scripts':...} on Windows makes files + # entry_points={"console_scripts":...} on Windows makes files # called coverage.exe, coverage3.exe, and coverage-3.5.exe. These # invoke coverage-script.py, coverage3-script.py, and # coverage-3.5-script.py. argv[0] is the .py file, but we want to @@ -576,11 +576,11 @@ def show_help( help_params = dict(coverage.__dict__) help_params["__url__"] = __url__ - help_params['program_name'] = program_name + help_params["program_name"] = program_name if HAS_CTRACER: - help_params['extension_modifier'] = 'with C extension' + help_params["extension_modifier"] = "with C extension" else: - help_params['extension_modifier'] = 'without C extension' + help_params["extension_modifier"] = "without C extension" if error: print(error, file=sys.stderr) @@ -590,7 +590,7 @@ def show_help( print() else: assert topic is not None - help_msg = textwrap.dedent(HELP_TOPICS.get(topic, '')).strip() + help_msg = textwrap.dedent(HELP_TOPICS.get(topic, "")).strip() if help_msg: print(help_msg.format(**help_params)) else: @@ -618,13 +618,13 @@ def command_line(self, argv: List[str]) -> int: """ # Collect the command-line options. if not argv: - show_help(topic='minimum_help') + show_help(topic="minimum_help") return OK # The command syntax we parse depends on the first argument. Global # switch syntax always starts with an option. parser: Optional[optparse.OptionParser] - self.global_option = argv[0].startswith('-') + self.global_option = argv[0].startswith("-") if self.global_option: parser = GlobalOptionParser() else: @@ -702,7 +702,7 @@ def command_line(self, argv: List[str]) -> int: # We need to be able to import from the current directory, because # plugins may try to, for example, to read Django settings. - sys.path.insert(0, '') + sys.path.insert(0, "") self.coverage.load() @@ -786,7 +786,7 @@ def do_help( # Handle help. if options.help: if self.global_option: - show_help(topic='help') + show_help(topic="help") else: show_help(parser=parser) return True @@ -800,12 +800,12 @@ def do_help( else: show_help(topic=a) else: - show_help(topic='help') + show_help(topic="help") return True # Handle version. if options.version: - show_help(topic='version') + show_help(topic="version") return True return False @@ -835,7 +835,7 @@ def do_run(self, options: optparse.Values, args: List[str]) -> int: if options.concurrency == "multiprocessing": # Can't set other run-affecting command line options with # multiprocessing. - for opt_name in ['branch', 'include', 'omit', 'pylib', 'source', 'timid']: + for opt_name in ["branch", "include", "omit", "pylib", "source", "timid"]: # As it happens, all of these options have no default, meaning # they will be None if they have not been specified. if getattr(options, opt_name) is not None: @@ -913,7 +913,7 @@ def unshell_list(s: str) -> Optional[List[str]]: # line, but (not) helpfully, the single quotes are included in the # argument, so we have to strip them off here. s = s.strip("'") - return s.split(',') + return s.split(",") def unglob_args(args: List[str]) -> List[str]: @@ -921,7 +921,7 @@ def unglob_args(args: List[str]) -> List[str]: if env.WINDOWS: globbed = [] for arg in args: - if '?' in arg or '*' in arg: + if "?" in arg or "*" in arg: globbed.extend(glob.glob(arg)) else: globbed.append(arg) @@ -930,7 +930,7 @@ def unglob_args(args: List[str]) -> List[str]: HELP_TOPICS = { - 'help': """\ + "help": """\ Coverage.py, version {__version__} {extension_modifier} Measure, collect, and report on code coverage in Python programs. @@ -952,11 +952,11 @@ def unglob_args(args: List[str]) -> List[str]: Use "{program_name} help <command>" for detailed help on any command. """, - 'minimum_help': """\ + "minimum_help": """\ Code coverage for Python, version {__version__} {extension_modifier}. Use '{program_name} help' for help. """, - 'version': """\ + "version": """\ Coverage.py, version {__version__} {extension_modifier} """, } @@ -1008,6 +1008,6 @@ def main( # pylint: disable=functi try: return original_main(argv) finally: - data, _ = profiler.query(re_filter='coverage', max_records=100) - print(profiler.show(query=data, limit=100, sep='', col='')) + data, _ = profiler.query(re_filter="coverage", max_records=100) + print(profiler.show(query=data, limit=100, sep="", col="")) profiler.cancel() diff --git a/coverage/html.py b/coverage/html.py index d172e8969..d1a90ecd6 100644 --- a/coverage/html.py +++ b/coverage/html.py @@ -69,7 +69,7 @@ def write_html(fname: str, html: str) -> None: """Write `html` to `fname`, properly encoded.""" html = re.sub(r"(\A\s+)|(\s+$)", "", html, flags=re.MULTILINE) + "\n" with open(fname, "wb") as fout: - fout.write(html.encode('ascii', 'xmlcharrefreplace')) + fout.write(html.encode("ascii", "xmlcharrefreplace")) @dataclass @@ -132,11 +132,11 @@ def data_for_file(self, fr: FileReporter, analysis: Analysis) -> FileData: long_annotations = [] if lineno in analysis.excluded: - category = 'exc' + category = "exc" elif lineno in analysis.missing: - category = 'mis' + category = "mis" elif self.has_arcs and lineno in missing_branch_arcs: - category = 'par' + category = "par" for b in missing_branch_arcs[lineno]: if b < 0: short_annotations.append("exit") @@ -144,7 +144,7 @@ def data_for_file(self, fr: FileReporter, analysis: Analysis) -> FileData: short_annotations.append(str(b)) long_annotations.append(fr.missing_arc_description(lineno, b, arcs_executed)) elif lineno in analysis.statements: - category = 'run' + category = "run" contexts = [] contexts_label = "" @@ -236,26 +236,26 @@ def __init__(self, cov: Coverage) -> None: self.template_globals = { # Functions available in the templates. - 'escape': escape, - 'pair': pair, - 'len': len, + "escape": escape, + "pair": pair, + "len": len, # Constants for this report. - '__url__': __url__, - '__version__': coverage.__version__, - 'title': title, - 'time_stamp': format_local_datetime(datetime.datetime.now()), - 'extra_css': self.extra_css, - 'has_arcs': self.has_arcs, - 'show_contexts': self.config.show_contexts, + "__url__": __url__, + "__version__": coverage.__version__, + "title": title, + "time_stamp": format_local_datetime(datetime.datetime.now()), + "extra_css": self.extra_css, + "has_arcs": self.has_arcs, + "show_contexts": self.config.show_contexts, # Constants for all reports. # These css classes determine which lines are highlighted by default. - 'category': { - 'exc': 'exc show_exc', - 'mis': 'mis show_mis', - 'par': 'par run show_par', - 'run': 'run', + "category": { + "exc": "exc show_exc", + "mis": "mis show_mis", + "par": "par run show_par", + "run": "run", }, } self.pyfile_html_source = read_data("pyfile.html") @@ -384,9 +384,9 @@ def write_html_file(self, ftr: FileToReport, prev_html: str, next_html: str) -> if tok_type == "ws": html_parts.append(escape(tok_text)) else: - tok_html = escape(tok_text) or ' ' + tok_html = escape(tok_text) or " " html_parts.append(f'<span class="{tok_type}">{tok_html}</span>') - ldata.html = ''.join(html_parts) + ldata.html = "".join(html_parts) ldata.context_str = ",".join( str(context_codes[c_context]) for c_context in ldata.context_list ) @@ -419,24 +419,24 @@ def write_html_file(self, ftr: FileToReport, prev_html: str, next_html: str) -> css_classes = [] if ldata.category: css_classes.append( - self.template_globals['category'][ldata.category] # type: ignore[index] + self.template_globals["category"][ldata.category] # type: ignore[index] ) - ldata.css_class = ' '.join(css_classes) or "pln" + ldata.css_class = " ".join(css_classes) or "pln" html_path = os.path.join(self.directory, ftr.html_filename) html = self.source_tmpl.render({ **file_data.__dict__, "contexts_json": contexts_json, - 'prev_html': prev_html, - 'next_html': next_html, + "prev_html": prev_html, + "next_html": next_html, }) write_html(html_path, html) # Save this file's information for the index file. index_info: IndexInfoDict = { - 'nums': ftr.analysis.numbers, - 'html_filename': ftr.html_filename, - 'relative_filename': ftr.fr.relative_filename(), + "nums": ftr.analysis.numbers, + "html_filename": ftr.html_filename, + "relative_filename": ftr.fr.relative_filename(), } self.file_summaries.append(index_info) self.incr.set_index_info(ftr.rootname, index_info) @@ -455,12 +455,12 @@ def index_file(self, first_html: str, final_html: str) -> None: skipped_empty_msg = f"{n} empty file{plural(n)} skipped." html = index_tmpl.render({ - 'files': self.file_summaries, - 'totals': self.totals, - 'skipped_covered_msg': skipped_covered_msg, - 'skipped_empty_msg': skipped_empty_msg, - 'first_html': first_html, - 'final_html': final_html, + "files": self.file_summaries, + "totals": self.totals, + "skipped_covered_msg": skipped_covered_msg, + "skipped_empty_msg": skipped_empty_msg, + "first_html": first_html, + "final_html": final_html, }) index_file = os.path.join(self.directory, "index.html") @@ -510,7 +510,7 @@ def __init__(self, directory: str) -> None: def reset(self) -> None: """Initialize to empty. Causes all files to be reported.""" - self.globals = '' + self.globals = "" self.files: Dict[str, FileInfoDict] = {} def read(self) -> None: @@ -524,17 +524,17 @@ def read(self) -> None: usable = False else: usable = True - if status['format'] != self.STATUS_FORMAT: + if status["format"] != self.STATUS_FORMAT: usable = False - elif status['version'] != coverage.__version__: + elif status["version"] != coverage.__version__: usable = False if usable: self.files = {} - for filename, fileinfo in status['files'].items(): - fileinfo['index']['nums'] = Numbers(*fileinfo['index']['nums']) + for filename, fileinfo in status["files"].items(): + fileinfo["index"]["nums"] = Numbers(*fileinfo["index"]["nums"]) self.files[filename] = fileinfo - self.globals = status['globals'] + self.globals = status["globals"] else: self.reset() @@ -543,18 +543,18 @@ def write(self) -> None: status_file = os.path.join(self.directory, self.STATUS_FILE) files = {} for filename, fileinfo in self.files.items(): - index = fileinfo['index'] - index['nums'] = index['nums'].init_args() # type: ignore[typeddict-item] + index = fileinfo["index"] + index["nums"] = index["nums"].init_args() # type: ignore[typeddict-item] files[filename] = fileinfo status = { - 'format': self.STATUS_FORMAT, - 'version': coverage.__version__, - 'globals': self.globals, - 'files': files, + "format": self.STATUS_FORMAT, + "version": coverage.__version__, + "globals": self.globals, + "files": files, } with open(status_file, "w") as fout: - json.dump(status, fout, separators=(',', ':')) + json.dump(status, fout, separators=(",", ":")) def check_global_data(self, *data: Any) -> None: """Check the global data that can affect incremental reporting.""" @@ -573,7 +573,7 @@ def can_skip_file(self, data: CoverageData, fr: FileReporter, rootname: str) -> `rootname` is the name being used for the file. """ m = Hasher() - m.update(fr.source().encode('utf-8')) + m.update(fr.source().encode("utf-8")) add_data_to_hash(data, fr.filename, m) this_hash = m.hexdigest() @@ -588,19 +588,19 @@ def can_skip_file(self, data: CoverageData, fr: FileReporter, rootname: str) -> def file_hash(self, fname: str) -> str: """Get the hash of `fname`'s contents.""" - return self.files.get(fname, {}).get('hash', '') # type: ignore[call-overload] + return self.files.get(fname, {}).get("hash", "") # type: ignore[call-overload] def set_file_hash(self, fname: str, val: str) -> None: """Set the hash of `fname`'s contents.""" - self.files.setdefault(fname, {})['hash'] = val # type: ignore[typeddict-item] + self.files.setdefault(fname, {})["hash"] = val # type: ignore[typeddict-item] def index_info(self, fname: str) -> IndexInfoDict: """Get the information for index.html for `fname`.""" - return self.files.get(fname, {}).get('index', {}) # type: ignore + return self.files.get(fname, {}).get("index", {}) # type: ignore def set_index_info(self, fname: str, info: IndexInfoDict) -> None: """Set the information for index.html for `fname`.""" - self.files.setdefault(fname, {})['index'] = info # type: ignore[typeddict-item] + self.files.setdefault(fname, {})["index"] = info # type: ignore[typeddict-item] # Helpers for templates and generating HTML diff --git a/coverage/jsonreport.py b/coverage/jsonreport.py index 7ee1fb99f..24e33585c 100644 --- a/coverage/jsonreport.py +++ b/coverage/jsonreport.py @@ -60,20 +60,20 @@ def report(self, morfs: Optional[Iterable[TMorf]], outfile: IO[str]) -> float: self.report_data["files"] = measured_files self.report_data["totals"] = { - 'covered_lines': self.total.n_executed, - 'num_statements': self.total.n_statements, - 'percent_covered': self.total.pc_covered, - 'percent_covered_display': self.total.pc_covered_str, - 'missing_lines': self.total.n_missing, - 'excluded_lines': self.total.n_excluded, + "covered_lines": self.total.n_executed, + "num_statements": self.total.n_statements, + "percent_covered": self.total.pc_covered, + "percent_covered_display": self.total.pc_covered_str, + "missing_lines": self.total.n_missing, + "excluded_lines": self.total.n_excluded, } if coverage_data.has_arcs(): self.report_data["totals"].update({ - 'num_branches': self.total.n_branches, - 'num_partial_branches': self.total.n_partial_branches, - 'covered_branches': self.total.n_executed_branches, - 'missing_branches': self.total.n_missing_branches, + "num_branches": self.total.n_branches, + "num_partial_branches": self.total.n_partial_branches, + "covered_branches": self.total.n_executed_branches, + "missing_branches": self.total.n_missing_branches, }) json.dump( @@ -89,32 +89,32 @@ def report_one_file(self, coverage_data: CoverageData, analysis: Analysis) -> Di nums = analysis.numbers self.total += nums summary = { - 'covered_lines': nums.n_executed, - 'num_statements': nums.n_statements, - 'percent_covered': nums.pc_covered, - 'percent_covered_display': nums.pc_covered_str, - 'missing_lines': nums.n_missing, - 'excluded_lines': nums.n_excluded, + "covered_lines": nums.n_executed, + "num_statements": nums.n_statements, + "percent_covered": nums.pc_covered, + "percent_covered_display": nums.pc_covered_str, + "missing_lines": nums.n_missing, + "excluded_lines": nums.n_excluded, } reported_file = { - 'executed_lines': sorted(analysis.executed), - 'summary': summary, - 'missing_lines': sorted(analysis.missing), - 'excluded_lines': sorted(analysis.excluded), + "executed_lines": sorted(analysis.executed), + "summary": summary, + "missing_lines": sorted(analysis.missing), + "excluded_lines": sorted(analysis.excluded), } if self.config.json_show_contexts: - reported_file['contexts'] = analysis.data.contexts_by_lineno(analysis.filename) + reported_file["contexts"] = analysis.data.contexts_by_lineno(analysis.filename) if coverage_data.has_arcs(): summary.update({ - 'num_branches': nums.n_branches, - 'num_partial_branches': nums.n_partial_branches, - 'covered_branches': nums.n_executed_branches, - 'missing_branches': nums.n_missing_branches, + "num_branches": nums.n_branches, + "num_partial_branches": nums.n_partial_branches, + "covered_branches": nums.n_executed_branches, + "missing_branches": nums.n_missing_branches, }) - reported_file['executed_branches'] = list( + reported_file["executed_branches"] = list( _convert_branch_arcs(analysis.executed_branch_arcs()) ) - reported_file['missing_branches'] = list( + reported_file["missing_branches"] = list( _convert_branch_arcs(analysis.missing_branch_arcs()) ) return reported_file diff --git a/coverage/lcovreport.py b/coverage/lcovreport.py index 1789c17e6..7d72e8135 100644 --- a/coverage/lcovreport.py +++ b/coverage/lcovreport.py @@ -33,7 +33,7 @@ def __init__(self, coverage: Coverage) -> None: def report(self, morfs: Optional[Iterable[TMorf]], outfile: IO[str]) -> float: """Renders the full lcov report. - 'morfs' is a list of modules or filenames + `morfs` is a list of modules or filenames outfile is the file object to write the file into. """ diff --git a/coverage/summary.py b/coverage/summary.py index c4c7fd1de..5d373ec52 100644 --- a/coverage/summary.py +++ b/coverage/summary.py @@ -137,8 +137,8 @@ def _report_markdown( max_n = max(len(total_line[header.index("Cover")]) + 6, len(" Cover ")) header_items = [formats[item].format(item, name_len=max_name, n=max_n) for item in header] header_str = "".join(header_items) - rule_str = "|" + " ".join(["- |".rjust(len(header_items[0])-1, '-')] + - ["-: |".rjust(len(item)-1, '-') for item in header_items[1:]] + rule_str = "|" + " ".join(["- |".rjust(len(header_items[0])-1, "-")] + + ["-: |".rjust(len(item)-1, "-") for item in header_items[1:]] ) # Write the header @@ -223,10 +223,10 @@ def tabular_report(self) -> None: # Line sorting. sort_option = (self.config.sort or "name").lower() reverse = False - if sort_option[0] == '-': + if sort_option[0] == "-": reverse = True sort_option = sort_option[1:] - elif sort_option[0] == '+': + elif sort_option[0] == "+": sort_option = sort_option[1:] sort_idx = column_order.get(sort_option) if sort_idx is None: @@ -250,12 +250,12 @@ def tabular_report(self) -> None: # Create other final lines. end_lines = [] if self.config.skip_covered and self.skipped_count: - file_suffix = 's' if self.skipped_count>1 else '' + file_suffix = "s" if self.skipped_count>1 else "" end_lines.append( f"\n{self.skipped_count} file{file_suffix} skipped due to complete coverage." ) if self.config.skip_empty and self.empty_count: - file_suffix = 's' if self.empty_count > 1 else '' + file_suffix = "s" if self.empty_count > 1 else "" end_lines.append(f"\n{self.empty_count} empty file{file_suffix} skipped.") if self.output_format == "markdown": diff --git a/coverage/xmlreport.py b/coverage/xmlreport.py index fd2e9f81b..2c8fd0cc1 100644 --- a/coverage/xmlreport.py +++ b/coverage/xmlreport.py @@ -28,7 +28,7 @@ os = isolate_module(os) -DTD_URL = 'https://raw.githubusercontent.com/cobertura/web/master/htdocs/xml/coverage-04.dtd' +DTD_URL = "https://raw.githubusercontent.com/cobertura/web/master/htdocs/xml/coverage-04.dtd" def rate(hit: int, num: int) -> str: @@ -127,7 +127,7 @@ def report(self, morfs: Optional[Iterable[TMorf]], outfile: Optional[IO[str]] = appendChild(xpackage, xclasses) for _, class_elt in human_sorted_items(pkg_data.elements.items()): appendChild(xclasses, class_elt) - xpackage.setAttribute("name", pkg_name.replace(os.sep, '.')) + xpackage.setAttribute("name", pkg_name.replace(os.sep, ".")) xpackage.setAttribute("line-rate", rate(pkg_data.hits, pkg_data.lines)) if has_arcs: branch_rate = rate(pkg_data.br_hits, pkg_data.branches) @@ -172,7 +172,7 @@ def xml_file(self, fr: FileReporter, analysis: Analysis, has_arcs: bool) -> None if analysis.numbers.n_statements == 0: return - # Create the 'lines' and 'package' XML elements, which + # Create the "lines" and "package" XML elements, which # are populated later. Note that a package == a directory. filename = fr.filename.replace("\\", "/") for source_path in self.source_paths: @@ -205,7 +205,7 @@ def xml_file(self, fr: FileReporter, analysis: Analysis, has_arcs: bool) -> None branch_stats = analysis.branch_stats() missing_branch_arcs = analysis.missing_branch_arcs() - # For each statement, create an XML 'line' element. + # For each statement, create an XML "line" element. for line in sorted(analysis.statements): xline = self.xml_out.createElement("line") xline.setAttribute("number", str(line)) From 5a94109e646870aef6188de25ba314f73fa1245d Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Wed, 22 Mar 2023 14:30:42 -0400 Subject: [PATCH 125/139] build: update .git-blame-ignore-revs --- .git-blame-ignore-revs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs index daa5f19d0..bbda8b6c1 100644 --- a/.git-blame-ignore-revs +++ b/.git-blame-ignore-revs @@ -5,3 +5,6 @@ # 2023-01-06 style(perf): blacken lab/benchmark.py bf6c12f5da54db7c5c0cc47cbf22c70f686e8236 + +# 2023-03-22 style: use double-quotes +16abd82b6e87753184e8308c4b2606ff3979f8d3 From b7be64538aa480fce641349d3053e9a84862d571 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Wed, 22 Mar 2023 17:12:30 -0400 Subject: [PATCH 126/139] style: double quotes --- coverage/config.py | 126 ++++++++++++++++++------------------- coverage/control.py | 74 +++++++++++----------- coverage/data.py | 6 +- coverage/debug.py | 28 ++++----- coverage/env.py | 18 +++--- coverage/execfile.py | 10 +-- coverage/files.py | 6 +- coverage/inorout.py | 34 +++++----- coverage/misc.py | 14 ++--- coverage/multiproc.py | 6 +- coverage/numbits.py | 6 +- coverage/parser.py | 12 ++-- coverage/phystokens.py | 12 ++-- coverage/plugin.py | 22 +++---- coverage/plugin_support.py | 4 +- coverage/python.py | 16 ++--- coverage/pytracer.py | 20 +++--- coverage/results.py | 2 +- coverage/templite.py | 38 +++++------ coverage/version.py | 6 +- 20 files changed, 230 insertions(+), 230 deletions(-) diff --git a/coverage/config.py b/coverage/config.py index 9518e5356..1edbe0de4 100644 --- a/coverage/config.py +++ b/coverage/config.py @@ -114,8 +114,8 @@ def getlist(self, section: str, option: str) -> List[str]: """ value_list = self.get(section, option) values = [] - for value_line in value_list.split('\n'): - for value in value_line.split(','): + for value_line in value_list.split("\n"): + for value in value_line.split(","): value = value.strip() if value: values.append(value) @@ -150,20 +150,20 @@ def getregexlist(self, section: str, option: str) -> List[str]: # The default line exclusion regexes. DEFAULT_EXCLUDE = [ - r'#\s*(pragma|PRAGMA)[:\s]?\s*(no|NO)\s*(cover|COVER)', + r"#\s*(pragma|PRAGMA)[:\s]?\s*(no|NO)\s*(cover|COVER)", ] # The default partial branch regexes, to be modified by the user. DEFAULT_PARTIAL = [ - r'#\s*(pragma|PRAGMA)[:\s]?\s*(no|NO)\s*(branch|BRANCH)', + r"#\s*(pragma|PRAGMA)[:\s]?\s*(no|NO)\s*(branch|BRANCH)", ] # The default partial branch regexes, based on Python semantics. # These are any Python branching constructs that can't actually execute all # their branches. DEFAULT_PARTIAL_ALWAYS = [ - 'while (True|1|False|0):', - 'if (True|1|False|0):', + "while (True|1|False|0):", + "if (True|1|False|0):", ] @@ -286,7 +286,7 @@ def from_file(self, filename: str, warn: Callable[[str], None], our_file: bool) """ _, ext = os.path.splitext(filename) cp: TConfigParser - if ext == '.toml': + if ext == ".toml": cp = TomlConfigParser(our_file) else: cp = HandyConfigParser(our_file) @@ -328,9 +328,9 @@ def from_file(self, filename: str, warn: Callable[[str], None], our_file: bool) ) # [paths] is special - if cp.has_section('paths'): - for option in cp.options('paths'): - self.paths[option] = cp.getlist('paths', option) + if cp.has_section("paths"): + for option in cp.options("paths"): + self.paths[option] = cp.getlist("paths", option) any_set = True # plugins can have options @@ -370,64 +370,64 @@ def copy(self) -> CoverageConfig: # configuration value from the file. # [run] - ('branch', 'run:branch', 'boolean'), - ('command_line', 'run:command_line'), - ('concurrency', 'run:concurrency', 'list'), - ('context', 'run:context'), - ('cover_pylib', 'run:cover_pylib', 'boolean'), - ('data_file', 'run:data_file'), - ('debug', 'run:debug', 'list'), - ('debug_file', 'run:debug_file'), - ('disable_warnings', 'run:disable_warnings', 'list'), - ('dynamic_context', 'run:dynamic_context'), - ('parallel', 'run:parallel', 'boolean'), - ('plugins', 'run:plugins', 'list'), - ('relative_files', 'run:relative_files', 'boolean'), - ('run_include', 'run:include', 'list'), - ('run_omit', 'run:omit', 'list'), - ('sigterm', 'run:sigterm', 'boolean'), - ('source', 'run:source', 'list'), - ('source_pkgs', 'run:source_pkgs', 'list'), - ('timid', 'run:timid', 'boolean'), - ('_crash', 'run:_crash'), + ("branch", "run:branch", "boolean"), + ("command_line", "run:command_line"), + ("concurrency", "run:concurrency", "list"), + ("context", "run:context"), + ("cover_pylib", "run:cover_pylib", "boolean"), + ("data_file", "run:data_file"), + ("debug", "run:debug", "list"), + ("debug_file", "run:debug_file"), + ("disable_warnings", "run:disable_warnings", "list"), + ("dynamic_context", "run:dynamic_context"), + ("parallel", "run:parallel", "boolean"), + ("plugins", "run:plugins", "list"), + ("relative_files", "run:relative_files", "boolean"), + ("run_include", "run:include", "list"), + ("run_omit", "run:omit", "list"), + ("sigterm", "run:sigterm", "boolean"), + ("source", "run:source", "list"), + ("source_pkgs", "run:source_pkgs", "list"), + ("timid", "run:timid", "boolean"), + ("_crash", "run:_crash"), # [report] - ('exclude_list', 'report:exclude_lines', 'regexlist'), - ('exclude_also', 'report:exclude_also', 'regexlist'), - ('fail_under', 'report:fail_under', 'float'), - ('format', 'report:format', 'boolean'), - ('ignore_errors', 'report:ignore_errors', 'boolean'), - ('include_namespace_packages', 'report:include_namespace_packages', 'boolean'), - ('partial_always_list', 'report:partial_branches_always', 'regexlist'), - ('partial_list', 'report:partial_branches', 'regexlist'), - ('precision', 'report:precision', 'int'), - ('report_contexts', 'report:contexts', 'list'), - ('report_include', 'report:include', 'list'), - ('report_omit', 'report:omit', 'list'), - ('show_missing', 'report:show_missing', 'boolean'), - ('skip_covered', 'report:skip_covered', 'boolean'), - ('skip_empty', 'report:skip_empty', 'boolean'), - ('sort', 'report:sort'), + ("exclude_list", "report:exclude_lines", "regexlist"), + ("exclude_also", "report:exclude_also", "regexlist"), + ("fail_under", "report:fail_under", "float"), + ("format", "report:format", "boolean"), + ("ignore_errors", "report:ignore_errors", "boolean"), + ("include_namespace_packages", "report:include_namespace_packages", "boolean"), + ("partial_always_list", "report:partial_branches_always", "regexlist"), + ("partial_list", "report:partial_branches", "regexlist"), + ("precision", "report:precision", "int"), + ("report_contexts", "report:contexts", "list"), + ("report_include", "report:include", "list"), + ("report_omit", "report:omit", "list"), + ("show_missing", "report:show_missing", "boolean"), + ("skip_covered", "report:skip_covered", "boolean"), + ("skip_empty", "report:skip_empty", "boolean"), + ("sort", "report:sort"), # [html] - ('extra_css', 'html:extra_css'), - ('html_dir', 'html:directory'), - ('html_skip_covered', 'html:skip_covered', 'boolean'), - ('html_skip_empty', 'html:skip_empty', 'boolean'), - ('html_title', 'html:title'), - ('show_contexts', 'html:show_contexts', 'boolean'), + ("extra_css", "html:extra_css"), + ("html_dir", "html:directory"), + ("html_skip_covered", "html:skip_covered", "boolean"), + ("html_skip_empty", "html:skip_empty", "boolean"), + ("html_title", "html:title"), + ("show_contexts", "html:show_contexts", "boolean"), # [xml] - ('xml_output', 'xml:output'), - ('xml_package_depth', 'xml:package_depth', 'int'), + ("xml_output", "xml:output"), + ("xml_package_depth", "xml:package_depth", "int"), # [json] - ('json_output', 'json:output'), - ('json_pretty_print', 'json:pretty_print', 'boolean'), - ('json_show_contexts', 'json:show_contexts', 'boolean'), + ("json_output", "json:output"), + ("json_pretty_print", "json:pretty_print", "boolean"), + ("json_show_contexts", "json:show_contexts", "boolean"), # [lcov] - ('lcov_output', 'lcov:output'), + ("lcov_output", "lcov:output"), ] def _set_attr_from_config_option( @@ -435,7 +435,7 @@ def _set_attr_from_config_option( cp: TConfigParser, attr: str, where: str, - type_: str = '', + type_: str = "", ) -> bool: """Set an attribute on self if it exists in the ConfigParser. @@ -444,7 +444,7 @@ def _set_attr_from_config_option( """ section, option = where.split(":") if cp.has_option(section, option): - method = getattr(cp, 'get' + type_) + method = getattr(cp, "get" + type_) setattr(self, attr, method(section, option)) return True return False @@ -548,7 +548,7 @@ def config_files_to_try(config_file: Union[bool, str]) -> List[Tuple[str, bool, specified_file = (config_file is not True) if not specified_file: # No file was specified. Check COVERAGE_RCFILE. - rcfile = os.environ.get('COVERAGE_RCFILE') + rcfile = os.environ.get("COVERAGE_RCFILE") if rcfile: config_file = rcfile specified_file = True @@ -602,10 +602,10 @@ def read_coverage_config( # $set_env.py: COVERAGE_DEBUG - Options for --debug. # 3) from environment variables: - env_data_file = os.environ.get('COVERAGE_FILE') + env_data_file = os.environ.get("COVERAGE_FILE") if env_data_file: config.data_file = env_data_file - debugs = os.environ.get('COVERAGE_DEBUG') + debugs = os.environ.get("COVERAGE_DEBUG") if debugs: config.debug.extend(d.strip() for d in debugs.split(",")) diff --git a/coverage/control.py b/coverage/control.py index 290da655c..acce622d3 100644 --- a/coverage/control.py +++ b/coverage/control.py @@ -84,7 +84,7 @@ class Coverage(TConfigurable): cov.start() #.. call your code .. cov.stop() - cov.html_report(directory='covhtml') + cov.html_report(directory="covhtml") Note: in keeping with Python custom, names starting with underscore are not part of the public API. They might stop working at any point. Please @@ -343,7 +343,7 @@ def _post_init(self) -> None: self._should_write_debug = False self._write_startup_debug() - # '[run] _crash' will raise an exception if the value is close by in + # "[run] _crash" will raise an exception if the value is close by in # the call stack, for testing error handling. if self.config._crash and self.config._crash in short_stack(limit=4): raise RuntimeError(f"Crashing because called by {self.config._crash}") @@ -380,7 +380,7 @@ def _should_trace(self, filename: str, frame: FrameType) -> TFileDisposition: """ assert self._inorout is not None disp = self._inorout.should_trace(filename, frame) - if self._debug.should('trace'): + if self._debug.should("trace"): self._debug.write(disposition_debug_msg(disp)) return disp @@ -392,7 +392,7 @@ def _check_include_omit_etc(self, filename: str, frame: FrameType) -> bool: """ assert self._inorout is not None reason = self._inorout.check_include_omit_etc(filename, frame) - if self._debug.should('trace'): + if self._debug.should("trace"): if not reason: msg = f"Including {filename!r}" else: @@ -420,7 +420,7 @@ def _warn(self, msg: str, slug: Optional[str] = None, once: bool = False) -> Non self._warnings.append(msg) if slug: msg = f"{msg} ({slug})" - if self._debug.should('pid'): + if self._debug.should("pid"): msg = f"[{os.getpid()}] {msg}" warnings.warn(msg, category=CoverageWarning, stacklevel=2) @@ -566,7 +566,7 @@ def _init_for_start(self) -> None: self._inorout = InOrOut( config=self.config, warn=self._warn, - debug=(self._debug if self._debug.should('trace') else None), + debug=(self._debug if self._debug.should("trace") else None), include_namespace_packages=self.config.include_namespace_packages, ) self._inorout.plugins = self._plugins @@ -703,13 +703,13 @@ def switch_context(self, new_context: str) -> None: self._collector.switch_context(new_context) - def clear_exclude(self, which: str = 'exclude') -> None: + def clear_exclude(self, which: str = "exclude") -> None: """Clear the exclude list.""" self._init() setattr(self.config, which + "_list", []) self._exclude_regex_stale() - def exclude(self, regex: str, which: str = 'exclude') -> None: + def exclude(self, regex: str, which: str = "exclude") -> None: """Exclude source lines from execution consideration. A number of lists of regular expressions are maintained. Each list @@ -740,7 +740,7 @@ def _exclude_regex(self, which: str) -> str: self._exclude_re[which] = join_regex(excl_list) return self._exclude_re[which] - def get_exclude_list(self, which: str = 'exclude') -> List[str]: + def get_exclude_list(self, which: str = "exclude") -> List[str]: """Return a list of excluded regex strings. `which` indicates which list is desired. See :meth:`exclude` for the @@ -969,7 +969,7 @@ def _get_file_reporters(self, morfs: Optional[Iterable[TMorf]] = None) -> List[F return file_reporters def _prepare_data_for_reporting(self) -> None: - """Re-map data before reporting, to get implicit 'combine' behavior.""" + """Re-map data before reporting, to get implicit "combine" behavior.""" if self.config.paths: mapped_data = CoverageData(warn=self._warn, debug=self._debug, no_disk=True) if self._data is not None: @@ -1238,10 +1238,10 @@ def lcov_report( ) -> float: """Generate an LCOV report of coverage results. - Each module in 'morfs' is included in the report. 'outfile' is the + Each module in `morfs` is included in the report. `outfile` is the path to write the file to, "-" will write to stdout. - See :meth 'report' for other arguments. + See :meth:`report` for other arguments. .. versionadded:: 6.3 """ @@ -1275,30 +1275,30 @@ def plugin_info(plugins: List[Any]) -> List[str]: return entries info = [ - ('coverage_version', covmod.__version__), - ('coverage_module', covmod.__file__), - ('tracer', self._collector.tracer_name() if self._collector is not None else "-none-"), - ('CTracer', 'available' if HAS_CTRACER else "unavailable"), - ('plugins.file_tracers', plugin_info(self._plugins.file_tracers)), - ('plugins.configurers', plugin_info(self._plugins.configurers)), - ('plugins.context_switchers', plugin_info(self._plugins.context_switchers)), - ('configs_attempted', self.config.attempted_config_files), - ('configs_read', self.config.config_files_read), - ('config_file', self.config.config_file), - ('config_contents', - repr(self.config._config_contents) if self.config._config_contents else '-none-' + ("coverage_version", covmod.__version__), + ("coverage_module", covmod.__file__), + ("tracer", self._collector.tracer_name() if self._collector is not None else "-none-"), + ("CTracer", "available" if HAS_CTRACER else "unavailable"), + ("plugins.file_tracers", plugin_info(self._plugins.file_tracers)), + ("plugins.configurers", plugin_info(self._plugins.configurers)), + ("plugins.context_switchers", plugin_info(self._plugins.context_switchers)), + ("configs_attempted", self.config.attempted_config_files), + ("configs_read", self.config.config_files_read), + ("config_file", self.config.config_file), + ("config_contents", + repr(self.config._config_contents) if self.config._config_contents else "-none-" ), - ('data_file', self._data.data_filename() if self._data is not None else "-none-"), - ('python', sys.version.replace('\n', '')), - ('platform', platform.platform()), - ('implementation', platform.python_implementation()), - ('executable', sys.executable), - ('def_encoding', sys.getdefaultencoding()), - ('fs_encoding', sys.getfilesystemencoding()), - ('pid', os.getpid()), - ('cwd', os.getcwd()), - ('path', sys.path), - ('environment', human_sorted( + ("data_file", self._data.data_filename() if self._data is not None else "-none-"), + ("python", sys.version.replace("\n", "")), + ("platform", platform.platform()), + ("implementation", platform.python_implementation()), + ("executable", sys.executable), + ("def_encoding", sys.getdefaultencoding()), + ("fs_encoding", sys.getfilesystemencoding()), + ("pid", os.getpid()), + ("cwd", os.getcwd()), + ("path", sys.path), + ("environment", human_sorted( f"{k} = {v}" for k, v in os.environ.items() if ( @@ -1306,7 +1306,7 @@ def plugin_info(plugins: List[Any]) -> List[str]: (k in ("HOME", "TEMP", "TMP")) ) )), - ('command_line', " ".join(getattr(sys, 'argv', ['-none-']))), + ("command_line", " ".join(getattr(sys, "argv", ["-none-"]))), ] if self._inorout is not None: @@ -1324,7 +1324,7 @@ def plugin_info(plugins: List[Any]) -> List[str]: Coverage = decorate_methods( # type: ignore[misc] show_calls(show_args=True), - butnot=['get_data'] + butnot=["get_data"] )(Coverage) diff --git a/coverage/data.py b/coverage/data.py index c737d5939..c196ac7ab 100644 --- a/coverage/data.py +++ b/coverage/data.py @@ -133,7 +133,7 @@ def combine_parallel_data( if f == data.data_filename(): # Sometimes we are combining into a file which is one of the # parallel files. Skip that file. - if data._debug.should('dataio'): + if data._debug.should("dataio"): data._debug.write(f"Skipping combining ourself: {f!r}") continue @@ -153,7 +153,7 @@ def combine_parallel_data( delete_this_one = not keep if combine_this_one: - if data._debug.should('dataio'): + if data._debug.should("dataio"): data._debug.write(f"Combining data file {f!r}") file_hashes.add(sha) try: @@ -177,7 +177,7 @@ def combine_parallel_data( message(f"Skipping duplicate data {rel_file_name}") if delete_this_one: - if data._debug.should('dataio'): + if data._debug.should("dataio"): data._debug.write(f"Deleting data file {f!r}") file_be_gone(f) diff --git a/coverage/debug.py b/coverage/debug.py index d56a66bb8..3ef6dae8a 100644 --- a/coverage/debug.py +++ b/coverage/debug.py @@ -50,12 +50,12 @@ def __init__( self.suppress_callers = False filters = [] - if self.should('pid'): + if self.should("pid"): filters.append(add_pid_and_tid) self.output = DebugOutputFile.get_one( output, file_name=file_name, - show_process=self.should('process'), + show_process=self.should("process"), filters=filters, ) self.raw_output = self.output.outfile @@ -86,11 +86,11 @@ def write(self, msg: str) -> None: """ self.output.write(msg+"\n") - if self.should('self'): - caller_self = inspect.stack()[1][0].f_locals.get('self') + if self.should("self"): + caller_self = inspect.stack()[1][0].f_locals.get("self") if caller_self is not None: self.output.write(f"self: {caller_self!r}\n") - if self.should('callers'): + if self.should("callers"): dump_stack_frames(out=self.output, skip=1) self.output.flush() @@ -228,7 +228,7 @@ def add_pid_and_tid(text: str) -> str: class AutoReprMixin: """A mixin implementing an automatic __repr__ for debugging.""" - auto_repr_ignore = ['auto_repr_ignore', '$coverage.object_id'] + auto_repr_ignore = ["auto_repr_ignore", "$coverage.object_id"] def __repr__(self) -> str: show_attrs = ( @@ -251,7 +251,7 @@ def simplify(v: Any) -> Any: # pragma: debugging elif isinstance(v, (list, tuple)): return type(v)(simplify(vv) for vv in v) elif hasattr(v, "__dict__"): - return simplify({'.'+k: v for k, v in v.__dict__.items()}) + return simplify({"."+k: v for k, v in v.__dict__.items()}) else: return v @@ -312,8 +312,8 @@ def __init__( if self.show_process: self.filters.insert(0, CwdTracker().filter) self.write(f"New process: executable: {sys.executable!r}\n") - self.write("New process: cmd: {!r}\n".format(getattr(sys, 'argv', None))) - if hasattr(os, 'getppid'): + self.write("New process: cmd: {!r}\n".format(getattr(sys, "argv", None))) + if hasattr(os, "getppid"): self.write(f"New process: pid: {os.getpid()!r}, parent pid: {os.getppid()!r}\n") @classmethod @@ -367,8 +367,8 @@ def get_one( # a process-wide singleton. So stash it in sys.modules instead of # on a class attribute. Yes, this is aggressively gross. - SYS_MOD_NAME = '$coverage.debug.DebugOutputFile.the_one' - SINGLETON_ATTR = 'the_one_and_is_interim' + SYS_MOD_NAME = "$coverage.debug.DebugOutputFile.the_one" + SINGLETON_ATTR = "the_one_and_is_interim" @classmethod def _set_singleton_data(cls, the_one: DebugOutputFile, interim: bool) -> None: @@ -485,7 +485,7 @@ def _wrapper(self: Any, *args: Any, **kwargs: Any) -> Any: def _clean_stack_line(s: str) -> str: # pragma: debugging """Simplify some paths in a stack trace, for compactness.""" s = s.strip() - s = s.replace(os.path.dirname(__file__) + '/', '') - s = s.replace(os.path.dirname(os.__file__) + '/', '') - s = s.replace(sys.prefix + '/', '') + s = s.replace(os.path.dirname(__file__) + "/", "") + s = s.replace(os.path.dirname(os.__file__) + "/", "") + s = s.replace(sys.prefix + "/", "") return s diff --git a/coverage/env.py b/coverage/env.py index b22292818..bdc2c7854 100644 --- a/coverage/env.py +++ b/coverage/env.py @@ -40,7 +40,7 @@ class PYBEHAVIOR: # Does Python conform to PEP626, Precise line numbers for debugging and other tools. # https://www.python.org/dev/peps/pep-0626 - pep626 = CPYTHON and (PYVERSION > (3, 10, 0, 'alpha', 4)) + pep626 = CPYTHON and (PYVERSION > (3, 10, 0, "alpha", 4)) # Is "if __debug__" optimized away? if PYPY: @@ -60,7 +60,7 @@ class PYBEHAVIOR: else: optimize_if_not_debug = 1 else: - if PYVERSION >= (3, 8, 0, 'beta', 1): + if PYVERSION >= (3, 8, 0, "beta", 1): optimize_if_not_debug = 2 else: optimize_if_not_debug = 1 @@ -69,7 +69,7 @@ class PYBEHAVIOR: negative_lnotab = not (PYPY and PYPYVERSION < (7, 2)) # 3.7 changed how functions with only docstrings are numbered. - docstring_only_function = (not PYPY) and ((3, 7, 0, 'beta', 5) <= PYVERSION <= (3, 10)) + docstring_only_function = (not PYPY) and ((3, 7, 0, "beta", 5) <= PYVERSION <= (3, 10)) # When a break/continue/return statement in a try block jumps to a finally # block, does the finally block do the break/continue/return (pre-3.8), or @@ -93,7 +93,7 @@ class PYBEHAVIOR: # CPython 3.11 now jumps to the decorator line again while executing # the decorator. - trace_decorator_line_again = (CPYTHON and PYVERSION > (3, 11, 0, 'alpha', 3, 0)) + trace_decorator_line_again = (CPYTHON and PYVERSION > (3, 11, 0, "alpha", 3, 0)) # Are while-true loops optimized into absolute jumps with no loop setup? nix_while_true = (PYVERSION >= (3, 8)) @@ -125,7 +125,7 @@ class PYBEHAVIOR: keep_constant_test = pep626 # When leaving a with-block, do we visit the with-line again for the exit? - exit_through_with = (PYVERSION >= (3, 10, 0, 'beta')) + exit_through_with = (PYVERSION >= (3, 10, 0, "beta")) # Match-case construct. match_case = (PYVERSION >= (3, 10)) @@ -135,20 +135,20 @@ class PYBEHAVIOR: # Modules start with a line numbered zero. This means empty modules have # only a 0-number line, which is ignored, giving a truly empty module. - empty_is_empty = (PYVERSION >= (3, 11, 0, 'beta', 4)) + empty_is_empty = (PYVERSION >= (3, 11, 0, "beta", 4)) # Coverage.py specifics. # Are we using the C-implemented trace function? -C_TRACER = os.getenv('COVERAGE_TEST_TRACER', 'c') == 'c' +C_TRACER = os.getenv("COVERAGE_TEST_TRACER", "c") == "c" # Are we coverage-measuring ourselves? -METACOV = os.getenv('COVERAGE_COVERAGE', '') != '' +METACOV = os.getenv("COVERAGE_COVERAGE", "") != "" # Are we running our test suite? # Even when running tests, you can use COVERAGE_TESTING=0 to disable the # test-specific behavior like AST checking. -TESTING = os.getenv('COVERAGE_TESTING', '') == 'True' +TESTING = os.getenv("COVERAGE_TESTING", "") == "True" def debug_info() -> Iterable[Tuple[str, Any]]: diff --git a/coverage/execfile.py b/coverage/execfile.py index ef0277d61..aac4d30bb 100644 --- a/coverage/execfile.py +++ b/coverage/execfile.py @@ -172,7 +172,7 @@ def run(self) -> None: self._prepare2() # Create a module to serve as __main__ - main_mod = ModuleType('__main__') + main_mod = ModuleType("__main__") from_pyc = self.arg0.endswith((".pyc", ".pyo")) main_mod.__file__ = self.arg0 @@ -184,9 +184,9 @@ def run(self) -> None: if self.spec is not None: main_mod.__spec__ = self.spec - main_mod.__builtins__ = sys.modules['builtins'] # type: ignore[attr-defined] + main_mod.__builtins__ = sys.modules["builtins"] # type: ignore[attr-defined] - sys.modules['__main__'] = main_mod + sys.modules["__main__"] = main_mod # Set sys.argv properly. sys.argv = self.args @@ -228,7 +228,7 @@ def run(self) -> None: # is non-None when the exception is reported at the upper layer, # and a nested exception is shown to the user. This getattr fixes # it somehow? https://bitbucket.org/pypy/pypy/issue/1903 - getattr(err, '__context__', None) + getattr(err, "__context__", None) # Call the excepthook. try: @@ -311,7 +311,7 @@ def make_code_from_pyc(filename: str) -> CodeType: if magic != PYC_MAGIC_NUMBER: raise NoCode(f"Bad magic number in .pyc file: {magic!r} != {PYC_MAGIC_NUMBER!r}") - flags = struct.unpack('<L', fpyc.read(4))[0] + flags = struct.unpack("<L", fpyc.read(4))[0] hash_based = flags & 0x01 if hash_based: fpyc.read(8) # Skip the hash. diff --git a/coverage/files.py b/coverage/files.py index 962a9d10f..2a1177340 100644 --- a/coverage/files.py +++ b/coverage/files.py @@ -163,7 +163,7 @@ def zip_location(filename: str) -> Optional[Tuple[str, str]]: name is in the zipfile. """ - for ext in ['.zip', '.whl', '.egg', '.pex']: + for ext in [".zip", ".whl", ".egg", ".pex"]: zipbase, extension, inner = filename.partition(ext + sep(filename)) if extension: zipfile = zipbase + ext @@ -273,7 +273,7 @@ def match(self, module_name: str) -> bool: if module_name.startswith(m): if module_name == m: return True - if module_name[len(m)] == '.': + if module_name[len(m)] == ".": # This is a module in the package return True @@ -433,7 +433,7 @@ def add(self, pattern: str, result: str) -> None: # The pattern is meant to match a file path. Let's make it absolute # unless it already is, or is meant to match any prefix. if not self.relative: - if not pattern.startswith('*') and not isabs_anywhere(pattern + pattern_sep): + if not pattern.startswith("*") and not isabs_anywhere(pattern + pattern_sep): pattern = abs_file(pattern) if not pattern.endswith(pattern_sep): pattern += pattern_sep diff --git a/coverage/inorout.py b/coverage/inorout.py index d0d0ef913..ff46bac0d 100644 --- a/coverage/inorout.py +++ b/coverage/inorout.py @@ -83,20 +83,20 @@ def name_for_module(filename: str, frame: Optional[FrameType]) -> str: """ module_globals = frame.f_globals if frame is not None else {} - dunder_name: str = module_globals.get('__name__', None) + dunder_name: str = module_globals.get("__name__", None) - if isinstance(dunder_name, str) and dunder_name != '__main__': + if isinstance(dunder_name, str) and dunder_name != "__main__": # This is the usual case: an imported module. return dunder_name - loader = module_globals.get('__loader__', None) - for attrname in ('fullname', 'name'): # attribute renamed in py3.2 + loader = module_globals.get("__loader__", None) + for attrname in ("fullname", "name"): # attribute renamed in py3.2 if hasattr(loader, attrname): fullname = getattr(loader, attrname) else: continue - if isinstance(fullname, str) and fullname != '__main__': + if isinstance(fullname, str) and fullname != "__main__": # Module loaded via: runpy -m return fullname @@ -110,12 +110,12 @@ def name_for_module(filename: str, frame: Optional[FrameType]) -> str: def module_is_namespace(mod: ModuleType) -> bool: """Is the module object `mod` a PEP420 namespace module?""" - return hasattr(mod, '__path__') and getattr(mod, '__file__', None) is None + return hasattr(mod, "__path__") and getattr(mod, "__file__", None) is None def module_has_file(mod: ModuleType) -> bool: """Does the module object `mod` have an existing __file__ ?""" - mod__file__ = getattr(mod, '__file__', None) + mod__file__ = getattr(mod, "__file__", None) if mod__file__ is None: return False return os.path.exists(mod__file__) @@ -313,7 +313,7 @@ def nope(disp: TFileDisposition, reason: str) -> TFileDisposition: disp.reason = reason return disp - if original_filename.startswith('<'): + if original_filename.startswith("<"): return nope(disp, "original file name is not real") if frame is not None: @@ -323,10 +323,10 @@ def nope(disp: TFileDisposition, reason: str) -> TFileDisposition: # .pyc files can be moved after compilation (for example, by being # installed), we look for __file__ in the frame and prefer it to the # co_filename value. - dunder_file = frame.f_globals and frame.f_globals.get('__file__') + dunder_file = frame.f_globals and frame.f_globals.get("__file__") if dunder_file: filename = source_for_file(dunder_file) - if original_filename and not original_filename.startswith('<'): + if original_filename and not original_filename.startswith("<"): orig = os.path.basename(original_filename) if orig != os.path.basename(filename): # Files shouldn't be renamed when moved. This happens when @@ -338,10 +338,10 @@ def nope(disp: TFileDisposition, reason: str) -> TFileDisposition: # Empty string is pretty useless. return nope(disp, "empty string isn't a file name") - if filename.startswith('memory:'): + if filename.startswith("memory:"): return nope(disp, "memory isn't traceable") - if filename.startswith('<'): + if filename.startswith("<"): # Lots of non-file execution is represented with artificial # file names like "<string>", "<doctest readme.txt[0]>", or # "<exec_function>". Don't ever trace these executions, since we @@ -484,7 +484,7 @@ def warn_already_imported_files(self) -> None: msg = f"Already imported a file that will be measured: {filename}" self.warn(msg, slug="already-imported") warned.add(filename) - elif self.debug and self.debug.should('trace'): + elif self.debug and self.debug.should("trace"): self.debug.write( "Didn't trace already imported file {!r}: {}".format( disp.original_filename, disp.reason @@ -580,9 +580,9 @@ def sys_info(self) -> Iterable[Tuple[str, Any]]: ] matcher_names = [ - 'source_match', 'source_pkgs_match', - 'include_match', 'omit_match', - 'cover_match', 'pylib_match', 'third_match', 'source_in_third_match', + "source_match", "source_pkgs_match", + "include_match", "omit_match", + "cover_match", "pylib_match", "third_match", "source_in_third_match", ] for matcher_name in matcher_names: @@ -590,7 +590,7 @@ def sys_info(self) -> Iterable[Tuple[str, Any]]: if matcher: matcher_info = matcher.info() else: - matcher_info = '-none-' + matcher_info = "-none-" info.append((matcher_name, matcher_info)) return info diff --git a/coverage/misc.py b/coverage/misc.py index e0658eb18..8cefa12e0 100644 --- a/coverage/misc.py +++ b/coverage/misc.py @@ -218,14 +218,14 @@ def update(self, v: Any) -> None: self.update(v[k]) else: for k in dir(v): - if k.startswith('__'): + if k.startswith("__"): continue a = getattr(v, k) if inspect.isroutine(a): continue self.update(k) self.update(a) - self.hash.update(b'.') + self.hash.update(b".") def hexdigest(self) -> str: """Retrieve the hex digest of the hash.""" @@ -292,7 +292,7 @@ def substitute_variables(text: str, variables: Mapping[str, str]) -> str: ) """ - dollar_groups = ('dollar', 'word1', 'word2') + dollar_groups = ("dollar", "word1", "word2") def dollar_replace(match: re.Match[str]) -> str: """Called for each $replacement.""" @@ -302,11 +302,11 @@ def dollar_replace(match: re.Match[str]) -> str: return "$" elif word in variables: return variables[word] - elif match['strict']: + elif match["strict"]: msg = f"Variable {word} is undefined: {text!r}" raise CoverageException(msg) else: - return match['defval'] + return match["defval"] text = re.sub(dollar_pattern, dollar_replace, text) return text @@ -315,7 +315,7 @@ def dollar_replace(match: re.Match[str]) -> str: def format_local_datetime(dt: datetime.datetime) -> str: """Return a string with local timezone representing the date. """ - return dt.astimezone().strftime('%Y-%m-%d %H:%M %z') + return dt.astimezone().strftime("%Y-%m-%d %H:%M %z") def import_local_file(modname: str, modfile: Optional[str] = None) -> ModuleType: @@ -327,7 +327,7 @@ def import_local_file(modname: str, modfile: Optional[str] = None) -> ModuleType """ if modfile is None: - modfile = modname + '.py' + modfile = modname + ".py" spec = importlib.util.spec_from_file_location(modname, modfile) assert spec is not None mod = importlib.util.module_from_spec(spec) diff --git a/coverage/multiproc.py b/coverage/multiproc.py index e11ca7b70..2fd8ad5dc 100644 --- a/coverage/multiproc.py +++ b/coverage/multiproc.py @@ -56,10 +56,10 @@ def __init__(self, rcfile: str) -> None: self.rcfile = rcfile def __getstate__(self) -> Dict[str, str]: - return {'rcfile': self.rcfile} + return {"rcfile": self.rcfile} def __setstate__(self, state: Dict[str, str]) -> None: - patch_multiprocessing(state['rcfile']) + patch_multiprocessing(state["rcfile"]) def patch_multiprocessing(rcfile: str) -> None: @@ -96,7 +96,7 @@ def patch_multiprocessing(rcfile: str) -> None: def get_preparation_data_with_stowaway(name: str) -> Dict[str, Any]: """Get the original preparation data, and also insert our stowaway.""" d = original_get_preparation_data(name) - d['stowaway'] = Stowaway(rcfile) + d["stowaway"] = Stowaway(rcfile) return d spawn.get_preparation_data = get_preparation_data_with_stowaway diff --git a/coverage/numbits.py b/coverage/numbits.py index 26e5c2725..71b974de5 100644 --- a/coverage/numbits.py +++ b/coverage/numbits.py @@ -36,7 +36,7 @@ def nums_to_numbits(nums: Iterable[int]) -> bytes: nbytes = max(nums) // 8 + 1 except ValueError: # nums was empty. - return b'' + return b"" b = bytearray(nbytes) for num in nums: b[num//8] |= 1 << num % 8 @@ -82,7 +82,7 @@ def numbits_intersection(numbits1: bytes, numbits2: bytes) -> bytes: """ byte_pairs = zip_longest(numbits1, numbits2, fillvalue=0) intersection_bytes = bytes(b1 & b2 for b1, b2 in byte_pairs) - return intersection_bytes.rstrip(b'\0') + return intersection_bytes.rstrip(b"\0") def numbits_any_intersection(numbits1: bytes, numbits2: bytes) -> bool: @@ -130,7 +130,7 @@ def register_sqlite_functions(connection: sqlite3.Connection) -> None: import sqlite3 from coverage.numbits import register_sqlite_functions - conn = sqlite3.connect('example.db') + conn = sqlite3.connect("example.db") register_sqlite_functions(conn) c = conn.cursor() # Kind of a nonsense query: diff --git a/coverage/parser.py b/coverage/parser.py index ae70b4f0f..e653a9ccd 100644 --- a/coverage/parser.py +++ b/coverage/parser.py @@ -60,7 +60,7 @@ def __init__( self.exclude = exclude # The text lines of the parsed code. - self.lines: List[str] = self.text.split('\n') + self.lines: List[str] = self.text.split("\n") # The normalized line numbers of the statements in the code. Exclusions # are taken into account, and statements are adjusted to their first @@ -149,13 +149,13 @@ def _raw_parse(self) -> None: elif toktype == token.DEDENT: indent -= 1 elif toktype == token.NAME: - if ttext == 'class': + if ttext == "class": # Class definitions look like branches in the bytecode, so # we need to exclude them. The simplest way is to note the - # lines with the 'class' keyword. + # lines with the "class" keyword. self.raw_classdefs.add(slineno) elif toktype == token.OP: - if ttext == ':' and nesting == 0: + if ttext == ":" and nesting == 0: should_exclude = (elineno in self.raw_excluded) or excluding_decorators if not excluding and should_exclude: # Start excluding a suite. We trigger off of the colon @@ -165,7 +165,7 @@ def _raw_parse(self) -> None: exclude_indent = indent excluding = True excluding_decorators = False - elif ttext == '@' and first_on_line: + elif ttext == "@" and first_on_line: # A decorator. if elineno in self.raw_excluded: excluding_decorators = True @@ -763,7 +763,7 @@ def _line__Dict(self, node: ast.Dict) -> TLineNo: if node.keys[0] is not None: return node.keys[0].lineno else: - # Unpacked dict literals `{**{'a':1}}` have None as the key, + # Unpacked dict literals `{**{"a":1}}` have None as the key, # use the value in that case. return node.values[0].lineno else: diff --git a/coverage/phystokens.py b/coverage/phystokens.py index 4d1ee46e6..d5659268d 100644 --- a/coverage/phystokens.py +++ b/coverage/phystokens.py @@ -57,7 +57,7 @@ def _phys_tokens(toks: TokenInfos) -> TokenInfos: if last_ttext.endswith("\\"): inject_backslash = False elif ttype == token.STRING: - if "\n" in ttext and ttext.split('\n', 1)[0][-1] == '\\': + if "\n" in ttext and ttext.split("\n", 1)[0][-1] == "\\": # It's a multi-line string and the first line ends with # a backslash, so we don't need to inject another. inject_backslash = False @@ -113,7 +113,7 @@ def source_token_lines(source: str) -> TSourceTokenLines: line: List[Tuple[str, str]] = [] col = 0 - source = source.expandtabs(8).replace('\r\n', '\n') + source = source.expandtabs(8).replace("\r\n", "\n") tokgen = generate_tokens(source) if env.PYBEHAVIOR.soft_keywords: @@ -121,13 +121,13 @@ def source_token_lines(source: str) -> TSourceTokenLines: for ttype, ttext, (sline, scol), (_, ecol), _ in _phys_tokens(tokgen): mark_start = True - for part in re.split('(\n)', ttext): - if part == '\n': + for part in re.split("(\n)", ttext): + if part == "\n": yield line line = [] col = 0 mark_end = False - elif part == '': + elif part == "": mark_end = False elif ttype in ws_tokens: mark_end = False @@ -135,7 +135,7 @@ def source_token_lines(source: str) -> TSourceTokenLines: if mark_start and scol > col: line.append(("ws", " " * (scol - col))) mark_start = False - tok_class = tokenize.tok_name.get(ttype, 'xx').lower()[:3] + tok_class = tokenize.tok_name.get(ttype, "xx").lower()[:3] if ttype == token.NAME: if keyword.iskeyword(ttext): # Hard keywords are always keywords. diff --git a/coverage/plugin.py b/coverage/plugin.py index 5279c4d06..2c1ffada4 100644 --- a/coverage/plugin.py +++ b/coverage/plugin.py @@ -519,29 +519,29 @@ def source_token_lines(self) -> TSourceTokenLines: Each line is a list of pairs, each pair is a token:: - [('key', 'def'), ('ws', ' '), ('nam', 'hello'), ('op', '('), ... ] + [("key", "def"), ("ws", " "), ("nam", "hello"), ("op", "("), ... ] Each pair has a token class, and the token text. The token classes are: - * ``'com'``: a comment - * ``'key'``: a keyword - * ``'nam'``: a name, or identifier - * ``'num'``: a number - * ``'op'``: an operator - * ``'str'``: a string literal - * ``'ws'``: some white space - * ``'txt'``: some other kind of text + * ``"com"``: a comment + * ``"key"``: a keyword + * ``"nam"``: a name, or identifier + * ``"num"``: a number + * ``"op"``: an operator + * ``"str"``: a string literal + * ``"ws"``: some white space + * ``"txt"``: some other kind of text If you concatenate all the token texts, and then join them with newlines, you should have your original source back. The default implementation simply returns each line tagged as - ``'txt'``. + ``"txt"``. """ for line in self.source().splitlines(): - yield [('txt', line)] + yield [("txt", line)] def __eq__(self, other: Any) -> bool: return isinstance(other, FileReporter) and self.filename == other.filename diff --git a/coverage/plugin_support.py b/coverage/plugin_support.py index 4ed02c5c0..c99fb5e30 100644 --- a/coverage/plugin_support.py +++ b/coverage/plugin_support.py @@ -114,7 +114,7 @@ def _add_plugin( """ plugin_name = f"{self.current_module}.{plugin.__class__.__name__}" - if self.debug and self.debug.should('plugin'): + if self.debug and self.debug.should("plugin"): self.debug.write(f"Loaded plugin {self.current_module!r}: {plugin!r}") labelled = LabelledDebug(f"plugin {self.current_module!r}", self.debug) plugin = DebugPluginWrapper(plugin, labelled) @@ -150,7 +150,7 @@ def add_label(self, label: str) -> LabelledDebug: def message_prefix(self) -> str: """The prefix to use on messages, combining the labels.""" - prefixes = self.labels + [''] + prefixes = self.labels + [""] return ":\n".join(" "*i+label for i, label in enumerate(prefixes)) def write(self, message: str) -> None: diff --git a/coverage/python.py b/coverage/python.py index 744ab4cb8..3deb6819f 100644 --- a/coverage/python.py +++ b/coverage/python.py @@ -63,12 +63,12 @@ def get_python_source(filename: str) -> str: raise NoSource(f"No source for code: '{filename}'.") # Replace \f because of http://bugs.python.org/issue19035 - source_bytes = source_bytes.replace(b'\f', b' ') + source_bytes = source_bytes.replace(b"\f", b" ") source = source_bytes.decode(source_encoding(source_bytes), "replace") # Python code should always end with a line with a newline. - if source and source[-1] != '\n': - source += '\n' + if source and source[-1] != "\n": + source += "\n" return source @@ -127,7 +127,7 @@ def source_for_file(filename: str) -> str: def source_for_morf(morf: TMorf) -> str: """Get the source filename for the module-or-file `morf`.""" - if hasattr(morf, '__file__') and morf.__file__: + if hasattr(morf, "__file__") and morf.__file__: filename = morf.__file__ elif isinstance(morf, types.ModuleType): # A module should have had .__file__, otherwise we can't use it. @@ -157,9 +157,9 @@ def __init__(self, morf: TMorf, coverage: Optional[Coverage] = None) -> None: fname = canonical_filename(filename) super().__init__(fname) - if hasattr(morf, '__name__'): + if hasattr(morf, "__name__"): name = morf.__name__.replace(".", os.sep) - if os.path.basename(filename).startswith('__init__.'): + if os.path.basename(filename).startswith("__init__."): name += os.sep + "__init__" name += ".py" else: @@ -183,7 +183,7 @@ def parser(self) -> PythonParser: if self._parser is None: self._parser = PythonParser( filename=self.filename, - exclude=self.coverage._exclude_regex('exclude'), + exclude=self.coverage._exclude_regex("exclude"), ) self._parser.parse_source() return self._parser @@ -244,7 +244,7 @@ def should_be_python(self) -> bool: _, ext = os.path.splitext(self.filename) # Anything named *.py* should be Python. - if ext.startswith('.py'): + if ext.startswith(".py"): return True # A file with no extension should be Python. if not ext: diff --git a/coverage/pytracer.py b/coverage/pytracer.py index 6723c2a1b..81832b0fd 100644 --- a/coverage/pytracer.py +++ b/coverage/pytracer.py @@ -20,11 +20,11 @@ ) # We need the YIELD_VALUE opcode below, in a comparison-friendly form. -RESUME = dis.opmap.get('RESUME') -RETURN_VALUE = dis.opmap['RETURN_VALUE'] +RESUME = dis.opmap.get("RESUME") +RETURN_VALUE = dis.opmap["RETURN_VALUE"] if RESUME is None: - YIELD_VALUE = dis.opmap['YIELD_VALUE'] - YIELD_FROM = dis.opmap['YIELD_FROM'] + YIELD_VALUE = dis.opmap["YIELD_VALUE"] + YIELD_FROM = dis.opmap["YIELD_FROM"] YIELD_FROM_OFFSET = 0 if env.PYPY else 2 # When running meta-coverage, this file can try to trace itself, which confuses @@ -78,7 +78,7 @@ def __init__(self) -> None: self.in_atexit = False # On exit, self.in_atexit = True - atexit.register(setattr, self, 'in_atexit', True) + atexit.register(setattr, self, "in_atexit", True) # Cache a bound method on the instance, so that we don't have to # re-create a bound method object all the time. @@ -150,10 +150,10 @@ def _trace( ) return None - # if event != 'call' and frame.f_code.co_filename != self.cur_file_name: + # if event != "call" and frame.f_code.co_filename != self.cur_file_name: # self.log("---\n*", frame.f_code.co_filename, self.cur_file_name, frame.f_lineno) - if event == 'call': + if event == "call": # Should we start a new context? if self.should_start_context and self.context is None: context_maybe = self.should_start_context(frame) @@ -215,13 +215,13 @@ def _trace( oparg = frame.f_code.co_code[frame.f_lasti + 1] real_call = (oparg == 0) else: - real_call = (getattr(frame, 'f_lasti', -1) < 0) + real_call = (getattr(frame, "f_lasti", -1) < 0) if real_call: self.last_line = -frame.f_code.co_firstlineno else: self.last_line = frame.f_lineno - elif event == 'line': + elif event == "line": # Record an executed line. if self.cur_file_data is not None: flineno: TLineNo = frame.f_lineno @@ -232,7 +232,7 @@ def _trace( cast(Set[TLineNo], self.cur_file_data).add(flineno) self.last_line = flineno - elif event == 'return': + elif event == "return": if self.trace_arcs and self.cur_file_data: # Record an arc leaving the function, but beware that a # "return" event might just mean yielding from a generator. diff --git a/coverage/results.py b/coverage/results.py index 2731700ed..ea6dc207f 100644 --- a/coverage/results.py +++ b/coverage/results.py @@ -357,7 +357,7 @@ def format_lines( dest = (ex if ex > 0 else "exit") line_items.append((line, f"{line}->{dest}")) - ret = ', '.join(t[-1] for t in sorted(line_items)) + ret = ", ".join(t[-1] for t in sorted(line_items)) return ret diff --git a/coverage/templite.py b/coverage/templite.py index 897a58f95..11ea847be 100644 --- a/coverage/templite.py +++ b/coverage/templite.py @@ -109,11 +109,11 @@ class Templite: <p>You are interested in {{topic}}.</p> {% endif %} ''', - {'upper': str.upper}, + {"upper": str.upper}, ) text = templite.render({ - 'name': "Ned", - 'topics': ['Python', 'Geometry', 'Juggling'], + "name": "Ned", + "topics": ["Python", "Geometry", "Juggling"], }) """ @@ -161,37 +161,37 @@ def flush_output() -> None: squash = in_joined = False for token in tokens: - if token.startswith('{'): + if token.startswith("{"): start, end = 2, -2 - squash = (token[-3] == '-') + squash = (token[-3] == "-") if squash: end = -3 - if token.startswith('{#'): + if token.startswith("{#"): # Comment: ignore it and move on. continue - elif token.startswith('{{'): + elif token.startswith("{{"): # An expression to evaluate. expr = self._expr_code(token[start:end].strip()) buffered.append("to_str(%s)" % expr) else: - # token.startswith('{%') + # token.startswith("{%") # Action tag: split into words and parse further. flush_output() words = token[start:end].strip().split() - if words[0] == 'if': + if words[0] == "if": # An if statement: evaluate the expression to determine if. if len(words) != 2: self._syntax_error("Don't understand if", token) - ops_stack.append('if') + ops_stack.append("if") code.add_line("if %s:" % self._expr_code(words[1])) code.indent() - elif words[0] == 'for': + elif words[0] == "for": # A loop: iterate over expression result. - if len(words) != 4 or words[2] != 'in': + if len(words) != 4 or words[2] != "in": self._syntax_error("Don't understand for", token) - ops_stack.append('for') + ops_stack.append("for") self._variable(words[1], self.loop_vars) code.add_line( "for c_{} in {}:".format( @@ -200,10 +200,10 @@ def flush_output() -> None: ) ) code.indent() - elif words[0] == 'joined': - ops_stack.append('joined') + elif words[0] == "joined": + ops_stack.append("joined") in_joined = True - elif words[0].startswith('end'): + elif words[0].startswith("end"): # Endsomething. Pop the ops stack. if len(words) != 1: self._syntax_error("Don't understand end", token) @@ -213,7 +213,7 @@ def flush_output() -> None: start_what = ops_stack.pop() if start_what != end_what: self._syntax_error("Mismatched end tag", end_what) - if end_what == 'joined': + if end_what == "joined": in_joined = False else: code.dedent() @@ -236,14 +236,14 @@ def flush_output() -> None: for var_name in self.all_vars - self.loop_vars: vars_code.add_line(f"c_{var_name} = context[{var_name!r}]") - code.add_line('return "".join(result)') + code.add_line("return ''.join(result)") code.dedent() self._render_function = cast( Callable[ [Dict[str, Any], Callable[..., Any]], str ], - code.get_globals()['render_function'], + code.get_globals()["render_function"], ) def _expr_code(self, expr: str) -> str: diff --git a/coverage/version.py b/coverage/version.py index ace1d2595..3a27a388f 100644 --- a/coverage/version.py +++ b/coverage/version.py @@ -21,10 +21,10 @@ def _make_version( dev: int = 0, ) -> str: """Create a readable version string from version_info tuple components.""" - assert releaselevel in ['alpha', 'beta', 'candidate', 'final'] + assert releaselevel in ["alpha", "beta", "candidate", "final"] version = "%d.%d.%d" % (major, minor, micro) - if releaselevel != 'final': - short = {'alpha': 'a', 'beta': 'b', 'candidate': 'rc'}[releaselevel] + if releaselevel != "final": + short = {"alpha": "a", "beta": "b", "candidate": "rc"}[releaselevel] version += f"{short}{serial}" if dev != 0: version += f".dev{dev}" From 42c2f21b74201cdcf53d1b023c45d2be5a51f967 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Wed, 22 Mar 2023 18:30:19 -0400 Subject: [PATCH 127/139] build: update .git-blame-ignore-revs --- .git-blame-ignore-revs | 1 + 1 file changed, 1 insertion(+) diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs index bbda8b6c1..ca7baa760 100644 --- a/.git-blame-ignore-revs +++ b/.git-blame-ignore-revs @@ -8,3 +8,4 @@ bf6c12f5da54db7c5c0cc47cbf22c70f686e8236 # 2023-03-22 style: use double-quotes 16abd82b6e87753184e8308c4b2606ff3979f8d3 +b7be64538aa480fce641349d3053e9a84862d571 From 01a4743f31316b168e808fd94c4abc6462ab1bf7 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Sun, 26 Mar 2023 07:29:48 -0400 Subject: [PATCH 128/139] chore: make upgrade --- doc/requirements.pip | 12 +++--- requirements/dev.pip | 24 ++++++------ requirements/kit.pip | 18 ++++----- requirements/light-threads.pip | 68 ++++++++++++++++------------------ requirements/lint.pip | 30 +++++++-------- requirements/mypy.pip | 6 +-- requirements/pip-tools.pip | 6 +-- requirements/pip.pip | 18 ++++----- requirements/pytest.pip | 6 +-- requirements/tox.pip | 18 ++++----- 10 files changed, 100 insertions(+), 106 deletions(-) diff --git a/doc/requirements.pip b/doc/requirements.pip index a3d5bb388..1e6bc68f6 100644 --- a/doc/requirements.pip +++ b/doc/requirements.pip @@ -129,9 +129,9 @@ imagesize==1.4.1 \ --hash=sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b \ --hash=sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a # via sphinx -importlib-metadata==6.0.0 \ - --hash=sha256:7efb448ec9a5e313a57655d35aa54cd3e01b7e1fbcf72dce1bf06119420f5bad \ - --hash=sha256:e354bedeb60efa6affdcc8ae121b73544a7aa74156d047311948f6d711cd378d +importlib-metadata==6.1.0 \ + --hash=sha256:43ce9281e097583d758c2c708c4376371261a02c34682491a8e98352365aad20 \ + --hash=sha256:ff80f3b5394912eb1b108fcfd444dc78b7f1f3e16b16188054bd01cb9cb86f09 # via # click # sphinx @@ -214,9 +214,9 @@ pygments==2.14.0 \ --hash=sha256:b3ed06a9e8ac9a9aae5a6f5dbe78a8a58655d17b43b93c078f094ddc476ae297 \ --hash=sha256:fa7bd7bd2771287c0de303af8bfdfc731f51bd2c6a47ab69d117138893b82717 # via sphinx -pytz==2022.7.1 \ - --hash=sha256:01a0681c4b9684a28304615eba55d1ab31ae00bf68ec157ec3708a8182dbbcd0 \ - --hash=sha256:78f4f37d8198e0627c5f1143240bb0206b8691d8d7ac6d78fee88b78733f8c4a +pytz==2023.2 \ + --hash=sha256:8a8baaf1e237175b02f5c751eea67168043a749c843989e2b3015aa1ad9db68b \ + --hash=sha256:a27dcf612c05d2ebde626f7d506555f10dfc815b3eddccfaadfc7d99b11c9a07 # via babel requests==2.28.2 \ --hash=sha256:64299f4909223da747622c030b781c0d7811e359c37124b4bd368fb8c6518baa \ diff --git a/requirements/dev.pip b/requirements/dev.pip index fb94546ac..3c8255bf7 100644 --- a/requirements/dev.pip +++ b/requirements/dev.pip @@ -148,9 +148,9 @@ execnet==1.9.0 \ --hash=sha256:8f694f3ba9cc92cab508b152dcfe322153975c29bda272e2fd7f3f00f36e47c5 \ --hash=sha256:a295f7cc774947aac58dde7fdc85f4aa00c42adf5d8f5468fc630c1acf30a142 # via pytest-xdist -filelock==3.10.0 \ - --hash=sha256:3199fd0d3faea8b911be52b663dfccceb84c95949dd13179aa21436d1a79c4ce \ - --hash=sha256:e90b34656470756edf8b19656785c5fea73afa1953f3e1b0d645cef11cab3182 +filelock==3.10.6 \ + --hash=sha256:409105becd604d6b176a483f855e7e8903c5cb2873e47f2c64f66a370c046aaf \ + --hash=sha256:52f119747b2b9c4730dac715a7b1ab34b8ee70fd9259cba158ee53da566387ff # via # tox # virtualenv @@ -228,9 +228,9 @@ idna==3.4 \ --hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 \ --hash=sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2 # via requests -importlib-metadata==6.0.0 \ - --hash=sha256:7efb448ec9a5e313a57655d35aa54cd3e01b7e1fbcf72dce1bf06119420f5bad \ - --hash=sha256:e354bedeb60efa6affdcc8ae121b73544a7aa74156d047311948f6d711cd378d +importlib-metadata==6.1.0 \ + --hash=sha256:43ce9281e097583d758c2c708c4376371261a02c34682491a8e98352365aad20 \ + --hash=sha256:ff80f3b5394912eb1b108fcfd444dc78b7f1f3e16b16188054bd01cb9cb86f09 # via # build # keyring @@ -341,9 +341,9 @@ pkginfo==1.9.6 \ --hash=sha256:4b7a555a6d5a22169fcc9cf7bfd78d296b0361adad412a346c1226849af5e546 \ --hash=sha256:8fd5896e8718a4372f0ea9cc9d96f6417c9b986e23a4d116dda26b62cc29d046 # via twine -platformdirs==3.1.1 \ - --hash=sha256:024996549ee88ec1a9aa99ff7f8fc819bb59e2c3477b410d90a16d32d6e707aa \ - --hash=sha256:e5986afb596e4bb5bde29a79ac9061aa955b94fca2399b7aaac4090860920dd8 +platformdirs==3.2.0 \ + --hash=sha256:d5b638ca397f25f979350ff789db335903d7ea010ab28903f57b27e1b16c2b08 \ + --hash=sha256:ebe11c0d7a805086e99506aa331612429a72ca7cd52a1f0d277dc4adc20cb10e # via # pylint # tox @@ -364,9 +364,9 @@ pygments==2.14.0 \ # pudb # readme-renderer # rich -pylint==2.17.0 \ - --hash=sha256:1460829b6397cb5eb0cdb0b4fc4b556348e515cdca32115f74a1eb7c20b896b4 \ - --hash=sha256:e097d8325f8c88e14ad12844e3fe2d963d3de871ea9a8f8ad25ab1c109889ddc +pylint==2.17.1 \ + --hash=sha256:8660a54e3f696243d644fca98f79013a959c03f979992c1ab59c24d3f4ec2700 \ + --hash=sha256:d4d009b0116e16845533bc2163493d6681846ac725eab8ca8014afb520178ddd # via -r requirements/dev.in pyproject-api==1.5.1 \ --hash=sha256:435f46547a9ff22cf4208ee274fca3e2869aeb062a4834adfc99a4dd64af3cf9 \ diff --git a/requirements/kit.pip b/requirements/kit.pip index b8e402844..6cd6a9932 100644 --- a/requirements/kit.pip +++ b/requirements/kit.pip @@ -32,13 +32,13 @@ colorama==0.4.6 \ --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \ --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 # via -r requirements/kit.in -filelock==3.10.0 \ - --hash=sha256:3199fd0d3faea8b911be52b663dfccceb84c95949dd13179aa21436d1a79c4ce \ - --hash=sha256:e90b34656470756edf8b19656785c5fea73afa1953f3e1b0d645cef11cab3182 +filelock==3.10.6 \ + --hash=sha256:409105becd604d6b176a483f855e7e8903c5cb2873e47f2c64f66a370c046aaf \ + --hash=sha256:52f119747b2b9c4730dac715a7b1ab34b8ee70fd9259cba158ee53da566387ff # via cibuildwheel -importlib-metadata==6.0.0 \ - --hash=sha256:7efb448ec9a5e313a57655d35aa54cd3e01b7e1fbcf72dce1bf06119420f5bad \ - --hash=sha256:e354bedeb60efa6affdcc8ae121b73544a7aa74156d047311948f6d711cd378d +importlib-metadata==6.1.0 \ + --hash=sha256:43ce9281e097583d758c2c708c4376371261a02c34682491a8e98352365aad20 \ + --hash=sha256:ff80f3b5394912eb1b108fcfd444dc78b7f1f3e16b16188054bd01cb9cb86f09 # via # auditwheel # build @@ -48,9 +48,9 @@ packaging==23.0 \ # via # build # cibuildwheel -platformdirs==3.1.1 \ - --hash=sha256:024996549ee88ec1a9aa99ff7f8fc819bb59e2c3477b410d90a16d32d6e707aa \ - --hash=sha256:e5986afb596e4bb5bde29a79ac9061aa955b94fca2399b7aaac4090860920dd8 +platformdirs==3.2.0 \ + --hash=sha256:d5b638ca397f25f979350ff789db335903d7ea010ab28903f57b27e1b16c2b08 \ + --hash=sha256:ebe11c0d7a805086e99506aa331612429a72ca7cd52a1f0d277dc4adc20cb10e # via cibuildwheel pyelftools==0.29 \ --hash=sha256:519f38cf412f073b2d7393aa4682b0190fa901f7c3fa0bff2b82d537690c7fc1 \ diff --git a/requirements/light-threads.pip b/requirements/light-threads.pip index 7cf23c3dc..b8cb2ae88 100644 --- a/requirements/light-threads.pip +++ b/requirements/light-threads.pip @@ -209,43 +209,37 @@ zope-event==4.6 \ --hash=sha256:73d9e3ef750cca14816a9c322c7250b0d7c9dbc337df5d1b807ff8d3d0b9e97c \ --hash=sha256:81d98813046fc86cc4136e3698fee628a3282f9c320db18658c21749235fce80 # via gevent -zope-interface==5.5.2 \ - --hash=sha256:008b0b65c05993bb08912f644d140530e775cf1c62a072bf9340c2249e613c32 \ - --hash=sha256:0217a9615531c83aeedb12e126611b1b1a3175013bbafe57c702ce40000eb9a0 \ - --hash=sha256:0fb497c6b088818e3395e302e426850f8236d8d9f4ef5b2836feae812a8f699c \ - --hash=sha256:17ebf6e0b1d07ed009738016abf0d0a0f80388e009d0ac6e0ead26fc162b3b9c \ - --hash=sha256:311196634bb9333aa06f00fc94f59d3a9fddd2305c2c425d86e406ddc6f2260d \ - --hash=sha256:3218ab1a7748327e08ef83cca63eea7cf20ea7e2ebcb2522072896e5e2fceedf \ - --hash=sha256:404d1e284eda9e233c90128697c71acffd55e183d70628aa0bbb0e7a3084ed8b \ - --hash=sha256:4087e253bd3bbbc3e615ecd0b6dd03c4e6a1e46d152d3be6d2ad08fbad742dcc \ - --hash=sha256:40f4065745e2c2fa0dff0e7ccd7c166a8ac9748974f960cd39f63d2c19f9231f \ - --hash=sha256:5334e2ef60d3d9439c08baedaf8b84dc9bb9522d0dacbc10572ef5609ef8db6d \ - --hash=sha256:604cdba8f1983d0ab78edc29aa71c8df0ada06fb147cea436dc37093a0100a4e \ - --hash=sha256:6373d7eb813a143cb7795d3e42bd8ed857c82a90571567e681e1b3841a390d16 \ - --hash=sha256:655796a906fa3ca67273011c9805c1e1baa047781fca80feeb710328cdbed87f \ - --hash=sha256:65c3c06afee96c654e590e046c4a24559e65b0a87dbff256cd4bd6f77e1a33f9 \ - --hash=sha256:696f3d5493eae7359887da55c2afa05acc3db5fc625c49529e84bd9992313296 \ - --hash=sha256:6e972493cdfe4ad0411fd9abfab7d4d800a7317a93928217f1a5de2bb0f0d87a \ - --hash=sha256:7579960be23d1fddecb53898035a0d112ac858c3554018ce615cefc03024e46d \ - --hash=sha256:765d703096ca47aa5d93044bf701b00bbce4d903a95b41fff7c3796e747b1f1d \ - --hash=sha256:7e66f60b0067a10dd289b29dceabd3d0e6d68be1504fc9d0bc209cf07f56d189 \ - --hash=sha256:8a2ffadefd0e7206adc86e492ccc60395f7edb5680adedf17a7ee4205c530df4 \ - --hash=sha256:959697ef2757406bff71467a09d940ca364e724c534efbf3786e86eee8591452 \ - --hash=sha256:9d783213fab61832dbb10d385a319cb0e45451088abd45f95b5bb88ed0acca1a \ - --hash=sha256:a16025df73d24795a0bde05504911d306307c24a64187752685ff6ea23897cb0 \ - --hash=sha256:a2ad597c8c9e038a5912ac3cf166f82926feff2f6e0dabdab956768de0a258f5 \ - --hash=sha256:bfee1f3ff62143819499e348f5b8a7f3aa0259f9aca5e0ddae7391d059dce671 \ - --hash=sha256:d169ccd0756c15bbb2f1acc012f5aab279dffc334d733ca0d9362c5beaebe88e \ - --hash=sha256:d514c269d1f9f5cd05ddfed15298d6c418129f3f064765295659798349c43e6f \ - --hash=sha256:d692374b578360d36568dd05efb8a5a67ab6d1878c29c582e37ddba80e66c396 \ - --hash=sha256:dbaeb9cf0ea0b3bc4b36fae54a016933d64c6d52a94810a63c00f440ecb37dd7 \ - --hash=sha256:dc26c8d44472e035d59d6f1177eb712888447f5799743da9c398b0339ed90b1b \ - --hash=sha256:e1574980b48c8c74f83578d1e77e701f8439a5d93f36a5a0af31337467c08fcf \ - --hash=sha256:e74a578172525c20d7223eac5f8ad187f10940dac06e40113d62f14f3adb1e8f \ - --hash=sha256:e945de62917acbf853ab968d8916290548df18dd62c739d862f359ecd25842a6 \ - --hash=sha256:f0980d44b8aded808bec5059018d64692f0127f10510eca71f2f0ace8fb11188 \ - --hash=sha256:f98d4bd7bbb15ca701d19b93263cc5edfd480c3475d163f137385f49e5b3a3a7 \ - --hash=sha256:fb68d212efd057596dee9e6582daded9f8ef776538afdf5feceb3059df2d2e7b +zope-interface==6.0 \ + --hash=sha256:042f2381118b093714081fd82c98e3b189b68db38ee7d35b63c327c470ef8373 \ + --hash=sha256:0ec9653825f837fbddc4e4b603d90269b501486c11800d7c761eee7ce46d1bbb \ + --hash=sha256:12175ca6b4db7621aedd7c30aa7cfa0a2d65ea3a0105393e05482d7a2d367446 \ + --hash=sha256:1592f68ae11e557b9ff2bc96ac8fc30b187e77c45a3c9cd876e3368c53dc5ba8 \ + --hash=sha256:23ac41d52fd15dd8be77e3257bc51bbb82469cf7f5e9a30b75e903e21439d16c \ + --hash=sha256:424d23b97fa1542d7be882eae0c0fc3d6827784105264a8169a26ce16db260d8 \ + --hash=sha256:4407b1435572e3e1610797c9203ad2753666c62883b921318c5403fb7139dec2 \ + --hash=sha256:48f4d38cf4b462e75fac78b6f11ad47b06b1c568eb59896db5b6ec1094eb467f \ + --hash=sha256:4c3d7dfd897a588ec27e391edbe3dd320a03684457470415870254e714126b1f \ + --hash=sha256:5171eb073474a5038321409a630904fd61f12dd1856dd7e9d19cd6fe092cbbc5 \ + --hash=sha256:5a158846d0fca0a908c1afb281ddba88744d403f2550dc34405c3691769cdd85 \ + --hash=sha256:6ee934f023f875ec2cfd2b05a937bd817efcc6c4c3f55c5778cbf78e58362ddc \ + --hash=sha256:790c1d9d8f9c92819c31ea660cd43c3d5451df1df61e2e814a6f99cebb292788 \ + --hash=sha256:809fe3bf1a91393abc7e92d607976bbb8586512913a79f2bf7d7ec15bd8ea518 \ + --hash=sha256:87b690bbee9876163210fd3f500ee59f5803e4a6607d1b1238833b8885ebd410 \ + --hash=sha256:89086c9d3490a0f265a3c4b794037a84541ff5ffa28bb9c24cc9f66566968464 \ + --hash=sha256:99856d6c98a326abbcc2363827e16bd6044f70f2ef42f453c0bd5440c4ce24e5 \ + --hash=sha256:aab584725afd10c710b8f1e6e208dbee2d0ad009f57d674cb9d1b3964037275d \ + --hash=sha256:af169ba897692e9cd984a81cb0f02e46dacdc07d6cf9fd5c91e81f8efaf93d52 \ + --hash=sha256:b39b8711578dcfd45fc0140993403b8a81e879ec25d53189f3faa1f006087dca \ + --hash=sha256:b3f543ae9d3408549a9900720f18c0194ac0fe810cecda2a584fd4dca2eb3bb8 \ + --hash=sha256:d0583b75f2e70ec93f100931660328965bb9ff65ae54695fb3fa0a1255daa6f2 \ + --hash=sha256:dfbbbf0809a3606046a41f8561c3eada9db811be94138f42d9135a5c47e75f6f \ + --hash=sha256:e538f2d4a6ffb6edfb303ce70ae7e88629ac6e5581870e66c306d9ad7b564a58 \ + --hash=sha256:eba51599370c87088d8882ab74f637de0c4f04a6d08a312dce49368ba9ed5c2a \ + --hash=sha256:ee4b43f35f5dc15e1fec55ccb53c130adb1d11e8ad8263d68b1284b66a04190d \ + --hash=sha256:f2363e5fd81afb650085c6686f2ee3706975c54f331b426800b53531191fdf28 \ + --hash=sha256:f299c020c6679cb389814a3b81200fe55d428012c5e76da7e722491f5d205990 \ + --hash=sha256:f72f23bab1848edb7472309e9898603141644faec9fd57a823ea6b4d1c4c8995 \ + --hash=sha256:fa90bac61c9dc3e1a563e5babb3fd2c0c1c80567e815442ddbe561eadc803b30 # via gevent # The following packages are considered to be unsafe in a requirements file: diff --git a/requirements/lint.pip b/requirements/lint.pip index 1a19210d3..2085ec34f 100644 --- a/requirements/lint.pip +++ b/requirements/lint.pip @@ -173,9 +173,9 @@ execnet==1.9.0 \ --hash=sha256:8f694f3ba9cc92cab508b152dcfe322153975c29bda272e2fd7f3f00f36e47c5 \ --hash=sha256:a295f7cc774947aac58dde7fdc85f4aa00c42adf5d8f5468fc630c1acf30a142 # via pytest-xdist -filelock==3.10.0 \ - --hash=sha256:3199fd0d3faea8b911be52b663dfccceb84c95949dd13179aa21436d1a79c4ce \ - --hash=sha256:e90b34656470756edf8b19656785c5fea73afa1953f3e1b0d645cef11cab3182 +filelock==3.10.6 \ + --hash=sha256:409105becd604d6b176a483f855e7e8903c5cb2873e47f2c64f66a370c046aaf \ + --hash=sha256:52f119747b2b9c4730dac715a7b1ab34b8ee70fd9259cba158ee53da566387ff # via # tox # virtualenv @@ -257,9 +257,9 @@ imagesize==1.4.1 \ --hash=sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b \ --hash=sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a # via sphinx -importlib-metadata==6.0.0 \ - --hash=sha256:7efb448ec9a5e313a57655d35aa54cd3e01b7e1fbcf72dce1bf06119420f5bad \ - --hash=sha256:e354bedeb60efa6affdcc8ae121b73544a7aa74156d047311948f6d711cd378d +importlib-metadata==6.1.0 \ + --hash=sha256:43ce9281e097583d758c2c708c4376371261a02c34682491a8e98352365aad20 \ + --hash=sha256:ff80f3b5394912eb1b108fcfd444dc78b7f1f3e16b16188054bd01cb9cb86f09 # via # build # click @@ -436,9 +436,9 @@ pkginfo==1.9.6 \ --hash=sha256:4b7a555a6d5a22169fcc9cf7bfd78d296b0361adad412a346c1226849af5e546 \ --hash=sha256:8fd5896e8718a4372f0ea9cc9d96f6417c9b986e23a4d116dda26b62cc29d046 # via twine -platformdirs==3.1.1 \ - --hash=sha256:024996549ee88ec1a9aa99ff7f8fc819bb59e2c3477b410d90a16d32d6e707aa \ - --hash=sha256:e5986afb596e4bb5bde29a79ac9061aa955b94fca2399b7aaac4090860920dd8 +platformdirs==3.2.0 \ + --hash=sha256:d5b638ca397f25f979350ff789db335903d7ea010ab28903f57b27e1b16c2b08 \ + --hash=sha256:ebe11c0d7a805086e99506aa331612429a72ca7cd52a1f0d277dc4adc20cb10e # via # pylint # tox @@ -468,9 +468,9 @@ pygments==2.14.0 \ # readme-renderer # rich # sphinx -pylint==2.17.0 \ - --hash=sha256:1460829b6397cb5eb0cdb0b4fc4b556348e515cdca32115f74a1eb7c20b896b4 \ - --hash=sha256:e097d8325f8c88e14ad12844e3fe2d963d3de871ea9a8f8ad25ab1c109889ddc +pylint==2.17.1 \ + --hash=sha256:8660a54e3f696243d644fca98f79013a959c03f979992c1ab59c24d3f4ec2700 \ + --hash=sha256:d4d009b0116e16845533bc2163493d6681846ac725eab8ca8014afb520178ddd # via -r requirements/dev.in pyproject-api==1.5.1 \ --hash=sha256:435f46547a9ff22cf4208ee274fca3e2869aeb062a4834adfc99a4dd64af3cf9 \ @@ -490,9 +490,9 @@ pytest-xdist==3.2.1 \ --hash=sha256:1849bd98d8b242b948e472db7478e090bf3361912a8fed87992ed94085f54727 \ --hash=sha256:37290d161638a20b672401deef1cba812d110ac27e35d213f091d15b8beb40c9 # via -r requirements/pytest.in -pytz==2022.7.1 \ - --hash=sha256:01a0681c4b9684a28304615eba55d1ab31ae00bf68ec157ec3708a8182dbbcd0 \ - --hash=sha256:78f4f37d8198e0627c5f1143240bb0206b8691d8d7ac6d78fee88b78733f8c4a +pytz==2023.2 \ + --hash=sha256:8a8baaf1e237175b02f5c751eea67168043a749c843989e2b3015aa1ad9db68b \ + --hash=sha256:a27dcf612c05d2ebde626f7d506555f10dfc815b3eddccfaadfc7d99b11c9a07 # via babel readme-renderer==37.3 \ --hash=sha256:cd653186dfc73055656f090f227f5cb22a046d7f71a841dfa305f55c9a513273 \ diff --git a/requirements/mypy.pip b/requirements/mypy.pip index 0f8aa4b27..f474d6424 100644 --- a/requirements/mypy.pip +++ b/requirements/mypy.pip @@ -32,9 +32,9 @@ hypothesis==6.70.0 \ --hash=sha256:be395f71d6337a5e8ed2f695c568360a686056c3b00c98bd818874c674b24586 \ --hash=sha256:f5cae09417d0ffc7711f602cdcfa3b7baf344597a672a84658186605b04f4a4f # via -r requirements/pytest.in -importlib-metadata==6.0.0 \ - --hash=sha256:7efb448ec9a5e313a57655d35aa54cd3e01b7e1fbcf72dce1bf06119420f5bad \ - --hash=sha256:e354bedeb60efa6affdcc8ae121b73544a7aa74156d047311948f6d711cd378d +importlib-metadata==6.1.0 \ + --hash=sha256:43ce9281e097583d758c2c708c4376371261a02c34682491a8e98352365aad20 \ + --hash=sha256:ff80f3b5394912eb1b108fcfd444dc78b7f1f3e16b16188054bd01cb9cb86f09 # via # pluggy # pytest diff --git a/requirements/pip-tools.pip b/requirements/pip-tools.pip index aed2efc7b..37cf8455a 100644 --- a/requirements/pip-tools.pip +++ b/requirements/pip-tools.pip @@ -12,9 +12,9 @@ click==8.1.3 \ --hash=sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e \ --hash=sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48 # via pip-tools -importlib-metadata==6.0.0 \ - --hash=sha256:7efb448ec9a5e313a57655d35aa54cd3e01b7e1fbcf72dce1bf06119420f5bad \ - --hash=sha256:e354bedeb60efa6affdcc8ae121b73544a7aa74156d047311948f6d711cd378d +importlib-metadata==6.1.0 \ + --hash=sha256:43ce9281e097583d758c2c708c4376371261a02c34682491a8e98352365aad20 \ + --hash=sha256:ff80f3b5394912eb1b108fcfd444dc78b7f1f3e16b16188054bd01cb9cb86f09 # via # build # click diff --git a/requirements/pip.pip b/requirements/pip.pip index 7427f804f..28fbe1787 100644 --- a/requirements/pip.pip +++ b/requirements/pip.pip @@ -8,17 +8,17 @@ distlib==0.3.6 \ --hash=sha256:14bad2d9b04d3a36127ac97f30b12a19268f211063d8f8ee4f47108896e11b46 \ --hash=sha256:f35c4b692542ca110de7ef0bea44d73981caeb34ca0b9b6b2e6d7790dda8f80e # via virtualenv -filelock==3.10.0 \ - --hash=sha256:3199fd0d3faea8b911be52b663dfccceb84c95949dd13179aa21436d1a79c4ce \ - --hash=sha256:e90b34656470756edf8b19656785c5fea73afa1953f3e1b0d645cef11cab3182 +filelock==3.10.6 \ + --hash=sha256:409105becd604d6b176a483f855e7e8903c5cb2873e47f2c64f66a370c046aaf \ + --hash=sha256:52f119747b2b9c4730dac715a7b1ab34b8ee70fd9259cba158ee53da566387ff # via virtualenv -importlib-metadata==6.0.0 \ - --hash=sha256:7efb448ec9a5e313a57655d35aa54cd3e01b7e1fbcf72dce1bf06119420f5bad \ - --hash=sha256:e354bedeb60efa6affdcc8ae121b73544a7aa74156d047311948f6d711cd378d +importlib-metadata==6.1.0 \ + --hash=sha256:43ce9281e097583d758c2c708c4376371261a02c34682491a8e98352365aad20 \ + --hash=sha256:ff80f3b5394912eb1b108fcfd444dc78b7f1f3e16b16188054bd01cb9cb86f09 # via virtualenv -platformdirs==3.1.1 \ - --hash=sha256:024996549ee88ec1a9aa99ff7f8fc819bb59e2c3477b410d90a16d32d6e707aa \ - --hash=sha256:e5986afb596e4bb5bde29a79ac9061aa955b94fca2399b7aaac4090860920dd8 +platformdirs==3.2.0 \ + --hash=sha256:d5b638ca397f25f979350ff789db335903d7ea010ab28903f57b27e1b16c2b08 \ + --hash=sha256:ebe11c0d7a805086e99506aa331612429a72ca7cd52a1f0d277dc4adc20cb10e # via virtualenv typing-extensions==4.5.0 \ --hash=sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb \ diff --git a/requirements/pytest.pip b/requirements/pytest.pip index 3171df182..1f0966f57 100644 --- a/requirements/pytest.pip +++ b/requirements/pytest.pip @@ -32,9 +32,9 @@ hypothesis==6.70.0 \ --hash=sha256:be395f71d6337a5e8ed2f695c568360a686056c3b00c98bd818874c674b24586 \ --hash=sha256:f5cae09417d0ffc7711f602cdcfa3b7baf344597a672a84658186605b04f4a4f # via -r requirements/pytest.in -importlib-metadata==6.0.0 \ - --hash=sha256:7efb448ec9a5e313a57655d35aa54cd3e01b7e1fbcf72dce1bf06119420f5bad \ - --hash=sha256:e354bedeb60efa6affdcc8ae121b73544a7aa74156d047311948f6d711cd378d +importlib-metadata==6.1.0 \ + --hash=sha256:43ce9281e097583d758c2c708c4376371261a02c34682491a8e98352365aad20 \ + --hash=sha256:ff80f3b5394912eb1b108fcfd444dc78b7f1f3e16b16188054bd01cb9cb86f09 # via # pluggy # pytest diff --git a/requirements/tox.pip b/requirements/tox.pip index 73831b7a4..c6888c5de 100644 --- a/requirements/tox.pip +++ b/requirements/tox.pip @@ -22,15 +22,15 @@ distlib==0.3.6 \ --hash=sha256:14bad2d9b04d3a36127ac97f30b12a19268f211063d8f8ee4f47108896e11b46 \ --hash=sha256:f35c4b692542ca110de7ef0bea44d73981caeb34ca0b9b6b2e6d7790dda8f80e # via virtualenv -filelock==3.10.0 \ - --hash=sha256:3199fd0d3faea8b911be52b663dfccceb84c95949dd13179aa21436d1a79c4ce \ - --hash=sha256:e90b34656470756edf8b19656785c5fea73afa1953f3e1b0d645cef11cab3182 +filelock==3.10.6 \ + --hash=sha256:409105becd604d6b176a483f855e7e8903c5cb2873e47f2c64f66a370c046aaf \ + --hash=sha256:52f119747b2b9c4730dac715a7b1ab34b8ee70fd9259cba158ee53da566387ff # via # tox # virtualenv -importlib-metadata==6.0.0 \ - --hash=sha256:7efb448ec9a5e313a57655d35aa54cd3e01b7e1fbcf72dce1bf06119420f5bad \ - --hash=sha256:e354bedeb60efa6affdcc8ae121b73544a7aa74156d047311948f6d711cd378d +importlib-metadata==6.1.0 \ + --hash=sha256:43ce9281e097583d758c2c708c4376371261a02c34682491a8e98352365aad20 \ + --hash=sha256:ff80f3b5394912eb1b108fcfd444dc78b7f1f3e16b16188054bd01cb9cb86f09 # via # pluggy # tox @@ -41,9 +41,9 @@ packaging==23.0 \ # via # pyproject-api # tox -platformdirs==3.1.1 \ - --hash=sha256:024996549ee88ec1a9aa99ff7f8fc819bb59e2c3477b410d90a16d32d6e707aa \ - --hash=sha256:e5986afb596e4bb5bde29a79ac9061aa955b94fca2399b7aaac4090860920dd8 +platformdirs==3.2.0 \ + --hash=sha256:d5b638ca397f25f979350ff789db335903d7ea010ab28903f57b27e1b16c2b08 \ + --hash=sha256:ebe11c0d7a805086e99506aa331612429a72ca7cd52a1f0d277dc4adc20cb10e # via # tox # virtualenv From b29dcb6b2a6f928f1f0558dad0cca8ebd7757e53 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Sun, 26 Mar 2023 07:53:05 -0400 Subject: [PATCH 129/139] build: no longer use hashed pins #1592 --- .github/workflows/coverage.yml | 2 +- .github/workflows/kit.yml | 4 ++-- .github/workflows/python-nightly.yml | 2 +- .github/workflows/quality.yml | 4 ++-- .github/workflows/testsuite.yml | 2 +- CHANGES.rst | 3 +++ Makefile | 2 +- 7 files changed, 11 insertions(+), 8 deletions(-) diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml index 6404a7c21..60e8d0a29 100644 --- a/.github/workflows/coverage.yml +++ b/.github/workflows/coverage.yml @@ -85,7 +85,7 @@ jobs: set -xe python -VV python -m site - python -m pip install --require-hashes -r requirements/tox.pip + python -m pip install -r requirements/tox.pip - name: "Run tox coverage for ${{ matrix.python-version }}" env: diff --git a/.github/workflows/kit.yml b/.github/workflows/kit.yml index ec3750e68..179f7a649 100644 --- a/.github/workflows/kit.yml +++ b/.github/workflows/kit.yml @@ -155,7 +155,7 @@ jobs: - name: "Install tools" run: | - python -m pip install --require-hashes -r requirements/kit.pip + python -m pip install -r requirements/kit.pip - name: "Build wheels" env: @@ -192,7 +192,7 @@ jobs: - name: "Install tools" run: | - python -m pip install --require-hashes -r requirements/kit.pip + python -m pip install -r requirements/kit.pip - name: "Build sdist" run: | diff --git a/.github/workflows/python-nightly.yml b/.github/workflows/python-nightly.yml index c2ba98e60..94a30ecc2 100644 --- a/.github/workflows/python-nightly.yml +++ b/.github/workflows/python-nightly.yml @@ -81,7 +81,7 @@ jobs: - name: "Install dependencies" run: | - python -m pip install --require-hashes -r requirements/tox.pip + python -m pip install -r requirements/tox.pip - name: "Run tox" run: | diff --git a/.github/workflows/quality.yml b/.github/workflows/quality.yml index 0901d5caa..9ee690df9 100644 --- a/.github/workflows/quality.yml +++ b/.github/workflows/quality.yml @@ -46,7 +46,7 @@ jobs: - name: "Install dependencies" run: | - python -m pip install --require-hashes -r requirements/tox.pip + python -m pip install -r requirements/tox.pip - name: "Tox lint" run: | @@ -97,7 +97,7 @@ jobs: set -xe python -VV python -m site - python -m pip install --require-hashes -r requirements/tox.pip + python -m pip install -r requirements/tox.pip - name: "Tox doc" run: | diff --git a/.github/workflows/testsuite.yml b/.github/workflows/testsuite.yml index e560325c8..b0f0ee6ca 100644 --- a/.github/workflows/testsuite.yml +++ b/.github/workflows/testsuite.yml @@ -73,7 +73,7 @@ jobs: set -xe python -VV python -m site - python -m pip install --require-hashes -r requirements/tox.pip + python -m pip install -r requirements/tox.pip # For extreme debugging: # python -c "import urllib.request as r; exec(r.urlopen('https://bit.ly/pydoctor').read())" diff --git a/CHANGES.rst b/CHANGES.rst index 51d6bead2..c7aca9073 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -25,8 +25,11 @@ Unreleased dramatically smaller. This closes `issue 1584`_ thanks to `Oleh Krehel <pull 1587_>`_. +- Development dependencies no longer use hashed pins, closing `issue 1592`_. + .. _issue 1584: https://github.com/nedbat/coveragepy/issues/1584 .. _pull 1587: https://github.com/nedbat/coveragepy/pull/1587 +.. _issue 1592: https://github.com/nedbat/coveragepy/issues/1592 .. scriv-start-here diff --git a/Makefile b/Makefile index 1adda37b8..ca33e6f8d 100644 --- a/Makefile +++ b/Makefile @@ -85,7 +85,7 @@ metasmoke: .PHONY: upgrade -PIP_COMPILE = pip-compile --upgrade --allow-unsafe --generate-hashes --resolver=backtracking +PIP_COMPILE = pip-compile --upgrade --allow-unsafe --resolver=backtracking upgrade: export CUSTOM_COMPILE_COMMAND=make upgrade upgrade: ## Update the *.pip files with the latest packages satisfying *.in files. pip install -q -r requirements/pip-tools.pip From 36d0104e7ac294fb525c9e554239b87ed7862108 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Sun, 26 Mar 2023 07:55:30 -0400 Subject: [PATCH 130/139] chore: make upgrade to remove hashes --- doc/requirements.pip | 292 ++------------ requirements/dev.pip | 536 ++++--------------------- requirements/kit.pip | 72 +--- requirements/light-threads.pip | 238 +---------- requirements/lint.pip | 695 +++++---------------------------- requirements/mypy.pip | 122 +----- requirements/pip-tools.pip | 48 +-- requirements/pip.pip | 36 +- requirements/pytest.pip | 64 +-- requirements/tox.pip | 64 +-- 10 files changed, 303 insertions(+), 1864 deletions(-) diff --git a/doc/requirements.pip b/doc/requirements.pip index 1e6bc68f6..f4183e645 100644 --- a/doc/requirements.pip +++ b/doc/requirements.pip @@ -4,241 +4,68 @@ # # make upgrade # -alabaster==0.7.13 \ - --hash=sha256:1ee19aca801bbabb5ba3f5f258e4422dfa86f82f3e9cefb0859b283cdd7f62a3 \ - --hash=sha256:a27a4a084d5e690e16e01e03ad2b2e552c61a65469419b907243193de1a84ae2 +alabaster==0.7.13 # via sphinx -attrs==22.2.0 \ - --hash=sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836 \ - --hash=sha256:c9227bfc2f01993c03f68db37d1d15c9690188323c067c641f1a35ca58185f99 +attrs==22.2.0 # via scriv -babel==2.12.1 \ - --hash=sha256:b4246fb7677d3b98f501a39d43396d3cafdc8eadb045f4a31be01863f655c610 \ - --hash=sha256:cc2d99999cd01d44420ae725a21c9e3711b3aadc7976d6147f622d8581963455 +babel==2.12.1 # via sphinx -certifi==2022.12.7 \ - --hash=sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3 \ - --hash=sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18 +certifi==2022.12.7 # via requests -charset-normalizer==3.1.0 \ - --hash=sha256:04afa6387e2b282cf78ff3dbce20f0cc071c12dc8f685bd40960cc68644cfea6 \ - --hash=sha256:04eefcee095f58eaabe6dc3cc2262f3bcd776d2c67005880894f447b3f2cb9c1 \ - --hash=sha256:0be65ccf618c1e7ac9b849c315cc2e8a8751d9cfdaa43027d4f6624bd587ab7e \ - --hash=sha256:0c95f12b74681e9ae127728f7e5409cbbef9cd914d5896ef238cc779b8152373 \ - --hash=sha256:0ca564606d2caafb0abe6d1b5311c2649e8071eb241b2d64e75a0d0065107e62 \ - --hash=sha256:10c93628d7497c81686e8e5e557aafa78f230cd9e77dd0c40032ef90c18f2230 \ - --hash=sha256:11d117e6c63e8f495412d37e7dc2e2fff09c34b2d09dbe2bee3c6229577818be \ - --hash=sha256:11d3bcb7be35e7b1bba2c23beedac81ee893ac9871d0ba79effc7fc01167db6c \ - --hash=sha256:12a2b561af122e3d94cdb97fe6fb2bb2b82cef0cdca131646fdb940a1eda04f0 \ - --hash=sha256:12d1a39aa6b8c6f6248bb54550efcc1c38ce0d8096a146638fd4738e42284448 \ - --hash=sha256:1435ae15108b1cb6fffbcea2af3d468683b7afed0169ad718451f8db5d1aff6f \ - --hash=sha256:1c60b9c202d00052183c9be85e5eaf18a4ada0a47d188a83c8f5c5b23252f649 \ - --hash=sha256:1e8fcdd8f672a1c4fc8d0bd3a2b576b152d2a349782d1eb0f6b8e52e9954731d \ - --hash=sha256:20064ead0717cf9a73a6d1e779b23d149b53daf971169289ed2ed43a71e8d3b0 \ - --hash=sha256:21fa558996782fc226b529fdd2ed7866c2c6ec91cee82735c98a197fae39f706 \ - --hash=sha256:22908891a380d50738e1f978667536f6c6b526a2064156203d418f4856d6e86a \ - --hash=sha256:3160a0fd9754aab7d47f95a6b63ab355388d890163eb03b2d2b87ab0a30cfa59 \ - --hash=sha256:322102cdf1ab682ecc7d9b1c5eed4ec59657a65e1c146a0da342b78f4112db23 \ - --hash=sha256:34e0a2f9c370eb95597aae63bf85eb5e96826d81e3dcf88b8886012906f509b5 \ - --hash=sha256:3573d376454d956553c356df45bb824262c397c6e26ce43e8203c4c540ee0acb \ - --hash=sha256:3747443b6a904001473370d7810aa19c3a180ccd52a7157aacc264a5ac79265e \ - --hash=sha256:38e812a197bf8e71a59fe55b757a84c1f946d0ac114acafaafaf21667a7e169e \ - --hash=sha256:3a06f32c9634a8705f4ca9946d667609f52cf130d5548881401f1eb2c39b1e2c \ - --hash=sha256:3a5fc78f9e3f501a1614a98f7c54d3969f3ad9bba8ba3d9b438c3bc5d047dd28 \ - --hash=sha256:3d9098b479e78c85080c98e1e35ff40b4a31d8953102bb0fd7d1b6f8a2111a3d \ - --hash=sha256:3dc5b6a8ecfdc5748a7e429782598e4f17ef378e3e272eeb1340ea57c9109f41 \ - --hash=sha256:4155b51ae05ed47199dc5b2a4e62abccb274cee6b01da5b895099b61b1982974 \ - --hash=sha256:49919f8400b5e49e961f320c735388ee686a62327e773fa5b3ce6721f7e785ce \ - --hash=sha256:53d0a3fa5f8af98a1e261de6a3943ca631c526635eb5817a87a59d9a57ebf48f \ - --hash=sha256:5f008525e02908b20e04707a4f704cd286d94718f48bb33edddc7d7b584dddc1 \ - --hash=sha256:628c985afb2c7d27a4800bfb609e03985aaecb42f955049957814e0491d4006d \ - --hash=sha256:65ed923f84a6844de5fd29726b888e58c62820e0769b76565480e1fdc3d062f8 \ - --hash=sha256:6734e606355834f13445b6adc38b53c0fd45f1a56a9ba06c2058f86893ae8017 \ - --hash=sha256:6baf0baf0d5d265fa7944feb9f7451cc316bfe30e8df1a61b1bb08577c554f31 \ - --hash=sha256:6f4f4668e1831850ebcc2fd0b1cd11721947b6dc7c00bf1c6bd3c929ae14f2c7 \ - --hash=sha256:6f5c2e7bc8a4bf7c426599765b1bd33217ec84023033672c1e9a8b35eaeaaaf8 \ - --hash=sha256:6f6c7a8a57e9405cad7485f4c9d3172ae486cfef1344b5ddd8e5239582d7355e \ - --hash=sha256:7381c66e0561c5757ffe616af869b916c8b4e42b367ab29fedc98481d1e74e14 \ - --hash=sha256:73dc03a6a7e30b7edc5b01b601e53e7fc924b04e1835e8e407c12c037e81adbd \ - --hash=sha256:74db0052d985cf37fa111828d0dd230776ac99c740e1a758ad99094be4f1803d \ - --hash=sha256:75f2568b4189dda1c567339b48cba4ac7384accb9c2a7ed655cd86b04055c795 \ - --hash=sha256:78cacd03e79d009d95635e7d6ff12c21eb89b894c354bd2b2ed0b4763373693b \ - --hash=sha256:80d1543d58bd3d6c271b66abf454d437a438dff01c3e62fdbcd68f2a11310d4b \ - --hash=sha256:830d2948a5ec37c386d3170c483063798d7879037492540f10a475e3fd6f244b \ - --hash=sha256:891cf9b48776b5c61c700b55a598621fdb7b1e301a550365571e9624f270c203 \ - --hash=sha256:8f25e17ab3039b05f762b0a55ae0b3632b2e073d9c8fc88e89aca31a6198e88f \ - --hash=sha256:9a3267620866c9d17b959a84dd0bd2d45719b817245e49371ead79ed4f710d19 \ - --hash=sha256:a04f86f41a8916fe45ac5024ec477f41f886b3c435da2d4e3d2709b22ab02af1 \ - --hash=sha256:aaf53a6cebad0eae578f062c7d462155eada9c172bd8c4d250b8c1d8eb7f916a \ - --hash=sha256:abc1185d79f47c0a7aaf7e2412a0eb2c03b724581139193d2d82b3ad8cbb00ac \ - --hash=sha256:ac0aa6cd53ab9a31d397f8303f92c42f534693528fafbdb997c82bae6e477ad9 \ - --hash=sha256:ac3775e3311661d4adace3697a52ac0bab17edd166087d493b52d4f4f553f9f0 \ - --hash=sha256:b06f0d3bf045158d2fb8837c5785fe9ff9b8c93358be64461a1089f5da983137 \ - --hash=sha256:b116502087ce8a6b7a5f1814568ccbd0e9f6cfd99948aa59b0e241dc57cf739f \ - --hash=sha256:b82fab78e0b1329e183a65260581de4375f619167478dddab510c6c6fb04d9b6 \ - --hash=sha256:bd7163182133c0c7701b25e604cf1611c0d87712e56e88e7ee5d72deab3e76b5 \ - --hash=sha256:c36bcbc0d5174a80d6cccf43a0ecaca44e81d25be4b7f90f0ed7bcfbb5a00909 \ - --hash=sha256:c3af8e0f07399d3176b179f2e2634c3ce9c1301379a6b8c9c9aeecd481da494f \ - --hash=sha256:c84132a54c750fda57729d1e2599bb598f5fa0344085dbde5003ba429a4798c0 \ - --hash=sha256:cb7b2ab0188829593b9de646545175547a70d9a6e2b63bf2cd87a0a391599324 \ - --hash=sha256:cca4def576f47a09a943666b8f829606bcb17e2bc2d5911a46c8f8da45f56755 \ - --hash=sha256:cf6511efa4801b9b38dc5546d7547d5b5c6ef4b081c60b23e4d941d0eba9cbeb \ - --hash=sha256:d16fd5252f883eb074ca55cb622bc0bee49b979ae4e8639fff6ca3ff44f9f854 \ - --hash=sha256:d2686f91611f9e17f4548dbf050e75b079bbc2a82be565832bc8ea9047b61c8c \ - --hash=sha256:d7fc3fca01da18fbabe4625d64bb612b533533ed10045a2ac3dd194bfa656b60 \ - --hash=sha256:dd5653e67b149503c68c4018bf07e42eeed6b4e956b24c00ccdf93ac79cdff84 \ - --hash=sha256:de5695a6f1d8340b12a5d6d4484290ee74d61e467c39ff03b39e30df62cf83a0 \ - --hash=sha256:e0ac8959c929593fee38da1c2b64ee9778733cdf03c482c9ff1d508b6b593b2b \ - --hash=sha256:e1b25e3ad6c909f398df8921780d6a3d120d8c09466720226fc621605b6f92b1 \ - --hash=sha256:e633940f28c1e913615fd624fcdd72fdba807bf53ea6925d6a588e84e1151531 \ - --hash=sha256:e89df2958e5159b811af9ff0f92614dabf4ff617c03a4c1c6ff53bf1c399e0e1 \ - --hash=sha256:ea9f9c6034ea2d93d9147818f17c2a0860d41b71c38b9ce4d55f21b6f9165a11 \ - --hash=sha256:f645caaf0008bacf349875a974220f1f1da349c5dbe7c4ec93048cdc785a3326 \ - --hash=sha256:f8303414c7b03f794347ad062c0516cee0e15f7a612abd0ce1e25caf6ceb47df \ - --hash=sha256:fca62a8301b605b954ad2e9c3666f9d97f63872aa4efcae5492baca2056b74ab +charset-normalizer==3.1.0 # via requests -click==8.1.3 \ - --hash=sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e \ - --hash=sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48 +click==8.1.3 # via # click-log # scriv -click-log==0.4.0 \ - --hash=sha256:3970f8570ac54491237bcdb3d8ab5e3eef6c057df29f8c3d1151a51a9c23b975 \ - --hash=sha256:a43e394b528d52112af599f2fc9e4b7cf3c15f94e53581f74fa6867e68c91756 +click-log==0.4.0 # via scriv -cogapp==3.3.0 \ - --hash=sha256:1be95183f70282422d594fa42426be6923070a4bd8335621f6347f3aeee81db0 \ - --hash=sha256:8b5b5f6063d8ee231961c05da010cb27c30876b2279e23ad0eae5f8f09460d50 +cogapp==3.3.0 # via -r doc/requirements.in -colorama==0.4.6 \ - --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \ - --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 +colorama==0.4.6 # via sphinx-autobuild -docutils==0.18.1 \ - --hash=sha256:23010f129180089fbcd3bc08cfefccb3b890b0050e1ca00c867036e9d161b98c \ - --hash=sha256:679987caf361a7539d76e584cbeddc311e3aee937877c87346f31debc63e9d06 +docutils==0.18.1 # via # sphinx # sphinx-rtd-theme -idna==3.4 \ - --hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 \ - --hash=sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2 +idna==3.4 # via requests -imagesize==1.4.1 \ - --hash=sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b \ - --hash=sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a +imagesize==1.4.1 # via sphinx -importlib-metadata==6.1.0 \ - --hash=sha256:43ce9281e097583d758c2c708c4376371261a02c34682491a8e98352365aad20 \ - --hash=sha256:ff80f3b5394912eb1b108fcfd444dc78b7f1f3e16b16188054bd01cb9cb86f09 +importlib-metadata==6.1.0 # via # click # sphinx # sphinxcontrib-spelling -jinja2==3.1.2 \ - --hash=sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852 \ - --hash=sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61 +jinja2==3.1.2 # via # scriv # sphinx -livereload==2.6.3 \ - --hash=sha256:776f2f865e59fde56490a56bcc6773b6917366bce0c267c60ee8aaf1a0959869 \ - --hash=sha256:ad4ac6f53b2d62bb6ce1a5e6e96f1f00976a32348afedcb4b6d68df2a1d346e4 +livereload==2.6.3 # via sphinx-autobuild -markupsafe==2.1.2 \ - --hash=sha256:0576fe974b40a400449768941d5d0858cc624e3249dfd1e0c33674e5c7ca7aed \ - --hash=sha256:085fd3201e7b12809f9e6e9bc1e5c96a368c8523fad5afb02afe3c051ae4afcc \ - --hash=sha256:090376d812fb6ac5f171e5938e82e7f2d7adc2b629101cec0db8b267815c85e2 \ - --hash=sha256:0b462104ba25f1ac006fdab8b6a01ebbfbce9ed37fd37fd4acd70c67c973e460 \ - --hash=sha256:137678c63c977754abe9086a3ec011e8fd985ab90631145dfb9294ad09c102a7 \ - --hash=sha256:1bea30e9bf331f3fef67e0a3877b2288593c98a21ccb2cf29b74c581a4eb3af0 \ - --hash=sha256:22152d00bf4a9c7c83960521fc558f55a1adbc0631fbb00a9471e097b19d72e1 \ - --hash=sha256:22731d79ed2eb25059ae3df1dfc9cb1546691cc41f4e3130fe6bfbc3ecbbecfa \ - --hash=sha256:2298c859cfc5463f1b64bd55cb3e602528db6fa0f3cfd568d3605c50678f8f03 \ - --hash=sha256:28057e985dace2f478e042eaa15606c7efccb700797660629da387eb289b9323 \ - --hash=sha256:2e7821bffe00aa6bd07a23913b7f4e01328c3d5cc0b40b36c0bd81d362faeb65 \ - --hash=sha256:2ec4f2d48ae59bbb9d1f9d7efb9236ab81429a764dedca114f5fdabbc3788013 \ - --hash=sha256:340bea174e9761308703ae988e982005aedf427de816d1afe98147668cc03036 \ - --hash=sha256:40627dcf047dadb22cd25ea7ecfe9cbf3bbbad0482ee5920b582f3809c97654f \ - --hash=sha256:40dfd3fefbef579ee058f139733ac336312663c6706d1163b82b3003fb1925c4 \ - --hash=sha256:4cf06cdc1dda95223e9d2d3c58d3b178aa5dacb35ee7e3bbac10e4e1faacb419 \ - --hash=sha256:50c42830a633fa0cf9e7d27664637532791bfc31c731a87b202d2d8ac40c3ea2 \ - --hash=sha256:55f44b440d491028addb3b88f72207d71eeebfb7b5dbf0643f7c023ae1fba619 \ - --hash=sha256:608e7073dfa9e38a85d38474c082d4281f4ce276ac0010224eaba11e929dd53a \ - --hash=sha256:63ba06c9941e46fa389d389644e2d8225e0e3e5ebcc4ff1ea8506dce646f8c8a \ - --hash=sha256:65608c35bfb8a76763f37036547f7adfd09270fbdbf96608be2bead319728fcd \ - --hash=sha256:665a36ae6f8f20a4676b53224e33d456a6f5a72657d9c83c2aa00765072f31f7 \ - --hash=sha256:6d6607f98fcf17e534162f0709aaad3ab7a96032723d8ac8750ffe17ae5a0666 \ - --hash=sha256:7313ce6a199651c4ed9d7e4cfb4aa56fe923b1adf9af3b420ee14e6d9a73df65 \ - --hash=sha256:7668b52e102d0ed87cb082380a7e2e1e78737ddecdde129acadb0eccc5423859 \ - --hash=sha256:7df70907e00c970c60b9ef2938d894a9381f38e6b9db73c5be35e59d92e06625 \ - --hash=sha256:7e007132af78ea9df29495dbf7b5824cb71648d7133cf7848a2a5dd00d36f9ff \ - --hash=sha256:835fb5e38fd89328e9c81067fd642b3593c33e1e17e2fdbf77f5676abb14a156 \ - --hash=sha256:8bca7e26c1dd751236cfb0c6c72d4ad61d986e9a41bbf76cb445f69488b2a2bd \ - --hash=sha256:8db032bf0ce9022a8e41a22598eefc802314e81b879ae093f36ce9ddf39ab1ba \ - --hash=sha256:99625a92da8229df6d44335e6fcc558a5037dd0a760e11d84be2260e6f37002f \ - --hash=sha256:9cad97ab29dfc3f0249b483412c85c8ef4766d96cdf9dcf5a1e3caa3f3661cf1 \ - --hash=sha256:a4abaec6ca3ad8660690236d11bfe28dfd707778e2442b45addd2f086d6ef094 \ - --hash=sha256:a6e40afa7f45939ca356f348c8e23048e02cb109ced1eb8420961b2f40fb373a \ - --hash=sha256:a6f2fcca746e8d5910e18782f976489939d54a91f9411c32051b4aab2bd7c513 \ - --hash=sha256:a806db027852538d2ad7555b203300173dd1b77ba116de92da9afbc3a3be3eed \ - --hash=sha256:abcabc8c2b26036d62d4c746381a6f7cf60aafcc653198ad678306986b09450d \ - --hash=sha256:b8526c6d437855442cdd3d87eede9c425c4445ea011ca38d937db299382e6fa3 \ - --hash=sha256:bb06feb762bade6bf3c8b844462274db0c76acc95c52abe8dbed28ae3d44a147 \ - --hash=sha256:c0a33bc9f02c2b17c3ea382f91b4db0e6cde90b63b296422a939886a7a80de1c \ - --hash=sha256:c4a549890a45f57f1ebf99c067a4ad0cb423a05544accaf2b065246827ed9603 \ - --hash=sha256:ca244fa73f50a800cf8c3ebf7fd93149ec37f5cb9596aa8873ae2c1d23498601 \ - --hash=sha256:cf877ab4ed6e302ec1d04952ca358b381a882fbd9d1b07cccbfd61783561f98a \ - --hash=sha256:d9d971ec1e79906046aa3ca266de79eac42f1dbf3612a05dc9368125952bd1a1 \ - --hash=sha256:da25303d91526aac3672ee6d49a2f3db2d9502a4a60b55519feb1a4c7714e07d \ - --hash=sha256:e55e40ff0cc8cc5c07996915ad367fa47da6b3fc091fdadca7f5403239c5fec3 \ - --hash=sha256:f03a532d7dee1bed20bc4884194a16160a2de9ffc6354b3878ec9682bb623c54 \ - --hash=sha256:f1cd098434e83e656abf198f103a8207a8187c0fc110306691a2e94a78d0abb2 \ - --hash=sha256:f2bfb563d0211ce16b63c7cb9395d2c682a23187f54c3d79bfec33e6705473c6 \ - --hash=sha256:f8ffb705ffcf5ddd0e80b65ddf7bed7ee4f5a441ea7d3419e861a12eaf41af58 +markupsafe==2.1.2 # via jinja2 -packaging==23.0 \ - --hash=sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2 \ - --hash=sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97 +packaging==23.0 # via sphinx -pyenchant==3.2.2 \ - --hash=sha256:1cf830c6614362a78aab78d50eaf7c6c93831369c52e1bb64ffae1df0341e637 \ - --hash=sha256:5a636832987eaf26efe971968f4d1b78e81f62bca2bde0a9da210c7de43c3bce \ - --hash=sha256:5facc821ece957208a81423af7d6ec7810dad29697cb0d77aae81e4e11c8e5a6 \ - --hash=sha256:6153f521852e23a5add923dbacfbf4bebbb8d70c4e4bad609a8e0f9faeb915d1 +pyenchant==3.2.2 # via # -r doc/requirements.in # sphinxcontrib-spelling -pygments==2.14.0 \ - --hash=sha256:b3ed06a9e8ac9a9aae5a6f5dbe78a8a58655d17b43b93c078f094ddc476ae297 \ - --hash=sha256:fa7bd7bd2771287c0de303af8bfdfc731f51bd2c6a47ab69d117138893b82717 +pygments==2.14.0 # via sphinx -pytz==2023.2 \ - --hash=sha256:8a8baaf1e237175b02f5c751eea67168043a749c843989e2b3015aa1ad9db68b \ - --hash=sha256:a27dcf612c05d2ebde626f7d506555f10dfc815b3eddccfaadfc7d99b11c9a07 +pytz==2023.2 # via babel -requests==2.28.2 \ - --hash=sha256:64299f4909223da747622c030b781c0d7811e359c37124b4bd368fb8c6518baa \ - --hash=sha256:98b1b2782e3c6c4904938b84c0eb932721069dfdb9134313beff7c83c2df24bf +requests==2.28.2 # via # scriv # sphinx -scriv==1.2.1 \ - --hash=sha256:0ceec6243ebf02f6a685507eec72f890ca9d9da4cafcfcfce640b1f027cec17d \ - --hash=sha256:95edfd76642cf7ae6b5cd40975545d8af58f6398cabfe83ff755e8eedb8ddd4e +scriv==1.2.1 # via -r doc/requirements.in -six==1.16.0 \ - --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ - --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 +six==1.16.0 # via livereload -snowballstemmer==2.2.0 \ - --hash=sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1 \ - --hash=sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a +snowballstemmer==2.2.0 # via sphinx -sphinx==5.3.0 \ - --hash=sha256:060ca5c9f7ba57a08a1219e547b269fadf125ae25b06b9fa7f66768efb652d6d \ - --hash=sha256:51026de0a9ff9fc13c05d74913ad66047e104f56a129ff73e174eb5c3ee794b5 +sphinx==5.3.0 # via # -r doc/requirements.in # sphinx-autobuild @@ -246,72 +73,33 @@ sphinx==5.3.0 \ # sphinxcontrib-jquery # sphinxcontrib-restbuilder # sphinxcontrib-spelling -sphinx-autobuild==2021.3.14 \ - --hash=sha256:8fe8cbfdb75db04475232f05187c776f46f6e9e04cacf1e49ce81bdac649ccac \ - --hash=sha256:de1ca3b66e271d2b5b5140c35034c89e47f263f2cd5db302c9217065f7443f05 +sphinx-autobuild==2021.3.14 # via -r doc/requirements.in -sphinx-rtd-theme==1.2.0 \ - --hash=sha256:a0d8bd1a2ed52e0b338cbe19c4b2eef3c5e7a048769753dac6a9f059c7b641b8 \ - --hash=sha256:f823f7e71890abe0ac6aaa6013361ea2696fc8d3e1fa798f463e82bdb77eeff2 +sphinx-rtd-theme==1.2.0 # via -r doc/requirements.in -sphinxcontrib-applehelp==1.0.2 \ - --hash=sha256:806111e5e962be97c29ec4c1e7fe277bfd19e9652fb1a4392105b43e01af885a \ - --hash=sha256:a072735ec80e7675e3f432fcae8610ecf509c5f1869d17e2eecff44389cdbc58 +sphinxcontrib-applehelp==1.0.2 # via sphinx -sphinxcontrib-devhelp==1.0.2 \ - --hash=sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e \ - --hash=sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4 +sphinxcontrib-devhelp==1.0.2 # via sphinx -sphinxcontrib-htmlhelp==2.0.0 \ - --hash=sha256:d412243dfb797ae3ec2b59eca0e52dac12e75a241bf0e4eb861e450d06c6ed07 \ - --hash=sha256:f5f8bb2d0d629f398bf47d0d69c07bc13b65f75a81ad9e2f71a63d4b7a2f6db2 +sphinxcontrib-htmlhelp==2.0.0 # via sphinx -sphinxcontrib-jquery==4.1 \ - --hash=sha256:1620739f04e36a2c779f1a131a2dfd49b2fd07351bf1968ced074365933abc7a \ - --hash=sha256:f936030d7d0147dd026a4f2b5a57343d233f1fc7b363f68b3d4f1cb0993878ae +sphinxcontrib-jquery==4.1 # via sphinx-rtd-theme -sphinxcontrib-jsmath==1.0.1 \ - --hash=sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178 \ - --hash=sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8 +sphinxcontrib-jsmath==1.0.1 # via sphinx -sphinxcontrib-qthelp==1.0.3 \ - --hash=sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72 \ - --hash=sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6 +sphinxcontrib-qthelp==1.0.3 # via sphinx -sphinxcontrib-restbuilder==0.3 \ - --hash=sha256:6b3ee9394b5ec5e73e6afb34d223530d0b9098cb7562f9c5e364e6d6b41410ce \ - --hash=sha256:6ba2ddc7a87d845c075c1b2e00d541bd1c8400488e50e32c9b4169ccdd9f30cb +sphinxcontrib-restbuilder==0.3 # via -r doc/requirements.in -sphinxcontrib-serializinghtml==1.1.5 \ - --hash=sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd \ - --hash=sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952 +sphinxcontrib-serializinghtml==1.1.5 # via sphinx -sphinxcontrib-spelling==8.0.0 \ - --hash=sha256:199d0a16902ad80c387c2966dc9eb10f565b1fb15ccce17210402db7c2443e5c \ - --hash=sha256:b27e0a16aef00bcfc888a6490dc3f16651f901dc475446c6882834278c8dc7b3 +sphinxcontrib-spelling==8.0.0 # via -r doc/requirements.in -tornado==6.2 \ - --hash=sha256:1d54d13ab8414ed44de07efecb97d4ef7c39f7438cf5e976ccd356bebb1b5fca \ - --hash=sha256:20f638fd8cc85f3cbae3c732326e96addff0a15e22d80f049e00121651e82e72 \ - --hash=sha256:5c87076709343557ef8032934ce5f637dbb552efa7b21d08e89ae7619ed0eb23 \ - --hash=sha256:5f8c52d219d4995388119af7ccaa0bcec289535747620116a58d830e7c25d8a8 \ - --hash=sha256:6fdfabffd8dfcb6cf887428849d30cf19a3ea34c2c248461e1f7d718ad30b66b \ - --hash=sha256:87dcafae3e884462f90c90ecc200defe5e580a7fbbb4365eda7c7c1eb809ebc9 \ - --hash=sha256:9b630419bde84ec666bfd7ea0a4cb2a8a651c2d5cccdbdd1972a0c859dfc3c13 \ - --hash=sha256:b8150f721c101abdef99073bf66d3903e292d851bee51910839831caba341a75 \ - --hash=sha256:ba09ef14ca9893954244fd872798b4ccb2367c165946ce2dd7376aebdde8e3ac \ - --hash=sha256:d3a2f5999215a3a06a4fc218026cd84c61b8b2b40ac5296a6db1f1451ef04c1e \ - --hash=sha256:e5f923aa6a47e133d1cf87d60700889d7eae68988704e20c75fb2d65677a8e4b +tornado==6.2 # via livereload -typing-extensions==4.5.0 \ - --hash=sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb \ - --hash=sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4 +typing-extensions==4.5.0 # via importlib-metadata -urllib3==1.26.15 \ - --hash=sha256:8a388717b9476f934a21484e8c8e61875ab60644d29b9b39e11e4b9dc1c6b305 \ - --hash=sha256:aa751d169e23c7479ce47a0cb0da579e3ede798f994f5816a74e4f4500dcea42 +urllib3==1.26.15 # via requests -zipp==3.15.0 \ - --hash=sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b \ - --hash=sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556 +zipp==3.15.0 # via importlib-metadata diff --git a/requirements/dev.pip b/requirements/dev.pip index 3c8255bf7..7bc7bfc4a 100644 --- a/requirements/dev.pip +++ b/requirements/dev.pip @@ -4,233 +4,58 @@ # # make upgrade # -astroid==2.15.0 \ - --hash=sha256:525f126d5dc1b8b0b6ee398b33159105615d92dc4a17f2cd064125d57f6186fa \ - --hash=sha256:e3e4d0ffc2d15d954065579689c36aac57a339a4679a679579af6401db4d3fdb +astroid==2.15.0 # via pylint -attrs==22.2.0 \ - --hash=sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836 \ - --hash=sha256:c9227bfc2f01993c03f68db37d1d15c9690188323c067c641f1a35ca58185f99 +attrs==22.2.0 # via # hypothesis # pytest -bleach==6.0.0 \ - --hash=sha256:1a1a85c1595e07d8db14c5f09f09e6433502c51c595970edc090551f0db99414 \ - --hash=sha256:33c16e3353dbd13028ab4799a0f89a83f113405c766e9c122df8a06f5b85b3f4 +bleach==6.0.0 # via readme-renderer -build==0.10.0 \ - --hash=sha256:af266720050a66c893a6096a2f410989eeac74ff9a68ba194b3f6473e8e26171 \ - --hash=sha256:d5b71264afdb5951d6704482aac78de887c80691c52b88a9ad195983ca2c9269 +build==0.10.0 # via check-manifest -cachetools==5.3.0 \ - --hash=sha256:13dfddc7b8df938c21a940dfa6557ce6e94a2f1cdfa58eb90c805721d58f2c14 \ - --hash=sha256:429e1a1e845c008ea6c85aa35d4b98b65d6a9763eeef3e37e92728a12d1de9d4 +cachetools==5.3.0 # via tox -certifi==2022.12.7 \ - --hash=sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3 \ - --hash=sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18 +certifi==2022.12.7 # via requests -chardet==5.1.0 \ - --hash=sha256:0d62712b956bc154f85fb0a266e2a3c5913c2967e00348701b32411d6def31e5 \ - --hash=sha256:362777fb014af596ad31334fde1e8c327dfdb076e1960d1694662d46a6917ab9 +chardet==5.1.0 # via tox -charset-normalizer==3.1.0 \ - --hash=sha256:04afa6387e2b282cf78ff3dbce20f0cc071c12dc8f685bd40960cc68644cfea6 \ - --hash=sha256:04eefcee095f58eaabe6dc3cc2262f3bcd776d2c67005880894f447b3f2cb9c1 \ - --hash=sha256:0be65ccf618c1e7ac9b849c315cc2e8a8751d9cfdaa43027d4f6624bd587ab7e \ - --hash=sha256:0c95f12b74681e9ae127728f7e5409cbbef9cd914d5896ef238cc779b8152373 \ - --hash=sha256:0ca564606d2caafb0abe6d1b5311c2649e8071eb241b2d64e75a0d0065107e62 \ - --hash=sha256:10c93628d7497c81686e8e5e557aafa78f230cd9e77dd0c40032ef90c18f2230 \ - --hash=sha256:11d117e6c63e8f495412d37e7dc2e2fff09c34b2d09dbe2bee3c6229577818be \ - --hash=sha256:11d3bcb7be35e7b1bba2c23beedac81ee893ac9871d0ba79effc7fc01167db6c \ - --hash=sha256:12a2b561af122e3d94cdb97fe6fb2bb2b82cef0cdca131646fdb940a1eda04f0 \ - --hash=sha256:12d1a39aa6b8c6f6248bb54550efcc1c38ce0d8096a146638fd4738e42284448 \ - --hash=sha256:1435ae15108b1cb6fffbcea2af3d468683b7afed0169ad718451f8db5d1aff6f \ - --hash=sha256:1c60b9c202d00052183c9be85e5eaf18a4ada0a47d188a83c8f5c5b23252f649 \ - --hash=sha256:1e8fcdd8f672a1c4fc8d0bd3a2b576b152d2a349782d1eb0f6b8e52e9954731d \ - --hash=sha256:20064ead0717cf9a73a6d1e779b23d149b53daf971169289ed2ed43a71e8d3b0 \ - --hash=sha256:21fa558996782fc226b529fdd2ed7866c2c6ec91cee82735c98a197fae39f706 \ - --hash=sha256:22908891a380d50738e1f978667536f6c6b526a2064156203d418f4856d6e86a \ - --hash=sha256:3160a0fd9754aab7d47f95a6b63ab355388d890163eb03b2d2b87ab0a30cfa59 \ - --hash=sha256:322102cdf1ab682ecc7d9b1c5eed4ec59657a65e1c146a0da342b78f4112db23 \ - --hash=sha256:34e0a2f9c370eb95597aae63bf85eb5e96826d81e3dcf88b8886012906f509b5 \ - --hash=sha256:3573d376454d956553c356df45bb824262c397c6e26ce43e8203c4c540ee0acb \ - --hash=sha256:3747443b6a904001473370d7810aa19c3a180ccd52a7157aacc264a5ac79265e \ - --hash=sha256:38e812a197bf8e71a59fe55b757a84c1f946d0ac114acafaafaf21667a7e169e \ - --hash=sha256:3a06f32c9634a8705f4ca9946d667609f52cf130d5548881401f1eb2c39b1e2c \ - --hash=sha256:3a5fc78f9e3f501a1614a98f7c54d3969f3ad9bba8ba3d9b438c3bc5d047dd28 \ - --hash=sha256:3d9098b479e78c85080c98e1e35ff40b4a31d8953102bb0fd7d1b6f8a2111a3d \ - --hash=sha256:3dc5b6a8ecfdc5748a7e429782598e4f17ef378e3e272eeb1340ea57c9109f41 \ - --hash=sha256:4155b51ae05ed47199dc5b2a4e62abccb274cee6b01da5b895099b61b1982974 \ - --hash=sha256:49919f8400b5e49e961f320c735388ee686a62327e773fa5b3ce6721f7e785ce \ - --hash=sha256:53d0a3fa5f8af98a1e261de6a3943ca631c526635eb5817a87a59d9a57ebf48f \ - --hash=sha256:5f008525e02908b20e04707a4f704cd286d94718f48bb33edddc7d7b584dddc1 \ - --hash=sha256:628c985afb2c7d27a4800bfb609e03985aaecb42f955049957814e0491d4006d \ - --hash=sha256:65ed923f84a6844de5fd29726b888e58c62820e0769b76565480e1fdc3d062f8 \ - --hash=sha256:6734e606355834f13445b6adc38b53c0fd45f1a56a9ba06c2058f86893ae8017 \ - --hash=sha256:6baf0baf0d5d265fa7944feb9f7451cc316bfe30e8df1a61b1bb08577c554f31 \ - --hash=sha256:6f4f4668e1831850ebcc2fd0b1cd11721947b6dc7c00bf1c6bd3c929ae14f2c7 \ - --hash=sha256:6f5c2e7bc8a4bf7c426599765b1bd33217ec84023033672c1e9a8b35eaeaaaf8 \ - --hash=sha256:6f6c7a8a57e9405cad7485f4c9d3172ae486cfef1344b5ddd8e5239582d7355e \ - --hash=sha256:7381c66e0561c5757ffe616af869b916c8b4e42b367ab29fedc98481d1e74e14 \ - --hash=sha256:73dc03a6a7e30b7edc5b01b601e53e7fc924b04e1835e8e407c12c037e81adbd \ - --hash=sha256:74db0052d985cf37fa111828d0dd230776ac99c740e1a758ad99094be4f1803d \ - --hash=sha256:75f2568b4189dda1c567339b48cba4ac7384accb9c2a7ed655cd86b04055c795 \ - --hash=sha256:78cacd03e79d009d95635e7d6ff12c21eb89b894c354bd2b2ed0b4763373693b \ - --hash=sha256:80d1543d58bd3d6c271b66abf454d437a438dff01c3e62fdbcd68f2a11310d4b \ - --hash=sha256:830d2948a5ec37c386d3170c483063798d7879037492540f10a475e3fd6f244b \ - --hash=sha256:891cf9b48776b5c61c700b55a598621fdb7b1e301a550365571e9624f270c203 \ - --hash=sha256:8f25e17ab3039b05f762b0a55ae0b3632b2e073d9c8fc88e89aca31a6198e88f \ - --hash=sha256:9a3267620866c9d17b959a84dd0bd2d45719b817245e49371ead79ed4f710d19 \ - --hash=sha256:a04f86f41a8916fe45ac5024ec477f41f886b3c435da2d4e3d2709b22ab02af1 \ - --hash=sha256:aaf53a6cebad0eae578f062c7d462155eada9c172bd8c4d250b8c1d8eb7f916a \ - --hash=sha256:abc1185d79f47c0a7aaf7e2412a0eb2c03b724581139193d2d82b3ad8cbb00ac \ - --hash=sha256:ac0aa6cd53ab9a31d397f8303f92c42f534693528fafbdb997c82bae6e477ad9 \ - --hash=sha256:ac3775e3311661d4adace3697a52ac0bab17edd166087d493b52d4f4f553f9f0 \ - --hash=sha256:b06f0d3bf045158d2fb8837c5785fe9ff9b8c93358be64461a1089f5da983137 \ - --hash=sha256:b116502087ce8a6b7a5f1814568ccbd0e9f6cfd99948aa59b0e241dc57cf739f \ - --hash=sha256:b82fab78e0b1329e183a65260581de4375f619167478dddab510c6c6fb04d9b6 \ - --hash=sha256:bd7163182133c0c7701b25e604cf1611c0d87712e56e88e7ee5d72deab3e76b5 \ - --hash=sha256:c36bcbc0d5174a80d6cccf43a0ecaca44e81d25be4b7f90f0ed7bcfbb5a00909 \ - --hash=sha256:c3af8e0f07399d3176b179f2e2634c3ce9c1301379a6b8c9c9aeecd481da494f \ - --hash=sha256:c84132a54c750fda57729d1e2599bb598f5fa0344085dbde5003ba429a4798c0 \ - --hash=sha256:cb7b2ab0188829593b9de646545175547a70d9a6e2b63bf2cd87a0a391599324 \ - --hash=sha256:cca4def576f47a09a943666b8f829606bcb17e2bc2d5911a46c8f8da45f56755 \ - --hash=sha256:cf6511efa4801b9b38dc5546d7547d5b5c6ef4b081c60b23e4d941d0eba9cbeb \ - --hash=sha256:d16fd5252f883eb074ca55cb622bc0bee49b979ae4e8639fff6ca3ff44f9f854 \ - --hash=sha256:d2686f91611f9e17f4548dbf050e75b079bbc2a82be565832bc8ea9047b61c8c \ - --hash=sha256:d7fc3fca01da18fbabe4625d64bb612b533533ed10045a2ac3dd194bfa656b60 \ - --hash=sha256:dd5653e67b149503c68c4018bf07e42eeed6b4e956b24c00ccdf93ac79cdff84 \ - --hash=sha256:de5695a6f1d8340b12a5d6d4484290ee74d61e467c39ff03b39e30df62cf83a0 \ - --hash=sha256:e0ac8959c929593fee38da1c2b64ee9778733cdf03c482c9ff1d508b6b593b2b \ - --hash=sha256:e1b25e3ad6c909f398df8921780d6a3d120d8c09466720226fc621605b6f92b1 \ - --hash=sha256:e633940f28c1e913615fd624fcdd72fdba807bf53ea6925d6a588e84e1151531 \ - --hash=sha256:e89df2958e5159b811af9ff0f92614dabf4ff617c03a4c1c6ff53bf1c399e0e1 \ - --hash=sha256:ea9f9c6034ea2d93d9147818f17c2a0860d41b71c38b9ce4d55f21b6f9165a11 \ - --hash=sha256:f645caaf0008bacf349875a974220f1f1da349c5dbe7c4ec93048cdc785a3326 \ - --hash=sha256:f8303414c7b03f794347ad062c0516cee0e15f7a612abd0ce1e25caf6ceb47df \ - --hash=sha256:fca62a8301b605b954ad2e9c3666f9d97f63872aa4efcae5492baca2056b74ab +charset-normalizer==3.1.0 # via requests -check-manifest==0.49 \ - --hash=sha256:058cd30057714c39b96ce4d83f254fc770e3145c7b1932b5940b4e3efb5521ef \ - --hash=sha256:64a640445542cf226919657c7b78d02d9c1ca5b1c25d7e66e0e1ff325060f416 +check-manifest==0.49 # via -r requirements/dev.in -cogapp==3.3.0 \ - --hash=sha256:1be95183f70282422d594fa42426be6923070a4bd8335621f6347f3aeee81db0 \ - --hash=sha256:8b5b5f6063d8ee231961c05da010cb27c30876b2279e23ad0eae5f8f09460d50 +cogapp==3.3.0 # via -r requirements/dev.in -colorama==0.4.6 \ - --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \ - --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 +colorama==0.4.6 # via # -r requirements/pytest.in # -r requirements/tox.in # tox -dill==0.3.6 \ - --hash=sha256:a07ffd2351b8c678dfc4a856a3005f8067aea51d6ba6c700796a4d9e280f39f0 \ - --hash=sha256:e5db55f3687856d8fbdab002ed78544e1c4559a130302693d839dfe8f93f2373 +dill==0.3.6 # via pylint -distlib==0.3.6 \ - --hash=sha256:14bad2d9b04d3a36127ac97f30b12a19268f211063d8f8ee4f47108896e11b46 \ - --hash=sha256:f35c4b692542ca110de7ef0bea44d73981caeb34ca0b9b6b2e6d7790dda8f80e +distlib==0.3.6 # via virtualenv -docutils==0.19 \ - --hash=sha256:33995a6753c30b7f577febfc2c50411fec6aac7f7ffeb7c4cfe5991072dcf9e6 \ - --hash=sha256:5e1de4d849fee02c63b040a4a3fd567f4ab104defd8a5511fbbc24a8a017efbc +docutils==0.19 # via readme-renderer -exceptiongroup==1.1.1 \ - --hash=sha256:232c37c63e4f682982c8b6459f33a8981039e5fb8756b2074364e5055c498c9e \ - --hash=sha256:d484c3090ba2889ae2928419117447a14daf3c1231d5e30d0aae34f354f01785 +exceptiongroup==1.1.1 # via # hypothesis # pytest -execnet==1.9.0 \ - --hash=sha256:8f694f3ba9cc92cab508b152dcfe322153975c29bda272e2fd7f3f00f36e47c5 \ - --hash=sha256:a295f7cc774947aac58dde7fdc85f4aa00c42adf5d8f5468fc630c1acf30a142 +execnet==1.9.0 # via pytest-xdist -filelock==3.10.6 \ - --hash=sha256:409105becd604d6b176a483f855e7e8903c5cb2873e47f2c64f66a370c046aaf \ - --hash=sha256:52f119747b2b9c4730dac715a7b1ab34b8ee70fd9259cba158ee53da566387ff +filelock==3.10.6 # via # tox # virtualenv -flaky==3.7.0 \ - --hash=sha256:3ad100780721a1911f57a165809b7ea265a7863305acb66708220820caf8aa0d \ - --hash=sha256:d6eda73cab5ae7364504b7c44670f70abed9e75f77dd116352f662817592ec9c +flaky==3.7.0 # via -r requirements/pytest.in -greenlet==2.0.2 \ - --hash=sha256:03a8f4f3430c3b3ff8d10a2a86028c660355ab637cee9333d63d66b56f09d52a \ - --hash=sha256:0bf60faf0bc2468089bdc5edd10555bab6e85152191df713e2ab1fcc86382b5a \ - --hash=sha256:18a7f18b82b52ee85322d7a7874e676f34ab319b9f8cce5de06067384aa8ff43 \ - --hash=sha256:18e98fb3de7dba1c0a852731c3070cf022d14f0d68b4c87a19cc1016f3bb8b33 \ - --hash=sha256:1a819eef4b0e0b96bb0d98d797bef17dc1b4a10e8d7446be32d1da33e095dbb8 \ - --hash=sha256:26fbfce90728d82bc9e6c38ea4d038cba20b7faf8a0ca53a9c07b67318d46088 \ - --hash=sha256:2780572ec463d44c1d3ae850239508dbeb9fed38e294c68d19a24d925d9223ca \ - --hash=sha256:283737e0da3f08bd637b5ad058507e578dd462db259f7f6e4c5c365ba4ee9343 \ - --hash=sha256:2d4686f195e32d36b4d7cf2d166857dbd0ee9f3d20ae349b6bf8afc8485b3645 \ - --hash=sha256:2dd11f291565a81d71dab10b7033395b7a3a5456e637cf997a6f33ebdf06f8db \ - --hash=sha256:30bcf80dda7f15ac77ba5af2b961bdd9dbc77fd4ac6105cee85b0d0a5fcf74df \ - --hash=sha256:32e5b64b148966d9cccc2c8d35a671409e45f195864560829f395a54226408d3 \ - --hash=sha256:36abbf031e1c0f79dd5d596bfaf8e921c41df2bdf54ee1eed921ce1f52999a86 \ - --hash=sha256:3a06ad5312349fec0ab944664b01d26f8d1f05009566339ac6f63f56589bc1a2 \ - --hash=sha256:3a51c9751078733d88e013587b108f1b7a1fb106d402fb390740f002b6f6551a \ - --hash=sha256:3c9b12575734155d0c09d6c3e10dbd81665d5c18e1a7c6597df72fd05990c8cf \ - --hash=sha256:3f6ea9bd35eb450837a3d80e77b517ea5bc56b4647f5502cd28de13675ee12f7 \ - --hash=sha256:4b58adb399c4d61d912c4c331984d60eb66565175cdf4a34792cd9600f21b394 \ - --hash=sha256:4d2e11331fc0c02b6e84b0d28ece3a36e0548ee1a1ce9ddde03752d9b79bba40 \ - --hash=sha256:5454276c07d27a740c5892f4907c86327b632127dd9abec42ee62e12427ff7e3 \ - --hash=sha256:561091a7be172ab497a3527602d467e2b3fbe75f9e783d8b8ce403fa414f71a6 \ - --hash=sha256:6c3acb79b0bfd4fe733dff8bc62695283b57949ebcca05ae5c129eb606ff2d74 \ - --hash=sha256:703f18f3fda276b9a916f0934d2fb6d989bf0b4fb5a64825260eb9bfd52d78f0 \ - --hash=sha256:7492e2b7bd7c9b9916388d9df23fa49d9b88ac0640db0a5b4ecc2b653bf451e3 \ - --hash=sha256:76ae285c8104046b3a7f06b42f29c7b73f77683df18c49ab5af7983994c2dd91 \ - --hash=sha256:7cafd1208fdbe93b67c7086876f061f660cfddc44f404279c1585bbf3cdc64c5 \ - --hash=sha256:7efde645ca1cc441d6dc4b48c0f7101e8d86b54c8530141b09fd31cef5149ec9 \ - --hash=sha256:88d9ab96491d38a5ab7c56dd7a3cc37d83336ecc564e4e8816dbed12e5aaefc8 \ - --hash=sha256:8eab883b3b2a38cc1e050819ef06a7e6344d4a990d24d45bc6f2cf959045a45b \ - --hash=sha256:910841381caba4f744a44bf81bfd573c94e10b3045ee00de0cbf436fe50673a6 \ - --hash=sha256:9190f09060ea4debddd24665d6804b995a9c122ef5917ab26e1566dcc712ceeb \ - --hash=sha256:937e9020b514ceedb9c830c55d5c9872abc90f4b5862f89c0887033ae33c6f73 \ - --hash=sha256:94c817e84245513926588caf1152e3b559ff794d505555211ca041f032abbb6b \ - --hash=sha256:971ce5e14dc5e73715755d0ca2975ac88cfdaefcaab078a284fea6cfabf866df \ - --hash=sha256:9d14b83fab60d5e8abe587d51c75b252bcc21683f24699ada8fb275d7712f5a9 \ - --hash=sha256:9f35ec95538f50292f6d8f2c9c9f8a3c6540bbfec21c9e5b4b751e0a7c20864f \ - --hash=sha256:a1846f1b999e78e13837c93c778dcfc3365902cfb8d1bdb7dd73ead37059f0d0 \ - --hash=sha256:acd2162a36d3de67ee896c43effcd5ee3de247eb00354db411feb025aa319857 \ - --hash=sha256:b0ef99cdbe2b682b9ccbb964743a6aca37905fda5e0452e5ee239b1654d37f2a \ - --hash=sha256:b80f600eddddce72320dbbc8e3784d16bd3fb7b517e82476d8da921f27d4b249 \ - --hash=sha256:b864ba53912b6c3ab6bcb2beb19f19edd01a6bfcbdfe1f37ddd1778abfe75a30 \ - --hash=sha256:b9ec052b06a0524f0e35bd8790686a1da006bd911dd1ef7d50b77bfbad74e292 \ - --hash=sha256:ba2956617f1c42598a308a84c6cf021a90ff3862eddafd20c3333d50f0edb45b \ - --hash=sha256:bdfea8c661e80d3c1c99ad7c3ff74e6e87184895bbaca6ee8cc61209f8b9b85d \ - --hash=sha256:be4ed120b52ae4d974aa40215fcdfde9194d63541c7ded40ee12eb4dda57b76b \ - --hash=sha256:c4302695ad8027363e96311df24ee28978162cdcdd2006476c43970b384a244c \ - --hash=sha256:c48f54ef8e05f04d6eff74b8233f6063cb1ed960243eacc474ee73a2ea8573ca \ - --hash=sha256:c9c59a2120b55788e800d82dfa99b9e156ff8f2227f07c5e3012a45a399620b7 \ - --hash=sha256:cd021c754b162c0fb55ad5d6b9d960db667faad0fa2ff25bb6e1301b0b6e6a75 \ - --hash=sha256:d27ec7509b9c18b6d73f2f5ede2622441de812e7b1a80bbd446cb0633bd3d5ae \ - --hash=sha256:d5508f0b173e6aa47273bdc0a0b5ba055b59662ba7c7ee5119528f466585526b \ - --hash=sha256:d75209eed723105f9596807495d58d10b3470fa6732dd6756595e89925ce2470 \ - --hash=sha256:db1a39669102a1d8d12b57de2bb7e2ec9066a6f2b3da35ae511ff93b01b5d564 \ - --hash=sha256:dbfcfc0218093a19c252ca8eb9aee3d29cfdcb586df21049b9d777fd32c14fd9 \ - --hash=sha256:e0f72c9ddb8cd28532185f54cc1453f2c16fb417a08b53a855c4e6a418edd099 \ - --hash=sha256:e7c8dc13af7db097bed64a051d2dd49e9f0af495c26995c00a9ee842690d34c0 \ - --hash=sha256:ea9872c80c132f4663822dd2a08d404073a5a9b5ba6155bea72fb2a79d1093b5 \ - --hash=sha256:eff4eb9b7eb3e4d0cae3d28c283dc16d9bed6b193c2e1ace3ed86ce48ea8df19 \ - --hash=sha256:f82d4d717d8ef19188687aa32b8363e96062911e63ba22a0cff7802a8e58e5f1 \ - --hash=sha256:fc3a569657468b6f3fb60587e48356fe512c1754ca05a564f11366ac9e306526 +greenlet==2.0.2 # via -r requirements/dev.in -hypothesis==6.70.0 \ - --hash=sha256:be395f71d6337a5e8ed2f695c568360a686056c3b00c98bd818874c674b24586 \ - --hash=sha256:f5cae09417d0ffc7711f602cdcfa3b7baf344597a672a84658186605b04f4a4f +hypothesis==6.70.0 # via -r requirements/pytest.in -idna==3.4 \ - --hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 \ - --hash=sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2 +idna==3.4 # via requests -importlib-metadata==6.1.0 \ - --hash=sha256:43ce9281e097583d758c2c708c4376371261a02c34682491a8e98352365aad20 \ - --hash=sha256:ff80f3b5394912eb1b108fcfd444dc78b7f1f3e16b16188054bd01cb9cb86f09 +importlib-metadata==6.1.0 # via # build # keyring @@ -239,189 +64,89 @@ importlib-metadata==6.1.0 \ # tox # twine # virtualenv -importlib-resources==5.12.0 \ - --hash=sha256:4be82589bf5c1d7999aedf2a45159d10cb3ca4f19b2271f8792bc8e6da7b22f6 \ - --hash=sha256:7b1deeebbf351c7578e09bf2f63fa2ce8b5ffec296e0d349139d43cca061a81a +importlib-resources==5.12.0 # via keyring -iniconfig==2.0.0 \ - --hash=sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3 \ - --hash=sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374 +iniconfig==2.0.0 # via pytest -isort==5.11.5 \ - --hash=sha256:6be1f76a507cb2ecf16c7cf14a37e41609ca082330be4e3436a18ef74add55db \ - --hash=sha256:ba1d72fb2595a01c7895a5128f9585a5cc4b6d395f1c8d514989b9a7eb2a8746 +isort==5.11.5 # via pylint -jaraco-classes==3.2.3 \ - --hash=sha256:2353de3288bc6b82120752201c6b1c1a14b058267fa424ed5ce5984e3b922158 \ - --hash=sha256:89559fa5c1d3c34eff6f631ad80bb21f378dbcbb35dd161fd2c6b93f5be2f98a +jaraco-classes==3.2.3 # via keyring -jedi==0.18.2 \ - --hash=sha256:203c1fd9d969ab8f2119ec0a3342e0b49910045abe6af0a3ae83a5764d54639e \ - --hash=sha256:bae794c30d07f6d910d32a7048af09b5a39ed740918da923c6b780790ebac612 +jedi==0.18.2 # via pudb -keyring==23.13.1 \ - --hash=sha256:771ed2a91909389ed6148631de678f82ddc73737d85a927f382a8a1b157898cd \ - --hash=sha256:ba2e15a9b35e21908d0aaf4e0a47acc52d6ae33444df0da2b49d41a46ef6d678 +keyring==23.13.1 # via twine -lazy-object-proxy==1.9.0 \ - --hash=sha256:09763491ce220c0299688940f8dc2c5d05fd1f45af1e42e636b2e8b2303e4382 \ - --hash=sha256:0a891e4e41b54fd5b8313b96399f8b0e173bbbfc03c7631f01efbe29bb0bcf82 \ - --hash=sha256:189bbd5d41ae7a498397287c408617fe5c48633e7755287b21d741f7db2706a9 \ - --hash=sha256:18b78ec83edbbeb69efdc0e9c1cb41a3b1b1ed11ddd8ded602464c3fc6020494 \ - --hash=sha256:1aa3de4088c89a1b69f8ec0dcc169aa725b0ff017899ac568fe44ddc1396df46 \ - --hash=sha256:212774e4dfa851e74d393a2370871e174d7ff0ebc980907723bb67d25c8a7c30 \ - --hash=sha256:2d0daa332786cf3bb49e10dc6a17a52f6a8f9601b4cf5c295a4f85854d61de63 \ - --hash=sha256:5f83ac4d83ef0ab017683d715ed356e30dd48a93746309c8f3517e1287523ef4 \ - --hash=sha256:659fb5809fa4629b8a1ac5106f669cfc7bef26fbb389dda53b3e010d1ac4ebae \ - --hash=sha256:660c94ea760b3ce47d1855a30984c78327500493d396eac4dfd8bd82041b22be \ - --hash=sha256:66a3de4a3ec06cd8af3f61b8e1ec67614fbb7c995d02fa224813cb7afefee701 \ - --hash=sha256:721532711daa7db0d8b779b0bb0318fa87af1c10d7fe5e52ef30f8eff254d0cd \ - --hash=sha256:7322c3d6f1766d4ef1e51a465f47955f1e8123caee67dd641e67d539a534d006 \ - --hash=sha256:79a31b086e7e68b24b99b23d57723ef7e2c6d81ed21007b6281ebcd1688acb0a \ - --hash=sha256:81fc4d08b062b535d95c9ea70dbe8a335c45c04029878e62d744bdced5141586 \ - --hash=sha256:8fa02eaab317b1e9e03f69aab1f91e120e7899b392c4fc19807a8278a07a97e8 \ - --hash=sha256:9090d8e53235aa280fc9239a86ae3ea8ac58eff66a705fa6aa2ec4968b95c821 \ - --hash=sha256:946d27deaff6cf8452ed0dba83ba38839a87f4f7a9732e8f9fd4107b21e6ff07 \ - --hash=sha256:9990d8e71b9f6488e91ad25f322898c136b008d87bf852ff65391b004da5e17b \ - --hash=sha256:9cd077f3d04a58e83d04b20e334f678c2b0ff9879b9375ed107d5d07ff160171 \ - --hash=sha256:9e7551208b2aded9c1447453ee366f1c4070602b3d932ace044715d89666899b \ - --hash=sha256:9f5fa4a61ce2438267163891961cfd5e32ec97a2c444e5b842d574251ade27d2 \ - --hash=sha256:b40387277b0ed2d0602b8293b94d7257e17d1479e257b4de114ea11a8cb7f2d7 \ - --hash=sha256:bfb38f9ffb53b942f2b5954e0f610f1e721ccebe9cce9025a38c8ccf4a5183a4 \ - --hash=sha256:cbf9b082426036e19c6924a9ce90c740a9861e2bdc27a4834fd0a910742ac1e8 \ - --hash=sha256:d9e25ef10a39e8afe59a5c348a4dbf29b4868ab76269f81ce1674494e2565a6e \ - --hash=sha256:db1c1722726f47e10e0b5fdbf15ac3b8adb58c091d12b3ab713965795036985f \ - --hash=sha256:e7c21c95cae3c05c14aafffe2865bbd5e377cfc1348c4f7751d9dc9a48ca4bda \ - --hash=sha256:e8c6cfb338b133fbdbc5cfaa10fe3c6aeea827db80c978dbd13bc9dd8526b7d4 \ - --hash=sha256:ea806fd4c37bf7e7ad82537b0757999264d5f70c45468447bb2b91afdbe73a6e \ - --hash=sha256:edd20c5a55acb67c7ed471fa2b5fb66cb17f61430b7a6b9c3b4a1e40293b1671 \ - --hash=sha256:f0117049dd1d5635bbff65444496c90e0baa48ea405125c088e93d9cf4525b11 \ - --hash=sha256:f0705c376533ed2a9e5e97aacdbfe04cecd71e0aa84c7c0595d02ef93b6e4455 \ - --hash=sha256:f12ad7126ae0c98d601a7ee504c1122bcef553d1d5e0c3bfa77b16b3968d2734 \ - --hash=sha256:f2457189d8257dd41ae9b434ba33298aec198e30adf2dcdaaa3a28b9994f6adb \ - --hash=sha256:f699ac1c768270c9e384e4cbd268d6e67aebcfae6cd623b4d7c3bfde5a35db59 +lazy-object-proxy==1.9.0 # via astroid -libsass==0.22.0 \ - --hash=sha256:081e256ab3c5f3f09c7b8dea3bf3bf5e64a97c6995fd9eea880639b3f93a9f9a \ - --hash=sha256:3ab5ad18e47db560f4f0c09e3d28cf3bb1a44711257488ac2adad69f4f7f8425 \ - --hash=sha256:65455a2728b696b62100eb5932604aa13a29f4ac9a305d95773c14aaa7200aaf \ - --hash=sha256:89c5ce497fcf3aba1dd1b19aae93b99f68257e5f2026b731b00a872f13324c7f \ - --hash=sha256:f1efc1b612299c88aec9e39d6ca0c266d360daa5b19d9430bdeaffffa86993f9 +libsass==0.22.0 # via -r requirements/dev.in -markdown-it-py==2.2.0 \ - --hash=sha256:5a35f8d1870171d9acc47b99612dc146129b631baf04970128b568f190d0cc30 \ - --hash=sha256:7c9a5e412688bc771c67432cbfebcdd686c93ce6484913dccf06cb5a0bea35a1 +markdown-it-py==2.2.0 # via rich -mccabe==0.7.0 \ - --hash=sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325 \ - --hash=sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e +mccabe==0.7.0 # via pylint -mdurl==0.1.2 \ - --hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \ - --hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba +mdurl==0.1.2 # via markdown-it-py -more-itertools==9.1.0 \ - --hash=sha256:cabaa341ad0389ea83c17a94566a53ae4c9d07349861ecb14dc6d0345cf9ac5d \ - --hash=sha256:d2bc7f02446e86a68911e58ded76d6561eea00cddfb2a91e7019bbb586c799f3 +more-itertools==9.1.0 # via jaraco-classes -packaging==23.0 \ - --hash=sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2 \ - --hash=sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97 +packaging==23.0 # via # build # pudb # pyproject-api # pytest # tox -parso==0.8.3 \ - --hash=sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0 \ - --hash=sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75 +parso==0.8.3 # via jedi -pkginfo==1.9.6 \ - --hash=sha256:4b7a555a6d5a22169fcc9cf7bfd78d296b0361adad412a346c1226849af5e546 \ - --hash=sha256:8fd5896e8718a4372f0ea9cc9d96f6417c9b986e23a4d116dda26b62cc29d046 +pkginfo==1.9.6 # via twine -platformdirs==3.2.0 \ - --hash=sha256:d5b638ca397f25f979350ff789db335903d7ea010ab28903f57b27e1b16c2b08 \ - --hash=sha256:ebe11c0d7a805086e99506aa331612429a72ca7cd52a1f0d277dc4adc20cb10e +platformdirs==3.2.0 # via # pylint # tox # virtualenv -pluggy==1.0.0 \ - --hash=sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159 \ - --hash=sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3 +pluggy==1.0.0 # via # pytest # tox -pudb==2022.1.3 \ - --hash=sha256:58e83ada9e19ffe92c1fdc78ae5458ef91aeb892a5b8f0e7379e6fa61e0e664a +pudb==2022.1.3 # via -r requirements/dev.in -pygments==2.14.0 \ - --hash=sha256:b3ed06a9e8ac9a9aae5a6f5dbe78a8a58655d17b43b93c078f094ddc476ae297 \ - --hash=sha256:fa7bd7bd2771287c0de303af8bfdfc731f51bd2c6a47ab69d117138893b82717 +pygments==2.14.0 # via # pudb # readme-renderer # rich -pylint==2.17.1 \ - --hash=sha256:8660a54e3f696243d644fca98f79013a959c03f979992c1ab59c24d3f4ec2700 \ - --hash=sha256:d4d009b0116e16845533bc2163493d6681846ac725eab8ca8014afb520178ddd +pylint==2.17.1 # via -r requirements/dev.in -pyproject-api==1.5.1 \ - --hash=sha256:435f46547a9ff22cf4208ee274fca3e2869aeb062a4834adfc99a4dd64af3cf9 \ - --hash=sha256:4698a3777c2e0f6b624f8a4599131e2a25376d90fe8d146d7ac74c67c6f97c43 +pyproject-api==1.5.1 # via tox -pyproject-hooks==1.0.0 \ - --hash=sha256:283c11acd6b928d2f6a7c73fa0d01cb2bdc5f07c57a2eeb6e83d5e56b97976f8 \ - --hash=sha256:f271b298b97f5955d53fb12b72c1fb1948c22c1a6b70b315c54cedaca0264ef5 +pyproject-hooks==1.0.0 # via build -pytest==7.2.2 \ - --hash=sha256:130328f552dcfac0b1cec75c12e3f005619dc5f874f0a06e8ff7263f0ee6225e \ - --hash=sha256:c99ab0c73aceb050f68929bc93af19ab6db0558791c6a0715723abe9d0ade9d4 +pytest==7.2.2 # via # -r requirements/pytest.in # pytest-xdist -pytest-xdist==3.2.1 \ - --hash=sha256:1849bd98d8b242b948e472db7478e090bf3361912a8fed87992ed94085f54727 \ - --hash=sha256:37290d161638a20b672401deef1cba812d110ac27e35d213f091d15b8beb40c9 +pytest-xdist==3.2.1 # via -r requirements/pytest.in -readme-renderer==37.3 \ - --hash=sha256:cd653186dfc73055656f090f227f5cb22a046d7f71a841dfa305f55c9a513273 \ - --hash=sha256:f67a16caedfa71eef48a31b39708637a6f4664c4394801a7b0d6432d13907343 +readme-renderer==37.3 # via # -r requirements/dev.in # twine -requests==2.28.2 \ - --hash=sha256:64299f4909223da747622c030b781c0d7811e359c37124b4bd368fb8c6518baa \ - --hash=sha256:98b1b2782e3c6c4904938b84c0eb932721069dfdb9134313beff7c83c2df24bf +requests==2.28.2 # via # -r requirements/dev.in # requests-toolbelt # twine -requests-toolbelt==0.10.1 \ - --hash=sha256:18565aa58116d9951ac39baa288d3adb5b3ff975c4f25eee78555d89e8f247f7 \ - --hash=sha256:62e09f7ff5ccbda92772a29f394a49c3ad6cb181d568b1337626b2abb628a63d +requests-toolbelt==0.10.1 # via twine -rfc3986==2.0.0 \ - --hash=sha256:50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd \ - --hash=sha256:97aacf9dbd4bfd829baad6e6309fa6573aaf1be3f6fa735c8ab05e46cecb261c +rfc3986==2.0.0 # via twine -rich==13.3.2 \ - --hash=sha256:91954fe80cfb7985727a467ca98a7618e5dd15178cc2da10f553b36a93859001 \ - --hash=sha256:a104f37270bf677148d8acb07d33be1569eeee87e2d1beb286a4e9113caf6f2f +rich==13.3.2 # via twine -six==1.16.0 \ - --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ - --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 +six==1.16.0 # via bleach -sortedcontainers==2.4.0 \ - --hash=sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88 \ - --hash=sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0 +sortedcontainers==2.4.0 # via hypothesis -tomli==2.0.1 \ - --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ - --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f +tomli==2.0.1 # via # build # check-manifest @@ -430,53 +155,19 @@ tomli==2.0.1 \ # pyproject-hooks # pytest # tox -tomlkit==0.11.6 \ - --hash=sha256:07de26b0d8cfc18f871aec595fda24d95b08fef89d147caa861939f37230bf4b \ - --hash=sha256:71b952e5721688937fb02cf9d354dbcf0785066149d2855e44531ebdd2b65d73 +tomlkit==0.11.6 # via pylint -tox==4.4.7 \ - --hash=sha256:52c92a96e2c3fd47c5301e9c26f5a871466133d5376958c1ed95ef4ff4629cbe \ - --hash=sha256:da10ca1d809b99fae80b706b9dc9656b1daf505a395ac427d130a8a85502d08f +tox==4.4.7 # via # -r requirements/tox.in # tox-gh -tox-gh==1.0.0 \ - --hash=sha256:9cfbaa927946887d53bc19ae86621f4e5dc8516f3771ba4e74daeb1a1775efcd \ - --hash=sha256:bda94ac15dbb62ef1e517672c05f8039faad5afaf9d1b4c9fa32d07f18027571 +tox-gh==1.0.0 # via -r requirements/tox.in -twine==4.0.2 \ - --hash=sha256:929bc3c280033347a00f847236564d1c52a3e61b1ac2516c97c48f3ceab756d8 \ - --hash=sha256:9e102ef5fdd5a20661eb88fad46338806c3bd32cf1db729603fe3697b1bc83c8 +twine==4.0.2 # via -r requirements/dev.in -typed-ast==1.5.4 \ - --hash=sha256:0261195c2062caf107831e92a76764c81227dae162c4f75192c0d489faf751a2 \ - --hash=sha256:0fdbcf2fef0ca421a3f5912555804296f0b0960f0418c440f5d6d3abb549f3e1 \ - --hash=sha256:183afdf0ec5b1b211724dfef3d2cad2d767cbefac291f24d69b00546c1837fb6 \ - --hash=sha256:211260621ab1cd7324e0798d6be953d00b74e0428382991adfddb352252f1d62 \ - --hash=sha256:267e3f78697a6c00c689c03db4876dd1efdfea2f251a5ad6555e82a26847b4ac \ - --hash=sha256:2efae9db7a8c05ad5547d522e7dbe62c83d838d3906a3716d1478b6c1d61388d \ - --hash=sha256:370788a63915e82fd6f212865a596a0fefcbb7d408bbbb13dea723d971ed8bdc \ - --hash=sha256:39e21ceb7388e4bb37f4c679d72707ed46c2fbf2a5609b8b8ebc4b067d977df2 \ - --hash=sha256:3e123d878ba170397916557d31c8f589951e353cc95fb7f24f6bb69adc1a8a97 \ - --hash=sha256:4879da6c9b73443f97e731b617184a596ac1235fe91f98d279a7af36c796da35 \ - --hash=sha256:4e964b4ff86550a7a7d56345c7864b18f403f5bd7380edf44a3c1fb4ee7ac6c6 \ - --hash=sha256:639c5f0b21776605dd6c9dbe592d5228f021404dafd377e2b7ac046b0349b1a1 \ - --hash=sha256:669dd0c4167f6f2cd9f57041e03c3c2ebf9063d0757dc89f79ba1daa2bfca9d4 \ - --hash=sha256:6778e1b2f81dfc7bc58e4b259363b83d2e509a65198e85d5700dfae4c6c8ff1c \ - --hash=sha256:683407d92dc953c8a7347119596f0b0e6c55eb98ebebd9b23437501b28dcbb8e \ - --hash=sha256:79b1e0869db7c830ba6a981d58711c88b6677506e648496b1f64ac7d15633aec \ - --hash=sha256:7d5d014b7daa8b0bf2eaef684295acae12b036d79f54178b92a2b6a56f92278f \ - --hash=sha256:98f80dee3c03455e92796b58b98ff6ca0b2a6f652120c263efdba4d6c5e58f72 \ - --hash=sha256:a94d55d142c9265f4ea46fab70977a1944ecae359ae867397757d836ea5a3f47 \ - --hash=sha256:a9916d2bb8865f973824fb47436fa45e1ebf2efd920f2b9f99342cb7fab93f72 \ - --hash=sha256:c542eeda69212fa10a7ada75e668876fdec5f856cd3d06829e6aa64ad17c8dfe \ - --hash=sha256:cf4afcfac006ece570e32d6fa90ab74a17245b83dfd6655a6f68568098345ff6 \ - --hash=sha256:ebd9d7f80ccf7a82ac5f88c521115cc55d84e35bf8b446fcd7836eb6b98929a3 \ - --hash=sha256:ed855bbe3eb3715fca349c80174cfcfd699c2f9de574d40527b8429acae23a66 +typed-ast==1.5.4 # via astroid -typing-extensions==4.5.0 \ - --hash=sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb \ - --hash=sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4 +typing-extensions==4.5.0 # via # astroid # importlib-metadata @@ -485,122 +176,33 @@ typing-extensions==4.5.0 \ # pylint # rich # tox -urllib3==1.26.15 \ - --hash=sha256:8a388717b9476f934a21484e8c8e61875ab60644d29b9b39e11e4b9dc1c6b305 \ - --hash=sha256:aa751d169e23c7479ce47a0cb0da579e3ede798f994f5816a74e4f4500dcea42 +urllib3==1.26.15 # via # requests # twine -urwid==2.1.2 \ - --hash=sha256:588bee9c1cb208d0906a9f73c613d2bd32c3ed3702012f51efe318a3f2127eae +urwid==2.1.2 # via # pudb # urwid-readline -urwid-readline==0.13 \ - --hash=sha256:018020cbc864bb5ed87be17dc26b069eae2755cb29f3a9c569aac3bded1efaf4 +urwid-readline==0.13 # via pudb -virtualenv==20.21.0 \ - --hash=sha256:31712f8f2a17bd06234fa97fdf19609e789dd4e3e4bf108c3da71d710651adbc \ - --hash=sha256:f50e3e60f990a0757c9b68333c9fdaa72d7188caa417f96af9e52407831a3b68 +virtualenv==20.21.0 # via # -r requirements/pip.in # tox -webencodings==0.5.1 \ - --hash=sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78 \ - --hash=sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923 +webencodings==0.5.1 # via bleach -wrapt==1.15.0 \ - --hash=sha256:02fce1852f755f44f95af51f69d22e45080102e9d00258053b79367d07af39c0 \ - --hash=sha256:077ff0d1f9d9e4ce6476c1a924a3332452c1406e59d90a2cf24aeb29eeac9420 \ - --hash=sha256:078e2a1a86544e644a68422f881c48b84fef6d18f8c7a957ffd3f2e0a74a0d4a \ - --hash=sha256:0970ddb69bba00670e58955f8019bec4a42d1785db3faa043c33d81de2bf843c \ - --hash=sha256:1286eb30261894e4c70d124d44b7fd07825340869945c79d05bda53a40caa079 \ - --hash=sha256:21f6d9a0d5b3a207cdf7acf8e58d7d13d463e639f0c7e01d82cdb671e6cb7923 \ - --hash=sha256:230ae493696a371f1dbffaad3dafbb742a4d27a0afd2b1aecebe52b740167e7f \ - --hash=sha256:26458da5653aa5b3d8dc8b24192f574a58984c749401f98fff994d41d3f08da1 \ - --hash=sha256:2cf56d0e237280baed46f0b5316661da892565ff58309d4d2ed7dba763d984b8 \ - --hash=sha256:2e51de54d4fb8fb50d6ee8327f9828306a959ae394d3e01a1ba8b2f937747d86 \ - --hash=sha256:2fbfbca668dd15b744418265a9607baa970c347eefd0db6a518aaf0cfbd153c0 \ - --hash=sha256:38adf7198f8f154502883242f9fe7333ab05a5b02de7d83aa2d88ea621f13364 \ - --hash=sha256:3a8564f283394634a7a7054b7983e47dbf39c07712d7b177b37e03f2467a024e \ - --hash=sha256:3abbe948c3cbde2689370a262a8d04e32ec2dd4f27103669a45c6929bcdbfe7c \ - --hash=sha256:3bbe623731d03b186b3d6b0d6f51865bf598587c38d6f7b0be2e27414f7f214e \ - --hash=sha256:40737a081d7497efea35ab9304b829b857f21558acfc7b3272f908d33b0d9d4c \ - --hash=sha256:41d07d029dd4157ae27beab04d22b8e261eddfc6ecd64ff7000b10dc8b3a5727 \ - --hash=sha256:46ed616d5fb42f98630ed70c3529541408166c22cdfd4540b88d5f21006b0eff \ - --hash=sha256:493d389a2b63c88ad56cdc35d0fa5752daac56ca755805b1b0c530f785767d5e \ - --hash=sha256:4ff0d20f2e670800d3ed2b220d40984162089a6e2c9646fdb09b85e6f9a8fc29 \ - --hash=sha256:54accd4b8bc202966bafafd16e69da9d5640ff92389d33d28555c5fd4f25ccb7 \ - --hash=sha256:56374914b132c702aa9aa9959c550004b8847148f95e1b824772d453ac204a72 \ - --hash=sha256:578383d740457fa790fdf85e6d346fda1416a40549fe8db08e5e9bd281c6a475 \ - --hash=sha256:58d7a75d731e8c63614222bcb21dd992b4ab01a399f1f09dd82af17bbfc2368a \ - --hash=sha256:5c5aa28df055697d7c37d2099a7bc09f559d5053c3349b1ad0c39000e611d317 \ - --hash=sha256:5fc8e02f5984a55d2c653f5fea93531e9836abbd84342c1d1e17abc4a15084c2 \ - --hash=sha256:63424c681923b9f3bfbc5e3205aafe790904053d42ddcc08542181a30a7a51bd \ - --hash=sha256:64b1df0f83706b4ef4cfb4fb0e4c2669100fd7ecacfb59e091fad300d4e04640 \ - --hash=sha256:74934ebd71950e3db69960a7da29204f89624dde411afbfb3b4858c1409b1e98 \ - --hash=sha256:75669d77bb2c071333417617a235324a1618dba66f82a750362eccbe5b61d248 \ - --hash=sha256:75760a47c06b5974aa5e01949bf7e66d2af4d08cb8c1d6516af5e39595397f5e \ - --hash=sha256:76407ab327158c510f44ded207e2f76b657303e17cb7a572ffe2f5a8a48aa04d \ - --hash=sha256:76e9c727a874b4856d11a32fb0b389afc61ce8aaf281ada613713ddeadd1cfec \ - --hash=sha256:77d4c1b881076c3ba173484dfa53d3582c1c8ff1f914c6461ab70c8428b796c1 \ - --hash=sha256:780c82a41dc493b62fc5884fb1d3a3b81106642c5c5c78d6a0d4cbe96d62ba7e \ - --hash=sha256:7dc0713bf81287a00516ef43137273b23ee414fe41a3c14be10dd95ed98a2df9 \ - --hash=sha256:7eebcdbe3677e58dd4c0e03b4f2cfa346ed4049687d839adad68cc38bb559c92 \ - --hash=sha256:896689fddba4f23ef7c718279e42f8834041a21342d95e56922e1c10c0cc7afb \ - --hash=sha256:96177eb5645b1c6985f5c11d03fc2dbda9ad24ec0f3a46dcce91445747e15094 \ - --hash=sha256:96e25c8603a155559231c19c0349245eeb4ac0096fe3c1d0be5c47e075bd4f46 \ - --hash=sha256:9d37ac69edc5614b90516807de32d08cb8e7b12260a285ee330955604ed9dd29 \ - --hash=sha256:9ed6aa0726b9b60911f4aed8ec5b8dd7bf3491476015819f56473ffaef8959bd \ - --hash=sha256:a487f72a25904e2b4bbc0817ce7a8de94363bd7e79890510174da9d901c38705 \ - --hash=sha256:a4cbb9ff5795cd66f0066bdf5947f170f5d63a9274f99bdbca02fd973adcf2a8 \ - --hash=sha256:a74d56552ddbde46c246b5b89199cb3fd182f9c346c784e1a93e4dc3f5ec9975 \ - --hash=sha256:a89ce3fd220ff144bd9d54da333ec0de0399b52c9ac3d2ce34b569cf1a5748fb \ - --hash=sha256:abd52a09d03adf9c763d706df707c343293d5d106aea53483e0ec8d9e310ad5e \ - --hash=sha256:abd8f36c99512755b8456047b7be10372fca271bf1467a1caa88db991e7c421b \ - --hash=sha256:af5bd9ccb188f6a5fdda9f1f09d9f4c86cc8a539bd48a0bfdc97723970348418 \ - --hash=sha256:b02f21c1e2074943312d03d243ac4388319f2456576b2c6023041c4d57cd7019 \ - --hash=sha256:b06fa97478a5f478fb05e1980980a7cdf2712015493b44d0c87606c1513ed5b1 \ - --hash=sha256:b0724f05c396b0a4c36a3226c31648385deb6a65d8992644c12a4963c70326ba \ - --hash=sha256:b130fe77361d6771ecf5a219d8e0817d61b236b7d8b37cc045172e574ed219e6 \ - --hash=sha256:b56d5519e470d3f2fe4aa7585f0632b060d532d0696c5bdfb5e8319e1d0f69a2 \ - --hash=sha256:b67b819628e3b748fd3c2192c15fb951f549d0f47c0449af0764d7647302fda3 \ - --hash=sha256:ba1711cda2d30634a7e452fc79eabcadaffedf241ff206db2ee93dd2c89a60e7 \ - --hash=sha256:bbeccb1aa40ab88cd29e6c7d8585582c99548f55f9b2581dfc5ba68c59a85752 \ - --hash=sha256:bd84395aab8e4d36263cd1b9308cd504f6cf713b7d6d3ce25ea55670baec5416 \ - --hash=sha256:c99f4309f5145b93eca6e35ac1a988f0dc0a7ccf9ccdcd78d3c0adf57224e62f \ - --hash=sha256:ca1cccf838cd28d5a0883b342474c630ac48cac5df0ee6eacc9c7290f76b11c1 \ - --hash=sha256:cd525e0e52a5ff16653a3fc9e3dd827981917d34996600bbc34c05d048ca35cc \ - --hash=sha256:cdb4f085756c96a3af04e6eca7f08b1345e94b53af8921b25c72f096e704e145 \ - --hash=sha256:ce42618f67741d4697684e501ef02f29e758a123aa2d669e2d964ff734ee00ee \ - --hash=sha256:d06730c6aed78cee4126234cf2d071e01b44b915e725a6cb439a879ec9754a3a \ - --hash=sha256:d5fe3e099cf07d0fb5a1e23d399e5d4d1ca3e6dfcbe5c8570ccff3e9208274f7 \ - --hash=sha256:d6bcbfc99f55655c3d93feb7ef3800bd5bbe963a755687cbf1f490a71fb7794b \ - --hash=sha256:d787272ed958a05b2c86311d3a4135d3c2aeea4fc655705f074130aa57d71653 \ - --hash=sha256:e169e957c33576f47e21864cf3fc9ff47c223a4ebca8960079b8bd36cb014fd0 \ - --hash=sha256:e20076a211cd6f9b44a6be58f7eeafa7ab5720eb796975d0c03f05b47d89eb90 \ - --hash=sha256:e826aadda3cae59295b95343db8f3d965fb31059da7de01ee8d1c40a60398b29 \ - --hash=sha256:eef4d64c650f33347c1f9266fa5ae001440b232ad9b98f1f43dfe7a79435c0a6 \ - --hash=sha256:f2e69b3ed24544b0d3dbe2c5c0ba5153ce50dcebb576fdc4696d52aa22db6034 \ - --hash=sha256:f87ec75864c37c4c6cb908d282e1969e79763e0d9becdfe9fe5473b7bb1e5f09 \ - --hash=sha256:fbec11614dba0424ca72f4e8ba3c420dba07b4a7c206c8c8e4e73f2e98f4c559 \ - --hash=sha256:fd69666217b62fa5d7c6aa88e507493a34dec4fa20c5bd925e4bc12fce586639 +wrapt==1.15.0 # via astroid -zipp==3.15.0 \ - --hash=sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b \ - --hash=sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556 +zipp==3.15.0 # via # importlib-metadata # importlib-resources # The following packages are considered to be unsafe in a requirements file: -pip==23.0.1 \ - --hash=sha256:236bcb61156d76c4b8a05821b988c7b8c35bf0da28a4b614e8d6ab5212c25c6f \ - --hash=sha256:cd015ea1bfb0fcef59d8a286c1f8bebcb983f6317719d415dc5351efb7cd7024 +pip==23.0.1 # via -r requirements/pip.in -setuptools==65.7.0 \ - --hash=sha256:4d3c92fac8f1118bb77a22181355e29c239cabfe2b9effdaa665c66b711136d7 \ - --hash=sha256:8ab4f1dbf2b4a65f7eec5ad0c620e84c34111a68d3349833494b9088212214dd +setuptools==65.7.0 # via # -c requirements/pins.pip # -r requirements/pip.in diff --git a/requirements/kit.pip b/requirements/kit.pip index 6cd6a9932..4f3fb0374 100644 --- a/requirements/kit.pip +++ b/requirements/kit.pip @@ -4,87 +4,51 @@ # # make upgrade # -auditwheel==5.3.0 \ - --hash=sha256:1da1af54de5badd10149250c257a799be003fd976794716f17914e3d4b4a9fc9 \ - --hash=sha256:d0be87b5b6fb767eacf1ea4afa3292574cb0f4473a3c0ba55bc9dff1d0b5a333 +auditwheel==5.3.0 # via -r requirements/kit.in -bashlex==0.18 \ - --hash=sha256:5bb03a01c6d5676338c36fd1028009c8ad07e7d61d8a1ce3f513b7fff52796ee \ - --hash=sha256:91d73a23a3e51711919c1c899083890cdecffc91d8c088942725ac13e9dcfffa +bashlex==0.18 # via cibuildwheel -bracex==2.3.post1 \ - --hash=sha256:351b7f20d56fb9ea91f9b9e9e7664db466eb234188c175fd943f8f755c807e73 \ - --hash=sha256:e7b23fc8b2cd06d3dec0692baabecb249dda94e06a617901ff03a6c56fd71693 +bracex==2.3.post1 # via cibuildwheel -build==0.10.0 \ - --hash=sha256:af266720050a66c893a6096a2f410989eeac74ff9a68ba194b3f6473e8e26171 \ - --hash=sha256:d5b71264afdb5951d6704482aac78de887c80691c52b88a9ad195983ca2c9269 +build==0.10.0 # via -r requirements/kit.in -certifi==2022.12.7 \ - --hash=sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3 \ - --hash=sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18 +certifi==2022.12.7 # via cibuildwheel -cibuildwheel==2.12.1 \ - --hash=sha256:ca0861f7c31c82c09daf4f80304341d93b0a2b35e6bde2f83c6ebde79a710f0d \ - --hash=sha256:e2f9d88dda9542b5773434d0278ead954c43234c0486067bf5c218a60854487d +cibuildwheel==2.12.1 # via -r requirements/kit.in -colorama==0.4.6 \ - --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \ - --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 +colorama==0.4.6 # via -r requirements/kit.in -filelock==3.10.6 \ - --hash=sha256:409105becd604d6b176a483f855e7e8903c5cb2873e47f2c64f66a370c046aaf \ - --hash=sha256:52f119747b2b9c4730dac715a7b1ab34b8ee70fd9259cba158ee53da566387ff +filelock==3.10.6 # via cibuildwheel -importlib-metadata==6.1.0 \ - --hash=sha256:43ce9281e097583d758c2c708c4376371261a02c34682491a8e98352365aad20 \ - --hash=sha256:ff80f3b5394912eb1b108fcfd444dc78b7f1f3e16b16188054bd01cb9cb86f09 +importlib-metadata==6.1.0 # via # auditwheel # build -packaging==23.0 \ - --hash=sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2 \ - --hash=sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97 +packaging==23.0 # via # build # cibuildwheel -platformdirs==3.2.0 \ - --hash=sha256:d5b638ca397f25f979350ff789db335903d7ea010ab28903f57b27e1b16c2b08 \ - --hash=sha256:ebe11c0d7a805086e99506aa331612429a72ca7cd52a1f0d277dc4adc20cb10e +platformdirs==3.2.0 # via cibuildwheel -pyelftools==0.29 \ - --hash=sha256:519f38cf412f073b2d7393aa4682b0190fa901f7c3fa0bff2b82d537690c7fc1 \ - --hash=sha256:ec761596aafa16e282a31de188737e5485552469ac63b60cfcccf22263fd24ff +pyelftools==0.29 # via auditwheel -pyproject-hooks==1.0.0 \ - --hash=sha256:283c11acd6b928d2f6a7c73fa0d01cb2bdc5f07c57a2eeb6e83d5e56b97976f8 \ - --hash=sha256:f271b298b97f5955d53fb12b72c1fb1948c22c1a6b70b315c54cedaca0264ef5 +pyproject-hooks==1.0.0 # via build -tomli==2.0.1 \ - --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ - --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f +tomli==2.0.1 # via # build # cibuildwheel # pyproject-hooks -typing-extensions==4.5.0 \ - --hash=sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb \ - --hash=sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4 +typing-extensions==4.5.0 # via # cibuildwheel # importlib-metadata # platformdirs -wheel==0.40.0 \ - --hash=sha256:cd1196f3faee2b31968d626e1731c94f99cbdb67cf5a46e4f5656cbee7738873 \ - --hash=sha256:d236b20e7cb522daf2390fa84c55eea81c5c30190f90f29ae2ca1ad8355bf247 +wheel==0.40.0 # via -r requirements/kit.in -zipp==3.15.0 \ - --hash=sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b \ - --hash=sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556 +zipp==3.15.0 # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: -setuptools==65.7.0 \ - --hash=sha256:4d3c92fac8f1118bb77a22181355e29c239cabfe2b9effdaa665c66b711136d7 \ - --hash=sha256:8ab4f1dbf2b4a65f7eec5ad0c620e84c34111a68d3349833494b9088212214dd +setuptools==65.7.0 # via -r requirements/kit.in diff --git a/requirements/light-threads.pip b/requirements/light-threads.pip index b8cb2ae88..e53a4d13f 100644 --- a/requirements/light-threads.pip +++ b/requirements/light-threads.pip @@ -4,248 +4,30 @@ # # make upgrade # -cffi==1.15.1 \ - --hash=sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5 \ - --hash=sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef \ - --hash=sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104 \ - --hash=sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426 \ - --hash=sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405 \ - --hash=sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375 \ - --hash=sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a \ - --hash=sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e \ - --hash=sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc \ - --hash=sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf \ - --hash=sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185 \ - --hash=sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497 \ - --hash=sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3 \ - --hash=sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35 \ - --hash=sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c \ - --hash=sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83 \ - --hash=sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21 \ - --hash=sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca \ - --hash=sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984 \ - --hash=sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac \ - --hash=sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd \ - --hash=sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee \ - --hash=sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a \ - --hash=sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2 \ - --hash=sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192 \ - --hash=sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7 \ - --hash=sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585 \ - --hash=sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f \ - --hash=sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e \ - --hash=sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27 \ - --hash=sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b \ - --hash=sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e \ - --hash=sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e \ - --hash=sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d \ - --hash=sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c \ - --hash=sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415 \ - --hash=sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82 \ - --hash=sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02 \ - --hash=sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314 \ - --hash=sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325 \ - --hash=sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c \ - --hash=sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3 \ - --hash=sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914 \ - --hash=sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045 \ - --hash=sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d \ - --hash=sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9 \ - --hash=sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5 \ - --hash=sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2 \ - --hash=sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c \ - --hash=sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3 \ - --hash=sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2 \ - --hash=sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8 \ - --hash=sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d \ - --hash=sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d \ - --hash=sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9 \ - --hash=sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162 \ - --hash=sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76 \ - --hash=sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4 \ - --hash=sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e \ - --hash=sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9 \ - --hash=sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6 \ - --hash=sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b \ - --hash=sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01 \ - --hash=sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0 +cffi==1.15.1 # via -r requirements/light-threads.in -dnspython==2.3.0 \ - --hash=sha256:224e32b03eb46be70e12ef6d64e0be123a64e621ab4c0822ff6d450d52a540b9 \ - --hash=sha256:89141536394f909066cabd112e3e1a37e4e654db00a25308b0f130bc3152eb46 +dnspython==2.3.0 # via eventlet -eventlet==0.33.3 \ - --hash=sha256:722803e7eadff295347539da363d68ae155b8b26ae6a634474d0a920be73cfda \ - --hash=sha256:e43b9ae05ba4bb477a10307699c9aff7ff86121b2640f9184d29059f5a687df8 +eventlet==0.33.3 # via -r requirements/light-threads.in -gevent==22.10.2 \ - --hash=sha256:018f93de7d5318d2fb440f846839a4464738468c3476d5c9cf7da45bb71c18bd \ - --hash=sha256:0d581f22a5be6281b11ad6309b38b18f0638cf896931223cbaa5adb904826ef6 \ - --hash=sha256:1472012493ca1fac103f700d309cb6ef7964dcdb9c788d1768266e77712f5e49 \ - --hash=sha256:172caa66273315f283e90a315921902cb6549762bdcb0587fd60cb712a9d6263 \ - --hash=sha256:17b68f4c9e20e47ad49fe797f37f91d5bbeace8765ce2707f979a8d4ec197e4d \ - --hash=sha256:1ca01da176ee37b3527a2702f7d40dbc9ffb8cfc7be5a03bfa4f9eec45e55c46 \ - --hash=sha256:1d543c9407a1e4bca11a8932916988cfb16de00366de5bf7bc9e7a3f61e60b18 \ - --hash=sha256:1e1286a76f15b5e15f1e898731d50529e249529095a032453f2c101af3fde71c \ - --hash=sha256:1e955238f59b2947631c9782a713280dd75884e40e455313b5b6bbc20b92ff73 \ - --hash=sha256:1f001cac0ba8da76abfeb392a3057f81fab3d67cc916c7df8ea977a44a2cc989 \ - --hash=sha256:1ff3796692dff50fec2f381b9152438b221335f557c4f9b811f7ded51b7a25a1 \ - --hash=sha256:2929377c8ebfb6f4d868d161cd8de2ea6b9f6c7a5fcd4f78bcd537319c16190b \ - --hash=sha256:319d8b1699b7b8134de66d656cd739b308ab9c45ace14d60ae44de7775b456c9 \ - --hash=sha256:323b207b281ba0405fea042067fa1a61662e5ac0d574ede4ebbda03efd20c350 \ - --hash=sha256:3b7eae8a0653ba95a224faaddf629a913ace408edb67384d3117acf42d7dcf89 \ - --hash=sha256:4114f0f439f0b547bb6f1d474fee99ddb46736944ad2207cef3771828f6aa358 \ - --hash=sha256:4197d423e198265eef39a0dea286ef389da9148e070310f34455ecee8172c391 \ - --hash=sha256:494c7f29e94df9a1c3157d67bb7edfa32a46eed786e04d9ee68d39f375e30001 \ - --hash=sha256:4e2f008c82dc54ec94f4de12ca6feea60e419babb48ec145456907ae61625aa4 \ - --hash=sha256:53ee7f170ed42c7561fe8aff5d381dc9a4124694e70580d0c02fba6aafc0ea37 \ - --hash=sha256:54f4bfd74c178351a4a05c5c7df6f8a0a279ff6f392b57608ce0e83c768207f9 \ - --hash=sha256:58898dbabb5b11e4d0192aae165ad286dc6742c543e1be9d30dc82753547c508 \ - --hash=sha256:59b47e81b399d49a5622f0f503c59f1ce57b7705306ea0196818951dfc2f36c8 \ - --hash=sha256:5aa99e4882a9e909b4756ee799c6fa0f79eb0542779fad4cc60efa23ec1b2aa8 \ - --hash=sha256:6c04ee32c11e9fcee47c1b431834878dc987a7a2cc4fe126ddcae3bad723ce89 \ - --hash=sha256:84c517e33ed604fa06b7d756dc0171169cc12f7fdd68eb7b17708a62eebf4516 \ - --hash=sha256:8729129edef2637a8084258cb9ec4e4d5ca45d97ac77aa7a6ff19ccb530ab731 \ - --hash=sha256:877abdb3a669576b1d51ce6a49b7260b2a96f6b2424eb93287e779a3219d20ba \ - --hash=sha256:8c192d2073e558e241f0b592c1e2b34127a4481a5be240cad4796533b88b1a98 \ - --hash=sha256:8f2477e7b0a903a01485c55bacf2089110e5f767014967ba4b287ff390ae2638 \ - --hash=sha256:96c56c280e3c43cfd075efd10b250350ed5ffd3c1514ec99a080b1b92d7c8374 \ - --hash=sha256:97cd42382421779f5d82ec5007199e8a84aa288114975429e4fd0a98f2290f10 \ - --hash=sha256:98bc510e80f45486ef5b806a1c305e0e89f0430688c14984b0dbdec03331f48b \ - --hash=sha256:990d7069f14dc40674e0d5cb43c68fd3bad8337048613b9bb94a0c4180ffc176 \ - --hash=sha256:9d85574eb729f981fea9a78998725a06292d90a3ed50ddca74530c3148c0be41 \ - --hash=sha256:a2237451c721a0f874ef89dbb4af4fdc172b76a964befaa69deb15b8fff10f49 \ - --hash=sha256:a47a4e77e2bc668856aad92a0b8de7ee10768258d93cd03968e6c7ba2e832f76 \ - --hash=sha256:a5488eba6a568b4d23c072113da4fc0feb1b5f5ede7381656dc913e0d82204e2 \ - --hash=sha256:ae90226074a6089371a95f20288431cd4b3f6b0b096856afd862e4ac9510cddd \ - --hash=sha256:b43d500d7d3c0e03070dee813335bb5315215aa1cf6a04c61093dfdd718640b3 \ - --hash=sha256:b6c144e08dfad4106effc043a026e5d0c0eff6ad031904c70bf5090c63f3a6a7 \ - --hash=sha256:d21ad79cca234cdbfa249e727500b0ddcbc7adfff6614a96e6eaa49faca3e4f2 \ - --hash=sha256:d82081656a5b9a94d37c718c8646c757e1617e389cdc533ea5e6a6f0b8b78545 \ - --hash=sha256:da4183f0b9d9a1e25e1758099220d32c51cc2c6340ee0dea3fd236b2b37598e4 \ - --hash=sha256:db562a8519838bddad0c439a2b12246bab539dd50e299ea7ff3644274a33b6a5 \ - --hash=sha256:ddaa3e310a8f1a45b5c42cf50b54c31003a3028e7d4e085059090ea0e7a5fddd \ - --hash=sha256:ed7f16613eebf892a6a744d7a4a8f345bc6f066a0ff3b413e2479f9c0a180193 \ - --hash=sha256:efc003b6c1481165af61f0aeac248e0a9ac8d880bb3acbe469b448674b2d5281 \ - --hash=sha256:f01c9adbcb605364694b11dcd0542ec468a29ac7aba2fb5665dc6caf17ba4d7e \ - --hash=sha256:f23d0997149a816a2a9045af29c66f67f405a221745b34cefeac5769ed451db8 \ - --hash=sha256:f3329bedbba4d3146ae58c667e0f9ac1e6f1e1e6340c7593976cdc60aa7d1a47 \ - --hash=sha256:f7ed2346eb9dc4344f9cb0d7963ce5b74fe16fdd031a2809bb6c2b6eba7ebcd5 +gevent==22.10.2 # via -r requirements/light-threads.in -greenlet==2.0.2 \ - --hash=sha256:03a8f4f3430c3b3ff8d10a2a86028c660355ab637cee9333d63d66b56f09d52a \ - --hash=sha256:0bf60faf0bc2468089bdc5edd10555bab6e85152191df713e2ab1fcc86382b5a \ - --hash=sha256:18a7f18b82b52ee85322d7a7874e676f34ab319b9f8cce5de06067384aa8ff43 \ - --hash=sha256:18e98fb3de7dba1c0a852731c3070cf022d14f0d68b4c87a19cc1016f3bb8b33 \ - --hash=sha256:1a819eef4b0e0b96bb0d98d797bef17dc1b4a10e8d7446be32d1da33e095dbb8 \ - --hash=sha256:26fbfce90728d82bc9e6c38ea4d038cba20b7faf8a0ca53a9c07b67318d46088 \ - --hash=sha256:2780572ec463d44c1d3ae850239508dbeb9fed38e294c68d19a24d925d9223ca \ - --hash=sha256:283737e0da3f08bd637b5ad058507e578dd462db259f7f6e4c5c365ba4ee9343 \ - --hash=sha256:2d4686f195e32d36b4d7cf2d166857dbd0ee9f3d20ae349b6bf8afc8485b3645 \ - --hash=sha256:2dd11f291565a81d71dab10b7033395b7a3a5456e637cf997a6f33ebdf06f8db \ - --hash=sha256:30bcf80dda7f15ac77ba5af2b961bdd9dbc77fd4ac6105cee85b0d0a5fcf74df \ - --hash=sha256:32e5b64b148966d9cccc2c8d35a671409e45f195864560829f395a54226408d3 \ - --hash=sha256:36abbf031e1c0f79dd5d596bfaf8e921c41df2bdf54ee1eed921ce1f52999a86 \ - --hash=sha256:3a06ad5312349fec0ab944664b01d26f8d1f05009566339ac6f63f56589bc1a2 \ - --hash=sha256:3a51c9751078733d88e013587b108f1b7a1fb106d402fb390740f002b6f6551a \ - --hash=sha256:3c9b12575734155d0c09d6c3e10dbd81665d5c18e1a7c6597df72fd05990c8cf \ - --hash=sha256:3f6ea9bd35eb450837a3d80e77b517ea5bc56b4647f5502cd28de13675ee12f7 \ - --hash=sha256:4b58adb399c4d61d912c4c331984d60eb66565175cdf4a34792cd9600f21b394 \ - --hash=sha256:4d2e11331fc0c02b6e84b0d28ece3a36e0548ee1a1ce9ddde03752d9b79bba40 \ - --hash=sha256:5454276c07d27a740c5892f4907c86327b632127dd9abec42ee62e12427ff7e3 \ - --hash=sha256:561091a7be172ab497a3527602d467e2b3fbe75f9e783d8b8ce403fa414f71a6 \ - --hash=sha256:6c3acb79b0bfd4fe733dff8bc62695283b57949ebcca05ae5c129eb606ff2d74 \ - --hash=sha256:703f18f3fda276b9a916f0934d2fb6d989bf0b4fb5a64825260eb9bfd52d78f0 \ - --hash=sha256:7492e2b7bd7c9b9916388d9df23fa49d9b88ac0640db0a5b4ecc2b653bf451e3 \ - --hash=sha256:76ae285c8104046b3a7f06b42f29c7b73f77683df18c49ab5af7983994c2dd91 \ - --hash=sha256:7cafd1208fdbe93b67c7086876f061f660cfddc44f404279c1585bbf3cdc64c5 \ - --hash=sha256:7efde645ca1cc441d6dc4b48c0f7101e8d86b54c8530141b09fd31cef5149ec9 \ - --hash=sha256:88d9ab96491d38a5ab7c56dd7a3cc37d83336ecc564e4e8816dbed12e5aaefc8 \ - --hash=sha256:8eab883b3b2a38cc1e050819ef06a7e6344d4a990d24d45bc6f2cf959045a45b \ - --hash=sha256:910841381caba4f744a44bf81bfd573c94e10b3045ee00de0cbf436fe50673a6 \ - --hash=sha256:9190f09060ea4debddd24665d6804b995a9c122ef5917ab26e1566dcc712ceeb \ - --hash=sha256:937e9020b514ceedb9c830c55d5c9872abc90f4b5862f89c0887033ae33c6f73 \ - --hash=sha256:94c817e84245513926588caf1152e3b559ff794d505555211ca041f032abbb6b \ - --hash=sha256:971ce5e14dc5e73715755d0ca2975ac88cfdaefcaab078a284fea6cfabf866df \ - --hash=sha256:9d14b83fab60d5e8abe587d51c75b252bcc21683f24699ada8fb275d7712f5a9 \ - --hash=sha256:9f35ec95538f50292f6d8f2c9c9f8a3c6540bbfec21c9e5b4b751e0a7c20864f \ - --hash=sha256:a1846f1b999e78e13837c93c778dcfc3365902cfb8d1bdb7dd73ead37059f0d0 \ - --hash=sha256:acd2162a36d3de67ee896c43effcd5ee3de247eb00354db411feb025aa319857 \ - --hash=sha256:b0ef99cdbe2b682b9ccbb964743a6aca37905fda5e0452e5ee239b1654d37f2a \ - --hash=sha256:b80f600eddddce72320dbbc8e3784d16bd3fb7b517e82476d8da921f27d4b249 \ - --hash=sha256:b864ba53912b6c3ab6bcb2beb19f19edd01a6bfcbdfe1f37ddd1778abfe75a30 \ - --hash=sha256:b9ec052b06a0524f0e35bd8790686a1da006bd911dd1ef7d50b77bfbad74e292 \ - --hash=sha256:ba2956617f1c42598a308a84c6cf021a90ff3862eddafd20c3333d50f0edb45b \ - --hash=sha256:bdfea8c661e80d3c1c99ad7c3ff74e6e87184895bbaca6ee8cc61209f8b9b85d \ - --hash=sha256:be4ed120b52ae4d974aa40215fcdfde9194d63541c7ded40ee12eb4dda57b76b \ - --hash=sha256:c4302695ad8027363e96311df24ee28978162cdcdd2006476c43970b384a244c \ - --hash=sha256:c48f54ef8e05f04d6eff74b8233f6063cb1ed960243eacc474ee73a2ea8573ca \ - --hash=sha256:c9c59a2120b55788e800d82dfa99b9e156ff8f2227f07c5e3012a45a399620b7 \ - --hash=sha256:cd021c754b162c0fb55ad5d6b9d960db667faad0fa2ff25bb6e1301b0b6e6a75 \ - --hash=sha256:d27ec7509b9c18b6d73f2f5ede2622441de812e7b1a80bbd446cb0633bd3d5ae \ - --hash=sha256:d5508f0b173e6aa47273bdc0a0b5ba055b59662ba7c7ee5119528f466585526b \ - --hash=sha256:d75209eed723105f9596807495d58d10b3470fa6732dd6756595e89925ce2470 \ - --hash=sha256:db1a39669102a1d8d12b57de2bb7e2ec9066a6f2b3da35ae511ff93b01b5d564 \ - --hash=sha256:dbfcfc0218093a19c252ca8eb9aee3d29cfdcb586df21049b9d777fd32c14fd9 \ - --hash=sha256:e0f72c9ddb8cd28532185f54cc1453f2c16fb417a08b53a855c4e6a418edd099 \ - --hash=sha256:e7c8dc13af7db097bed64a051d2dd49e9f0af495c26995c00a9ee842690d34c0 \ - --hash=sha256:ea9872c80c132f4663822dd2a08d404073a5a9b5ba6155bea72fb2a79d1093b5 \ - --hash=sha256:eff4eb9b7eb3e4d0cae3d28c283dc16d9bed6b193c2e1ace3ed86ce48ea8df19 \ - --hash=sha256:f82d4d717d8ef19188687aa32b8363e96062911e63ba22a0cff7802a8e58e5f1 \ - --hash=sha256:fc3a569657468b6f3fb60587e48356fe512c1754ca05a564f11366ac9e306526 +greenlet==2.0.2 # via # -r requirements/light-threads.in # eventlet # gevent -pycparser==2.21 \ - --hash=sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9 \ - --hash=sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206 +pycparser==2.21 # via cffi -six==1.16.0 \ - --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ - --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 +six==1.16.0 # via eventlet -zope-event==4.6 \ - --hash=sha256:73d9e3ef750cca14816a9c322c7250b0d7c9dbc337df5d1b807ff8d3d0b9e97c \ - --hash=sha256:81d98813046fc86cc4136e3698fee628a3282f9c320db18658c21749235fce80 +zope-event==4.6 # via gevent -zope-interface==6.0 \ - --hash=sha256:042f2381118b093714081fd82c98e3b189b68db38ee7d35b63c327c470ef8373 \ - --hash=sha256:0ec9653825f837fbddc4e4b603d90269b501486c11800d7c761eee7ce46d1bbb \ - --hash=sha256:12175ca6b4db7621aedd7c30aa7cfa0a2d65ea3a0105393e05482d7a2d367446 \ - --hash=sha256:1592f68ae11e557b9ff2bc96ac8fc30b187e77c45a3c9cd876e3368c53dc5ba8 \ - --hash=sha256:23ac41d52fd15dd8be77e3257bc51bbb82469cf7f5e9a30b75e903e21439d16c \ - --hash=sha256:424d23b97fa1542d7be882eae0c0fc3d6827784105264a8169a26ce16db260d8 \ - --hash=sha256:4407b1435572e3e1610797c9203ad2753666c62883b921318c5403fb7139dec2 \ - --hash=sha256:48f4d38cf4b462e75fac78b6f11ad47b06b1c568eb59896db5b6ec1094eb467f \ - --hash=sha256:4c3d7dfd897a588ec27e391edbe3dd320a03684457470415870254e714126b1f \ - --hash=sha256:5171eb073474a5038321409a630904fd61f12dd1856dd7e9d19cd6fe092cbbc5 \ - --hash=sha256:5a158846d0fca0a908c1afb281ddba88744d403f2550dc34405c3691769cdd85 \ - --hash=sha256:6ee934f023f875ec2cfd2b05a937bd817efcc6c4c3f55c5778cbf78e58362ddc \ - --hash=sha256:790c1d9d8f9c92819c31ea660cd43c3d5451df1df61e2e814a6f99cebb292788 \ - --hash=sha256:809fe3bf1a91393abc7e92d607976bbb8586512913a79f2bf7d7ec15bd8ea518 \ - --hash=sha256:87b690bbee9876163210fd3f500ee59f5803e4a6607d1b1238833b8885ebd410 \ - --hash=sha256:89086c9d3490a0f265a3c4b794037a84541ff5ffa28bb9c24cc9f66566968464 \ - --hash=sha256:99856d6c98a326abbcc2363827e16bd6044f70f2ef42f453c0bd5440c4ce24e5 \ - --hash=sha256:aab584725afd10c710b8f1e6e208dbee2d0ad009f57d674cb9d1b3964037275d \ - --hash=sha256:af169ba897692e9cd984a81cb0f02e46dacdc07d6cf9fd5c91e81f8efaf93d52 \ - --hash=sha256:b39b8711578dcfd45fc0140993403b8a81e879ec25d53189f3faa1f006087dca \ - --hash=sha256:b3f543ae9d3408549a9900720f18c0194ac0fe810cecda2a584fd4dca2eb3bb8 \ - --hash=sha256:d0583b75f2e70ec93f100931660328965bb9ff65ae54695fb3fa0a1255daa6f2 \ - --hash=sha256:dfbbbf0809a3606046a41f8561c3eada9db811be94138f42d9135a5c47e75f6f \ - --hash=sha256:e538f2d4a6ffb6edfb303ce70ae7e88629ac6e5581870e66c306d9ad7b564a58 \ - --hash=sha256:eba51599370c87088d8882ab74f637de0c4f04a6d08a312dce49368ba9ed5c2a \ - --hash=sha256:ee4b43f35f5dc15e1fec55ccb53c130adb1d11e8ad8263d68b1284b66a04190d \ - --hash=sha256:f2363e5fd81afb650085c6686f2ee3706975c54f331b426800b53531191fdf28 \ - --hash=sha256:f299c020c6679cb389814a3b81200fe55d428012c5e76da7e722491f5d205990 \ - --hash=sha256:f72f23bab1848edb7472309e9898603141644faec9fd57a823ea6b4d1c4c8995 \ - --hash=sha256:fa90bac61c9dc3e1a563e5babb3fd2c0c1c80567e815442ddbe561eadc803b30 +zope-interface==6.0 # via gevent # The following packages are considered to be unsafe in a requirements file: -setuptools==65.7.0 \ - --hash=sha256:4d3c92fac8f1118bb77a22181355e29c239cabfe2b9effdaa665c66b711136d7 \ - --hash=sha256:8ab4f1dbf2b4a65f7eec5ad0c620e84c34111a68d3349833494b9088212214dd +setuptools==65.7.0 # via # -c requirements/pins.pip # gevent diff --git a/requirements/lint.pip b/requirements/lint.pip index 2085ec34f..3defa58b2 100644 --- a/requirements/lint.pip +++ b/requirements/lint.pip @@ -4,262 +4,77 @@ # # make upgrade # -alabaster==0.7.13 \ - --hash=sha256:1ee19aca801bbabb5ba3f5f258e4422dfa86f82f3e9cefb0859b283cdd7f62a3 \ - --hash=sha256:a27a4a084d5e690e16e01e03ad2b2e552c61a65469419b907243193de1a84ae2 +alabaster==0.7.13 # via sphinx -astroid==2.15.0 \ - --hash=sha256:525f126d5dc1b8b0b6ee398b33159105615d92dc4a17f2cd064125d57f6186fa \ - --hash=sha256:e3e4d0ffc2d15d954065579689c36aac57a339a4679a679579af6401db4d3fdb +astroid==2.15.0 # via pylint -attrs==22.2.0 \ - --hash=sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836 \ - --hash=sha256:c9227bfc2f01993c03f68db37d1d15c9690188323c067c641f1a35ca58185f99 +attrs==22.2.0 # via # hypothesis # pytest # scriv -babel==2.12.1 \ - --hash=sha256:b4246fb7677d3b98f501a39d43396d3cafdc8eadb045f4a31be01863f655c610 \ - --hash=sha256:cc2d99999cd01d44420ae725a21c9e3711b3aadc7976d6147f622d8581963455 +babel==2.12.1 # via sphinx -bleach==6.0.0 \ - --hash=sha256:1a1a85c1595e07d8db14c5f09f09e6433502c51c595970edc090551f0db99414 \ - --hash=sha256:33c16e3353dbd13028ab4799a0f89a83f113405c766e9c122df8a06f5b85b3f4 +bleach==6.0.0 # via readme-renderer -build==0.10.0 \ - --hash=sha256:af266720050a66c893a6096a2f410989eeac74ff9a68ba194b3f6473e8e26171 \ - --hash=sha256:d5b71264afdb5951d6704482aac78de887c80691c52b88a9ad195983ca2c9269 +build==0.10.0 # via check-manifest -cachetools==5.3.0 \ - --hash=sha256:13dfddc7b8df938c21a940dfa6557ce6e94a2f1cdfa58eb90c805721d58f2c14 \ - --hash=sha256:429e1a1e845c008ea6c85aa35d4b98b65d6a9763eeef3e37e92728a12d1de9d4 +cachetools==5.3.0 # via tox -certifi==2022.12.7 \ - --hash=sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3 \ - --hash=sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18 +certifi==2022.12.7 # via requests -chardet==5.1.0 \ - --hash=sha256:0d62712b956bc154f85fb0a266e2a3c5913c2967e00348701b32411d6def31e5 \ - --hash=sha256:362777fb014af596ad31334fde1e8c327dfdb076e1960d1694662d46a6917ab9 +chardet==5.1.0 # via tox -charset-normalizer==3.1.0 \ - --hash=sha256:04afa6387e2b282cf78ff3dbce20f0cc071c12dc8f685bd40960cc68644cfea6 \ - --hash=sha256:04eefcee095f58eaabe6dc3cc2262f3bcd776d2c67005880894f447b3f2cb9c1 \ - --hash=sha256:0be65ccf618c1e7ac9b849c315cc2e8a8751d9cfdaa43027d4f6624bd587ab7e \ - --hash=sha256:0c95f12b74681e9ae127728f7e5409cbbef9cd914d5896ef238cc779b8152373 \ - --hash=sha256:0ca564606d2caafb0abe6d1b5311c2649e8071eb241b2d64e75a0d0065107e62 \ - --hash=sha256:10c93628d7497c81686e8e5e557aafa78f230cd9e77dd0c40032ef90c18f2230 \ - --hash=sha256:11d117e6c63e8f495412d37e7dc2e2fff09c34b2d09dbe2bee3c6229577818be \ - --hash=sha256:11d3bcb7be35e7b1bba2c23beedac81ee893ac9871d0ba79effc7fc01167db6c \ - --hash=sha256:12a2b561af122e3d94cdb97fe6fb2bb2b82cef0cdca131646fdb940a1eda04f0 \ - --hash=sha256:12d1a39aa6b8c6f6248bb54550efcc1c38ce0d8096a146638fd4738e42284448 \ - --hash=sha256:1435ae15108b1cb6fffbcea2af3d468683b7afed0169ad718451f8db5d1aff6f \ - --hash=sha256:1c60b9c202d00052183c9be85e5eaf18a4ada0a47d188a83c8f5c5b23252f649 \ - --hash=sha256:1e8fcdd8f672a1c4fc8d0bd3a2b576b152d2a349782d1eb0f6b8e52e9954731d \ - --hash=sha256:20064ead0717cf9a73a6d1e779b23d149b53daf971169289ed2ed43a71e8d3b0 \ - --hash=sha256:21fa558996782fc226b529fdd2ed7866c2c6ec91cee82735c98a197fae39f706 \ - --hash=sha256:22908891a380d50738e1f978667536f6c6b526a2064156203d418f4856d6e86a \ - --hash=sha256:3160a0fd9754aab7d47f95a6b63ab355388d890163eb03b2d2b87ab0a30cfa59 \ - --hash=sha256:322102cdf1ab682ecc7d9b1c5eed4ec59657a65e1c146a0da342b78f4112db23 \ - --hash=sha256:34e0a2f9c370eb95597aae63bf85eb5e96826d81e3dcf88b8886012906f509b5 \ - --hash=sha256:3573d376454d956553c356df45bb824262c397c6e26ce43e8203c4c540ee0acb \ - --hash=sha256:3747443b6a904001473370d7810aa19c3a180ccd52a7157aacc264a5ac79265e \ - --hash=sha256:38e812a197bf8e71a59fe55b757a84c1f946d0ac114acafaafaf21667a7e169e \ - --hash=sha256:3a06f32c9634a8705f4ca9946d667609f52cf130d5548881401f1eb2c39b1e2c \ - --hash=sha256:3a5fc78f9e3f501a1614a98f7c54d3969f3ad9bba8ba3d9b438c3bc5d047dd28 \ - --hash=sha256:3d9098b479e78c85080c98e1e35ff40b4a31d8953102bb0fd7d1b6f8a2111a3d \ - --hash=sha256:3dc5b6a8ecfdc5748a7e429782598e4f17ef378e3e272eeb1340ea57c9109f41 \ - --hash=sha256:4155b51ae05ed47199dc5b2a4e62abccb274cee6b01da5b895099b61b1982974 \ - --hash=sha256:49919f8400b5e49e961f320c735388ee686a62327e773fa5b3ce6721f7e785ce \ - --hash=sha256:53d0a3fa5f8af98a1e261de6a3943ca631c526635eb5817a87a59d9a57ebf48f \ - --hash=sha256:5f008525e02908b20e04707a4f704cd286d94718f48bb33edddc7d7b584dddc1 \ - --hash=sha256:628c985afb2c7d27a4800bfb609e03985aaecb42f955049957814e0491d4006d \ - --hash=sha256:65ed923f84a6844de5fd29726b888e58c62820e0769b76565480e1fdc3d062f8 \ - --hash=sha256:6734e606355834f13445b6adc38b53c0fd45f1a56a9ba06c2058f86893ae8017 \ - --hash=sha256:6baf0baf0d5d265fa7944feb9f7451cc316bfe30e8df1a61b1bb08577c554f31 \ - --hash=sha256:6f4f4668e1831850ebcc2fd0b1cd11721947b6dc7c00bf1c6bd3c929ae14f2c7 \ - --hash=sha256:6f5c2e7bc8a4bf7c426599765b1bd33217ec84023033672c1e9a8b35eaeaaaf8 \ - --hash=sha256:6f6c7a8a57e9405cad7485f4c9d3172ae486cfef1344b5ddd8e5239582d7355e \ - --hash=sha256:7381c66e0561c5757ffe616af869b916c8b4e42b367ab29fedc98481d1e74e14 \ - --hash=sha256:73dc03a6a7e30b7edc5b01b601e53e7fc924b04e1835e8e407c12c037e81adbd \ - --hash=sha256:74db0052d985cf37fa111828d0dd230776ac99c740e1a758ad99094be4f1803d \ - --hash=sha256:75f2568b4189dda1c567339b48cba4ac7384accb9c2a7ed655cd86b04055c795 \ - --hash=sha256:78cacd03e79d009d95635e7d6ff12c21eb89b894c354bd2b2ed0b4763373693b \ - --hash=sha256:80d1543d58bd3d6c271b66abf454d437a438dff01c3e62fdbcd68f2a11310d4b \ - --hash=sha256:830d2948a5ec37c386d3170c483063798d7879037492540f10a475e3fd6f244b \ - --hash=sha256:891cf9b48776b5c61c700b55a598621fdb7b1e301a550365571e9624f270c203 \ - --hash=sha256:8f25e17ab3039b05f762b0a55ae0b3632b2e073d9c8fc88e89aca31a6198e88f \ - --hash=sha256:9a3267620866c9d17b959a84dd0bd2d45719b817245e49371ead79ed4f710d19 \ - --hash=sha256:a04f86f41a8916fe45ac5024ec477f41f886b3c435da2d4e3d2709b22ab02af1 \ - --hash=sha256:aaf53a6cebad0eae578f062c7d462155eada9c172bd8c4d250b8c1d8eb7f916a \ - --hash=sha256:abc1185d79f47c0a7aaf7e2412a0eb2c03b724581139193d2d82b3ad8cbb00ac \ - --hash=sha256:ac0aa6cd53ab9a31d397f8303f92c42f534693528fafbdb997c82bae6e477ad9 \ - --hash=sha256:ac3775e3311661d4adace3697a52ac0bab17edd166087d493b52d4f4f553f9f0 \ - --hash=sha256:b06f0d3bf045158d2fb8837c5785fe9ff9b8c93358be64461a1089f5da983137 \ - --hash=sha256:b116502087ce8a6b7a5f1814568ccbd0e9f6cfd99948aa59b0e241dc57cf739f \ - --hash=sha256:b82fab78e0b1329e183a65260581de4375f619167478dddab510c6c6fb04d9b6 \ - --hash=sha256:bd7163182133c0c7701b25e604cf1611c0d87712e56e88e7ee5d72deab3e76b5 \ - --hash=sha256:c36bcbc0d5174a80d6cccf43a0ecaca44e81d25be4b7f90f0ed7bcfbb5a00909 \ - --hash=sha256:c3af8e0f07399d3176b179f2e2634c3ce9c1301379a6b8c9c9aeecd481da494f \ - --hash=sha256:c84132a54c750fda57729d1e2599bb598f5fa0344085dbde5003ba429a4798c0 \ - --hash=sha256:cb7b2ab0188829593b9de646545175547a70d9a6e2b63bf2cd87a0a391599324 \ - --hash=sha256:cca4def576f47a09a943666b8f829606bcb17e2bc2d5911a46c8f8da45f56755 \ - --hash=sha256:cf6511efa4801b9b38dc5546d7547d5b5c6ef4b081c60b23e4d941d0eba9cbeb \ - --hash=sha256:d16fd5252f883eb074ca55cb622bc0bee49b979ae4e8639fff6ca3ff44f9f854 \ - --hash=sha256:d2686f91611f9e17f4548dbf050e75b079bbc2a82be565832bc8ea9047b61c8c \ - --hash=sha256:d7fc3fca01da18fbabe4625d64bb612b533533ed10045a2ac3dd194bfa656b60 \ - --hash=sha256:dd5653e67b149503c68c4018bf07e42eeed6b4e956b24c00ccdf93ac79cdff84 \ - --hash=sha256:de5695a6f1d8340b12a5d6d4484290ee74d61e467c39ff03b39e30df62cf83a0 \ - --hash=sha256:e0ac8959c929593fee38da1c2b64ee9778733cdf03c482c9ff1d508b6b593b2b \ - --hash=sha256:e1b25e3ad6c909f398df8921780d6a3d120d8c09466720226fc621605b6f92b1 \ - --hash=sha256:e633940f28c1e913615fd624fcdd72fdba807bf53ea6925d6a588e84e1151531 \ - --hash=sha256:e89df2958e5159b811af9ff0f92614dabf4ff617c03a4c1c6ff53bf1c399e0e1 \ - --hash=sha256:ea9f9c6034ea2d93d9147818f17c2a0860d41b71c38b9ce4d55f21b6f9165a11 \ - --hash=sha256:f645caaf0008bacf349875a974220f1f1da349c5dbe7c4ec93048cdc785a3326 \ - --hash=sha256:f8303414c7b03f794347ad062c0516cee0e15f7a612abd0ce1e25caf6ceb47df \ - --hash=sha256:fca62a8301b605b954ad2e9c3666f9d97f63872aa4efcae5492baca2056b74ab +charset-normalizer==3.1.0 # via requests -check-manifest==0.49 \ - --hash=sha256:058cd30057714c39b96ce4d83f254fc770e3145c7b1932b5940b4e3efb5521ef \ - --hash=sha256:64a640445542cf226919657c7b78d02d9c1ca5b1c25d7e66e0e1ff325060f416 +check-manifest==0.49 # via -r requirements/dev.in -click==8.1.3 \ - --hash=sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e \ - --hash=sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48 +click==8.1.3 # via # click-log # scriv -click-log==0.4.0 \ - --hash=sha256:3970f8570ac54491237bcdb3d8ab5e3eef6c057df29f8c3d1151a51a9c23b975 \ - --hash=sha256:a43e394b528d52112af599f2fc9e4b7cf3c15f94e53581f74fa6867e68c91756 +click-log==0.4.0 # via scriv -cogapp==3.3.0 \ - --hash=sha256:1be95183f70282422d594fa42426be6923070a4bd8335621f6347f3aeee81db0 \ - --hash=sha256:8b5b5f6063d8ee231961c05da010cb27c30876b2279e23ad0eae5f8f09460d50 +cogapp==3.3.0 # via # -r doc/requirements.in # -r requirements/dev.in -colorama==0.4.6 \ - --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \ - --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 +colorama==0.4.6 # via # -r requirements/pytest.in # -r requirements/tox.in # sphinx-autobuild # tox -dill==0.3.6 \ - --hash=sha256:a07ffd2351b8c678dfc4a856a3005f8067aea51d6ba6c700796a4d9e280f39f0 \ - --hash=sha256:e5db55f3687856d8fbdab002ed78544e1c4559a130302693d839dfe8f93f2373 +dill==0.3.6 # via pylint -distlib==0.3.6 \ - --hash=sha256:14bad2d9b04d3a36127ac97f30b12a19268f211063d8f8ee4f47108896e11b46 \ - --hash=sha256:f35c4b692542ca110de7ef0bea44d73981caeb34ca0b9b6b2e6d7790dda8f80e +distlib==0.3.6 # via virtualenv -docutils==0.18.1 \ - --hash=sha256:23010f129180089fbcd3bc08cfefccb3b890b0050e1ca00c867036e9d161b98c \ - --hash=sha256:679987caf361a7539d76e584cbeddc311e3aee937877c87346f31debc63e9d06 +docutils==0.18.1 # via # readme-renderer # sphinx # sphinx-rtd-theme -exceptiongroup==1.1.1 \ - --hash=sha256:232c37c63e4f682982c8b6459f33a8981039e5fb8756b2074364e5055c498c9e \ - --hash=sha256:d484c3090ba2889ae2928419117447a14daf3c1231d5e30d0aae34f354f01785 +exceptiongroup==1.1.1 # via # hypothesis # pytest -execnet==1.9.0 \ - --hash=sha256:8f694f3ba9cc92cab508b152dcfe322153975c29bda272e2fd7f3f00f36e47c5 \ - --hash=sha256:a295f7cc774947aac58dde7fdc85f4aa00c42adf5d8f5468fc630c1acf30a142 +execnet==1.9.0 # via pytest-xdist -filelock==3.10.6 \ - --hash=sha256:409105becd604d6b176a483f855e7e8903c5cb2873e47f2c64f66a370c046aaf \ - --hash=sha256:52f119747b2b9c4730dac715a7b1ab34b8ee70fd9259cba158ee53da566387ff +filelock==3.10.6 # via # tox # virtualenv -flaky==3.7.0 \ - --hash=sha256:3ad100780721a1911f57a165809b7ea265a7863305acb66708220820caf8aa0d \ - --hash=sha256:d6eda73cab5ae7364504b7c44670f70abed9e75f77dd116352f662817592ec9c +flaky==3.7.0 # via -r requirements/pytest.in -greenlet==2.0.2 \ - --hash=sha256:03a8f4f3430c3b3ff8d10a2a86028c660355ab637cee9333d63d66b56f09d52a \ - --hash=sha256:0bf60faf0bc2468089bdc5edd10555bab6e85152191df713e2ab1fcc86382b5a \ - --hash=sha256:18a7f18b82b52ee85322d7a7874e676f34ab319b9f8cce5de06067384aa8ff43 \ - --hash=sha256:18e98fb3de7dba1c0a852731c3070cf022d14f0d68b4c87a19cc1016f3bb8b33 \ - --hash=sha256:1a819eef4b0e0b96bb0d98d797bef17dc1b4a10e8d7446be32d1da33e095dbb8 \ - --hash=sha256:26fbfce90728d82bc9e6c38ea4d038cba20b7faf8a0ca53a9c07b67318d46088 \ - --hash=sha256:2780572ec463d44c1d3ae850239508dbeb9fed38e294c68d19a24d925d9223ca \ - --hash=sha256:283737e0da3f08bd637b5ad058507e578dd462db259f7f6e4c5c365ba4ee9343 \ - --hash=sha256:2d4686f195e32d36b4d7cf2d166857dbd0ee9f3d20ae349b6bf8afc8485b3645 \ - --hash=sha256:2dd11f291565a81d71dab10b7033395b7a3a5456e637cf997a6f33ebdf06f8db \ - --hash=sha256:30bcf80dda7f15ac77ba5af2b961bdd9dbc77fd4ac6105cee85b0d0a5fcf74df \ - --hash=sha256:32e5b64b148966d9cccc2c8d35a671409e45f195864560829f395a54226408d3 \ - --hash=sha256:36abbf031e1c0f79dd5d596bfaf8e921c41df2bdf54ee1eed921ce1f52999a86 \ - --hash=sha256:3a06ad5312349fec0ab944664b01d26f8d1f05009566339ac6f63f56589bc1a2 \ - --hash=sha256:3a51c9751078733d88e013587b108f1b7a1fb106d402fb390740f002b6f6551a \ - --hash=sha256:3c9b12575734155d0c09d6c3e10dbd81665d5c18e1a7c6597df72fd05990c8cf \ - --hash=sha256:3f6ea9bd35eb450837a3d80e77b517ea5bc56b4647f5502cd28de13675ee12f7 \ - --hash=sha256:4b58adb399c4d61d912c4c331984d60eb66565175cdf4a34792cd9600f21b394 \ - --hash=sha256:4d2e11331fc0c02b6e84b0d28ece3a36e0548ee1a1ce9ddde03752d9b79bba40 \ - --hash=sha256:5454276c07d27a740c5892f4907c86327b632127dd9abec42ee62e12427ff7e3 \ - --hash=sha256:561091a7be172ab497a3527602d467e2b3fbe75f9e783d8b8ce403fa414f71a6 \ - --hash=sha256:6c3acb79b0bfd4fe733dff8bc62695283b57949ebcca05ae5c129eb606ff2d74 \ - --hash=sha256:703f18f3fda276b9a916f0934d2fb6d989bf0b4fb5a64825260eb9bfd52d78f0 \ - --hash=sha256:7492e2b7bd7c9b9916388d9df23fa49d9b88ac0640db0a5b4ecc2b653bf451e3 \ - --hash=sha256:76ae285c8104046b3a7f06b42f29c7b73f77683df18c49ab5af7983994c2dd91 \ - --hash=sha256:7cafd1208fdbe93b67c7086876f061f660cfddc44f404279c1585bbf3cdc64c5 \ - --hash=sha256:7efde645ca1cc441d6dc4b48c0f7101e8d86b54c8530141b09fd31cef5149ec9 \ - --hash=sha256:88d9ab96491d38a5ab7c56dd7a3cc37d83336ecc564e4e8816dbed12e5aaefc8 \ - --hash=sha256:8eab883b3b2a38cc1e050819ef06a7e6344d4a990d24d45bc6f2cf959045a45b \ - --hash=sha256:910841381caba4f744a44bf81bfd573c94e10b3045ee00de0cbf436fe50673a6 \ - --hash=sha256:9190f09060ea4debddd24665d6804b995a9c122ef5917ab26e1566dcc712ceeb \ - --hash=sha256:937e9020b514ceedb9c830c55d5c9872abc90f4b5862f89c0887033ae33c6f73 \ - --hash=sha256:94c817e84245513926588caf1152e3b559ff794d505555211ca041f032abbb6b \ - --hash=sha256:971ce5e14dc5e73715755d0ca2975ac88cfdaefcaab078a284fea6cfabf866df \ - --hash=sha256:9d14b83fab60d5e8abe587d51c75b252bcc21683f24699ada8fb275d7712f5a9 \ - --hash=sha256:9f35ec95538f50292f6d8f2c9c9f8a3c6540bbfec21c9e5b4b751e0a7c20864f \ - --hash=sha256:a1846f1b999e78e13837c93c778dcfc3365902cfb8d1bdb7dd73ead37059f0d0 \ - --hash=sha256:acd2162a36d3de67ee896c43effcd5ee3de247eb00354db411feb025aa319857 \ - --hash=sha256:b0ef99cdbe2b682b9ccbb964743a6aca37905fda5e0452e5ee239b1654d37f2a \ - --hash=sha256:b80f600eddddce72320dbbc8e3784d16bd3fb7b517e82476d8da921f27d4b249 \ - --hash=sha256:b864ba53912b6c3ab6bcb2beb19f19edd01a6bfcbdfe1f37ddd1778abfe75a30 \ - --hash=sha256:b9ec052b06a0524f0e35bd8790686a1da006bd911dd1ef7d50b77bfbad74e292 \ - --hash=sha256:ba2956617f1c42598a308a84c6cf021a90ff3862eddafd20c3333d50f0edb45b \ - --hash=sha256:bdfea8c661e80d3c1c99ad7c3ff74e6e87184895bbaca6ee8cc61209f8b9b85d \ - --hash=sha256:be4ed120b52ae4d974aa40215fcdfde9194d63541c7ded40ee12eb4dda57b76b \ - --hash=sha256:c4302695ad8027363e96311df24ee28978162cdcdd2006476c43970b384a244c \ - --hash=sha256:c48f54ef8e05f04d6eff74b8233f6063cb1ed960243eacc474ee73a2ea8573ca \ - --hash=sha256:c9c59a2120b55788e800d82dfa99b9e156ff8f2227f07c5e3012a45a399620b7 \ - --hash=sha256:cd021c754b162c0fb55ad5d6b9d960db667faad0fa2ff25bb6e1301b0b6e6a75 \ - --hash=sha256:d27ec7509b9c18b6d73f2f5ede2622441de812e7b1a80bbd446cb0633bd3d5ae \ - --hash=sha256:d5508f0b173e6aa47273bdc0a0b5ba055b59662ba7c7ee5119528f466585526b \ - --hash=sha256:d75209eed723105f9596807495d58d10b3470fa6732dd6756595e89925ce2470 \ - --hash=sha256:db1a39669102a1d8d12b57de2bb7e2ec9066a6f2b3da35ae511ff93b01b5d564 \ - --hash=sha256:dbfcfc0218093a19c252ca8eb9aee3d29cfdcb586df21049b9d777fd32c14fd9 \ - --hash=sha256:e0f72c9ddb8cd28532185f54cc1453f2c16fb417a08b53a855c4e6a418edd099 \ - --hash=sha256:e7c8dc13af7db097bed64a051d2dd49e9f0af495c26995c00a9ee842690d34c0 \ - --hash=sha256:ea9872c80c132f4663822dd2a08d404073a5a9b5ba6155bea72fb2a79d1093b5 \ - --hash=sha256:eff4eb9b7eb3e4d0cae3d28c283dc16d9bed6b193c2e1ace3ed86ce48ea8df19 \ - --hash=sha256:f82d4d717d8ef19188687aa32b8363e96062911e63ba22a0cff7802a8e58e5f1 \ - --hash=sha256:fc3a569657468b6f3fb60587e48356fe512c1754ca05a564f11366ac9e306526 +greenlet==2.0.2 # via -r requirements/dev.in -hypothesis==6.70.0 \ - --hash=sha256:be395f71d6337a5e8ed2f695c568360a686056c3b00c98bd818874c674b24586 \ - --hash=sha256:f5cae09417d0ffc7711f602cdcfa3b7baf344597a672a84658186605b04f4a4f +hypothesis==6.70.0 # via -r requirements/pytest.in -idna==3.4 \ - --hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 \ - --hash=sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2 +idna==3.4 # via requests -imagesize==1.4.1 \ - --hash=sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b \ - --hash=sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a +imagesize==1.4.1 # via sphinx -importlib-metadata==6.1.0 \ - --hash=sha256:43ce9281e097583d758c2c708c4376371261a02c34682491a8e98352365aad20 \ - --hash=sha256:ff80f3b5394912eb1b108fcfd444dc78b7f1f3e16b16188054bd01cb9cb86f09 +importlib-metadata==6.1.0 # via # build # click @@ -271,156 +86,39 @@ importlib-metadata==6.1.0 \ # tox # twine # virtualenv -importlib-resources==5.12.0 \ - --hash=sha256:4be82589bf5c1d7999aedf2a45159d10cb3ca4f19b2271f8792bc8e6da7b22f6 \ - --hash=sha256:7b1deeebbf351c7578e09bf2f63fa2ce8b5ffec296e0d349139d43cca061a81a +importlib-resources==5.12.0 # via keyring -iniconfig==2.0.0 \ - --hash=sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3 \ - --hash=sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374 +iniconfig==2.0.0 # via pytest -isort==5.11.5 \ - --hash=sha256:6be1f76a507cb2ecf16c7cf14a37e41609ca082330be4e3436a18ef74add55db \ - --hash=sha256:ba1d72fb2595a01c7895a5128f9585a5cc4b6d395f1c8d514989b9a7eb2a8746 +isort==5.11.5 # via pylint -jaraco-classes==3.2.3 \ - --hash=sha256:2353de3288bc6b82120752201c6b1c1a14b058267fa424ed5ce5984e3b922158 \ - --hash=sha256:89559fa5c1d3c34eff6f631ad80bb21f378dbcbb35dd161fd2c6b93f5be2f98a +jaraco-classes==3.2.3 # via keyring -jedi==0.18.2 \ - --hash=sha256:203c1fd9d969ab8f2119ec0a3342e0b49910045abe6af0a3ae83a5764d54639e \ - --hash=sha256:bae794c30d07f6d910d32a7048af09b5a39ed740918da923c6b780790ebac612 +jedi==0.18.2 # via pudb -jinja2==3.1.2 \ - --hash=sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852 \ - --hash=sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61 +jinja2==3.1.2 # via # scriv # sphinx -keyring==23.13.1 \ - --hash=sha256:771ed2a91909389ed6148631de678f82ddc73737d85a927f382a8a1b157898cd \ - --hash=sha256:ba2e15a9b35e21908d0aaf4e0a47acc52d6ae33444df0da2b49d41a46ef6d678 +keyring==23.13.1 # via twine -lazy-object-proxy==1.9.0 \ - --hash=sha256:09763491ce220c0299688940f8dc2c5d05fd1f45af1e42e636b2e8b2303e4382 \ - --hash=sha256:0a891e4e41b54fd5b8313b96399f8b0e173bbbfc03c7631f01efbe29bb0bcf82 \ - --hash=sha256:189bbd5d41ae7a498397287c408617fe5c48633e7755287b21d741f7db2706a9 \ - --hash=sha256:18b78ec83edbbeb69efdc0e9c1cb41a3b1b1ed11ddd8ded602464c3fc6020494 \ - --hash=sha256:1aa3de4088c89a1b69f8ec0dcc169aa725b0ff017899ac568fe44ddc1396df46 \ - --hash=sha256:212774e4dfa851e74d393a2370871e174d7ff0ebc980907723bb67d25c8a7c30 \ - --hash=sha256:2d0daa332786cf3bb49e10dc6a17a52f6a8f9601b4cf5c295a4f85854d61de63 \ - --hash=sha256:5f83ac4d83ef0ab017683d715ed356e30dd48a93746309c8f3517e1287523ef4 \ - --hash=sha256:659fb5809fa4629b8a1ac5106f669cfc7bef26fbb389dda53b3e010d1ac4ebae \ - --hash=sha256:660c94ea760b3ce47d1855a30984c78327500493d396eac4dfd8bd82041b22be \ - --hash=sha256:66a3de4a3ec06cd8af3f61b8e1ec67614fbb7c995d02fa224813cb7afefee701 \ - --hash=sha256:721532711daa7db0d8b779b0bb0318fa87af1c10d7fe5e52ef30f8eff254d0cd \ - --hash=sha256:7322c3d6f1766d4ef1e51a465f47955f1e8123caee67dd641e67d539a534d006 \ - --hash=sha256:79a31b086e7e68b24b99b23d57723ef7e2c6d81ed21007b6281ebcd1688acb0a \ - --hash=sha256:81fc4d08b062b535d95c9ea70dbe8a335c45c04029878e62d744bdced5141586 \ - --hash=sha256:8fa02eaab317b1e9e03f69aab1f91e120e7899b392c4fc19807a8278a07a97e8 \ - --hash=sha256:9090d8e53235aa280fc9239a86ae3ea8ac58eff66a705fa6aa2ec4968b95c821 \ - --hash=sha256:946d27deaff6cf8452ed0dba83ba38839a87f4f7a9732e8f9fd4107b21e6ff07 \ - --hash=sha256:9990d8e71b9f6488e91ad25f322898c136b008d87bf852ff65391b004da5e17b \ - --hash=sha256:9cd077f3d04a58e83d04b20e334f678c2b0ff9879b9375ed107d5d07ff160171 \ - --hash=sha256:9e7551208b2aded9c1447453ee366f1c4070602b3d932ace044715d89666899b \ - --hash=sha256:9f5fa4a61ce2438267163891961cfd5e32ec97a2c444e5b842d574251ade27d2 \ - --hash=sha256:b40387277b0ed2d0602b8293b94d7257e17d1479e257b4de114ea11a8cb7f2d7 \ - --hash=sha256:bfb38f9ffb53b942f2b5954e0f610f1e721ccebe9cce9025a38c8ccf4a5183a4 \ - --hash=sha256:cbf9b082426036e19c6924a9ce90c740a9861e2bdc27a4834fd0a910742ac1e8 \ - --hash=sha256:d9e25ef10a39e8afe59a5c348a4dbf29b4868ab76269f81ce1674494e2565a6e \ - --hash=sha256:db1c1722726f47e10e0b5fdbf15ac3b8adb58c091d12b3ab713965795036985f \ - --hash=sha256:e7c21c95cae3c05c14aafffe2865bbd5e377cfc1348c4f7751d9dc9a48ca4bda \ - --hash=sha256:e8c6cfb338b133fbdbc5cfaa10fe3c6aeea827db80c978dbd13bc9dd8526b7d4 \ - --hash=sha256:ea806fd4c37bf7e7ad82537b0757999264d5f70c45468447bb2b91afdbe73a6e \ - --hash=sha256:edd20c5a55acb67c7ed471fa2b5fb66cb17f61430b7a6b9c3b4a1e40293b1671 \ - --hash=sha256:f0117049dd1d5635bbff65444496c90e0baa48ea405125c088e93d9cf4525b11 \ - --hash=sha256:f0705c376533ed2a9e5e97aacdbfe04cecd71e0aa84c7c0595d02ef93b6e4455 \ - --hash=sha256:f12ad7126ae0c98d601a7ee504c1122bcef553d1d5e0c3bfa77b16b3968d2734 \ - --hash=sha256:f2457189d8257dd41ae9b434ba33298aec198e30adf2dcdaaa3a28b9994f6adb \ - --hash=sha256:f699ac1c768270c9e384e4cbd268d6e67aebcfae6cd623b4d7c3bfde5a35db59 +lazy-object-proxy==1.9.0 # via astroid -libsass==0.22.0 \ - --hash=sha256:081e256ab3c5f3f09c7b8dea3bf3bf5e64a97c6995fd9eea880639b3f93a9f9a \ - --hash=sha256:3ab5ad18e47db560f4f0c09e3d28cf3bb1a44711257488ac2adad69f4f7f8425 \ - --hash=sha256:65455a2728b696b62100eb5932604aa13a29f4ac9a305d95773c14aaa7200aaf \ - --hash=sha256:89c5ce497fcf3aba1dd1b19aae93b99f68257e5f2026b731b00a872f13324c7f \ - --hash=sha256:f1efc1b612299c88aec9e39d6ca0c266d360daa5b19d9430bdeaffffa86993f9 +libsass==0.22.0 # via -r requirements/dev.in -livereload==2.6.3 \ - --hash=sha256:776f2f865e59fde56490a56bcc6773b6917366bce0c267c60ee8aaf1a0959869 \ - --hash=sha256:ad4ac6f53b2d62bb6ce1a5e6e96f1f00976a32348afedcb4b6d68df2a1d346e4 +livereload==2.6.3 # via sphinx-autobuild -markdown-it-py==2.2.0 \ - --hash=sha256:5a35f8d1870171d9acc47b99612dc146129b631baf04970128b568f190d0cc30 \ - --hash=sha256:7c9a5e412688bc771c67432cbfebcdd686c93ce6484913dccf06cb5a0bea35a1 +markdown-it-py==2.2.0 # via rich -markupsafe==2.1.2 \ - --hash=sha256:0576fe974b40a400449768941d5d0858cc624e3249dfd1e0c33674e5c7ca7aed \ - --hash=sha256:085fd3201e7b12809f9e6e9bc1e5c96a368c8523fad5afb02afe3c051ae4afcc \ - --hash=sha256:090376d812fb6ac5f171e5938e82e7f2d7adc2b629101cec0db8b267815c85e2 \ - --hash=sha256:0b462104ba25f1ac006fdab8b6a01ebbfbce9ed37fd37fd4acd70c67c973e460 \ - --hash=sha256:137678c63c977754abe9086a3ec011e8fd985ab90631145dfb9294ad09c102a7 \ - --hash=sha256:1bea30e9bf331f3fef67e0a3877b2288593c98a21ccb2cf29b74c581a4eb3af0 \ - --hash=sha256:22152d00bf4a9c7c83960521fc558f55a1adbc0631fbb00a9471e097b19d72e1 \ - --hash=sha256:22731d79ed2eb25059ae3df1dfc9cb1546691cc41f4e3130fe6bfbc3ecbbecfa \ - --hash=sha256:2298c859cfc5463f1b64bd55cb3e602528db6fa0f3cfd568d3605c50678f8f03 \ - --hash=sha256:28057e985dace2f478e042eaa15606c7efccb700797660629da387eb289b9323 \ - --hash=sha256:2e7821bffe00aa6bd07a23913b7f4e01328c3d5cc0b40b36c0bd81d362faeb65 \ - --hash=sha256:2ec4f2d48ae59bbb9d1f9d7efb9236ab81429a764dedca114f5fdabbc3788013 \ - --hash=sha256:340bea174e9761308703ae988e982005aedf427de816d1afe98147668cc03036 \ - --hash=sha256:40627dcf047dadb22cd25ea7ecfe9cbf3bbbad0482ee5920b582f3809c97654f \ - --hash=sha256:40dfd3fefbef579ee058f139733ac336312663c6706d1163b82b3003fb1925c4 \ - --hash=sha256:4cf06cdc1dda95223e9d2d3c58d3b178aa5dacb35ee7e3bbac10e4e1faacb419 \ - --hash=sha256:50c42830a633fa0cf9e7d27664637532791bfc31c731a87b202d2d8ac40c3ea2 \ - --hash=sha256:55f44b440d491028addb3b88f72207d71eeebfb7b5dbf0643f7c023ae1fba619 \ - --hash=sha256:608e7073dfa9e38a85d38474c082d4281f4ce276ac0010224eaba11e929dd53a \ - --hash=sha256:63ba06c9941e46fa389d389644e2d8225e0e3e5ebcc4ff1ea8506dce646f8c8a \ - --hash=sha256:65608c35bfb8a76763f37036547f7adfd09270fbdbf96608be2bead319728fcd \ - --hash=sha256:665a36ae6f8f20a4676b53224e33d456a6f5a72657d9c83c2aa00765072f31f7 \ - --hash=sha256:6d6607f98fcf17e534162f0709aaad3ab7a96032723d8ac8750ffe17ae5a0666 \ - --hash=sha256:7313ce6a199651c4ed9d7e4cfb4aa56fe923b1adf9af3b420ee14e6d9a73df65 \ - --hash=sha256:7668b52e102d0ed87cb082380a7e2e1e78737ddecdde129acadb0eccc5423859 \ - --hash=sha256:7df70907e00c970c60b9ef2938d894a9381f38e6b9db73c5be35e59d92e06625 \ - --hash=sha256:7e007132af78ea9df29495dbf7b5824cb71648d7133cf7848a2a5dd00d36f9ff \ - --hash=sha256:835fb5e38fd89328e9c81067fd642b3593c33e1e17e2fdbf77f5676abb14a156 \ - --hash=sha256:8bca7e26c1dd751236cfb0c6c72d4ad61d986e9a41bbf76cb445f69488b2a2bd \ - --hash=sha256:8db032bf0ce9022a8e41a22598eefc802314e81b879ae093f36ce9ddf39ab1ba \ - --hash=sha256:99625a92da8229df6d44335e6fcc558a5037dd0a760e11d84be2260e6f37002f \ - --hash=sha256:9cad97ab29dfc3f0249b483412c85c8ef4766d96cdf9dcf5a1e3caa3f3661cf1 \ - --hash=sha256:a4abaec6ca3ad8660690236d11bfe28dfd707778e2442b45addd2f086d6ef094 \ - --hash=sha256:a6e40afa7f45939ca356f348c8e23048e02cb109ced1eb8420961b2f40fb373a \ - --hash=sha256:a6f2fcca746e8d5910e18782f976489939d54a91f9411c32051b4aab2bd7c513 \ - --hash=sha256:a806db027852538d2ad7555b203300173dd1b77ba116de92da9afbc3a3be3eed \ - --hash=sha256:abcabc8c2b26036d62d4c746381a6f7cf60aafcc653198ad678306986b09450d \ - --hash=sha256:b8526c6d437855442cdd3d87eede9c425c4445ea011ca38d937db299382e6fa3 \ - --hash=sha256:bb06feb762bade6bf3c8b844462274db0c76acc95c52abe8dbed28ae3d44a147 \ - --hash=sha256:c0a33bc9f02c2b17c3ea382f91b4db0e6cde90b63b296422a939886a7a80de1c \ - --hash=sha256:c4a549890a45f57f1ebf99c067a4ad0cb423a05544accaf2b065246827ed9603 \ - --hash=sha256:ca244fa73f50a800cf8c3ebf7fd93149ec37f5cb9596aa8873ae2c1d23498601 \ - --hash=sha256:cf877ab4ed6e302ec1d04952ca358b381a882fbd9d1b07cccbfd61783561f98a \ - --hash=sha256:d9d971ec1e79906046aa3ca266de79eac42f1dbf3612a05dc9368125952bd1a1 \ - --hash=sha256:da25303d91526aac3672ee6d49a2f3db2d9502a4a60b55519feb1a4c7714e07d \ - --hash=sha256:e55e40ff0cc8cc5c07996915ad367fa47da6b3fc091fdadca7f5403239c5fec3 \ - --hash=sha256:f03a532d7dee1bed20bc4884194a16160a2de9ffc6354b3878ec9682bb623c54 \ - --hash=sha256:f1cd098434e83e656abf198f103a8207a8187c0fc110306691a2e94a78d0abb2 \ - --hash=sha256:f2bfb563d0211ce16b63c7cb9395d2c682a23187f54c3d79bfec33e6705473c6 \ - --hash=sha256:f8ffb705ffcf5ddd0e80b65ddf7bed7ee4f5a441ea7d3419e861a12eaf41af58 +markupsafe==2.1.2 # via jinja2 -mccabe==0.7.0 \ - --hash=sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325 \ - --hash=sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e +mccabe==0.7.0 # via pylint -mdurl==0.1.2 \ - --hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \ - --hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba +mdurl==0.1.2 # via markdown-it-py -more-itertools==9.1.0 \ - --hash=sha256:cabaa341ad0389ea83c17a94566a53ae4c9d07349861ecb14dc6d0345cf9ac5d \ - --hash=sha256:d2bc7f02446e86a68911e58ded76d6561eea00cddfb2a91e7019bbb586c799f3 +more-itertools==9.1.0 # via jaraco-classes -packaging==23.0 \ - --hash=sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2 \ - --hash=sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97 +packaging==23.0 # via # build # pudb @@ -428,120 +126,73 @@ packaging==23.0 \ # pytest # sphinx # tox -parso==0.8.3 \ - --hash=sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0 \ - --hash=sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75 +parso==0.8.3 # via jedi -pkginfo==1.9.6 \ - --hash=sha256:4b7a555a6d5a22169fcc9cf7bfd78d296b0361adad412a346c1226849af5e546 \ - --hash=sha256:8fd5896e8718a4372f0ea9cc9d96f6417c9b986e23a4d116dda26b62cc29d046 +pkginfo==1.9.6 # via twine -platformdirs==3.2.0 \ - --hash=sha256:d5b638ca397f25f979350ff789db335903d7ea010ab28903f57b27e1b16c2b08 \ - --hash=sha256:ebe11c0d7a805086e99506aa331612429a72ca7cd52a1f0d277dc4adc20cb10e +platformdirs==3.2.0 # via # pylint # tox # virtualenv -pluggy==1.0.0 \ - --hash=sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159 \ - --hash=sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3 +pluggy==1.0.0 # via # pytest # tox -pudb==2022.1.3 \ - --hash=sha256:58e83ada9e19ffe92c1fdc78ae5458ef91aeb892a5b8f0e7379e6fa61e0e664a +pudb==2022.1.3 # via -r requirements/dev.in -pyenchant==3.2.2 \ - --hash=sha256:1cf830c6614362a78aab78d50eaf7c6c93831369c52e1bb64ffae1df0341e637 \ - --hash=sha256:5a636832987eaf26efe971968f4d1b78e81f62bca2bde0a9da210c7de43c3bce \ - --hash=sha256:5facc821ece957208a81423af7d6ec7810dad29697cb0d77aae81e4e11c8e5a6 \ - --hash=sha256:6153f521852e23a5add923dbacfbf4bebbb8d70c4e4bad609a8e0f9faeb915d1 +pyenchant==3.2.2 # via # -r doc/requirements.in # sphinxcontrib-spelling -pygments==2.14.0 \ - --hash=sha256:b3ed06a9e8ac9a9aae5a6f5dbe78a8a58655d17b43b93c078f094ddc476ae297 \ - --hash=sha256:fa7bd7bd2771287c0de303af8bfdfc731f51bd2c6a47ab69d117138893b82717 +pygments==2.14.0 # via # pudb # readme-renderer # rich # sphinx -pylint==2.17.1 \ - --hash=sha256:8660a54e3f696243d644fca98f79013a959c03f979992c1ab59c24d3f4ec2700 \ - --hash=sha256:d4d009b0116e16845533bc2163493d6681846ac725eab8ca8014afb520178ddd +pylint==2.17.1 # via -r requirements/dev.in -pyproject-api==1.5.1 \ - --hash=sha256:435f46547a9ff22cf4208ee274fca3e2869aeb062a4834adfc99a4dd64af3cf9 \ - --hash=sha256:4698a3777c2e0f6b624f8a4599131e2a25376d90fe8d146d7ac74c67c6f97c43 +pyproject-api==1.5.1 # via tox -pyproject-hooks==1.0.0 \ - --hash=sha256:283c11acd6b928d2f6a7c73fa0d01cb2bdc5f07c57a2eeb6e83d5e56b97976f8 \ - --hash=sha256:f271b298b97f5955d53fb12b72c1fb1948c22c1a6b70b315c54cedaca0264ef5 +pyproject-hooks==1.0.0 # via build -pytest==7.2.2 \ - --hash=sha256:130328f552dcfac0b1cec75c12e3f005619dc5f874f0a06e8ff7263f0ee6225e \ - --hash=sha256:c99ab0c73aceb050f68929bc93af19ab6db0558791c6a0715723abe9d0ade9d4 +pytest==7.2.2 # via # -r requirements/pytest.in # pytest-xdist -pytest-xdist==3.2.1 \ - --hash=sha256:1849bd98d8b242b948e472db7478e090bf3361912a8fed87992ed94085f54727 \ - --hash=sha256:37290d161638a20b672401deef1cba812d110ac27e35d213f091d15b8beb40c9 +pytest-xdist==3.2.1 # via -r requirements/pytest.in -pytz==2023.2 \ - --hash=sha256:8a8baaf1e237175b02f5c751eea67168043a749c843989e2b3015aa1ad9db68b \ - --hash=sha256:a27dcf612c05d2ebde626f7d506555f10dfc815b3eddccfaadfc7d99b11c9a07 +pytz==2023.2 # via babel -readme-renderer==37.3 \ - --hash=sha256:cd653186dfc73055656f090f227f5cb22a046d7f71a841dfa305f55c9a513273 \ - --hash=sha256:f67a16caedfa71eef48a31b39708637a6f4664c4394801a7b0d6432d13907343 +readme-renderer==37.3 # via # -r requirements/dev.in # twine -requests==2.28.2 \ - --hash=sha256:64299f4909223da747622c030b781c0d7811e359c37124b4bd368fb8c6518baa \ - --hash=sha256:98b1b2782e3c6c4904938b84c0eb932721069dfdb9134313beff7c83c2df24bf +requests==2.28.2 # via # -r requirements/dev.in # requests-toolbelt # scriv # sphinx # twine -requests-toolbelt==0.10.1 \ - --hash=sha256:18565aa58116d9951ac39baa288d3adb5b3ff975c4f25eee78555d89e8f247f7 \ - --hash=sha256:62e09f7ff5ccbda92772a29f394a49c3ad6cb181d568b1337626b2abb628a63d +requests-toolbelt==0.10.1 # via twine -rfc3986==2.0.0 \ - --hash=sha256:50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd \ - --hash=sha256:97aacf9dbd4bfd829baad6e6309fa6573aaf1be3f6fa735c8ab05e46cecb261c +rfc3986==2.0.0 # via twine -rich==13.3.2 \ - --hash=sha256:91954fe80cfb7985727a467ca98a7618e5dd15178cc2da10f553b36a93859001 \ - --hash=sha256:a104f37270bf677148d8acb07d33be1569eeee87e2d1beb286a4e9113caf6f2f +rich==13.3.2 # via twine -scriv==1.2.1 \ - --hash=sha256:0ceec6243ebf02f6a685507eec72f890ca9d9da4cafcfcfce640b1f027cec17d \ - --hash=sha256:95edfd76642cf7ae6b5cd40975545d8af58f6398cabfe83ff755e8eedb8ddd4e +scriv==1.2.1 # via -r doc/requirements.in -six==1.16.0 \ - --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ - --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 +six==1.16.0 # via # bleach # livereload -snowballstemmer==2.2.0 \ - --hash=sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1 \ - --hash=sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a +snowballstemmer==2.2.0 # via sphinx -sortedcontainers==2.4.0 \ - --hash=sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88 \ - --hash=sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0 +sortedcontainers==2.4.0 # via hypothesis -sphinx==5.3.0 \ - --hash=sha256:060ca5c9f7ba57a08a1219e547b269fadf125ae25b06b9fa7f66768efb652d6d \ - --hash=sha256:51026de0a9ff9fc13c05d74913ad66047e104f56a129ff73e174eb5c3ee794b5 +sphinx==5.3.0 # via # -r doc/requirements.in # sphinx-autobuild @@ -549,53 +200,29 @@ sphinx==5.3.0 \ # sphinxcontrib-jquery # sphinxcontrib-restbuilder # sphinxcontrib-spelling -sphinx-autobuild==2021.3.14 \ - --hash=sha256:8fe8cbfdb75db04475232f05187c776f46f6e9e04cacf1e49ce81bdac649ccac \ - --hash=sha256:de1ca3b66e271d2b5b5140c35034c89e47f263f2cd5db302c9217065f7443f05 +sphinx-autobuild==2021.3.14 # via -r doc/requirements.in -sphinx-rtd-theme==1.2.0 \ - --hash=sha256:a0d8bd1a2ed52e0b338cbe19c4b2eef3c5e7a048769753dac6a9f059c7b641b8 \ - --hash=sha256:f823f7e71890abe0ac6aaa6013361ea2696fc8d3e1fa798f463e82bdb77eeff2 +sphinx-rtd-theme==1.2.0 # via -r doc/requirements.in -sphinxcontrib-applehelp==1.0.2 \ - --hash=sha256:806111e5e962be97c29ec4c1e7fe277bfd19e9652fb1a4392105b43e01af885a \ - --hash=sha256:a072735ec80e7675e3f432fcae8610ecf509c5f1869d17e2eecff44389cdbc58 +sphinxcontrib-applehelp==1.0.2 # via sphinx -sphinxcontrib-devhelp==1.0.2 \ - --hash=sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e \ - --hash=sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4 +sphinxcontrib-devhelp==1.0.2 # via sphinx -sphinxcontrib-htmlhelp==2.0.0 \ - --hash=sha256:d412243dfb797ae3ec2b59eca0e52dac12e75a241bf0e4eb861e450d06c6ed07 \ - --hash=sha256:f5f8bb2d0d629f398bf47d0d69c07bc13b65f75a81ad9e2f71a63d4b7a2f6db2 +sphinxcontrib-htmlhelp==2.0.0 # via sphinx -sphinxcontrib-jquery==4.1 \ - --hash=sha256:1620739f04e36a2c779f1a131a2dfd49b2fd07351bf1968ced074365933abc7a \ - --hash=sha256:f936030d7d0147dd026a4f2b5a57343d233f1fc7b363f68b3d4f1cb0993878ae +sphinxcontrib-jquery==4.1 # via sphinx-rtd-theme -sphinxcontrib-jsmath==1.0.1 \ - --hash=sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178 \ - --hash=sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8 +sphinxcontrib-jsmath==1.0.1 # via sphinx -sphinxcontrib-qthelp==1.0.3 \ - --hash=sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72 \ - --hash=sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6 +sphinxcontrib-qthelp==1.0.3 # via sphinx -sphinxcontrib-restbuilder==0.3 \ - --hash=sha256:6b3ee9394b5ec5e73e6afb34d223530d0b9098cb7562f9c5e364e6d6b41410ce \ - --hash=sha256:6ba2ddc7a87d845c075c1b2e00d541bd1c8400488e50e32c9b4169ccdd9f30cb +sphinxcontrib-restbuilder==0.3 # via -r doc/requirements.in -sphinxcontrib-serializinghtml==1.1.5 \ - --hash=sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd \ - --hash=sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952 +sphinxcontrib-serializinghtml==1.1.5 # via sphinx -sphinxcontrib-spelling==8.0.0 \ - --hash=sha256:199d0a16902ad80c387c2966dc9eb10f565b1fb15ccce17210402db7c2443e5c \ - --hash=sha256:b27e0a16aef00bcfc888a6490dc3f16651f901dc475446c6882834278c8dc7b3 +sphinxcontrib-spelling==8.0.0 # via -r doc/requirements.in -tomli==2.0.1 \ - --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ - --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f +tomli==2.0.1 # via # build # check-manifest @@ -604,66 +231,21 @@ tomli==2.0.1 \ # pyproject-hooks # pytest # tox -tomlkit==0.11.6 \ - --hash=sha256:07de26b0d8cfc18f871aec595fda24d95b08fef89d147caa861939f37230bf4b \ - --hash=sha256:71b952e5721688937fb02cf9d354dbcf0785066149d2855e44531ebdd2b65d73 +tomlkit==0.11.6 # via pylint -tornado==6.2 \ - --hash=sha256:1d54d13ab8414ed44de07efecb97d4ef7c39f7438cf5e976ccd356bebb1b5fca \ - --hash=sha256:20f638fd8cc85f3cbae3c732326e96addff0a15e22d80f049e00121651e82e72 \ - --hash=sha256:5c87076709343557ef8032934ce5f637dbb552efa7b21d08e89ae7619ed0eb23 \ - --hash=sha256:5f8c52d219d4995388119af7ccaa0bcec289535747620116a58d830e7c25d8a8 \ - --hash=sha256:6fdfabffd8dfcb6cf887428849d30cf19a3ea34c2c248461e1f7d718ad30b66b \ - --hash=sha256:87dcafae3e884462f90c90ecc200defe5e580a7fbbb4365eda7c7c1eb809ebc9 \ - --hash=sha256:9b630419bde84ec666bfd7ea0a4cb2a8a651c2d5cccdbdd1972a0c859dfc3c13 \ - --hash=sha256:b8150f721c101abdef99073bf66d3903e292d851bee51910839831caba341a75 \ - --hash=sha256:ba09ef14ca9893954244fd872798b4ccb2367c165946ce2dd7376aebdde8e3ac \ - --hash=sha256:d3a2f5999215a3a06a4fc218026cd84c61b8b2b40ac5296a6db1f1451ef04c1e \ - --hash=sha256:e5f923aa6a47e133d1cf87d60700889d7eae68988704e20c75fb2d65677a8e4b +tornado==6.2 # via livereload -tox==4.4.7 \ - --hash=sha256:52c92a96e2c3fd47c5301e9c26f5a871466133d5376958c1ed95ef4ff4629cbe \ - --hash=sha256:da10ca1d809b99fae80b706b9dc9656b1daf505a395ac427d130a8a85502d08f +tox==4.4.7 # via # -r requirements/tox.in # tox-gh -tox-gh==1.0.0 \ - --hash=sha256:9cfbaa927946887d53bc19ae86621f4e5dc8516f3771ba4e74daeb1a1775efcd \ - --hash=sha256:bda94ac15dbb62ef1e517672c05f8039faad5afaf9d1b4c9fa32d07f18027571 +tox-gh==1.0.0 # via -r requirements/tox.in -twine==4.0.2 \ - --hash=sha256:929bc3c280033347a00f847236564d1c52a3e61b1ac2516c97c48f3ceab756d8 \ - --hash=sha256:9e102ef5fdd5a20661eb88fad46338806c3bd32cf1db729603fe3697b1bc83c8 +twine==4.0.2 # via -r requirements/dev.in -typed-ast==1.5.4 \ - --hash=sha256:0261195c2062caf107831e92a76764c81227dae162c4f75192c0d489faf751a2 \ - --hash=sha256:0fdbcf2fef0ca421a3f5912555804296f0b0960f0418c440f5d6d3abb549f3e1 \ - --hash=sha256:183afdf0ec5b1b211724dfef3d2cad2d767cbefac291f24d69b00546c1837fb6 \ - --hash=sha256:211260621ab1cd7324e0798d6be953d00b74e0428382991adfddb352252f1d62 \ - --hash=sha256:267e3f78697a6c00c689c03db4876dd1efdfea2f251a5ad6555e82a26847b4ac \ - --hash=sha256:2efae9db7a8c05ad5547d522e7dbe62c83d838d3906a3716d1478b6c1d61388d \ - --hash=sha256:370788a63915e82fd6f212865a596a0fefcbb7d408bbbb13dea723d971ed8bdc \ - --hash=sha256:39e21ceb7388e4bb37f4c679d72707ed46c2fbf2a5609b8b8ebc4b067d977df2 \ - --hash=sha256:3e123d878ba170397916557d31c8f589951e353cc95fb7f24f6bb69adc1a8a97 \ - --hash=sha256:4879da6c9b73443f97e731b617184a596ac1235fe91f98d279a7af36c796da35 \ - --hash=sha256:4e964b4ff86550a7a7d56345c7864b18f403f5bd7380edf44a3c1fb4ee7ac6c6 \ - --hash=sha256:639c5f0b21776605dd6c9dbe592d5228f021404dafd377e2b7ac046b0349b1a1 \ - --hash=sha256:669dd0c4167f6f2cd9f57041e03c3c2ebf9063d0757dc89f79ba1daa2bfca9d4 \ - --hash=sha256:6778e1b2f81dfc7bc58e4b259363b83d2e509a65198e85d5700dfae4c6c8ff1c \ - --hash=sha256:683407d92dc953c8a7347119596f0b0e6c55eb98ebebd9b23437501b28dcbb8e \ - --hash=sha256:79b1e0869db7c830ba6a981d58711c88b6677506e648496b1f64ac7d15633aec \ - --hash=sha256:7d5d014b7daa8b0bf2eaef684295acae12b036d79f54178b92a2b6a56f92278f \ - --hash=sha256:98f80dee3c03455e92796b58b98ff6ca0b2a6f652120c263efdba4d6c5e58f72 \ - --hash=sha256:a94d55d142c9265f4ea46fab70977a1944ecae359ae867397757d836ea5a3f47 \ - --hash=sha256:a9916d2bb8865f973824fb47436fa45e1ebf2efd920f2b9f99342cb7fab93f72 \ - --hash=sha256:c542eeda69212fa10a7ada75e668876fdec5f856cd3d06829e6aa64ad17c8dfe \ - --hash=sha256:cf4afcfac006ece570e32d6fa90ab74a17245b83dfd6655a6f68568098345ff6 \ - --hash=sha256:ebd9d7f80ccf7a82ac5f88c521115cc55d84e35bf8b446fcd7836eb6b98929a3 \ - --hash=sha256:ed855bbe3eb3715fca349c80174cfcfd699c2f9de574d40527b8429acae23a66 +typed-ast==1.5.4 # via astroid -typing-extensions==4.5.0 \ - --hash=sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb \ - --hash=sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4 +typing-extensions==4.5.0 # via # astroid # importlib-metadata @@ -672,122 +254,33 @@ typing-extensions==4.5.0 \ # pylint # rich # tox -urllib3==1.26.15 \ - --hash=sha256:8a388717b9476f934a21484e8c8e61875ab60644d29b9b39e11e4b9dc1c6b305 \ - --hash=sha256:aa751d169e23c7479ce47a0cb0da579e3ede798f994f5816a74e4f4500dcea42 +urllib3==1.26.15 # via # requests # twine -urwid==2.1.2 \ - --hash=sha256:588bee9c1cb208d0906a9f73c613d2bd32c3ed3702012f51efe318a3f2127eae +urwid==2.1.2 # via # pudb # urwid-readline -urwid-readline==0.13 \ - --hash=sha256:018020cbc864bb5ed87be17dc26b069eae2755cb29f3a9c569aac3bded1efaf4 +urwid-readline==0.13 # via pudb -virtualenv==20.21.0 \ - --hash=sha256:31712f8f2a17bd06234fa97fdf19609e789dd4e3e4bf108c3da71d710651adbc \ - --hash=sha256:f50e3e60f990a0757c9b68333c9fdaa72d7188caa417f96af9e52407831a3b68 +virtualenv==20.21.0 # via # -r requirements/pip.in # tox -webencodings==0.5.1 \ - --hash=sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78 \ - --hash=sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923 +webencodings==0.5.1 # via bleach -wrapt==1.15.0 \ - --hash=sha256:02fce1852f755f44f95af51f69d22e45080102e9d00258053b79367d07af39c0 \ - --hash=sha256:077ff0d1f9d9e4ce6476c1a924a3332452c1406e59d90a2cf24aeb29eeac9420 \ - --hash=sha256:078e2a1a86544e644a68422f881c48b84fef6d18f8c7a957ffd3f2e0a74a0d4a \ - --hash=sha256:0970ddb69bba00670e58955f8019bec4a42d1785db3faa043c33d81de2bf843c \ - --hash=sha256:1286eb30261894e4c70d124d44b7fd07825340869945c79d05bda53a40caa079 \ - --hash=sha256:21f6d9a0d5b3a207cdf7acf8e58d7d13d463e639f0c7e01d82cdb671e6cb7923 \ - --hash=sha256:230ae493696a371f1dbffaad3dafbb742a4d27a0afd2b1aecebe52b740167e7f \ - --hash=sha256:26458da5653aa5b3d8dc8b24192f574a58984c749401f98fff994d41d3f08da1 \ - --hash=sha256:2cf56d0e237280baed46f0b5316661da892565ff58309d4d2ed7dba763d984b8 \ - --hash=sha256:2e51de54d4fb8fb50d6ee8327f9828306a959ae394d3e01a1ba8b2f937747d86 \ - --hash=sha256:2fbfbca668dd15b744418265a9607baa970c347eefd0db6a518aaf0cfbd153c0 \ - --hash=sha256:38adf7198f8f154502883242f9fe7333ab05a5b02de7d83aa2d88ea621f13364 \ - --hash=sha256:3a8564f283394634a7a7054b7983e47dbf39c07712d7b177b37e03f2467a024e \ - --hash=sha256:3abbe948c3cbde2689370a262a8d04e32ec2dd4f27103669a45c6929bcdbfe7c \ - --hash=sha256:3bbe623731d03b186b3d6b0d6f51865bf598587c38d6f7b0be2e27414f7f214e \ - --hash=sha256:40737a081d7497efea35ab9304b829b857f21558acfc7b3272f908d33b0d9d4c \ - --hash=sha256:41d07d029dd4157ae27beab04d22b8e261eddfc6ecd64ff7000b10dc8b3a5727 \ - --hash=sha256:46ed616d5fb42f98630ed70c3529541408166c22cdfd4540b88d5f21006b0eff \ - --hash=sha256:493d389a2b63c88ad56cdc35d0fa5752daac56ca755805b1b0c530f785767d5e \ - --hash=sha256:4ff0d20f2e670800d3ed2b220d40984162089a6e2c9646fdb09b85e6f9a8fc29 \ - --hash=sha256:54accd4b8bc202966bafafd16e69da9d5640ff92389d33d28555c5fd4f25ccb7 \ - --hash=sha256:56374914b132c702aa9aa9959c550004b8847148f95e1b824772d453ac204a72 \ - --hash=sha256:578383d740457fa790fdf85e6d346fda1416a40549fe8db08e5e9bd281c6a475 \ - --hash=sha256:58d7a75d731e8c63614222bcb21dd992b4ab01a399f1f09dd82af17bbfc2368a \ - --hash=sha256:5c5aa28df055697d7c37d2099a7bc09f559d5053c3349b1ad0c39000e611d317 \ - --hash=sha256:5fc8e02f5984a55d2c653f5fea93531e9836abbd84342c1d1e17abc4a15084c2 \ - --hash=sha256:63424c681923b9f3bfbc5e3205aafe790904053d42ddcc08542181a30a7a51bd \ - --hash=sha256:64b1df0f83706b4ef4cfb4fb0e4c2669100fd7ecacfb59e091fad300d4e04640 \ - --hash=sha256:74934ebd71950e3db69960a7da29204f89624dde411afbfb3b4858c1409b1e98 \ - --hash=sha256:75669d77bb2c071333417617a235324a1618dba66f82a750362eccbe5b61d248 \ - --hash=sha256:75760a47c06b5974aa5e01949bf7e66d2af4d08cb8c1d6516af5e39595397f5e \ - --hash=sha256:76407ab327158c510f44ded207e2f76b657303e17cb7a572ffe2f5a8a48aa04d \ - --hash=sha256:76e9c727a874b4856d11a32fb0b389afc61ce8aaf281ada613713ddeadd1cfec \ - --hash=sha256:77d4c1b881076c3ba173484dfa53d3582c1c8ff1f914c6461ab70c8428b796c1 \ - --hash=sha256:780c82a41dc493b62fc5884fb1d3a3b81106642c5c5c78d6a0d4cbe96d62ba7e \ - --hash=sha256:7dc0713bf81287a00516ef43137273b23ee414fe41a3c14be10dd95ed98a2df9 \ - --hash=sha256:7eebcdbe3677e58dd4c0e03b4f2cfa346ed4049687d839adad68cc38bb559c92 \ - --hash=sha256:896689fddba4f23ef7c718279e42f8834041a21342d95e56922e1c10c0cc7afb \ - --hash=sha256:96177eb5645b1c6985f5c11d03fc2dbda9ad24ec0f3a46dcce91445747e15094 \ - --hash=sha256:96e25c8603a155559231c19c0349245eeb4ac0096fe3c1d0be5c47e075bd4f46 \ - --hash=sha256:9d37ac69edc5614b90516807de32d08cb8e7b12260a285ee330955604ed9dd29 \ - --hash=sha256:9ed6aa0726b9b60911f4aed8ec5b8dd7bf3491476015819f56473ffaef8959bd \ - --hash=sha256:a487f72a25904e2b4bbc0817ce7a8de94363bd7e79890510174da9d901c38705 \ - --hash=sha256:a4cbb9ff5795cd66f0066bdf5947f170f5d63a9274f99bdbca02fd973adcf2a8 \ - --hash=sha256:a74d56552ddbde46c246b5b89199cb3fd182f9c346c784e1a93e4dc3f5ec9975 \ - --hash=sha256:a89ce3fd220ff144bd9d54da333ec0de0399b52c9ac3d2ce34b569cf1a5748fb \ - --hash=sha256:abd52a09d03adf9c763d706df707c343293d5d106aea53483e0ec8d9e310ad5e \ - --hash=sha256:abd8f36c99512755b8456047b7be10372fca271bf1467a1caa88db991e7c421b \ - --hash=sha256:af5bd9ccb188f6a5fdda9f1f09d9f4c86cc8a539bd48a0bfdc97723970348418 \ - --hash=sha256:b02f21c1e2074943312d03d243ac4388319f2456576b2c6023041c4d57cd7019 \ - --hash=sha256:b06fa97478a5f478fb05e1980980a7cdf2712015493b44d0c87606c1513ed5b1 \ - --hash=sha256:b0724f05c396b0a4c36a3226c31648385deb6a65d8992644c12a4963c70326ba \ - --hash=sha256:b130fe77361d6771ecf5a219d8e0817d61b236b7d8b37cc045172e574ed219e6 \ - --hash=sha256:b56d5519e470d3f2fe4aa7585f0632b060d532d0696c5bdfb5e8319e1d0f69a2 \ - --hash=sha256:b67b819628e3b748fd3c2192c15fb951f549d0f47c0449af0764d7647302fda3 \ - --hash=sha256:ba1711cda2d30634a7e452fc79eabcadaffedf241ff206db2ee93dd2c89a60e7 \ - --hash=sha256:bbeccb1aa40ab88cd29e6c7d8585582c99548f55f9b2581dfc5ba68c59a85752 \ - --hash=sha256:bd84395aab8e4d36263cd1b9308cd504f6cf713b7d6d3ce25ea55670baec5416 \ - --hash=sha256:c99f4309f5145b93eca6e35ac1a988f0dc0a7ccf9ccdcd78d3c0adf57224e62f \ - --hash=sha256:ca1cccf838cd28d5a0883b342474c630ac48cac5df0ee6eacc9c7290f76b11c1 \ - --hash=sha256:cd525e0e52a5ff16653a3fc9e3dd827981917d34996600bbc34c05d048ca35cc \ - --hash=sha256:cdb4f085756c96a3af04e6eca7f08b1345e94b53af8921b25c72f096e704e145 \ - --hash=sha256:ce42618f67741d4697684e501ef02f29e758a123aa2d669e2d964ff734ee00ee \ - --hash=sha256:d06730c6aed78cee4126234cf2d071e01b44b915e725a6cb439a879ec9754a3a \ - --hash=sha256:d5fe3e099cf07d0fb5a1e23d399e5d4d1ca3e6dfcbe5c8570ccff3e9208274f7 \ - --hash=sha256:d6bcbfc99f55655c3d93feb7ef3800bd5bbe963a755687cbf1f490a71fb7794b \ - --hash=sha256:d787272ed958a05b2c86311d3a4135d3c2aeea4fc655705f074130aa57d71653 \ - --hash=sha256:e169e957c33576f47e21864cf3fc9ff47c223a4ebca8960079b8bd36cb014fd0 \ - --hash=sha256:e20076a211cd6f9b44a6be58f7eeafa7ab5720eb796975d0c03f05b47d89eb90 \ - --hash=sha256:e826aadda3cae59295b95343db8f3d965fb31059da7de01ee8d1c40a60398b29 \ - --hash=sha256:eef4d64c650f33347c1f9266fa5ae001440b232ad9b98f1f43dfe7a79435c0a6 \ - --hash=sha256:f2e69b3ed24544b0d3dbe2c5c0ba5153ce50dcebb576fdc4696d52aa22db6034 \ - --hash=sha256:f87ec75864c37c4c6cb908d282e1969e79763e0d9becdfe9fe5473b7bb1e5f09 \ - --hash=sha256:fbec11614dba0424ca72f4e8ba3c420dba07b4a7c206c8c8e4e73f2e98f4c559 \ - --hash=sha256:fd69666217b62fa5d7c6aa88e507493a34dec4fa20c5bd925e4bc12fce586639 +wrapt==1.15.0 # via astroid -zipp==3.15.0 \ - --hash=sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b \ - --hash=sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556 +zipp==3.15.0 # via # importlib-metadata # importlib-resources # The following packages are considered to be unsafe in a requirements file: -pip==23.0.1 \ - --hash=sha256:236bcb61156d76c4b8a05821b988c7b8c35bf0da28a4b614e8d6ab5212c25c6f \ - --hash=sha256:cd015ea1bfb0fcef59d8a286c1f8bebcb983f6317719d415dc5351efb7cd7024 +pip==23.0.1 # via -r requirements/pip.in -setuptools==65.7.0 \ - --hash=sha256:4d3c92fac8f1118bb77a22181355e29c239cabfe2b9effdaa665c66b711136d7 \ - --hash=sha256:8ab4f1dbf2b4a65f7eec5ad0c620e84c34111a68d3349833494b9088212214dd +setuptools==65.7.0 # via # -c requirements/pins.pip # -r requirements/pip.in diff --git a/requirements/mypy.pip b/requirements/mypy.pip index f474d6424..16205eeb3 100644 --- a/requirements/mypy.pip +++ b/requirements/mypy.pip @@ -4,137 +4,53 @@ # # make upgrade # -attrs==22.2.0 \ - --hash=sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836 \ - --hash=sha256:c9227bfc2f01993c03f68db37d1d15c9690188323c067c641f1a35ca58185f99 +attrs==22.2.0 # via # hypothesis # pytest -colorama==0.4.6 \ - --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \ - --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 +colorama==0.4.6 # via -r requirements/pytest.in -exceptiongroup==1.1.1 \ - --hash=sha256:232c37c63e4f682982c8b6459f33a8981039e5fb8756b2074364e5055c498c9e \ - --hash=sha256:d484c3090ba2889ae2928419117447a14daf3c1231d5e30d0aae34f354f01785 +exceptiongroup==1.1.1 # via # hypothesis # pytest -execnet==1.9.0 \ - --hash=sha256:8f694f3ba9cc92cab508b152dcfe322153975c29bda272e2fd7f3f00f36e47c5 \ - --hash=sha256:a295f7cc774947aac58dde7fdc85f4aa00c42adf5d8f5468fc630c1acf30a142 +execnet==1.9.0 # via pytest-xdist -flaky==3.7.0 \ - --hash=sha256:3ad100780721a1911f57a165809b7ea265a7863305acb66708220820caf8aa0d \ - --hash=sha256:d6eda73cab5ae7364504b7c44670f70abed9e75f77dd116352f662817592ec9c +flaky==3.7.0 # via -r requirements/pytest.in -hypothesis==6.70.0 \ - --hash=sha256:be395f71d6337a5e8ed2f695c568360a686056c3b00c98bd818874c674b24586 \ - --hash=sha256:f5cae09417d0ffc7711f602cdcfa3b7baf344597a672a84658186605b04f4a4f +hypothesis==6.70.0 # via -r requirements/pytest.in -importlib-metadata==6.1.0 \ - --hash=sha256:43ce9281e097583d758c2c708c4376371261a02c34682491a8e98352365aad20 \ - --hash=sha256:ff80f3b5394912eb1b108fcfd444dc78b7f1f3e16b16188054bd01cb9cb86f09 +importlib-metadata==6.1.0 # via # pluggy # pytest -iniconfig==2.0.0 \ - --hash=sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3 \ - --hash=sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374 +iniconfig==2.0.0 # via pytest -mypy==1.1.1 \ - --hash=sha256:0a28a76785bf57655a8ea5eb0540a15b0e781c807b5aa798bd463779988fa1d5 \ - --hash=sha256:19ba15f9627a5723e522d007fe708007bae52b93faab00f95d72f03e1afa9598 \ - --hash=sha256:21b437be1c02712a605591e1ed1d858aba681757a1e55fe678a15c2244cd68a5 \ - --hash=sha256:26cdd6a22b9b40b2fd71881a8a4f34b4d7914c679f154f43385ca878a8297389 \ - --hash=sha256:2888ce4fe5aae5a673386fa232473014056967f3904f5abfcf6367b5af1f612a \ - --hash=sha256:2b0c373d071593deefbcdd87ec8db91ea13bd8f1328d44947e88beae21e8d5e9 \ - --hash=sha256:315ac73cc1cce4771c27d426b7ea558fb4e2836f89cb0296cbe056894e3a1f78 \ - --hash=sha256:39c7119335be05630611ee798cc982623b9e8f0cff04a0b48dfc26100e0b97af \ - --hash=sha256:4b398d8b1f4fba0e3c6463e02f8ad3346f71956b92287af22c9b12c3ec965a9f \ - --hash=sha256:4e4e8b362cdf99ba00c2b218036002bdcdf1e0de085cdb296a49df03fb31dfc4 \ - --hash=sha256:59bbd71e5c58eed2e992ce6523180e03c221dcd92b52f0e792f291d67b15a71c \ - --hash=sha256:5b5f81b40d94c785f288948c16e1f2da37203c6006546c5d947aab6f90aefef2 \ - --hash=sha256:5cb14ff9919b7df3538590fc4d4c49a0f84392237cbf5f7a816b4161c061829e \ - --hash=sha256:61bf08362e93b6b12fad3eab68c4ea903a077b87c90ac06c11e3d7a09b56b9c1 \ - --hash=sha256:64cc3afb3e9e71a79d06e3ed24bb508a6d66f782aff7e56f628bf35ba2e0ba51 \ - --hash=sha256:69b35d1dcb5707382810765ed34da9db47e7f95b3528334a3c999b0c90fe523f \ - --hash=sha256:9401e33814cec6aec8c03a9548e9385e0e228fc1b8b0a37b9ea21038e64cdd8a \ - --hash=sha256:a380c041db500e1410bb5b16b3c1c35e61e773a5c3517926b81dfdab7582be54 \ - --hash=sha256:ae9ceae0f5b9059f33dbc62dea087e942c0ccab4b7a003719cb70f9b8abfa32f \ - --hash=sha256:b7c7b708fe9a871a96626d61912e3f4ddd365bf7f39128362bc50cbd74a634d5 \ - --hash=sha256:c1c10fa12df1232c936830839e2e935d090fc9ee315744ac33b8a32216b93707 \ - --hash=sha256:ce61663faf7a8e5ec6f456857bfbcec2901fbdb3ad958b778403f63b9e606a1b \ - --hash=sha256:d64c28e03ce40d5303450f547e07418c64c241669ab20610f273c9e6290b4b0b \ - --hash=sha256:d809f88734f44a0d44959d795b1e6f64b2bbe0ea4d9cc4776aa588bb4229fc1c \ - --hash=sha256:dbb19c9f662e41e474e0cff502b7064a7edc6764f5262b6cd91d698163196799 \ - --hash=sha256:ef6a01e563ec6a4940784c574d33f6ac1943864634517984471642908b30b6f7 +mypy==1.1.1 # via -r requirements/mypy.in -mypy-extensions==1.0.0 \ - --hash=sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d \ - --hash=sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782 +mypy-extensions==1.0.0 # via mypy -packaging==23.0 \ - --hash=sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2 \ - --hash=sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97 +packaging==23.0 # via pytest -pluggy==1.0.0 \ - --hash=sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159 \ - --hash=sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3 +pluggy==1.0.0 # via pytest -pytest==7.2.2 \ - --hash=sha256:130328f552dcfac0b1cec75c12e3f005619dc5f874f0a06e8ff7263f0ee6225e \ - --hash=sha256:c99ab0c73aceb050f68929bc93af19ab6db0558791c6a0715723abe9d0ade9d4 +pytest==7.2.2 # via # -r requirements/pytest.in # pytest-xdist -pytest-xdist==3.2.1 \ - --hash=sha256:1849bd98d8b242b948e472db7478e090bf3361912a8fed87992ed94085f54727 \ - --hash=sha256:37290d161638a20b672401deef1cba812d110ac27e35d213f091d15b8beb40c9 +pytest-xdist==3.2.1 # via -r requirements/pytest.in -sortedcontainers==2.4.0 \ - --hash=sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88 \ - --hash=sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0 +sortedcontainers==2.4.0 # via hypothesis -tomli==2.0.1 \ - --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ - --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f +tomli==2.0.1 # via # mypy # pytest -typed-ast==1.5.4 \ - --hash=sha256:0261195c2062caf107831e92a76764c81227dae162c4f75192c0d489faf751a2 \ - --hash=sha256:0fdbcf2fef0ca421a3f5912555804296f0b0960f0418c440f5d6d3abb549f3e1 \ - --hash=sha256:183afdf0ec5b1b211724dfef3d2cad2d767cbefac291f24d69b00546c1837fb6 \ - --hash=sha256:211260621ab1cd7324e0798d6be953d00b74e0428382991adfddb352252f1d62 \ - --hash=sha256:267e3f78697a6c00c689c03db4876dd1efdfea2f251a5ad6555e82a26847b4ac \ - --hash=sha256:2efae9db7a8c05ad5547d522e7dbe62c83d838d3906a3716d1478b6c1d61388d \ - --hash=sha256:370788a63915e82fd6f212865a596a0fefcbb7d408bbbb13dea723d971ed8bdc \ - --hash=sha256:39e21ceb7388e4bb37f4c679d72707ed46c2fbf2a5609b8b8ebc4b067d977df2 \ - --hash=sha256:3e123d878ba170397916557d31c8f589951e353cc95fb7f24f6bb69adc1a8a97 \ - --hash=sha256:4879da6c9b73443f97e731b617184a596ac1235fe91f98d279a7af36c796da35 \ - --hash=sha256:4e964b4ff86550a7a7d56345c7864b18f403f5bd7380edf44a3c1fb4ee7ac6c6 \ - --hash=sha256:639c5f0b21776605dd6c9dbe592d5228f021404dafd377e2b7ac046b0349b1a1 \ - --hash=sha256:669dd0c4167f6f2cd9f57041e03c3c2ebf9063d0757dc89f79ba1daa2bfca9d4 \ - --hash=sha256:6778e1b2f81dfc7bc58e4b259363b83d2e509a65198e85d5700dfae4c6c8ff1c \ - --hash=sha256:683407d92dc953c8a7347119596f0b0e6c55eb98ebebd9b23437501b28dcbb8e \ - --hash=sha256:79b1e0869db7c830ba6a981d58711c88b6677506e648496b1f64ac7d15633aec \ - --hash=sha256:7d5d014b7daa8b0bf2eaef684295acae12b036d79f54178b92a2b6a56f92278f \ - --hash=sha256:98f80dee3c03455e92796b58b98ff6ca0b2a6f652120c263efdba4d6c5e58f72 \ - --hash=sha256:a94d55d142c9265f4ea46fab70977a1944ecae359ae867397757d836ea5a3f47 \ - --hash=sha256:a9916d2bb8865f973824fb47436fa45e1ebf2efd920f2b9f99342cb7fab93f72 \ - --hash=sha256:c542eeda69212fa10a7ada75e668876fdec5f856cd3d06829e6aa64ad17c8dfe \ - --hash=sha256:cf4afcfac006ece570e32d6fa90ab74a17245b83dfd6655a6f68568098345ff6 \ - --hash=sha256:ebd9d7f80ccf7a82ac5f88c521115cc55d84e35bf8b446fcd7836eb6b98929a3 \ - --hash=sha256:ed855bbe3eb3715fca349c80174cfcfd699c2f9de574d40527b8429acae23a66 +typed-ast==1.5.4 # via mypy -typing-extensions==4.5.0 \ - --hash=sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb \ - --hash=sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4 +typing-extensions==4.5.0 # via # importlib-metadata # mypy -zipp==3.15.0 \ - --hash=sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b \ - --hash=sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556 +zipp==3.15.0 # via importlib-metadata diff --git a/requirements/pip-tools.pip b/requirements/pip-tools.pip index 37cf8455a..000f707a7 100644 --- a/requirements/pip-tools.pip +++ b/requirements/pip-tools.pip @@ -4,59 +4,35 @@ # # make upgrade # -build==0.10.0 \ - --hash=sha256:af266720050a66c893a6096a2f410989eeac74ff9a68ba194b3f6473e8e26171 \ - --hash=sha256:d5b71264afdb5951d6704482aac78de887c80691c52b88a9ad195983ca2c9269 +build==0.10.0 # via pip-tools -click==8.1.3 \ - --hash=sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e \ - --hash=sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48 +click==8.1.3 # via pip-tools -importlib-metadata==6.1.0 \ - --hash=sha256:43ce9281e097583d758c2c708c4376371261a02c34682491a8e98352365aad20 \ - --hash=sha256:ff80f3b5394912eb1b108fcfd444dc78b7f1f3e16b16188054bd01cb9cb86f09 +importlib-metadata==6.1.0 # via # build # click -packaging==23.0 \ - --hash=sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2 \ - --hash=sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97 +packaging==23.0 # via build -pip-tools==6.12.3 \ - --hash=sha256:480d44fae6e09fad3f9bd3d0a7e8423088715d10477e8ef0663440db25e3114f \ - --hash=sha256:8510420f46572b2e26c357541390593d9365eb6edd2d1e7505267910ecaec080 +pip-tools==6.12.3 # via -r requirements/pip-tools.in -pyproject-hooks==1.0.0 \ - --hash=sha256:283c11acd6b928d2f6a7c73fa0d01cb2bdc5f07c57a2eeb6e83d5e56b97976f8 \ - --hash=sha256:f271b298b97f5955d53fb12b72c1fb1948c22c1a6b70b315c54cedaca0264ef5 +pyproject-hooks==1.0.0 # via build -tomli==2.0.1 \ - --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ - --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f +tomli==2.0.1 # via # build # pyproject-hooks -typing-extensions==4.5.0 \ - --hash=sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb \ - --hash=sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4 +typing-extensions==4.5.0 # via importlib-metadata -wheel==0.40.0 \ - --hash=sha256:cd1196f3faee2b31968d626e1731c94f99cbdb67cf5a46e4f5656cbee7738873 \ - --hash=sha256:d236b20e7cb522daf2390fa84c55eea81c5c30190f90f29ae2ca1ad8355bf247 +wheel==0.40.0 # via pip-tools -zipp==3.15.0 \ - --hash=sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b \ - --hash=sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556 +zipp==3.15.0 # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: -pip==23.0.1 \ - --hash=sha256:236bcb61156d76c4b8a05821b988c7b8c35bf0da28a4b614e8d6ab5212c25c6f \ - --hash=sha256:cd015ea1bfb0fcef59d8a286c1f8bebcb983f6317719d415dc5351efb7cd7024 +pip==23.0.1 # via pip-tools -setuptools==65.7.0 \ - --hash=sha256:4d3c92fac8f1118bb77a22181355e29c239cabfe2b9effdaa665c66b711136d7 \ - --hash=sha256:8ab4f1dbf2b4a65f7eec5ad0c620e84c34111a68d3349833494b9088212214dd +setuptools==65.7.0 # via # -c requirements/pins.pip # pip-tools diff --git a/requirements/pip.pip b/requirements/pip.pip index 28fbe1787..1bf54a3d0 100644 --- a/requirements/pip.pip +++ b/requirements/pip.pip @@ -4,43 +4,25 @@ # # make upgrade # -distlib==0.3.6 \ - --hash=sha256:14bad2d9b04d3a36127ac97f30b12a19268f211063d8f8ee4f47108896e11b46 \ - --hash=sha256:f35c4b692542ca110de7ef0bea44d73981caeb34ca0b9b6b2e6d7790dda8f80e +distlib==0.3.6 # via virtualenv -filelock==3.10.6 \ - --hash=sha256:409105becd604d6b176a483f855e7e8903c5cb2873e47f2c64f66a370c046aaf \ - --hash=sha256:52f119747b2b9c4730dac715a7b1ab34b8ee70fd9259cba158ee53da566387ff +filelock==3.10.6 # via virtualenv -importlib-metadata==6.1.0 \ - --hash=sha256:43ce9281e097583d758c2c708c4376371261a02c34682491a8e98352365aad20 \ - --hash=sha256:ff80f3b5394912eb1b108fcfd444dc78b7f1f3e16b16188054bd01cb9cb86f09 +importlib-metadata==6.1.0 # via virtualenv -platformdirs==3.2.0 \ - --hash=sha256:d5b638ca397f25f979350ff789db335903d7ea010ab28903f57b27e1b16c2b08 \ - --hash=sha256:ebe11c0d7a805086e99506aa331612429a72ca7cd52a1f0d277dc4adc20cb10e +platformdirs==3.2.0 # via virtualenv -typing-extensions==4.5.0 \ - --hash=sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb \ - --hash=sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4 +typing-extensions==4.5.0 # via # importlib-metadata # platformdirs -virtualenv==20.21.0 \ - --hash=sha256:31712f8f2a17bd06234fa97fdf19609e789dd4e3e4bf108c3da71d710651adbc \ - --hash=sha256:f50e3e60f990a0757c9b68333c9fdaa72d7188caa417f96af9e52407831a3b68 +virtualenv==20.21.0 # via -r requirements/pip.in -zipp==3.15.0 \ - --hash=sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b \ - --hash=sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556 +zipp==3.15.0 # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: -pip==23.0.1 \ - --hash=sha256:236bcb61156d76c4b8a05821b988c7b8c35bf0da28a4b614e8d6ab5212c25c6f \ - --hash=sha256:cd015ea1bfb0fcef59d8a286c1f8bebcb983f6317719d415dc5351efb7cd7024 +pip==23.0.1 # via -r requirements/pip.in -setuptools==65.7.0 \ - --hash=sha256:4d3c92fac8f1118bb77a22181355e29c239cabfe2b9effdaa665c66b711136d7 \ - --hash=sha256:8ab4f1dbf2b4a65f7eec5ad0c620e84c34111a68d3349833494b9088212214dd +setuptools==65.7.0 # via -r requirements/pip.in diff --git a/requirements/pytest.pip b/requirements/pytest.pip index 1f0966f57..2dab77050 100644 --- a/requirements/pytest.pip +++ b/requirements/pytest.pip @@ -4,75 +4,43 @@ # # make upgrade # -attrs==22.2.0 \ - --hash=sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836 \ - --hash=sha256:c9227bfc2f01993c03f68db37d1d15c9690188323c067c641f1a35ca58185f99 +attrs==22.2.0 # via # hypothesis # pytest -colorama==0.4.6 \ - --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \ - --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 +colorama==0.4.6 # via -r requirements/pytest.in -exceptiongroup==1.1.1 \ - --hash=sha256:232c37c63e4f682982c8b6459f33a8981039e5fb8756b2074364e5055c498c9e \ - --hash=sha256:d484c3090ba2889ae2928419117447a14daf3c1231d5e30d0aae34f354f01785 +exceptiongroup==1.1.1 # via # hypothesis # pytest -execnet==1.9.0 \ - --hash=sha256:8f694f3ba9cc92cab508b152dcfe322153975c29bda272e2fd7f3f00f36e47c5 \ - --hash=sha256:a295f7cc774947aac58dde7fdc85f4aa00c42adf5d8f5468fc630c1acf30a142 +execnet==1.9.0 # via pytest-xdist -flaky==3.7.0 \ - --hash=sha256:3ad100780721a1911f57a165809b7ea265a7863305acb66708220820caf8aa0d \ - --hash=sha256:d6eda73cab5ae7364504b7c44670f70abed9e75f77dd116352f662817592ec9c +flaky==3.7.0 # via -r requirements/pytest.in -hypothesis==6.70.0 \ - --hash=sha256:be395f71d6337a5e8ed2f695c568360a686056c3b00c98bd818874c674b24586 \ - --hash=sha256:f5cae09417d0ffc7711f602cdcfa3b7baf344597a672a84658186605b04f4a4f +hypothesis==6.70.0 # via -r requirements/pytest.in -importlib-metadata==6.1.0 \ - --hash=sha256:43ce9281e097583d758c2c708c4376371261a02c34682491a8e98352365aad20 \ - --hash=sha256:ff80f3b5394912eb1b108fcfd444dc78b7f1f3e16b16188054bd01cb9cb86f09 +importlib-metadata==6.1.0 # via # pluggy # pytest -iniconfig==2.0.0 \ - --hash=sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3 \ - --hash=sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374 +iniconfig==2.0.0 # via pytest -packaging==23.0 \ - --hash=sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2 \ - --hash=sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97 +packaging==23.0 # via pytest -pluggy==1.0.0 \ - --hash=sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159 \ - --hash=sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3 +pluggy==1.0.0 # via pytest -pytest==7.2.2 \ - --hash=sha256:130328f552dcfac0b1cec75c12e3f005619dc5f874f0a06e8ff7263f0ee6225e \ - --hash=sha256:c99ab0c73aceb050f68929bc93af19ab6db0558791c6a0715723abe9d0ade9d4 +pytest==7.2.2 # via # -r requirements/pytest.in # pytest-xdist -pytest-xdist==3.2.1 \ - --hash=sha256:1849bd98d8b242b948e472db7478e090bf3361912a8fed87992ed94085f54727 \ - --hash=sha256:37290d161638a20b672401deef1cba812d110ac27e35d213f091d15b8beb40c9 +pytest-xdist==3.2.1 # via -r requirements/pytest.in -sortedcontainers==2.4.0 \ - --hash=sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88 \ - --hash=sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0 +sortedcontainers==2.4.0 # via hypothesis -tomli==2.0.1 \ - --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ - --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f +tomli==2.0.1 # via pytest -typing-extensions==4.5.0 \ - --hash=sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb \ - --hash=sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4 +typing-extensions==4.5.0 # via importlib-metadata -zipp==3.15.0 \ - --hash=sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b \ - --hash=sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556 +zipp==3.15.0 # via importlib-metadata diff --git a/requirements/tox.pip b/requirements/tox.pip index c6888c5de..5e99b982c 100644 --- a/requirements/tox.pip +++ b/requirements/tox.pip @@ -4,85 +4,53 @@ # # make upgrade # -cachetools==5.3.0 \ - --hash=sha256:13dfddc7b8df938c21a940dfa6557ce6e94a2f1cdfa58eb90c805721d58f2c14 \ - --hash=sha256:429e1a1e845c008ea6c85aa35d4b98b65d6a9763eeef3e37e92728a12d1de9d4 +cachetools==5.3.0 # via tox -chardet==5.1.0 \ - --hash=sha256:0d62712b956bc154f85fb0a266e2a3c5913c2967e00348701b32411d6def31e5 \ - --hash=sha256:362777fb014af596ad31334fde1e8c327dfdb076e1960d1694662d46a6917ab9 +chardet==5.1.0 # via tox -colorama==0.4.6 \ - --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \ - --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 +colorama==0.4.6 # via # -r requirements/tox.in # tox -distlib==0.3.6 \ - --hash=sha256:14bad2d9b04d3a36127ac97f30b12a19268f211063d8f8ee4f47108896e11b46 \ - --hash=sha256:f35c4b692542ca110de7ef0bea44d73981caeb34ca0b9b6b2e6d7790dda8f80e +distlib==0.3.6 # via virtualenv -filelock==3.10.6 \ - --hash=sha256:409105becd604d6b176a483f855e7e8903c5cb2873e47f2c64f66a370c046aaf \ - --hash=sha256:52f119747b2b9c4730dac715a7b1ab34b8ee70fd9259cba158ee53da566387ff +filelock==3.10.6 # via # tox # virtualenv -importlib-metadata==6.1.0 \ - --hash=sha256:43ce9281e097583d758c2c708c4376371261a02c34682491a8e98352365aad20 \ - --hash=sha256:ff80f3b5394912eb1b108fcfd444dc78b7f1f3e16b16188054bd01cb9cb86f09 +importlib-metadata==6.1.0 # via # pluggy # tox # virtualenv -packaging==23.0 \ - --hash=sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2 \ - --hash=sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97 +packaging==23.0 # via # pyproject-api # tox -platformdirs==3.2.0 \ - --hash=sha256:d5b638ca397f25f979350ff789db335903d7ea010ab28903f57b27e1b16c2b08 \ - --hash=sha256:ebe11c0d7a805086e99506aa331612429a72ca7cd52a1f0d277dc4adc20cb10e +platformdirs==3.2.0 # via # tox # virtualenv -pluggy==1.0.0 \ - --hash=sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159 \ - --hash=sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3 +pluggy==1.0.0 # via tox -pyproject-api==1.5.1 \ - --hash=sha256:435f46547a9ff22cf4208ee274fca3e2869aeb062a4834adfc99a4dd64af3cf9 \ - --hash=sha256:4698a3777c2e0f6b624f8a4599131e2a25376d90fe8d146d7ac74c67c6f97c43 +pyproject-api==1.5.1 # via tox -tomli==2.0.1 \ - --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ - --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f +tomli==2.0.1 # via # pyproject-api # tox -tox==4.4.7 \ - --hash=sha256:52c92a96e2c3fd47c5301e9c26f5a871466133d5376958c1ed95ef4ff4629cbe \ - --hash=sha256:da10ca1d809b99fae80b706b9dc9656b1daf505a395ac427d130a8a85502d08f +tox==4.4.7 # via # -r requirements/tox.in # tox-gh -tox-gh==1.0.0 \ - --hash=sha256:9cfbaa927946887d53bc19ae86621f4e5dc8516f3771ba4e74daeb1a1775efcd \ - --hash=sha256:bda94ac15dbb62ef1e517672c05f8039faad5afaf9d1b4c9fa32d07f18027571 +tox-gh==1.0.0 # via -r requirements/tox.in -typing-extensions==4.5.0 \ - --hash=sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb \ - --hash=sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4 +typing-extensions==4.5.0 # via # importlib-metadata # platformdirs # tox -virtualenv==20.21.0 \ - --hash=sha256:31712f8f2a17bd06234fa97fdf19609e789dd4e3e4bf108c3da71d710651adbc \ - --hash=sha256:f50e3e60f990a0757c9b68333c9fdaa72d7188caa417f96af9e52407831a3b68 +virtualenv==20.21.0 # via tox -zipp==3.15.0 \ - --hash=sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b \ - --hash=sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556 +zipp==3.15.0 # via importlib-metadata From b03ab92bae24c54f1d5a98baa3af6b9a18de4d36 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Sat, 1 Apr 2023 08:05:37 -0400 Subject: [PATCH 131/139] style: use double-quotes in JavaScript --- coverage/htmlfiles/coverage_html.js | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/coverage/htmlfiles/coverage_html.js b/coverage/htmlfiles/coverage_html.js index 1cd2b5d4c..691a56c38 100644 --- a/coverage/htmlfiles/coverage_html.js +++ b/coverage/htmlfiles/coverage_html.js @@ -219,7 +219,7 @@ coverage.pyfile_ready = function () { // If we're directed to a particular line number, highlight the line. var frag = location.hash; - if (frag.length > 2 && frag[1] === 't') { + if (frag.length > 2 && frag[1] === "t") { document.querySelector(frag).closest(".n").classList.add("highlight"); coverage.set_sel(parseInt(frag.substr(2), 10)); } else { @@ -533,14 +533,14 @@ coverage.scroll_window = function (to_pos) { coverage.init_scroll_markers = function () { // Init some variables - coverage.lines_len = document.querySelectorAll('#source > p').length; + coverage.lines_len = document.querySelectorAll("#source > p").length; // Build html coverage.build_scroll_markers(); }; coverage.build_scroll_markers = function () { - const temp_scroll_marker = document.getElementById('scroll_marker') + const temp_scroll_marker = document.getElementById("scroll_marker") if (temp_scroll_marker) temp_scroll_marker.remove(); // Don't build markers if the window has no scroll bar. if (document.body.scrollHeight <= window.innerHeight) { @@ -554,8 +554,8 @@ coverage.build_scroll_markers = function () { const scroll_marker = document.createElement("div"); scroll_marker.id = "scroll_marker"; - document.getElementById('source').querySelectorAll( - 'p.show_run, p.show_mis, p.show_exc, p.show_exc, p.show_par' + document.getElementById("source").querySelectorAll( + "p.show_run, p.show_mis, p.show_exc, p.show_exc, p.show_par" ).forEach(element => { const line_top = Math.floor(element.offsetTop * marker_scale); const line_number = parseInt(element.querySelector(".n a").id.substr(1)); @@ -582,21 +582,21 @@ coverage.build_scroll_markers = function () { }; coverage.wire_up_sticky_header = function () { - const header = document.querySelector('header'); + const header = document.querySelector("header"); const header_bottom = ( - header.querySelector('.content h2').getBoundingClientRect().top - + header.querySelector(".content h2").getBoundingClientRect().top - header.getBoundingClientRect().top ); function updateHeader() { if (window.scrollY > header_bottom) { - header.classList.add('sticky'); + header.classList.add("sticky"); } else { - header.classList.remove('sticky'); + header.classList.remove("sticky"); } } - window.addEventListener('scroll', updateHeader); + window.addEventListener("scroll", updateHeader); updateHeader(); }; From 80b4794479d723e3596a644481de30cce7dbf7b8 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Sat, 1 Apr 2023 08:07:15 -0400 Subject: [PATCH 132/139] build: update .git-blame-ignore-revs --- .git-blame-ignore-revs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs index ca7baa760..7e1f430d3 100644 --- a/.git-blame-ignore-revs +++ b/.git-blame-ignore-revs @@ -9,3 +9,6 @@ bf6c12f5da54db7c5c0cc47cbf22c70f686e8236 # 2023-03-22 style: use double-quotes 16abd82b6e87753184e8308c4b2606ff3979f8d3 b7be64538aa480fce641349d3053e9a84862d571 + +# 2023-04-01 style: use double-quotes in JavaScript +b03ab92bae24c54f1d5a98baa3af6b9a18de4d36 From b8498bf9c144344fd70cbb6e72c13e65c13b5e48 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Sat, 1 Apr 2023 08:22:48 -0400 Subject: [PATCH 133/139] perf: make the context shortcodes even shorter On the coverage.py metacov, this makes the HTML 5% smaller. --- coverage/html.py | 36 +++++++++++++-- coverage/htmlfiles/coverage_html.js | 34 +++++++------- tests/gold/html/contexts/two_tests_py.html | 28 +++++------ tests/gold/html/support/coverage_html.js | 54 +++++++++++----------- tests/test_html.py | 9 ++++ 5 files changed, 99 insertions(+), 62 deletions(-) diff --git a/coverage/html.py b/coverage/html.py index d1a90ecd6..570760604 100644 --- a/coverage/html.py +++ b/coverage/html.py @@ -7,10 +7,12 @@ import collections import datetime +import functools import json import os import re import shutil +import string # pylint: disable=deprecated-module from dataclasses import dataclass from typing import Any, Dict, Iterable, List, Optional, Tuple, TYPE_CHECKING, cast @@ -187,6 +189,21 @@ def __init__(self, fr: FileReporter, analysis: Analysis) -> None: self.html_filename = self.rootname + ".html" +HTML_SAFE = string.ascii_letters + string.digits + "!#$%'()*+,-./:;=?@[]^_`{|}~" + +@functools.lru_cache(maxsize=None) +def encode_int(n: int) -> str: + """Create a short HTML-safe string from an integer, using HTML_SAFE.""" + if n == 0: + return HTML_SAFE[0] + + r = [] + while n: + n, t = divmod(n, len(HTML_SAFE)) + r.append(HTML_SAFE[t]) + return "".join(r) + + class HtmlReporter: """HTML reporting.""" @@ -373,7 +390,10 @@ def write_html_file(self, ftr: FileToReport, prev_html: str, next_html: str) -> contexts = collections.Counter(c for cline in file_data.lines for c in cline.contexts) context_codes = {y: i for (i, y) in enumerate(x[0] for x in contexts.most_common())} if context_codes: - contexts_json = json.dumps({v: k for (k, v) in context_codes.items()}, indent=2) + contexts_json = json.dumps( + {encode_int(v): k for (k, v) in context_codes.items()}, + indent=2, + ) else: contexts_json = None @@ -387,9 +407,17 @@ def write_html_file(self, ftr: FileToReport, prev_html: str, next_html: str) -> tok_html = escape(tok_text) or " " html_parts.append(f'<span class="{tok_type}">{tok_html}</span>') ldata.html = "".join(html_parts) - ldata.context_str = ",".join( - str(context_codes[c_context]) for c_context in ldata.context_list - ) + if ldata.context_list: + encoded_contexts = [ + encode_int(context_codes[c_context]) for c_context in ldata.context_list + ] + code_width = max(len(ec) for ec in encoded_contexts) + ldata.context_str = ( + str(code_width) + + "".join(ec.ljust(code_width) for ec in encoded_contexts) + ) + else: + ldata.context_str = "" if ldata.short_annotations: # 202F is NARROW NO-BREAK SPACE. diff --git a/coverage/htmlfiles/coverage_html.js b/coverage/htmlfiles/coverage_html.js index 691a56c38..4c321182c 100644 --- a/coverage/htmlfiles/coverage_html.js +++ b/coverage/htmlfiles/coverage_html.js @@ -212,11 +212,6 @@ coverage.index_ready = function () { coverage.LINE_FILTERS_STORAGE = "COVERAGE_LINE_FILTERS"; coverage.pyfile_ready = function () { - cboxes = document.querySelectorAll('[id^=ctxs]') - cboxes.forEach(function(cbox) { - cbox.addEventListener("click", coverage.showContexts) - }); - // If we're directed to a particular line number, highlight the line. var frag = location.hash; if (frag.length > 2 && frag[1] === "t") { @@ -262,6 +257,10 @@ coverage.pyfile_ready = function () { coverage.init_scroll_markers(); coverage.wire_up_sticky_header(); + document.querySelectorAll("[id^=ctxs]").forEach( + cbox => cbox.addEventListener("click", coverage.expand_contexts) + ); + // Rebuild scroll markers when the window height changes. window.addEventListener("resize", coverage.build_scroll_markers); }; @@ -600,17 +599,19 @@ coverage.wire_up_sticky_header = function () { updateHeader(); }; -coverage.showContexts = function (e) { - span = e.target.nextElementSibling.nextElementSibling; - span_text = span.textContent; - - if (/^[0-9,]+$/.test(span_text)) { - span.textContent = ""; - span_text.split(",").forEach(function(s) { - ctx = contexts[s]; - span.appendChild(document.createTextNode(ctx)); - span.appendChild(document.createElement("br")); - }) +coverage.expand_contexts = function (e) { + var ctxs = e.target.parentNode.querySelector(".ctxs"); + + if (!ctxs.classList.contains("expanded")) { + var ctxs_text = ctxs.textContent; + var width = Number(ctxs_text[0]); + ctxs.textContent = ""; + for (var i = 1; i < ctxs_text.length; i += width) { + key = ctxs_text.substring(i, i + width).trim(); + ctxs.appendChild(document.createTextNode(contexts[key])); + ctxs.appendChild(document.createElement("br")); + } + ctxs.classList.add("expanded"); } }; @@ -620,5 +621,4 @@ document.addEventListener("DOMContentLoaded", () => { } else { coverage.pyfile_ready(); } - }); diff --git a/tests/gold/html/contexts/two_tests_py.html b/tests/gold/html/contexts/two_tests_py.html index cbb6e5739..aadc79767 100644 --- a/tests/gold/html/contexts/two_tests_py.html +++ b/tests/gold/html/contexts/two_tests_py.html @@ -7,9 +7,9 @@ <link rel="stylesheet" href="style.css" type="text/css"> <script type="text/javascript"> contexts = { - "0": "(empty)", - "1": "two_tests.test_two", - "2": "two_tests.test_one" + "a": "(empty)", + "b": "two_tests.test_two", + "c": "two_tests.test_one" } </script> <script type="text/javascript" src="coverage_html.js" defer></script> @@ -72,7 +72,7 @@ <h2> <a id="nextFileLink" class="nav" href="index.html">» next</a> <a class="nav" href="https://coverage.readthedocs.io/en/7.2.3a0.dev1">coverage.py v7.2.3a0.dev1</a>, - created at 2023-03-22 13:16 -0400 + created at 2023-04-01 08:30 -0400 </p> <aside class="hidden"> <button type="button" class="button_next_chunk" data-shortcut="j"/> @@ -88,20 +88,20 @@ <h2> </header> <main id="source"> <p class="run"><span class="n"><a id="t1" href="#t1">1</a></span><span class="t"><span class="key">def</span> <span class="nam">helper</span><span class="op">(</span><span class="nam">lineno</span><span class="op">)</span><span class="op">:</span> </span><span class="r"><label for="ctxs1" class="ctx">(empty)</label></span></p> - <p class="run"><span class="n"><a id="t2" href="#t2">2</a></span><span class="t"> <span class="nam">x</span> <span class="op">=</span> <span class="num">2</span> </span><input type="checkbox" id="ctxs2" /><span class="r"><label for="ctxs2" class="ctx">3 ctx</label></span><span class="ctxs">0,2,1</span></p> + <p class="run"><span class="n"><a id="t2" href="#t2">2</a></span><span class="t"> <span class="nam">x</span> <span class="op">=</span> <span class="num">2</span> </span><input type="checkbox" id="ctxs2" /><span class="r"><label for="ctxs2" class="ctx">3 ctx</label></span><span class="ctxs">1acb</span></p> <p class="pln"><span class="n"><a id="t3" href="#t3">3</a></span><span class="t"> </span><span class="r"></span></p> <p class="run"><span class="n"><a id="t4" href="#t4">4</a></span><span class="t"><span class="key">def</span> <span class="nam">test_one</span><span class="op">(</span><span class="op">)</span><span class="op">:</span> </span><span class="r"><label for="ctxs4" class="ctx">(empty)</label></span></p> - <p class="run"><span class="n"><a id="t5" href="#t5">5</a></span><span class="t"> <span class="nam">a</span> <span class="op">=</span> <span class="num">5</span> </span><input type="checkbox" id="ctxs5" /><span class="r"><label for="ctxs5" class="ctx">1 ctx</label></span><span class="ctxs">2</span></p> - <p class="run"><span class="n"><a id="t6" href="#t6">6</a></span><span class="t"> <span class="nam">helper</span><span class="op">(</span><span class="num">6</span><span class="op">)</span> </span><input type="checkbox" id="ctxs6" /><span class="r"><label for="ctxs6" class="ctx">1 ctx</label></span><span class="ctxs">2</span></p> + <p class="run"><span class="n"><a id="t5" href="#t5">5</a></span><span class="t"> <span class="nam">a</span> <span class="op">=</span> <span class="num">5</span> </span><input type="checkbox" id="ctxs5" /><span class="r"><label for="ctxs5" class="ctx">1 ctx</label></span><span class="ctxs">1c</span></p> + <p class="run"><span class="n"><a id="t6" href="#t6">6</a></span><span class="t"> <span class="nam">helper</span><span class="op">(</span><span class="num">6</span><span class="op">)</span> </span><input type="checkbox" id="ctxs6" /><span class="r"><label for="ctxs6" class="ctx">1 ctx</label></span><span class="ctxs">1c</span></p> <p class="pln"><span class="n"><a id="t7" href="#t7">7</a></span><span class="t"> </span><span class="r"></span></p> <p class="run"><span class="n"><a id="t8" href="#t8">8</a></span><span class="t"><span class="key">def</span> <span class="nam">test_two</span><span class="op">(</span><span class="op">)</span><span class="op">:</span> </span><span class="r"><label for="ctxs8" class="ctx">(empty)</label></span></p> - <p class="run"><span class="n"><a id="t9" href="#t9">9</a></span><span class="t"> <span class="nam">a</span> <span class="op">=</span> <span class="num">9</span> </span><input type="checkbox" id="ctxs9" /><span class="r"><label for="ctxs9" class="ctx">1 ctx</label></span><span class="ctxs">1</span></p> - <p class="run"><span class="n"><a id="t10" href="#t10">10</a></span><span class="t"> <span class="nam">b</span> <span class="op">=</span> <span class="num">10</span> </span><input type="checkbox" id="ctxs10" /><span class="r"><label for="ctxs10" class="ctx">1 ctx</label></span><span class="ctxs">1</span></p> - <p class="run"><span class="n"><a id="t11" href="#t11">11</a></span><span class="t"> <span class="key">if</span> <span class="nam">a</span> <span class="op">></span> <span class="num">11</span><span class="op">:</span> </span><input type="checkbox" id="ctxs11" /><span class="r"><label for="ctxs11" class="ctx">1 ctx</label></span><span class="ctxs">1</span></p> + <p class="run"><span class="n"><a id="t9" href="#t9">9</a></span><span class="t"> <span class="nam">a</span> <span class="op">=</span> <span class="num">9</span> </span><input type="checkbox" id="ctxs9" /><span class="r"><label for="ctxs9" class="ctx">1 ctx</label></span><span class="ctxs">1b</span></p> + <p class="run"><span class="n"><a id="t10" href="#t10">10</a></span><span class="t"> <span class="nam">b</span> <span class="op">=</span> <span class="num">10</span> </span><input type="checkbox" id="ctxs10" /><span class="r"><label for="ctxs10" class="ctx">1 ctx</label></span><span class="ctxs">1b</span></p> + <p class="run"><span class="n"><a id="t11" href="#t11">11</a></span><span class="t"> <span class="key">if</span> <span class="nam">a</span> <span class="op">></span> <span class="num">11</span><span class="op">:</span> </span><input type="checkbox" id="ctxs11" /><span class="r"><label for="ctxs11" class="ctx">1 ctx</label></span><span class="ctxs">1b</span></p> <p class="mis show_mis"><span class="n"><a id="t12" href="#t12">12</a></span><span class="t"> <span class="nam">b</span> <span class="op">=</span> <span class="num">12</span> </span><span class="r"></span></p> - <p class="run"><span class="n"><a id="t13" href="#t13">13</a></span><span class="t"> <span class="key">assert</span> <span class="nam">a</span> <span class="op">==</span> <span class="op">(</span><span class="num">13</span><span class="op">-</span><span class="num">4</span><span class="op">)</span> </span><input type="checkbox" id="ctxs13" /><span class="r"><label for="ctxs13" class="ctx">1 ctx</label></span><span class="ctxs">1</span></p> - <p class="run"><span class="n"><a id="t14" href="#t14">14</a></span><span class="t"> <span class="key">assert</span> <span class="nam">b</span> <span class="op">==</span> <span class="op">(</span><span class="num">14</span><span class="op">-</span><span class="num">4</span><span class="op">)</span> </span><input type="checkbox" id="ctxs14" /><span class="r"><label for="ctxs14" class="ctx">1 ctx</label></span><span class="ctxs">1</span></p> - <p class="run"><span class="n"><a id="t15" href="#t15">15</a></span><span class="t"> <span class="nam">helper</span><span class="op">(</span> </span><input type="checkbox" id="ctxs15" /><span class="r"><label for="ctxs15" class="ctx">1 ctx</label></span><span class="ctxs">1</span></p> + <p class="run"><span class="n"><a id="t13" href="#t13">13</a></span><span class="t"> <span class="key">assert</span> <span class="nam">a</span> <span class="op">==</span> <span class="op">(</span><span class="num">13</span><span class="op">-</span><span class="num">4</span><span class="op">)</span> </span><input type="checkbox" id="ctxs13" /><span class="r"><label for="ctxs13" class="ctx">1 ctx</label></span><span class="ctxs">1b</span></p> + <p class="run"><span class="n"><a id="t14" href="#t14">14</a></span><span class="t"> <span class="key">assert</span> <span class="nam">b</span> <span class="op">==</span> <span class="op">(</span><span class="num">14</span><span class="op">-</span><span class="num">4</span><span class="op">)</span> </span><input type="checkbox" id="ctxs14" /><span class="r"><label for="ctxs14" class="ctx">1 ctx</label></span><span class="ctxs">1b</span></p> + <p class="run"><span class="n"><a id="t15" href="#t15">15</a></span><span class="t"> <span class="nam">helper</span><span class="op">(</span> </span><input type="checkbox" id="ctxs15" /><span class="r"><label for="ctxs15" class="ctx">1 ctx</label></span><span class="ctxs">1b</span></p> <p class="pln"><span class="n"><a id="t16" href="#t16">16</a></span><span class="t"> <span class="num">16</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t17" href="#t17">17</a></span><span class="t"> <span class="op">)</span> </span><span class="r"></span></p> <p class="pln"><span class="n"><a id="t18" href="#t18">18</a></span><span class="t"> </span><span class="r"></span></p> @@ -118,7 +118,7 @@ <h2> <a id="nextFileLink" class="nav" href="index.html">» next</a> <a class="nav" href="https://coverage.readthedocs.io/en/7.2.3a0.dev1">coverage.py v7.2.3a0.dev1</a>, - created at 2023-03-22 13:16 -0400 + created at 2023-04-01 08:30 -0400 </p> </div> </footer> diff --git a/tests/gold/html/support/coverage_html.js b/tests/gold/html/support/coverage_html.js index 1cd2b5d4c..4c321182c 100644 --- a/tests/gold/html/support/coverage_html.js +++ b/tests/gold/html/support/coverage_html.js @@ -212,14 +212,9 @@ coverage.index_ready = function () { coverage.LINE_FILTERS_STORAGE = "COVERAGE_LINE_FILTERS"; coverage.pyfile_ready = function () { - cboxes = document.querySelectorAll('[id^=ctxs]') - cboxes.forEach(function(cbox) { - cbox.addEventListener("click", coverage.showContexts) - }); - // If we're directed to a particular line number, highlight the line. var frag = location.hash; - if (frag.length > 2 && frag[1] === 't') { + if (frag.length > 2 && frag[1] === "t") { document.querySelector(frag).closest(".n").classList.add("highlight"); coverage.set_sel(parseInt(frag.substr(2), 10)); } else { @@ -262,6 +257,10 @@ coverage.pyfile_ready = function () { coverage.init_scroll_markers(); coverage.wire_up_sticky_header(); + document.querySelectorAll("[id^=ctxs]").forEach( + cbox => cbox.addEventListener("click", coverage.expand_contexts) + ); + // Rebuild scroll markers when the window height changes. window.addEventListener("resize", coverage.build_scroll_markers); }; @@ -533,14 +532,14 @@ coverage.scroll_window = function (to_pos) { coverage.init_scroll_markers = function () { // Init some variables - coverage.lines_len = document.querySelectorAll('#source > p').length; + coverage.lines_len = document.querySelectorAll("#source > p").length; // Build html coverage.build_scroll_markers(); }; coverage.build_scroll_markers = function () { - const temp_scroll_marker = document.getElementById('scroll_marker') + const temp_scroll_marker = document.getElementById("scroll_marker") if (temp_scroll_marker) temp_scroll_marker.remove(); // Don't build markers if the window has no scroll bar. if (document.body.scrollHeight <= window.innerHeight) { @@ -554,8 +553,8 @@ coverage.build_scroll_markers = function () { const scroll_marker = document.createElement("div"); scroll_marker.id = "scroll_marker"; - document.getElementById('source').querySelectorAll( - 'p.show_run, p.show_mis, p.show_exc, p.show_exc, p.show_par' + document.getElementById("source").querySelectorAll( + "p.show_run, p.show_mis, p.show_exc, p.show_exc, p.show_par" ).forEach(element => { const line_top = Math.floor(element.offsetTop * marker_scale); const line_number = parseInt(element.querySelector(".n a").id.substr(1)); @@ -582,35 +581,37 @@ coverage.build_scroll_markers = function () { }; coverage.wire_up_sticky_header = function () { - const header = document.querySelector('header'); + const header = document.querySelector("header"); const header_bottom = ( - header.querySelector('.content h2').getBoundingClientRect().top - + header.querySelector(".content h2").getBoundingClientRect().top - header.getBoundingClientRect().top ); function updateHeader() { if (window.scrollY > header_bottom) { - header.classList.add('sticky'); + header.classList.add("sticky"); } else { - header.classList.remove('sticky'); + header.classList.remove("sticky"); } } - window.addEventListener('scroll', updateHeader); + window.addEventListener("scroll", updateHeader); updateHeader(); }; -coverage.showContexts = function (e) { - span = e.target.nextElementSibling.nextElementSibling; - span_text = span.textContent; - - if (/^[0-9,]+$/.test(span_text)) { - span.textContent = ""; - span_text.split(",").forEach(function(s) { - ctx = contexts[s]; - span.appendChild(document.createTextNode(ctx)); - span.appendChild(document.createElement("br")); - }) +coverage.expand_contexts = function (e) { + var ctxs = e.target.parentNode.querySelector(".ctxs"); + + if (!ctxs.classList.contains("expanded")) { + var ctxs_text = ctxs.textContent; + var width = Number(ctxs_text[0]); + ctxs.textContent = ""; + for (var i = 1; i < ctxs_text.length; i += width) { + key = ctxs_text.substring(i, i + width).trim(); + ctxs.appendChild(document.createTextNode(contexts[key])); + ctxs.appendChild(document.createElement("br")); + } + ctxs.classList.add("expanded"); } }; @@ -620,5 +621,4 @@ document.addEventListener("DOMContentLoaded", () => { } else { coverage.pyfile_ready(); } - }); diff --git a/tests/test_html.py b/tests/test_html.py index 89ad8d1c2..65f0cc763 100644 --- a/tests/test_html.py +++ b/tests/test_html.py @@ -1260,3 +1260,12 @@ def test_bad_anchor(self) -> None: msg = "Fragment '#nothing' in htmlcov.index.html has no anchor" with pytest.raises(AssertionError, match=msg): self.assert_valid_hrefs() + + +@pytest.mark.parametrize("n, key", [ + (0, "a"), + (1, "b"), + (999999999, "e9S_p"), +]) +def test_encode_int(n: int, key: str) -> None: + assert coverage.html.encode_int(n) == key From acd1e0310b32deb55cff221da172ce91c70c8794 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Sat, 1 Apr 2023 08:47:26 -0400 Subject: [PATCH 134/139] docs: more tweaking of the gold-file instructions --- tests/gold/README.rst | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/tests/gold/README.rst b/tests/gold/README.rst index ec4081825..c90c9eece 100644 --- a/tests/gold/README.rst +++ b/tests/gold/README.rst @@ -12,9 +12,22 @@ current output of the tests into the gold files. When a test fails, the actual output is in the tests/actual directory. Those files are ignored by git. There's a Makefile in the html directory for working with gold files and their -associated support files. If actual outputs have changed so that comparisons -are failing, but the new output is correct, you can use "make update-gold" to -copy the actual output as the new gold files. +associated support files. + +To view the tests/actual files, you need to tentatively copy them to the gold +directories, and then add the supporting files so they can be viewed as +complete output. For example:: + + cp tests/actual/html/contexts/* tests/gold/html/contexts + cd tests/actual/html + make complete + +If the new actual output is correct, you can use "make update-gold" to copy the +actual output as the new gold files. + +If you have changed some of the supporting files (.css or .js), then "make +update-support" will copy the updated files to the tests/gold/html/support +directory for checking test output. If you have added a gold test, you'll need to manually copy the tests/actual files to tests/gold. @@ -27,8 +40,9 @@ again, you can run just the failed tests again with:: The saved HTML files in the html directories can't be viewed properly without the supporting CSS and Javascript files. But we don't want to save copies of those files in every subdirectory. The make target "make complete" in -tests/gold/html will copy the support file so you can open the HTML files to -see how they look. +tests/gold/html will copy the support files so you can open the HTML files to +see how they look. When you are done checking the output, you can use "make +clean" to remove the support files from the gold directories. If the output files are correct, you can update the gold files with "make update-gold". If there are version-specific gold files (for example, From 3bc7d2ccdde692e6a5b968bb750751acc54b82a5 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Mon, 3 Apr 2023 05:30:36 -0400 Subject: [PATCH 135/139] chore: make upgrade --- doc/requirements.pip | 2 +- requirements/dev.pip | 12 ++++++------ requirements/kit.pip | 2 +- requirements/lint.pip | 14 +++++++------- requirements/mypy.pip | 2 +- requirements/pip.pip | 2 +- requirements/pytest.pip | 2 +- requirements/tox.pip | 4 ++-- 8 files changed, 20 insertions(+), 20 deletions(-) diff --git a/doc/requirements.pip b/doc/requirements.pip index f4183e645..b13fedcd8 100644 --- a/doc/requirements.pip +++ b/doc/requirements.pip @@ -53,7 +53,7 @@ pyenchant==3.2.2 # sphinxcontrib-spelling pygments==2.14.0 # via sphinx -pytz==2023.2 +pytz==2023.3 # via babel requests==2.28.2 # via diff --git a/requirements/dev.pip b/requirements/dev.pip index 7bc7bfc4a..76304efc0 100644 --- a/requirements/dev.pip +++ b/requirements/dev.pip @@ -4,7 +4,7 @@ # # make upgrade # -astroid==2.15.0 +astroid==2.15.1 # via pylint attrs==22.2.0 # via @@ -43,7 +43,7 @@ exceptiongroup==1.1.1 # pytest execnet==1.9.0 # via pytest-xdist -filelock==3.10.6 +filelock==3.10.7 # via # tox # virtualenv @@ -51,7 +51,7 @@ flaky==3.7.0 # via -r requirements/pytest.in greenlet==2.0.2 # via -r requirements/dev.in -hypothesis==6.70.0 +hypothesis==6.70.2 # via -r requirements/pytest.in idna==3.4 # via requests @@ -140,7 +140,7 @@ requests-toolbelt==0.10.1 # via twine rfc3986==2.0.0 # via twine -rich==13.3.2 +rich==13.3.3 # via twine six==1.16.0 # via bleach @@ -155,9 +155,9 @@ tomli==2.0.1 # pyproject-hooks # pytest # tox -tomlkit==0.11.6 +tomlkit==0.11.7 # via pylint -tox==4.4.7 +tox==4.4.8 # via # -r requirements/tox.in # tox-gh diff --git a/requirements/kit.pip b/requirements/kit.pip index 4f3fb0374..a126aa357 100644 --- a/requirements/kit.pip +++ b/requirements/kit.pip @@ -18,7 +18,7 @@ cibuildwheel==2.12.1 # via -r requirements/kit.in colorama==0.4.6 # via -r requirements/kit.in -filelock==3.10.6 +filelock==3.10.7 # via cibuildwheel importlib-metadata==6.1.0 # via diff --git a/requirements/lint.pip b/requirements/lint.pip index 3defa58b2..af91931e1 100644 --- a/requirements/lint.pip +++ b/requirements/lint.pip @@ -6,7 +6,7 @@ # alabaster==0.7.13 # via sphinx -astroid==2.15.0 +astroid==2.15.1 # via pylint attrs==22.2.0 # via @@ -60,7 +60,7 @@ exceptiongroup==1.1.1 # pytest execnet==1.9.0 # via pytest-xdist -filelock==3.10.6 +filelock==3.10.7 # via # tox # virtualenv @@ -68,7 +68,7 @@ flaky==3.7.0 # via -r requirements/pytest.in greenlet==2.0.2 # via -r requirements/dev.in -hypothesis==6.70.0 +hypothesis==6.70.2 # via -r requirements/pytest.in idna==3.4 # via requests @@ -163,7 +163,7 @@ pytest==7.2.2 # pytest-xdist pytest-xdist==3.2.1 # via -r requirements/pytest.in -pytz==2023.2 +pytz==2023.3 # via babel readme-renderer==37.3 # via @@ -180,7 +180,7 @@ requests-toolbelt==0.10.1 # via twine rfc3986==2.0.0 # via twine -rich==13.3.2 +rich==13.3.3 # via twine scriv==1.2.1 # via -r doc/requirements.in @@ -231,11 +231,11 @@ tomli==2.0.1 # pyproject-hooks # pytest # tox -tomlkit==0.11.6 +tomlkit==0.11.7 # via pylint tornado==6.2 # via livereload -tox==4.4.7 +tox==4.4.8 # via # -r requirements/tox.in # tox-gh diff --git a/requirements/mypy.pip b/requirements/mypy.pip index 16205eeb3..ae1bbd97b 100644 --- a/requirements/mypy.pip +++ b/requirements/mypy.pip @@ -18,7 +18,7 @@ execnet==1.9.0 # via pytest-xdist flaky==3.7.0 # via -r requirements/pytest.in -hypothesis==6.70.0 +hypothesis==6.70.2 # via -r requirements/pytest.in importlib-metadata==6.1.0 # via diff --git a/requirements/pip.pip b/requirements/pip.pip index 1bf54a3d0..927943a5e 100644 --- a/requirements/pip.pip +++ b/requirements/pip.pip @@ -6,7 +6,7 @@ # distlib==0.3.6 # via virtualenv -filelock==3.10.6 +filelock==3.10.7 # via virtualenv importlib-metadata==6.1.0 # via virtualenv diff --git a/requirements/pytest.pip b/requirements/pytest.pip index 2dab77050..478860a97 100644 --- a/requirements/pytest.pip +++ b/requirements/pytest.pip @@ -18,7 +18,7 @@ execnet==1.9.0 # via pytest-xdist flaky==3.7.0 # via -r requirements/pytest.in -hypothesis==6.70.0 +hypothesis==6.70.2 # via -r requirements/pytest.in importlib-metadata==6.1.0 # via diff --git a/requirements/tox.pip b/requirements/tox.pip index 5e99b982c..c02835cbb 100644 --- a/requirements/tox.pip +++ b/requirements/tox.pip @@ -14,7 +14,7 @@ colorama==0.4.6 # tox distlib==0.3.6 # via virtualenv -filelock==3.10.6 +filelock==3.10.7 # via # tox # virtualenv @@ -39,7 +39,7 @@ tomli==2.0.1 # via # pyproject-api # tox -tox==4.4.7 +tox==4.4.8 # via # -r requirements/tox.in # tox-gh From f27c9ca775173d32bf71aeca9075c70f893b6542 Mon Sep 17 00:00:00 2001 From: Lewis Gaul <lewis.gaul@gmail.com> Date: Thu, 6 Apr 2023 11:58:16 +0100 Subject: [PATCH 136/139] fix: save coverage data on SIGTERM (#1600) * Add test that reproduces the issue * Suggested fix - always save data in sigterm exit flow * Address test failures on MacOS due to lack of 'Terminated' output on SIGTERM --- coverage/control.py | 2 +- tests/test_concurrency.py | 27 ++++++++++++++++++++++++++- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/coverage/control.py b/coverage/control.py index acce622d3..e405a5bf4 100644 --- a/coverage/control.py +++ b/coverage/control.py @@ -653,7 +653,7 @@ def _atexit(self, event: str = "atexit") -> None: self._debug.write(f"{event}: pid: {os.getpid()}, instance: {self!r}") if self._started: self.stop() - if self._auto_save: + if self._auto_save or event == "sigterm": self.save() def _on_sigterm(self, signum_unused: int, frame_unused: Optional[FrameType]) -> None: diff --git a/tests/test_concurrency.py b/tests/test_concurrency.py index 9f12e77ec..a9b64d158 100644 --- a/tests/test_concurrency.py +++ b/tests/test_concurrency.py @@ -705,7 +705,7 @@ class SigtermTest(CoverageTest): """Tests of our handling of SIGTERM.""" @pytest.mark.parametrize("sigterm", [False, True]) - def test_sigterm_saves_data(self, sigterm: bool) -> None: + def test_sigterm_multiprocessing_saves_data(self, sigterm: bool) -> None: # A terminated process should save its coverage data. self.make_file("clobbered.py", """\ import multiprocessing @@ -751,6 +751,31 @@ def subproc(x): expected = "clobbered.py 17 5 71% 5-10" assert self.squeezed_lines(out)[2] == expected + def test_sigterm_threading_saves_data(self) -> None: + # A terminated process should save its coverage data. + self.make_file("handler.py", """\ + import os, signal + + print("START", flush=True) + print("SIGTERM", flush=True) + os.kill(os.getpid(), signal.SIGTERM) + print("NOT HERE", flush=True) + """) + self.make_file(".coveragerc", """\ + [run] + # The default concurrency option. + concurrency = thread + sigterm = true + """) + out = self.run_command("coverage run handler.py") + if env.LINUX: + assert out == "START\nSIGTERM\nTerminated\n" + else: + assert out == "START\nSIGTERM\n" + out = self.run_command("coverage report -m") + expected = "handler.py 5 1 80% 6" + assert self.squeezed_lines(out)[2] == expected + def test_sigterm_still_runs(self) -> None: # A terminated process still runs its own SIGTERM handler. self.make_file("handler.py", """\ From 6d5c4d46648f1a2e5f12059def123c6f29fdd7b2 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Thu, 6 Apr 2023 07:03:02 -0400 Subject: [PATCH 137/139] docs: add the fix for #1599, thanks Lewis Gaul --- CHANGES.rst | 6 ++++++ CONTRIBUTORS.txt | 1 + 2 files changed, 7 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index c7aca9073..a403de3a2 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -20,6 +20,10 @@ development at the same time, such as 4.5.x and 5.0. Unreleased ---------- +- Fix: the :ref:`config_run_sigterm` setting was meant to capture data if a + process was terminated with a SIGTERM signal, but it didn't always. This was + fixed thanks to `Lewis Gaul <pull 1600_>`_, closing `issue 1599`_. + - Performance: HTML reports with context information are now much more compact. File sizes are typically as small as one-third the previous size, but can be dramatically smaller. This closes `issue 1584`_ thanks to `Oleh Krehel @@ -30,6 +34,8 @@ Unreleased .. _issue 1584: https://github.com/nedbat/coveragepy/issues/1584 .. _pull 1587: https://github.com/nedbat/coveragepy/pull/1587 .. _issue 1592: https://github.com/nedbat/coveragepy/issues/1592 +.. _issue 1599: https://github.com/nedbat/coveragepy/issues/1599 +.. _pull 1600: https://github.com/nedbat/coveragepy/pull/1600 .. scriv-start-here diff --git a/CONTRIBUTORS.txt b/CONTRIBUTORS.txt index a35dcfd0c..0ba35f628 100644 --- a/CONTRIBUTORS.txt +++ b/CONTRIBUTORS.txt @@ -105,6 +105,7 @@ Krystian Kichewko Kyle Altendorf Lars Hupfeldt Nielsen Leonardo Pistone +Lewis Gaul Lex Berezhny Loïc Dachary Lorenzo Micò From 8cb979b406d5c39a74f861f85076cf2d00ecddf9 Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Thu, 6 Apr 2023 08:41:52 -0400 Subject: [PATCH 138/139] docs: prep for 7.2.3 --- CHANGES.rst | 10 ++++++---- Makefile | 2 +- README.rst | 2 +- coverage/version.py | 4 ++-- doc/conf.py | 6 +++--- doc/index.rst | 2 +- 6 files changed, 14 insertions(+), 12 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index a403de3a2..937835ccc 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -17,8 +17,12 @@ development at the same time, such as 4.5.x and 5.0. .. Version 9.8.1 — 2027-07-27 .. -------------------------- -Unreleased ----------- +.. scriv-start-here + +.. _changes_7-2-3: + +Version 7.2.3 — 2023-04-06 +-------------------------- - Fix: the :ref:`config_run_sigterm` setting was meant to capture data if a process was terminated with a SIGTERM signal, but it didn't always. This was @@ -38,8 +42,6 @@ Unreleased .. _pull 1600: https://github.com/nedbat/coveragepy/pull/1600 -.. scriv-start-here - .. _changes_7-2-2: Version 7.2.2 — 2023-03-16 diff --git a/Makefile b/Makefile index ca33e6f8d..f82f2ee27 100644 --- a/Makefile +++ b/Makefile @@ -164,7 +164,7 @@ cheats: ## Create some useful snippets for releasing. python igor.py cheats | tee cheats.txt relbranch: ## Create the branch for releasing. - echo git switch -c nedbat/release-$$(date +%Y%m%d) + git switch -c nedbat/release-$$(date +%Y%m%d) relcommit1: ## Commit the first release changes. git commit -am "docs: prep for $$(python setup.py --version)" diff --git a/README.rst b/README.rst index 8e3ffd940..897f8801d 100644 --- a/README.rst +++ b/README.rst @@ -28,7 +28,7 @@ Coverage.py runs on these versions of Python: .. PYVERSIONS -* CPython 3.7 through 3.12.0a6 +* CPython 3.7 through 3.12.0a7 * PyPy3 7.3.11. Documentation is on `Read the Docs`_. Code repository and issue tracker are on diff --git a/coverage/version.py b/coverage/version.py index 3a27a388f..9cf7d9d19 100644 --- a/coverage/version.py +++ b/coverage/version.py @@ -8,8 +8,8 @@ # version_info: same semantics as sys.version_info. # _dev: the .devN suffix if any. -version_info = (7, 2, 3, "alpha", 0) -_dev = 1 +version_info = (7, 2, 3, "final", 0) +_dev = 0 def _make_version( diff --git a/doc/conf.py b/doc/conf.py index 92eb97997..f6310b577 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -66,11 +66,11 @@ # @@@ editable copyright = "2009–2023, Ned Batchelder" # pylint: disable=redefined-builtin # The short X.Y.Z version. -version = "7.2.2" +version = "7.2.3" # The full version, including alpha/beta/rc tags. -release = "7.2.2" +release = "7.2.3" # The date of release, in "monthname day, year" format. -release_date = "March 16, 2023" +release_date = "April 6, 2023" # @@@ end rst_epilog = """ diff --git a/doc/index.rst b/doc/index.rst index e5ac5a0ae..b11dc90e9 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -18,7 +18,7 @@ supported on: .. PYVERSIONS -* Python versions 3.7 through 3.12.0a6. +* Python versions 3.7 through 3.12.0a7. * PyPy3 7.3.11. .. ifconfig:: prerelease From 6297f19f8744ef8fc9b93a2f70d06ca0e3b8908c Mon Sep 17 00:00:00 2001 From: Ned Batchelder <ned@nedbatchelder.com> Date: Thu, 6 Apr 2023 08:42:26 -0400 Subject: [PATCH 139/139] docs: sample HTML for 7.2.3 --- doc/sample_html/coverage_html.js | 40 ++++++++++++++----- .../d_7b071bdc2a35fa80___init___py.html | 8 ++-- .../d_7b071bdc2a35fa80___main___py.html | 8 ++-- .../d_7b071bdc2a35fa80_cogapp_py.html | 8 ++-- .../d_7b071bdc2a35fa80_makefiles_py.html | 8 ++-- .../d_7b071bdc2a35fa80_test_cogapp_py.html | 8 ++-- .../d_7b071bdc2a35fa80_test_makefiles_py.html | 8 ++-- ...d_7b071bdc2a35fa80_test_whiteutils_py.html | 8 ++-- .../d_7b071bdc2a35fa80_whiteutils_py.html | 8 ++-- doc/sample_html/index.html | 8 ++-- doc/sample_html/status.json | 2 +- doc/sample_html/style.css | 4 +- 12 files changed, 68 insertions(+), 50 deletions(-) diff --git a/doc/sample_html/coverage_html.js b/doc/sample_html/coverage_html.js index 1c4eb9881..4c321182c 100644 --- a/doc/sample_html/coverage_html.js +++ b/doc/sample_html/coverage_html.js @@ -214,7 +214,7 @@ coverage.LINE_FILTERS_STORAGE = "COVERAGE_LINE_FILTERS"; coverage.pyfile_ready = function () { // If we're directed to a particular line number, highlight the line. var frag = location.hash; - if (frag.length > 2 && frag[1] === 't') { + if (frag.length > 2 && frag[1] === "t") { document.querySelector(frag).closest(".n").classList.add("highlight"); coverage.set_sel(parseInt(frag.substr(2), 10)); } else { @@ -257,6 +257,10 @@ coverage.pyfile_ready = function () { coverage.init_scroll_markers(); coverage.wire_up_sticky_header(); + document.querySelectorAll("[id^=ctxs]").forEach( + cbox => cbox.addEventListener("click", coverage.expand_contexts) + ); + // Rebuild scroll markers when the window height changes. window.addEventListener("resize", coverage.build_scroll_markers); }; @@ -528,14 +532,14 @@ coverage.scroll_window = function (to_pos) { coverage.init_scroll_markers = function () { // Init some variables - coverage.lines_len = document.querySelectorAll('#source > p').length; + coverage.lines_len = document.querySelectorAll("#source > p").length; // Build html coverage.build_scroll_markers(); }; coverage.build_scroll_markers = function () { - const temp_scroll_marker = document.getElementById('scroll_marker') + const temp_scroll_marker = document.getElementById("scroll_marker") if (temp_scroll_marker) temp_scroll_marker.remove(); // Don't build markers if the window has no scroll bar. if (document.body.scrollHeight <= window.innerHeight) { @@ -549,8 +553,8 @@ coverage.build_scroll_markers = function () { const scroll_marker = document.createElement("div"); scroll_marker.id = "scroll_marker"; - document.getElementById('source').querySelectorAll( - 'p.show_run, p.show_mis, p.show_exc, p.show_exc, p.show_par' + document.getElementById("source").querySelectorAll( + "p.show_run, p.show_mis, p.show_exc, p.show_exc, p.show_par" ).forEach(element => { const line_top = Math.floor(element.offsetTop * marker_scale); const line_number = parseInt(element.querySelector(".n a").id.substr(1)); @@ -577,24 +581,40 @@ coverage.build_scroll_markers = function () { }; coverage.wire_up_sticky_header = function () { - const header = document.querySelector('header'); + const header = document.querySelector("header"); const header_bottom = ( - header.querySelector('.content h2').getBoundingClientRect().top - + header.querySelector(".content h2").getBoundingClientRect().top - header.getBoundingClientRect().top ); function updateHeader() { if (window.scrollY > header_bottom) { - header.classList.add('sticky'); + header.classList.add("sticky"); } else { - header.classList.remove('sticky'); + header.classList.remove("sticky"); } } - window.addEventListener('scroll', updateHeader); + window.addEventListener("scroll", updateHeader); updateHeader(); }; +coverage.expand_contexts = function (e) { + var ctxs = e.target.parentNode.querySelector(".ctxs"); + + if (!ctxs.classList.contains("expanded")) { + var ctxs_text = ctxs.textContent; + var width = Number(ctxs_text[0]); + ctxs.textContent = ""; + for (var i = 1; i < ctxs_text.length; i += width) { + key = ctxs_text.substring(i, i + width).trim(); + ctxs.appendChild(document.createTextNode(contexts[key])); + ctxs.appendChild(document.createElement("br")); + } + ctxs.classList.add("expanded"); + } +}; + document.addEventListener("DOMContentLoaded", () => { if (document.body.classList.contains("indexfile")) { coverage.index_ready(); diff --git a/doc/sample_html/d_7b071bdc2a35fa80___init___py.html b/doc/sample_html/d_7b071bdc2a35fa80___init___py.html index dce7d87cb..a15b8decf 100644 --- a/doc/sample_html/d_7b071bdc2a35fa80___init___py.html +++ b/doc/sample_html/d_7b071bdc2a35fa80___init___py.html @@ -66,8 +66,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80___main___py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io/en/7.2.2">coverage.py v7.2.2</a>, - created at 2023-03-16 07:52 -0400 + <a class="nav" href="https://coverage.readthedocs.io/en/7.2.3">coverage.py v7.2.3</a>, + created at 2023-04-06 08:42 -0400 </p> <aside class="hidden"> <button type="button" class="button_next_chunk" data-shortcut="j"/> @@ -97,8 +97,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80___main___py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io/en/7.2.2">coverage.py v7.2.2</a>, - created at 2023-03-16 07:52 -0400 + <a class="nav" href="https://coverage.readthedocs.io/en/7.2.3">coverage.py v7.2.3</a>, + created at 2023-04-06 08:42 -0400 </p> </div> </footer> diff --git a/doc/sample_html/d_7b071bdc2a35fa80___main___py.html b/doc/sample_html/d_7b071bdc2a35fa80___main___py.html index 3ed5da113..7ea66a94b 100644 --- a/doc/sample_html/d_7b071bdc2a35fa80___main___py.html +++ b/doc/sample_html/d_7b071bdc2a35fa80___main___py.html @@ -66,8 +66,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80_cogapp_py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io/en/7.2.2">coverage.py v7.2.2</a>, - created at 2023-03-16 07:52 -0400 + <a class="nav" href="https://coverage.readthedocs.io/en/7.2.3">coverage.py v7.2.3</a>, + created at 2023-04-06 08:42 -0400 </p> <aside class="hidden"> <button type="button" class="button_next_chunk" data-shortcut="j"/> @@ -97,8 +97,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80_cogapp_py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io/en/7.2.2">coverage.py v7.2.2</a>, - created at 2023-03-16 07:52 -0400 + <a class="nav" href="https://coverage.readthedocs.io/en/7.2.3">coverage.py v7.2.3</a>, + created at 2023-04-06 08:42 -0400 </p> </div> </footer> diff --git a/doc/sample_html/d_7b071bdc2a35fa80_cogapp_py.html b/doc/sample_html/d_7b071bdc2a35fa80_cogapp_py.html index 7d54ec112..87112dbf9 100644 --- a/doc/sample_html/d_7b071bdc2a35fa80_cogapp_py.html +++ b/doc/sample_html/d_7b071bdc2a35fa80_cogapp_py.html @@ -66,8 +66,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80_makefiles_py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io/en/7.2.2">coverage.py v7.2.2</a>, - created at 2023-03-16 07:52 -0400 + <a class="nav" href="https://coverage.readthedocs.io/en/7.2.3">coverage.py v7.2.3</a>, + created at 2023-04-06 08:42 -0400 </p> <aside class="hidden"> <button type="button" class="button_next_chunk" data-shortcut="j"/> @@ -938,8 +938,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80_makefiles_py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io/en/7.2.2">coverage.py v7.2.2</a>, - created at 2023-03-16 07:52 -0400 + <a class="nav" href="https://coverage.readthedocs.io/en/7.2.3">coverage.py v7.2.3</a>, + created at 2023-04-06 08:42 -0400 </p> </div> </footer> diff --git a/doc/sample_html/d_7b071bdc2a35fa80_makefiles_py.html b/doc/sample_html/d_7b071bdc2a35fa80_makefiles_py.html index a198865ef..16ab2e910 100644 --- a/doc/sample_html/d_7b071bdc2a35fa80_makefiles_py.html +++ b/doc/sample_html/d_7b071bdc2a35fa80_makefiles_py.html @@ -66,8 +66,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80_test_cogapp_py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io/en/7.2.2">coverage.py v7.2.2</a>, - created at 2023-03-16 07:52 -0400 + <a class="nav" href="https://coverage.readthedocs.io/en/7.2.3">coverage.py v7.2.3</a>, + created at 2023-04-06 08:42 -0400 </p> <aside class="hidden"> <button type="button" class="button_next_chunk" data-shortcut="j"/> @@ -126,8 +126,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80_test_cogapp_py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io/en/7.2.2">coverage.py v7.2.2</a>, - created at 2023-03-16 07:52 -0400 + <a class="nav" href="https://coverage.readthedocs.io/en/7.2.3">coverage.py v7.2.3</a>, + created at 2023-04-06 08:42 -0400 </p> </div> </footer> diff --git a/doc/sample_html/d_7b071bdc2a35fa80_test_cogapp_py.html b/doc/sample_html/d_7b071bdc2a35fa80_test_cogapp_py.html index 74bb4ab57..3b6684674 100644 --- a/doc/sample_html/d_7b071bdc2a35fa80_test_cogapp_py.html +++ b/doc/sample_html/d_7b071bdc2a35fa80_test_cogapp_py.html @@ -66,8 +66,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80_test_makefiles_py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io/en/7.2.2">coverage.py v7.2.2</a>, - created at 2023-03-16 07:52 -0400 + <a class="nav" href="https://coverage.readthedocs.io/en/7.2.3">coverage.py v7.2.3</a>, + created at 2023-04-06 08:42 -0400 </p> <aside class="hidden"> <button type="button" class="button_next_chunk" data-shortcut="j"/> @@ -2713,8 +2713,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80_test_makefiles_py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io/en/7.2.2">coverage.py v7.2.2</a>, - created at 2023-03-16 07:52 -0400 + <a class="nav" href="https://coverage.readthedocs.io/en/7.2.3">coverage.py v7.2.3</a>, + created at 2023-04-06 08:42 -0400 </p> </div> </footer> diff --git a/doc/sample_html/d_7b071bdc2a35fa80_test_makefiles_py.html b/doc/sample_html/d_7b071bdc2a35fa80_test_makefiles_py.html index ffe5456be..d0e5385ab 100644 --- a/doc/sample_html/d_7b071bdc2a35fa80_test_makefiles_py.html +++ b/doc/sample_html/d_7b071bdc2a35fa80_test_makefiles_py.html @@ -66,8 +66,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80_test_whiteutils_py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io/en/7.2.2">coverage.py v7.2.2</a>, - created at 2023-03-16 07:52 -0400 + <a class="nav" href="https://coverage.readthedocs.io/en/7.2.3">coverage.py v7.2.3</a>, + created at 2023-04-06 08:42 -0400 </p> <aside class="hidden"> <button type="button" class="button_next_chunk" data-shortcut="j"/> @@ -207,8 +207,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80_test_whiteutils_py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io/en/7.2.2">coverage.py v7.2.2</a>, - created at 2023-03-16 07:52 -0400 + <a class="nav" href="https://coverage.readthedocs.io/en/7.2.3">coverage.py v7.2.3</a>, + created at 2023-04-06 08:42 -0400 </p> </div> </footer> diff --git a/doc/sample_html/d_7b071bdc2a35fa80_test_whiteutils_py.html b/doc/sample_html/d_7b071bdc2a35fa80_test_whiteutils_py.html index 0d3fd4f63..d99b6f77f 100644 --- a/doc/sample_html/d_7b071bdc2a35fa80_test_whiteutils_py.html +++ b/doc/sample_html/d_7b071bdc2a35fa80_test_whiteutils_py.html @@ -66,8 +66,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80_whiteutils_py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io/en/7.2.2">coverage.py v7.2.2</a>, - created at 2023-03-16 07:52 -0400 + <a class="nav" href="https://coverage.readthedocs.io/en/7.2.3">coverage.py v7.2.3</a>, + created at 2023-04-06 08:42 -0400 </p> <aside class="hidden"> <button type="button" class="button_next_chunk" data-shortcut="j"/> @@ -187,8 +187,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="d_7b071bdc2a35fa80_whiteutils_py.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io/en/7.2.2">coverage.py v7.2.2</a>, - created at 2023-03-16 07:52 -0400 + <a class="nav" href="https://coverage.readthedocs.io/en/7.2.3">coverage.py v7.2.3</a>, + created at 2023-04-06 08:42 -0400 </p> </div> </footer> diff --git a/doc/sample_html/d_7b071bdc2a35fa80_whiteutils_py.html b/doc/sample_html/d_7b071bdc2a35fa80_whiteutils_py.html index 4272b315d..5ca1352ac 100644 --- a/doc/sample_html/d_7b071bdc2a35fa80_whiteutils_py.html +++ b/doc/sample_html/d_7b071bdc2a35fa80_whiteutils_py.html @@ -66,8 +66,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="index.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io/en/7.2.2">coverage.py v7.2.2</a>, - created at 2023-03-16 07:52 -0400 + <a class="nav" href="https://coverage.readthedocs.io/en/7.2.3">coverage.py v7.2.3</a>, + created at 2023-04-06 08:42 -0400 </p> <aside class="hidden"> <button type="button" class="button_next_chunk" data-shortcut="j"/> @@ -157,8 +157,8 @@ <h2> <a id="indexLink" class="nav" href="index.html">^ index</a> <a id="nextFileLink" class="nav" href="index.html">» next</a> - <a class="nav" href="https://coverage.readthedocs.io/en/7.2.2">coverage.py v7.2.2</a>, - created at 2023-03-16 07:52 -0400 + <a class="nav" href="https://coverage.readthedocs.io/en/7.2.3">coverage.py v7.2.3</a>, + created at 2023-04-06 08:42 -0400 </p> </div> </footer> diff --git a/doc/sample_html/index.html b/doc/sample_html/index.html index c304d54ad..c12579608 100644 --- a/doc/sample_html/index.html +++ b/doc/sample_html/index.html @@ -46,8 +46,8 @@ <h1>Cog coverage: <input id="filter" type="text" value="" placeholder="filter..." /> </form> <p class="text"> - <a class="nav" href="https://coverage.readthedocs.io/en/7.2.2">coverage.py v7.2.2</a>, - created at 2023-03-16 07:52 -0400 + <a class="nav" href="https://coverage.readthedocs.io/en/7.2.3">coverage.py v7.2.3</a>, + created at 2023-04-06 08:42 -0400 </p> </div> </header> @@ -157,8 +157,8 @@ <h1>Cog coverage: <footer> <div class="content"> <p> - <a class="nav" href="https://coverage.readthedocs.io/en/7.2.2">coverage.py v7.2.2</a>, - created at 2023-03-16 07:52 -0400 + <a class="nav" href="https://coverage.readthedocs.io/en/7.2.3">coverage.py v7.2.3</a>, + created at 2023-04-06 08:42 -0400 </p> </div> <aside class="hidden"> diff --git a/doc/sample_html/status.json b/doc/sample_html/status.json index 133a3406c..17e633de6 100644 --- a/doc/sample_html/status.json +++ b/doc/sample_html/status.json @@ -1 +1 @@ -{"format":2,"version":"7.2.2","globals":"06b1ac9f4a6596354db77ceb72079454","files":{"d_7b071bdc2a35fa80___init___py":{"hash":"70ef41e14b11d599cdbcf53f562ebb16","index":{"nums":[2,1,1,0,0,0,0,0],"html_filename":"d_7b071bdc2a35fa80___init___py.html","relative_filename":"cogapp/__init__.py"}},"d_7b071bdc2a35fa80___main___py":{"hash":"6d9d0d551879aa3e73791f40c5739845","index":{"nums":[2,1,3,0,3,0,0,0],"html_filename":"d_7b071bdc2a35fa80___main___py.html","relative_filename":"cogapp/__main__.py"}},"d_7b071bdc2a35fa80_cogapp_py":{"hash":"7428c811d741c23b10655ff6c20fb85f","index":{"nums":[2,1,500,1,224,210,30,138],"html_filename":"d_7b071bdc2a35fa80_cogapp_py.html","relative_filename":"cogapp/cogapp.py"}},"d_7b071bdc2a35fa80_makefiles_py":{"hash":"4b73eaf76fbb53af575b40165e831aac","index":{"nums":[2,1,22,0,18,14,0,14],"html_filename":"d_7b071bdc2a35fa80_makefiles_py.html","relative_filename":"cogapp/makefiles.py"}},"d_7b071bdc2a35fa80_test_cogapp_py":{"hash":"34099de695d2cac204436597408d33d2","index":{"nums":[2,1,845,2,591,24,1,21],"html_filename":"d_7b071bdc2a35fa80_test_cogapp_py.html","relative_filename":"cogapp/test_cogapp.py"}},"d_7b071bdc2a35fa80_test_makefiles_py":{"hash":"63fd1bdc011935abfd11301da94b383e","index":{"nums":[2,1,70,0,53,6,0,6],"html_filename":"d_7b071bdc2a35fa80_test_makefiles_py.html","relative_filename":"cogapp/test_makefiles.py"}},"d_7b071bdc2a35fa80_test_whiteutils_py":{"hash":"ec69457cbd6dfbc85eefabdfc0931c99","index":{"nums":[2,1,68,0,50,0,0,0],"html_filename":"d_7b071bdc2a35fa80_test_whiteutils_py.html","relative_filename":"cogapp/test_whiteutils.py"}},"d_7b071bdc2a35fa80_whiteutils_py":{"hash":"6dbf59193ab1bdcba86b017c86bb4724","index":{"nums":[2,1,43,0,5,34,4,4],"html_filename":"d_7b071bdc2a35fa80_whiteutils_py.html","relative_filename":"cogapp/whiteutils.py"}}}} \ No newline at end of file +{"format":2,"version":"7.2.3","globals":"2b43fc00a84f1e7415bbd5a0e2a010d6","files":{"d_7b071bdc2a35fa80___init___py":{"hash":"70ef41e14b11d599cdbcf53f562ebb16","index":{"nums":[2,1,1,0,0,0,0,0],"html_filename":"d_7b071bdc2a35fa80___init___py.html","relative_filename":"cogapp/__init__.py"}},"d_7b071bdc2a35fa80___main___py":{"hash":"6d9d0d551879aa3e73791f40c5739845","index":{"nums":[2,1,3,0,3,0,0,0],"html_filename":"d_7b071bdc2a35fa80___main___py.html","relative_filename":"cogapp/__main__.py"}},"d_7b071bdc2a35fa80_cogapp_py":{"hash":"7428c811d741c23b10655ff6c20fb85f","index":{"nums":[2,1,500,1,224,210,30,138],"html_filename":"d_7b071bdc2a35fa80_cogapp_py.html","relative_filename":"cogapp/cogapp.py"}},"d_7b071bdc2a35fa80_makefiles_py":{"hash":"4b73eaf76fbb53af575b40165e831aac","index":{"nums":[2,1,22,0,18,14,0,14],"html_filename":"d_7b071bdc2a35fa80_makefiles_py.html","relative_filename":"cogapp/makefiles.py"}},"d_7b071bdc2a35fa80_test_cogapp_py":{"hash":"34099de695d2cac204436597408d33d2","index":{"nums":[2,1,845,2,591,24,1,21],"html_filename":"d_7b071bdc2a35fa80_test_cogapp_py.html","relative_filename":"cogapp/test_cogapp.py"}},"d_7b071bdc2a35fa80_test_makefiles_py":{"hash":"63fd1bdc011935abfd11301da94b383e","index":{"nums":[2,1,70,0,53,6,0,6],"html_filename":"d_7b071bdc2a35fa80_test_makefiles_py.html","relative_filename":"cogapp/test_makefiles.py"}},"d_7b071bdc2a35fa80_test_whiteutils_py":{"hash":"ec69457cbd6dfbc85eefabdfc0931c99","index":{"nums":[2,1,68,0,50,0,0,0],"html_filename":"d_7b071bdc2a35fa80_test_whiteutils_py.html","relative_filename":"cogapp/test_whiteutils.py"}},"d_7b071bdc2a35fa80_whiteutils_py":{"hash":"6dbf59193ab1bdcba86b017c86bb4724","index":{"nums":[2,1,43,0,5,34,4,4],"html_filename":"d_7b071bdc2a35fa80_whiteutils_py.html","relative_filename":"cogapp/whiteutils.py"}}}} \ No newline at end of file diff --git a/doc/sample_html/style.css b/doc/sample_html/style.css index d6768a35e..11b24c4e7 100644 --- a/doc/sample_html/style.css +++ b/doc/sample_html/style.css @@ -258,12 +258,10 @@ kbd { border: 1px solid black; border-color: #888 #333 #333 #888; padding: .1em @media (prefers-color-scheme: dark) { #source p label.ctx { color: #777; } } -#source p .ctxs { display: block; max-height: 0; overflow-y: hidden; transition: all .2s; padding: 0 .5em; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; white-space: nowrap; background: #d0e8ff; border-radius: .25em; margin-right: 1.75em; } +#source p .ctxs { display: block; max-height: 0; overflow-y: hidden; transition: all .2s; padding: 0 .5em; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; white-space: nowrap; background: #d0e8ff; border-radius: .25em; margin-right: 1.75em; text-align: right; } @media (prefers-color-scheme: dark) { #source p .ctxs { background: #056; } } -#source p .ctxs span { display: block; text-align: right; } - #index { font-family: SFMono-Regular, Menlo, Monaco, Consolas, monospace; font-size: 0.875em; } #index table.index { margin-left: -.5em; }