// Copyright 2019 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.

/// Container for all information needed to invoke and run a test, paired with
/// any warning information the user needs to see.
class CommandTokens {
  /// Complete list of items needed to invoke and run a test.
  final List<String> tokens;

  /// Optional warning to display to the user.
  ///
  /// This is a great place to put deprecation warnings or non-fatal malformed
  /// test issues.
  final String? warning;

  CommandTokens(this.tokens, {this.warning});
  CommandTokens.empty()
      : tokens = [],
        warning = null;

  String get command => tokens.first;
  List<String> get args => tokens.sublist(1);
  String get fullCommand => tokens.join(' ').trim();

  /// Same as [fullCommand], minus the absolute path to fx, and with any
  /// last-second flags added in.
  String fullCommandDisplay([List<String>? extraArgs]) {
    var _tokens = List<String>.from(tokens);
    if (extraArgs != null) {
      _tokens.addAll(extraArgs);
    }
    return _tokens.join(' ');
  }

  @override
  String toString() => fullCommand;
}
