execute method

  1. @override
Future<void> execute({
  1. required CancelToken cancelToken,
  2. required TestReport report,
  3. required TestController tester,
})

Sets the formatted date to a variable on the TestController.

Implementation

@override
Future<void> execute({
  required CancelToken cancelToken,
  required TestReport report,
  required TestController tester,
}) async {
  final date = tester.resolveVariable(this.date);
  final format = tester.resolveVariable(this.format);
  final variableName = tester.resolveVariable(this.variableName) ?? '_date';

  assert(format?.isNotEmpty == true);
  assert(variableName.isNotEmpty == true);

  final name = "$id('$variableName', '$date', '$format')";
  log(
    name,
    tester: tester,
  );

  DateTime dateTime;
  if (date == null || (date is String && date.isNotEmpty != true)) {
    dateTime = DateTime.now();
  } else if (date is DateTime) {
    dateTime = date.toUtc();
  } else if (date is int) {
    dateTime = DateTime.fromMillisecondsSinceEpoch(
      date,
      isUtc: true,
    );
  } else if (date is String) {
    if (date.contains('T') == true) {
      try {
        dateTime = DateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").parse(
          date,
          true,
        );
      } catch (e) {
        dateTime = DateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'").parse(
          date,
          true,
        );
      }
    } else {
      dateTime = DateTime.fromMillisecondsSinceEpoch(
        int.parse(date),
        isUtc: true,
      );
    }
  } else {
    throw Exception('Unknown type for date: [$date]');
  }

  dateTime = DateTime.fromMillisecondsSinceEpoch(
      dateTime.millisecondsSinceEpoch +
          Duration(
                  days: offsetDays,
                  hours: offsetHours,
                  minutes: offsetMinutes,
                  seconds: offsetSeconds)
              .inMilliseconds);

  if (utc != true) {
    dateTime = dateTime.toLocal();
  }

  tester.setTestVariable(
    variableName: variableName,
    value: DateFormat(format).format(dateTime),
  );
}