Skip to content

Commit 8bd9000

Browse files
authored
added unittests for parser and checker threads (#393)
* added unittest for threads * update CHANGES.md * revert coverage line calculation change
1 parent 10d976b commit 8bd9000

File tree

5 files changed

+112
-1
lines changed

5 files changed

+112
-1
lines changed

CHANGES.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
## next version (2.x.x)
22

33
- Fixed handling of default setters/getters in indentation check [#391](https://github.com/HaxeCheckstyle/haxe-checkstyle/issues/391)
4+
- Added unittests for ParserQueue and CheckerPool [#393](https://github.com/HaxeCheckstyle/haxe-checkstyle/issues/393)
45
- Improved wrapped code detection [#392](https://github.com/HaxeCheckstyle/haxe-checkstyle/issues/392)
56

67
## version 2.2.1

src/checkstyle/ParserQueue.hx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ class ParserQueue {
2525
}
2626

2727
public function start(max:Int) {
28+
if (max <= 0) max = 1;
2829
maxPreparse = max;
2930
checkers = [];
3031
Thread.create(runParser);

test/TestMain.hx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ class TestMain {
5151

5252
var missingStatements:Array<Statement> = cls.getMissingStatements();
5353
for (stmt in missingStatements) {
54-
for (line in stmt.lines) coverageData[line + 1] = 0;
54+
for (line in stmt.lines) coverageData[line] = 0;
5555
}
5656
var missingBranches:Array<Branch> = cls.getMissingBranches();
5757
for (branch in missingBranches) {

test/TestSuite.hx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import checks.CheckTestCase;
2+
import misc.ThreadTest;
23
import token.TokenTreeBuilderTest;
34
import token.TokenTreeBuilderParsingTest;
45

@@ -11,6 +12,7 @@ class TestSuite extends massive.munit.TestSuite {
1112

1213
add(TokenTreeBuilderTest);
1314
add(TokenTreeBuilderParsingTest);
15+
add(ThreadTest);
1416

1517
var tests = CompileTime.getAllClasses(CheckTestCase);
1618
for (testClass in tests) add(testClass);

test/misc/ThreadTest.hx

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
package misc;
2+
3+
import checkstyle.CheckFile;
4+
import checkstyle.reporter.ReporterManager;
5+
import checkstyle.Checker;
6+
import checkstyle.ParserQueue;
7+
import checkstyle.CheckerPool;
8+
import checkstyle.checks.whitespace.IndentationCheck;
9+
import checks.whitespace.IndentationCheckTest.IndentationCheckTests;
10+
11+
import checks.CheckTestCase.TestReporter;
12+
13+
import massive.munit.Assert;
14+
15+
class ThreadTest {
16+
17+
static inline var FILE_NAME:String = "Test.hx";
18+
19+
var checker:Checker;
20+
var reporter:TestReporter;
21+
22+
@Before
23+
public function setup() {
24+
checker = setupChecker();
25+
reporter = new TestReporter();
26+
ReporterManager.INSTANCE.clear();
27+
ReporterManager.INSTANCE.addReporter(reporter);
28+
}
29+
30+
@Test
31+
public function testParserQueue() {
32+
var files:Array<CheckFile> = setupFiles(13);
33+
34+
var parseQueue = new ParserQueue(files, checker);
35+
parseQueue.start (1);
36+
Assert.isFalse(parseQueue.isFinished());
37+
38+
Sys.sleep(1);
39+
var failCount:Int = 0;
40+
var count:Int = 0;
41+
Assert.isFalse(parseQueue.isFinished());
42+
while (true) {
43+
if (failCount > 8) Assert.fail("parsing failed");
44+
var newChecker = parseQueue.nextFile();
45+
if (newChecker == null) {
46+
failCount++;
47+
Sys.sleep(1);
48+
continue;
49+
}
50+
count++;
51+
if (count == 13) break;
52+
}
53+
Assert.isTrue(parseQueue.isFinished());
54+
Assert.areEqual(13, count);
55+
Assert.isNull(parseQueue.nextFile());
56+
}
57+
58+
@Test
59+
public function testCheckerPool() {
60+
var files:Array<CheckFile> = setupFiles(13);
61+
62+
var parseQueue = new ParserQueue(files, checker);
63+
parseQueue.start (1);
64+
65+
var checkerPool = new CheckerPool(parseQueue, checker, null);
66+
checkerPool.start (5);
67+
Assert.isFalse(parseQueue.isFinished());
68+
Assert.isFalse(checkerPool.isFinished());
69+
70+
Sys.sleep(1);
71+
var failCount:Int = 0;
72+
while (true) {
73+
if (failCount > 5) Assert.fail("parsing failed");
74+
if (parseQueue.isFinished() && checkerPool.isFinished()) break;
75+
failCount++;
76+
Sys.sleep(1);
77+
}
78+
Assert.isTrue(parseQueue.isFinished());
79+
Assert.isTrue(checkerPool.isFinished());
80+
Assert.isNull(parseQueue.nextFile());
81+
}
82+
83+
function setupFiles(count:Int):Array<CheckFile> {
84+
var files:Array<CheckFile> = [];
85+
for (i in 0...count) {
86+
files.push({
87+
name: 'test_$i.hx',
88+
content: IndentationCheckTests.CORRECT_TAB_INDENT,
89+
index: i
90+
});
91+
}
92+
return files;
93+
}
94+
95+
function setupChecker():Checker {
96+
var newChecker:Checker = new Checker();
97+
newChecker.addCheck(new IndentationCheck());
98+
99+
return newChecker;
100+
}
101+
102+
@After
103+
public function tearDown() {
104+
checker = null;
105+
reporter = null;
106+
}
107+
}

0 commit comments

Comments
 (0)