Merge from vscode a348d103d1256a06a2c9b3f9b406298a9fef6898 (#15681)

* Merge from vscode a348d103d1256a06a2c9b3f9b406298a9fef6898

* Fixes and cleanup

* Distro

* Fix hygiene yarn

* delete no yarn lock changes file

* Fix hygiene

* Fix layer check

* Fix CI

* Skip lib checks

* Remove tests deleted in vs code

* Fix tests

* Distro

* Fix tests and add removed extension point

* Skip failing notebook tests for now

* Disable broken tests and cleanup build folder

* Update yarn.lock and fix smoke tests

* Bump sqlite

* fix contributed actions and file spacing

* Fix user data path

* Update yarn.locks

Co-authored-by: ADS Merger <karlb@microsoft.com>
This commit is contained in:
Charles Gagnon
2021-06-17 08:17:11 -07:00
committed by GitHub
parent fdcb97c7f7
commit 3cb2f552a6
2582 changed files with 124827 additions and 87099 deletions

View File

@@ -8,7 +8,7 @@ import { globals } from 'vs/base/common/platform';
import BaseErrorTelemetry, { ErrorEvent } from 'vs/platform/telemetry/common/errorTelemetry';
export default class ErrorTelemetry extends BaseErrorTelemetry {
protected installErrorListeners(): void {
protected override installErrorListeners(): void {
let oldOnError: Function;
let that = this;
if (typeof globals.onerror === 'function') {

View File

@@ -4,7 +4,7 @@
*--------------------------------------------------------------------------------------------*/
import { IFileService } from 'vs/platform/files/common/files';
import { isLinuxSnap, PlatformToString, platform } from 'vs/base/common/platform';
import { isLinuxSnap, PlatformToString, platform, Platform } from 'vs/base/common/platform';
import { platform as nodePlatform, env } from 'vs/base/common/process';
import { generateUuid } from 'vs/base/common/uuid';
import { URI } from 'vs/base/common/uri';
@@ -12,9 +12,18 @@ import { URI } from 'vs/base/common/uri';
import product from 'vs/platform/product/common/product'; // {{SQL CARBON EDIT}}
const productObject = product; // {{SQL CARBON EDIT}}
function getPlatformDetail(hostname: string): string | undefined {
if (platform === Platform.Linux && /^penguin(\.|$)/i.test(hostname)) {
return 'chromebook';
}
return undefined;
}
export async function resolveCommonProperties(
fileService: IFileService,
release: string,
hostname: string,
arch: string,
commit: string | undefined,
version: string | undefined,
@@ -77,6 +86,13 @@ export async function resolveCommonProperties(
result['common.snap'] = 'true';
}
const platformDetail = getPlatformDetail(hostname);
if (platformDetail) {
// __GDPR__COMMON__ "common.platformDetail" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" }
result['common.platformDetail'] = platformDetail;
}
try {
const contents = await fileService.readFile(URI.file(installSourcePath));

View File

@@ -12,6 +12,7 @@ export interface ITelemetryInfo {
sessionId: string;
machineId: string;
instanceId: string;
firstSessionDate: string;
msftInternal?: boolean;
}
@@ -51,6 +52,21 @@ export interface ITelemetryService {
isOptedIn: boolean;
}
export interface ITelemetryEndpoint {
id: string;
aiKey: string;
sendErrorTelemetry: boolean;
}
export const ICustomEndpointTelemetryService = createDecorator<ICustomEndpointTelemetryService>('customEndpointTelemetryService');
export interface ICustomEndpointTelemetryService {
readonly _serviceBrand: undefined;
publicLog(endpoint: ITelemetryEndpoint, eventName: string, data?: ITelemetryData): Promise<void>;
publicLogError(endpoint: ITelemetryEndpoint, errorEventName: string, data?: ITelemetryData): Promise<void>;
}
// Keys
export const instanceStorageKey = 'telemetry.instanceId';
export const currentSessionDateStorageKey = 'telemetry.currentSessionDate';

View File

@@ -17,7 +17,7 @@ export class TelemetryLogAppender extends Disposable implements ITelemetryAppend
@IEnvironmentService environmentService: IEnvironmentService
) {
super();
this.logger = this._register(loggerService.getLogger(environmentService.telemetryLogResource));
this.logger = this._register(loggerService.createLogger(environmentService.telemetryLogResource));
this.logger.info('The below are logs for every telemetry event sent from VS Code once the log level is set to trace.');
this.logger.info('===========================================================');
}

View File

@@ -10,7 +10,7 @@ import { ITelemetryService, ITelemetryInfo, ITelemetryData } from 'vs/platform/t
import { ITelemetryAppender } from 'vs/platform/telemetry/common/telemetryUtils';
import { optional } from 'vs/platform/instantiation/common/instantiation';
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
import { IConfigurationRegistry, Extensions } from 'vs/platform/configuration/common/configurationRegistry';
import { IConfigurationRegistry, Extensions, ConfigurationScope } from 'vs/platform/configuration/common/configurationRegistry';
import { DisposableStore } from 'vs/base/common/lifecycle';
import { cloneAndChange, mixin } from 'vs/base/common/objects';
import { Registry } from 'vs/platform/registry/common/platform';
@@ -105,9 +105,10 @@ export class TelemetryService implements ITelemetryService {
let sessionId = values['sessionID'];
let instanceId = values['common.instanceId'];
let machineId = values['common.machineId'];
let firstSessionDate = values['common.firstSessionDate'];
let msftInternal = values['common.msftInternal'];
return { sessionId, instanceId, machineId, msftInternal };
return { sessionId, instanceId, machineId, firstSessionDate, msftInternal };
}
dispose(): void {
@@ -222,6 +223,8 @@ Registry.as<IConfigurationRegistry>(Extensions.Configuration).registerConfigurat
localize('telemetry.enableTelemetry', "Enable usage data and errors to be sent to a Microsoft online service.") :
localize('telemetry.enableTelemetryMd', "Enable usage data and errors to be sent to a Microsoft online service. Read our privacy statement [here]({0}).", product.privacyStatementUrl),
'default': true,
'restricted': true,
'scope': ConfigurationScope.APPLICATION,
'tags': ['usesOnlineServices']
}
}

View File

@@ -5,7 +5,7 @@
import { IDisposable } from 'vs/base/common/lifecycle';
import { IConfigurationService, ConfigurationTarget, ConfigurationTargetToString } from 'vs/platform/configuration/common/configuration';
import { ITelemetryService, ITelemetryInfo, ITelemetryData } from 'vs/platform/telemetry/common/telemetry';
import { ITelemetryService, ITelemetryInfo, ITelemetryData, ICustomEndpointTelemetryService, ITelemetryEndpoint } from 'vs/platform/telemetry/common/telemetry';
import { ClassifiedEvent, StrictPropertyCheck, GDPRClassification } from 'vs/platform/telemetry/common/gdprTypings';
import { safeStringify } from 'vs/base/common/objects';
import { isObject } from 'vs/base/common/types';
@@ -35,11 +35,24 @@ export const NullTelemetryService = new class implements ITelemetryService {
return Promise.resolve({
instanceId: 'someValue.instanceId',
sessionId: 'someValue.sessionId',
machineId: 'someValue.machineId'
machineId: 'someValue.machineId',
firstSessionDate: 'someValue.firstSessionDate'
});
}
};
export class NullEndpointTelemetryService implements ICustomEndpointTelemetryService {
_serviceBrand: undefined;
async publicLog(_endpoint: ITelemetryEndpoint, _eventName: string, _data?: ITelemetryData): Promise<void> {
// noop
}
async publicLogError(_endpoint: ITelemetryEndpoint, _errorEventName: string, _data?: ITelemetryData): Promise<void> {
// noop
}
}
export interface ITelemetryAppender {
log(eventName: string, data: any): void;
flush(): Promise<any>;

View File

@@ -0,0 +1,9 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { registerSharedProcessRemoteService } from 'vs/platform/ipc/electron-sandbox/services';
import { ICustomEndpointTelemetryService } from 'vs/platform/telemetry/common/telemetry';
registerSharedProcessRemoteService(ICustomEndpointTelemetryService, 'customEndpointTelemetry', { supportsDelayedInstantiation: true });

View File

@@ -0,0 +1,65 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { Client as TelemetryClient } from 'vs/base/parts/ipc/node/ipc.cp';
import { TelemetryAppenderClient } from 'vs/platform/telemetry/common/telemetryIpc';
import { FileAccess } from 'vs/base/common/network';
import { TelemetryService } from 'vs/platform/telemetry/common/telemetryService';
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
import { ICustomEndpointTelemetryService, ITelemetryData, ITelemetryEndpoint, ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
export class CustomEndpointTelemetryService implements ICustomEndpointTelemetryService {
declare readonly _serviceBrand: undefined;
private customTelemetryServices = new Map<string, ITelemetryService>();
constructor(
@IConfigurationService private readonly configurationService: IConfigurationService,
@ITelemetryService private readonly telemetryService: ITelemetryService
) { }
private async getCustomTelemetryService(endpoint: ITelemetryEndpoint): Promise<ITelemetryService> {
if (!this.customTelemetryServices.has(endpoint.id)) {
const { machineId, sessionId } = await this.telemetryService.getTelemetryInfo();
const telemetryInfo: { [key: string]: string } = Object.create(null);
telemetryInfo['common.vscodemachineid'] = machineId;
telemetryInfo['common.vscodesessionid'] = sessionId;
const args = [endpoint.id, JSON.stringify(telemetryInfo), endpoint.aiKey];
const client = new TelemetryClient(
FileAccess.asFileUri('bootstrap-fork', require).fsPath,
{
serverName: 'Debug Telemetry',
timeout: 1000 * 60 * 5,
args,
env: {
ELECTRON_RUN_AS_NODE: 1,
VSCODE_PIPE_LOGGING: 'true',
VSCODE_AMD_ENTRYPOINT: 'vs/workbench/contrib/debug/node/telemetryApp'
}
}
);
const channel = client.getChannel('telemetryAppender');
const appender = new TelemetryAppenderClient(channel);
this.customTelemetryServices.set(endpoint.id, new TelemetryService({
appender,
sendErrorTelemetry: endpoint.sendErrorTelemetry
}, this.configurationService));
}
return this.customTelemetryServices.get(endpoint.id)!;
}
async publicLog(telemetryEndpoint: ITelemetryEndpoint, eventName: string, data?: ITelemetryData): Promise<void> {
const customTelemetryService = await this.getCustomTelemetryService(telemetryEndpoint);
await customTelemetryService.publicLog(eventName, data);
}
async publicLogError(telemetryEndpoint: ITelemetryEndpoint, errorEventName: string, data?: ITelemetryData): Promise<void> {
const customTelemetryService = await this.getCustomTelemetryService(telemetryEndpoint);
await customTelemetryService.publicLogError(errorEventName, data);
}
}

View File

@@ -7,7 +7,7 @@ import { onUnexpectedError, setUnexpectedErrorHandler } from 'vs/base/common/err
import BaseErrorTelemetry from 'vs/platform/telemetry/common/errorTelemetry';
export default class ErrorTelemetry extends BaseErrorTelemetry {
protected installErrorListeners(): void {
protected override installErrorListeners(): void {
setUnexpectedErrorHandler(err => console.error(err));
// Print a console message when rejection isn't handled within N seconds. For details:

View File

@@ -90,10 +90,10 @@ suite('TelemetryService', () => {
let service = new TelemetryService({ appender: testAppender }, undefined!);
return service.publicLog('testPrivateEvent').then(() => {
assert.equal(testAppender.getEventsCount(), 1);
assert.strictEqual(testAppender.getEventsCount(), 1);
service.dispose();
assert.equal(!testAppender.isDisposed, true);
assert.strictEqual(!testAppender.isDisposed, true);
});
}));
@@ -103,9 +103,9 @@ suite('TelemetryService', () => {
let service = new TelemetryService({ appender: testAppender }, undefined!);
return service.publicLog('testEvent').then(_ => {
assert.equal(testAppender.getEventsCount(), 1);
assert.equal(testAppender.events[0].eventName, 'testEvent');
assert.notEqual(testAppender.events[0].data, null);
assert.strictEqual(testAppender.getEventsCount(), 1);
assert.strictEqual(testAppender.events[0].eventName, 'testEvent');
assert.notStrictEqual(testAppender.events[0].data, null);
service.dispose();
});
@@ -123,13 +123,13 @@ suite('TelemetryService', () => {
'value': 0
}
}).then(() => {
assert.equal(testAppender.getEventsCount(), 1);
assert.equal(testAppender.events[0].eventName, 'testEvent');
assert.notEqual(testAppender.events[0].data, null);
assert.equal(testAppender.events[0].data['stringProp'], 'property');
assert.equal(testAppender.events[0].data['numberProp'], 1);
assert.equal(testAppender.events[0].data['booleanProp'], true);
assert.equal(testAppender.events[0].data['complexProp'].value, 0);
assert.strictEqual(testAppender.getEventsCount(), 1);
assert.strictEqual(testAppender.events[0].eventName, 'testEvent');
assert.notStrictEqual(testAppender.events[0].data, null);
assert.strictEqual(testAppender.events[0].data['stringProp'], 'property');
assert.strictEqual(testAppender.events[0].data['numberProp'], 1);
assert.strictEqual(testAppender.events[0].data['booleanProp'], true);
assert.strictEqual(testAppender.events[0].data['complexProp'].value, 0);
service.dispose();
});
@@ -146,9 +146,9 @@ suite('TelemetryService', () => {
return service.publicLog('testEvent').then(_ => {
let [first] = testAppender.events;
assert.equal(Object.keys(first.data).length, 2);
assert.equal(typeof first.data['foo'], 'string');
assert.equal(typeof first.data['bar'], 'number');
assert.strictEqual(Object.keys(first.data).length, 2);
assert.strictEqual(typeof first.data['foo'], 'string');
assert.strictEqual(typeof first.data['bar'], 'number');
service.dispose();
});
@@ -164,11 +164,11 @@ suite('TelemetryService', () => {
return service.publicLog('testEvent', { hightower: 'xl', price: 8000 }).then(_ => {
let [first] = testAppender.events;
assert.equal(Object.keys(first.data).length, 4);
assert.equal(typeof first.data['foo'], 'string');
assert.equal(typeof first.data['bar'], 'number');
assert.equal(typeof first.data['hightower'], 'string');
assert.equal(typeof first.data['price'], 'number');
assert.strictEqual(Object.keys(first.data).length, 4);
assert.strictEqual(typeof first.data['foo'], 'string');
assert.strictEqual(typeof first.data['bar'], 'number');
assert.strictEqual(typeof first.data['hightower'], 'string');
assert.strictEqual(typeof first.data['price'], 'number');
service.dispose();
});
@@ -185,9 +185,9 @@ suite('TelemetryService', () => {
}, undefined!);
return service.getTelemetryInfo().then(info => {
assert.equal(info.sessionId, 'one');
assert.equal(info.instanceId, 'two');
assert.equal(info.machineId, 'three');
assert.strictEqual(info.sessionId, 'one');
assert.strictEqual(info.instanceId, 'two');
assert.strictEqual(info.machineId, 'three');
service.dispose();
});
@@ -198,8 +198,8 @@ suite('TelemetryService', () => {
let service = new TelemetryService({ appender: testAppender }, undefined!);
return service.publicLog('testEvent').then(() => {
assert.equal(testAppender.getEventsCount(), 1);
assert.equal(testAppender.events[0].eventName, 'testEvent');
assert.strictEqual(testAppender.getEventsCount(), 1);
assert.strictEqual(testAppender.events[0].eventName, 'testEvent');
service.dispose();
});
@@ -217,7 +217,7 @@ suite('TelemetryService', () => {
return Promise.all(this.promises);
}
publicLog(eventName: string, data?: ITelemetryData, anonymizeFilePaths?: boolean): Promise<void> {
override publicLog(eventName: string, data?: ITelemetryData, anonymizeFilePaths?: boolean): Promise<void> {
let p = super.publicLog(eventName, data, anonymizeFilePaths);
this.promises.push(p);
return p;
@@ -245,9 +245,9 @@ suite('TelemetryService', () => {
this.clock.tick(ErrorTelemetry.ERROR_FLUSH_TIMEOUT);
await service.join();
assert.equal(testAppender.getEventsCount(), 1);
assert.equal(testAppender.events[0].eventName, 'UnhandledError');
assert.equal(testAppender.events[0].data.msg, 'This is a test.');
assert.strictEqual(testAppender.getEventsCount(), 1);
assert.strictEqual(testAppender.events[0].eventName, 'UnhandledError');
assert.strictEqual(testAppender.events[0].data.msg, 'This is a test.');
errorTelemetry.dispose();
service.dispose();
@@ -275,9 +275,9 @@ suite('TelemetryService', () => {
// // allow for the promise to finish
// this.clock.tick(MainErrorTelemetry.ERROR_FLUSH_TIMEOUT);
//
// assert.equal(testAppender.getEventsCount(), 1);
// assert.equal(testAppender.events[0].eventName, 'UnhandledError');
// assert.equal(testAppender.events[0].data.msg, 'This should get logged');
// assert.strictEqual(testAppender.getEventsCount(), 1);
// assert.strictEqual(testAppender.events[0].eventName, 'UnhandledError');
// assert.strictEqual(testAppender.events[0].data.msg, 'This should get logged');
//
// service.dispose();
// } finally {
@@ -298,16 +298,16 @@ suite('TelemetryService', () => {
this.clock.tick(ErrorTelemetry.ERROR_FLUSH_TIMEOUT);
await service.join();
assert.equal(errorStub.alwaysCalledWithExactly('Error Message', 'file.js', 2, 42, testError), true);
assert.equal(errorStub.callCount, 1);
assert.strictEqual(errorStub.alwaysCalledWithExactly('Error Message', 'file.js', 2, 42, testError), true);
assert.strictEqual(errorStub.callCount, 1);
assert.equal(testAppender.getEventsCount(), 1);
assert.equal(testAppender.events[0].eventName, 'UnhandledError');
assert.equal(testAppender.events[0].data.msg, 'Error Message');
assert.equal(testAppender.events[0].data.file, 'file.js');
assert.equal(testAppender.events[0].data.line, 2);
assert.equal(testAppender.events[0].data.column, 42);
assert.equal(testAppender.events[0].data.uncaught_error_msg, 'test');
assert.strictEqual(testAppender.getEventsCount(), 1);
assert.strictEqual(testAppender.events[0].eventName, 'UnhandledError');
assert.strictEqual(testAppender.events[0].data.msg, 'Error Message');
assert.strictEqual(testAppender.events[0].data.file, 'file.js');
assert.strictEqual(testAppender.events[0].data.line, 2);
assert.strictEqual(testAppender.events[0].data.column, 42);
assert.strictEqual(testAppender.events[0].data.uncaught_error_msg, 'test');
errorTelemetry.dispose();
service.dispose();
@@ -328,9 +328,9 @@ suite('TelemetryService', () => {
this.clock.tick(ErrorTelemetry.ERROR_FLUSH_TIMEOUT);
await service.join();
assert.equal(errorStub.callCount, 1);
assert.equal(testAppender.events[0].data.file.indexOf(settings.dangerousPathWithImportantInfo.replace(settings.personalInfo, personInfoWithSpaces)), -1);
assert.equal(testAppender.events[0].data.file, settings.importantInfo + '/test.js');
assert.strictEqual(errorStub.callCount, 1);
assert.strictEqual(testAppender.events[0].data.file.indexOf(settings.dangerousPathWithImportantInfo.replace(settings.personalInfo, personInfoWithSpaces)), -1);
assert.strictEqual(testAppender.events[0].data.file, settings.importantInfo + '/test.js');
errorTelemetry.dispose();
service.dispose();
@@ -350,8 +350,8 @@ suite('TelemetryService', () => {
(<any>window.onerror)('dangerousFilename', settings.dangerousPathWithImportantInfo + '/test.js', 2, 42, dangerousFilenameError);
clock.tick(ErrorTelemetry.ERROR_FLUSH_TIMEOUT);
return service.join().then(() => {
assert.equal(errorStub.callCount, 1);
assert.equal(testAppender.events[0].data.file.indexOf(settings.dangerousPathWithImportantInfo), -1);
assert.strictEqual(errorStub.callCount, 1);
assert.strictEqual(testAppender.events[0].data.file.indexOf(settings.dangerousPathWithImportantInfo), -1);
dangerousFilenameError = new Error('dangerousFilename');
dangerousFilenameError.stack = settings.stack;
@@ -359,9 +359,9 @@ suite('TelemetryService', () => {
clock.tick(ErrorTelemetry.ERROR_FLUSH_TIMEOUT);
return service.join();
}).then(() => {
assert.equal(errorStub.callCount, 2);
assert.equal(testAppender.events[0].data.file.indexOf(settings.dangerousPathWithImportantInfo), -1);
assert.equal(testAppender.events[0].data.file, settings.importantInfo + '/test.js');
assert.strictEqual(errorStub.callCount, 2);
assert.strictEqual(testAppender.events[0].data.file.indexOf(settings.dangerousPathWithImportantInfo), -1);
assert.strictEqual(testAppender.events[0].data.file, settings.importantInfo + '/test.js');
errorTelemetry.dispose();
service.dispose();
@@ -383,13 +383,13 @@ suite('TelemetryService', () => {
this.clock.tick(ErrorTelemetry.ERROR_FLUSH_TIMEOUT);
await service.join();
assert.equal(testAppender.events[0].data.msg.indexOf(settings.personalInfo), -1);
assert.equal(testAppender.events[0].data.msg.indexOf(settings.filePrefix), -1);
assert.strictEqual(testAppender.events[0].data.msg.indexOf(settings.personalInfo), -1);
assert.strictEqual(testAppender.events[0].data.msg.indexOf(settings.filePrefix), -1);
assert.equal(testAppender.events[0].data.callstack.indexOf(settings.personalInfo), -1);
assert.equal(testAppender.events[0].data.callstack.indexOf(settings.filePrefix), -1);
assert.notEqual(testAppender.events[0].data.callstack.indexOf(settings.stack[4].replace(settings.randomUserFile, settings.anonymizedRandomUserFile)), -1);
assert.equal(testAppender.events[0].data.callstack.split('\n').length, settings.stack.length);
assert.strictEqual(testAppender.events[0].data.callstack.indexOf(settings.personalInfo), -1);
assert.strictEqual(testAppender.events[0].data.callstack.indexOf(settings.filePrefix), -1);
assert.notStrictEqual(testAppender.events[0].data.callstack.indexOf(settings.stack[4].replace(settings.randomUserFile, settings.anonymizedRandomUserFile)), -1);
assert.strictEqual(testAppender.events[0].data.callstack.split('\n').length, settings.stack.length);
errorTelemetry.dispose();
service.dispose();
@@ -413,14 +413,14 @@ suite('TelemetryService', () => {
this.clock.tick(ErrorTelemetry.ERROR_FLUSH_TIMEOUT);
await service.join();
assert.equal(errorStub.callCount, 1);
assert.strictEqual(errorStub.callCount, 1);
// Test that no file information remains, esp. personal info
assert.equal(testAppender.events[0].data.msg.indexOf(settings.personalInfo), -1);
assert.equal(testAppender.events[0].data.msg.indexOf(settings.filePrefix), -1);
assert.equal(testAppender.events[0].data.callstack.indexOf(settings.personalInfo), -1);
assert.equal(testAppender.events[0].data.callstack.indexOf(settings.filePrefix), -1);
assert.notEqual(testAppender.events[0].data.callstack.indexOf(settings.stack[4].replace(settings.randomUserFile, settings.anonymizedRandomUserFile)), -1);
assert.equal(testAppender.events[0].data.callstack.split('\n').length, settings.stack.length);
assert.strictEqual(testAppender.events[0].data.msg.indexOf(settings.personalInfo), -1);
assert.strictEqual(testAppender.events[0].data.msg.indexOf(settings.filePrefix), -1);
assert.strictEqual(testAppender.events[0].data.callstack.indexOf(settings.personalInfo), -1);
assert.strictEqual(testAppender.events[0].data.callstack.indexOf(settings.filePrefix), -1);
assert.notStrictEqual(testAppender.events[0].data.callstack.indexOf(settings.stack[4].replace(settings.randomUserFile, settings.anonymizedRandomUserFile)), -1);
assert.strictEqual(testAppender.events[0].data.callstack.split('\n').length, settings.stack.length);
errorTelemetry.dispose();
service.dispose();
@@ -445,14 +445,14 @@ suite('TelemetryService', () => {
this.clock.tick(ErrorTelemetry.ERROR_FLUSH_TIMEOUT);
await service.join();
assert.notEqual(testAppender.events[0].data.msg.indexOf(settings.importantInfo), -1);
assert.equal(testAppender.events[0].data.msg.indexOf(settings.personalInfo), -1);
assert.equal(testAppender.events[0].data.msg.indexOf(settings.filePrefix), -1);
assert.notEqual(testAppender.events[0].data.callstack.indexOf(settings.importantInfo), -1);
assert.equal(testAppender.events[0].data.callstack.indexOf(settings.personalInfo), -1);
assert.equal(testAppender.events[0].data.callstack.indexOf(settings.filePrefix), -1);
assert.notEqual(testAppender.events[0].data.callstack.indexOf(settings.stack[4].replace(settings.randomUserFile, settings.anonymizedRandomUserFile)), -1);
assert.equal(testAppender.events[0].data.callstack.split('\n').length, settings.stack.length);
assert.notStrictEqual(testAppender.events[0].data.msg.indexOf(settings.importantInfo), -1);
assert.strictEqual(testAppender.events[0].data.msg.indexOf(settings.personalInfo), -1);
assert.strictEqual(testAppender.events[0].data.msg.indexOf(settings.filePrefix), -1);
assert.notStrictEqual(testAppender.events[0].data.callstack.indexOf(settings.importantInfo), -1);
assert.strictEqual(testAppender.events[0].data.callstack.indexOf(settings.personalInfo), -1);
assert.strictEqual(testAppender.events[0].data.callstack.indexOf(settings.filePrefix), -1);
assert.notStrictEqual(testAppender.events[0].data.callstack.indexOf(settings.stack[4].replace(settings.randomUserFile, settings.anonymizedRandomUserFile)), -1);
assert.strictEqual(testAppender.events[0].data.callstack.split('\n').length, settings.stack.length);
errorTelemetry.dispose();
service.dispose();
@@ -476,16 +476,16 @@ suite('TelemetryService', () => {
this.clock.tick(ErrorTelemetry.ERROR_FLUSH_TIMEOUT);
await service.join();
assert.equal(errorStub.callCount, 1);
assert.strictEqual(errorStub.callCount, 1);
// Test that important information remains but personal info does not
assert.notEqual(testAppender.events[0].data.msg.indexOf(settings.importantInfo), -1);
assert.equal(testAppender.events[0].data.msg.indexOf(settings.personalInfo), -1);
assert.equal(testAppender.events[0].data.msg.indexOf(settings.filePrefix), -1);
assert.notEqual(testAppender.events[0].data.callstack.indexOf(settings.importantInfo), -1);
assert.equal(testAppender.events[0].data.callstack.indexOf(settings.personalInfo), -1);
assert.equal(testAppender.events[0].data.callstack.indexOf(settings.filePrefix), -1);
assert.notEqual(testAppender.events[0].data.callstack.indexOf(settings.stack[4].replace(settings.randomUserFile, settings.anonymizedRandomUserFile)), -1);
assert.equal(testAppender.events[0].data.callstack.split('\n').length, settings.stack.length);
assert.notStrictEqual(testAppender.events[0].data.msg.indexOf(settings.importantInfo), -1);
assert.strictEqual(testAppender.events[0].data.msg.indexOf(settings.personalInfo), -1);
assert.strictEqual(testAppender.events[0].data.msg.indexOf(settings.filePrefix), -1);
assert.notStrictEqual(testAppender.events[0].data.callstack.indexOf(settings.importantInfo), -1);
assert.strictEqual(testAppender.events[0].data.callstack.indexOf(settings.personalInfo), -1);
assert.strictEqual(testAppender.events[0].data.callstack.indexOf(settings.filePrefix), -1);
assert.notStrictEqual(testAppender.events[0].data.callstack.indexOf(settings.stack[4].replace(settings.randomUserFile, settings.anonymizedRandomUserFile)), -1);
assert.strictEqual(testAppender.events[0].data.callstack.split('\n').length, settings.stack.length);
errorTelemetry.dispose();
service.dispose();
@@ -510,10 +510,10 @@ suite('TelemetryService', () => {
this.clock.tick(ErrorTelemetry.ERROR_FLUSH_TIMEOUT);
await service.join();
assert.notEqual(testAppender.events[0].data.callstack.indexOf('(' + settings.nodeModuleAsarPathToRetain), -1);
assert.notEqual(testAppender.events[0].data.callstack.indexOf('(' + settings.nodeModulePathToRetain), -1);
assert.notEqual(testAppender.events[0].data.callstack.indexOf('(/' + settings.nodeModuleAsarPathToRetain), -1);
assert.notEqual(testAppender.events[0].data.callstack.indexOf('(/' + settings.nodeModulePathToRetain), -1);
assert.notStrictEqual(testAppender.events[0].data.callstack.indexOf('(' + settings.nodeModuleAsarPathToRetain), -1);
assert.notStrictEqual(testAppender.events[0].data.callstack.indexOf('(' + settings.nodeModulePathToRetain), -1);
assert.notStrictEqual(testAppender.events[0].data.callstack.indexOf('(/' + settings.nodeModuleAsarPathToRetain), -1);
assert.notStrictEqual(testAppender.events[0].data.callstack.indexOf('(/' + settings.nodeModulePathToRetain), -1);
errorTelemetry.dispose();
service.dispose();
@@ -537,12 +537,12 @@ suite('TelemetryService', () => {
this.clock.tick(ErrorTelemetry.ERROR_FLUSH_TIMEOUT);
await service.join();
assert.equal(errorStub.callCount, 1);
assert.strictEqual(errorStub.callCount, 1);
assert.notEqual(testAppender.events[0].data.callstack.indexOf('(' + settings.nodeModuleAsarPathToRetain), -1);
assert.notEqual(testAppender.events[0].data.callstack.indexOf('(' + settings.nodeModulePathToRetain), -1);
assert.notEqual(testAppender.events[0].data.callstack.indexOf('(/' + settings.nodeModuleAsarPathToRetain), -1);
assert.notEqual(testAppender.events[0].data.callstack.indexOf('(/' + settings.nodeModulePathToRetain), -1);
assert.notStrictEqual(testAppender.events[0].data.callstack.indexOf('(' + settings.nodeModuleAsarPathToRetain), -1);
assert.notStrictEqual(testAppender.events[0].data.callstack.indexOf('(' + settings.nodeModulePathToRetain), -1);
assert.notStrictEqual(testAppender.events[0].data.callstack.indexOf('(/' + settings.nodeModuleAsarPathToRetain), -1);
assert.notStrictEqual(testAppender.events[0].data.callstack.indexOf('(/' + settings.nodeModulePathToRetain), -1);
errorTelemetry.dispose();
service.dispose();
@@ -568,14 +568,14 @@ suite('TelemetryService', () => {
this.clock.tick(ErrorTelemetry.ERROR_FLUSH_TIMEOUT);
await service.join();
assert.notEqual(testAppender.events[0].data.msg.indexOf(settings.importantInfo), -1);
assert.equal(testAppender.events[0].data.msg.indexOf(settings.personalInfo), -1);
assert.equal(testAppender.events[0].data.msg.indexOf(settings.filePrefix), -1);
assert.notEqual(testAppender.events[0].data.callstack.indexOf(settings.importantInfo), -1);
assert.equal(testAppender.events[0].data.callstack.indexOf(settings.personalInfo), -1);
assert.equal(testAppender.events[0].data.callstack.indexOf(settings.filePrefix), -1);
assert.notEqual(testAppender.events[0].data.callstack.indexOf(settings.stack[4].replace(settings.randomUserFile, settings.anonymizedRandomUserFile)), -1);
assert.equal(testAppender.events[0].data.callstack.split('\n').length, settings.stack.length);
assert.notStrictEqual(testAppender.events[0].data.msg.indexOf(settings.importantInfo), -1);
assert.strictEqual(testAppender.events[0].data.msg.indexOf(settings.personalInfo), -1);
assert.strictEqual(testAppender.events[0].data.msg.indexOf(settings.filePrefix), -1);
assert.notStrictEqual(testAppender.events[0].data.callstack.indexOf(settings.importantInfo), -1);
assert.strictEqual(testAppender.events[0].data.callstack.indexOf(settings.personalInfo), -1);
assert.strictEqual(testAppender.events[0].data.callstack.indexOf(settings.filePrefix), -1);
assert.notStrictEqual(testAppender.events[0].data.callstack.indexOf(settings.stack[4].replace(settings.randomUserFile, settings.anonymizedRandomUserFile)), -1);
assert.strictEqual(testAppender.events[0].data.callstack.split('\n').length, settings.stack.length);
errorTelemetry.dispose();
service.dispose();
@@ -599,16 +599,16 @@ suite('TelemetryService', () => {
this.clock.tick(ErrorTelemetry.ERROR_FLUSH_TIMEOUT);
await service.join();
assert.equal(errorStub.callCount, 1);
assert.strictEqual(errorStub.callCount, 1);
// Test that important information remains but personal info does not
assert.notEqual(testAppender.events[0].data.msg.indexOf(settings.importantInfo), -1);
assert.equal(testAppender.events[0].data.msg.indexOf(settings.personalInfo), -1);
assert.equal(testAppender.events[0].data.msg.indexOf(settings.filePrefix), -1);
assert.notEqual(testAppender.events[0].data.callstack.indexOf(settings.importantInfo), -1);
assert.equal(testAppender.events[0].data.callstack.indexOf(settings.personalInfo), -1);
assert.equal(testAppender.events[0].data.callstack.indexOf(settings.filePrefix), -1);
assert.notEqual(testAppender.events[0].data.callstack.indexOf(settings.stack[4].replace(settings.randomUserFile, settings.anonymizedRandomUserFile)), -1);
assert.equal(testAppender.events[0].data.callstack.split('\n').length, settings.stack.length);
assert.notStrictEqual(testAppender.events[0].data.msg.indexOf(settings.importantInfo), -1);
assert.strictEqual(testAppender.events[0].data.msg.indexOf(settings.personalInfo), -1);
assert.strictEqual(testAppender.events[0].data.msg.indexOf(settings.filePrefix), -1);
assert.notStrictEqual(testAppender.events[0].data.callstack.indexOf(settings.importantInfo), -1);
assert.strictEqual(testAppender.events[0].data.callstack.indexOf(settings.personalInfo), -1);
assert.strictEqual(testAppender.events[0].data.callstack.indexOf(settings.filePrefix), -1);
assert.notStrictEqual(testAppender.events[0].data.callstack.indexOf(settings.stack[4].replace(settings.randomUserFile, settings.anonymizedRandomUserFile)), -1);
assert.strictEqual(testAppender.events[0].data.callstack.split('\n').length, settings.stack.length);
errorTelemetry.dispose();
service.dispose();
@@ -634,14 +634,14 @@ suite('TelemetryService', () => {
this.clock.tick(ErrorTelemetry.ERROR_FLUSH_TIMEOUT);
await service.join();
assert.notEqual(testAppender.events[0].data.msg.indexOf(settings.missingModelPrefix), -1);
assert.equal(testAppender.events[0].data.msg.indexOf(settings.personalInfo), -1);
assert.equal(testAppender.events[0].data.msg.indexOf(settings.filePrefix), -1);
assert.notEqual(testAppender.events[0].data.callstack.indexOf(settings.missingModelPrefix), -1);
assert.equal(testAppender.events[0].data.callstack.indexOf(settings.personalInfo), -1);
assert.equal(testAppender.events[0].data.callstack.indexOf(settings.filePrefix), -1);
assert.notEqual(testAppender.events[0].data.callstack.indexOf(settings.stack[4].replace(settings.randomUserFile, settings.anonymizedRandomUserFile)), -1);
assert.equal(testAppender.events[0].data.callstack.split('\n').length, settings.stack.length);
assert.notStrictEqual(testAppender.events[0].data.msg.indexOf(settings.missingModelPrefix), -1);
assert.strictEqual(testAppender.events[0].data.msg.indexOf(settings.personalInfo), -1);
assert.strictEqual(testAppender.events[0].data.msg.indexOf(settings.filePrefix), -1);
assert.notStrictEqual(testAppender.events[0].data.callstack.indexOf(settings.missingModelPrefix), -1);
assert.strictEqual(testAppender.events[0].data.callstack.indexOf(settings.personalInfo), -1);
assert.strictEqual(testAppender.events[0].data.callstack.indexOf(settings.filePrefix), -1);
assert.notStrictEqual(testAppender.events[0].data.callstack.indexOf(settings.stack[4].replace(settings.randomUserFile, settings.anonymizedRandomUserFile)), -1);
assert.strictEqual(testAppender.events[0].data.callstack.split('\n').length, settings.stack.length);
errorTelemetry.dispose();
service.dispose();
@@ -664,17 +664,17 @@ suite('TelemetryService', () => {
this.clock.tick(ErrorTelemetry.ERROR_FLUSH_TIMEOUT);
await service.join();
assert.equal(errorStub.callCount, 1);
assert.strictEqual(errorStub.callCount, 1);
// Test that no file information remains, but this particular
// error message does (Received model events for missing model)
assert.notEqual(testAppender.events[0].data.msg.indexOf(settings.missingModelPrefix), -1);
assert.equal(testAppender.events[0].data.msg.indexOf(settings.personalInfo), -1);
assert.equal(testAppender.events[0].data.msg.indexOf(settings.filePrefix), -1);
assert.notEqual(testAppender.events[0].data.callstack.indexOf(settings.missingModelPrefix), -1);
assert.equal(testAppender.events[0].data.callstack.indexOf(settings.personalInfo), -1);
assert.equal(testAppender.events[0].data.callstack.indexOf(settings.filePrefix), -1);
assert.notEqual(testAppender.events[0].data.callstack.indexOf(settings.stack[4].replace(settings.randomUserFile, settings.anonymizedRandomUserFile)), -1);
assert.equal(testAppender.events[0].data.callstack.split('\n').length, settings.stack.length);
assert.notStrictEqual(testAppender.events[0].data.msg.indexOf(settings.missingModelPrefix), -1);
assert.strictEqual(testAppender.events[0].data.msg.indexOf(settings.personalInfo), -1);
assert.strictEqual(testAppender.events[0].data.msg.indexOf(settings.filePrefix), -1);
assert.notStrictEqual(testAppender.events[0].data.callstack.indexOf(settings.missingModelPrefix), -1);
assert.strictEqual(testAppender.events[0].data.callstack.indexOf(settings.personalInfo), -1);
assert.strictEqual(testAppender.events[0].data.callstack.indexOf(settings.filePrefix), -1);
assert.notStrictEqual(testAppender.events[0].data.callstack.indexOf(settings.stack[4].replace(settings.randomUserFile, settings.anonymizedRandomUserFile)), -1);
assert.strictEqual(testAppender.events[0].data.callstack.split('\n').length, settings.stack.length);
errorTelemetry.dispose();
service.dispose();
@@ -700,14 +700,15 @@ suite('TelemetryService', () => {
this.clock.tick(ErrorTelemetry.ERROR_FLUSH_TIMEOUT);
await service.join();
assert.notEqual(testAppender.events[0].data.msg.indexOf(settings.noSuchFilePrefix), -1);
assert.equal(testAppender.events[0].data.msg.indexOf(settings.personalInfo), -1);
assert.equal(testAppender.events[0].data.msg.indexOf(settings.filePrefix), -1);
assert.notEqual(testAppender.events[0].data.callstack.indexOf(settings.noSuchFilePrefix), -1);
assert.equal(testAppender.events[0].data.callstack.indexOf(settings.personalInfo), -1);
assert.equal(testAppender.events[0].data.callstack.indexOf(settings.filePrefix), -1);
assert.notEqual(testAppender.events[0].data.callstack.indexOf(settings.stack[4].replace(settings.randomUserFile, settings.anonymizedRandomUserFile)), -1);
assert.equal(testAppender.events[0].data.callstack.split('\n').length, settings.stack.length);
assert.notStrictEqual(testAppender.events[0].data.msg.indexOf(settings.noSuchFilePrefix), -1);
assert.strictEqual(testAppender.events[0].data.msg.indexOf(settings.personalInfo), -1);
assert.strictEqual(testAppender.events[0].data.msg.indexOf(settings.filePrefix), -1);
assert.notStrictEqual(testAppender.events[0].data.callstack.indexOf(settings.noSuchFilePrefix), -1);
assert.strictEqual(testAppender.events[0].data.callstack.indexOf(settings.personalInfo), -1);
assert.strictEqual(testAppender.events[0].data.callstack.indexOf(settings.filePrefix), -1);
assert.notStrictEqual(testAppender.events[0].data.callstack.indexOf(settings.stack[4].replace(settings.randomUserFile, settings.anonymizedRandomUserFile)), -1);
assert.strictEqual(testAppender.events[0].data.callstack.split('\n').length, settings.stack.length);
errorTelemetry.dispose();
service.dispose();
} finally {
@@ -729,18 +730,19 @@ suite('TelemetryService', () => {
(<any>window.onerror)(settings.noSuchFileMessage, 'test.js', 2, 42, noSuchFileError);
this.clock.tick(ErrorTelemetry.ERROR_FLUSH_TIMEOUT);
await service.join();
assert.equal(errorStub.callCount, 1);
assert.strictEqual(errorStub.callCount, 1);
// Test that no file information remains, but this particular
// error message does (ENOENT: no such file or directory)
Errors.onUnexpectedError(noSuchFileError);
assert.notEqual(testAppender.events[0].data.msg.indexOf(settings.noSuchFilePrefix), -1);
assert.equal(testAppender.events[0].data.msg.indexOf(settings.personalInfo), -1);
assert.equal(testAppender.events[0].data.msg.indexOf(settings.filePrefix), -1);
assert.notEqual(testAppender.events[0].data.callstack.indexOf(settings.noSuchFilePrefix), -1);
assert.equal(testAppender.events[0].data.callstack.indexOf(settings.personalInfo), -1);
assert.equal(testAppender.events[0].data.callstack.indexOf(settings.filePrefix), -1);
assert.notEqual(testAppender.events[0].data.callstack.indexOf(settings.stack[4].replace(settings.randomUserFile, settings.anonymizedRandomUserFile)), -1);
assert.equal(testAppender.events[0].data.callstack.split('\n').length, settings.stack.length);
assert.notStrictEqual(testAppender.events[0].data.msg.indexOf(settings.noSuchFilePrefix), -1);
assert.strictEqual(testAppender.events[0].data.msg.indexOf(settings.personalInfo), -1);
assert.strictEqual(testAppender.events[0].data.msg.indexOf(settings.filePrefix), -1);
assert.notStrictEqual(testAppender.events[0].data.callstack.indexOf(settings.noSuchFilePrefix), -1);
assert.strictEqual(testAppender.events[0].data.callstack.indexOf(settings.personalInfo), -1);
assert.strictEqual(testAppender.events[0].data.callstack.indexOf(settings.filePrefix), -1);
assert.notStrictEqual(testAppender.events[0].data.callstack.indexOf(settings.stack[4].replace(settings.randomUserFile, settings.anonymizedRandomUserFile)), -1);
assert.strictEqual(testAppender.events[0].data.callstack.split('\n').length, settings.stack.length);
errorTelemetry.dispose();
service.dispose();
@@ -754,7 +756,7 @@ suite('TelemetryService', () => {
let service = new TelemetryService({ appender: testAppender }, undefined!);
return service.publicLog('testEvent').then(() => {
assert.equal(testAppender.getEventsCount(), 1);
assert.strictEqual(testAppender.getEventsCount(), 1);
service.dispose();
});
}));
@@ -768,23 +770,23 @@ suite('TelemetryService', () => {
let service = new TelemetryService({
appender: testAppender
}, new class extends TestConfigurationService {
onDidChangeConfiguration = emitter.event;
getValue() {
override onDidChangeConfiguration = emitter.event;
override getValue() {
return {
enableTelemetry: enableTelemetry
} as any;
}
}());
assert.equal(service.isOptedIn, false);
assert.strictEqual(service.isOptedIn, false);
enableTelemetry = true;
emitter.fire({});
assert.equal(service.isOptedIn, true);
assert.strictEqual(service.isOptedIn, true);
enableTelemetry = false;
emitter.fire({});
assert.equal(service.isOptedIn, false);
assert.strictEqual(service.isOptedIn, false);
service.dispose();
});

View File

@@ -3,13 +3,12 @@
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import * as assert from 'assert';
import { LogLevel, ILoggerService, AbstractLogService, DEFAULT_LOG_LEVEL, ILogger } from 'vs/platform/log/common/log';
import { LogLevel, ILoggerService, AbstractLogger, DEFAULT_LOG_LEVEL, ILogger } from 'vs/platform/log/common/log';
import { TestInstantiationService } from 'vs/platform/instantiation/test/common/instantiationServiceMock';
import { TelemetryLogAppender } from 'vs/platform/telemetry/common/telemetryLogAppender';
import { IEnvironmentService } from 'vs/platform/environment/common/environment';
class TestTelemetryLogger extends AbstractLogService implements ILogger {
declare readonly _serviceBrand: undefined;
class TestTelemetryLogger extends AbstractLogger implements ILogger {
public logs: string[] = [];
@@ -54,7 +53,7 @@ class TestTelemetryLogger extends AbstractLogService implements ILogger {
}
}
dispose(): void { }
override dispose(): void { }
flush(): void { }
}
@@ -67,7 +66,7 @@ class TestTelemetryLoggerService implements ILoggerService {
this.logger = new TestTelemetryLogger(logLevel);
}
getLogger(): ILogger {
createLogger(): ILogger {
return this.logger;
}
}
@@ -78,14 +77,14 @@ suite('TelemetryLogAdapter', () => {
const testLoggerService = new TestTelemetryLoggerService(DEFAULT_LOG_LEVEL);
const testObject = new TelemetryLogAppender(testLoggerService, new TestInstantiationService().stub(IEnvironmentService, {}));
testObject.log('testEvent', { hello: 'world', isTrue: true, numberBetween1And3: 2 });
assert.equal(testLoggerService.logger.logs.length, 2);
assert.strictEqual(testLoggerService.logger.logs.length, 2);
});
test('Log Telemetry if log level is trace', async () => {
const testLoggerService = new TestTelemetryLoggerService(LogLevel.Trace);
const testObject = new TelemetryLogAppender(testLoggerService, new TestInstantiationService().stub(IEnvironmentService, {}));
testObject.log('testEvent', { hello: 'world', isTrue: true, numberBetween1And3: 2 });
assert.equal(testLoggerService.logger.logs[2], 'telemetry/testEvent' + JSON.stringify([{
assert.strictEqual(testLoggerService.logger.logs[2], 'telemetry/testEvent' + JSON.stringify([{
properties: {
hello: 'world',
},

View File

@@ -7,8 +7,8 @@ import { AppInsightsAppender } from 'vs/platform/telemetry/node/appInsightsAppen
import { TelemetryClient, Contracts } from 'applicationinsights';
class AppInsightsMock extends TelemetryClient {
public config: any;
public channel: any;
public override config: any;
public override channel: any;
public events: Contracts.EventTelemetry[] = [];
public IsTrackingPageView: boolean = false;
public exceptions: any[] = [];
@@ -17,11 +17,11 @@ class AppInsightsMock extends TelemetryClient {
super('testKey');
}
public trackEvent(event: any) {
public override trackEvent(event: any) {
this.events.push(event);
}
public flush(options: any): void {
public override flush(options: any): void {
// called on dispose
}
}
@@ -44,20 +44,20 @@ suite('AIAdapter', () => {
test('Simple event', () => {
adapter.log('testEvent');
assert.equal(appInsightsMock.events.length, 1);
assert.equal(appInsightsMock.events[0].name, `${prefix}/testEvent`);
assert.strictEqual(appInsightsMock.events.length, 1);
assert.strictEqual(appInsightsMock.events[0].name, `${prefix}/testEvent`);
});
test('addional data', () => {
adapter = new AppInsightsAppender(prefix, { first: '1st', second: 2, third: true }, () => appInsightsMock);
adapter.log('testEvent');
assert.equal(appInsightsMock.events.length, 1);
assert.strictEqual(appInsightsMock.events.length, 1);
let [first] = appInsightsMock.events;
assert.equal(first.name, `${prefix}/testEvent`);
assert.equal(first.properties!['first'], '1st');
assert.equal(first.measurements!['second'], '2');
assert.equal(first.measurements!['third'], 1);
assert.strictEqual(first.name, `${prefix}/testEvent`);
assert.strictEqual(first.properties!['first'], '1st');
assert.strictEqual(first.measurements!['second'], 2);
assert.strictEqual(first.measurements!['third'], 1);
});
test('property limits', () => {
@@ -78,7 +78,7 @@ suite('AIAdapter', () => {
data['reallyLongPropertyValue'] = reallyLongPropertyValue;
adapter.log('testEvent', data);
assert.equal(appInsightsMock.events.length, 1);
assert.strictEqual(appInsightsMock.events.length, 1);
for (let prop in appInsightsMock.events[0].properties!) {
assert(prop.length < 150);
@@ -90,14 +90,14 @@ suite('AIAdapter', () => {
let date = new Date();
adapter.log('testEvent', { favoriteDate: date, likeRed: false, likeBlue: true, favoriteNumber: 1, favoriteColor: 'blue', favoriteCars: ['bmw', 'audi', 'ford'] });
assert.equal(appInsightsMock.events.length, 1);
assert.equal(appInsightsMock.events[0].name, `${prefix}/testEvent`);
assert.equal(appInsightsMock.events[0].properties!['favoriteColor'], 'blue');
assert.equal(appInsightsMock.events[0].measurements!['likeRed'], 0);
assert.equal(appInsightsMock.events[0].measurements!['likeBlue'], 1);
assert.equal(appInsightsMock.events[0].properties!['favoriteDate'], date.toISOString());
assert.equal(appInsightsMock.events[0].properties!['favoriteCars'], JSON.stringify(['bmw', 'audi', 'ford']));
assert.equal(appInsightsMock.events[0].measurements!['favoriteNumber'], 1);
assert.strictEqual(appInsightsMock.events.length, 1);
assert.strictEqual(appInsightsMock.events[0].name, `${prefix}/testEvent`);
assert.strictEqual(appInsightsMock.events[0].properties!['favoriteColor'], 'blue');
assert.strictEqual(appInsightsMock.events[0].measurements!['likeRed'], 0);
assert.strictEqual(appInsightsMock.events[0].measurements!['likeBlue'], 1);
assert.strictEqual(appInsightsMock.events[0].properties!['favoriteDate'], date.toISOString());
assert.strictEqual(appInsightsMock.events[0].properties!['favoriteCars'], JSON.stringify(['bmw', 'audi', 'ford']));
assert.strictEqual(appInsightsMock.events[0].measurements!['favoriteNumber'], 1);
});
test('Nested data', () => {
@@ -119,15 +119,15 @@ suite('AIAdapter', () => {
}
});
assert.equal(appInsightsMock.events.length, 1);
assert.equal(appInsightsMock.events[0].name, `${prefix}/testEvent`);
assert.strictEqual(appInsightsMock.events.length, 1);
assert.strictEqual(appInsightsMock.events[0].name, `${prefix}/testEvent`);
assert.equal(appInsightsMock.events[0].properties!['window.title'], 'some title');
assert.equal(appInsightsMock.events[0].measurements!['window.measurements.width'], 100);
assert.equal(appInsightsMock.events[0].measurements!['window.measurements.height'], 200);
assert.strictEqual(appInsightsMock.events[0].properties!['window.title'], 'some title');
assert.strictEqual(appInsightsMock.events[0].measurements!['window.measurements.width'], 100);
assert.strictEqual(appInsightsMock.events[0].measurements!['window.measurements.height'], 200);
assert.equal(appInsightsMock.events[0].properties!['nestedObj.nestedObj2.nestedObj3'], JSON.stringify({ 'testProperty': 'test' }));
assert.equal(appInsightsMock.events[0].measurements!['nestedObj.testMeasurement'], 1);
assert.strictEqual(appInsightsMock.events[0].properties!['nestedObj.nestedObj2.nestedObj3'], JSON.stringify({ 'testProperty': 'test' }));
assert.strictEqual(appInsightsMock.events[0].measurements!['nestedObj.testMeasurement'], 1);
});
});