Skip to content

Commit 9b60870

Browse files
committed
fix unit test
1 parent b1a1699 commit 9b60870

File tree

4 files changed

+51
-25
lines changed

4 files changed

+51
-25
lines changed

src/codewhisperer/commands/onAcceptance.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,10 +66,12 @@ export async function onAcceptance(acceptanceEntry: OnRecommendationAcceptanceEn
6666
completionType: acceptanceEntry.completionType,
6767
language: languageContext.language,
6868
})
69-
const codeRangeAfterFormat = new vscode.Range(start, acceptanceEntry.editor.selection.active)
69+
// use the effective range of accepted recommendation
70+
// to avoid counting typeahead in accepted tokens
71+
const insertedCoderange = new vscode.Range(acceptanceEntry.effectiveRange.start, end)
7072
CodeWhispererCodeCoverageTracker.getTracker(languageContext.language)?.countAcceptedTokens(
71-
codeRangeAfterFormat,
72-
acceptanceEntry.editor.document.getText(codeRangeAfterFormat),
73+
insertedCoderange,
74+
acceptanceEntry.editor.document.getText(insertedCoderange),
7375
acceptanceEntry.editor.document.fileName
7476
)
7577
if (acceptanceEntry.references !== undefined) {

src/codewhisperer/commands/onInlineAcceptance.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -116,10 +116,12 @@ export async function onInlineAcceptance(
116116
completionType: acceptanceEntry.completionType,
117117
language: languageContext.language,
118118
})
119-
const codeRangeAfterFormat = new vscode.Range(start, acceptanceEntry.editor.selection.active)
119+
// use the effective range of accepted recommendation
120+
// to avoid counting typeahead in accepted tokens
121+
const insertedCoderange = new vscode.Range(acceptanceEntry.effectiveRange.start, end)
120122
CodeWhispererCodeCoverageTracker.getTracker(languageContext.language, globalStorage)?.countAcceptedTokens(
121-
codeRangeAfterFormat,
122-
acceptanceEntry.editor.document.getText(codeRangeAfterFormat),
123+
insertedCoderange,
124+
acceptanceEntry.editor.document.getText(insertedCoderange),
123125
acceptanceEntry.editor.document.fileName
124126
)
125127
if (acceptanceEntry.references !== undefined) {

src/codewhisperer/tracker/codewhispererCodeCoverageTracker.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -59,15 +59,6 @@ export class CodeWhispererCodeCoverageTracker {
5959
return TelemetryHelper.instance.isTelemetryEnabled() && AuthUtil.instance.isConnected()
6060
}
6161

62-
public countAcceptedTokens(range: vscode.Range, text: string, filename: string) {
63-
if (!this.isActive()) {
64-
return
65-
}
66-
// generate accepted recommendation token and stored in collection
67-
this.addAcceptedTokens(filename, { range: range, text: text, accepted: text.length })
68-
this.addTotalTokens(filename, text.length)
69-
}
70-
7162
public incrementServiceInvocationCount() {
7263
this._serviceInvocationCount += 1
7364
}
@@ -238,6 +229,15 @@ export class CodeWhispererCodeCoverageTracker {
238229
}
239230
}
240231

232+
public countAcceptedTokens(range: vscode.Range, text: string, filename: string) {
233+
if (!this.isActive()) {
234+
return
235+
}
236+
// generate accepted recommendation token and stored in collection
237+
this.addAcceptedTokens(filename, { range: range, text: text, accepted: text.length })
238+
this.addTotalTokens(filename, text.length)
239+
}
240+
241241
public countTotalTokens(e: vscode.TextDocumentChangeEvent) {
242242
// ignore no contentChanges. ignore contentChanges from other plugins (formatters)
243243
// only include contentChanges from user keystroke input(one character input).

src/test/codewhisperer/tracker/codewhispererCodeCoverageTracker.test.ts

Lines changed: 32 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,14 @@ describe('codewhispererCodecoverageTracker', function () {
206206
accepted: 1,
207207
})
208208
})
209+
it('Should increase TotalTokens', function () {
210+
if (!tracker) {
211+
assert.fail()
212+
}
213+
tracker.countAcceptedTokens(new vscode.Range(0, 0, 0, 1), 'a', 'test.py')
214+
tracker.countAcceptedTokens(new vscode.Range(0, 0, 0, 1), 'b', 'test.py')
215+
assert.deepStrictEqual(tracker.totalTokens['test.py'], 2)
216+
})
209217
})
210218

