Skip to content

Commit ec90afe

Browse files
committed
fix #307
1 parent 41435e3 commit ec90afe

18 files changed

Lines changed: 99 additions & 59 deletions

src/client/unittests/nosetest/collector.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ export function discoverTests(rootDirectory: string, args: string[], token: Canc
5454
}
5555
function processOutput(output: string) {
5656
output.split(/\r?\n/g).forEach((line, index, lines) => {
57-
if (line.trim().startsWith('nose.selector: DEBUG: wantModule <module \'')) {
57+
if (line.trim().startsWith('nose.selector: DEBUG: wantModule <module \'') || index === lines.length - 1) {
5858
// process the previous lines
5959
parseNoseTestModuleCollectionResult(rootDirectory, logOutputLines, testFiles);
6060
logOutputLines = [''];

src/test/extension.unittests.nosetest.test.ts

Lines changed: 33 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,9 @@ import * as configSettings from '../client/common/configSettings';
2222

2323
let pythonSettings = configSettings.PythonSettings.getInstance();
2424

25-
const UNITTEST_TEST_FILES_PATH = path.join(__dirname, '..', '..', 'src', 'test', 'pythonFiles', 'unitests');
26-
const UNITTEST_TEST_ID_FILE_PATH = path.join(__dirname, '..', '..', 'src', 'test', 'pythonFiles', 'unitests', '.noseids');
25+
const UNITTEST_TEST_FILES_PATH = path.join(__dirname, '..', '..', 'src', 'test', 'pythonFiles', 'testFiles', 'standard');
26+
const UNITTEST_SINGLE_TEST_FILE_PATH = path.join(__dirname, '..', '..', 'src', 'test', 'pythonFiles', 'testFiles', 'single');
27+
const UNITTEST_TEST_ID_FILE_PATH = path.join(__dirname, '..', '..', 'src', 'test', 'pythonFiles', 'testFiles', 'standard', '.noseids');
2728
class MockOutputChannel implements vscode.OutputChannel {
2829
constructor(name: string) {
2930
this.name = name;
@@ -45,7 +46,7 @@ class MockOutputChannel implements vscode.OutputChannel {
4546

4647
suite('Unit Tests (nosetest)', () => {
4748
suiteSetup(done => {
48-
if (fs.existsSync(UNITTEST_TEST_ID_FILE_PATH)){
49+
if (fs.existsSync(UNITTEST_TEST_ID_FILE_PATH)) {
4950
fs.unlinkSync(UNITTEST_TEST_ID_FILE_PATH);
5051
}
5152
initialize().then(() => {
@@ -54,7 +55,7 @@ suite('Unit Tests (nosetest)', () => {
5455
});
5556
});
5657
suiteTeardown(done => {
57-
if (fs.existsSync(UNITTEST_TEST_ID_FILE_PATH)){
58+
if (fs.existsSync(UNITTEST_TEST_ID_FILE_PATH)) {
5859
fs.unlinkSync(UNITTEST_TEST_ID_FILE_PATH);
5960
}
6061
done();
@@ -76,38 +77,50 @@ suite('Unit Tests (nosetest)', () => {
7677
let testResultDisplay: TestResultDisplay;
7778
let outChannel: vscode.OutputChannel;
7879

80+
test('Discover Tests (single test file)', done => {
81+
pythonSettings.unitTest.nosetestArgs = [
82+
];
83+
testManager = new nose.TestManager(UNITTEST_SINGLE_TEST_FILE_PATH, outChannel);
84+
testManager.discoverTests(true, true).then(tests => {
85+
assert.equal(tests.testFiles.length, 1, 'Incorrect number of test files');
86+
assert.equal(tests.testFunctions.length, 3, 'Incorrect number of test functions');
87+
assert.equal(tests.testSuits.length, 1, 'Incorrect number of test suites');
88+
assert.equal(tests.testFiles.some(t => t.name === 'tests/test_one.py' && t.nameToRun === t.name), true, 'Test File not found');
89+
}).then(done).catch(done);
90+
});
91+
7992
test('Discover Tests (pattern = test_)', done => {
8093
pythonSettings.unitTest.nosetestArgs = [
8194

8295
];
8396
createTestManager();
8497
testManager.discoverTests(true, true).then(tests => {
85-
assert.equal(tests.testFiles.length, 4, 'Incorrect number of test files');
86-
assert.equal(tests.testFunctions.length, 17, 'Incorrect number of test functions');
87-
assert.equal(tests.testSuits.length, 4, 'Incorrect number of test suites');
98+
assert.equal(tests.testFiles.length, 5, 'Incorrect number of test files');
99+
assert.equal(tests.testFunctions.length, 19, 'Incorrect number of test functions');
100+
assert.equal(tests.testSuits.length, 5, 'Incorrect number of test suites');
88101
assert.equal(tests.testFiles.some(t => t.name === 'tests/test_unittest_one.py' && t.nameToRun === t.name), true, 'Test File not found');
89102
assert.equal(tests.testFiles.some(t => t.name === 'tests/test_unittest_two.py' && t.nameToRun === t.name), true, 'Test File not found');
90103
assert.equal(tests.testFiles.some(t => t.name === 'tests/test_pytest.py' && t.nameToRun === t.name), true, 'Test File not found');
91104
assert.equal(tests.testFiles.some(t => t.name === 'tests/test_another_pytest.py' && t.nameToRun === t.name), true, 'Test File not found');
92-
done();
93-
}).catch(done);
105+
assert.equal(tests.testFiles.some(t => t.name === 'tests/unittest_three_test.py' && t.nameToRun === t.name), true, 'Test File not found');
106+
}).then(done).catch(done);
94107
});
95108

96-
test('Discover Tests (pattern = test_)', done => {
109+
test('Discover Tests (pattern = _test_)', done => {
97110
pythonSettings.unitTest.nosetestArgs = [
98111
'-m=*test*'
99112
];
100113
createTestManager();
101114
testManager.discoverTests(true, true).then(tests => {
102-
assert.equal(tests.testFiles.length, 4, 'Incorrect number of test files');
103-
assert.equal(tests.testFunctions.length, 13, 'Incorrect number of test functions');
104-
assert.equal(tests.testSuits.length, 3, 'Incorrect number of test suites');
115+
assert.equal(tests.testFiles.length, 5, 'Incorrect number of test files');
116+
assert.equal(tests.testFunctions.length, 15, 'Incorrect number of test functions');
117+
assert.equal(tests.testSuits.length, 4, 'Incorrect number of test suites');
105118
assert.equal(tests.testFiles.some(t => t.name === 'tests/test_unittest_one.py' && t.nameToRun === t.name), true, 'Test File not found');
106119
assert.equal(tests.testFiles.some(t => t.name === 'tests/test_unittest_two.py' && t.nameToRun === t.name), true, 'Test File not found');
107120
assert.equal(tests.testFiles.some(t => t.name === 'tests/test_pytest.py' && t.nameToRun === t.name), true, 'Test File not found');
108121
assert.equal(tests.testFiles.some(t => t.name === 'tests/test_another_pytest.py' && t.nameToRun === t.name), true, 'Test File not found');
109-
done();
110-
}).catch(done);
122+
assert.equal(tests.testFiles.some(t => t.name === 'tests/unittest_three_test.py' && t.nameToRun === t.name), true, 'Test File not found');
123+
}).then(done).catch(done);
111124
});
112125

113126
test('Run Tests', done => {
@@ -119,8 +132,7 @@ suite('Unit Tests (nosetest)', () => {
119132
assert.equal(results.summary.failures, 5, 'Failures');
120133
assert.equal(results.summary.passed, 7, 'Passed');
121134
assert.equal(results.summary.skipped, 2, 'skipped');
122-
done();
123-
}).catch(done);
135+
}).then(done).catch(done);
124136
});
125137

126138
test('Run Failed Tests', done => {
@@ -138,9 +150,8 @@ suite('Unit Tests (nosetest)', () => {
138150
assert.equal(results.summary.failures, 5, 'Failures');
139151
assert.equal(results.summary.passed, 0, 'Passed');
140152
assert.equal(results.summary.skipped, 0, 'skipped');
141-
done();
142153
});
143-
}).catch(done);
154+
}).then(done).catch(done);
144155
});
145156

146157
test('Run Specific Test File', done => {
@@ -154,9 +165,8 @@ suite('Unit Tests (nosetest)', () => {
154165
assert.equal(tests.summary.failures, 0, 'Failures');
155166
assert.equal(tests.summary.passed, 0, 'Passed');
156167
assert.equal(tests.summary.skipped, 0, 'skipped');
157-
done();
158168
});
159-
}).catch(done);
169+
}).then(done).catch(done);
160170
});
161171

162172
test('Run Specific Test Suite', done => {
@@ -170,9 +180,8 @@ suite('Unit Tests (nosetest)', () => {
170180
assert.equal(tests.summary.failures, 0, 'Failures');
171181
assert.equal(tests.summary.passed, 0, 'Passed');
172182
assert.equal(tests.summary.skipped, 0, 'skipped');
173-
done();
174183
});
175-
}).catch(done);
184+
}).then(done).catch(done);
176185
});
177186

178187
test('Run Specific Test Function', done => {
@@ -186,8 +195,7 @@ suite('Unit Tests (nosetest)', () => {
186195
assert.equal(tests.summary.failures, 0, 'Failures');
187196
assert.equal(tests.summary.passed, 0, 'Passed');
188197
assert.equal(tests.summary.skipped, 0, 'skipped');
189-
done();
190198
});
191-
}).catch(done);
199+
}).then(done).catch(done);
192200
});
193201
});

