晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
| DIR:/opt/cloudlinux/venv/lib64/python3.11/site-packages/tap/ |
| Current File : //opt/cloudlinux/venv/lib64/python3.11/site-packages/tap/rules.py |
from tap.adapter import Adapter
from tap.directive import Directive
from tap.line import Result
class Rules:
def __init__(self, filename, suite):
self._filename = filename
self._suite = suite
self._lines_seen = {"plan": [], "test": 0, "version": []}
def check(self, final_line_count):
"""Check the status of all provided data and update the suite."""
if self._lines_seen["version"]:
self._process_version_lines()
self._process_plan_lines(final_line_count)
def _process_version_lines(self):
"""Process version line rules."""
if len(self._lines_seen["version"]) > 1:
self._add_error("Multiple version lines appeared.")
elif self._lines_seen["version"][0] != 1:
self._add_error("The version must be on the first line.")
def _process_plan_lines(self, final_line_count):
"""Process plan line rules."""
if not self._lines_seen["plan"]:
self._add_error("Missing a plan.")
return
if len(self._lines_seen["plan"]) > 1:
self._add_error("Only one plan line is permitted per file.")
return
plan, at_line = self._lines_seen["plan"][0]
if not self._plan_on_valid_line(at_line, final_line_count):
self._add_error("A plan must appear at the beginning or end of the file.")
return
if plan.expected_tests != self._lines_seen["test"]:
self._add_error(
"Expected {expected_count} tests but only {seen_count} ran.".format(
expected_count=plan.expected_tests,
seen_count=self._lines_seen["test"],
)
)
def _plan_on_valid_line(self, at_line, final_line_count):
"""Check if a plan is on a valid line."""
# Put the common cases first.
if at_line == 1 or at_line == final_line_count:
return True
# The plan may only appear on line 2 if the version is at line 1.
after_version = (
self._lines_seen["version"]
and self._lines_seen["version"][0] == 1
and at_line == 2
)
return bool(after_version)
def handle_bail(self, bail):
"""Handle a bail line."""
self._add_error(f"Bailed: {bail.reason}")
def handle_file_does_not_exist(self):
"""Handle a test file that does not exist."""
self._add_error(f"{self._filename} does not exist.")
def handle_skipping_plan(self, skip_plan):
"""Handle a plan that contains a SKIP directive."""
skip_line = Result(True, None, skip_plan.directive.text, Directive("SKIP"))
self._suite.addTest(Adapter(self._filename, skip_line))
def saw_plan(self, plan, at_line):
"""Record when a plan line was seen."""
self._lines_seen["plan"].append((plan, at_line))
def saw_test(self):
"""Record when a test line was seen."""
self._lines_seen["test"] += 1
def saw_version_at(self, line_counter):
"""Record when a version line was seen."""
self._lines_seen["version"].append(line_counter)
def _add_error(self, message):
"""Add an error test to the suite."""
error_line = Result(False, None, message, Directive(""))
self._suite.addTest(Adapter(self._filename, error_line))
|