blob: fa9cafcb3d35b8a328514afa87ed6455eb79e9d9 [file] [log] [blame]
// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'dart:convert';
import 'dart:io';
import 'package:dartdev/src/analytics.dart';
import 'package:test/test.dart';
import 'utils.dart';
List<Map> extractAnalytics(ProcessResult result) {
return LineSplitter.split(result.stderr)
.where((line) => line.startsWith('[analytics]: '))
.map((line) => json.decode(line.substring('[analytics]: '.length)) as Map)
.toList();
}
void main() {
group('DisabledAnalytics', disabledAnalyticsObject);
group('Sending analytics', () {
test('help', () {
final p = project(logAnalytics: true);
final result = p.runSync('help', []);
expect(extractAnalytics(result), [
{
'hitType': 'timing',
'message': {
'variableName': 'help',
'time': isA<int>(),
'category': 'commands',
'label': null
}
}
]);
});
test('create', () {
final p = project(logAnalytics: true);
final result = p.runSync('create', ['-tpackage-simple', 'name']);
expect(extractAnalytics(result), [
{
'hitType': 'screenView',
'message': {'viewName': 'create'}
},
{
'hitType': 'event',
'message': {
'category': 'dartdev',
'action': 'create',
'label': null,
'value': null,
'cd1': '0',
'cd3': ''
}
},
{
'hitType': 'timing',
'message': {
'variableName': 'create',
'time': isA<int>(),
'category': 'commands',
'label': null
}
}
]);
});
test('pub get', () {
final p = project(logAnalytics: true);
final result = p.runSync('pub', ['get', '--dry-run']);
expect(extractAnalytics(result), [
{
'hitType': 'screenView',
'message': {'viewName': 'pub/get'}
},
{
'hitType': 'event',
'message': {
'category': 'dartdev',
'action': 'pub/get',
'label': null,
'value': null,
'cd1': '0',
'cd2': '',
'cd3': '',
}
},
{
'hitType': 'timing',
'message': {
'variableName': 'pub',
'time': isA<int>(),
'category': 'commands',
'label': null
}
}
]);
});
test('format', () {
final p = project(logAnalytics: true);
final result = p.runSync('format', ['-l80']);
expect(extractAnalytics(result), [
{
'hitType': 'screenView',
'message': {'viewName': 'format'}
},
{
'hitType': 'event',
'message': {
'category': 'dartdev',
'action': 'format',
'label': null,
'value': null,
'cd1': '0',
// TODO(sigurdm): We should filter out the value here.
'cd3': '-l80',
}
},
{
'hitType': 'timing',
'message': {
'variableName': 'format',
'time': isA<int>(),
'category': 'commands',
'label': null
}
}
]);
});
});
}
void disabledAnalyticsObject() {
test('object', () {
var diabledAnalytics = DisabledAnalytics('trackingId', 'appName');
expect(diabledAnalytics.trackingId, 'trackingId');
expect(diabledAnalytics.applicationName, 'appName');
expect(diabledAnalytics.enabled, isFalse);
expect(diabledAnalytics.firstRun, isFalse);
});
}