| // 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:conductor_core/src/proto/conductor_state.pbenum.dart'; |
| import 'package:conductor_core/src/version.dart'; |
| |
| import 'common.dart'; |
| |
| void main() { |
| group('Version.fromString()', () { |
| test('parses commits past a tagged stable', () { |
| const String versionString = '2.8.0-1-g2ef5ad67fe'; |
| final Version version; |
| try { |
| version = Version.fromString(versionString); |
| } on Exception catch (exception) { |
| fail('Failed parsing "$versionString" with:\n$exception'); |
| } |
| expect(version.x, 2); |
| expect(version.y, 8); |
| expect(version.z, 0); |
| expect(version.m, isNull); |
| expect(version.n, isNull); |
| expect(version.commits, 1); |
| expect(version.type, VersionType.gitDescribe); |
| }); |
| }); |
| group('Version.increment()', () { |
| test('throws exception on nonsensical `level`', () { |
| final List<String> levels = <String>['f', '0', 'xyz']; |
| for (final String level in levels) { |
| final Version version = Version.fromString('1.0.0-0.0.pre'); |
| expect( |
| () => Version.increment(version, level).toString(), |
| throwsExceptionWith('Unknown increment level $level.'), |
| ); |
| } |
| }); |
| |
| test('does not support incrementing x', () { |
| const String level = 'x'; |
| |
| final Version version = Version.fromString('1.0.0-0.0.pre'); |
| expect( |
| () => Version.increment(version, level).toString(), |
| throwsExceptionWith( |
| 'Incrementing $level is not supported by this tool'), |
| ); |
| }); |
| |
| test('successfully increments y', () { |
| const String level = 'y'; |
| |
| Version version = Version.fromString('1.0.0-0.0.pre'); |
| expect(Version.increment(version, level).toString(), '1.1.0-0.0.pre'); |
| |
| version = Version.fromString('10.20.0-40.50.pre'); |
| expect(Version.increment(version, level).toString(), '10.21.0-0.0.pre'); |
| |
| version = Version.fromString('1.18.0-3.0.pre'); |
| expect(Version.increment(version, level).toString(), '1.19.0-0.0.pre'); |
| }); |
| |
| test('successfully increments z', () { |
| const String level = 'z'; |
| |
| Version version = Version.fromString('1.0.0'); |
| expect(Version.increment(version, level).toString(), '1.0.1'); |
| |
| version = Version.fromString('10.20.0'); |
| expect(Version.increment(version, level).toString(), '10.20.1'); |
| |
| version = Version.fromString('1.18.3'); |
| expect(Version.increment(version, level).toString(), '1.18.4'); |
| }); |
| |
| test('does not support incrementing m', () { |
| const String level = 'm'; |
| |
| final Version version = Version.fromString('1.0.0-0.0.pre'); |
| expect( |
| () => Version.increment(version, level).toString(), |
| throwsAssertionWith("Do not increment 'm' via Version.increment"), |
| ); |
| }); |
| |
| test('successfully increments n', () { |
| const String level = 'n'; |
| |
| Version version = Version.fromString('1.0.0-0.0.pre'); |
| expect(Version.increment(version, level).toString(), '1.0.0-0.1.pre'); |
| |
| version = Version.fromString('10.20.0-40.50.pre'); |
| expect(Version.increment(version, level).toString(), '10.20.0-40.51.pre'); |
| |
| version = Version.fromString('1.18.0-3.0.pre'); |
| expect(Version.increment(version, level).toString(), '1.18.0-3.1.pre'); |
| }); |
| }, onPlatform: <String, dynamic>{ |
| 'windows': const Skip('Flutter Conductor only supported on macos/linux'), |
| }); |
| |
| group('.ensureValid()', () { |
| test('throws when x does not match', () { |
| const String versionString = '1.2.3-4.5.pre'; |
| const String candidateBranch = 'flutter-3.2-candidate.4'; |
| final Version version = Version.fromString(versionString); |
| expect( |
| () => version.ensureValid(candidateBranch, ReleaseType.BETA_HOTFIX), |
| throwsExceptionWith( |
| 'Parsed version $versionString has a different x value than ' |
| 'candidate branch $candidateBranch', |
| ), |
| ); |
| }); |
| |
| test('throws when y does not match', () { |
| const String versionString = '1.2.3'; |
| const String candidateBranch = 'flutter-1.15-candidate.4'; |
| final Version version = Version.fromString(versionString); |
| expect( |
| () => version.ensureValid(candidateBranch, ReleaseType.BETA_INITIAL), |
| throwsExceptionWith( |
| 'Parsed version $versionString has a different y value than ' |
| 'candidate branch $candidateBranch', |
| ), |
| ); |
| }); |
| |
| test('throws when m does not match', () { |
| const String versionString = '1.2.3-4.5.pre'; |
| const String candidateBranch = 'flutter-1.2-candidate.0'; |
| final Version version = Version.fromString(versionString); |
| expect( |
| () => version.ensureValid(candidateBranch, ReleaseType.BETA_HOTFIX), |
| throwsExceptionWith( |
| 'Parsed version $versionString has a different m value than ' |
| 'candidate branch $candidateBranch', |
| ), |
| ); |
| }); |
| |
| test('does not validate m if version type is stable', () { |
| const String versionString = '1.2.0'; |
| const String candidateBranch = 'flutter-1.2-candidate.98'; |
| final Version version = Version.fromString(versionString); |
| expect( |
| () => version.ensureValid(candidateBranch, ReleaseType.STABLE_HOTFIX), |
| isNot(throwsException), |
| ); |
| }); |
| |
| test('throws on malformed candidate branch', () { |
| const String versionString = '1.2.0'; |
| const String candidateBranch = 'stable'; |
| final Version version = Version.fromString(versionString); |
| expect( |
| () => version.ensureValid(candidateBranch, ReleaseType.STABLE_HOTFIX), |
| throwsExceptionWith( |
| 'Candidate branch $candidateBranch does not match the pattern', |
| ), |
| ); |
| }); |
| }); |
| } |