|  | // Copyright 2020 The Fuchsia 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:fxtest/fxtest.dart'; | 
|  | import 'package:fxutils/fxutils.dart'; | 
|  |  | 
|  | class FxRunException implements Exception { | 
|  | final String fxCmd; | 
|  | final int exitCode; | 
|  | FxRunException(this.fxCmd, [this.exitCode = failureExitCode]); | 
|  | @override | 
|  | String toString() => 'FxRunException: Failed to run `$fxCmd` :: ' | 
|  | 'Exit Code: $exitCode'; | 
|  | } | 
|  |  | 
|  | class FailFastException implements Exception { | 
|  | @override | 
|  | String toString() => 'FailFastException'; | 
|  | } | 
|  |  | 
|  | class MalformedFuchsiaUrlException implements Exception { | 
|  | final String packageUrl; | 
|  | MalformedFuchsiaUrlException(this.packageUrl); | 
|  |  | 
|  | @override | 
|  | String toString() => | 
|  | 'MalformedFuchsiaUrlException: Malformed Fuchsia Package ' | 
|  | 'Url `$packageUrl` could not be parsed'; | 
|  | } | 
|  |  | 
|  | class HashFileNotFoundException implements Exception { | 
|  | final String message; | 
|  | HashFileNotFoundException(this.message); | 
|  |  | 
|  | @override | 
|  | String toString() => message; | 
|  | } | 
|  |  | 
|  | class PackageRepositoryException implements Exception { | 
|  | String file; | 
|  | final String message; | 
|  | PackageRepositoryException(this.message, [this.file = '']); | 
|  |  | 
|  | @override | 
|  | String toString() => '$file: $message'; | 
|  | } | 
|  |  | 
|  | class PackageRepositoryParseException extends PackageRepositoryException { | 
|  | PackageRepositoryParseException(String message) : super(message); | 
|  | } | 
|  |  | 
|  | class UnparsedTestException implements Exception { | 
|  | final String message; | 
|  | UnparsedTestException(this.message); | 
|  |  | 
|  | @override | 
|  | String toString() => message; | 
|  | } | 
|  |  | 
|  | class UnrunnableTestException implements Exception { | 
|  | final String message; | 
|  | UnrunnableTestException(this.message); | 
|  |  | 
|  | @override | 
|  | String toString() => message; | 
|  | } | 
|  |  | 
|  | class SigIntException implements Exception {} | 
|  |  | 
|  | const _missingFxMessage = | 
|  | 'Did not find `fx` command at expected location: //$fxLocation'; | 
|  |  | 
|  | class MissingFxException implements Exception { | 
|  | @override | 
|  | String toString() => _missingFxMessage; | 
|  | } | 
|  |  | 
|  | class OutputClosedException implements Exception { | 
|  | final int exitCode; | 
|  | OutputClosedException([this.exitCode = 0]); | 
|  | } | 
|  |  | 
|  | class BadMapPathException implements Exception { | 
|  | final String message; | 
|  | BadMapPathException(this.message); | 
|  | } |