src/test/extension.unittests.pytest.test.ts

Lines changed: 23 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,9 @@ import * as configSettings from '../client/common/configSettings';
2222

2323
let pythonSettings = configSettings.PythonSettings.getInstance();
2424

25-
const UNITTEST_TEST_FILES_PATH = path.join(__dirname, '..', '..', 'src', 'test', 'pythonFiles', 'unitests');
26-
const UNITTEST_TEST_FILES_PATH_WITH_CONFIGS = path.join(__dirname, '..', '..', 'src', 'test', 'pythonFiles', 'unitestsWithConfigs');
25+
const UNITTEST_TEST_FILES_PATH = path.join(__dirname, '..', '..', 'src', 'test', 'pythonFiles', 'testFiles', 'standard');
26+
const UNITTEST_SINGLE_TEST_FILE_PATH = path.join(__dirname, '..', '..', 'src', 'test', 'pythonFiles', 'testFiles', 'single');
27+
const UNITTEST_TEST_FILES_PATH_WITH_CONFIGS = path.join(__dirname, '..', '..', 'src', 'test', 'pythonFiles', 'testFiles', 'unitestsWithConfigs');
2728

2829
class MockOutputChannel implements vscode.OutputChannel {
2930
constructor(name: string) {
@@ -72,6 +73,18 @@ suite('Unit Tests (PyTest)', () => {
7273
let testResultDisplay: TestResultDisplay;
7374
let outChannel: vscode.OutputChannel;
7475

76+
test('Discover Tests (single test file)', done => {
77+
pythonSettings.unitTest.nosetestArgs = [
78+
];
79+
testManager = new pytest.TestManager(UNITTEST_SINGLE_TEST_FILE_PATH, outChannel);
80+
testManager.discoverTests(true, true).then(tests => {
81+
assert.equal(tests.testFiles.length, 1, 'Incorrect number of test files');
82+
assert.equal(tests.testFunctions.length, 3, 'Incorrect number of test functions');
83+
assert.equal(tests.testSuits.length, 1, 'Incorrect number of test suites');
84+
assert.equal(tests.testFiles.some(t => t.name === 'tests/test_one.py' && t.nameToRun === t.name), true, 'Test File not found');
85+
}).then(done).catch(done);
86+
});
87+
7588
test('Discover Tests (pattern = test_)', done => {
7689
pythonSettings.unitTest.pyTestArgs = [
7790
'-k=test_'
@@ -86,8 +99,7 @@ suite('Unit Tests (PyTest)', () => {
8699
assert.equal(tests.testFiles.some(t => t.name === 'tests/unittest_three_test.py' && t.nameToRun === t.name), true, 'Test File not found');
87100
assert.equal(tests.testFiles.some(t => t.name === 'tests/test_pytest.py' && t.nameToRun === t.name), true, 'Test File not found');
88101
assert.equal(tests.testFiles.some(t => t.name === 'tests/test_another_pytest.py' && t.nameToRun === t.name), true, 'Test File not found');
89-
done();
90-
}).catch(done);
102+
}).then(done).catch(done);
91103
});
92104

93105
test('Discover Tests (pattern = _test)', done => {
@@ -100,8 +112,7 @@ suite('Unit Tests (PyTest)', () => {
100112
assert.equal(tests.testFunctions.length, 2, 'Incorrect number of test functions');
101113
assert.equal(tests.testSuits.length, 1, 'Incorrect number of test suites');
102114
assert.equal(tests.testFiles.some(t => t.name === 'tests/unittest_three_test.py' && t.nameToRun === t.name), true, 'Test File not found');
103-
done();
104-
}).catch(done);
115+
}).then(done).catch(done);
105116
});
106117

107118

@@ -115,8 +126,7 @@ suite('Unit Tests (PyTest)', () => {
115126
assert.equal(tests.testSuits.length, 4, 'Incorrect number of test suites');
116127
assert.equal(tests.testFiles.some(t => t.name === 'other/test_unittest_one.py' && t.nameToRun === t.name), true, 'Test File not found');
117128
assert.equal(tests.testFiles.some(t => t.name === 'other/test_pytest.py' && t.nameToRun === t.name), true, 'Test File not found');
118-
done();
119-
}).catch(done);
129+
}).then(done).catch(done);
120130
});
121131

