Skip to content

Commit 0762284

Browse files
Move DiscoveredTests out of the pytest code.
1 parent 0c4ff21 commit 0762284

File tree

4 files changed

+662
-646
lines changed

4 files changed

+662
-646
lines changed
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
# Copyright (c) Microsoft Corporation. All rights reserved.
2+
# Licensed under the MIT License.
3+
4+
from __future__ import absolute_import, print_function
5+
6+
import os.path
7+
8+
from .info import ParentInfo
9+
10+
11+
12+
class DiscoveredTests(object):
13+
"""A container for the discovered tests and their parents."""
14+
15+
def __init__(self):
16+
self.reset()
17+
18+
def __len__(self):
19+
return len(self._tests)
20+
21+
def __getitem__(self, index):
22+
return self._tests[index]
23+
24+
@property
25+
def parents(self):
26+
return sorted(self._parents.values(), key=lambda v: (v.root or v.name, v.id))
27+
28+
def reset(self):
29+
"""Clear out any previously discovered tests."""
30+
self._parents = {}
31+
self._tests = []
32+
33+
def add_test(self, test, parents):
34+
"""Add the given test and its parents."""
35+
parentid = self._ensure_parent(test.path, parents)
36+
# Updating the parent ID and the test ID aren't necessary if the
37+
# provided test and parents (from the test collector) are
38+
# properly generated. However, we play it safe here.
39+
test = test._replace(parentid=parentid)
40+
if not test.id.startswith('.' + os.path.sep):
41+
test = test._replace(id=os.path.join('.', test.id))
42+
self._tests.append(test)
43+
44+
def _ensure_parent(self, path, parents):
45+
rootdir = path.root
46+
47+
_parents = iter(parents)
48+
nodeid, name, kind = next(_parents)
49+
# As in add_test(), the node ID *should* already be correct.
50+
if nodeid != '.' and not nodeid.startswith('.' + os.path.sep):
51+
nodeid = os.path.join('.', nodeid)
52+
_parentid = nodeid
53+
for parentid, parentname, parentkind in _parents:
54+
# As in add_test(), the parent ID *should* already be correct.
55+
if parentid != '.' and not parentid.startswith('.' + os.path.sep):
56+
parentid = os.path.join('.', parentid)
57+
info = ParentInfo(nodeid, kind, name, rootdir, parentid)
58+
self._parents[(rootdir, nodeid)] = info
59+
nodeid, name, kind = parentid, parentname, parentkind
60+
assert nodeid == '.'
61+
info = ParentInfo(nodeid, kind, name=rootdir)
62+
self._parents[(rootdir, nodeid)] = info
63+
64+
return _parentid

pythonFiles/testing_tools/adapter/pytest/_discovery.py

Lines changed: 2 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@
88

99
import pytest
1010

11-
from .. import util
12-
from ..info import ParentInfo
11+
from .. import util, discovery
1312
from ._pytest_item import parse_item
1413

1514

@@ -63,7 +62,7 @@ class TestCollector(object):
6362

6463
def __init__(self, tests=None):
6564
if tests is None:
66-
tests = DiscoveredTests()
65+
tests = discovery.DiscoveredTests()
6766
self._tests = tests
6867
self._started = False
6968

@@ -90,58 +89,3 @@ def pytest_collection_finish(self, session):
9089
for item in items:
9190
test, parents = parse_item(item, self.NORMCASE, self.PATHSEP)
9291
self._tests.add_test(test, parents)
93-
94-
95-
class DiscoveredTests(object):
96-
"""A container for the discovered tests and their parents."""
97-
98-
def __init__(self):
99-
self.reset()
100-
101-
def __len__(self):
102-
return len(self._tests)
103-
104-
def __getitem__(self, index):
105-
return self._tests[index]
106-
107-
@property
108-
def parents(self):
109-
return sorted(self._parents.values(), key=lambda v: (v.root or v.name, v.id))
110-
111-
def reset(self):
112-
"""Clear out any previously discovered tests."""
113-
self._parents = {}
114-
self._tests = []
115-
116-
def add_test(self, test, parents):
117-
"""Add the given test and its parents."""
118-
parentid = self._ensure_parent(test.path, parents)
119-
# Updating the parent ID and the test ID aren't necessary if the
120-
# provided test and parents (from the test collector) are
121-
# properly generated. However, we play it safe here.
122-
test = test._replace(parentid=parentid)
123-
if not test.id.startswith('.' + os.path.sep):
124-
test = test._replace(id=os.path.join('.', test.id))
125-
self._tests.append(test)
126-
127-
def _ensure_parent(self, path, parents):
128-
rootdir = path.root
129-
130-
_parents = iter(parents)
131-
nodeid, name, kind = next(_parents)
132-
# As in add_test(), the node ID *should* already be correct.
133-
if nodeid != '.' and not nodeid.startswith('.' + os.path.sep):
134-
nodeid = os.path.join('.', nodeid)
135-
_parentid = nodeid
136-
for parentid, parentname, parentkind in _parents:
137-
# As in add_test(), the parent ID *should* already be correct.
138-
if parentid != '.' and not parentid.startswith('.' + os.path.sep):
139-
parentid = os.path.join('.', parentid)
140-
info = ParentInfo(nodeid, kind, name, rootdir, parentid)
141-
self._parents[(rootdir, nodeid)] = info
142-
nodeid, name, kind = parentid, parentname, parentkind
143-
assert nodeid == '.'
144-
info = ParentInfo(nodeid, kind, name=rootdir)
145-
self._parents[(rootdir, nodeid)] = info
146-
147-
return _parentid

0 commit comments

Comments
 (0)