1de76a5adSDamjan Jovanovic /************************************************************** 2de76a5adSDamjan Jovanovic * 3de76a5adSDamjan Jovanovic * Licensed to the Apache Software Foundation (ASF) under one 4de76a5adSDamjan Jovanovic * or more contributor license agreements. See the NOTICE file 5de76a5adSDamjan Jovanovic * distributed with this work for additional information 6de76a5adSDamjan Jovanovic * regarding copyright ownership. The ASF licenses this file 7de76a5adSDamjan Jovanovic * to you under the Apache License, Version 2.0 (the 8de76a5adSDamjan Jovanovic * "License"); you may not use this file except in compliance 9de76a5adSDamjan Jovanovic * with the License. You may obtain a copy of the License at 10de76a5adSDamjan Jovanovic * 11de76a5adSDamjan Jovanovic * http://www.apache.org/licenses/LICENSE-2.0 12de76a5adSDamjan Jovanovic * 13de76a5adSDamjan Jovanovic * Unless required by applicable law or agreed to in writing, 14de76a5adSDamjan Jovanovic * software distributed under the License is distributed on an 15de76a5adSDamjan Jovanovic * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16de76a5adSDamjan Jovanovic * KIND, either express or implied. See the License for the 17de76a5adSDamjan Jovanovic * specific language governing permissions and limitations 18de76a5adSDamjan Jovanovic * under the License. 19de76a5adSDamjan Jovanovic * 20de76a5adSDamjan Jovanovic *************************************************************/ 21de76a5adSDamjan Jovanovic 22de76a5adSDamjan Jovanovic 232f709283SDamjan Jovanovic package api.i18n; 24de76a5adSDamjan Jovanovic 25de76a5adSDamjan Jovanovic import com.sun.star.i18n.CalendarDisplayCode; 26de76a5adSDamjan Jovanovic import com.sun.star.i18n.NativeNumberMode; 27de76a5adSDamjan Jovanovic import com.sun.star.i18n.XExtendedCalendar; 28de76a5adSDamjan Jovanovic import com.sun.star.i18n.XLocaleData; 29de76a5adSDamjan Jovanovic import com.sun.star.lang.Locale; 30de76a5adSDamjan Jovanovic import com.sun.star.lang.XMultiServiceFactory; 31de76a5adSDamjan Jovanovic import com.sun.star.uno.UnoRuntime; 322f709283SDamjan Jovanovic import com.sun.star.uno.XComponentContext; 332f709283SDamjan Jovanovic import org.junit.After; 342f709283SDamjan Jovanovic import org.junit.AfterClass; 352f709283SDamjan Jovanovic import org.junit.Before; 362f709283SDamjan Jovanovic import org.junit.BeforeClass; 372f709283SDamjan Jovanovic import org.junit.Assert; 382f709283SDamjan Jovanovic import org.junit.Test; 39de76a5adSDamjan Jovanovic import java.text.SimpleDateFormat; 40de76a5adSDamjan Jovanovic import java.util.Calendar; 41de76a5adSDamjan Jovanovic import java.util.Date; 42de76a5adSDamjan Jovanovic import java.util.GregorianCalendar; 432f709283SDamjan Jovanovic import org.openoffice.test.uno.UnoApp; 442f709283SDamjan Jovanovic 45de76a5adSDamjan Jovanovic 46de76a5adSDamjan Jovanovic /** 47de76a5adSDamjan Jovanovic * 48de76a5adSDamjan Jovanovic */ 492f709283SDamjan Jovanovic public class XExtendedCalendarTest { 502f709283SDamjan Jovanovic private static final UnoApp app = new UnoApp(); 512f709283SDamjan Jovanovic 522f709283SDamjan Jovanovic private XComponentContext xContext = null; 53de76a5adSDamjan Jovanovic public XExtendedCalendar oObj = null; 54de76a5adSDamjan Jovanovic boolean useUSENLocale = false; 552f709283SDamjan Jovanovic 562f709283SDamjan Jovanovic // setup and close connections 572f709283SDamjan Jovanovic @BeforeClass setUpConnection()582f709283SDamjan Jovanovic public static void setUpConnection() throws Exception 592f709283SDamjan Jovanovic { 602f709283SDamjan Jovanovic app.start(); 612f709283SDamjan Jovanovic } 622f709283SDamjan Jovanovic 632f709283SDamjan Jovanovic @AfterClass tearDownConnection()642f709283SDamjan Jovanovic public static void tearDownConnection() throws InterruptedException, com.sun.star.uno.Exception 652f709283SDamjan Jovanovic { 662f709283SDamjan Jovanovic app.close(); 672f709283SDamjan Jovanovic } 682f709283SDamjan Jovanovic 69de76a5adSDamjan Jovanovic /** 70de76a5adSDamjan Jovanovic * Load a calendar 71de76a5adSDamjan Jovanovic */ 722f709283SDamjan Jovanovic @Before before()732f709283SDamjan Jovanovic public void before() throws Exception { 742f709283SDamjan Jovanovic xContext = app.getComponentContext(); 75de76a5adSDamjan Jovanovic Locale[] installed_locales = null; 76de76a5adSDamjan Jovanovic XLocaleData locData = null; 772f709283SDamjan Jovanovic locData = UnoRuntime.queryInterface( 78de76a5adSDamjan Jovanovic XLocaleData.class, 792f709283SDamjan Jovanovic xContext.getServiceManager().createInstanceWithContext("com.sun.star.i18n.LocaleData", xContext) 802f709283SDamjan Jovanovic ); 812f709283SDamjan Jovanovic oObj = UnoRuntime.queryInterface( 822f709283SDamjan Jovanovic XExtendedCalendar.class, 832f709283SDamjan Jovanovic xContext.getServiceManager().createInstanceWithContext("com.sun.star.i18n.LocaleCalendar", xContext) 842f709283SDamjan Jovanovic ); 85de76a5adSDamjan Jovanovic installed_locales = locData.getAllInstalledLocaleNames(); 86de76a5adSDamjan Jovanovic // use first Locale as fallback, if US-English is not found 87de76a5adSDamjan Jovanovic Locale lo = installed_locales[0]; 88de76a5adSDamjan Jovanovic for (int i=0; i<installed_locales.length; i++) { 89de76a5adSDamjan Jovanovic // search for "en" and "US" 90de76a5adSDamjan Jovanovic if (installed_locales[i].Language.equals("en") && 91de76a5adSDamjan Jovanovic installed_locales[i].Country.equals("US")) { 92de76a5adSDamjan Jovanovic lo = installed_locales[i]; 93de76a5adSDamjan Jovanovic useUSENLocale = true; 94de76a5adSDamjan Jovanovic } 95de76a5adSDamjan Jovanovic } 962f709283SDamjan Jovanovic System.out.println("Choose Locale: '" + lo.Language + "', '" + lo.Country + "'"); 97de76a5adSDamjan Jovanovic oObj.loadDefaultCalendar(lo); 98de76a5adSDamjan Jovanovic } 99de76a5adSDamjan Jovanovic 1002f709283SDamjan Jovanovic @Test _getDisplayString()101de76a5adSDamjan Jovanovic public void _getDisplayString() { 102de76a5adSDamjan Jovanovic // against regression: the current state is the right one. 103de76a5adSDamjan Jovanovic boolean result = true; 104de76a5adSDamjan Jovanovic String[] displayString = new String[6]; 105de76a5adSDamjan Jovanovic // build the defaults with the Java Calendar functions 106de76a5adSDamjan Jovanovic String[] expectedStringResult = new String[6]; 107de76a5adSDamjan Jovanovic Calendar cal = new GregorianCalendar(); 108de76a5adSDamjan Jovanovic Date actualDate = cal.getTime(); 109de76a5adSDamjan Jovanovic 110de76a5adSDamjan Jovanovic SimpleDateFormat sdf = getSDF("yy"); 111de76a5adSDamjan Jovanovic expectedStringResult[0] = "AD" + sdf.format(actualDate); 112de76a5adSDamjan Jovanovic 113de76a5adSDamjan Jovanovic sdf = getSDF("yyyy"); 114de76a5adSDamjan Jovanovic expectedStringResult[1] = "AD" + sdf.format(actualDate); 115de76a5adSDamjan Jovanovic 116de76a5adSDamjan Jovanovic sdf = getSDF("MM"); 117de76a5adSDamjan Jovanovic expectedStringResult[2] = sdf.format(actualDate); 118de76a5adSDamjan Jovanovic 119de76a5adSDamjan Jovanovic int month = cal.get(Calendar.MONTH) + 1; 120de76a5adSDamjan Jovanovic String quarter = "Q1"; 121de76a5adSDamjan Jovanovic String longQuarter = "1st quarter"; 122*da5c8a22SDamjan Jovanovic if (4 <= month && month <= 6) { quarter = "Q2"; longQuarter = "2nd quarter"; } 123*da5c8a22SDamjan Jovanovic else if (7 <= month && month <= 9) { quarter = "Q3"; longQuarter = "3rd quarter"; } 124*da5c8a22SDamjan Jovanovic else if (10 <= month && month <= 12) {quarter = "Q4"; longQuarter = "4th quarter"; } 125de76a5adSDamjan Jovanovic expectedStringResult[3] = quarter; 126de76a5adSDamjan Jovanovic expectedStringResult[4] = longQuarter; 127de76a5adSDamjan Jovanovic 128de76a5adSDamjan Jovanovic sdf = getSDF("MMMM"); 129de76a5adSDamjan Jovanovic expectedStringResult[5] = sdf.format(actualDate); 130de76a5adSDamjan Jovanovic 131de76a5adSDamjan Jovanovic displayString[0] = oObj.getDisplayString(CalendarDisplayCode.SHORT_YEAR_AND_ERA, NativeNumberMode.NATNUM0); 132de76a5adSDamjan Jovanovic displayString[1] = oObj.getDisplayString(CalendarDisplayCode.LONG_YEAR_AND_ERA, NativeNumberMode.NATNUM0); 133de76a5adSDamjan Jovanovic displayString[2] = oObj.getDisplayString(CalendarDisplayCode.LONG_MONTH, NativeNumberMode.NATNUM0); 134de76a5adSDamjan Jovanovic displayString[3] = oObj.getDisplayString(CalendarDisplayCode.SHORT_QUARTER, NativeNumberMode.NATNUM0); 135de76a5adSDamjan Jovanovic displayString[4] = oObj.getDisplayString(CalendarDisplayCode.LONG_QUARTER, NativeNumberMode.NATNUM0); 136de76a5adSDamjan Jovanovic displayString[5] = oObj.getDisplayString(CalendarDisplayCode.LONG_MONTH_NAME, NativeNumberMode.NATNUM0); 137de76a5adSDamjan Jovanovic 138de76a5adSDamjan Jovanovic for (int i=0; i<displayString.length; i++) { 139de76a5adSDamjan Jovanovic boolean locResult = false; 140de76a5adSDamjan Jovanovic if (useUSENLocale) { 141de76a5adSDamjan Jovanovic locResult = displayString[i].equals(expectedStringResult[i]); 142de76a5adSDamjan Jovanovic if (!locResult) 1432f709283SDamjan Jovanovic System.out.println("getDisplayString() result " + i + ": '" + displayString[i] 144de76a5adSDamjan Jovanovic + "', expected: '" + expectedStringResult[i] + "'"); 145de76a5adSDamjan Jovanovic result &= locResult; 146de76a5adSDamjan Jovanovic } 147de76a5adSDamjan Jovanovic else { // no defaults for other locales, just expect a String 148de76a5adSDamjan Jovanovic locResult &= displayString[i] != null; 149de76a5adSDamjan Jovanovic if (!locResult) 1502f709283SDamjan Jovanovic System.out.println("getDisplayString() result " + i + " was 'null'"); 151de76a5adSDamjan Jovanovic result &= locResult; 152de76a5adSDamjan Jovanovic } 153de76a5adSDamjan Jovanovic } 1542f709283SDamjan Jovanovic Assert.assertTrue("getDisplayString()", result); 155de76a5adSDamjan Jovanovic } 156de76a5adSDamjan Jovanovic getSDF(String format)157de76a5adSDamjan Jovanovic private SimpleDateFormat getSDF(String format){ 158de76a5adSDamjan Jovanovic if (useUSENLocale) return new SimpleDateFormat(format, java.util.Locale.US); 159de76a5adSDamjan Jovanovic return new SimpleDateFormat(format); 160de76a5adSDamjan Jovanovic } 161de76a5adSDamjan Jovanovic } 162