// Copyright 2013 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/file.dart'; import 'package:file/memory.dart'; import 'package:flutter_plugin_tools/src/common/package_state_utils.dart'; import 'package:test/test.dart'; import '../util.dart'; void main() { late FileSystem fileSystem; late Directory packagesDir; setUp(() { fileSystem = MemoryFileSystem(); packagesDir = createPackagesDirectory(fileSystem: fileSystem); }); group('checkPackageChangeState', () { test('reports version change needed for code changes', () async { final RepositoryPackage package = createFakePackage('a_package', packagesDir); const List changedFiles = [ 'packages/a_package/lib/plugin.dart', ]; final PackageChangeState state = checkPackageChangeState(package, changedPaths: changedFiles, relativePackagePath: 'packages/a_package'); expect(state.hasChanges, true); expect(state.needsVersionChange, true); }); test('handles trailing slash on package path', () async { final RepositoryPackage package = createFakePackage('a_package', packagesDir); const List changedFiles = [ 'packages/a_package/lib/plugin.dart', ]; final PackageChangeState state = checkPackageChangeState(package, changedPaths: changedFiles, relativePackagePath: 'packages/a_package/'); expect(state.hasChanges, true); expect(state.needsVersionChange, true); expect(state.hasChangelogChange, false); }); test('does not report version change exempt changes', () async { final RepositoryPackage package = createFakePlugin('a_plugin', packagesDir); const List changedFiles = [ 'packages/a_plugin/example/android/lint-baseline.xml', 'packages/a_plugin/example/android/src/androidTest/foo/bar/FooTest.java', 'packages/a_plugin/example/ios/RunnerTests/Foo.m', 'packages/a_plugin/example/ios/RunnerUITests/info.plist', 'packages/a_plugin/tool/a_development_tool.dart', 'packages/a_plugin/CHANGELOG.md', ]; final PackageChangeState state = checkPackageChangeState(package, changedPaths: changedFiles, relativePackagePath: 'packages/a_plugin/'); expect(state.hasChanges, true); expect(state.needsVersionChange, false); expect(state.hasChangelogChange, true); }); test('only considers a root "tool" folder to be special', () async { final RepositoryPackage package = createFakePlugin('a_plugin', packagesDir); const List changedFiles = [ 'packages/a_plugin/lib/foo/tool/tool_thing.dart', ]; final PackageChangeState state = checkPackageChangeState(package, changedPaths: changedFiles, relativePackagePath: 'packages/a_plugin/'); expect(state.hasChanges, true); expect(state.needsVersionChange, true); }); test('requires a version change for example main', () async { final RepositoryPackage package = createFakePlugin('a_plugin', packagesDir); const List changedFiles = [ 'packages/a_plugin/example/lib/main.dart', ]; final PackageChangeState state = checkPackageChangeState(package, changedPaths: changedFiles, relativePackagePath: 'packages/a_plugin/'); expect(state.hasChanges, true); expect(state.needsVersionChange, true); }); test('requires a version change for example readme.md', () async { final RepositoryPackage package = createFakePlugin('a_plugin', packagesDir); const List changedFiles = [ 'packages/a_plugin/example/README.md', ]; final PackageChangeState state = checkPackageChangeState(package, changedPaths: changedFiles, relativePackagePath: 'packages/a_plugin/'); expect(state.hasChanges, true); expect(state.needsVersionChange, true); }); test('requires a version change for example example.md', () async { final RepositoryPackage package = createFakePlugin('a_plugin', packagesDir); const List changedFiles = [ 'packages/a_plugin/example/lib/example.md', ]; final PackageChangeState state = checkPackageChangeState(package, changedPaths: changedFiles, relativePackagePath: 'packages/a_plugin/'); expect(state.hasChanges, true); expect(state.needsVersionChange, true); }); }); }