#!/bin/bash
# Copyright 2018 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.

# Automated tests for //tools/devshell/lib/style.sh
#
# Usage: style-tests
#
#   Returns: Error status if actual output does not match expected.

TEST_NAME="$(basename "${BASH_SOURCE[0]}")"
TESTS_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"

verbose() {
  echo
  echo "======================================================="
  echo
  echo "$@"
  echo
  "$@"
  echo
}

test_main() {
  local expected_out="${TESTS_DIR}/expected/${TEST_NAME}.out"
  local expected_err="${TESTS_DIR}/expected/${TEST_NAME}.err"
  local capture_dir=$(mktemp -d)
  local actual_out="${capture_dir}/${TEST_NAME}.out"
  local actual_err="${capture_dir}/${TEST_NAME}.err"
  ${TESTS_DIR}/style-test-visually 1> "${actual_out}" 2> "${actual_err}"

  local status=0
  verbose diff "${expected_out}" "${actual_out}" || status=$?
  verbose diff "${expected_err}" "${actual_err}" || status=$?

  return $status
}

test_main "$@" || return $?