211219
describe('countTotalTokens', function () {
@@ -224,7 +232,7 @@ describe('codewhispererCodecoverageTracker', function () {
224232
CodeWhispererCodeCoverageTracker.instances.clear()
225233
})
226234

227-
it('Should skip when user copy large files', function () {
235+
it('Should skip when content change size is not 1', function () {
228236
if (!tracker) {
229237
assert.fail()
230238
}
@@ -266,7 +274,7 @@ describe('codewhispererCodecoverageTracker', function () {
266274
assert.ok(!startedSpy.called)
267275
})
268276

269-
it('Should reduce tokens when delete', function () {
277+
it('Should not reduce tokens when delete', function () {
270278
if (!tracker) {
271279
assert.fail()
272280
}
@@ -276,14 +284,26 @@ describe('codewhispererCodecoverageTracker', function () {
276284
document: doc,
277285
contentChanges: [
278286
{
279-
range: new vscode.Range(0, 0, 0, 3),
287+
range: new vscode.Range(0, 0, 0, 1),
280288
rangeOffset: 0,
281289
rangeLength: 0,
282-
text: 'aaa',
290+
text: 'a',
283291
},
284292
],
285293
})
286-
assert.strictEqual(tracker?.totalTokens[doc.fileName], 3)
294+
tracker.countTotalTokens({
295+
reason: undefined,
296+
document: doc,
297+
contentChanges: [
298+
{
299+
range: new vscode.Range(0, 0, 0, 1),
300+
rangeOffset: 0,
301+
rangeLength: 0,
302+
text: 'b',
303+
},
304+
],
305+
})
306+
assert.strictEqual(tracker?.totalTokens[doc.fileName], 2)
287307
tracker.countTotalTokens({
288308
reason: undefined,
289309
document: doc,
@@ -296,7 +316,7 @@ describe('codewhispererCodecoverageTracker', function () {
296316
},
297317
],
298318
})
299-
assert.strictEqual(tracker?.totalTokens[doc.fileName], 3)
319+
assert.strictEqual(tracker?.totalTokens[doc.fileName], 2)
300320
})
301321

302322
it('Should add tokens when type', function () {
@@ -381,21 +401,21 @@ describe('codewhispererCodecoverageTracker', function () {
381401
const tracker = CodeWhispererCodeCoverageTracker.getTracker(language)
382402

383403
const assertTelemetry = assertTelemetryCurried('codewhisperer_codePercentage')
404+
tracker?.incrementServiceInvocationCount()
384405
tracker?.addAcceptedTokens(`test.py`, { range: new vscode.Range(0, 0, 0, 7), text: `print()`, accepted: 7 })
385406
tracker?.addTotalTokens(`test.py`, 100)
386407
tracker?.emitCodeWhispererCodeContribution()
387-
388408
assertTelemetry({
389409
codewhispererTotalTokens: 100,
390410
codewhispererLanguage: language,
391411
codewhispererAcceptedTokens: 7,
392412
codewhispererPercentage: 7,
393-
successCount: 0,
413+
successCount: 1,
394414
codewhispererUserGroup: 'Control',
395415
})
396416
})
397417

398-
it('should emit correct code coverage telemetry in java file', async function () {
418+
it('should emit correct code coverage telemetry when success count = 0', async function () {
399419
await globals.context.globalState.update(CodeWhispererConstants.userGroupKey, {
400420
group: CodeWhispererConstants.UserGroup.Control,
401421
version: extensionVersion,
@@ -409,14 +429,16 @@ describe('codewhispererCodecoverageTracker', function () {
409429
text: `public static main`,
410430
accepted: 18,
411431
})
432+
tracker?.incrementServiceInvocationCount()
433+
tracker?.incrementServiceInvocationCount()
412434
tracker?.addTotalTokens(`test.java`, 30)
413435
tracker?.emitCodeWhispererCodeContribution()
414436
assertTelemetry({
415437
codewhispererTotalTokens: 30,
416438
codewhispererLanguage: 'java',
417439
codewhispererAcceptedTokens: 18,
418440
codewhispererPercentage: 60,
419-
successCount: 0,
441+
successCount: 2,
420442
codewhispererUserGroup: 'Control',
421443
})
422444
})

0 commit comments

Comments
 (0)