Skip to content

Commit 75ffa31

Browse files
authored
fix(codewhisperer): Fix unreliable test in CodeWhisperer (#2873)
## Problem #2857 ## Solution The root cause is likely from concurrent test cases which reads & writes a single shared global variable. Replace global variable shared between multiple test cases with local variable for each test case.
1 parent 9fa7503 commit 75ffa31

File tree

1 file changed

+22
-37
lines changed

1 file changed

+22
-37
lines changed

src/test/codewhisperer/service/recommendationHandler.test.ts

Lines changed: 22 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ describe('recommendationHandler', function () {
3737
resetCodeWhispererGlobalVariables()
3838
mockClient.listRecommendations.resolves({})
3939
mockClient.generateRecommendations.resolves({})
40-
RecommendationHandler.instance.clearRecommendations()
4140
})
4241

4342
afterEach(function () {
@@ -56,16 +55,10 @@ describe('recommendationHandler', function () {
5655
},
5756
},
5857
}
59-
sinon.stub(RecommendationHandler.instance, 'getServerResponse').resolves(mockServerResult)
60-
await RecommendationHandler.instance.getRecommendations(
61-
mockClient,
62-
mockEditor,
63-
'AutoTrigger',
64-
config,
65-
'Enter',
66-
false
67-
)
68-
const actual = RecommendationHandler.instance.recommendations
58+
const handler = new RecommendationHandler()
59+
sinon.stub(handler, 'getServerResponse').resolves(mockServerResult)
60+
await handler.getRecommendations(mockClient, mockEditor, 'AutoTrigger', config, 'Enter', false)
61+
const actual = handler.recommendations
6962
const expected: RecommendationsList = [{ content: "print('Hello World!')" }, { content: '' }]
7063
assert.deepStrictEqual(actual, expected)
7164
})
@@ -82,17 +75,11 @@ describe('recommendationHandler', function () {
8275
},
8376
},
8477
}
85-
sinon.stub(RecommendationHandler.instance, 'getServerResponse').resolves(mockServerResult)
86-
await RecommendationHandler.instance.getRecommendations(
87-
mockClient,
88-
mockEditor,
89-
'AutoTrigger',
90-
config,
91-
'Enter',
92-
false
93-
)
94-
assert.strictEqual(RecommendationHandler.instance.requestId, 'test_request')
95-
assert.strictEqual(RecommendationHandler.instance.sessionId, 'test_request')
78+
const handler = new RecommendationHandler()
79+
sinon.stub(handler, 'getServerResponse').resolves(mockServerResult)
80+
await handler.getRecommendations(mockClient, mockEditor, 'AutoTrigger', config, 'Enter', false)
81+
assert.strictEqual(handler.requestId, 'test_request')
82+
assert.strictEqual(handler.sessionId, 'test_request')
9683
assert.strictEqual(TelemetryHelper.instance.triggerType, 'AutoTrigger')
9784
})
9885

@@ -108,17 +95,12 @@ describe('recommendationHandler', function () {
10895
},
10996
},
11097
}
111-
sinon.stub(RecommendationHandler.instance, 'getServerResponse').resolves(mockServerResult)
98+
const handler = new RecommendationHandler()
99+
sinon.stub(handler, 'getServerResponse').resolves(mockServerResult)
112100
sinon.stub(performance, 'now').returns(0.0)
113-
RecommendationHandler.instance.startPos = new vscode.Position(1, 0)
101+
handler.startPos = new vscode.Position(1, 0)
114102
TelemetryHelper.instance.cursorOffset = 2
115-
await RecommendationHandler.instance.getRecommendations(
116-
mockClient,
117-
mockEditor,
118-
'AutoTrigger',
119-
config,
120-
'Enter'
121-
)
103+
await handler.getRecommendations(mockClient, mockEditor, 'AutoTrigger', config, 'Enter')
122104
const assertTelemetry = assertTelemetryCurried('codewhisperer_serviceInvocation')
123105
assertTelemetry({
124106
codewhispererRequestId: 'test_request',
@@ -140,24 +122,27 @@ describe('recommendationHandler', function () {
140122
sinon.restore()
141123
})
142124
it('should return true if any response is not empty', function () {
143-
RecommendationHandler.instance.recommendations = [
125+
const handler = new RecommendationHandler()
126+
handler.recommendations = [
144127
{
145128
content:
146129
'\n // Use the console to output debug info…n of the command with the "command" variable',
147130
},
148131
{ content: '' },
149132
]
150-
assert.ok(RecommendationHandler.instance.isValidResponse())
133+
assert.ok(handler.isValidResponse())
151134
})
152135

153136
it('should return false if response is empty', function () {
154-
RecommendationHandler.instance.recommendations = []
155-
assert.ok(!RecommendationHandler.instance.isValidResponse())
137+
const handler = new RecommendationHandler()
138+
handler.recommendations = []
139+
assert.ok(!handler.isValidResponse())
156140
})
157141

158142
it('should return false if all response has no string length', function () {
159-
RecommendationHandler.instance.recommendations = [{ content: '' }, { content: '' }]
160-
assert.ok(!RecommendationHandler.instance.isValidResponse())
143+
const handler = new RecommendationHandler()
144+
handler.recommendations = [{ content: '' }, { content: '' }]
145+
assert.ok(!handler.isValidResponse())
161146
})
162147
})
163148
})

0 commit comments

Comments
 (0)