@@ -36,6 +36,22 @@ private static PythonVisitorContext createContext(String code) {
3636 return TestPythonVisitorRunner .createContext (mockFile , null , "" , ProjectLevelSymbolTable .empty (), CacheContextImpl .dummyCache ());
3737 }
3838
39+ @ Test
40+ void lineCountForSingleLineFile () {
41+ var singleLine = createContext ("x = 1" );
42+ assertThat (TestFileTelemetryCollector .lineCount (singleLine .rootTree ())).isEqualTo (1 );
43+ }
44+
45+ @ Test
46+ void lineCountForMultiLineFile () {
47+ var multiLine = createContext ("""
48+ x = 1
49+ y = 2
50+ z = 3
51+ """ );
52+ assertThat (TestFileTelemetryCollector .lineCount (multiLine .rootTree ())).isEqualTo (4 );
53+ }
54+
3955 @ ParameterizedTest
4056 @ MethodSource ("provideNotMisclassifiedTestCases" )
4157 void mainFile_notMisclassified (String code ) {
@@ -47,6 +63,10 @@ void mainFile_notMisclassified(String code) {
4763 var telemetry = collector .getTelemetry ();
4864 assertThat (telemetry .totalMainFiles ()).isEqualTo (1 );
4965 assertThat (telemetry .misclassifiedTestFiles ()).isZero ();
66+ assertThat (telemetry .totalLines ()).isPositive ();
67+ assertThat (telemetry .totalMainLines ()).isEqualTo (telemetry .totalLines ());
68+ assertThat (telemetry .testLines ()).isZero ();
69+ assertThat (telemetry .misclassifiedTestLines ()).isZero ();
5070 }
5171
5272 private static Stream <Arguments > provideNotMisclassifiedTestCases () {
@@ -77,6 +97,10 @@ void mainFileWithTestImports_isMisclassified(String code) {
7797 var telemetry = collector .getTelemetry ();
7898 assertThat (telemetry .totalMainFiles ()).isEqualTo (1 );
7999 assertThat (telemetry .misclassifiedTestFiles ()).isEqualTo (1 );
100+ assertThat (telemetry .totalLines ()).isPositive ();
101+ assertThat (telemetry .totalMainLines ()).isEqualTo (telemetry .totalLines ());
102+ assertThat (telemetry .testLines ()).isZero ();
103+ assertThat (telemetry .misclassifiedTestLines ()).isEqualTo (telemetry .totalMainLines ());
80104 }
81105
82106 private static Stream <Arguments > provideMisclassifiedTestCases () {
@@ -123,7 +147,7 @@ def my_fixture():
123147
124148 @ ParameterizedTest
125149 @ MethodSource ("provideTestFileNotCountedCases" )
126- void testFile_notCounted (String code ) {
150+ void testFile_countsLinesButNotMainMetrics (String code ) {
127151 var context = createContext (code );
128152
129153 var collector = new TestFileTelemetryCollector ();
@@ -132,6 +156,10 @@ void testFile_notCounted(String code) {
132156 var telemetry = collector .getTelemetry ();
133157 assertThat (telemetry .totalMainFiles ()).isZero ();
134158 assertThat (telemetry .misclassifiedTestFiles ()).isZero ();
159+ assertThat (telemetry .totalLines ()).isPositive ();
160+ assertThat (telemetry .totalMainLines ()).isZero ();
161+ assertThat (telemetry .testLines ()).isEqualTo (telemetry .totalLines ());
162+ assertThat (telemetry .misclassifiedTestLines ()).isZero ();
135163 }
136164
137165 private static Stream <Arguments > provideTestFileNotCountedCases () {
@@ -189,6 +217,10 @@ void aggregatesAcrossMultipleFiles() {
189217 var telemetry = collector .getTelemetry ();
190218 assertThat (telemetry .totalMainFiles ()).isEqualTo (3 );
191219 assertThat (telemetry .misclassifiedTestFiles ()).isEqualTo (2 );
220+ assertThat (telemetry .totalLines ()).isEqualTo (6 );
221+ assertThat (telemetry .totalMainLines ()).isEqualTo (6 );
222+ assertThat (telemetry .testLines ()).isZero ();
223+ assertThat (telemetry .misclassifiedTestLines ()).isEqualTo (4 );
192224 }
193225
194226 @ Test
@@ -205,6 +237,10 @@ void mixedMainAndTestFiles() {
205237 var telemetry = collector .getTelemetry ();
206238 assertThat (telemetry .totalMainFiles ()).isEqualTo (2 );
207239 assertThat (telemetry .misclassifiedTestFiles ()).isEqualTo (1 );
240+ assertThat (telemetry .totalLines ()).isEqualTo (3 );
241+ assertThat (telemetry .totalMainLines ()).isEqualTo (2 );
242+ assertThat (telemetry .testLines ()).isEqualTo (1 );
243+ assertThat (telemetry .misclassifiedTestLines ()).isEqualTo (1 );
208244 }
209245
210246 @ Test
@@ -222,8 +258,58 @@ def foo():
222258 var telemetry = collector .getTelemetry ();
223259 assertThat (telemetry .totalMainFiles ()).isEqualTo (1 );
224260 assertThat (telemetry .misclassifiedTestFiles ()).isEqualTo (1 );
261+ assertThat (telemetry .totalLines ()).isEqualTo (5 );
262+ assertThat (telemetry .totalMainLines ()).isEqualTo (5 );
263+ assertThat (telemetry .testLines ()).isZero ();
264+ assertThat (telemetry .misclassifiedTestLines ()).isEqualTo (5 );
225265 }
226266
267+ @ Test
268+ void lineCountAggregatesCorrectlyForDifferentFileSizes () {
269+ var smallFile = createContext ("x = 1" );
270+ var largerFile = createContext ("""
271+ import os
272+ import sys
273+ import json
274+
275+ def foo():
276+ pass
277+
278+ def bar():
279+ pass
280+ """ );
281+
282+ var collector = new TestFileTelemetryCollector ();
283+ collector .collect (smallFile .rootTree (), InputFile .Type .MAIN );
284+ collector .collect (largerFile .rootTree (), InputFile .Type .MAIN );
227285
286+ var telemetry = collector .getTelemetry ();
287+ assertThat (telemetry .totalMainLines ()).isEqualTo (11 );
288+ assertThat (telemetry .misclassifiedTestLines ()).isZero ();
289+ }
290+
291+ @ Test
292+ void misclassifiedTestLinesOnlyCountsMisclassifiedFiles () {
293+ var misclassifiedFile = createContext ("""
294+ import pytest
295+
296+ def test_something():
297+ assert True
298+ """ );
299+ var regularFile = createContext ("""
300+ import os
301+
302+ def helper():
303+ pass
304+ """ );
305+
306+ var collector = new TestFileTelemetryCollector ();
307+ collector .collect (misclassifiedFile .rootTree (), InputFile .Type .MAIN );
308+ collector .collect (regularFile .rootTree (), InputFile .Type .MAIN );
309+
310+ var telemetry = collector .getTelemetry ();
311+ assertThat (telemetry .totalMainLines ()).isEqualTo (10 );
312+ assertThat (telemetry .misclassifiedTestLines ()).isEqualTo (5 );
313+ }
228314}
229315
0 commit comments