122132
test('Run Tests', done => {
@@ -129,8 +139,7 @@ suite('Unit Tests (PyTest)', () => {
129139
assert.equal(results.summary.failures, 8, 'Failures');
130140
assert.equal(results.summary.passed, 16, 'Passed');
131141
assert.equal(results.summary.skipped, 2, 'skipped');
132-
done();
133-
}).catch(done);
142+
}).then(done).catch(done);
134143
});
135144

136145
test('Run Failed Tests', done => {
@@ -149,9 +158,8 @@ suite('Unit Tests (PyTest)', () => {
149158
assert.equal(results.summary.failures, 8, 'Failed Failures');
150159
assert.equal(results.summary.passed, 0, 'Failed Passed');
151160
assert.equal(results.summary.skipped, 0, 'Failed skipped');
152-
done();
153161
});
154-
}).catch(done);
162+
}).then(done).catch(done);
155163
});
156164

157165
test('Run Specific Test File', done => {
@@ -175,9 +183,8 @@ suite('Unit Tests (PyTest)', () => {
175183
assert.equal(tests.summary.failures, 1, 'Failures');
176184
assert.equal(tests.summary.passed, 3, 'Passed');
177185
assert.equal(tests.summary.skipped, 0, 'skipped');
178-
done();
179186
});
180-
}).catch(done);
187+
}).then(done).catch(done);
181188
});
182189

