// Copyright 2014 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. import 'package:file/memory.dart'; import 'package:flutter_tools/src/base/logger.dart'; import 'package:flutter_tools/src/persistent_tool_state.dart'; import 'package:flutter_tools/src/reporting/first_run.dart'; import '../../src/common.dart'; void main() { testWithoutContext('FirstRunMessenger delegates to the first run message', () { final FirstRunMessenger messenger = setUpFirstRunMessenger(); expect(messenger.licenseTerms, contains('Welcome to Flutter')); }); testWithoutContext('FirstRunMessenger requires redisplay if it has never been run before', () { final FirstRunMessenger messenger = setUpFirstRunMessenger(); expect(messenger.shouldDisplayLicenseTerms(), true); expect(messenger.shouldDisplayLicenseTerms(), true); // Once terms have been confirmed, then it will return false. messenger.confirmLicenseTermsDisplayed(); expect(messenger.shouldDisplayLicenseTerms(), false); }); testWithoutContext('FirstRunMessenger requires redisplay if the license terms have changed', () { final TestFirstRunMessenger messenger = setUpFirstRunMessenger(test: true) as TestFirstRunMessenger; messenger.confirmLicenseTermsDisplayed(); expect(messenger.shouldDisplayLicenseTerms(), false); messenger.overrideLicenseTerms = 'This is a new license'; expect(messenger.shouldDisplayLicenseTerms(), true); }); testWithoutContext('FirstRunMessenger does not require re-display if the persistent tool state disables it', () { final FirstRunMessenger messenger = setUpFirstRunMessenger(redisplayWelcomeMessage: false); expect(messenger.shouldDisplayLicenseTerms(), false); }); } FirstRunMessenger setUpFirstRunMessenger({bool? redisplayWelcomeMessage, bool test = false }) { final MemoryFileSystem fileSystem = MemoryFileSystem.test(); final PersistentToolState state = PersistentToolState.test(directory: fileSystem.currentDirectory, logger: BufferLogger.test()); if (redisplayWelcomeMessage != null) { state.setShouldRedisplayWelcomeMessage(redisplayWelcomeMessage); } if (test) { return TestFirstRunMessenger(state); } return FirstRunMessenger(persistentToolState: state); } class TestFirstRunMessenger extends FirstRunMessenger { TestFirstRunMessenger(PersistentToolState persistentToolState) : super(persistentToolState: persistentToolState); String? overrideLicenseTerms; @override String get licenseTerms => overrideLicenseTerms ?? super.licenseTerms; }