#! /usr/bin/env bash
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
#

# The purpose of this ci script is to ensure that a pull request doesn't
# unintentionally add JUnit jupiter APIs to vintage tests, or add vintage
# APIs to new jupiter tests.
NUM_EXPECTED=0
ALLOWED=(
  src/it/plugin-test/src/test/java/org/apache/accumulo/plugin/it/PluginIT.java
)

ALLOWED_PIPE_SEP=$({ for x in "${ALLOWED[@]}"; do echo "$x"; done; } | paste -sd'|')

function findalljunitproblems() {
  # -P for perl matching, -R for recursive, -l for matching files
  local opts='-PRl'
  if [[ $1 == 'print' ]]; then
    # -P for perl matching, -R for recursive, -l for matching files, -H for always showing filenames
    opts='-PRlH'
  fi
  # find any new classes using something other than the jupiter API, except those allowed
  grep "$opts" --include='*.java' 'org[.]junit[.](?!jupiter)' | grep -Pv "^(${ALLOWED_PIPE_SEP//./[.]})\$"
  # find any uses of the jupiter API in the allowed vintage classes
  grep "$opts" 'org[.]junit[.]jupiter' "${ALLOWED[@]}"
}

function comparecounts() {
  local count
  count=$(findalljunitproblems | wc -l)
  if [[ $NUM_EXPECTED -ne $count ]]; then
    echo "Expected $NUM_EXPECTED, but found $count classes using the wrong JUnit APIs:"
    findalljunitproblems 'print'
    return 1
  fi
}

comparecounts && echo "Found exactly $NUM_EXPECTED unapproved JUnit API uses, as expected"
