| // Copyright (c) 2023, 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:io' as io; |
| |
| import 'package:file/file.dart'; |
| import 'package:file/memory.dart'; |
| import 'package:test/test.dart'; |
| |
| import 'package:unified_analytics/src/enums.dart'; |
| import 'package:unified_analytics/unified_analytics.dart'; |
| |
| void main() { |
| late MemoryFileSystem fs; |
| late Directory home; |
| late Analytics analytics; |
| |
| const homeDirName = 'home'; |
| const initialTool = DashTool.flutterTool; |
| const toolsMessageVersion = 1; |
| const toolsMessage = 'toolsMessage'; |
| const flutterChannel = 'flutterChannel'; |
| const flutterVersion = 'flutterVersion'; |
| const dartVersion = 'dartVersion'; |
| const platform = DevicePlatform.macos; |
| |
| setUp(() { |
| // Setup the filesystem with the home directory |
| final fsStyle = |
| io.Platform.isWindows ? FileSystemStyle.windows : FileSystemStyle.posix; |
| fs = MemoryFileSystem.test(style: fsStyle); |
| home = fs.directory(homeDirName); |
| }); |
| |
| test('Honor legacy dart analytics opt out', () { |
| // Create the file for the dart legacy opt out |
| final dartLegacyConfigFile = |
| home.childDirectory('.dart').childFile('dartdev.json'); |
| dartLegacyConfigFile.createSync(recursive: true); |
| dartLegacyConfigFile.writeAsStringSync(''' |
| { |
| "firstRun": false, |
| "enabled": false, |
| "disclosureShown": true, |
| "clientId": "52710e60-7c70-4335-b3a4-9d922630f12a" |
| } |
| '''); |
| |
| // The main analytics instance, other instances can be spawned within tests |
| // to test how to instances running together work |
| analytics = Analytics.fake( |
| tool: initialTool, |
| homeDirectory: home, |
| flutterChannel: flutterChannel, |
| toolsMessageVersion: toolsMessageVersion, |
| toolsMessage: toolsMessage, |
| flutterVersion: flutterVersion, |
| dartVersion: dartVersion, |
| fs: fs, |
| platform: platform, |
| ); |
| |
| expect(analytics.telemetryEnabled, false); |
| }); |
| |
| test('Telemetry enabled if legacy dart analytics is enabled', () { |
| // Create the file for the dart legacy opt out |
| final dartLegacyConfigFile = |
| home.childDirectory('.dart').childFile('dartdev.json'); |
| dartLegacyConfigFile.createSync(recursive: true); |
| dartLegacyConfigFile.writeAsStringSync(''' |
| { |
| "firstRun": false, |
| "enabled": true, |
| "disclosureShown": true, |
| "clientId": "52710e60-7c70-4335-b3a4-9d922630f12a" |
| } |
| '''); |
| |
| // The main analytics instance, other instances can be spawned within tests |
| // to test how to instances running together work |
| analytics = Analytics.fake( |
| tool: initialTool, |
| homeDirectory: home, |
| flutterChannel: flutterChannel, |
| toolsMessageVersion: toolsMessageVersion, |
| toolsMessage: toolsMessage, |
| flutterVersion: flutterVersion, |
| dartVersion: dartVersion, |
| fs: fs, |
| platform: platform, |
| ); |
| |
| expect(analytics.telemetryEnabled, true); |
| }); |
| |
| test('Honor legacy flutter analytics opt out', () { |
| // Create the file for the flutter legacy opt out |
| final flutterLegacyConfigFile = |
| home.childDirectory('.dart').childFile('dartdev.json'); |
| flutterLegacyConfigFile.createSync(recursive: true); |
| flutterLegacyConfigFile.writeAsStringSync(''' |
| { |
| "firstRun": false, |
| "clientId": "4c3a3d1e-e545-47e7-b4f8-10129f6ab169", |
| "enabled": false |
| } |
| '''); |
| |
| // The main analytics instance, other instances can be spawned within tests |
| // to test how to instances running together work |
| analytics = Analytics.fake( |
| tool: initialTool, |
| homeDirectory: home, |
| flutterChannel: flutterChannel, |
| toolsMessageVersion: toolsMessageVersion, |
| toolsMessage: toolsMessage, |
| flutterVersion: flutterVersion, |
| dartVersion: dartVersion, |
| fs: fs, |
| platform: platform, |
| ); |
| |
| expect(analytics.telemetryEnabled, false); |
| }); |
| |
| test('Telemetry enabled if legacy flutter analytics is enabled', () { |
| // Create the file for the flutter legacy opt out |
| final flutterLegacyConfigFile = |
| home.childDirectory('.dart').childFile('dartdev.json'); |
| flutterLegacyConfigFile.createSync(recursive: true); |
| flutterLegacyConfigFile.writeAsStringSync(''' |
| { |
| "firstRun": false, |
| "clientId": "4c3a3d1e-e545-47e7-b4f8-10129f6ab169", |
| "enabled": true |
| } |
| '''); |
| |
| // The main analytics instance, other instances can be spawned within tests |
| // to test how to instances running together work |
| analytics = Analytics.fake( |
| tool: initialTool, |
| homeDirectory: home, |
| flutterChannel: flutterChannel, |
| toolsMessageVersion: toolsMessageVersion, |
| toolsMessage: toolsMessage, |
| flutterVersion: flutterVersion, |
| dartVersion: dartVersion, |
| fs: fs, |
| platform: platform, |
| ); |
| |
| expect(analytics.telemetryEnabled, true); |
| }); |
| |
| test('Honor legacy devtools analytics opt out', () { |
| // Create the file for the devtools legacy opt out |
| final devtoolsLegacyConfigFile = |
| home.childDirectory('.flutter-devtools').childFile('.devtools'); |
| devtoolsLegacyConfigFile.createSync(recursive: true); |
| devtoolsLegacyConfigFile.writeAsStringSync(''' |
| { |
| "analyticsEnabled": false, |
| "isFirstRun": false, |
| "lastReleaseNotesVersion": "2.31.0", |
| "2023-Q4": { |
| "surveyActionTaken": false, |
| "surveyShownCount": 0 |
| } |
| } |
| '''); |
| |
| // The main analytics instance, other instances can be spawned within tests |
| // to test how to instances running together work |
| analytics = Analytics.fake( |
| tool: initialTool, |
| homeDirectory: home, |
| flutterChannel: flutterChannel, |
| toolsMessageVersion: toolsMessageVersion, |
| toolsMessage: toolsMessage, |
| flutterVersion: flutterVersion, |
| dartVersion: dartVersion, |
| fs: fs, |
| platform: platform, |
| ); |
| |
| expect(analytics.telemetryEnabled, false); |
| }); |
| |
| test('Telemetry enabled if legacy devtools analytics is enabled', () { |
| // Create the file for the devtools legacy opt out |
| final devtoolsLegacyConfigFile = |
| home.childDirectory('.flutter-devtools').childFile('.devtools'); |
| devtoolsLegacyConfigFile.createSync(recursive: true); |
| devtoolsLegacyConfigFile.writeAsStringSync(''' |
| { |
| "analyticsEnabled": true, |
| "isFirstRun": false, |
| "lastReleaseNotesVersion": "2.31.0", |
| "2023-Q4": { |
| "surveyActionTaken": false, |
| "surveyShownCount": 0 |
| } |
| } |
| '''); |
| |
| // The main analytics instance, other instances can be spawned within tests |
| // to test how to instances running together work |
| analytics = Analytics.fake( |
| tool: initialTool, |
| homeDirectory: home, |
| flutterChannel: flutterChannel, |
| toolsMessageVersion: toolsMessageVersion, |
| toolsMessage: toolsMessage, |
| flutterVersion: flutterVersion, |
| dartVersion: dartVersion, |
| fs: fs, |
| platform: platform, |
| ); |
| |
| expect(analytics.telemetryEnabled, true); |
| }); |
| |
| test('Telemetry disabled if dart config file corrupted', () { |
| // Create the file for the dart legacy opt out with text that |
| // is not valid JSON |
| final dartLegacyConfigFile = |
| home.childDirectory('.dart').childFile('dartdev.json'); |
| dartLegacyConfigFile.createSync(recursive: true); |
| dartLegacyConfigFile.writeAsStringSync(''' |
| NOT VALID JSON |
| { |
| "firstRun": false, |
| "clientId": "4c3a3d1e-e545-47e7-b4f8-10129f6ab169", |
| "enabled": true |
| } |
| '''); |
| |
| // The main analytics instance, other instances can be spawned within tests |
| // to test how to instances running together work |
| analytics = Analytics.fake( |
| tool: initialTool, |
| homeDirectory: home, |
| flutterChannel: flutterChannel, |
| toolsMessageVersion: toolsMessageVersion, |
| toolsMessage: toolsMessage, |
| flutterVersion: flutterVersion, |
| dartVersion: dartVersion, |
| fs: fs, |
| platform: platform, |
| ); |
| |
| expect(analytics.telemetryEnabled, false); |
| }); |
| |
| test('Telemetry disabled if devtools config file corrupted', () { |
| // Create the file for the devtools legacy opt out with text that |
| // is not valid JSON |
| final devtoolsLegacyConfigFile = |
| home.childDirectory('.flutter-devtools').childFile('.devtools'); |
| devtoolsLegacyConfigFile.createSync(recursive: true); |
| devtoolsLegacyConfigFile.writeAsStringSync(''' |
| NOT VALID JSON |
| { |
| "analyticsEnabled": true, |
| "isFirstRun": false, |
| "lastReleaseNotesVersion": "2.31.0", |
| "2023-Q4": { |
| "surveyActionTaken": false, |
| "surveyShownCount": 0 |
| } |
| } |
| '''); |
| |
| // The main analytics instance, other instances can be spawned within tests |
| // to test how to instances running together work |
| analytics = Analytics.fake( |
| tool: initialTool, |
| homeDirectory: home, |
| flutterChannel: flutterChannel, |
| toolsMessageVersion: toolsMessageVersion, |
| toolsMessage: toolsMessage, |
| flutterVersion: flutterVersion, |
| dartVersion: dartVersion, |
| fs: fs, |
| platform: platform, |
| ); |
| |
| expect(analytics.telemetryEnabled, false); |
| }); |
| |
| test('Telemetry disabled if flutter config file corrupted', () { |
| // Create the file for the flutter legacy opt out with text that |
| // is not valid JSON |
| final fluttterLegacyConfigFile = |
| home.childDirectory('.dart').childFile('dartdev.json'); |
| fluttterLegacyConfigFile.createSync(recursive: true); |
| fluttterLegacyConfigFile.writeAsStringSync(''' |
| NOT VALID JSON |
| { |
| "firstRun": false, |
| "clientId": "4c3a3d1e-e545-47e7-b4f8-10129f6ab169", |
| "enabled": true |
| } |
| '''); |
| |
| // The main analytics instance, other instances can be spawned within tests |
| // to test how to instances running together work |
| analytics = Analytics.fake( |
| tool: initialTool, |
| homeDirectory: home, |
| flutterChannel: flutterChannel, |
| toolsMessageVersion: toolsMessageVersion, |
| toolsMessage: toolsMessage, |
| flutterVersion: flutterVersion, |
| dartVersion: dartVersion, |
| fs: fs, |
| platform: platform, |
| ); |
| |
| expect(analytics.telemetryEnabled, false); |
| }); |
| } |