183190
test('Run Specific Test Suite', done => {
@@ -192,9 +199,8 @@ suite('Unit Tests (PyTest)', () => {
192199
assert.equal(tests.summary.failures, 0, 'Failures');
193200
assert.equal(tests.summary.passed, 6, 'Passed');
194201
assert.equal(tests.summary.skipped, 1, 'skipped');
195-
done();
196202
});
197-
}).catch(done);
203+
}).then(done).catch(done);
198204
});
199205

200206
test('Run Specific Test Function', done => {
@@ -209,8 +215,7 @@ suite('Unit Tests (PyTest)', () => {
209215
assert.equal(tests.summary.failures, 0, 'Failures');
210216
assert.equal(tests.summary.passed, 1, 'Passed');
211217
assert.equal(tests.summary.skipped, 0, 'skipped');
212-
done();
213218
});
214-
}).catch(done);
219+
}).then(done).catch(done);
215220
});
216221
});

src/test/extension.unittests.unittest.test.ts

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ import * as configSettings from '../client/common/configSettings';
2222

2323
let pythonSettings = configSettings.PythonSettings.getInstance();
2424

25-
const UNITTEST_TEST_FILES_PATH = path.join(__dirname, '..', '..', 'src', 'test', 'pythonFiles', 'unitests');
25+
const UNITTEST_TEST_FILES_PATH = path.join(__dirname, '..', '..', 'src', 'test', 'pythonFiles', 'testFiles', 'standard');
26+
const UNITTEST_SINGLE_TEST_FILE_PATH = path.join(__dirname, '..', '..', 'src', 'test', 'pythonFiles', 'testFiles', 'single');
2627
class MockOutputChannel implements vscode.OutputChannel {
2728
constructor(name: string) {
2829
this.name = name;
@@ -69,6 +70,20 @@ suite('Unit Tests (unittest)', () => {
6970
let testResultDisplay: TestResultDisplay;
7071
let outChannel: vscode.OutputChannel;
7172

73+
test('Discover Tests (single test file)', done => {
74+
pythonSettings.unitTest.unittestArgs = [
75+
'-s=./tests',
76+
'-p=test_*.py'
77+
];
78+
testManager = new unittest.TestManager(UNITTEST_SINGLE_TEST_FILE_PATH, outChannel);
79+
testManager.discoverTests(true, true).then(tests => {
80+
assert.equal(tests.testFiles.length, 1, 'Incorrect number of test files');
81+
assert.equal(tests.testFunctions.length, 3, 'Incorrect number of test functions');
82+
assert.equal(tests.testSuits.length, 1, 'Incorrect number of test suites');
83+
assert.equal(tests.testFiles.some(t => t.name === 'test_one.py' && t.nameToRun === 'Test_test1.test_A'), true, 'Test File not found');
84+
}).then(done).catch(done);
85+
});
86+
7287
test('Discover Tests', done => {
7388
pythonSettings.unitTest.unittestArgs = [
7489
'-s=./tests',
@@ -81,8 +96,7 @@ suite('Unit Tests (unittest)', () => {
8196
assert.equal(tests.testSuits.length, 3, 'Incorrect number of test suites');
8297
assert.equal(tests.testFiles.some(t => t.name === 'test_unittest_one.py' && t.nameToRun === 'Test_test1.test_A'), true, 'Test File not found');
8398
assert.equal(tests.testFiles.some(t => t.name === 'test_unittest_two.py' && t.nameToRun === 'Test_test2.test_A2'), true, 'Test File not found');
84-
done();
85-
}).catch(done);
99+
}).then(done).catch(done);
86100
});
87101

88102
test('Discover Tests (pattern = *_test_*.py)', done => {
@@ -96,8 +110,7 @@ suite('Unit Tests (unittest)', () => {
96110
assert.equal(tests.testFunctions.length, 2, 'Incorrect number of test functions');
97111
assert.equal(tests.testSuits.length, 1, 'Incorrect number of test suites');
98112
assert.equal(tests.testFiles.some(t => t.name === 'unittest_three_test.py' && t.nameToRun === 'Test_test3.test_A'), true, 'Test File not found');
99-
done();
100-
}).catch(done);
113+
}).then(done).catch(done);
101114
});
102115

103116
test('Run Tests', done => {
@@ -111,8 +124,7 @@ suite('Unit Tests (unittest)', () => {
111124
assert.equal(results.summary.failures, 5, 'Failures');
112125
assert.equal(results.summary.passed, 4, 'Passed');
113126
assert.equal(results.summary.skipped, 1, 'skipped');
114-
done();
115-
}).catch(done);
127+
}).then(done).catch(done);
116128
});
117129

