1b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin/* 2b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin * Copyright (C) 2015 The Android Open Source Project 3b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin * 4b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin * Licensed under the Apache License, Version 2.0 (the "License"); 5b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin * you may not use this file except in compliance with the License. 6b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin * You may obtain a copy of the License at 7b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin * 8b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin * http://www.apache.org/licenses/LICENSE-2.0 9b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin * 10b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin * Unless required by applicable law or agreed to in writing, software 11b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin * distributed under the License is distributed on an "AS IS" BASIS, 12b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin * See the License for the specific language governing permissions and 14b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin * limitations under the License. 15b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin */ 16b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin 17b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubinpackage tests.util; 18b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin 19b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin/** 20b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin * Runner which executes the provided code under test (via a callback) for each provided input 21b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin * value. 22b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin */ 23b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubinpublic final class ForEachRunner { 24b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin 25b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin /** 26b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin * Callback parameterized with a value. 27b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin */ 28b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin public interface Callback<T> { 29b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin /** 30b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin * Invokes the callback for the provided value. 31b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin */ 32b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin void run(T value) throws Exception; 33b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin } 34b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin 35b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin private ForEachRunner() {} 36b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin 37b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin /** 38b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin * Invokes the provided callback for each of the provided named values. 39b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin * 40b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin * @param namesAndValues named values represented as name-value pairs. 41b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin * 42b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin * @param <T> type of value. 43b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin */ 44b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin public static <T> void runNamed(Callback<T> callback, Iterable<Pair<String, T>> namesAndValues) 45b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin throws Exception { 46b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin for (Pair<String, T> nameAndValue : namesAndValues) { 47b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin try { 48b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin callback.run(nameAndValue.getSecond()); 49b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin } catch (Throwable e) { 50b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin throw new Exception("Failed for " + nameAndValue.getFirst() + ": " + e.getMessage(), e); 51b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin } 52b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin } 53b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin } 54b1fe85cc976c676eb50ff886596c93e04fd71d82Alex Klyubin} 55