1c92a5d28a28bee7a4d55423e0a2a48ea3c6fc007Paul Duffin/* 2c92a5d28a28bee7a4d55423e0a2a48ea3c6fc007Paul Duffin * Copyright (C) 2016 The Android Open Source Project 3c92a5d28a28bee7a4d55423e0a2a48ea3c6fc007Paul Duffin * 4c92a5d28a28bee7a4d55423e0a2a48ea3c6fc007Paul Duffin * Licensed under the Apache License, Version 2.0 (the "License"); 5c92a5d28a28bee7a4d55423e0a2a48ea3c6fc007Paul Duffin * you may not use this file except in compliance with the License. 6c92a5d28a28bee7a4d55423e0a2a48ea3c6fc007Paul Duffin * You may obtain a copy of the License at 7c92a5d28a28bee7a4d55423e0a2a48ea3c6fc007Paul Duffin * 8c92a5d28a28bee7a4d55423e0a2a48ea3c6fc007Paul Duffin * http://www.apache.org/licenses/LICENSE-2.0 9c92a5d28a28bee7a4d55423e0a2a48ea3c6fc007Paul Duffin * 10c92a5d28a28bee7a4d55423e0a2a48ea3c6fc007Paul Duffin * Unless required by applicable law or agreed to in writing, software 11c92a5d28a28bee7a4d55423e0a2a48ea3c6fc007Paul Duffin * distributed under the License is distributed on an "AS IS" BASIS, 12c92a5d28a28bee7a4d55423e0a2a48ea3c6fc007Paul Duffin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c92a5d28a28bee7a4d55423e0a2a48ea3c6fc007Paul Duffin * See the License for the specific language governing permissions and 14c92a5d28a28bee7a4d55423e0a2a48ea3c6fc007Paul Duffin * limitations under the License. 15c92a5d28a28bee7a4d55423e0a2a48ea3c6fc007Paul Duffin */ 16c92a5d28a28bee7a4d55423e0a2a48ea3c6fc007Paul Duffinpackage android.icu.cts.coverage.rules; 17c92a5d28a28bee7a4d55423e0a2a48ea3c6fc007Paul Duffin 18c92a5d28a28bee7a4d55423e0a2a48ea3c6fc007Paul Duffinimport android.icu.util.ULocale; 19c92a5d28a28bee7a4d55423e0a2a48ea3c6fc007Paul Duffinimport org.junit.rules.MethodRule; 20c92a5d28a28bee7a4d55423e0a2a48ea3c6fc007Paul Duffinimport org.junit.runners.model.FrameworkMethod; 21c92a5d28a28bee7a4d55423e0a2a48ea3c6fc007Paul Duffinimport org.junit.runners.model.Statement; 22c92a5d28a28bee7a4d55423e0a2a48ea3c6fc007Paul Duffin 23c92a5d28a28bee7a4d55423e0a2a48ea3c6fc007Paul Duffin/** 24c92a5d28a28bee7a4d55423e0a2a48ea3c6fc007Paul Duffin * Add this as a rule to a JUnit 4 class to support switching the {@link ULocale#getDefault()} for 25c92a5d28a28bee7a4d55423e0a2a48ea3c6fc007Paul Duffin * the duration of the test method. 26c92a5d28a28bee7a4d55423e0a2a48ea3c6fc007Paul Duffin * 27c92a5d28a28bee7a4d55423e0a2a48ea3c6fc007Paul Duffin * <p>Only affects test methods that are annotated with {@link ULocaleDefault}. 28c92a5d28a28bee7a4d55423e0a2a48ea3c6fc007Paul Duffin * 29c92a5d28a28bee7a4d55423e0a2a48ea3c6fc007Paul Duffin * @see ULocaleDefault 30c92a5d28a28bee7a4d55423e0a2a48ea3c6fc007Paul Duffin */ 31c92a5d28a28bee7a4d55423e0a2a48ea3c6fc007Paul Duffin@SuppressWarnings("deprecation") 32c92a5d28a28bee7a4d55423e0a2a48ea3c6fc007Paul Duffinpublic class ULocaleDefaultRule implements MethodRule { 33c92a5d28a28bee7a4d55423e0a2a48ea3c6fc007Paul Duffin 34c92a5d28a28bee7a4d55423e0a2a48ea3c6fc007Paul Duffin @Override 35c92a5d28a28bee7a4d55423e0a2a48ea3c6fc007Paul Duffin public Statement apply(final Statement base, FrameworkMethod method, Object target) { 36c92a5d28a28bee7a4d55423e0a2a48ea3c6fc007Paul Duffin final ULocaleDefault annotation = method.getAnnotation(ULocaleDefault.class); 37c92a5d28a28bee7a4d55423e0a2a48ea3c6fc007Paul Duffin if (annotation == null) { 38c92a5d28a28bee7a4d55423e0a2a48ea3c6fc007Paul Duffin return base; 39c92a5d28a28bee7a4d55423e0a2a48ea3c6fc007Paul Duffin } else { 40c92a5d28a28bee7a4d55423e0a2a48ea3c6fc007Paul Duffin return new Statement() { 41c92a5d28a28bee7a4d55423e0a2a48ea3c6fc007Paul Duffin @Override 42c92a5d28a28bee7a4d55423e0a2a48ea3c6fc007Paul Duffin public void evaluate() throws Throwable { 43c92a5d28a28bee7a4d55423e0a2a48ea3c6fc007Paul Duffin ULocale previousDefault = ULocale.getDefault(); 44c92a5d28a28bee7a4d55423e0a2a48ea3c6fc007Paul Duffin try { 45c92a5d28a28bee7a4d55423e0a2a48ea3c6fc007Paul Duffin ULocale.setDefault(ULocale.forLanguageTag(annotation.languageTag())); 46c92a5d28a28bee7a4d55423e0a2a48ea3c6fc007Paul Duffin base.evaluate(); 47c92a5d28a28bee7a4d55423e0a2a48ea3c6fc007Paul Duffin } finally { 48c92a5d28a28bee7a4d55423e0a2a48ea3c6fc007Paul Duffin ULocale.setDefault(previousDefault); 49c92a5d28a28bee7a4d55423e0a2a48ea3c6fc007Paul Duffin } 50c92a5d28a28bee7a4d55423e0a2a48ea3c6fc007Paul Duffin } 51c92a5d28a28bee7a4d55423e0a2a48ea3c6fc007Paul Duffin }; 52c92a5d28a28bee7a4d55423e0a2a48ea3c6fc007Paul Duffin } 53c92a5d28a28bee7a4d55423e0a2a48ea3c6fc007Paul Duffin } 54c92a5d28a28bee7a4d55423e0a2a48ea3c6fc007Paul Duffin} 55