118130
// test('Fail Fast', done => {
@@ -148,9 +160,8 @@ suite('Unit Tests (unittest)', () => {
148160
assert.equal(results.summary.failures, 5, 'Failed Failures');
149161
assert.equal(results.summary.passed, 0, 'Failed Passed');
150162
assert.equal(results.summary.skipped, 0, 'Failed skipped');
151-
done();
152163
});
153-
}).catch(done);
164+
}).then(done).catch(done);
154165
});
155166

156167
test('Run Specific Test File', done => {
@@ -166,9 +177,8 @@ suite('Unit Tests (unittest)', () => {
166177
assert.equal(tests.summary.failures, 1, 'Failures');
167178
assert.equal(tests.summary.passed, 1, 'Passed');
168179
assert.equal(tests.summary.skipped, 1, 'skipped');
169-
done();
170180
});
171-
}).catch(done);
181+
}).then(done).catch(done);
172182
});
173183

174184
test('Run Specific Test Suite', done => {
@@ -184,9 +194,8 @@ suite('Unit Tests (unittest)', () => {
184194
assert.equal(tests.summary.failures, 1, 'Failures');
185195
assert.equal(tests.summary.passed, 1, 'Passed');
186196
assert.equal(tests.summary.skipped, 1, 'skipped');
187-
done();
188197
});
189-
}).catch(done);
198+
}).then(done).catch(done);
190199
});
191200

192201
test('Run Specific Test Function', done => {
@@ -202,8 +211,7 @@ suite('Unit Tests (unittest)', () => {
202211
assert.equal(tests.summary.failures, 1, 'Failures');
203212
assert.equal(tests.summary.passed, 0, 'Passed');
204213
assert.equal(tests.summary.skipped, 0, 'skipped');
205-
done();
206214
});
207-
}).catch(done);
215+
}).then(done).catch(done);
208216
});
209217
});

src/test/pythonFiles/unitests/tests/test_unittest_one.py renamed to src/test/pythonFiles/testFiles/single/tests/test_one.py

File renamed without changes.

src/test/pythonFiles/unitests/tests/test_another_pytest.py renamed to src/test/pythonFiles/testFiles/standard/tests/test_another_pytest.py

File renamed without changes.

src/test/pythonFiles/unitests/tests/test_pytest.py renamed to src/test/pythonFiles/testFiles/standard/tests/test_pytest.py

File renamed without changes.

src/test/pythonFiles/unitestsWithConfigs/other/test_unittest_one.py renamed to src/test/pythonFiles/testFiles/standard/tests/test_unittest_one.py

File renamed without changes.

src/test/pythonFiles/unitests/tests/test_unittest_two.py renamed to src/test/pythonFiles/testFiles/standard/tests/test_unittest_two.py

File renamed without changes.

src/test/pythonFiles/unitests/tests/unittest_three_test.py renamed to src/test/pythonFiles/testFiles/standard/tests/unittest_three_test.py

File renamed without changes.

0 commit comments

Comments
 (0)