Mercurial > hg > release > icedtea7-forest-2.6 > jdk
changeset 9749:b00a29a55d68 jdk7u221-b02 jdk7u221-ga jdk7u231-b00
Merge
author | andrew |
---|---|
date | Tue, 16 Apr 2019 02:48:40 +0100 |
parents | 113968fa7826 (current diff) c933c0ff6815 (diff) |
children | 3654dc22b8e9 |
files | |
diffstat | 73 files changed, 7303 insertions(+), 456 deletions(-) [+] |
line wrap: on
line diff
--- a/.hgtags Wed Apr 03 03:51:25 2019 +0100 +++ b/.hgtags Tue Apr 16 02:48:40 2019 +0100 @@ -621,3 +621,4 @@ f992c97c7f1e47b8a0dacddb5b91ac2e937c4eb8 jdk7u211-b01 303a29c24e3b1c876b4142f14d5dcacdbc33fac4 jdk7u211-b02 ca1fa5965ae7982b6ed872bb7af19eefb8ba760f jdk7u221-b00 +1321440241267d98a2eed2c3efd1e1cc30c4aa88 jdk7u221-b01
--- a/make/tools/freetypecheck/freetypecheck.c Wed Apr 03 03:51:25 2019 +0100 +++ b/make/tools/freetypecheck/freetypecheck.c Tue Apr 16 02:48:40 2019 +0100 @@ -74,26 +74,65 @@ #define QUOTEMACRO(x) QUOTEME(x) #define QUOTEME(x) #x -int main(int argc, char** argv) { - char v[50]; - FT_Int major, minor, patch; - FT_Library library; - sprintf(v, "%d.%d.%d", FREETYPE_MAJOR, FREETYPE_MINOR, FREETYPE_PATCH); +int compare_versions(FT_Int req_major, FT_Int req_minor, FT_Int req_patch, + FT_Int major, FT_Int minor, FT_Int patch) { + if (major > req_major) { + printf("Major version %d greater than required major version %d\n", + major, req_major); + return 0; + } + if (major < req_major) { + printf("Major version %d less than required major version %d\n", + major, req_major); + return -1; + } + printf("Major version %d equal to required major version %d\n", + major, req_major); + if (minor > req_minor) { + printf("Minor version %d greater than required minor version %d\n", + minor, req_minor); + return 0; + } + if (minor < req_minor) { + printf("Minor version %d less than required minor version %d\n", + minor, req_minor); + return -2; + } + printf("Minor version %d equal to required minor version %d\n", + minor, req_minor); + if (patch >= req_patch) { + printf("Patch version %d greater than or equal to required patch version %d\n", + patch, req_patch); + return 0; + } + printf("Patch version %d less than required patch version %d\n", + patch, req_patch); + return -3; +} - printf("Required version of freetype: %s\n", - QUOTEMACRO(REQUIRED_FREETYPE_VERSION)); +int main(int argc, char** argv) { + FT_Int major, minor, patch, req_major, req_minor, req_patch; + FT_Library library; - printf("Detected freetype headers: %s\n", v); - if (strcmp(v, QUOTEMACRO(REQUIRED_FREETYPE_VERSION)) < 0) { + sscanf(QUOTEMACRO(REQUIRED_FREETYPE_VERSION), + "%d.%d.%d", &req_major, &req_minor, &req_patch); + printf("Required version of freetype: %d.%d.%d\n", + req_major, req_minor, req_patch); + + printf("Detected freetype headers: %d.%d.%d\n", + FREETYPE_MAJOR, FREETYPE_MINOR, FREETYPE_PATCH); + if (compare_versions(req_major, req_minor, req_patch, + FREETYPE_MAJOR, FREETYPE_MINOR, FREETYPE_PATCH) < 0) { printf("Failed: headers are too old.\n"); } FT_Init_FreeType(&library); FT_Library_Version(library, &major, &minor, &patch); - sprintf(v, "%d.%d.%d", major, minor, patch); - printf("Detected freetype library: %s\n", v); - if (strcmp(v, QUOTEMACRO(REQUIRED_FREETYPE_VERSION)) < 0) { + printf("Detected freetype library: %d.%d.%d\n", + major, minor, patch); + if (compare_versions(req_major, req_minor, req_patch, + major, minor, patch) < 0) { printf("Failed: too old library.\n"); }
--- a/make/tools/src/build/tools/generatecurrencydata/GenerateCurrencyData.java Wed Apr 03 03:51:25 2019 +0100 +++ b/make/tools/src/build/tools/generatecurrencydata/GenerateCurrencyData.java Tue Apr 16 02:48:40 2019 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -72,10 +72,6 @@ private static String formatVersion; private static String dataVersion; private static String validCurrencyCodes; - private static String currenciesWith0MinorUnitDecimals; - private static String currenciesWith1MinorUnitDecimal; - private static String currenciesWith3MinorUnitDecimal; - private static String currenciesWithMinorUnitsUndefined; // handy constants - must match definitions in java.util.Currency // magic number @@ -83,29 +79,31 @@ // number of characters from A to Z private static final int A_TO_Z = ('Z' - 'A') + 1; // entry for invalid country codes - private static final int INVALID_COUNTRY_ENTRY = 0x007F; + private static final int INVALID_COUNTRY_ENTRY = 0x0000007F; // entry for countries without currency - private static final int COUNTRY_WITHOUT_CURRENCY_ENTRY = 0x0080; + private static final int COUNTRY_WITHOUT_CURRENCY_ENTRY = 0x00000200; // mask for simple case country entries - private static final int SIMPLE_CASE_COUNTRY_MASK = 0x0000; + private static final int SIMPLE_CASE_COUNTRY_MASK = 0x00000000; // mask for simple case country entry final character - private static final int SIMPLE_CASE_COUNTRY_FINAL_CHAR_MASK = 0x001F; + private static final int SIMPLE_CASE_COUNTRY_FINAL_CHAR_MASK = 0x0000001F; // mask for simple case country entry default currency digits - private static final int SIMPLE_CASE_COUNTRY_DEFAULT_DIGITS_MASK = 0x0060; + private static final int SIMPLE_CASE_COUNTRY_DEFAULT_DIGITS_MASK = 0x000001E0; // shift count for simple case country entry default currency digits private static final int SIMPLE_CASE_COUNTRY_DEFAULT_DIGITS_SHIFT = 5; + // maximum number for simple case country entry default currency digits + private static final int SIMPLE_CASE_COUNTRY_MAX_DEFAULT_DIGITS = 9; // mask for special case country entries - private static final int SPECIAL_CASE_COUNTRY_MASK = 0x0080; + private static final int SPECIAL_CASE_COUNTRY_MASK = 0x00000200; // mask for special case country index - private static final int SPECIAL_CASE_COUNTRY_INDEX_MASK = 0x001F; + private static final int SPECIAL_CASE_COUNTRY_INDEX_MASK = 0x0000001F; // delta from entry index component in main table to index into special case tables private static final int SPECIAL_CASE_COUNTRY_INDEX_DELTA = 1; // mask for distinguishing simple and special case countries private static final int COUNTRY_TYPE_MASK = SIMPLE_CASE_COUNTRY_MASK | SPECIAL_CASE_COUNTRY_MASK; // mask for the numeric code of the currency - private static final int NUMERIC_CODE_MASK = 0x0003FF00; + private static final int NUMERIC_CODE_MASK = 0x000FFC00; // shift count for the numeric code of the currency - private static final int NUMERIC_CODE_SHIFT = 8; + private static final int NUMERIC_CODE_SHIFT = 10; // generated data private static int[] mainTable = new int[A_TO_Z * A_TO_Z]; @@ -120,7 +118,7 @@ private static int[] specialCaseOldCurrenciesNumericCode = new int[maxSpecialCases]; private static int[] specialCaseNewCurrenciesNumericCode = new int[maxSpecialCases]; - private static final int maxOtherCurrencies = 70; + private static final int maxOtherCurrencies = 128; private static int otherCurrenciesCount = 0; private static StringBuffer otherCurrencies = new StringBuffer(); private static int[] otherCurrenciesDefaultFractionDigits = new int[maxOtherCurrencies]; @@ -129,6 +127,11 @@ // date format for parsing cut-over times private static SimpleDateFormat format; + // Minor Units + private static String[] currenciesWithDefinedMinorUnitDecimals = + new String[SIMPLE_CASE_COUNTRY_MAX_DEFAULT_DIGITS + 1]; + private static String currenciesWithMinorUnitsUndefined; + public static void main(String[] args) { // Look for "-o outputfilename" option @@ -171,16 +174,14 @@ formatVersion = (String) currencyData.get("formatVersion"); dataVersion = (String) currencyData.get("dataVersion"); validCurrencyCodes = (String) currencyData.get("all"); - currenciesWith0MinorUnitDecimals = (String) currencyData.get("minor0"); - currenciesWith1MinorUnitDecimal = (String) currencyData.get("minor1"); - currenciesWith3MinorUnitDecimal = (String) currencyData.get("minor3"); + for (int i = 0; i <= SIMPLE_CASE_COUNTRY_MAX_DEFAULT_DIGITS; i++) { + currenciesWithDefinedMinorUnitDecimals[i] + = (String) currencyData.get("minor"+i); + } currenciesWithMinorUnitsUndefined = (String) currencyData.get("minorUndefined"); if (formatVersion == null || dataVersion == null || validCurrencyCodes == null || - currenciesWith0MinorUnitDecimals == null || - currenciesWith1MinorUnitDecimal == null || - currenciesWith3MinorUnitDecimal == null || currenciesWithMinorUnitsUndefined == null) { throw new NullPointerException("not all required data is defined in input"); } @@ -207,7 +208,7 @@ if (currencyInfo.charAt(0) == firstChar && currencyInfo.charAt(1) == secondChar) { checkCurrencyCode(currencyInfo); int digits = getDefaultFractionDigits(currencyInfo); - if (digits < 0 || digits > 3) { + if (digits < 0 || digits > SIMPLE_CASE_COUNTRY_MAX_DEFAULT_DIGITS) { throw new RuntimeException("fraction digits out of range for " + currencyInfo); } int numericCode= getNumericCode(currencyInfo); @@ -231,13 +232,14 @@ } private static int getDefaultFractionDigits(String currencyCode) { - if (currenciesWith0MinorUnitDecimals.indexOf(currencyCode) != -1) { - return 0; - } else if (currenciesWith1MinorUnitDecimal.indexOf(currencyCode) != -1) { - return 1; - } else if (currenciesWith3MinorUnitDecimal.indexOf(currencyCode) != -1) { - return 3; - } else if (currenciesWithMinorUnitsUndefined.indexOf(currencyCode) != -1) { + for (int i = 0; i <= SIMPLE_CASE_COUNTRY_MAX_DEFAULT_DIGITS; i++) { + if (currenciesWithDefinedMinorUnitDecimals[i] != null && + currenciesWithDefinedMinorUnitDecimals[i].indexOf(currencyCode) != -1) { + return i; + } + } + + if (currenciesWithMinorUnitsUndefined.indexOf(currencyCode) != -1) { return -1; } else { return 2;
--- a/src/share/classes/java/util/Currency.java Wed Apr 03 03:51:25 2019 +0100 +++ b/src/share/classes/java/util/Currency.java Tue Apr 16 02:48:40 2019 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -58,12 +58,13 @@ * no public constructor. You obtain a <code>Currency</code> instance using * the <code>getInstance</code> methods. * <p> - * Users can supersede the Java runtime currency data by creating a properties - * file named <code><JAVA_HOME>/lib/currency.properties</code>. The contents - * of the properties file are key/value pairs of the ISO 3166 country codes - * and the ISO 4217 currency data respectively. The value part consists of - * three ISO 4217 values of a currency, i.e., an alphabetic code, a numeric - * code, and a minor unit. Those three ISO 4217 values are separated by commas. + * Users can supersede the Java runtime currency data by means of the system + * property {@code java.util.currency.data}. If this system property is + * defined then its value is the location of a properties file, the contents of + * which are key/value pairs of the ISO 3166 country codes and the ISO 4217 + * currency data respectively. The value part consists of three ISO 4217 values + * of a currency, i.e., an alphabetic code, a numeric code, and a minor unit. + * Those three ISO 4217 values are separated by commas. * The lines which start with '#'s are considered comment lines. For example, * <p> * <code> @@ -121,11 +122,11 @@ // - maps country code to 32-bit int // - 26*26 entries, corresponding to [A-Z]*[A-Z] // - \u007F -> not valid country - // - bits 18-31: unused - // - bits 8-17: numeric code (0 to 1023) - // - bit 7: 1 - special case, bits 0-4 indicate which one + // - bits 20-31: unused + // - bits 10-19: numeric code (0 to 1023) + // - bit 9: 1 - special case, bits 0-4 indicate which one // 0 - simple country, bits 0-4 indicate final char of currency code - // - bits 5-6: fraction digits for simple countries, 0 for special cases + // - bits 5-8: fraction digits for simple countries, 0 for special cases // - bits 0-4: final char for currency code for simple country, or ID of special case // - special case IDs: // - 0: country has no currency @@ -163,32 +164,34 @@ // number of characters from A to Z private static final int A_TO_Z = ('Z' - 'A') + 1; // entry for invalid country codes - private static final int INVALID_COUNTRY_ENTRY = 0x007F; + private static final int INVALID_COUNTRY_ENTRY = 0x0000007F; // entry for countries without currency - private static final int COUNTRY_WITHOUT_CURRENCY_ENTRY = 0x0080; + private static final int COUNTRY_WITHOUT_CURRENCY_ENTRY = 0x00000200; // mask for simple case country entries - private static final int SIMPLE_CASE_COUNTRY_MASK = 0x0000; + private static final int SIMPLE_CASE_COUNTRY_MASK = 0x00000000; // mask for simple case country entry final character - private static final int SIMPLE_CASE_COUNTRY_FINAL_CHAR_MASK = 0x001F; + private static final int SIMPLE_CASE_COUNTRY_FINAL_CHAR_MASK = 0x0000001F; // mask for simple case country entry default currency digits - private static final int SIMPLE_CASE_COUNTRY_DEFAULT_DIGITS_MASK = 0x0060; + private static final int SIMPLE_CASE_COUNTRY_DEFAULT_DIGITS_MASK = 0x000001E0; // shift count for simple case country entry default currency digits private static final int SIMPLE_CASE_COUNTRY_DEFAULT_DIGITS_SHIFT = 5; + // maximum number for simple case country entry default currency digits + private static final int SIMPLE_CASE_COUNTRY_MAX_DEFAULT_DIGITS = 9; // mask for special case country entries - private static final int SPECIAL_CASE_COUNTRY_MASK = 0x0080; + private static final int SPECIAL_CASE_COUNTRY_MASK = 0x00000200; // mask for special case country index - private static final int SPECIAL_CASE_COUNTRY_INDEX_MASK = 0x001F; + private static final int SPECIAL_CASE_COUNTRY_INDEX_MASK = 0x0000001F; // delta from entry index component in main table to index into special case tables private static final int SPECIAL_CASE_COUNTRY_INDEX_DELTA = 1; // mask for distinguishing simple and special case countries private static final int COUNTRY_TYPE_MASK = SIMPLE_CASE_COUNTRY_MASK | SPECIAL_CASE_COUNTRY_MASK; // mask for the numeric code of the currency - private static final int NUMERIC_CODE_MASK = 0x0003FF00; + private static final int NUMERIC_CODE_MASK = 0x000FFC00; // shift count for the numeric code of the currency - private static final int NUMERIC_CODE_SHIFT = 8; + private static final int NUMERIC_CODE_SHIFT = 10; // Currency data format version - private static final int VALID_FORMAT_VERSION = 1; + private static final int VALID_FORMAT_VERSION = 2; static { AccessController.doPrivileged(new PrivilegedAction<Object>() { @@ -229,10 +232,13 @@ } // look for the properties file for overrides + String propsFile = System.getProperty("java.util.currency.data"); + if (propsFile == null) { + propsFile = homeDir + File.separator + "lib" + + File.separator + "currency.properties"; + } try { - File propFile = new File(homeDir + File.separator + - "lib" + File.separator + - "currency.properties"); + File propFile = new File(propsFile); if (propFile.exists()) { Properties props = new Properties(); try (FileReader fr = new FileReader(propFile)) { @@ -240,7 +246,7 @@ } Set<String> keys = props.stringPropertyNames(); Pattern propertiesPattern = - Pattern.compile("([A-Z]{3})\\s*,\\s*(\\d{3})\\s*,\\s*([0-3])"); + Pattern.compile("([A-Z]{3})\\s*,\\s*(\\d{3})\\s*,\\s*(\\d+)"); for (String key : keys) { replaceCurrencyData(propertiesPattern, key.toUpperCase(Locale.ROOT), @@ -691,7 +697,7 @@ * @param ctry country code * @param data currency data. This is a comma separated string that * consists of "three-letter alphabet code", "three-digit numeric code", - * and "one-digit (0,1,2, or 3) default fraction digit". + * and "one-digit (0-9) default fraction digit". * For example, "JPZ,392,0". * @throws */ @@ -721,8 +727,14 @@ String code = m.group(1); int numeric = Integer.parseInt(m.group(2)); + int entry = numeric << NUMERIC_CODE_SHIFT; int fraction = Integer.parseInt(m.group(3)); - int entry = numeric << NUMERIC_CODE_SHIFT; + if (fraction > SIMPLE_CASE_COUNTRY_MAX_DEFAULT_DIGITS) { + info("currency.properties entry for " + ctry + + " ignored since the fraction is more than " + + SIMPLE_CASE_COUNTRY_MAX_DEFAULT_DIGITS + ":" + curdata, null); + return; + } int index; for (index = 0; index < scOldCurrencies.length; index++) {
--- a/src/share/classes/java/util/CurrencyData.properties Wed Apr 03 03:51:25 2019 +0100 +++ b/src/share/classes/java/util/CurrencyData.properties Tue Apr 16 02:48:40 2019 +0100 @@ -1,5 +1,5 @@ # -# Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -23,20 +23,23 @@ # questions. # -formatVersion=1 +# Version of the currency data format. +# 1: initial +# 2: Change in minor unit (allowing 4-9 digits) +formatVersion=2 # Version of the currency code information in this class. # It is a serial number that accompanies with each amendment. -dataVersion=159 +dataVersion=162 # List of all valid ISO 4217 currency codes. # To ensure compatibility, do not remove codes. all=ADP020-AED784-AFA004-AFN971-ALL008-AMD051-ANG532-AOA973-ARS032-ATS040-AUD036-\ AWG533-AYM945-AZM031-AZN944-BAM977-BBD052-BDT050-BEF056-BGL100-BGN975-BHD048-BIF108-\ - BMD060-BND096-BOB068-BOV984-BRL986-BSD044-BTN064-BWP072-BYB112-BYR974-\ - BZD084-CAD124-CDF976-CHF756-CLF990-CLP152-CNY156-COP170-CRC188-CSD891-CUP192-CUC931-\ + BMD060-BND096-BOB068-BOV984-BRL986-BSD044-BTN064-BWP072-BYB112-BYR974-BYN933-\ + BZD084-CAD124-CDF976-CHE947-CHF756-CHW948-CLF990-CLP152-CNY156-COP170-COU970-CRC188-CSD891-CUP192-CUC931-\ CVE132-CYP196-CZK203-DEM276-DJF262-DKK208-DOP214-DZD012-EEK233-EGP818-\ ERN232-ESP724-ETB230-EUR978-FIM246-FJD242-FKP238-FRF250-GBP826-GEL981-\ GHC288-GHS936-GIP292-GMD270-GNF324-GRD300-GTQ320-GWP624-GYD328-HKD344-HNL340-\ @@ -49,7 +52,7 @@ PKR586-PLN985-PTE620-PYG600-QAR634-ROL946-RON946-RSD941-RUB643-RUR810-RWF646-SAR682-\ SBD090-SCR690-SDD736-SDG938-SEK752-SGD702-SHP654-SIT705-SKK703-SLL694-SOS706-\ SRD968-SRG740-SSP728-STD678-SVC222-SYP760-SZL748-THB764-TJS972-TMM795-TMT934-TND788-TOP776-\ - TPE626-TRL792-TRY949-TTD780-TWD901-TZS834-UAH980-UGX800-USD840-USN997-USS998-\ + TPE626-TRL792-TRY949-TTD780-TWD901-TZS834-UAH980-UGX800-USD840-USN997-USS998-UYI940-\ UYU858-UZS860-VEB862-VEF937-VND704-VUV548-WST882-XAF950-XAG961-XAU959-XBA955-\ XBB956-XBC957-XBD958-XCD951-XDR960-XFO000-XFU000-XOF952-XPD964-XPF953-\ XPT962-XSU994-XTS963-XUA965-XXX999-YER886-YUM891-ZAR710-ZMK894-ZMW967-ZWD716-ZWL932-\ @@ -106,7 +109,7 @@ AT=EUR # AZERBAIJAN AZ=AZN -# BAHAMAS +# BAHAMAS (THE) BS=BSD # BAHRAIN BH=BHD @@ -115,7 +118,7 @@ # BARBADOS BB=BBD # BELARUS -BY=BYR +BY=BYN # BELGIUM BE=EUR # BELIZE @@ -128,7 +131,7 @@ BQ=USD # BHUTAN BT=BTN -# BOLIVIA +# BOLIVIA (PLURINATIONAL STATE OF) BO=BOB # BOSNIA AND HERZEGOVINA BA=BAM @@ -138,7 +141,7 @@ BV=NOK # BRAZIL BR=BRL -# BRITISH INDIAN OCEAN TERRITORY +# BRITISH INDIAN OCEAN TERRITORY (THE) IO=USD # BRUNEI DARUSSALAM BN=BND @@ -156,9 +159,9 @@ CA=CAD # CAPE VERDE CV=CVE -# CAYMAN ISLANDS +# CAYMAN ISLANDS (THE) KY=KYD -# CENTRAL AFRICAN REPUBLIC +# CENTRAL AFRICAN REPUBLIC (THE) CF=XAF # CHAD TD=XAF @@ -168,17 +171,17 @@ CN=CNY # CHRISTMAS ISLAND CX=AUD -# COCOS (KEELING) ISLANDS +# COCOS (KEELING) ISLANDS (THE) CC=AUD # COLOMBIA CO=COP -# COMOROS +# COMOROS (THE) KM=KMF -# CONGO +# CONGO (THE) CG=XAF -# CONGO, THE DEMOCRATIC REPUBLIC OF THE +# CONGO (THE DEMOCRATIC REPUBLIC OF THE) CD=CDF -# COOK ISLANDS +# COOK ISLANDS (THE) CK=NZD # COSTA RICA CR=CRC @@ -192,7 +195,7 @@ CW=ANG # CYPRUS CY=EUR -# CZECH REPUBLIC +# CZECH REPUBLIC (THE) CZ=CZK # DENMARK DK=DKK @@ -200,7 +203,7 @@ DJ=DJF # DOMINICA DM=XCD -# DOMINICAN REPUBLIC +# DOMINICAN REPUBLIC (THE) DO=DOP # ECUADOR EC=USD @@ -217,9 +220,9 @@ EE=EUR # ETHIOPIA ET=ETB -# FALKLAND ISLANDS (MALVINAS) +# FALKLAND ISLANDS (THE) [MALVINAS] FK=FKP -# FAROE ISLANDS +# FAROE ISLANDS (THE) FO=DKK # FIJI FJ=FJD @@ -231,11 +234,11 @@ GF=EUR # FRENCH POLYNESIA PF=XPF -# FRENCH SOUTHERN TERRITORIES +# FRENCH SOUTHERN TERRITORIES (THE) TF=EUR # GABON GA=XAF -# GAMBIA +# GAMBIA (THE) GM=GMD # GEORGIA GE=GEL @@ -269,7 +272,7 @@ HT=HTG # HEARD ISLAND AND MCDONALD ISLANDS HM=AUD -# HOLY SEE (VATICAN CITY STATE) +# HOLY SEE (THE) VA=EUR # HONDURAS HN=HNL @@ -283,7 +286,7 @@ IN=INR # INDONESIA ID=IDR -# IRAN, ISLAMIC REPUBLIC OF +# IRAN (ISLAMIC REPUBLIC OF) IR=IRR # IRAQ IQ=IQD @@ -309,15 +312,15 @@ KE=KES # KIRIBATI KI=AUD -# KOREA, DEMOCRATIC PEOPLE'S REPUBLIC OF +# KOREA (THE DEMOCRATIC PEOPLE'S REPUBLIC OF) KP=KPW -# KOREA, REPUBLIC OF +# KOREA (THE REPUBLIC OF) KR=KRW # KUWAIT KW=KWD # KYRGYZSTAN KG=KGS -# LAO PEOPLE'S DEMOCRATIC REPUBLIC +# LAO PEOPLE'S DEMOCRATIC REPUBLIC (THE) LA=LAK # LATVIA LV=LVL;2013-12-31-22-00-00;EUR @@ -337,7 +340,7 @@ LU=EUR # MACAU MO=MOP -# MACEDONIA, THE FORMER YUGOSLAV REPUBLIC OF +# MACEDONIA (THE FORMER YUGOSLAV REPUBLIC OF) MK=MKD # MADAGASCAR MG=MGA @@ -351,7 +354,7 @@ ML=XOF # MALTA MT=EUR -# MARSHALL ISLANDS +# MARSHALL ISLANDS (THE) MH=USD # MARTINIQUE MQ=EUR @@ -363,9 +366,9 @@ YT=EUR # MEXICO MX=MXN -# MICRONESIA, FEDERATED STATES OF +# MICRONESIA (FEDERATED STATES OF) FM=USD -# MOLDOVA, REPUBLIC OF +# MOLDOVA (THE REPUBLIC OF) MD=MDL # MONACO MC=EUR @@ -387,7 +390,7 @@ NR=AUD # NEPAL NP=NPR -# NETHERLANDS +# NETHERLANDS (THE) NL=EUR # NETHERLANDS ANTILLES AN=ANG @@ -397,7 +400,7 @@ NZ=NZD # NICARAGUA NI=NIO -# NIGER +# NIGER (THE) NE=XOF # NIGERIA NG=NGN @@ -405,7 +408,7 @@ NU=NZD # NORFOLK ISLAND NF=AUD -# NORTHERN MARIANA ISLANDS +# NORTHERN MARIANA ISLANDS (THE) MP=USD # NORWAY NO=NOK @@ -425,7 +428,7 @@ PY=PYG # PERU PE=PEN -# PHILIPPINES +# PHILIPPINES (THE) PH=PHP # PITCAIRN PN=NZD @@ -441,7 +444,7 @@ RE=EUR # ROMANIA RO=RON -# RUSSIAN FEDERATION +# RUSSIAN FEDERATION (THE) RU=RUB # RWANDA RW=RWF @@ -497,7 +500,7 @@ ES=EUR # SRI LANKA LK=LKR -# SUDAN +# SUDAN (THE) SD=SDG # SURINAME SR=SRD @@ -513,7 +516,7 @@ CH=CHF # SYRIAN ARAB REPUBLIC SY=SYP -# TAIWAN +# TAIWAN (PROVINCE OF CHINA) TW=TWD # TAJIKISTAN TJ=TJS @@ -537,7 +540,7 @@ TR=TRY # TURKMENISTAN TM=TMT -# TURKS AND CAICOS ISLANDS +# TURKS AND CAICOS ISLANDS (THE) TC=USD # TUVALU TV=AUD @@ -545,13 +548,13 @@ UG=UGX # UKRAINE UA=UAH -# UNITED ARAB EMIRATES +# UNITED ARAB EMIRATES (THE) AE=AED -# UNITED KINGDOM +# UNITED KINGDOM OF GREAT BRITAIN AND NORTHERN IRELAND (THE) GB=GBP -# UNITED STATES +# UNITED STATES OF AMERICA (THE) US=USD -# UNITED STATES MINOR OUTLYING ISLANDS +# UNITED STATES MINOR OUTLYING ISLANDS (THE) UM=USD # URUGUAY UY=UYU @@ -559,7 +562,7 @@ UZ=UZS # VANUATU VU=VUV -# VENEZUELA +# VENEZUELA (BOLIVARIAN REPUBLIC OF) VE=VEF # VIET NAM VN=VND @@ -579,16 +582,17 @@ ZW=ZWL -# List of currencies with 0, 1, OR 3 decimals for minor units, or where there -# are no minor units defined. All others use 2 decimals. +# List of currencies with non-2digit decimals for minor units, +# or where there are no minor units defined. All others use 2 decimals. minor0=\ - ADP-BEF-BIF-BYB-BYR-CLF-CLP-DJF-ESP-GNF-\ + ADP-BEF-BIF-BYB-BYR-CLP-DJF-ESP-GNF-\ GRD-ISK-ITL-JPY-KMF-KRW-LUF-MGF-PYG-PTE-RWF-\ - TPE-TRL-UGX-VND-VUV-XAF-XOF-XPF -minor1= + TPE-TRL-UGX-UYI-VND-VUV-XAF-XOF-XPF minor3=\ BHD-IQD-JOD-KWD-LYD-OMR-TND +minor4=\ + CLF minorUndefined=\ XAG-XAU-XBA-XBB-XBC-XBD-XDR-XFO-XFU-XPD-\ XPT-XSU-XTS-XUA-XXX
--- a/src/share/classes/java/util/JapaneseImperialCalendar.java Wed Apr 03 03:51:25 2019 +0100 +++ b/src/share/classes/java/util/JapaneseImperialCalendar.java Tue Apr 16 02:48:40 2019 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2019, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -38,20 +38,21 @@ import sun.util.resources.LocaleData; /** - * <code>JapaneseImperialCalendar</code> implements a Japanese + * {@code JapaneseImperialCalendar} implements a Japanese * calendar system in which the imperial era-based year numbering is * supported from the Meiji era. The following are the eras supported * by this calendar system. - * <pre><tt> + * <pre>{@code * ERA value Era name Since (in Gregorian) * ------------------------------------------------------ * 0 N/A N/A - * 1 Meiji 1868-01-01 midnight local time - * 2 Taisho 1912-07-30 midnight local time - * 3 Showa 1926-12-25 midnight local time - * 4 Heisei 1989-01-08 midnight local time + * 1 Meiji 1868-01-01T00:00:00 local time + * 2 Taisho 1912-07-30T00:00:00 local time + * 3 Showa 1926-12-25T00:00:00 local time + * 4 Heisei 1989-01-08T00:00:00 local time + * 5 Reiwa 2019-05-01T00:00:00 local time * ------------------------------------------------------ - * </tt></pre> + * }</pre> * * <p><code>ERA</code> value 0 specifies the years before Meiji and * the Gregorian year values are used. Unlike {@link @@ -101,8 +102,12 @@ */ public static final int HEISEI = 4; + /** + * The ERA constant designating the Reiwa era. + */ + private static final int REIWA = 5; + private static final int EPOCH_OFFSET = 719163; // Fixed date of January 1, 1970 (Gregorian) - private static final int EPOCH_YEAR = 1970; // Useful millisecond constants. Although ONE_DAY and ONE_WEEK can fit // into ints, they must be longs in order to prevent arithmetic overflow @@ -133,6 +138,9 @@ // Fixed date of the first date of each era. private static final long[] sinceFixedDates; + // The current era + private static final int currentEra; + /* * <pre> * Greatest Least @@ -228,13 +236,18 @@ // eras[BEFORE_MEIJI] and sinceFixedDate[BEFORE_MEIJI] are the // same as Gregorian. int index = BEFORE_MEIJI; + int current = index; sinceFixedDates[index] = gcal.getFixedDate(BEFORE_MEIJI_ERA.getSinceDate()); eras[index++] = BEFORE_MEIJI_ERA; for (Era e : es) { + if(e.getSince(TimeZone.NO_TIMEZONE) < System.currentTimeMillis()) { + current = index; + } CalendarDate d = e.getSinceDate(); sinceFixedDates[index] = gcal.getFixedDate(d); eras[index++] = e; } + currentEra = current; LEAST_MAX_VALUES[ERA] = MAX_VALUES[ERA] = eras.length - 1; @@ -313,6 +326,7 @@ * <code>false</code> otherwise. * @see Calendar#compareTo(Calendar) */ + @Override public boolean equals(Object obj) { return obj instanceof JapaneseImperialCalendar && super.equals(obj); @@ -322,6 +336,7 @@ * Generates the hash code for this * <code>JapaneseImperialCalendar</code> object. */ + @Override public int hashCode() { return super.hashCode() ^ jdate.hashCode(); } @@ -354,6 +369,7 @@ * or if any calendar fields have out-of-range values in * non-lenient mode. */ + @Override public void add(int field, int amount) { // If amount == 0, do nothing even the given field is out of // range. This is tested by JCK. @@ -482,6 +498,7 @@ } } + @Override public void roll(int field, boolean up) { roll(field, up ? +1 : -1); } @@ -506,6 +523,7 @@ * @see #add(int,int) * @see #set(int,int) */ + @Override public void roll(int field, int amount) { // If amount == 0, do nothing even the given field is out of // range. This is tested by JCK. @@ -1744,12 +1762,12 @@ } } else if (transitionYear) { if (jdate.getYear() == 1) { - // As of Heisei (since Meiji) there's no case + // As of Reiwa (since Meiji) there's no case // that there are multiple transitions in a // year. Historically there was such // case. There might be such case again in the // future. - if (era > HEISEI) { + if (era > REIWA) { CalendarDate pd = eras[era - 1].getSinceDate(); if (normalizedYear == pd.getYear()) { d.setMonth(pd.getMonth()).setDayOfMonth(pd.getDayOfMonth()); @@ -1884,7 +1902,7 @@ year = isSet(YEAR) ? internalGet(YEAR) : 1; } else { if (isSet(YEAR)) { - era = eras.length - 1; + era = currentEra; year = internalGet(YEAR); } else { // Equivalent to 1970 (Gregorian) @@ -2366,7 +2384,7 @@ * default ERA is the current era, but a zero (unset) ERA means before Meiji. */ private final int internalGetEra() { - return isSet(ERA) ? internalGet(ERA) : eras.length - 1; + return isSet(ERA) ? internalGet(ERA) : currentEra; } /**
--- a/src/share/classes/sun/security/ssl/SSLAlgorithmDecomposer.java Wed Apr 03 03:51:25 2019 +0100 +++ b/src/share/classes/sun/security/ssl/SSLAlgorithmDecomposer.java Tue Apr 16 02:48:40 2019 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -234,7 +234,8 @@ // ignore: unknown or unsupported ciphersuite } - if (cipherSuite != null) { + if (cipherSuite != null && + cipherSuite != CipherSuite.C_SCSV /* TLS_EMPTY_RENEGOTIATION_INFO_SCSV */) { return decompose(cipherSuite.keyExchange, cipherSuite.cipher, cipherSuite.macAlg); }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/share/classes/sun/security/validator/CADistrustPolicy.java Tue Apr 16 02:48:40 2019 +0100 @@ -0,0 +1,105 @@ +/* + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package sun.security.validator; + +import java.security.AccessController; +import java.security.PrivilegedAction; +import java.security.Security; +import java.security.cert.X509Certificate; +import java.util.EnumSet; + +import sun.security.util.Debug; + +/** + * Policies for distrusting a certificate authority (CA). See the + * jdk.security.caDistrustPolicies security property for more information. + */ +enum CADistrustPolicy { + /** + * Distrust TLS Server certificates anchored by a Symantec root CA and + * issued after April 16, 2019 (with exceptions for a couple of subordinate + * CAs, see the jdk.security.caDistrustPolicies definition in the + * java.security file for more details). If enabled, this policy is + * currently enforced by the PKIX and SunX509 TrustManager implementations + * of the SunJSSE provider implementation. + */ + SYMANTEC_TLS { + void checkDistrust(String variant, X509Certificate[] chain) + throws ValidatorException { + if (!variant.equals(Validator.VAR_TLS_SERVER)) { + return; + } + SymantecTLSPolicy.checkDistrust(chain); + } + }; + + /** + * Checks if the end-entity certificate is distrusted. + * + * @param variant the type of certificate being checked + * @param chain the end-entity's certificate chain. The end entity cert + * is at index 0, the trust anchor at index n-1. + * @throws ValidatorException if the end-entity certificate is distrusted + */ + abstract void checkDistrust(String variant, + X509Certificate[] chain) + throws ValidatorException; + + // The policies set in the jdk.security.caDistrustPolicies property. + static final EnumSet<CADistrustPolicy> POLICIES = parseProperty(); + private static EnumSet<CADistrustPolicy> parseProperty() { + String property = AccessController.doPrivileged( + new PrivilegedAction<String>() { + @Override + public String run() { + return Security.getProperty( + "jdk.security.caDistrustPolicies"); + } + }); + EnumSet<CADistrustPolicy> set = EnumSet.noneOf(CADistrustPolicy.class); + // if property is null or empty, the restrictions are not enforced + if (property == null || property.isEmpty()) { + return set; + } + String[] policies = property.split(","); + for (String policy : policies) { + policy = policy.trim(); + try { + CADistrustPolicy caPolicy = + Enum.valueOf(CADistrustPolicy.class, policy); + set.add(caPolicy); + } catch (IllegalArgumentException iae) { + // ignore unknown values but log it + Debug debug = Debug.getInstance("certpath"); + if (debug != null) { + debug.println("Unknown value for the " + + "jdk.security.caDistrustPolicies property: " + + policy); + } + } + } + return set; + } +}
--- a/src/share/classes/sun/security/validator/EndEntityChecker.java Wed Apr 03 03:51:25 2019 +0100 +++ b/src/share/classes/sun/security/validator/EndEntityChecker.java Tue Apr 16 02:48:40 2019 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2019, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -132,25 +132,26 @@ return new EndEntityChecker(type, variant); } - void check(X509Certificate cert, Object parameter, - boolean checkUnresolvedCritExts) throws CertificateException { + void check(X509Certificate[] chain, Object parameter, + boolean checkUnresolvedCritExts) + throws CertificateException { if (variant.equals(Validator.VAR_GENERIC)) { return; // no checks } - Set<String> exts = getCriticalExtensions(cert); + Set<String> exts = getCriticalExtensions(chain[0]); if (variant.equals(Validator.VAR_TLS_SERVER)) { - checkTLSServer(cert, (String)parameter, exts); + checkTLSServer(chain[0], (String)parameter, exts); } else if (variant.equals(Validator.VAR_TLS_CLIENT)) { - checkTLSClient(cert, exts); + checkTLSClient(chain[0], exts); } else if (variant.equals(Validator.VAR_CODE_SIGNING)) { - checkCodeSigning(cert, exts); + checkCodeSigning(chain[0], exts); } else if (variant.equals(Validator.VAR_JCE_SIGNING)) { - checkCodeSigning(cert, exts); + checkCodeSigning(chain[0], exts); } else if (variant.equals(Validator.VAR_PLUGIN_CODE_SIGNING)) { - checkCodeSigning(cert, exts); + checkCodeSigning(chain[0], exts); } else if (variant.equals(Validator.VAR_TSA_SERVER)) { - checkTSAServer(cert, exts); + checkTSAServer(chain[0], exts); } else { throw new CertificateException("Unknown variant: " + variant); } @@ -159,6 +160,12 @@ if (checkUnresolvedCritExts) { checkRemainingExtensions(exts); } + + // check if certificate should be distrusted according to policies + // set in the jdk.security.caDistrustPolicies security property + for (CADistrustPolicy policy : CADistrustPolicy.POLICIES) { + policy.checkDistrust(variant, chain); + } } /**
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/share/classes/sun/security/validator/SymantecTLSPolicy.java Tue Apr 16 02:48:40 2019 +0100 @@ -0,0 +1,207 @@ +/* + * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package sun.security.validator; + +import java.security.cert.X509Certificate; +import java.util.Arrays; +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; +import java.util.TimeZone; + +import sun.security.x509.X509CertImpl; + +/** + * This class checks if Symantec issued TLS Server certificates should be + * restricted. + */ +final class SymantecTLSPolicy { + private static final Date DECEMBER_31_2019; + // Any TLS Server certificate that is anchored by one of the Symantec + // roots above and is issued after this date will be distrusted. + private static final Date APRIL_16_2019; + + // SHA-256 certificate fingerprints of subCAs with later distrust dates + private static final Map<String, Date> EXEMPT_SUBCAS = new HashMap<>(); + static { + /* + We need to ensure that a date occurs after these dates. + As Calendar objects always include a time as well as a date, + we ensure the time is the last moment within that date, so that + Date.after returns true for any moment from midnight the next day. + */ + Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC")); + cal.set(2019, Calendar.DECEMBER, 31, 23, 59, 59); + DECEMBER_31_2019 = cal.getTime(); + cal.set(2019, Calendar.APRIL, 16, 23, 59, 59); + APRIL_16_2019 = cal.getTime(); + + // Subject DN: C=US, O=Apple Inc., OU=Certification Authority, + // CN=Apple IST CA 2 - G1 + // Issuer DN: CN=GeoTrust Global CA, O=GeoTrust Inc., C=US + EXEMPT_SUBCAS.put("AC2B922ECFD5E01711772FEA8ED372DE9D1E2245FCE3F57A9CDBEC77296A424B", + DECEMBER_31_2019); + + + // Subject DN: C=US, O=Apple Inc., OU=Certification Authority, + // CN=Apple IST CA 8 - G1 + // Issuer DN: CN=GeoTrust Primary Certification Authority - G2, + // OU=(c) 2007 GeoTrust Inc. - For authorized use only, + // O=GeoTrust Inc., C=US + EXEMPT_SUBCAS.put("A4FE7C7F15155F3F0AEF7AAA83CF6E06DEB97CA3F909DF920AC1490882D488ED", + DECEMBER_31_2019); + } + + // SHA-256 certificate fingerprints of distrusted roots + private static final Set<String> FINGERPRINTS = new HashSet<>(Arrays.asList( + // cacerts alias: geotrustglobalca + // DN: CN=GeoTrust Global CA, O=GeoTrust Inc., C=US + "FF856A2D251DCD88D36656F450126798CFABAADE40799C722DE4D2B5DB36A73A", + // cacerts alias: geotrustprimaryca + // DN: CN=GeoTrust Primary Certification Authority, + // O=GeoTrust Inc., C=US + "37D51006C512EAAB626421F1EC8C92013FC5F82AE98EE533EB4619B8DEB4D06C", + // cacerts alias: geotrustprimarycag2 + // DN: CN=GeoTrust Primary Certification Authority - G2, + // OU=(c) 2007 GeoTrust Inc. - For authorized use only, + // O=GeoTrust Inc., C=US + "5EDB7AC43B82A06A8761E8D7BE4979EBF2611F7DD79BF91C1C6B566A219ED766", + // cacerts alias: geotrustprimarycag3 + // DN: CN=GeoTrust Primary Certification Authority - G3, + // OU=(c) 2008 GeoTrust Inc. - For authorized use only, + // O=GeoTrust Inc., C=US + "B478B812250DF878635C2AA7EC7D155EAA625EE82916E2CD294361886CD1FBD4", + // cacerts alias: geotrustuniversalca + // DN: CN=GeoTrust Universal CA, O=GeoTrust Inc., C=US + "A0459B9F63B22559F5FA5D4C6DB3F9F72FF19342033578F073BF1D1B46CBB912", + // cacerts alias: thawteprimaryrootca + // DN: CN=thawte Primary Root CA, + // OU="(c) 2006 thawte, Inc. - For authorized use only", + // OU=Certification Services Division, O="thawte, Inc.", C=US + "8D722F81A9C113C0791DF136A2966DB26C950A971DB46B4199F4EA54B78BFB9F", + // cacerts alias: thawteprimaryrootcag2 + // DN: CN=thawte Primary Root CA - G2, + // OU="(c) 2007 thawte, Inc. - For authorized use only", + // O="thawte, Inc.", C=US + "A4310D50AF18A6447190372A86AFAF8B951FFB431D837F1E5688B45971ED1557", + // cacerts alias: thawteprimaryrootcag3 + // DN: CN=thawte Primary Root CA - G3, + // OU="(c) 2008 thawte, Inc. - For authorized use only", + // OU=Certification Services Division, O="thawte, Inc.", C=US + "4B03F45807AD70F21BFC2CAE71C9FDE4604C064CF5FFB686BAE5DBAAD7FDD34C", + // cacerts alias: thawtepremiumserverca + // DN: EMAILADDRESS=premium-server@thawte.com, + // CN=Thawte Premium Server CA, OU=Certification Services Division, + // O=Thawte Consulting cc, L=Cape Town, ST=Western Cape, C=ZA + "3F9F27D583204B9E09C8A3D2066C4B57D3A2479C3693650880505698105DBCE9", + // cacerts alias: verisignclass2g2ca + // DN: OU=VeriSign Trust Network, + // OU="(c) 1998 VeriSign, Inc. - For authorized use only", + // OU=Class 2 Public Primary Certification Authority - G2, + // O="VeriSign, Inc.", C=US + "3A43E220FE7F3EA9653D1E21742EAC2B75C20FD8980305BC502CAF8C2D9B41A1", + // cacerts alias: verisignclass3ca + // DN: OU=Class 3 Public Primary Certification Authority, + // O="VeriSign, Inc.", C=US + "A4B6B3996FC2F306B3FD8681BD63413D8C5009CC4FA329C2CCF0E2FA1B140305", + // cacerts alias: verisignclass3g2ca + // DN: OU=VeriSign Trust Network, + // OU="(c) 1998 VeriSign, Inc. - For authorized use only", + // OU=Class 3 Public Primary Certification Authority - G2, + // O="VeriSign, Inc.", C=US + "83CE3C1229688A593D485F81973C0F9195431EDA37CC5E36430E79C7A888638B", + // cacerts alias: verisignclass3g3ca + // DN: CN=VeriSign Class 3 Public Primary Certification Authority - G3, + // OU="(c) 1999 VeriSign, Inc. - For authorized use only", + // OU=VeriSign Trust Network, O="VeriSign, Inc.", C=US + "EB04CF5EB1F39AFA762F2BB120F296CBA520C1B97DB1589565B81CB9A17B7244", + // cacerts alias: verisignclass3g4ca + // DN: CN=VeriSign Class 3 Public Primary Certification Authority - G4, + // OU="(c) 2007 VeriSign, Inc. - For authorized use only", + // OU=VeriSign Trust Network, O="VeriSign, Inc.", C=US + "69DDD7EA90BB57C93E135DC85EA6FCD5480B603239BDC454FC758B2A26CF7F79", + // cacerts alias: verisignclass3g5ca + // DN: CN=VeriSign Class 3 Public Primary Certification Authority - G5, + // OU="(c) 2006 VeriSign, Inc. - For authorized use only", + // OU=VeriSign Trust Network, O="VeriSign, Inc.", C=US + "9ACFAB7E43C8D880D06B262A94DEEEE4B4659989C3D0CAF19BAF6405E41AB7DF", + // cacerts alias: verisignuniversalrootca + // DN: CN=VeriSign Universal Root Certification Authority, + // OU="(c) 2008 VeriSign, Inc. - For authorized use only", + // OU=VeriSign Trust Network, O="VeriSign, Inc.", C=US + "2399561127A57125DE8CEFEA610DDF2FA078B5C8067F4E828290BFB860E84B3C" + )); + + /** + * This method assumes the eeCert is a TLS Server Cert and chains back to + * the anchor. + * + * @param chain the end-entity's certificate chain. The end entity cert + * is at index 0, the trust anchor at index n-1. + * @throws ValidatorException if the certificate is distrusted + */ + static void checkDistrust(X509Certificate[] chain) + throws ValidatorException { + X509Certificate anchor = chain[chain.length-1]; + if (FINGERPRINTS.contains(fingerprint(anchor))) { + Date notBefore = chain[0].getNotBefore(); + + // check if chain goes through one of the subCAs + if (chain.length > 2) { + X509Certificate subCA = chain[chain.length - 2]; + Date distrustDate = EXEMPT_SUBCAS.get(fingerprint(subCA)); + if (distrustDate != null) { + // reject if certificate is issued after specified date + checkNotBefore(notBefore, distrustDate, anchor); + return; // success + } + } + // reject if certificate is issued after April 16, 2019 + checkNotBefore(notBefore, APRIL_16_2019, anchor); + } + } + + private static String fingerprint(X509Certificate cert) { + return (cert instanceof X509CertImpl) + ? ((X509CertImpl)cert).getFingerprint("SHA-256") + : X509CertImpl.getFingerprint("SHA-256", cert); + } + + private static void checkNotBefore(Date notBeforeDate, + Date distrustDate, X509Certificate anchor) + throws ValidatorException { + if (notBeforeDate.after(distrustDate)) { + throw new ValidatorException + ("TLS Server certificate issued after " + distrustDate + + " and anchored by a distrusted legacy Symantec root CA: " + + anchor.getSubjectX500Principal(), + ValidatorException.T_UNTRUSTED_CERT, anchor); + } + } + private SymantecTLSPolicy() {} +}
--- a/src/share/classes/sun/security/validator/Validator.java Wed Apr 03 03:51:25 2019 +0100 +++ b/src/share/classes/sun/security/validator/Validator.java Tue Apr 16 02:48:40 2019 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2019, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -271,7 +271,7 @@ // redundant. boolean checkUnresolvedCritExts = (type == TYPE_PKIX) ? false : true; - endEntityChecker.check(chain[0], parameter, + endEntityChecker.check(chain, parameter, checkUnresolvedCritExts); }
--- a/src/share/classes/sun/text/resources/FormatData.java Wed Apr 03 03:51:25 2019 +0100 +++ b/src/share/classes/sun/text/resources/FormatData.java Tue Apr 16 02:48:40 2019 +0100 @@ -138,6 +138,7 @@ "Taisho", "Showa", "Heisei", + "Reiwa", } }, { "java.util.JapaneseImperialCalendar.short.Eras", @@ -147,6 +148,7 @@ "T", "S", "H", + "R", } }, { "java.util.JapaneseImperialCalendar.FirstYear",
--- a/src/share/classes/sun/text/resources/FormatData_ja.java Wed Apr 03 03:51:25 2019 +0100 +++ b/src/share/classes/sun/text/resources/FormatData_ja.java Tue Apr 16 02:48:40 2019 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2019, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -129,6 +129,7 @@ "\u5927\u6b63", // Taisho "\u662d\u548c", // Showa "\u5e73\u6210", // Heisei + "\u4ee4\u548c", // Reiwa } }, { "java.util.JapaneseImperialCalendar.FirstYear",
--- a/src/share/classes/sun/util/calendar/Era.java Wed Apr 03 03:51:25 2019 +0100 +++ b/src/share/classes/sun/util/calendar/Era.java Tue Apr 16 02:48:40 2019 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2019, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -41,20 +41,16 @@ * <code>CalendarDate</code>. * * <p>The following era names are defined in this release. - * <!-- TODO: use HTML table --> - * <pre><tt> + * <pre>{@code * Calendar system Era name Since (in Gregorian) * ----------------------------------------------------------------------- - * Japanese calendar Meiji 1868-01-01 midnight local time - * Taisho 1912-07-30 midnight local time - * Showa 1926-12-26 midnight local time - * Heisei 1989-01-08 midnight local time - * Julian calendar BeforeCommonEra -292275055-05-16T16:47:04.192Z - * CommonEra 0000-12-30 midnight local time - * Taiwanese calendar MinGuo 1911-01-01 midnight local time - * Thai Buddhist calendar BuddhistEra -543-01-01 midnight local time + * Japanese calendar Meiji 1868-01-01T00:00:00 local time + * Taisho 1912-07-30T00:00:00 local time + * Showa 1926-12-25T00:00:00 local time + * Heisei 1989-01-08T00:00:00 local time + * Reiwa 2019-05-01T00:00:00 local time * ----------------------------------------------------------------------- - * </tt></pre> + * }</pre> * * @author Masayoshi Okutsu * @since 1.5
--- a/src/share/classes/sun/util/resources/CurrencyNames.properties Wed Apr 03 03:51:25 2019 +0100 +++ b/src/share/classes/sun/util/resources/CurrencyNames.properties Tue Apr 16 02:48:40 2019 +0100 @@ -60,9 +60,6 @@ # or other dealings in these Data Files or Software without prior # written authorization of the copyright holder. -# -# Generated automatically from the Common Locale Data Repository. DO NOT EDIT! -# ADP=ADP AED=AED AFA=AFA @@ -95,6 +92,7 @@ BTN=BTN BWP=BWP BYB=BYB +BYN=BYN BYR=BYR BZD=BZD CAD=CAD @@ -313,8 +311,9 @@ bsd=Bahamian Dollar btn=Bhutanese Ngultrum bwp=Botswanan Pula -byb=Belarusian New Ruble (1994-1999) -byr=Belarusian Ruble +byb=Belarusian Ruble (1994-1999) +byn=Belarusian Ruble +byr=Belarusian Ruble (2000-2016) bzd=Belize Dollar cad=Canadian Dollar cdf=Congolese Franc @@ -358,7 +357,7 @@ gyd=Guyanaese Dollar hkd=Hong Kong Dollar hnl=Honduran Lempira -hrk=Croatian Kuna +hrk=Kuna htg=Haitian Gourde huf=Hungarian Forint idr=Indonesian Rupiah @@ -402,7 +401,7 @@ mtl=Maltese Lira mur=Mauritian Rupee mvr=Maldivian Rufiyaa -mwk=Malawian Kwacha +mwk=Malawian Malawi Kwacha mxn=Mexican Peso mxv=Mexican Investment Unit myr=Malaysian Ringgit @@ -417,7 +416,7 @@ nzd=New Zealand Dollar omr=Omani Rial pab=Panamanian Balboa -pen=Peruvian Nuevo Sol +pen=Peruvian Sol pgk=Papua New Guinean Kina php=Philippine Peso pkr=Pakistani Rupee
--- a/src/share/classes/sun/util/resources/CurrencyNames_be_BY.properties Wed Apr 03 03:51:25 2019 +0100 +++ b/src/share/classes/sun/util/resources/CurrencyNames_be_BY.properties Tue Apr 16 02:48:40 2019 +0100 @@ -35,4 +35,5 @@ # This notice and attribution to Taligent may not be removed. # Taligent is a registered trademark of Taligent, Inc. +BYN=\u0420\u0443\u0431 BYR=\u0420\u0443\u0431
--- a/src/share/lib/calendars.properties Wed Apr 03 03:51:25 2019 +0100 +++ b/src/share/lib/calendars.properties Tue Apr 16 02:48:40 2019 +0100 @@ -29,12 +29,14 @@ # Taisho since 1912-07-30 00:00:00 local time (Gregorian) # Showa since 1926-12-25 00:00:00 local time (Gregorian) # Heisei since 1989-01-08 00:00:00 local time (Gregorian) +# Reiwa since 2019-05-01 00:00:00 local time (Gregorian) calendar.japanese.type: LocalGregorianCalendar calendar.japanese.eras: \ name=Meiji,abbr=M,since=-3218832000000; \ name=Taisho,abbr=T,since=-1812153600000; \ name=Showa,abbr=S,since=-1357603200000; \ - name=Heisei,abbr=H,since=600220800000 + name=Heisei,abbr=H,since=600220800000; \ + name=Reiwa,abbr=R,since=1556668800000 # # Taiwanese calendar
--- a/src/share/lib/security/java.security-linux Wed Apr 03 03:51:25 2019 +0100 +++ b/src/share/lib/security/java.security-linux Tue Apr 16 02:48:40 2019 +0100 @@ -892,3 +892,33 @@ # and javax.crypto.spec.SecretKeySpec and rejects all the others. jceks.key.serialFilter = java.lang.Enum;java.security.KeyRep;\ java.security.KeyRep$Type;javax.crypto.spec.SecretKeySpec;!* + +# +# Policies for distrusting Certificate Authorities (CAs). +# +# This is a comma separated value of one or more case-sensitive strings, each +# of which represents a policy for determining if a CA should be distrusted. +# The supported values are: +# +# +# SYMANTEC_TLS : Distrust TLS Server certificates anchored by a Symantec +# root CA and issued after April 16, 2019 unless issued by one of the +# following subordinate CAs which have a later distrust date: +# 1. Apple IST CA 2 - G1, SHA-256 fingerprint: +# AC2B922ECFD5E01711772FEA8ED372DE9D1E2245FCE3F57A9CDBEC77296A424B +# Distrust after December 31, 2019. +# 2. Apple IST CA 8 - G1, SHA-256 fingerprint: +# A4FE7C7F15155F3F0AEF7AAA83CF6E06DEB97CA3F909DF920AC1490882D488ED +# Distrust after December 31, 2019. +# Leading and trailing whitespace surrounding each value are ignored. +# Unknown values are ignored. If the property is commented out or set to the +# empty String, no policies are enforced. +# +# Note: This property is currently used by the JDK Reference implementation. +# It is not guaranteed to be supported by other SE implementations. Also, this +# property does not override other security properties which can restrict +# certificates such as jdk.tls.disabledAlgorithms or +# jdk.certpath.disabledAlgorithms; those restrictions are still enforced even +# if this property is not enabled. +# +jdk.security.caDistrustPolicies=SYMANTEC_TLS
--- a/src/share/lib/security/java.security-macosx Wed Apr 03 03:51:25 2019 +0100 +++ b/src/share/lib/security/java.security-macosx Tue Apr 16 02:48:40 2019 +0100 @@ -891,3 +891,33 @@ # and javax.crypto.spec.SecretKeySpec and rejects all the others. jceks.key.serialFilter = java.lang.Enum;java.security.KeyRep;\ java.security.KeyRep$Type;javax.crypto.spec.SecretKeySpec;!* + +# +# Policies for distrusting Certificate Authorities (CAs). +# +# This is a comma separated value of one or more case-sensitive strings, each +# of which represents a policy for determining if a CA should be distrusted. +# The supported values are: +# +# +# SYMANTEC_TLS : Distrust TLS Server certificates anchored by a Symantec +# root CA and issued after April 16, 2019 unless issued by one of the +# following subordinate CAs which have a later distrust date: +# 1. Apple IST CA 2 - G1, SHA-256 fingerprint: +# AC2B922ECFD5E01711772FEA8ED372DE9D1E2245FCE3F57A9CDBEC77296A424B +# Distrust after December 31, 2019. +# 2. Apple IST CA 8 - G1, SHA-256 fingerprint: +# A4FE7C7F15155F3F0AEF7AAA83CF6E06DEB97CA3F909DF920AC1490882D488ED +# Distrust after December 31, 2019. +# Leading and trailing whitespace surrounding each value are ignored. +# Unknown values are ignored. If the property is commented out or set to the +# empty String, no policies are enforced. +# +# Note: This property is currently used by the JDK Reference implementation. +# It is not guaranteed to be supported by other SE implementations. Also, this +# property does not override other security properties which can restrict +# certificates such as jdk.tls.disabledAlgorithms or +# jdk.certpath.disabledAlgorithms; those restrictions are still enforced even +# if this property is not enabled. +# +jdk.security.caDistrustPolicies=SYMANTEC_TLS
--- a/src/share/lib/security/java.security-solaris Wed Apr 03 03:51:25 2019 +0100 +++ b/src/share/lib/security/java.security-solaris Tue Apr 16 02:48:40 2019 +0100 @@ -890,3 +890,33 @@ # and javax.crypto.spec.SecretKeySpec and rejects all the others. jceks.key.serialFilter = java.lang.Enum;java.security.KeyRep;\ java.security.KeyRep$Type;javax.crypto.spec.SecretKeySpec;!* + +# +# Policies for distrusting Certificate Authorities (CAs). +# +# This is a comma separated value of one or more case-sensitive strings, each +# of which represents a policy for determining if a CA should be distrusted. +# The supported values are: +# +# +# SYMANTEC_TLS : Distrust TLS Server certificates anchored by a Symantec +# root CA and issued after April 16, 2019 unless issued by one of the +# following subordinate CAs which have a later distrust date: +# 1. Apple IST CA 2 - G1, SHA-256 fingerprint: +# AC2B922ECFD5E01711772FEA8ED372DE9D1E2245FCE3F57A9CDBEC77296A424B +# Distrust after December 31, 2019. +# 2. Apple IST CA 8 - G1, SHA-256 fingerprint: +# A4FE7C7F15155F3F0AEF7AAA83CF6E06DEB97CA3F909DF920AC1490882D488ED +# Distrust after December 31, 2019. +# Leading and trailing whitespace surrounding each value are ignored. +# Unknown values are ignored. If the property is commented out or set to the +# empty String, no policies are enforced. +# +# Note: This property is currently used by the JDK Reference implementation. +# It is not guaranteed to be supported by other SE implementations. Also, this +# property does not override other security properties which can restrict +# certificates such as jdk.tls.disabledAlgorithms or +# jdk.certpath.disabledAlgorithms; those restrictions are still enforced even +# if this property is not enabled. +# +jdk.security.caDistrustPolicies=SYMANTEC_TLS
--- a/src/share/lib/security/java.security-windows Wed Apr 03 03:51:25 2019 +0100 +++ b/src/share/lib/security/java.security-windows Tue Apr 16 02:48:40 2019 +0100 @@ -891,3 +891,33 @@ # and javax.crypto.spec.SecretKeySpec and rejects all the others. jceks.key.serialFilter = java.lang.Enum;java.security.KeyRep;\ java.security.KeyRep$Type;javax.crypto.spec.SecretKeySpec;!* + +# +# Policies for distrusting Certificate Authorities (CAs). +# +# This is a comma separated value of one or more case-sensitive strings, each +# of which represents a policy for determining if a CA should be distrusted. +# The supported values are: +# +# +# SYMANTEC_TLS : Distrust TLS Server certificates anchored by a Symantec +# root CA and issued after April 16, 2019 unless issued by one of the +# following subordinate CAs which have a later distrust date: +# 1. Apple IST CA 2 - G1, SHA-256 fingerprint: +# AC2B922ECFD5E01711772FEA8ED372DE9D1E2245FCE3F57A9CDBEC77296A424B +# Distrust after December 31, 2019. +# 2. Apple IST CA 8 - G1, SHA-256 fingerprint: +# A4FE7C7F15155F3F0AEF7AAA83CF6E06DEB97CA3F909DF920AC1490882D488ED +# Distrust after December 31, 2019. +# Leading and trailing whitespace surrounding each value are ignored. +# Unknown values are ignored. If the property is commented out or set to the +# empty String, no policies are enforced. +# +# Note: This property is currently used by the JDK Reference implementation. +# It is not guaranteed to be supported by other SE implementations. Also, this +# property does not override other security properties which can restrict +# certificates such as jdk.tls.disabledAlgorithms or +# jdk.certpath.disabledAlgorithms; those restrictions are still enforced even +# if this property is not enabled. +# +jdk.security.caDistrustPolicies=SYMANTEC_TLS
--- a/test/java/text/Format/DateFormat/WeekDateTest.java Wed Apr 03 03:51:25 2019 +0100 +++ b/test/java/text/Format/DateFormat/WeekDateTest.java Tue Apr 16 02:48:40 2019 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2019, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -137,20 +137,28 @@ Calendar jcal = Calendar.getInstance(TimeZone.getTimeZone("GMT"), new Locale("ja", "JP", "JP")); + String format = "2-W01-2"; // 2019-12-31 == R1-12-31 + int expectedYear = 2019; + // Check the current era, Heisei or Reiwa + if (System.currentTimeMillis() < 1556668800000L) { + format = "21-W01-3"; // 2008-12-31 == H20-12-31 + expectedYear = 2008; + } jcal.setFirstDayOfWeek(MONDAY); jcal.setMinimalDaysInFirstWeek(4); SimpleDateFormat sdf = new SimpleDateFormat("Y-'W'ww-u"); sdf.setCalendar(jcal); - Date d = sdf.parse("21-W01-3"); // 2008-12-31 == H20-12-31 + Date d = sdf.parse(format); GregorianCalendar gcal = newCalendar(); gcal.setTime(d); - if (gcal.get(YEAR) != 2008 + if (gcal.get(YEAR) != expectedYear || gcal.get(MONTH) != DECEMBER || gcal.get(DAY_OF_MONTH) != 31) { - String s = String.format("noWeekDateSupport: got %04d-%02d-%02d, expected 2008-12-31%n", + String s = String.format("noWeekDateSupport: got %04d-%02d-%02d, expected %4d-12-31%n", gcal.get(YEAR), gcal.get(MONTH)+1, - gcal.get(DAY_OF_MONTH)); + gcal.get(DAY_OF_MONTH), + expectedYear); throw new RuntimeException(s); } }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/util/Calendar/CalendarTestScripts/CalendarAdapter.java Tue Apr 16 02:48:40 2019 +0100 @@ -0,0 +1,437 @@ +/* + * Copyright (c) 2007, 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +import java.util.Calendar; +import sun.util.calendar.CalendarUtils; + +public class CalendarAdapter extends Calendar { + public static enum Type { + GREGORIAN, BUDDHIST, JAPANESE; + } + + static final String[] FIELD_NAMES = { + "ERA", "YEAR", "MONTH", "WEEK_OF_YEAR", "WEEK_OF_MONTH", "DAY_OF_MONTH", + "DAY_OF_YEAR", "DAY_OF_WEEK", "DAY_OF_WEEK_IN_MONTH", "AM_PM", "HOUR", + "HOUR_OF_DAY", "MINUTE", "SECOND", "MILLISECOND", "ZONE_OFFSET", + "DST_OFFSET" + }; + + Calendar cal; + GregorianAdapter gcal; + private Type type; + + public CalendarAdapter(Calendar cal) { + if (cal == null) + throw new NullPointerException(); + + this.cal = cal; + if (cal instanceof sun.util.BuddhistCalendar) { + type = Type.BUDDHIST; + } else if (cal instanceof GregorianAdapter) { + type = Type.GREGORIAN; + gcal = (GregorianAdapter) cal; + } else { + type = Type.JAPANESE; + } + } + + public void setFirstDayOfWeek(int w) { + cal.setFirstDayOfWeek(w); + } + + public int getFirstDayOfWeek() { + return cal.getFirstDayOfWeek(); + } + + public void setMinimalDaysInFirstWeek(int value) { + cal.setMinimalDaysInFirstWeek(value); + } + + public int getMinimalDaysInFirstWeek() { + return getMinimalDaysInFirstWeek(); + } + + public long getTimeInMillis() { + return cal.getTimeInMillis(); + } + + public void setTimeInMillis(long millis) { + cal.setTimeInMillis(millis); + } + + public int get(int field) { + return cal.get(field); + } + + public void set(int field, int value) { + cal.set(field, value); + } + + public void add(int field, int amount) { + cal.add(field, amount); + } + + public void roll(int field, boolean dir) { + cal.roll(field, dir); + } + + public void roll(int field, int amount) { + cal.roll(field, amount); + } + + public void setDate(int year, int month, int date) + { + cal.set(year, month, date); + } + + public void setDate(int era, int year, int month, int date) { + cal.set(ERA, era); + cal.set(year, month, date); + } + + public void setDateTime(int year, int month, int date, int hourOfDay, int minute, int second) + { + cal.set(year, month, date, hourOfDay, minute, second); + } + + public void clearAll() { + cal.clear(); + } + + public void clearField(int field) + { + cal.clear(field); + } + + public boolean isSetField(int field) + { + return cal.isSet(field); + } + + public int getMaximum(int field) { + return cal.getMaximum(field); + } + + public int getLeastMaximum(int field) { + return cal.getLeastMaximum(field); + } + + public int getActualMaximum(int field) { + return cal.getActualMaximum(field); + } + + public int getMinimum(int field) { + return cal.getMinimum(field); + } + + public int getGreatestMinimum(int field) { + return cal.getGreatestMinimum(field); + } + + public int getActualMinimum(int field) { + return cal.getActualMinimum(field); + } + + public void setLenient(boolean lenient) { + cal.setLenient(lenient); + } + + public String toString() { + return cal.toString(); + } + + protected void computeFields() { + } + + protected void computeTime() { + } + + void setTimeOfDay(int hourOfDay, int minute, int second, int ms) { + cal.set(HOUR_OF_DAY, hourOfDay); + cal.set(MINUTE, minute); + cal.set(SECOND, second); + cal.set(MILLISECOND, ms); + } + + // GregorianAdapter specific methods + + // When gcal is null, the methods throw a NPE. + + int getSetStateFields() { + return gcal.getSetStateFields(); + } + + int[] getFields() { + return gcal.getFields(); + } + + boolean checkInternalDate(int year, int month, int dayOfMonth) { + return gcal.checkInternalDate(year, month, dayOfMonth); + } + + boolean checkInternalDate(int year, int month, int dayOfMonth, int dayOfWeek) { + return gcal.checkInternalDate(year, month, dayOfMonth, dayOfWeek); + } + + boolean checkInternalField(int field, int expectedValue) { + return checkInternalField(field, expectedValue); + } + + // check methods + + boolean checkAllSet() { + initTest(); + for (int i = 0; i < FIELD_COUNT; i++) { + checkFieldState(i, true); + } + return getStatus(); + } + + boolean checkMaximum(int field, int expectedValue) { + int val; + if ((val = getMaximum(field)) != expectedValue) { + appendMessage("getMaximum("+FIELD_NAMES[field]+"): got " + val + + " expected " + expectedValue); + } + return getStatus(); + } + + boolean checkActualMaximum(int field, int expectedValue) { + int val; + if ((val = getActualMaximum(field)) != expectedValue) { + appendMessage("getActualMaximum("+FIELD_NAMES[field]+"): got " + val + + " expected " + expectedValue); + } + return getStatus(); + } + + boolean checkLeastMaximum(int field, int expectedValue) { + int val; + if ((val = getLeastMaximum(field)) != expectedValue) { + appendMessage("getLeastMaximum("+FIELD_NAMES[field]+"): got " + val + + " expected " + expectedValue); + } + return getStatus(); + } + + boolean checkMinimum(int field, int expectedValue) { + int val; + if ((val = getMinimum(field)) != expectedValue) { + appendMessage("getMinimum("+FIELD_NAMES[field]+"): got " + val + + " expected " + expectedValue); + } + return getStatus(); + } + + boolean checkActualMinimum(int field, int expectedValue) { + int val; + if ((val = getActualMinimum(field)) != expectedValue) { + appendMessage("getActualMinimum("+FIELD_NAMES[field]+"): got " + val + + " expected " + expectedValue); + } + return getStatus(); + } + + boolean checkGreatestMinimum(int field, int expectedValue) { + int val; + if ((val = getGreatestMinimum(field)) != expectedValue) { + appendMessage("getGreatestMinimum("+FIELD_NAMES[field]+"): got " + val + + " expected " + expectedValue); + } + return getStatus(); + } + + boolean checkDate(int year, int month, int dayOfMonth) { + initTest(); + checkField(YEAR, year); + checkField(MONTH, month); + checkField(DAY_OF_MONTH, dayOfMonth); + return getStatus(); + } + + boolean checkDate(int era, int year, int month, int dayOfMonth) { + initTest(); + checkField(ERA, era); + checkField(YEAR, year); + checkField(MONTH, month); + checkField(DAY_OF_MONTH, dayOfMonth); + return getStatus(); + } + + boolean checkDateTime(int year, int month, int dayOfMonth, + int hourOfDay, int minute, int second) { + initTest(); + checkField(YEAR, year); + checkField(MONTH, month); + checkField(DAY_OF_MONTH, dayOfMonth); + checkField(HOUR_OF_DAY, hourOfDay); + checkField(MINUTE, minute); + checkField(SECOND, second); + return getStatus(); + } + + boolean checkDateTime(int year, int month, int dayOfMonth, + int hourOfDay, int minute, int second, int ms) { + initTest(); + checkField(YEAR, year); + checkField(MONTH, month); + checkField(DAY_OF_MONTH, dayOfMonth); + checkField(HOUR_OF_DAY, hourOfDay); + checkField(MINUTE, minute); + checkField(SECOND, second); + checkField(MILLISECOND, ms); + return getStatus(); + } + + boolean checkTimeOfDay(int hourOfDay, int minute, int second, int ms) { + initTest(); + checkField(HOUR_OF_DAY, hourOfDay); + checkField(MINUTE, minute); + checkField(SECOND, second); + checkField(MILLISECOND, ms); + return getStatus(); + } + + boolean checkMillis(long millis) { + initTest(); + long t = cal.getTimeInMillis(); + if (t != millis) { + appendMessage("wrong millis: got " + t + ", expected " + millis); + return false; + } + return true; + } + + boolean checkFieldState(int field, boolean expectedState) { + if (isSet(field) != expectedState) { + appendMessage(FIELD_NAMES[field] + " state is not " + expectedState + "; "); + return false; + } + return true; + } + + boolean checkField(int field, int expectedValue) { + int val; + if ((val = get(field)) != expectedValue) { + appendMessage("get(" + FIELD_NAMES[field] + "): got " + val + + ", expected " + expectedValue + "; "); + return false; + } + return true; + } + + static final String fieldName(int field) { + return FIELD_NAMES[field]; + } + + String toDateString() { + StringBuffer sb = new StringBuffer(); + String[] eraNames = null; + switch (type) { + case GREGORIAN: + eraNames = new String[] { "BCE", "" }; + break; + + case BUDDHIST: + eraNames = new String[] { "Before BE", "BE"}; + break; + + case JAPANESE: + eraNames = new String[] { + "BeforeMeiji", + "Meiji", + "Taisho", + "Showa", + "Heisei", + "Reiwa" + }; + break; + } + + sb.append(eraNames[cal.get(ERA)]); + if (sb.length() > 0) + sb.append(' '); + CalendarUtils.sprintf0d(sb, cal.get(YEAR), 4).append('-'); + CalendarUtils.sprintf0d(sb, cal.get(MONTH)+1, 2).append('-'); + CalendarUtils.sprintf0d(sb, cal.get(DAY_OF_MONTH), 2); + return sb.toString(); + } + + String toTimeString() { + StringBuffer sb = new StringBuffer(); + CalendarUtils.sprintf0d(sb, cal.get(HOUR_OF_DAY), 2).append(':'); + CalendarUtils.sprintf0d(sb, cal.get(MINUTE), 2).append(':'); + CalendarUtils.sprintf0d(sb, cal.get(SECOND),2 ).append('.'); + CalendarUtils.sprintf0d(sb, cal.get(MILLISECOND), 3); + int zoneOffset = cal.get(ZONE_OFFSET) + cal.get(DST_OFFSET); + if (zoneOffset == 0) { + sb.append('Z'); + } else { + int offset; + char sign; + if (zoneOffset > 0) { + offset = zoneOffset; + sign = '+'; + } else { + offset = -zoneOffset; + sign = '-'; + } + offset /= 60000; + sb.append(sign); + CalendarUtils.sprintf0d(sb, offset / 60, 2); + CalendarUtils.sprintf0d(sb, offset % 60, 2); + } + return sb.toString(); + } + + String toDateTimeString() { + return toDateString() + "T" + toTimeString(); + } + + // Message handling + + StringBuffer msg = new StringBuffer(); + + private void initTest() { + msg = new StringBuffer(); + } + + String getMessage() { + String s = msg.toString(); + msg = new StringBuffer(); + return " " + s; + } + + private void setMessage(String msg) { + this.msg = new StringBuffer(msg); + } + + private void appendMessage(String msg) { + this.msg.append(msg); + } + + boolean getStatus() { + return msg.length() == 0; + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/util/Calendar/CalendarTestScripts/CalendarTestEngine.java Tue Apr 16 02:48:40 2019 +0100 @@ -0,0 +1,782 @@ +/* + * Copyright (c) 2007, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.InputStreamReader; +import java.util.*; + +public class CalendarTestEngine { + private static File file; + private static BufferedReader in; + private static int testCount; + private static int lineno; + private static Locale locale; + private static TimeZone timezone; + private static boolean leniency = true; + + public static void main(String[] args) throws Exception { + Locale loc = Locale.getDefault(); + TimeZone tz = TimeZone.getDefault(); + locale = loc; + timezone = tz; + try { + for (String arg : args) { + file = new File(arg); + FileInputStream fis = new FileInputStream(file); + System.out.println("Starting " + file.getName() + "..."); + in = new BufferedReader(new InputStreamReader(fis)); + testCount = lineno = 0; + run(); + System.out.println("Completed " + file.getName()); + } + } finally { + Locale.setDefault(loc); + TimeZone.setDefault(tz); + } + } + + private static void run() throws Exception { + String line; + int section = 0; + Map<String, CalendarAdapter> cals = new HashMap<String, CalendarAdapter>(); + CalendarAdapter calendar = null; + Result result = new Result(); + + while ((line = in.readLine()) != null) { + lineno++; + line = line.trim(); + // Skip blank and comment lines + if (line.length() == 0 || line.charAt(0) == '#') { + continue; + } + int comment = line.indexOf('#'); + if (comment != -1) { + line = line.substring(0, comment).trim(); + } + Scanner sc = new Scanner(line); + String token = sc.next(); + Symbol operation = symbol(token); + if (operation == null) { + throw new RuntimeException(lineno() + "wrong op? " + token); + } + + + if (operation.type == Symbol.Type.EXCEPTION) { + String className = sc.next(); + Class clazz = Exceptions.get(className); + Exception e = result.getException(); + if (!clazz.isInstance(e)) { + throw new RuntimeException(lineno() + "unexpected exception: got: " + e + + ", expected=" + clazz); + } + } + + Exception x = result.getException(); + if (x != null) { + throw new RuntimeException(lineno(result.getLineno()) + "Unexpected exception", x); + } + + try { + switch (operation.type) { + case LOCALE: + { + String lang = sc.next(); + String country = "", var = ""; + if (sc.hasNext()) { + country = sc.next(); + if (sc.hasNext()) { + var = sc.next(); + } + } + locale = new Locale(lang, country, var); + } + break; + + case TIMEZONE: + { + if (sc.hasNext()) { + String id = sc.next(); + timezone = TimeZone.getTimeZone(id); + if (!timezone.getID().equals(id)) { + System.err.printf("Warning: line %d: may get wrong time zone? " + +"(specified: %s vs. actual: %s)%n", + lineno, id, timezone.getID()); + } + } + } + break; + + case NEW: + { + Symbol op = symbol(sc.next()); + Calendar cal = null; + switch (op.type) { + case INSTANCE: + cal = Calendar.getInstance(timezone, locale); + break; + case GREGORIAN: + cal = new GregorianAdapter(timezone, locale); + break; + default: + symbolError(op); + break; + } + cal.setLenient(leniency); + calendar = new CalendarAdapter(cal); + if (sc.hasNext()) { + String name = sc.next(); + cals.put(name.toLowerCase(Locale.ROOT), calendar); + if (!leniency) { + System.out.printf("%s%s is non-lenient%n", lineno(), name); + } + } else { + throw new RuntimeException(lineno() + "Missing associated name"); + } + } + break; + + case TEST: + testCount++; + if (sc.hasNext()) { + System.out.printf("Test#%d:%s%n", testCount, sc.findInLine(".+")); + } else { + System.out.printf("Test#%d:%n", testCount); + } + break; + + case USE: + { + String name = sc.next().toLowerCase(Locale.ROOT); + CalendarAdapter c = cals.get(name); + if (c == null) { + throw new CalendarTestException(lineno() + "calendar " + name + + " not found."); + } + calendar = c; + } + break; + + case ASSIGN: + { + long v = getLong(sc); + String to = sc.next().toLowerCase(Locale.ROOT); + boolean assign = true; + if (sc.hasNext()) { + Symbol condition = symbol(sc.next()); + if (condition.type == Symbol.Type.IF) { + long v1 = getLong(sc); + Symbol op = symbol(sc.next()); + long v2 = getLong(sc); + assign = relation(v1, op, v2); + } else { + symbolError(condition); + } + } + if (assign) + Variable.newVar(to, v); + } + break; + + case EVAL: + { + long v1 = getLong(sc); + String op = sc.next(); + Symbol operator = symbol(op); + if (operator == null) { + throw new RuntimeException("op " + op + " invalid"); + } + long v2 = getLong(sc); + if (operator.isArithmetic()) { + long value = 0; + switch (operator.type) { + case PLUS: + value = v1 + v2; + break; + + case MINUS: + value = v1 - v2; + break; + + case MULTIPLY: + value = v1 * v2; + break; + + case DIVIDE: + value = v1 / v2; + break; + + case MOD: + value = v1 % v2; + break; + + default: + symbolError(operator); + break; + } + result.setValue(value); + } else { + if (!relation(v1, operator, v2)) { + throw new RuntimeException("not " + v1 + " " + op + " " + v2); + } + } + } + break; + + case CLEAR: + { + Symbol sym = symbol(sc.next()); + if (sym.type == Symbol.Type.ALL) { + calendar.clearAll(); + } else if (sym.type == Symbol.Type.FIELD) { + int f = sym.value(); + calendar.clearField(f); + } else { + symbolError(sym); + } + } + break; + + case GET: + { + Symbol sym = symbol(sc.next()); + switch (sym.type) { + case FIELD: + { + int f = sym.value(); + int v = calendar.get(f); + result.setValue(v); + } + break; + + case MILLIS: + { + long v = calendar.getTimeInMillis(); + result.setValue(v); + } + break; + + case MINIMUM: + { + int f = getInt(sc); + int v = calendar.getMinimum(f); + result.setValue(v); + } + break; + + case GREATESTMINIMUM: + { + int f = getInt(sc); + int v = calendar.getGreatestMinimum(f); + result.setValue(v); + } + break; + + case ACTUALMINIMUM: + { + int f = getInt(sc); + int v = calendar.getActualMinimum(f); + result.setValue(v); + } + break; + + case MAXIMUM: + { + int f = getInt(sc); + int v = calendar.getMaximum(f); + result.setValue(v); + } + break; + + case LEASTMAXIMUM: + { + int f = getInt(sc); + int v = calendar.getLeastMaximum(f); + result.setValue(v); + } + break; + + case ACTUALMAXIMUM: + { + int f = getInt(sc); + int v = calendar.getActualMaximum(f); + result.setValue(v); + } + break; + + case FIRSTDAYOFWEEK: + { + result.setValue(calendar.getFirstDayOfWeek()); + } + break; + + case MINIMALDAYSINFIRSTWEEK: + { + int v = calendar.getMinimalDaysInFirstWeek(); + result.setValue(v); + } + break; + + default: + symbolError(sym); + break; + } + } + break; + + case ADD: + case ROLL: + { + Symbol sym = symbol(sc.next()); + if (sym.type == Symbol.Type.FIELD) { + int f = sym.value(); + int v = sc.nextInt(); + switch (operation.type) { + case ADD: + calendar.add(f, v); + break; + + case ROLL: + calendar.roll(f, v); + break; + } + } else { + symbolError(sym); + } + } + break; + + case SET: + { + Symbol sym = symbol(sc.next()); + switch (sym.type) { + case FIELD: + { + int f = sym.value(); + int v = getInt(sc); + calendar.set(f, v); + } + break; + + case MILLIS: + { + long v = getLong(sc); + calendar.setTimeInMillis(v); + } + break; + + case DATE: + { + int a = getInt(sc); + int b = getInt(sc); + int c = getInt(sc); + if (sc.hasNext()) { + int d = getInt(sc); + // era, year, month, dayOfMonth + calendar.setDate(a, b, c, d); + } else { + // year, month, dayOfMonth + calendar.setDate(a, b, c); + } + } + break; + + case DATETIME: + { + int y = getInt(sc); + int m = getInt(sc); + int d = getInt(sc); + int hh = getInt(sc); + int mm = getInt(sc); + int ss = getInt(sc); + calendar.setDateTime(y, m, d, hh, mm, ss); + } + break; + + case TIMEOFDAY: + { + int hh = getInt(sc); + int mm = getInt(sc); + int ss = getInt(sc); + int ms = getInt(sc); + calendar.setTimeOfDay(hh, mm, ss, ms); + } + break; + + case FIRSTDAYOFWEEK: + { + int v = getInt(sc); + calendar.setFirstDayOfWeek(v); + } + break; + + case MINIMALDAYSINFIRSTWEEK: + { + int v = getInt(sc); + calendar.setMinimalDaysInFirstWeek(v); + } + break; + + case LENIENT: + if (calendar != null) { + calendar.setLenient(true); + } + leniency = true; + break; + + case NONLENIENT: + if (calendar != null) { + calendar.setLenient(false); + } + leniency = false; + break; + + default: + symbolError(sym); + } + if (sc.hasNext()) { + throw new RuntimeException(lineno() + "extra param(s) " + + sc.findInLine(".+")); + } + } + break; + + case CHECK: + { + Symbol sym = symbol(sc.next()); + boolean stat = false; + switch (sym.type) { + case MILLIS: + { + long millis = getLong(sc); + stat = calendar.checkMillis(millis); + } + break; + + case FIELD: + { + int f = sym.value(); + int v = getInt(sc); + stat = calendar.checkField(f, v); + } + break; + + case DATE: + { + int a = getInt(sc); + int b = getInt(sc); + int c = getInt(sc); + if (sc.hasNext()) { + int d = getInt(sc); + // era year month dayOfMonth + stat = calendar.checkDate(a, b, c, d); + } else { + // year month dayOfMonth + stat = calendar.checkDate(a, b, c); + } + } + break; + + case DATETIME: + { + int y = getInt(sc); + int m = getInt(sc); + int d = getInt(sc); + int hh = getInt(sc); + int mm = getInt(sc); + int ss = getInt(sc); + if (sc.hasNext()) { + int ms = getInt(sc); + stat = calendar.checkDateTime(y, m, d, hh, mm, ss, ms); + } else { + stat = calendar.checkDateTime(y, m, d, hh, mm, ss); + } + } + break; + + case TIMEOFDAY: + { + int hh = sc.nextInt(); + int mm = sc.nextInt(); + int ss = sc.nextInt(); + int millis = sc.nextInt(); + stat = calendar.checkTimeOfDay(hh, mm, ss, millis); + } + break; + + case MINIMUM: + { + int f = getInt(sc); + int v = getInt(sc); + stat = calendar.checkMinimum(f, v); + } + break; + + case GREATESTMINIMUM: + { + int f = getInt(sc); + int v = getInt(sc); + stat = calendar.checkGreatestMinimum(f, v); + } + break; + + case ACTUALMINIMUM: + { + int f = getInt(sc); + int v = getInt(sc); + stat = calendar.checkActualMinimum(f, v); + } + break; + + case MAXIMUM: + { + int f = getInt(sc); + int v = getInt(sc); + stat = calendar.checkMaximum(f, v); + } + break; + + case LEASTMAXIMUM: + { + int f = getInt(sc); + int v = getInt(sc); + stat = calendar.checkLeastMaximum(f, v); + } + break; + + case ACTUALMAXIMUM: + { + int f = getInt(sc); + int v = getInt(sc); + stat = calendar.checkActualMaximum(f, v); + } + break; + + default: + throw new RuntimeException(lineno() + "Unknown operand"); + } + if (!stat) { + throw new RuntimeException(lineno() + calendar.getMessage()); + } + } + break; + + case PRINT: + { + String s = sc.next(); + if (s.charAt(0) == '$') { + Variable var = variable(s); + if (var == null) + throw new RuntimeException(lineno() + "Unknown token: " + s); + System.out.printf("%s%s=%d%n", lineno(), s, var.longValue()); + break; + } + + Symbol sym = symbol(s); + switch (sym.type) { + case INSTANCE: + { + Calendar cal = calendar; + String name = "current"; + if (sc.hasNext()) { + name = sc.next(); + cal = cals.get(name.toLowerCase(Locale.ROOT)); + } + System.out.printf("%s%s=%s%n", lineno(), name, cal); + } + break; + + case FIELD: + { + int f = sym.value(); + String remark = ""; + if (sc.hasNext()) { + remark = sc.findInLine(".+"); + } + System.out.printf("%s%s=%d %s%n", lineno(), calendar.fieldName(f), + calendar.get(f), remark); + } + break; + + case MILLIS: + { + String remark = ""; + if (sc.hasNext()) { + remark = sc.findInLine(".+"); + } + System.out.printf("%sMillis=%d %s%n", lineno(), + calendar.getTimeInMillis(), remark); + } + break; + + case MINIMUM: + System.out.printf("%s%s=%d%n", lineno(), + s, calendar.getMinimum(getInt(sc))); + break; + + case GREATESTMINIMUM: + System.out.printf("%s%s=%d%n", lineno(), + s, calendar.getGreatestMinimum(getInt(sc))); + break; + + case ACTUALMINIMUM: + System.out.printf("%s%s=%d%n", lineno(), + s, calendar.getActualMinimum(getInt(sc))); + break; + + case MAXIMUM: + System.out.printf("%s%s=%d%n", lineno(), + s, calendar.getMaximum(getInt(sc))); + break; + + case LEASTMAXIMUM: + System.out.printf("%s%s=%d%n", lineno(), + s, calendar.getLeastMaximum(getInt(sc))); + break; + + case ACTUALMAXIMUM: + System.out.printf("%s%s=%d%n", lineno(), + s, calendar.getActualMaximum(getInt(sc))); + break; + + case DATE: + System.out.println(lineno() + calendar.toDateString()); + break; + + case DATETIME: + System.out.println(lineno() + calendar.toDateTimeString()); + break; + + case TIMEZONE: + System.out.println(lineno() + "timezone=" + timezone); + break; + + case LOCALE: + System.out.println(lineno() + "locale=" + locale); + break; + } + } + } + } catch (CalendarTestException cte) { + throw cte; + } catch (NoSuchElementException nsee) { + throw new NoSuchElementException(lineno() + "syntax error"); + } catch (Exception e) { + result.setException(e); + result.setLineno(lineno); + } + } + Exception x = result.getException(); + if (x != null) { + throw new RuntimeException(lineno(result.getLineno()) + "Unexpected exception", x); + } + } + + private static Symbol symbol(String s) { + return Symbol.get(s.toLowerCase(Locale.ROOT)); + } + + private static Variable variable(String s) { + return Variable.get(s.toLowerCase(Locale.ROOT)); + } + + private static int getInt(Scanner sc) { + if (sc.hasNextInt()) { + return sc.nextInt(); + } + + String s = sc.next(); + if (s.charAt(0) == '$') { + Variable var = variable(s); + if (var == null) + throw new RuntimeException(lineno() + "Unknown token: " + s); + return var.intValue(); + } + Symbol sym = symbol(s); + if (sym == null) + throw new RuntimeException(lineno() + "Unknown token: " + s); + return sym.value(); + } + + private static long getLong(Scanner sc) { + if (sc.hasNextLong()) { + return sc.nextLong(); + } + + String s = sc.next(); + if (s.charAt(0) == '$') { + Variable var = variable(s); + if (var == null) + throw new RuntimeException(lineno() + "Unknown token: " + s); + return var.longValue(); + } + Symbol sym = symbol(s); + if (sym == null) + throw new RuntimeException(lineno() + "Unknown token: " + s); + return sym.value(); + } + + private static boolean relation(long v1, Symbol relop, long v2) { + boolean result = false; + switch (relop.type) { + case GT: + result = v1 > v2; + break; + + case GE: + result = v1 >= v2; + break; + + case EQ: + result = v1 == v2; + break; + + case NEQ: + result = v1 != v2; + break; + + case LE: + result = v1 <= v2; + break; + + case LT: + result = v1 < v2; + break; + } + return result; + } + + private static String lineno() { + return lineno(lineno); + } + + private static String lineno(int ln) { + return file.getName() + ":" + ln + ": "; + } + + private static void symbolError(Symbol sym) { + throw new RuntimeException(lineno + ": unexpected symbol: " + sym); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/util/Calendar/CalendarTestScripts/CalendarTestException.java Tue Apr 16 02:48:40 2019 +0100 @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2007, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +public class CalendarTestException extends RuntimeException { + public CalendarTestException() { + super(); + } + + public CalendarTestException(String msg) { + super(msg); + } + + public CalendarTestException(String msg, Throwable t) { + super(msg, t); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/util/Calendar/CalendarTestScripts/Exceptions.java Tue Apr 16 02:48:40 2019 +0100 @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2007, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.util.HashMap; +import java.util.Locale; +import java.util.Map; + +public class Exceptions { + private static Map<String, Class> exceptions = new HashMap<String, Class>(); + + static { + put("nullpointerexception", NullPointerException.class); + put("illegalargumentexception", IllegalArgumentException.class); + } + + private static void put(String key, Class clazz) { + Class c = exceptions.put(key, clazz); + if (c != null) { + throw new RuntimeException(key + " already exisits"); + } + } + + public static Class get(String key) { + return exceptions.get(key.toLowerCase(Locale.ROOT)); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/util/Calendar/CalendarTestScripts/GregorianAdapter.java Tue Apr 16 02:48:40 2019 +0100 @@ -0,0 +1,125 @@ +/* + * Copyright (c) 2007, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.util.GregorianCalendar; +import java.util.Locale; +import java.util.TimeZone; + +public class GregorianAdapter extends GregorianCalendar { + static final int ALL_FIELDS = (1 << FIELD_COUNT) - 1; + + public GregorianAdapter() { + super(); + } + + public GregorianAdapter(TimeZone tz) { + super(tz); + } + + public GregorianAdapter(Locale loc) { + super(loc); + } + + public GregorianAdapter(TimeZone tz, Locale loc) { + super(tz, loc); + } + + public void computeTime() { + super.computeTime(); + } + + public void computeFields() { + super.computeFields(); + } + + public void complete() { + super.complete(); + } + + StringBuffer msg = new StringBuffer(); + + void initTest() { + msg = new StringBuffer(); + } + + String getMessage() { + String s = msg.toString(); + msg = new StringBuffer(); + return " " + s; + } + + void setMessage(String msg) { + this.msg = new StringBuffer(msg); + } + + void appendMessage(String msg) { + this.msg.append(msg); + } + + boolean getStatus() { + return msg.length() == 0; + } + + int getSetStateFields() { + int mask = 0; + for (int i = 0; i < FIELD_COUNT; i++) { + if (isSet(i)) { + mask |= 1 << i; + } + } + return mask; + } + + int[] getFields() { + int[] fds = new int[fields.length]; + System.arraycopy(fields, 0, fds, 0, fds.length); + return fds; + } + + boolean checkInternalDate(int year, int month, int dayOfMonth) { + initTest(); + checkInternalField(YEAR, year); + checkInternalField(MONTH, month); + checkInternalField(DAY_OF_MONTH, dayOfMonth); + return getStatus(); + } + + boolean checkInternalDate(int year, int month, int dayOfMonth, int dayOfWeek) { + initTest(); + checkInternalField(YEAR, year); + checkInternalField(MONTH, month); + checkInternalField(DAY_OF_MONTH, dayOfMonth); + checkInternalField(DAY_OF_WEEK, dayOfWeek); + return getStatus(); + } + + boolean checkInternalField(int field, int expectedValue) { + int val; + if ((val = internalGet(field)) != expectedValue) { + appendMessage("internalGet(" + CalendarAdapter.FIELD_NAMES[field] + "): got " + val + + ", expected " + expectedValue + "; "); + return false; + } + return true; + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/util/Calendar/CalendarTestScripts/JapaneseRollDayOfWeekTestGenerator.java Tue Apr 16 02:48:40 2019 +0100 @@ -0,0 +1,131 @@ +/* + * Copyright (c) 2007, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.io.PrintWriter; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.GregorianCalendar; +import java.util.Locale; +import static java.util.Calendar.*; + + +public class JapaneseRollDayOfWeekTestGenerator { + private static final String[] ERAS = { + "BeforeMeiji", "Meiji", "Taisho", "Showa", "Heisei" + }; + + private static final String[] DAYOFWEEK = { + null, "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" + }; + + private static final int[] DAYOFMONTH = { + 25, 26, 27, 28, 29, 30, 31, + 1, 2, 3, 4, 5, 6, 7 + }; + + private static final int DOM_BASE = 7; + + //Usage: JapaneseRollDayOfWeekTestGenerator will generate test script into + // file rolldow.cts. + public static void generateTestScript(String[] args) throws Exception{ + Locale.setDefault(Locale.ROOT); + + //This test generator assumes that Heisei has (nYears - 1) or more years. + int nYears = (args.length == 1) ? + Math.max(3, Math.min(Integer.parseInt(args[0]), 40)) : 28; + + // Start from Showa 63 + int era = 3; + int year = 63; + Path testPath = Paths.get(System.getProperty("test.classes")); + String scFileName = testPath + "/rolldow.cts"; + + try (PrintWriter out = new PrintWriter(scFileName)){ + out.println("locale ja JP JP\n" + "new instance jcal\n" + "use jcal"); + for (int y = 0; y < nYears; y++) { + out.printf("\nTest %s %d\n", ERAS[era], year); + for (int fdw = SUNDAY; fdw <= SATURDAY; fdw++) { + int endFdw = fdw + 6; + if (endFdw > SATURDAY) { + endFdw -= 7; + } + for (int mdifw = 1; mdifw <= 7; mdifw++) { + int domIndex = DOM_BASE; + out.println(" clear all"); + out.printf(" set FirstDayOfWeek %s\n", DAYOFWEEK[fdw]); + out.printf(" set MinimalDaysInFirstWeek %d\n", mdifw); + out.printf(" set date %s %d Jan 1\n", ERAS[era], year); + out.println(" get week_of_year\n" + " assign $result $woy"); + out.println(" get day_of_week\n" + " assign $result $doy"); + + int gyear = year + (year >= 60 ? 1925 : 1988); + int next = new GregorianCalendar(gyear, JANUARY, 1).get(DAY_OF_WEEK); + for (int i = 0; i < 10; i++) { + + out.println(" roll day_of_week 1"); + next = nextFdw(next, fdw, endFdw); + if (next == fdw) { + domIndex -= 6; + } else { + domIndex++; + } + int dom = DAYOFMONTH[domIndex]; + out.printf("\tcheck date %d %s %d%n", (dom >= 25) ? year - 1 : year, + (dom >= 25) ? "Dec" : "Jan", dom); + out.println("\teval $doy + 1"); + out.println("\tassign $result $doy"); + out.println("\tassign Sun $doy if $doy > Sat"); + out.println("\tcheck day_of_week $doy"); + out.println("\tcheck week_of_year $woy"); + } + + for (int i = 0; i < 10; i++) { + out.println("\troll day_of_week -1"); + out.println("\teval $doy - 1"); + out.println("\tassign $result $doy"); + out.println("\tassign Sat $doy if $doy < Sun"); + out.println("\tcheck day_of_week $doy"); + out.println("\tcheck week_of_year $woy"); + } + } + } + + if (year == 64 && era == 3) { + era++; + year = 2; + } else { + year++; + } + } + } + } + + private static int nextFdw(int x, int start, int end) { + if (x == end) + return start; + x++; + if (x > SATURDAY) + x = SUNDAY; + return x; + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/util/Calendar/CalendarTestScripts/JapaneseRollTests.java Tue Apr 16 02:48:40 2019 +0100 @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @summary tests Japanese Calendar. + * @bug 4609228 + * @compile -XDignore.symbol.file + * CalendarAdapter.java + * CalendarTestEngine.java + * CalendarTestException.java + * Exceptions.java + * GregorianAdapter.java + * Result.java + * Symbol.java + * Variable.java + * JapaneseRollDayOfWeekTestGenerator.java + * @run main/timeout=120/othervm JapaneseRollTests + */ + +import java.io.File; +import java.io.FilenameFilter; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class JapaneseRollTests { + private static List<String> TZ_TEST_LIST = Arrays.asList( + "tz_japan.cts", "tz_pst.cts"); + private static Path srcPath = Paths.get(System.getProperty("test.src")); + private static Path testPath = Paths.get(System.getProperty("test.classes")); + + public static void main(String[] args) throws Throwable { + List<String> modeList = getFileNameList("params"); + //Test only 3 years by default + String[] jpyear ={"3"}; + JapaneseRollDayOfWeekTestGenerator.generateTestScript(jpyear); + + for (String tz : TZ_TEST_LIST) { + for(String mode:modeList){ + String[] ts = { srcPath + "/timezones/" + tz, + srcPath + "/params/" + mode, + testPath + "/rolldow.cts"}; + + CalendarTestEngine.main(ts); + } + } + } + + private static List<String> getFileNameList(String type ){ + List<String> fileList = new ArrayList<>(); + File dir = new File(srcPath + "/"+ type); + File[] testFiles = dir.listFiles(new FilenameFilter() { + public boolean accept(File dir, String name) { + return name.toLowerCase().endsWith(".cts"); + } + }); + for (File f:testFiles) { + fileList.add(f.getName()); + } + + return fileList; + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/util/Calendar/CalendarTestScripts/JapaneseTests.java Tue Apr 16 02:48:40 2019 +0100 @@ -0,0 +1,98 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @summary tests Japanese Calendar. + * @bug 4609228 + * @compile -XDignore.symbol.file + * CalendarAdapter.java + * CalendarTestEngine.java + * CalendarTestException.java + * Exceptions.java + * GregorianAdapter.java + * Result.java + * Symbol.java + * Variable.java + * @run main/othervm/timeout=120 JapaneseTests + */ + +import java.io.File; +import java.io.FilenameFilter; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class JapaneseTests { + + private static List<String> SET_LENIENT = Arrays.asList( + "japanese_minmax.cts", + "japanese_add.cts", + "japanese_roll.cts", + "japanese_exceptions.cts"); + private static List<String> DEFAULT_LENIENT = Arrays.asList( + "japanese.cts", + "japanese_normalization.cts"); + + private static Path srcPath = Paths.get(System.getProperty("test.src")); + + public static void main(String[] args) throws Throwable { + List<String> tzList = getFileNameList("timezones"); + List<String> modeList = getFileNameList("params"); + + for (String jaTest: DEFAULT_LENIENT) { + for (String tz : tzList) { + String[] ts = { srcPath + "/timezones/" + tz, + srcPath + "/japanese/" + jaTest}; + CalendarTestEngine.main(ts); + } + } + + for (String jaTest: SET_LENIENT) { + for (String tz : tzList) { + for (String mode : modeList) { + String[] ts = { srcPath + "/timezones/" + tz, + srcPath + "/params/" + mode, + srcPath + "/japanese/" + jaTest }; + CalendarTestEngine.main(ts); + } + } + } + } + + private static List<String> getFileNameList(String type ){ + List<String> fileList = new ArrayList<>(); + File dir = new File(srcPath + "/"+ type); + File[] testFiles = dir.listFiles(new FilenameFilter() { + public boolean accept(File dir, String name) { + return name.toLowerCase().endsWith(".cts"); + } + }); + for (File f:testFiles) { + fileList.add(f.getName()); + } + return fileList; + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/util/Calendar/CalendarTestScripts/README Tue Apr 16 02:48:40 2019 +0100 @@ -0,0 +1,566 @@ +Copyright (c) 2005, 2018, Oracle and/or its affiliates. All rights reserved. +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + +This code is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License version 2 only, as +published by the Free Software Foundation. + +This code is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +version 2 for more details (a copy is included in the LICENSE file that +accompanied this code). + +You should have received a copy of the GNU General Public License version +2 along with this work; if not, write to the Free Software Foundation, +Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + +Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +or visit www.oracle.com if you need additional information or have any +questions. + + CALENDAR TEST SCRIPT + + Masayoshi Okutsu + 2005-03-18 + +Introduction +------------ + +Calendar Test Script is a simple scripting language to describe test cases +for java.util.Calendar and its subclasses. It should be much more +productive to use this script language than writing test programs in Java. + +A script looks like below. + +1 locale ja JP JP +2 timezone Asia/Tokyo +3 new instance jcal +4 test day of week on Heisei 1 Jan 8 +5 use jcal +6 clear all +7 set date Heisei 1 Jan 8 +8 check day_of_week Sun + +The first line defines a Locale to be used for creating Calendar +instances. Line 2 defines the current TimeZone to be Asia/Tokyo that is +used creating Calendar instances. Line 3 creates a Calendar instance with +the Locale and TimeZone instances. Its reference name is `jcal'. Line 4 +indicates a start point for a test case with a short test case +description. Line 5 designates `jcal' as the current Calendar +instance. All calendar operation commands are applied to the current +Calendar instance. Line 6 clears all of the calendar fields (e.g., ERA, +YEAR, MONTH, etc.). Line 7 sets the ERA, YEAR, MONTH and DAY_OF_MONTH +fields to Heisei, 1, JANUARY and 8, respectively. Line 8 checks if the +DAY_OF_WEEK value is SUNDAY. If it's not, then a RuntimeException is +thrown. + +Script Grammar +-------------- + +A line is a comment, blank or command line. Any text after '#' is always +treated as a comment and ignored, like a shell script. + + # This is a comment line. + +A command line consists of a command and its parameters, optionally +followed by a comment. For example, + + set date Heisei 1 Jan 8 # The first day of Heisei + +`set' is a command to set `date' to Heisei year 1 January 8th. `Heisei' is +a constant for the Japanese Heisei era value which is consistent with the +Japanese imperial calendar implementation. `Jan' is a constant for +Calendar.SUNDAY. The text after '#' is ignored. + +Keywords are case-insensitive. + + set DAY_OF_WEEK MON + SET day_of_week Mon + +are the same thing. + +Lexical analysis is very simple. A command must be complete in a single +line. Keywords and symbols must be separated by white space. For example, +"$result+1" is parsed as one token. It must be written as "$result + 1". + +Variables +--------- + +Variables can be used in any context to store an integer value and are +referenced in any contexts where an integer value is required. A variable +name must start with a '$', such as `$maxyear'. The integer value is +handled as a long. + +`$result' is reserved for storing a result of a get commend operation. For +example, executing the following command: + + get day_of_month + +sets $result to the get(Calendar.DAY_OF_MONTH) value of the current +Calendar instance. (See NEW and USE commands for the current Calendar +instance.) + +Commands +-------- + +The following defines each command and its syntax. Keywords are described +in upper case below. + +LOCALE language [country [variant]] + + Creates a Locale instance by calling new Locale(language, country, + variant). country and variant are optional. Defining LOCALE overrides + the previously defined Locale value if any. The initial Locale value + is Locale.getDefault(). + +TIMEZONE tzid + + Creates a TimeZone instance by calling + TimeZone.getTimeZone(tzid). Defining TIMEZONE overrides the previously + defined Locale value if any. The initial TimeZone value is + TimeZone.getDefault(). + +NEW INSTANCE calendarname + + Creates a Calendar instance by calling Calendar.getInstance(TimeZone, + Locale). TimeZone and Locale are those defined by TIMEZONE and LOCALE + commands (or their initial values), respectively. The instance is + associated with `calendarname' and becomes the current Calendar + instance to be used for testing. + +NEW GREGORIAN calendarname + + Creates a Calendar instance by calling new GregorianCalendar(TimeZone, + Locale). TimeZone and Locale are those defined by TIMEZONE and LOCALE + commands (or their initial values), respectively. The instance is + associated with `calendarname' and becomes the current Calendar + instance to be used for testing. + +TEST [comments...] + + Declares the beginning of a test case. `comments...' gives a short + description of a test case. (Multiple lines are not supported.) The + test system displays `comments...' to System.out. For example, the + following command: + + test A test case for non-lenient mode + + will output: + + Test #n: A test case for non-lenient mode + + where `n' is a sequence number of TEST command lines appeared in a + test script file. + +USE calendarname + + Specifies the current Calendar instance to use for testing by + `calendarname'. If you need to use more than one Calendar instances, + then you have to switch those Calendar instances by the USE command. + +ASSIGN value variable + + Assigns `value' to `variable'. `value' can be an integer literal, a + variable name or a constant. Examples are: + + assign 2005 $year + assign $result $temp + assign Sun $Microsystems + +ASSIGN value variable IF condition + + Assigns `value' to `variable' if `condition' is true. `condition' is a + relational expression as: + + value1 relOp value2 + + `relOp' must be one of >, >=, ==, !=, <=, <. + +EVAL expression + + Evaluates the given *simple* expression and assigns the expression + value to $result if `op' is one of the arithmetic operators (+, -, *, + /, %). If `op' is one of the relational operators (>, >=, ==, !=, <=, + <), then EVAL throws an exception if the expression value is false, or + does nothing if the value is true. Note that an operator and values + must be separated by white space. + + The following is an example of the ASSIGN and EVAL commands usage to + get the next day of week value. Then, it's used to check the + roll(DAY_OF_WEEK) result. + + get day_of_week + eval $result + 1 + assign $result $nextDayOfWeek + assign Sun $nextDayOfWeek if $nextDayOfWeek > Sat + roll day_of_week 1 + check day_of_week $nextDayOfWeek + +CLEAR ALL + + Clears all the calendar fields of the current Calendar instance by + calling Calendar.clear(). + +CLEAR field + + Clears the specified calendar `field' of the current Calendar instance + by calling Calendar.clear(field).`field' must be one of the Calendar + field indices, ERA, YEAR, MONTH, DAY_OF_MONTH, WEEK_OF_YEAR, etc. + +GET MILLIS + + Gets the millisecond value of the current Calendar instance by calling + Calendar.getTimeInMillis(). The value is assigned to $result. + +GET field + + Gets the `field' value specified of the current Calendar instance by + calling Calendar.get(field). The value is assigned to $result. + +GET MIN field + + Gets the minimum value of the specified `field' of the current + Calendar instance by calling Calendar.getMinimum(field). The value is + assigned to $result. + +GET GREATESTMIN field + + Gets the greatest minimum value of the specified `field' of the + current Calendar instance by calling + Calendar.getGreatestMinimum(field). The value is assigned to $result. + +GET ACTUALMIN field + + Gets the actual minimum value of the specified `field' of the current + Calendar instance by calling Calendar.getActualMinimum(field). The + value is assigned to $result. + +GET MAX field + + Gets the maximum value of the specified `field' of the current + Calendar instance by calling Calendar.getMaximum(field). The value is + assigned to $result. + +GET LEASTMAX field + + Gets the least maximum value of the specified `field' of the current + Calendar instance by calling Calendar.getLeastMaximum(field). The + value is assigned to $result. + +GET ACTUALMAX field + + Gets the actual maximum value of the specified `field' of the current + Calendar instance by calling Calendar.getActualMaximum(field). The + value is assigned to $result. + +GET FIRSTDAYOFWEEK + + Gets the first day of week value of the current Calendar instance by + calling Calendar.getFirstDayOfWeek(). The value is assigned to + $result. + +GET MINIMALDAYSINFIRSTWEEK + + Gets the minimal days in first week value of the current Calendar + instance by calling Calendar.getMinimalDaysInFirstWeek(). The value is + assigned to $result. + +ADD field amount + + Adds `amount' to the specified `field' of the current Calendar + instance by calling Calendar.add(field, amount). + +ROLL field amount + + Rolls `amount' of the specified `field' of the current Calendar + instance by calling Calendar.roll(field, amount). + +SET MILLIS value + + Sets the millisecond value of the current Calendar instance to `value' + by calling Calendar.setTimeInMillis(value). + +SET field value + + Sets the `field' value of the current Calendar instance to `value' by + calling Calendar.set(field, value). + +SET DATE era year month dayOfMonth + + Sets the date of the current Calendar instance to the date specified + by `era', `year', `month' and `dayOfMonth' by calling + Calendar.set(ERA, era) and Calendar.set(year, month, + dayOfMonth). Please note that `month' follows the Calendar convention + and is 0-based. (e.g., JANUARY is 0) + +SET DATE year month dayOfMonth + + Sets the date of the current Calendar instance to the date specified + by `year', `month' and `dayOfMonth' by calling + Calendar.set(year, month, dayOfMont). Please note that `month' + follows the Calendar convention and is 0-based. (e.g., JANUARY is 0) + +SET DATETIME year month dayOfMonth hourOfDay minute second + + Sets the date and time of the current Calendar instance to the date + and time specified by `year', `month', `dayOfMonth', `hourOfDay', + `minute', and `second' by calling Calendar.set(year, month, + dayOfMonth, hourOfDay, minute, second). Please note that `hourOfDay' + is the 24-hour clock. + +SET TIMEOFDAY hourOfDay minute second millisecond + + Sets the date and time of the current Calendar instance to the date + and time specified by `year', `month', `dayOfMonth', `hourOfDay', + `minute', and `second' by calling Calendar.set(HOUR_OF_DAY, + hourOfDay), Calendar.set(MINUTE, minute), and Calendar.set(SECOND, + second). + +SET FIRSTDAYOFWEEK value + + Sets the first day of week value of the current Calendar instance to + `value' by calling Calendar.setFirstDayOfWeek(value). + +SET MINIMALDAYSINFIRSTWEEK value + + Sets the minimal days in the first week value of the current Calendar + instance to `value' by calling Calendar.setMinimalDaysInFirstWeek(value). + +SET LENIENT + + Sets the lenient mode in the current Calendar instance by calling + Calendar.setLenient(true). + +SET NON-LENIENT + + Sets the non-lenient mode in the current Calendar instance by calling + Calendar.setLenient(false). + +CHECK MILLIS value + + Checks if the specified `value' is the same as the millisecond value + of the current Calendar instance given by calling + Calendar.getTimeInMillis(). If the values are different, an exception + is thrown. + +CHECK DATE era year month dayOfMonth + + Checks if the date specified by `era', `year', `month' and + `dayOfMonth' is the same date of the current Calendar instance. The + calendar date is given by calling Calendar.get(ERA), + Calendar.get(YEAR), Calendar.get(MONTH), and + Calendar.get(DAY_OF_MONTH). If the dates are different, an exception + is thrown. + +CHECK DATE year month dayOfMonth + + Checks if the date specified by `year', `month' and `dayOfMonth' is + the same date of the current Calendar instance. The calendar date is + given by calling Calendar.get(YEAR), Calendar.get(MONTH), and + Calendar.get(DAY_OF_MONTH). If the dates are different, an exception + is thrown. + +CHECK DATETIME year month dayOfMonth hourOfDay minute second + + Checks if the date and time specified by `year', `month', + `dayOfMonth', `hourOfDay', `minute', and `second' are the same ones of + the current Calendar instance. The calendar date and time are given by + calling Calendar.get(YEAR), Calendar.get(MONTH), + Calendar.get(DAY_OF_MONTH), Calendar.get(HOUR_OF_DAY), + Calendar.get(MINUTE) and Calendar.get(SECOND). If the dates or times + are different, an exception is thrown. + +CHECK DATETIME year month dayOfMonth hourOfDay minute second millisecond + + Checks if the date and time specified by `year', `month', + `dayOfMonth', `hourOfDay', `minute', `second' and `millisecond' are + the same ones of the current Calendar instance. The calendar date and + time are given by calling Calendar.get(YEAR), Calendar.get(MONTH), + Calendar.get(DAY_OF_MONTH), Calendar.get(HOUR_OF_DAY), + Calendar.get(MINUTE), Calendar.get(SECOND) and + Calendar.get(MILLISECOND). If the dates or times are different, an + exception is thrown. + +CHECK TIMEOFDAY hourOfDay minute second millisecond + + Checks if the time of day specified by `hourOfDay', `minute', `second' + and `millisecond' are the same ones of the current Calendar + instance. The calendar date and time are given by calling + Calendar.get(HOUR_OF_DAY), Calendar.get(MINUTE), Calendar.get(SECOND) + and Calendar.get(MILLISECOND). If the times are different, an + exception is thrown. + +CHECK field value + + Checks if the value of the given `field' of the current Calendar + instance is equal to the given `value'. If it doesn't, an exception is + thrown. + +CHECK MIN field value + + Checks if the minimum value of the specified `field' of the current + Calendar instance is equal to the specified `value'. If not, an + exception is thrown. + +CHECK GREATESTMIN field value + + Checks if the greatest minimum value of the specified `field' of the + current Calendar instance is equal to the specified `value'. If not, + an exception is thrown. + +CHECK ACTUALMIN field value + + Checks if the actual minimum value of the specified `field' of the + current Calendar instance is equal to the specified `value'. If not, + an exception is thrown. + +CHECK MAX field value + + Checks if the maximum value of the specified `field' of the current + Calendar instance is equal to the specified `value'. If not, an + exception is thrown. + +CHECK LEASTMAX field value + + Checks if the least maximum value of the specified `field' of the + current Calendar instance is equal to the specified `value'. If not, + an exception is thrown. + +CHECK ACTUALMAX field value + + Checks if the actual maximum value of the specified `field' of the + current Calendar instance is equal to the specified `value'. If not, + an exception is thrown. + +EXCEPTION exceptionname + + Checks if the previous command threw the specified exception by + `exceptionname'. For example, the following tests invalid date + detection in non-lenient. + + set non-lenient + set date 2005 Feb 29 # 2005 isn't a leap year. + get millis + exception IllegalArgumentException + +PRINT variable + + Prints the value of `variable'. + +PRINT INSTANCE [calendarname] + + Prints the Calendar.toString() value of the current Calendar instance + or the instance given by `calendarname'. + +PRINT field + + Prints the value of the specified `field' of the current Calendar + instance. The value is obtained by calling Calendar.get(field). + +PRINT MILLIS + + Prints the millisecond value of the current Calendar instance. The + value is obtained by calling Calendar.getTimeInMillis(). + +PRINT MIN field + + Prints the minimum value of the specified field by `field' of the + current Calendar instance. The value is obtained by calling + Calendar.getMinimum(field). + +PRINT GREATESTMIN field + + Prints the greatest minimum value of the specified field by `field' of + the current Calendar instance. The value is obtained by calling + Calendar.getGreatestMinimum(field). + +PRINT ACTUALMIN field + + Prints the actual minimum value of the specified field by `field' of + the current Calendar instance by calling + Calendar.getActualMinimum(field). + +PRINT MAX field + + Prints the maximum value of the specified field by `field' of the + current Calendar instance. The value is obtained by calling + Calendar.getMaximum(field). + +PRINT LEASTMAX field + + Prints the least maximum value of the specified field by `field' of + the current Calendar instance. The value is obtained by calling + Calendar.getLeastMaximum(field). + +PRINT ACTUALMAX field + + Prints the actual maximum value of the specified field by `field' of + the current Calendar instance. The value is obtained by calling + Calendar.getActualMaximum(field). + +PRINT DATE + + Prints the date of the current Calendar instance in format + "[ERA] yyyy-MM-dd". The date is obtained by calling Calendar.get(ERA), + Calendar.get(YEAR), Calendar.get(MONTH), and + Calendar.get(DAY_OF_MONTH). + +PRINT DATETIME + + Prints the date and time of the current Calendar instance in an ISO + 8601-style format "[ERA] yyyy-MM-ddTHH:mm:ss.SSS{Z|{+|-}hhmm}". The + date and time are obtained by calling Calendar.get(ERA), + Calendar.get(YEAR), Calendar.get(MONTH), Calendar.get(DAY_OF_MONTH), + Calendar.get(HOUR_OF_DAY), Calendar.get(MINUTE), Calendar.get(SECOND), + Calendar.get(MILLISECOND), Calendar.get(ZONE_OFFSET), and + Calendar.get(DST_OFFSET). + +PRINT TIMEZONE + + Prints the toString() value of the current TimeZone. + +PRINT LOCALE + + Prints the toString() value of the current Locale. + +Usage +----- + +The usage of the test script system at this directory is: + + $ javac -d classes --add-exports java.base/sun.util=ALL-UNNAMED --add-exports java.base/sun.util.calendar=ALL-UNNAMED *.java + $ java -cp classes CalendarTestEngine scriptfiles... + +A script file has suffix ".cts" by convention. If multiple script files +are specified. Those files are sequentially executed as if those are a +single test script. For example, if we have the following script files: + + file1.cts: + locale ja JP JP + timezone Asia/Tokyo + file2.cts: + new instance jcal + new gregorian gcal + test example + use jcal + print datetime + get millis + print $result + use gcal + set millis $result + print datetime + +running CalendarTestEngine with those files will produce: + + $ java -cp classes CalendarTestEngine file1.cts file2.cts + Starting file1.cts... + Completed file1.cts + Starting file2.cts... + Test #1: example + file2.cts:5: Heisei 0017-03-18T20:00:25.402+0900 + file2.cts:7: $result=1111143625402 + file2.cts:10: 2005-03-18T20:00:25.402+0900 + Completed file2.cts + +[end of README]
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/util/Calendar/CalendarTestScripts/Result.java Tue Apr 16 02:48:40 2019 +0100 @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2007, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +public class Result extends Variable { + private Exception e; + private int lineno; + + public Result() { + super("$result", 0); + put("$result", this); + } + + public void setLineno(int lineno) { + this.lineno = lineno; + } + + public int getLineno() { + return lineno; + } + + public void setException(Exception e) { + if (this.e != null) { + throw new RuntimeException("existing exception: " + e, e); + } + this.e = e; + } + + public Exception getException() { + Exception e = this.e; + this.e = null; + return e; + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/util/Calendar/CalendarTestScripts/Symbol.java Tue Apr 16 02:48:40 2019 +0100 @@ -0,0 +1,328 @@ +/* + * Copyright (c) 2007, 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +import java.util.HashMap; +import java.util.Locale; +import java.util.Map; + +import static java.util.Calendar.*; +import static java.util.GregorianCalendar.*; + +public class Symbol { + + private static Map<String, Symbol> symbols; + + String name; + Type type; + int value; + boolean isArithmetic; + + private Symbol(Type type, Integer value) { + this(type, value, false); + } + + private Symbol(Type type) { + this(type, null, false); + } + + private Symbol(Type type, boolean isArithmetic) { + this(type, null, isArithmetic); + } + + private Symbol(Type type, Integer value, boolean isArithmetic) { + this.name = type.toString().toLowerCase(Locale.ROOT); + this.type = type; + if (value != null) + this.value = value; + this.isArithmetic = isArithmetic; + } + + public int value() { + return value; + } + + public String toString() { + return type.name(); + } + + public boolean isArithmetic() { + return isArithmetic; + } + + public static Symbol get(String s) { + return symbols.get(s); + } + + public static enum Type { + // Directives + TEST, + // Commands + LOCALE, TIMEZONE, NEW, USE, ASSIGN, EVAL, + CLEAR, SET, GET, ADD, ROLL, CHECK, PRINT, EXCEPTION, + IF, + // Operands + INSTANCE, GREGORIAN, ALL, MILLIS, DATE, DATETIME, TIMEOFDAY, + LENIENT, NONLENIENT, + MINIMUM, GREATESTMINIMUM, ACTUALMINIMUM, + MAXIMUM, LEASTMAXIMUM, ACTUALMAXIMUM, + FIRSTDAYOFWEEK, MINIMALDAYSINFIRSTWEEK, + // Arithmetic operators + PLUS, MINUS, MULTIPLY, DIVIDE, MOD, + // Relational operators + GT, GE, EQ, NEQ, LE, LT, + // Calendar field indices + FIELD, + // Day of week + DAYOFWEEK, + // Month + MONTH, + // AM/PM + AMPM, + // Era values + ERA; + } + + private static final void put(String key, Symbol sym) { + Symbol s = symbols.put(key, sym); + if (s != null) { + throw new RuntimeException("duplicated key: " + key); + } + } + + static { + symbols = new HashMap<String, Symbol>(); + Symbol sym; + // Directives + put("test", new Symbol(Type.TEST)); + + // Commands + put("locale", new Symbol(Type.LOCALE)); + sym = new Symbol(Type.TIMEZONE); + put("tz", sym); + put("timezone", sym); + put("new", new Symbol(Type.NEW)); + put("use", new Symbol(Type.USE)); + put("assign", new Symbol(Type.ASSIGN)); + put("eval", new Symbol(Type.EVAL)); + put("clear", new Symbol(Type.CLEAR)); + put("set", new Symbol(Type.SET)); + put("get", new Symbol(Type.GET)); + put("add", new Symbol(Type.ADD)); + put("roll", new Symbol(Type.ROLL)); + put("check", new Symbol(Type.CHECK)); + put("print", new Symbol(Type.PRINT)); + put("exception", new Symbol(Type.EXCEPTION)); + put("throw", get("exception")); + put("if", new Symbol(Type.IF)); + + // Operands + put("instance", new Symbol(Type.INSTANCE)); + put("gregorian", new Symbol(Type.GREGORIAN)); + put("all", new Symbol(Type.ALL)); + put("millis", new Symbol(Type.MILLIS)); + put("date", new Symbol(Type.DATE)); + put("datetime", new Symbol(Type.DATETIME)); + put("timeofday", new Symbol(Type.TIMEOFDAY)); + put("lenient", new Symbol(Type.LENIENT)); + sym = new Symbol(Type.NONLENIENT); + put("non-lenient", sym); + put("nonlenient", sym); + put("firstdayofweek", new Symbol(Type.FIRSTDAYOFWEEK)); + put("minimaldaysinfirstweek", new Symbol(Type.MINIMALDAYSINFIRSTWEEK)); + + sym = new Symbol(Type.MINIMUM); + put("minimum", sym); + put("min", sym); + sym = new Symbol(Type.GREATESTMINIMUM); + put("greatestminimum", sym); + put("greatestmin", sym); + sym = new Symbol(Type.ACTUALMINIMUM); + put("actualminimum", sym); + put("actualmin", sym); + sym = new Symbol(Type.MAXIMUM); + put("maximum", sym); + put("max", sym); + sym = new Symbol(Type.LEASTMAXIMUM); + put("leastmaximum", sym); + put("leastmax", sym); + sym = new Symbol(Type.ACTUALMAXIMUM); + put("actualmaximum", sym); + put("actualmax", sym); + + // Arithmetic operators + put("+", new Symbol(Type.PLUS, true)); + put("-", new Symbol(Type.MINUS, true)); + put("*", new Symbol(Type.MULTIPLY, true)); + put("/", new Symbol(Type.DIVIDE, true)); + put("%", new Symbol(Type.MOD, true)); + + // Relational operators + put(">", new Symbol(Type.GT, false)); + put(">=", new Symbol(Type.GE, false)); + put("==", new Symbol(Type.EQ, false)); + put("!=", new Symbol(Type.NEQ, false)); + put("<=", new Symbol(Type.LE, false)); + put("<", new Symbol(Type.LT, false)); + + // Calendar Fields + put("era", new Symbol(Type.FIELD, ERA)); + put("year", new Symbol(Type.FIELD, YEAR)); + put("month", new Symbol(Type.FIELD, MONTH)); + sym = new Symbol(Type.FIELD, WEEK_OF_YEAR); + put("week_of_year", sym); + put("weekofyear", sym); + put("woy", sym); + sym = new Symbol(Type.FIELD, WEEK_OF_MONTH); + put("week_of_month", sym); + put("weekofmonth", sym); + put("wom", sym); + sym = new Symbol(Type.FIELD, DAY_OF_MONTH); + put("day_of_month", sym); + put("dayofmonth", sym); + put("dom", sym); + sym = new Symbol(Type.FIELD, DAY_OF_YEAR); + put("day_of_year", sym); + put("dayofyear", sym); + put("doy", sym); + + sym = new Symbol(Type.FIELD, DAY_OF_WEEK); + put("day_of_week", sym); + put("dayofweek", sym); + put("dow", sym); + sym = new Symbol(Type.FIELD, DAY_OF_WEEK_IN_MONTH); + put("day_of_week_in_month", sym); + put("dayofweekinmonth", sym); + put("dowim", sym); + sym = new Symbol(Type.FIELD, AM_PM); + put("am_pm", sym); + put("ampm", sym); + put("hour", new Symbol(Type.FIELD, HOUR)); + sym = new Symbol(Type.FIELD, HOUR_OF_DAY); + put("hour_of_day", sym); + put("hourofday", sym); + put("hod", sym); + put("minute", new Symbol(Type.FIELD, MINUTE)); + put("second", new Symbol(Type.FIELD, SECOND)); + put("millisecond", new Symbol(Type.FIELD, MILLISECOND)); + sym = new Symbol(Type.FIELD, ZONE_OFFSET); + put("zone_offset", sym); + put("zoneoffset", sym); + put("zo", sym); + sym = new Symbol(Type.FIELD, DST_OFFSET); + put("dst_offset", sym); + put("dstoffset", sym); + put("do", sym); + + // Day of week + sym = new Symbol(Type.DAYOFWEEK, SUNDAY); + put("sunday", sym); + put("sun", sym); + sym = new Symbol(Type.DAYOFWEEK, MONDAY); + put("monday", sym); + put("mon", sym); + sym = new Symbol(Type.DAYOFWEEK, TUESDAY); + put("tuesday", sym); + put("tue", sym); + sym = new Symbol(Type.DAYOFWEEK, WEDNESDAY); + put("wednesday", sym); + put("wed", sym); + sym = new Symbol(Type.DAYOFWEEK, THURSDAY); + put("thursday", sym); + put("thu", sym); + sym = new Symbol(Type.DAYOFWEEK, FRIDAY); + put("friday", sym); + put("fri", sym); + sym = new Symbol(Type.DAYOFWEEK, SATURDAY); + put("saturday", sym); + put("sat", sym); + + + // Month + sym = new Symbol(Type.MONTH, JANUARY); + put("january", sym); + put("jan", sym); + sym = new Symbol(Type.MONTH, FEBRUARY); + put("february", sym); + put("feb", sym); + sym = new Symbol(Type.MONTH, MARCH); + put("march", sym); + put("mar", sym); + sym = new Symbol(Type.MONTH, APRIL); + put("april", sym); + put("apr", sym); + sym = new Symbol(Type.MONTH, MAY); + put("may", sym); + sym = new Symbol(Type.MONTH, JUNE); + put("june", sym); + put("jun", sym); + sym = new Symbol(Type.MONTH, JULY); + put("july", sym); + put("jul", sym); + sym = new Symbol(Type.MONTH, AUGUST); + put("august", sym); + put("aug", sym); + sym = new Symbol(Type.MONTH, SEPTEMBER); + put("september", sym); + put("sep", sym); + sym = new Symbol(Type.MONTH, OCTOBER); + put("octobwe", sym); + put("oct", sym); + sym = new Symbol(Type.MONTH, NOVEMBER); + put("november", sym); + put("nov", sym); + sym = new Symbol(Type.MONTH, DECEMBER); + put("december", sym); + put("dec", sym); + sym = new Symbol(Type.MONTH, UNDECIMBER); + put("undecimber", sym); + + // AM/PM + put("am", new Symbol(Type.AMPM, AM)); + put("pm", new Symbol(Type.AMPM, PM)); + + // Eras + + // Julian eras + sym = new Symbol(Type.ERA, BC); + put("bc", sym); + put("bce", sym); + sym = new Symbol(Type.ERA, AD); + put("ad", sym); + put("ce", sym); + + // Buddhist era + put("be", new Symbol(Type.ERA, 1)); + + // Japanese imperial eras + sym = new Symbol(Type.ERA, 0); + put("before_meiji", sym); + put("beforemeiji", sym); + put("meiji", new Symbol(Type.ERA, 1)); + put("taisho", new Symbol(Type.ERA, 2)); + put("showa", new Symbol(Type.ERA, 3)); + put("heisei", new Symbol(Type.ERA, 4)); + put("reiwa", new Symbol(Type.ERA, 5)); + + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/util/Calendar/CalendarTestScripts/Variable.java Tue Apr 16 02:48:40 2019 +0100 @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2007, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.util.HashMap; +import java.util.Locale; +import java.util.Map; + +public class Variable { + private static Map<String,Variable> vars = new HashMap<String,Variable>(); + + private String name; + private long value; + + Variable(String name, long value) { + this.name = name; + this.value = value; + } + + public String getName() { + return name; + } + + public int intValue() { + if (value > Integer.MAX_VALUE || value < Integer.MIN_VALUE) { + throw new RuntimeException("Overflow/Underflow: " + value); + } + return (int) value; + } + + public long longValue() { + return value; + } + + public void setValue(int v) { value = v; } + public void setValue(long v) { value = v; } + + // static methods + + public static Variable newVar(String name, long value) { + if (name.charAt(0) != '$') { + throw new RuntimeException("wrong var name: " + name); + } + String s = name.toLowerCase(Locale.ROOT); + Variable v = new Variable(name, value); + put(name, v); + return v; + } + + static void put(String s, Variable var) { + vars.put(s, var); + } + + public static Variable get(String name) { + return vars.get(name); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/util/Calendar/CalendarTestScripts/japanese/japanese.cts Tue Apr 16 02:48:40 2019 +0100 @@ -0,0 +1,331 @@ +# +# +# + +locale ja JP JP +new instance jcal +new gregorian gcal + +test Default dates + # Default for all unset fields + # 1970-01-01T00:00:00.000 local time (Gregorian) + # which is equivalent to Showa 45. + use gcal + clear all + get millis + # get the default milliseconds from the Epoch. It's time zone + # dependent. + assign $result $defmillis + use jcal + clear all + get millis + eval $result == $defmillis + check era Showa + check datetime 45 Jan 1 0 0 0 + check millisecond 0 + + # If each era is set, then January 1 of each Gan-nen is the + # default. + clear all + set era BeforeMeiji + check era BeforeMeiji + check datetime 1 Jan 1 0 0 0 + check millisecond 0 + + clear all + set era Meiji + check era Meiji + check datetime 1 Jan 1 0 0 0 + check millisecond 0 + + clear all + set era Taisho + check era Meiji + check datetime 45 Jan 1 0 0 0 + check millisecond 0 + + clear all + set era Showa + check era Taisho + check datetime 15 Jan 1 0 0 0 + check millisecond 0 + + clear all + set era Heisei + check era Showa + check datetime 64 Jan 1 0 0 0 + check millisecond 0 + + clear all + set era Reiwa + check era Heisei + check datetime 31 Jan 1 0 0 0 + check millisecond 0 + +# +# Field resolution tests +# + clear all + get firstdayofweek + # The test cases below assume that the first day of week is + # Sunday. So we should make sure it is. + eval $result == Sun + assign $result $fdow + +test Field resolution: YEAR + MONTH + WEEK_OF_MONTH + DAY_OF_WEEK + set era Showa + set year 64 + set week_of_month 1 + check day_of_week $fdow + check date 64 Jan 1 + + clear all + set era Showa + set year 64 + set week_of_month 1 + set day_of_week Thu + check era Showa + check day_of_week Thu + check date 64 Jan 5 + + clear all + # Heise 1 January and Showa 64 January are the same month. Its + # first week should be the same week. (January is the default + # month.) + set era Heisei + set year 1 + set week_of_month 1 + check day_of_week $fdow + check era Showa + check date 64 Jan 1 + + # Test aggregation + clear all + set date Heisei 17 Mar 16 + set week_of_month 1 + set day_of_week Tue + check date Heisei 17 Mar 1 + + clear all + set week_of_month 1 + set date Heisei 17 Mar 16 + set day_of_week Tue + check date Heisei 17 Mar 1 + + clear all + set day_of_week Tue + set date Heisei 17 Mar 16 + set week_of_month 1 + check date Heisei 17 Mar 1 + + clear all + set day_of_week Tue + set date Heisei 17 Mar 16 + set week_of_year 10 + set week_of_month 1 + check date Heisei 17 Mar 1 + + clear all + set day_of_week Tue + set date Heisei 17 Mar 16 + set day_of_year 300 + set week_of_month 1 + check date Heisei 17 Mar 1 + +test Field resolution: YEAR + MONTH + DAY_OF_WEEK_IN_MONTH + DAY_OF_WEEK + clear all + set era Meiji + set year 45 + set month Jul + set day_of_week_in_month 5 + set day_of_week Mon + check date Meiji 45 Jul 29 + + clear all + set era Meiji + set year 45 + set month Jul + set day_of_week_in_month 4 + check date Meiji 45 Jul 28 + + clear all + set era Meiji + set year 45 + set month Jul + set day_of_week_in_month 5 + set day_of_week Tue + check date Taisho 1 Jul 30 + + clear all + set era Taisho + set year 1 + set month Jul + set day_of_week_in_month 1 + set day_of_week Tue + check date Meiji 45 Jul 2 + + # Test aggregation + clear all + set date Heisei 17 Mar 16 + set day_of_week_in_month 1 + set day_of_week Wed + check date Heisei 17 Mar 2 + + clear all + set day_of_week_in_month 1 + set date Heisei 17 Mar 16 + set day_of_week Wed + check date Heisei 17 Mar 2 + + clear all + set day_of_week Wed + set date Heisei 17 Mar 16 + set day_of_week_in_month 1 + check date Heisei 17 Mar 2 + + clear all + set day_of_week Wed + set date Heisei 17 Mar 16 + set week_of_month 4 + set day_of_week_in_month 1 + check date Heisei 17 Mar 2 + + clear all + set day_of_week Wed + set date Heisei 17 Mar 16 + set day_of_year 365 + set day_of_week_in_month 1 + check date Heisei 17 Mar 2 + + clear all + set day_of_week Wed + set date Heisei 17 Mar 16 + set week_of_year 50 + set day_of_week_in_month 1 + check date Heisei 17 Mar 2 + +test Field resolution: YEAR + DAY_OF_YEAR + clear all + set era Showa + set year 64 + set day_of_year 7 + check date Showa 64 Jan 7 + + clear all + set era Showa + set year 64 + set day_of_year 10 + check date Heisei 1 Jan 10 + + clear all + set era Showa + set year 64 + check date Showa 64 Jan 1 + check day_of_year 1 + + clear all + set era Heisei + set year 1 + set day_of_year 10 + check date Heisei 1 Jan 17 + + clear all + set era Heisei + set year 1 + set day_of_year 1 + check date Heisei 1 Jan 8 + + clear all + set era Heisei + set year 1 + set day_of_year -1 + check date Showa 64 Jan 6 + + clear all + set date Heisei 17 Mar 16 + set day_of_year 31 + check date Heisei 17 Jan 31 + + clear all + set date Heisei 17 Mar 16 + set week_of_year 50 + set day_of_week Wed + set day_of_year 31 + check date Heisei 17 Jan 31 + + clear all + set date Heisei 17 Mar 16 + set week_of_month 5 + set day_of_week Wed + set day_of_year 31 + check date Heisei 17 Jan 31 + +test Field resolution: YEAR + DAY_OF_WEEK + WEEK_OF_YEAR + clear all + set era Showa + set year 64 + set week_of_year 1 + check day_of_week $fdow + check date 64 Jan 1 + + clear all + set era Showa + set year 64 + set week_of_year 1 + set day_of_week Wed + check date Showa 64 Jan 4 + + clear all + set era Heisei + set year 1 + set week_of_year 1 + check day_of_week $fdow + check date 1 Jan 8 + + clear all + set date Heisei 17 Mar 16 + set week_of_year 2 + set day_of_week Thu + check date Heisei 17 Jan 6 + + clear all + set week_of_year 2 + set date Heisei 17 Mar 16 + set day_of_week Thu + check date Heisei 17 Jan 6 + + clear all + set day_of_week Thu + set date Heisei 17 Mar 16 + set week_of_year 2 + check date Heisei 17 Jan 6 + +test zone offsets + # Tests here depend on the GMT offset. + timezone GMT+09:00 + new instance cal0900 + use cal0900 + clear all + set date Heisei 17 Mar 12 + get millis + assign $result $H17Mar12 + clear all + set date Heisei 17 Mar 12 + set zone_offset 0 + get millis + eval $result - 32400000 # -9 hours + eval $result == $H17Mar12 + + clear all + set date Heisei 17 Mar 12 + set zone_offset 28800000 # 8 hours + set dst_offset 3600000 # 1 hour + get millis + eval $result == $H17Mar12 + + clear all + set date Heisei 17 Mar 12 + set zone_offset 18000000 # 5 hours + set dst_offset 14400000 # 4 hours + get millis + eval $result == $H17Mar12
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/util/Calendar/CalendarTestScripts/japanese/japanese_add.cts Tue Apr 16 02:48:40 2019 +0100 @@ -0,0 +1,521 @@ +# +# %i% +# + +# The test cases in this file assume the first day of week is Sunday +# and the minimal days in the first week is 1. + +locale ja JP JP +new instance jcal + +timezone Asia/Tokyo +new instance tokyocal + +set non-lenient + +test add ERA + use jcal + clear all + set date Reiwa 17 Mar 8 + add era 10 + # as of Reiwa 17 March 8 + check era Reiwa + add era -100 + check era BeforeMeiji + +test add HOUR_OF_DAY + use jcal + clear all + set era Heisei + set datetime 1 Jan 8 23 59 59 + add hour_of_day 1 + check datetime 1 Jan 9 0 59 59 + check ampm AM + check hour 0 + add hour_of_day -1 + check datetime 1 Jan 8 23 59 59 + add hour_of_day 24 + check datetime 1 Jan 9 23 59 59 + add hour_of_day -24 + check datetime 1 Jan 8 23 59 59 + +test add HOUR + use jcal + clear all + set era Showa + set datetime 64 Jan 7 11 59 59 + check era Showa + check hour 11 + check ampm AM + add hour 1 + check hour 0 + check ampm PM + check datetime 64 Jan 7 12 59 59 + add hour -1 + check datetime 64 Jan 7 11 59 59 + add hour 240 + check era Heisei + check datetime 1 Jan 17 11 59 59 + add hour -240 + check era Showa + check datetime 64 Jan 7 11 59 59 + + clear all + set era Showa + set datetime 64 Jan 7 23 59 59 + check era Showa + check hour 11 + check ampm PM + add hour 1 + check hour 0 + check ampm AM + check era Heisei + check datetime 1 Jan 8 0 59 59 + add hour -1 + check datetime 64 Jan 7 23 59 59 + add hour 240 + check era Heisei + check datetime 1 Jan 17 23 59 59 + add hour -240 + check era Showa + check datetime 64 Jan 7 23 59 59 + + clear all + set era Heisei + set datetime 1 Jan 8 23 59 59 + check date Heisei 1 Jan 8 + check hour 11 + check ampm PM + add hour 1 + check hour 0 + check ampm AM + check era Heisei + check datetime 1 Jan 9 0 59 59 + add hour -1 + check datetime 1 Jan 8 23 59 59 + add hour 240 + check datetime 1 Jan 18 23 59 59 + add hour -240 + check datetime 1 Jan 8 23 59 59 + +test add YEAR + use jcal + clear all + # check if pinDayOfMonth works correctly. + # Heisei 12 (Y2K) is a leap year. + set date Heisei 12 Feb 29 + add year 5 + check date Heisei 17 Feb 28 + add year -5 + check date Heisei 12 Feb 28 # not 29! + + clear all + set date BeforeMeiji 1867 Jan 1 + add year 1 + check date Meiji 1 Jan 1 + add year -1 + check date BeforeMeiji 1867 Jan 1 + + clear all + set date Meiji 45 Jul 29 + add year 1 + check date Taisho 2 Jul 29 + add year -1 + check date Meiji 45 Jul 29 + + clear all + set date Meiji 44 Jul 30 + add year 1 + check date Taisho 1 Jul 30 + add year -1 + check date Meiji 44 Jul 30 + + clear all + set date Taisho 15 Aug 1 + add year 1 + check date Showa 2 Aug 1 + add year -1 + check date Taisho 15 Aug 1 + + clear all + set date Taisho 14 Dec 31 + add year 1 + check date Showa 1 Dec 31 + add year -1 + check date Taisho 14 Dec 31 + + clear all + set date Showa 63 Feb 1 + add year 1 + check date Heisei 1 Feb 1 + add year -1 + check date Showa 63 Feb 1 + + set date Showa 63 Dec 30 + add year 1 + check date Heisei 1 Dec 30 + add year -1 + check date Showa 63 Dec 30 + + set date Showa 64 Jan 7 + add year 1 + check date Heisei 2 Jan 7 + add year -1 + check date Showa 64 Jan 7 + + set date Heisei 2 Jan 7 + add year -1 + check date Showa 64 Jan 7 + add year 1 + check date Heisei 2 Jan 7 + +test add MONTH + clear all + # Check pinDayOfMonth works correctly. + # Heisei 12 is a leap year. + set date Heisei 12 Jan 31 + add month 1 + check date Heisei 12 Feb 29 + add month -1 + check date Heisei 12 Jan 29 + + # Another leap year + set date Showa 63 Jan 31 + add month 1 + check date Showa 63 Feb 29 + add month -1 + check date Showa 63 Jan 29 + + # Non leap year + set date Heisei 15 Jan 31 + add month 1 + check date Heisei 15 Feb 28 + add month -1 + check date Heisei 15 Jan 28 + + set date Heisei 15 Mar 31 + add month 1 + check date Heisei 15 Apr 30 + add month -1 + check date Heisei 15 Mar 30 + + set date Heisei 15 May 31 + add month 1 + check date Heisei 15 Jun 30 + add month -1 + check date Heisei 15 May 30 + + set date Heisei 15 Aug 31 + add month 1 + check date Heisei 15 Sep 30 + add month -1 + check date Heisei 15 Aug 30 + + set date Heisei 15 Oct 31 + add month 1 + check date Heisei 15 Nov 30 + add month -1 + check date Heisei 15 Oct 30 + + set date Heisei 15 Dec 31 + add month -1 + check date Heisei 15 Nov 30 + add month 1 + check date Heisei 15 Dec 30 + + set date Heisei 15 Dec 31 + add month 2 + check date Heisei 16 Feb 29 + add month -1 + check date Heisei 16 Jan 29 + + # end of pinDayOfMonth tests + + set date BeforeMeiji 1867 Dec 1 + add month 1 + check date Meiji 1 Jan 1 + add month -1 + check date BeforeMeiji 1867 Dec 1 + add month 14 + check date Meiji 2 Feb 1 + add month -14 + check date BeforeMeiji 1867 Dec 1 + + set date Meiji 1 Dec 1 + add month 1 + check date Meiji 2 Jan 1 + add month -1 + check date Meiji 1 Dec 1 + add month 13 + check date Meiji 3 Jan 1 + add month -13 + check date Meiji 1 Dec 1 + + set date Meiji 45 Jun 30 + add month 1 + check date Taisho 1 Jul 30 + add month -1 + check date Meiji 45 Jun 30 + + set date Meiji 45 Jun 30 + add month 14 + check date Taisho 2 Aug 30 + add month -14 + check date Meiji 45 Jun 30 + + # Taisho Gan-nen (year 1) has only 6 months. + set date Taisho 1 Jul 30 + add month -1 + check date Meiji 45 Jun 30 + add month 1 + check date Taisho 1 Jul 30 + add month -18 + check date Meiji 44 Jan 30 + add month 18 + check date Taisho 1 Jul 30 + + set date Taisho 15 Jan 20 + add month 11 + check date Taisho 15 Dec 20 + + set date Taisho 15 Jan 25 + add month 11 + check date Showa 1 Dec 25 + + set date Showa 1 Dec 25 + add month 1 + check date Showa 2 Jan 25 + add month -1 + check date Showa 1 Dec 25 + add month 17 + check date Showa 3 May 25 + add month -17 + check date Showa 1 Dec 25 + + set date Showa 64 Jan 7 + add month 1 + check date Heisei 1 Feb 7 + + set date Heisei 1 Feb 1 + add month -1 + # Heisei starts from Jan 8. + check date Showa 64 Jan 1 + add month 1 + check date Heisei 1 Feb 1 + + set date Heisei 1 Feb 8 + add month -1 + check date Heisei 1 Jan 8 + + set date Heisei 1 Dec 1 + add month 1 + check date Heisei 2 Jan 1 + add month -1 + check date Heisei 1 Dec 1 + + set date Heisei 1 Dec 8 + add month 1 + check date Heisei 2 Jan 8 + add month -1 + check date Heisei 1 Dec 8 + + # time zone dependent tests + use tokyocal + clear all + + set date BeforeMeiji 1 Jan 1 + get min year + assign $result $minyear + # actual min date: -292275055.05.17T01:47:04.192+0900 + + set date BeforeMeiji $minyear Dec 17 + set timeofday 1 47 4 192 + add month -7 + check date BeforeMeiji $minyear May 17 + check timeofday 1 47 4 192 + add month 7 + check date BeforeMeiji $minyear Dec 17 + check timeofday 1 47 4 192 + set date BeforeMeiji $minyear Dec 17 + set timeofday 1 47 4 191 + add month -7 + check date BeforeMeiji $minyear May 18 + check timeofday 1 47 4 191 + + set date Reiwa 17 Jan 1 + get max year + assign $result $max + set date Reiwa $max Jul 17 + add month 1 + check date Reiwa $max Aug 17 +# set date Heisei $max Jul 28 +# set timeofday 23 59 59 999 +# add month 1 +# check date Heisei $max Aug 16 +# check timeofday 23 59 59 999 + +test add WEEK_OF_YEAR + use jcal + clear all + # 1867 Dec 23 is Monday. + set date BeforeMeiji 1867 Dec 23 + add week_of_year 2 + check day_of_week Mon + check date Meiji 1 Jan 6 + add week_of_year -2 + check day_of_week Mon + check date BeforeMeiji 1867 Dec 23 + + # 1867 Dec 23 is Wednesday. + set date Meiji 1 Dec 23 + add week_of_year 2 + check day_of_week Wed + check date Meiji 2 Jan 6 + add week_of_year -2 + check day_of_week Wed + check date Meiji 1 Dec 23 + + # Meiji 45 July 23 is Tuesday. + set date Meiji 45 Jul 23 + add week_of_year 1 + check day_of_week Tue + check date Taisho 1 Jul 30 + add week_of_year -1 + check day_of_week Tue + check date Meiji 45 Jul 23 + + # Taisho 15 December 23 is Thursday. + set date Taisho 15 Dec 23 + add week_of_year 1 + check day_of_week Thu + check date Showa 1 Dec 30 + add week_of_year -1 + check day_of_week Thu + check date Taisho 15 Dec 23 + + # Showa Gan-nen December 30 is Thursday. Showa Gan-nen has + # only one week. Rolling any number of weeks brings to the + # same date. + set date Showa 1 Dec 30 + add week_of_year 1 + check day_of_week Thu + check date Showa 2 Jan 6 + add week_of_year -1 + check day_of_week Thu + check date Showa 1 Dec 30 + + # Showa 64 January 7 is Saturday. The year has only one week. + set date Showa 64 Jan 7 + add week_of_year 1 + check day_of_week Sat + check date Heisei 1 Jan 14 + add week_of_year -1 + check day_of_week Sat + check date Showa 64 Jan 7 + + use tokyocal + clear all + + set date BeforeMeiji $minyear Dec 25 + check day_of_week Sat + eval $minyear + 1 + assign $result $minyear_plus_1 + add week_of_year 1 + check day_of_week Sat + check date BeforeMeiji $minyear_plus_1 Jan 1 + add week_of_year -1 + check day_of_week Sat + check date BeforeMeiji $minyear Dec 25 + +test WEEK_OF_MONTH + use jcal + clear all + +test DAY_OF_MONTH + use jcal + clear all + +test DAY_OF_YEAR + use jcal + clear all + + # 1867 is a regular Gregorian year. + set date BeforeMeiji 1867 Dec 31 + add day_of_year 1 + check date Meiji 1 Jan 1 + add day_of_year -1 + check date BeforeMeiji 1867 Dec 31 + add day_of_year 26 + check date Meiji 1 Jan 26 + add day_of_year -26 + check date BeforeMeiji 1867 Dec 31 + + # Meiji 1 starts from Jan 1. It's a regular year as well. + set date Meiji 1 Dec 31 + add day_of_year 1 + check date Meiji 2 Jan 1 + add day_of_year -1 + check date Meiji 1 Dec 31 + add day_of_year 26 + check date Meiji 2 Jan 26 + add day_of_year -26 + check date Meiji 1 Dec 31 + + # The last year of Meiji (45) has an irregularity. Meiji 45 + # July 30 is actually Taisho 1 July 30. + set date Meiji 45 Jul 29 + add day_of_year 1 + check date Taisho 1 Jul 30 + add day_of_year -1 + check date Meiji 45 Jul 29 + + # The first day of Taisho, July 30. + set date Taisho 1 Jul 30 + add day_of_year -1 + check date Meiji 45 Jul 29 + add day_of_year 1 + check date Taisho 1 Jul 30 + + set date Taisho 15 Dec 24 + add day_of_year 1 + check date Showa 1 Dec 25 + add day_of_year -1 + check date Taisho 15 Dec 24 + + set date Showa 1 Dec 31 + add day_of_year 1 + check date Showa 2 Jan 1 + add day_of_year -1 + check date Showa 1 Dec 31 + add day_of_year 25 + check date Showa 2 Jan 25 + add day_of_year -25 + check date Showa 1 Dec 31 + + set date Showa 64 Jan 7 + add day_of_year 1 + check date Heisei 1 Jan 8 + add day_of_year -1 + check date Showa 64 Jan 7 + + set date Heisei 1 Dec 31 + add day_of_year 5 + check date Heisei 2 Jan 5 + add day_of_year -5 + check date Heisei 1 Dec 31 + + use tokyocal + clear all + + set date BeforeMeiji $minyear Dec 31 + set timeofday 1 47 4 192 + add day_of_year 1 + check date BeforeMeiji $minyear_plus_1 Jan 1 + check timeofday 1 47 4 192 + add day_of_year -1 + check date BeforeMeiji $minyear Dec 31 + check timeofday 1 47 4 192 + +test DAY_OF_WEEK_IN_MONTH + use jcal + clear all
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/util/Calendar/CalendarTestScripts/japanese/japanese_exceptions.cts Tue Apr 16 02:48:40 2019 +0100 @@ -0,0 +1,204 @@ +# +# +# + +locale ja JP JP + +# Use jcal in non-lenient mode for all test cases. +set non-lenient +new instance jcal + +use jcal +clear all + +test Invalid BeforeMeiji dates + set date BeforeMeiji 1868 Jan 1 + get millis + exception IllegalArgumentException + set date BeforeMeiji 1868 Jan 32 + get millis + exception IllegalArgumentException + set date BeforeMeiji 2005 Mar 9 + get millis + exception IllegalArgumentException + +test Invalid Meiji dates + set date Meiji -1 Jan 1 + get millis + exception IllegalArgumentException + set date Meiji 1 Feb 30 + get millis + exception IllegalArgumentException + set date Meiji 45 Jul 30 + get millis + exception IllegalArgumentException + set date Meiji 46 Jan 1 + get millis + exception IllegalArgumentException + +test Invalid Taisho dates + set date Taisho -1 Jan 1 + get millis + exception IllegalArgumentException + set date Taisho 1 Jan 1 + get millis + exception IllegalArgumentException + set date Taisho 1 Apr 1 + get millis + exception IllegalArgumentException + set date Taisho 15 Dec 30 + get millis + exception IllegalArgumentException + set date Taisho 15 Feb 29 + get millis + exception IllegalArgumentException + +test Invalid Showa dates + set date Showa -11 Jan 1 + get millis + exception IllegalArgumentException + set date Showa 1 Jan 1 + get millis + exception IllegalArgumentException + set date Showa 1 Jun 1 + get millis + exception IllegalArgumentException + set date Showa 1 Jul 29 + get millis + exception IllegalArgumentException + set date Showa 64 Jan 8 + get millis + exception IllegalArgumentException + set date Showa 64 Dec 8 + get millis + exception IllegalArgumentException + set date Showa 65 Jan 1 + get millis + exception IllegalArgumentException + +test Invalid Heisei dates + clear all + set date Heisei -1 Jan 1 + get millis + exception IllegalArgumentException + set date Heisei 1 Jan 1 + get millis + exception IllegalArgumentException + set date Heisei 1 Jan 7 + get millis + exception IllegalArgumentException + set date Heisei 1 Jan 8 + get max year + eval $result + 1 + set date Heisei $result Jan 1 + get millis + exception IllegalArgumentException + +test Invalid ERA + get max era + eval $result + 1 + set era $result # max era + 1 + get era + exception IllegalArgumentException + set era 100 + get era + exception IllegalArgumentException + set era -100 + get era + exception IllegalArgumentException + +test Invalid HOUR_OF_DAY + clear all + set date Heisei 17 Mar 14 + set hour_of_day 25 + get millis + exception IllegalArgumentException + set hour_of_day -9 + get millis + exception IllegalArgumentException + +test Invalid AMPM + clear all + set date Heisei 17 Mar 14 + set ampm -1 + set hour 1 + get millis + exception IllegalArgumentException + set ampm 5 + set hour 1 + get millis + exception IllegalArgumentException + +test Invalid HOUR + clear all + set date Heisei 17 Mar 14 + set ampm AM + set hour 13 + get millis + exception IllegalArgumentException + set ampm PM + set hour -1 + get millis + exception IllegalArgumentException + +test Invalid MINUTE + clear all + set date Heisei 17 Mar 14 + set minute 61 + get millis + exception IllegalArgumentException + set minute -2 + get millis + exception IllegalArgumentException + +test Invalid SECOND + clear all + set date Heisei 17 Mar 14 + set second 61 + get millis + exception IllegalArgumentException + set second -2 + get millis + exception IllegalArgumentException + +test Invalid MILLISECOND + clear all + set date Heisei 17 Mar 14 + set millisecond 1000 + get millis + exception IllegalArgumentException + set millisecond -2 + get millis + exception IllegalArgumentException + +test Invalid ZONE_OFFSET + clear all + set date Heisei 17 Mar 14 + set zone_offset -360000000 + get millis + exception IllegalArgumentException + set zone_offset -360000000 + get year + exception IllegalArgumentException + set zone_offset 360000000 + get millis + exception IllegalArgumentException + set zone_offset 360000000 + get year + exception IllegalArgumentException + +test Invalid DST_OFFSET + clear all + set date Heisei 17 Mar 14 + set dst_offset -360000000 + get millis + exception IllegalArgumentException + set dst_offset -360000000 + get year + exception IllegalArgumentException + set dst_offset 360000000 + get millis + exception IllegalArgumentException + set dst_offset 360000000 + get year + exception IllegalArgumentException
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/util/Calendar/CalendarTestScripts/japanese/japanese_minmax.cts Tue Apr 16 02:48:40 2019 +0100 @@ -0,0 +1,336 @@ +# +# +# + +locale ja JP JP +new instance jcal +new gregorian gcal + +# Use GMT+09:00 for max day of year test which depends on time zone +# offsets. + +timezone GMT+09:00 +new instance tokyocal + +test Make sure that the maximum year value doesn't depent on era + use jcal + # Note: the max year value is as of Reiwa + assign 292276976 $max + clear all + set date Reiwa 1 May 1 + get millis + check max year $max + assign $max $maxyear + + clear all + set date Heisei 20 May 5 + get millis + check max year $maxyear + + clear all + set date Showa 35 May 5 + get millis + check max year $maxyear + + clear all + set date BeforeMeiji 1 Jun 1 + get millis + check max year $max + +test Max of ERA + use jcal + # Assumption: Reiwa is the current era + check maximum era Reiwa + check leastmax era Reiwa + +test Actual max MONTH + use jcal + clear all + set date BeforeMeiji 1867 Jan 31 + check actualmax month Dec + # Make sure that the same value is returned after + # normalization. + get millis + check actualmax month Dec + + clear all + set date Meiji 45 Mar 31 + check actualmax month Jul + get millis + check actualmax month Jul + + clear all + set date Taisho 15 June 1 + check actualmax month Dec + get millis + check actualmax month Dec + + clear all + set date Showa 64 Jan 4 + check actualmax month Jan + get millis + check actualmax month Jan + + clear all + set date Heisei 31 Jan 4 + check actualmax month Apr + get millis + check actualmax month Apr + + clear all + set date Reiwa 2 Jan 1 + set year $maxyear + check actualmax month Aug + get millis + check actualmax month Aug + + clear all + set date 17 Mar 1 + check actualmax month Dec + get millis + check actualmax month Dec + +test Actual max DAY_OF_YEAR + use jcal + clear all + set date Meiji 1 Dec 31 + # Meiji Gan-nen is a leap year. + check actualmax day_of_year 366 + check day_of_year 366 + + clear all + set date Meiji 45 Jan 1 + # Meiji 45 or Taishi Gan-nen is also a leap year. + check actualmax day_of_year 211 # 31+29+31+30+31+30+29 + set date Meiji 45 Jul 29 + check day_of_year 211 + set date Taisho 1 Jul 31 + get millis + check actualmax day_of_year 155 # 366 - 211 + set date Taisho 1 Dec 31 + check day_of_year 155 + + clear all + set date Taisho 15 Sep 23 + check actualmax day_of_year 358 # 365 - 7 + set date Taisho 15 Dec 24 + check day_of_year 358 + set date Showa 1 Dec 25 + check actualmax day_of_year 7 + set date Showa 1 Dec 31 + check day_of_year 7 + + clear all + set date Showa 64 Jan 3 + check actualmax day_of_year 7 + set date Showa 64 Jan 7 + check day_of_year 7 + set date Heisei 1 Aug 9 + check actualmax day_of_year 358 # 365 - 7 + set date Heisei 1 Dec 31 + check day_of_year 358 + + # time zone dependent + use tokyocal + clear all + set date Reiwa $maxyear Jan 1 + # the last date of Reiwa is R292276976.08.17T16:12:55.807+0900 + check actualmax day_of_year 229 # 31+28+31+30+31+30+31+17 + +test Actual max WEEK_OF_YEAR + use jcal + clear all + set date Meiji 1 Jan 1 + # Meiji gan-nen is a leap year. + check actualmax week_of_year 52 + + clear all + set date Meiji 45 Jan 1 + check actualmax week_of_year 30 + set date Taisho 1 July 31 + check actualmax week_of_year 22 + + clear all + set date Taisho 15 Sep 23 + check actualmax week_of_year 51 + set date Showa 1 Dec 25 + check actualmax week_of_year 1 + + clear all + set date Showa 64 Jan 3 + check actualmax week_of_year 1 + set date Heisei 1 Aug 9 + check actualmax week_of_year 51 + + clear all + set date Heisei 31 Apr 28 + check actualmax week_of_year 17 + set date Reiwa 1 Aug 9 + check actualmax week_of_year 35 + + use tokyocal + set date Reiwa $maxyear Jan 1 + # the last date of Reiwa is R292276976.08.17T16:12:55.807+0900 (Sunday) + # The year is equivalent to 2003 (Gregorian). + check actualmax week_of_year 34 + +test Actual max WEEK_OF_MONTH + use jcal + clear all + set date Meiji 45 Jul 1 + check actualmax week_of_month 5 + set date Taisho 1 Jul 31 + check actualmax week_of_month 5 + + clear all + set date Taisho 15 Dec 1 + check actualmax week_of_month 5 + set date Showa 1 Dec 25 + check actualmax week_of_month 5 + + clear all + set date Showa 64 Jan 1 + check actualmax week_of_month 5 + set date Heisei 1 Jan 8 + check actualmax week_of_month 5 + + clear all + set date Heisei 31 Apr 30 + check actualmax week_of_month 5 + set date Reiwa 1 May 1 + check actualmax week_of_month 5 + + use tokyocal + set date Reiwa $maxyear Jan 1 + # the last date of Reiwa is R292276976.08.17T16:12:55.807+0900 (Sunday) + # The year is equivalent to 2003 (Gregorian). + check actualmax week_of_month 4 + +test Actual max DAY_OF_WEEK_IN_MONTH + use jcal + clear all + set date Meiji 45 Jul 1 + check actualmax week_of_month 5 + set date Taisho 1 Jul 31 + check actualmax week_of_month 5 + + clear all + set date Taisho 15 Dec 1 + check actualmax week_of_month 5 + set date Showa 1 Dec 25 + check actualmax week_of_month 5 + + clear all + set date Showa 64 Jan 1 + check actualmax week_of_month 5 + set date Heisei 1 Jan 8 + check actualmax week_of_month 5 + + clear all + set date Heisei 31 Apr 30 + check actualmax week_of_month 5 + set date Reiwa 1 May 1 + check actualmax week_of_month 5 + + use tokyocal + clear all + set date Reiwa $maxyear Jan 1 + # the last date of Reiwa is R292276976.08.17T16:12:55.807+0900 (Sunday) + # The year is equivalent to 2003 (Gregorian). + check actualmax week_of_month 4 + +test Actual max YEAR + use jcal + clear all + set date BeforeMeiji 1 Jan 1 + check actualmax year 1867 + + set date Meiji 1 Jan 1 + check actualmax year 45 + + set date Meiji 1 Jul 30 + check actualmax year 44 + + set date Taisho 1 Jul 30 + check actualmax year 15 + + set date Taisho 1 Dec 25 + check actualmax year 14 + + set date Showa 2 Jan 1 + check actualmax year 64 + + set date Showa 1 Dec 25 + check actualmax year 63 + + set date Heisei 1 Jan 7 + check actualmax year 64 + + set date Heisei 1 Aug 18 + check actualmax year 30 + + set date Reiwa 1 Apr 30 + check actualmax year 31 + + # Date/time beyond the last date in the max year. + set date Reiwa 1 Aug 18 + check actualmax year 292276975 + +test Least max YEAR + set date Heisei 17 Mar 1 + # Taisho is the shortest era, 14 years. + # (See above actual max YEAR case.) + check leastmax year 14 + +test Acutual min YEAR + # Get minimum values for comparison + clear all + set era BeforeMeiji + get min year + assign $result $minyear + set date $minyear Dec 31 + eval $minyear + 1 + assign $result $minyear_plus_one + + # BeforeMeiji 1 Dec 31 should exist in the minimum year which + # should be the same value as the getMinimum() value. + set date BeforeMeiji 1 Dec 31 + check actualmin year $minyear + + # Jan 1 shouldn't exist in the same year. So the actual minimum is + # $minyear + 1. + set date 1 Jan 1 + check actualmin year $minyear_plus_one + + # 1 should be returned if it's on a date of the last + # year which also exists in the first year of each era. + clear all + set date Meiji 45 Jan 1 + check actualmin year 1 + + clear all + set date Taisho 14 Jul 30 + check actualmin year 1 + + clear all + set date Showa 60 Dec 25 + check actualmin year 1 + + clear all + set date Heisei 17 Jan 8 + check actualmin year 1 + + # 2 should be returned if it's on a date of the last year which + # doesn't exist in the first year of each era. (Meiji is an + # exception.) + clear all + set date Taisho 14 Jul 29 + check actualmin year 2 + + clear all + set date Showa 60 Dec 23 + check actualmin year 2 + + clear all + set date Heisei 17 Jan 7 + check actualmin year 2
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/util/Calendar/CalendarTestScripts/japanese/japanese_normalization.cts Tue Apr 16 02:48:40 2019 +0100 @@ -0,0 +1,97 @@ +# +# +# + +locale ja JP JP +tz Asia/Tokyo +new instance jcal +new gregorian gcal + +test Normalize year 0 and -1 (Showa) + use jcal + clear all + set date Showa 1 Jan 1 + check date Taisho 15 Jan 1 + + clear all + set date Showa 0 Jan 1 + check era Taisho + check date 14 Jan 1 + + clear all + set date Showa -1 Jan 1 + check era Taisho + check date 13 Jan 1 + +test Normalize year max and max+1 (Showa) + clear all + set date Showa 64 Aug 9 + check date Heisei 1 Aug 9 + + clear all + set date Showa 65 Aug 9 + check date Heisei 2 Aug 9 + +test Normalize year 0 and -1 (Heisei) + use jcal + clear all + set date Heisei 1 Jan 1 + check date Showa 64 Jan 1 + + clear all + set date Heisei 0 Jan 1 + check date Showa 63 Jan 1 + + clear all + set date Heisei -1 Jan 1 + check date Showa 62 Jan 1 + +test Normalize year max and max+1 (Taisho) + clear all + set date Taisho 15 Dec 25 + check date Showa 1 Dec 25 + + clear all + set date Taisho 16 Dec 25 + check date Showa 2 Dec 25 + +test Normalize day of month 0 and -1 (Heisei) + use jcal + clear all + set date Heisei 1 Jan 1 + check date Showa 64 Jan 1 + + clear all + set date Heisei 1 Jan 0 + check date Showa 63 Dec 31 + + clear all + set date Heisei 1 Jan -1 + check date Showa 63 Dec 30 + +test Normalize hour of day -1:00 (Heisei) + clear all + set era Heisei + set datetime 1 Jan 1 0 0 0 + check era Showa + check datetime 64 Jan 1 0 0 0 + + clear all + set era Heisei + set datetime 1 Jan 1 -1 0 0 + check era Showa + check datetime 63 Dec 31 23 0 0 + +test Normalize hour of day 25:00 (Taisho) + clear all + set era Taisho + set datetime 15 Dec 25 25 0 0 + check era Showa + check datetime 1 Dec 26 1 0 0 + +test Normalize hour of day 25:00 (Showa) + clear all + set era Showa + set datetime 64 Jan 7 25 0 0 + check era Heisei + check datetime 1 Jan 8 1 0 0
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/util/Calendar/CalendarTestScripts/japanese/japanese_roll.cts Tue Apr 16 02:48:40 2019 +0100 @@ -0,0 +1,556 @@ +# +# +# + +# The test cases in this file assume that the first day of week is Sunday +# and the minimal days in the first week is 1. + +locale ja JP JP +new instance jcal + +timezone Asia/Tokyo +new instance tokyocal + +test roll HOUR_OF_DAY + use jcal + clear all + set era Heisei + set datetime 1 Jan 8 23 59 59 + roll hour_of_day 1 + check datetime 1 Jan 8 0 59 59 + check ampm AM + check hour 0 + roll hour_of_day -1 + check datetime 1 Jan 8 23 59 59 + roll hour_of_day 240 + check datetime 1 Jan 8 23 59 59 + roll hour_of_day -240 + check datetime 1 Jan 8 23 59 59 + +test roll HOUR + use jcal + clear all + set era Showa + set datetime 64 Jan 7 11 59 59 + get ampm + check era Showa + check hour 11 + check ampm AM + roll hour 1 + check hour 0 + check ampm AM + check datetime 64 Jan 7 0 59 59 + roll hour -1 + check datetime 64 Jan 7 11 59 59 + roll hour 240 + check datetime 64 Jan 7 11 59 59 + roll hour -240 + check datetime 64 Jan 7 11 59 59 + + clear all + set era Showa + set datetime 64 Jan 7 23 59 59 + get ampm + check era Showa + check hour 11 + check ampm PM + roll hour 1 + check hour 0 + check ampm PM + check datetime 64 Jan 7 12 59 59 + roll hour -1 + check datetime 64 Jan 7 23 59 59 + roll hour 240 + check datetime 64 Jan 7 23 59 59 + roll hour -240 + check datetime 64 Jan 7 23 59 59 + + clear all + set era Heisei + set datetime 1 Jan 8 23 59 59 + get ampm + check hour 11 + check ampm PM + roll hour 1 + check hour 0 + check ampm PM + check datetime 1 Jan 8 12 59 59 + roll hour -1 + check datetime 1 Jan 8 23 59 59 + roll hour 240 + check datetime 1 Jan 8 23 59 59 + roll hour -240 + check datetime 1 Jan 8 23 59 59 + +test roll YEAR + clear all + set date BeforeMeiji 1867 Jan 1 + get actualmin year + # roll to the min year value of Gregorian (not Julian) + roll year 1 + check date BeforeMeiji $result Jan 1 + roll year -1 + check date BeforeMeiji 1867 Jan 1 + + clear all + set date Meiji 45 Jul 29 + roll year 1 + check date Meiji 1 Jul 29 + roll year -1 + check date Meiji 45 Jul 29 + + clear all + set date Meiji 44 Jul 30 + roll year 1 + check date Meiji 1 Jul 30 + roll year -1 + check date Meiji 44 Jul 30 + + clear all + set date Taisho 15 Aug 1 + roll year 1 + check date Taisho 1 Aug 1 + roll year -1 + check date Taisho 15 Aug 1 + + clear all + set date Taisho 14 Dec 31 + roll year 1 + check date Taisho 1 Dec 31 + roll year -1 + check date Taisho 14 Dec 31 + + clear all + set date Showa 63 Feb 1 + # Neither 64 Feb 1 nor 1 Feb 1 exists in Showa. + roll year 1 + check date Showa 2 Feb 1 + roll year -1 + check date Showa 63 Feb 1 + + set date Showa 63 Dec 30 + roll year 1 + # Showa 1 Dec 30 exists. + check date Showa 1 Dec 30 + roll year -1 + check date Showa 63 Dec 30 + + set date Showa 64 Jan 7 + roll year 1 + check date Showa 2 Jan 7 + roll year -1 + check date Showa 64 Jan 7 + + set date Heisei 31 Apr 30 + roll year 1 + check date Heisei 1 Apr 30 + roll year -1 + check date Heisei 31 Apr 30 + + set date Reiwa 2 Apr 30 + get max year + assign $result $hmax + roll year -1 + check date Reiwa $hmax Apr 30 + roll year 1 + check date Reiwa 2 Apr 30 + +test roll MONTH + set date BeforeMeiji 1867 Dec 1 + roll month 1 + check date BeforeMeiji 1867 Jan 1 + roll month -1 + check date BeforeMeiji 1867 Dec 1 + roll month 14 + check date BeforeMeiji 1867 Feb 1 + roll month -14 + check date BeforeMeiji 1867 Dec 1 + + set date Meiji 1 Dec 1 + roll month 1 + check date Meiji 1 Jan 1 + roll month -1 + check date Meiji 1 Dec 1 + roll month 13 + check date Meiji 1 Jan 1 + roll month -13 + check date Meiji 1 Dec 1 + + set date Meiji 45 Jun 30 + roll month 1 + # Meiji 45 Jun 30 is actually Taisho 1 Jun 30. By the rule of + # roll() that year can't be changed, the day of month value + # has to be changed ("pin date to month"). + check date Meiji 45 Jul 29 + roll month -1 + # doesn't roll back to Jun 30, but to Jun 29. + check date Meiji 45 Jun 29 + + set date Meiji 45 Jun 30 + # Meiji 45 (year) has only 7 months. rolling 14 months must + # bring the given date to the same date. + roll month 14 + check date Meiji 45 Jun 30 + roll month -14 + check date Meiji 45 Jun 30 + + # Taisho Gan-nen (year 1) has only 6 months. + set date Taisho 1 Jul 30 + roll month -1 + check date Taisho 1 Dec 30 + roll month 1 + check date Taisho 1 Jul 30 + roll month -18 + check date Taisho 1 Jul 30 + roll month 18 + check date Taisho 1 Jul 30 + + set date Taisho 15 Jan 20 + roll month 11 + check date Taisho 15 Dec 20 + + set date Taisho 15 Jan 25 + roll month 11 + # Taisho 15 Dec 25 is actually Showa 1 Dec 25. Day of month is + # adjusted to the last day of month. ("pin date to month") + check date Taisho 15 Dec 24 + + set date Showa 1 Dec 25 + roll month 1 + check date Showa 1 Dec 25 + roll month -1 + check date Showa 1 Dec 25 + roll month 17 + check date Showa 1 Dec 25 + roll month -17 + check date Showa 1 Dec 25 + + set date Showa 64 Jan 7 + roll month 1 + check date Showa 64 Jan 7 + + set date Heisei 1 Feb 1 + roll month -1 + # Heisei starts from Jan 8. + check date Heisei 1 Jan 8 + roll month 1 + check date Heisei 1 Feb 8 + + set date Heisei 1 Feb 8 + roll month -1 + check date Heisei 1 Jan 8 + + set date Heisei 1 Dec 1 + roll month 1 + check date Heisei 1 Jan 8 + roll month -1 + check date Heisei 1 Dec 8 + + set date Heisei 1 Dec 8 + roll month 1 + check date Heisei 1 Jan 8 + roll month -1 + check date Heisei 1 Dec 8 + + # time zone dependent tests + use tokyocal + clear all + + set date BeforeMeiji 1 Jan 1 + get min year + assign $result $minyear + # actual min date: -292275055.05.17T01:47:04.192+0900 + set date BeforeMeiji $minyear Dec 31 + roll month 1 + check date BeforeMeiji $minyear May 31 + + set date BeforeMeiji $minyear Dec 1 + set timeofday 1 47 4 192 + roll month 1 + check date BeforeMeiji $minyear May 17 + check timeofday 1 47 4 192 + + set date BeforeMeiji $minyear Dec 1 + set timeofday 1 47 4 191 + roll month 1 + check date BeforeMeiji $minyear May 18 + check timeofday 1 47 4 191 + + set date Reiwa 17 Jan 1 + get max year + assign $result $max + set date Reiwa $max Jul 28 + roll month 1 + check date Reiwa $max Aug 17 + set date Reiwa $max Jul 28 + set timeofday 23 59 59 999 + roll month 1 + check date Reiwa $max Aug 16 + check timeofday 23 59 59 999 + +test roll WEEK_OF_YEAR + use jcal + clear all + # 1867 Dec 23 is Monday. + set date BeforeMeiji 1867 Dec 23 + roll week_of_year 1 + check day_of_week Mon + check date BeforeMeiji 1867 Jan 7 + roll week_of_year -1 + check day_of_week Mon + check date BeforeMeiji 1867 Dec 23 + roll week_of_year 26 + check day_of_week Mon + check date BeforeMeiji 1867 Jul 1 + roll week_of_year -26 + check day_of_week Mon + check date BeforeMeiji 1867 Dec 23 + + # 1867 Dec 23 is Wednesday. + set date Meiji 1 Dec 23 + roll week_of_year 1 + check day_of_week Wed + check date Meiji 1 Jan 1 + roll week_of_year -1 + check day_of_week Wed + check date Meiji 1 Dec 23 + roll week_of_year 26 + check day_of_week Wed + check date Meiji 1 Jun 24 + roll week_of_year -26 + check day_of_week Wed + check date Meiji 1 Dec 23 + + # Meiji 45 July 22 is Monday. + set date Meiji 45 Jul 22 + # the next week if the first week of Taisho 1 + roll week_of_year 1 + check day_of_week Mon + check date Meiji 45 Jan 1 + roll week_of_year -1 + check day_of_week Mon + check date Meiji 45 Jul 22 + roll week_of_year 26 + check day_of_week Mon + check date Meiji 45 Jun 24 + + # Taisho Gan-nen (year 1) July 30 is Tuesday. + set date Taisho 1 Jul 30 + roll week_of_year -1 + # Taisho Gen-nen December 31 is the first week of the next year. + check day_of_week Tue + check date Taisho 1 Dec 24 + roll week_of_year 1 + check day_of_week Tue + check date Taisho 1 Jul 30 + roll week_of_year 26 + check day_of_week Tue + check date Taisho 1 Aug 27 + roll week_of_year -26 + check day_of_week Tue + check date Taisho 1 Jul 30 + + # Taisho 15 January 7 is Thursday. + set date Taisho 15 Jan 7 + roll week_of_year -1 + check day_of_week Thu + check date Taisho 15 Dec 16 + roll week_of_year 1 + check day_of_week Thu + check date Taisho 15 Jan 7 + + roll week_of_year 51 + check day_of_week Thu + check date Taisho 15 Jan 14 + + # Showa Gan-nen December 30 is Thursday. Showa Gan-nen has + # only one week. Rolling any number of weeks brings to the + # same date. + set date Showa 1 Dec 30 + roll week_of_year 1 + check day_of_week Thu + check date Showa 1 Dec 30 + roll week_of_year -1 + check day_of_week Thu + check date Showa 1 Dec 30 + roll week_of_year 26 + check day_of_week Thu + check date Showa 1 Dec 30 + roll week_of_year -26 + check day_of_week Thu + check date Showa 1 Dec 30 + + # Showa 64 January 7 is Saturday. The year has only one week. + set date Showa 64 Jan 7 + roll week_of_year 1 + check day_of_week Sat + check date Showa 64 Jan 7 + roll week_of_year -1 + check day_of_week Sat + check date Showa 64 Jan 7 + roll week_of_year 26 + check day_of_week Sat + check date Showa 64 Jan 7 + roll week_of_year -26 + check day_of_week Sat + check date Showa 64 Jan 7 + + # Heisei Gan-nen January 14 is Saturday. + set date Heisei 1 Jan 14 + roll week_of_year -1 + check day_of_week Sat + check date Heisei 1 Dec 30 + roll week_of_year 1 + check day_of_week Sat + check date Heisei 1 Jan 14 + roll week_of_year -26 + check day_of_week Sat + check date Heisei 1 Jul 8 + roll week_of_year 26 + check day_of_week Sat + check date Heisei 1 Jan 14 + + # Heisei Gan-nen December 1 is Friday. + set date Heisei 1 Dec 1 + roll week_of_year 5 + check day_of_week Fri + check date Heisei 1 Jan 13 + roll week_of_year -5 + check day_of_week Fri + check date Heisei 1 Dec 1 + roll week_of_year 55 + check day_of_week Fri + check date Heisei 1 Dec 29 + + use tokyocal + clear all + + set date BeforeMeiji $minyear Dec 25 + check day_of_week Sat + roll week_of_year 1 + check day_of_week Sat + check date BeforeMeiji $minyear May 22 + roll week_of_year -1 + check day_of_week Sat + check date BeforeMeiji $minyear Dec 25 + +test WEEK_OF_MONTH + # Needs to wait for 6191841 fix. (WEEK_OF_MONTH needs to change + # ERA and YEAR in a transition month.) + +test DAY_OF_MONTH + # Needs to wait for 6191841 fix. (DAY_OF_MONTH needs to change + # ERA and YEAR in a transition month.) + +test DAY_OF_YEAR + use jcal + clear all + + # 1867 is a regular Gregorian year. + set date BeforeMeiji 1867 Dec 31 + roll day_of_year 1 + check date BeforeMeiji 1867 Jan 1 + roll day_of_year -1 + check date BeforeMeiji 1867 Dec 31 + roll day_of_year 26 + check date BeforeMeiji 1867 Jan 26 + roll day_of_year -26 + check date BeforeMeiji 1867 Dec 31 + + # Meiji 1 starts from Jan 1. It's a regular year as well. + set date Meiji 1 Dec 31 + roll day_of_year 1 + check date Meiji 1 Jan 1 + roll day_of_year -1 + check date Meiji 1 Dec 31 + roll day_of_year 26 + check date Meiji 1 Jan 26 + roll day_of_year -26 + check date Meiji 1 Dec 31 + + # The last year of Meiji (45) has an irregularity. Meiji 45 + # July 30 is actually Taisho 1 July 30. + set date Meiji 45 Jul 29 + roll day_of_year 1 + check date Meiji 45 Jan 1 + roll day_of_year -1 + check date Meiji 45 Jul 29 + roll day_of_year 26 + check date Meiji 45 Jan 26 + roll day_of_year -26 + check date Meiji 45 Jul 29 + + # The first day of Taisho, July 30. + set date Taisho 1 Jul 30 + roll day_of_year -1 + check date Taisho 1 Dec 31 + roll day_of_year 1 + check date Taisho 1 Jul 30 + roll day_of_year 26 + check date Taisho 1 Aug 25 + roll day_of_year -26 + check date Taisho 1 Jul 30 + + set date Taisho 15 Jan 1 + roll day_of_year -1 + check date Taisho 15 Dec 24 + roll day_of_year 1 + check date Taisho 15 Jan 1 + + set date Showa 1 Dec 31 + roll day_of_year 1 + check date Showa 1 Dec 25 + roll day_of_year -1 + check date Showa 1 Dec 31 + roll day_of_year 26 + # 26 % 7 = 5 + check date Showa 1 Dec 29 + roll day_of_year -26 + check date Showa 1 Dec 31 + + set date Showa 64 Jan 7 + roll day_of_year 1 + check date Showa 64 Jan 1 + roll day_of_year -1 + check date Showa 64 Jan 7 + roll day_of_year 26 + # 26 % 7 = 5 + check date Showa 64 Jan 5 + roll day_of_year -26 + check date Showa 64 Jan 7 + + set date Heisei 1 Jan 8 + roll day_of_year -1 + check date Heisei 1 Dec 31 + roll day_of_year 1 + check date Heisei 1 Jan 8 + roll day_of_year -26 + check date Heisei 1 Dec 6 + roll day_of_year 26 + check date Heisei 1 Jan 8 + + set date Heisei 1 Dec 31 + roll day_of_year 5 + check date Heisei 1 Jan 12 + roll day_of_year -5 + check date Heisei 1 Dec 31 + roll day_of_year 55 + check date Heisei 1 Mar 3 + roll day_of_year -55 + check date Heisei 1 Dec 31 + + use tokyocal + clear all + + set date BeforeMeiji $minyear Dec 31 + set timeofday 1 47 4 192 + roll day_of_year 1 + check date BeforeMeiji $minyear May 17 + check timeofday 1 47 4 192 + roll day_of_year -1 + check date BeforeMeiji $minyear Dec 31 + check timeofday 1 47 4 192 + +test DAY_OF_WEEK_IN_MONTH + use jcal + clear all
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/util/Calendar/CalendarTestScripts/params/lenient.cts Tue Apr 16 02:48:40 2019 +0100 @@ -0,0 +1,5 @@ +# +# +# + +set lenient
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/util/Calendar/CalendarTestScripts/params/non-lenient.cts Tue Apr 16 02:48:40 2019 +0100 @@ -0,0 +1,5 @@ +# +# +# + +set non-lenient
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/util/Calendar/CalendarTestScripts/timezones/tz_japan.cts Tue Apr 16 02:48:40 2019 +0100 @@ -0,0 +1,5 @@ +# +# +# + +timezone Asia/Tokyo
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/util/Calendar/CalendarTestScripts/timezones/tz_novosibirsk.cts Tue Apr 16 02:48:40 2019 +0100 @@ -0,0 +1,5 @@ +# +# +# + +timezone Asia/Novosibirsk
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/util/Calendar/CalendarTestScripts/timezones/tz_pst.cts Tue Apr 16 02:48:40 2019 +0100 @@ -0,0 +1,5 @@ +# +# +# + +timezone America/Los_Angeles
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/util/Calendar/CalendarTestScripts/timezones/tz_sydney.cts Tue Apr 16 02:48:40 2019 +0100 @@ -0,0 +1,5 @@ +# +# +# + +timezone Australia/Sydney
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/util/Calendar/JapaneseEraNameTest.java Tue Apr 16 02:48:40 2019 +0100 @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8202088 + * @summary Test the localized Japanese new era name (May 1st. 2019-) + * is retrieved no matter CLDR provider contains the name or not. + * @run testng/othervm JapaneseEraNameTest + */ + +import static java.util.Calendar.*; +import static java.util.Locale.*; +import java.util.Calendar; +import java.util.Locale; + +import org.testng.annotations.DataProvider; +import org.testng.annotations.Test; +import static org.testng.Assert.assertEquals; + +@Test +public class JapaneseEraNameTest { + static final Calendar c; + + static { + c = Calendar.getInstance(new Locale("ja","JP","JP")); + c.set(ERA, 5); + c.set(YEAR, 1); + c.set(MONTH, MAY); + c.set(DAY_OF_MONTH, 1); + } + + @DataProvider(name="names") + Object[][] names() { + return new Object[][] { + // type, locale, name + { LONG, JAPAN, "\u4ee4\u548c" }, + { LONG, US, "Reiwa" }, + { LONG, CHINA, "Reiwa" }, + { SHORT, JAPAN, "R" }, + { SHORT, US, "R" }, + { SHORT, CHINA, "R" }, + }; + } + + @Test(dataProvider="names") + public void testJapaneseNewEraName(int type, Locale locale, String expected) { + assertEquals(c.getDisplayName(ERA, type, locale), expected); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/util/Calendar/JapaneseLenientEraTest.java Tue Apr 16 02:48:40 2019 +0100 @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8206120 + * @summary Test whether lenient era is accepted in JapaneseImperialCalendar + * @run testng/othervm JapaneseLenientEraTest + */ + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Locale; + +import org.testng.annotations.DataProvider; +import org.testng.annotations.Test; +import static org.testng.Assert.assertEquals; + +@Test +public class JapaneseLenientEraTest { + + @DataProvider(name="lenientEra") + Object[][] names() { + return new Object[][] { + // lenient era/year, strict era/year + { "Meiji 123", "Heisei 2" }, + { "Showa 65", "Heisei 2" }, + { "Heisei 32", "Reiwa 2" }, + }; + } + + @Test(dataProvider="lenientEra") + public void testLenientEra(String lenient, String strict) throws Exception { + Locale loc = new Locale.Builder().setUnicodeLocaleKeyword("ca","japanese").build(); + Calendar c = Calendar.getInstance(loc); + DateFormat df = new SimpleDateFormat("GGGG y-M-d", Locale.ROOT); + df.setCalendar(c); + Date lenDate = df.parse(lenient + "-01-01"); + df.setLenient(false); + Date strDate = df.parse(strict + "-01-01"); + assertEquals(lenDate, strDate); + } +}
--- a/test/java/util/Currency/CurrencyTest.java Wed Apr 03 03:51:25 2019 +0100 +++ b/test/java/util/Currency/CurrencyTest.java Tue Apr 16 02:48:40 2019 +0100 @@ -23,7 +23,7 @@ /* * @test * @bug 4290801 4692419 4693631 5101540 5104960 6296410 6336600 6371531 - * 6488442 7036905 + * 6488442 7036905 8074350 8074351 * @summary Basic tests for Currency class. */ @@ -49,6 +49,7 @@ testFractionDigits(); testSerialization(); testDisplayNames(); + testFundsCodes(); } static void testCurrencyCodeValidation() { @@ -263,4 +264,41 @@ } } + static void testFundsCodes() { + testValidCurrency("BOV"); + testValidCurrency("CHE"); + testValidCurrency("CHW"); + testValidCurrency("CLF"); + testValidCurrency("COU"); + testValidCurrency("MXV"); + testValidCurrency("USN"); + testValidCurrency("UYI"); + + testFractionDigits("BOV", 2); + testFractionDigits("CHE", 2); + testFractionDigits("CHW", 2); + testFractionDigits("CLF", 4); + testFractionDigits("COU", 2); + testFractionDigits("MXV", 2); + testFractionDigits("USN", 2); + testFractionDigits("UYI", 0); + + testNumericCode("BOV", 984); + testNumericCode("CHE", 947); + testNumericCode("CHW", 948); + testNumericCode("CLF", 990); + testNumericCode("COU", 970); + testNumericCode("MXV", 979); + testNumericCode("USN", 997); + testNumericCode("UYI", 940); + } + + static void testNumericCode(String currencyCode, int expectedNumeric) { + int numeric = Currency.getInstance(currencyCode).getNumericCode(); + if (numeric != expectedNumeric) { + throw new RuntimeException("Wrong numeric code for currency " + + currencyCode +": expected " + expectedNumeric + + ", got " + numeric); + } + } }
--- a/test/java/util/Currency/PropertiesTest.java Wed Apr 03 03:51:25 2019 +0100 +++ b/test/java/util/Currency/PropertiesTest.java Tue Apr 16 02:48:40 2019 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,22 +26,15 @@ import java.util.regex.*; public class PropertiesTest { - public static void main(String[] s) { - for (int i = 0; i < s.length; i ++) { - if ("-d".equals(s[i])) { - i++; - if (i == s.length) { - throw new RuntimeException("-d needs output file name"); - } else { - dump(s[i]); - } - } else if ("-c".equals(s[i])) { - if (i+2 == s.length) { - throw new RuntimeException("-d needs two file name arguments, before and after respectively"); - } else { - compare(s[++i], s[++i]); - } - } + public static void main(String[] args) throws Exception { + if (args.length == 2 && args[0].equals("-d")) { + dump(args[1]); + } else if (args.length == 4 && args[0].equals("-c")) { + compare(args[1], args[2], args[3]); + } else { + System.err.println("Usage: java PropertiesTest -d <dumpfile>"); + System.err.println(" java PropertiesTest -c <beforedump> <afterdump> <propsfile>"); + System.exit(-1); } } @@ -76,15 +69,17 @@ pw.close(); } - private static void compare(String beforeFile, String afterFile) { + private static void compare(String beforeFile, String afterFile, String propsFile) + throws IOException + { // load file contents Properties before = new Properties(); + try (Reader reader = new FileReader(beforeFile)) { + before.load(reader); + } Properties after = new Properties(); - try { - before.load(new FileReader(beforeFile)); - after.load(new FileReader(afterFile)); - } catch (IOException ioe) { - throw new RuntimeException(ioe); + try (Reader reader = new FileReader(afterFile)) { + after.load(reader); } // remove the same contents from the 'after' properties @@ -102,19 +97,15 @@ } // now look at the currency.properties - String propFileName = System.getProperty("java.home") + File.separator + - "lib" + File.separator + "currency.properties"; Properties p = new Properties(); - try { - p.load(new FileReader(propFileName)); - } catch (IOException ioe) { - throw new RuntimeException(ioe); + try (Reader reader = new FileReader(propsFile)) { + p.load(reader); } // test each replacements keys = p.stringPropertyNames(); Pattern propertiesPattern = - Pattern.compile("([A-Z]{3})\\s*,\\s*(\\d{3})\\s*,\\s*([0-3])"); + Pattern.compile("([A-Z]{3})\\s*,\\s*(\\d{3})\\s*,\\s*(\\d+)"); for (String key: keys) { String val = p.getProperty(key); String afterVal = after.getProperty(key); @@ -132,14 +123,19 @@ continue; } + String code = m.group(1); + int numeric = Integer.parseInt(m.group(2)); + int fraction = Integer.parseInt(m.group(3)); + if (fraction > 9) { + System.out.println("Skipping since the fraction is greater than 9"); + continue; + } + Matcher mAfter = propertiesPattern.matcher(afterVal); mAfter.find(); - String code = m.group(1); String codeAfter = mAfter.group(1); - int numeric = Integer.parseInt(m.group(2)); int numericAfter = Integer.parseInt(mAfter.group(2)); - int fraction = Integer.parseInt(m.group(3)); int fractionAfter = Integer.parseInt(mAfter.group(3)); if (code.equals(codeAfter) && (numeric == numericAfter)&&
--- a/test/java/util/Currency/PropertiesTest.sh Wed Apr 03 03:51:25 2019 +0100 +++ b/test/java/util/Currency/PropertiesTest.sh Tue Apr 16 02:48:40 2019 +0100 @@ -1,7 +1,29 @@ #!/bin/sh + +# Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. # +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + # @test -# @bug 6332666 +# @bug 6332666 8003846 8074350 8074351 # @summary tests the capability of replacing the currency data with user # specified currency properties file # @build PropertiesTest @@ -36,7 +58,7 @@ ;; Windows* | CYGWIN* ) PS=";" - FS="\\" + FS="/" ;; * ) echo "Unrecognized system!" @@ -44,23 +66,32 @@ ;; esac -# Currency dump path #1. Just dump currencies with the bare JRE +failures=0 # run -RUNCMD="${TESTJAVA}${FS}bin${FS}java ${TESTVMOPTS} -classpath ${TESTCLASSES} PropertiesTest -d dump1" +run() { + echo '' + sh -xc "${TESTJAVA}${FS}bin${FS}java ${TESTVMOPTS} -cp ${TESTCLASSES} $*" 2>&1 + if [ $? != 0 ]; then failures=`expr $failures + 1`; fi +} -echo ${RUNCMD} -${RUNCMD} -result=$? +PROPS=${TESTSRC}${FS}currency.properties + + +# Dump built-in currency data -if [ $result -eq 0 ] -then - echo "Execution successful" -else - echo "Execution of the test case failed." -fi +run PropertiesTest -d dump1 + + +# Dump built-in currency data + overrides in properties file specified +# by system property. -# Currency dump path #2. Dump currencies using the JRE with replacement currencies +run -Djava.util.currency.data=${PROPS} PropertiesTest -d dump2 +run PropertiesTest -c dump1 dump2 ${PROPS} + + +# Dump built-in currency data + overrides in properties file copied into +# JRE image. # copy the test properties file COPIED=0 @@ -79,44 +110,27 @@ else PROPLOCATION=${WRITABLEJDK}${FS}lib fi -cp ${TESTSRC}${FS}currency.properties $PROPLOCATION +cp ${PROPS} $PROPLOCATION # run -RUNCMD="${WRITABLEJDK}${FS}bin${FS}java ${TESTVMOPTS} -classpath ${TESTCLASSES} PropertiesTest -d dump2" - -echo ${RUNCMD} -${RUNCMD} -result=$? - -if [ $result -eq 0 ] -then - echo "Execution successful" -else - echo "Execution of the test case failed." -fi - -# Now compare the two dump files - -RUNCMD="${WRITABLEJDK}${FS}bin${FS}java -classpath ${TESTCLASSES} PropertiesTest -c dump1 dump2" - -echo ${RUNCMD} -${RUNCMD} -result=$? - -if [ $result -eq 0 ] -then - echo "Execution successful" -else - echo "Execution of the test case failed." -fi +echo '' +sh -xc "${WRITABLEJDK}${FS}bin${FS}java ${TESTVMOPTS} -cp ${TESTCLASSES} PropertiesTest -d dump3" +if [ $? != 0 ]; then failures=`expr $failures + 1`; fi # Cleanup -rm -f dump1 -rm -f dump2 rm -f ${PROPLOCATION}${FS}currency.properties if [ $COPIED -eq 1 ] then rm -rf $WRITABLEJDK fi -exit $result +# compare the two dump files +run PropertiesTest -c dump1 dump3 ${PROPS} + + +# Results +echo '' +if [ $failures -gt 0 ]; + then echo "$failures tests failed"; + else echo "All tests passed"; fi +exit $failures
--- a/test/java/util/Currency/ValidateISO4217.java Wed Apr 03 03:51:25 2019 +0100 +++ b/test/java/util/Currency/ValidateISO4217.java Tue Apr 16 02:48:40 2019 +0100 @@ -23,6 +23,7 @@ /* * @test * @bug 4691089 4819436 4942982 5104960 6544471 6627549 7066203 7195759 + * 8074350 8074351 8145952 * @summary Validate ISO 4217 data for Currency class. */ @@ -92,7 +93,7 @@ /* Codes that are obsolete, do not have related country */ static final String otherCodes = - "ADP-AFA-ATS-AYM-AZM-BEF-BGL-BOV-BYB-CLF-CUC-CYP-DEM-EEK-ESP-FIM-FRF-GHC-GRD-GWP-IEP-ITL-LUF-MGF-MTL-MXV-MZM-NLG-PTE-ROL-RUR-SDD-SIT-SKK-SRG-TMM-TPE-TRL-VEF-USN-USS-VEB-XAG-XAU-XBA-XBB-XBC-XBD-XDR-XFO-XFU-XPD-XPT-XSU-XTS-XUA-XXX-YUM-ZMK-ZWD-ZWN-ZWR"; + "ADP-AFA-ATS-AYM-AZM-BEF-BGL-BOV-BYB-BYR-CHE-CHW-CLF-COU-CUC-CYP-DEM-EEK-ESP-FIM-FRF-GHC-GRD-GWP-IEP-ITL-LUF-MGF-MTL-MXV-MZM-NLG-PTE-ROL-RUR-SDD-SIT-SKK-SRG-TMM-TPE-TRL-VEF-UYI-USN-USS-VEB-XAG-XAU-XBA-XBB-XBC-XBD-XDR-XFO-XFU-XPD-XPT-XSU-XTS-XUA-XXX-YUM-ZMK-ZWD-ZWN-ZWR"; static boolean err = false;
--- a/test/java/util/Currency/currency.properties Wed Apr 03 03:51:25 2019 +0100 +++ b/test/java/util/Currency/currency.properties Tue Apr 16 02:48:40 2019 +0100 @@ -1,10 +1,23 @@ # # Test data for replacing the currency data # + +# valid entries +CL=CLF,990,4 +ES=ESD,877,2 JP=JPZ,123,2 +MA=MAA,555,5 +MC=MCC,555,6 +MD=MDD,555,7 +ME=MEE,555,8 +MF=MFF,555,9 +NO=EUR ,978 ,2 US=euR,978,2 ZZ = ZZZ , 999 , 3 # invalid entries +FR=zzzzz.123 GB=123 -FR=zzzzz.123 +MG=MGG,990,10 +PE=EUR ,978 ,2, 20399-01-01T00:00:00 +MG=MGG,990,10
--- a/test/java/util/Currency/tablea1.txt Wed Apr 03 03:51:25 2019 +0100 +++ b/test/java/util/Currency/tablea1.txt Tue Apr 16 02:48:40 2019 +0100 @@ -1,12 +1,12 @@ # # -# Amendments up until ISO 4217 AMENDMENT NUMBER 159 -# (As of 15 August 2014) +# Amendments up until ISO 4217 AMENDMENT NUMBER 162 +# (As of 30 Auguest 2016) # # Version -FILEVERSION=1 -DATAVERSION=159 +FILEVERSION=2 +DATAVERSION=162 # ISO 4217 currency data AF AFN 971 2 @@ -28,7 +28,7 @@ BH BHD 48 3 BD BDT 50 2 BB BBD 52 2 -BY BYR 974 0 +BY BYN 933 2 BE EUR 978 2 BZ BZD 84 2 BJ XOF 952 0 @@ -55,7 +55,7 @@ CF XAF 950 0 TD XAF 950 0 CL CLP 152 0 -#CL CLF 990 0 +#CL CLF 990 4 CN CNY 156 2 CX AUD 36 2 CC AUD 36 2 @@ -265,6 +265,7 @@ #US USN 997 2 UM USD 840 2 UY UYU 858 2 +#UY UYI 940 0 UZ UZS 860 2 VU VUV 548 0 VE VEF 937 2
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/lib/security/SecurityUtils.java Tue Apr 16 02:48:40 2019 +0100 @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.io.File; +import java.io.FileInputStream; +import java.security.KeyStore; + +/** + * Common library for various security test helper functions. + */ +public final class SecurityUtils { + + private static String getCacerts() { + String sep = File.separator; + return System.getProperty("java.home") + sep + + "lib" + sep + "security" + sep + "cacerts"; + } + + /** + * Returns the cacerts keystore with the configured CA certificates. + */ + public static KeyStore getCacertsKeyStore() throws Exception { + File file = new File(getCacerts()); + if (!file.exists()) { + return null; + } + + KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType()); + try (FileInputStream fis = new FileInputStream(file)) { + ks.load(fis, null); + } + return ks; + } + + private SecurityUtils() {} +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/X509TrustManagerImpl/Symantec/Distrust.java Tue Apr 16 02:48:40 2019 +0100 @@ -0,0 +1,270 @@ +/* + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.io.*; +import java.math.BigInteger; +import java.security.*; +import java.security.cert.*; +import java.util.*; +import javax.net.ssl.*; +import sun.security.validator.Validator; +import sun.security.validator.ValidatorException; + + +/** + * @test + * @bug 8207258 8216280 + * @summary Check that TLS Server certificates chaining back to distrusted + * Symantec roots are invalid + * @library /lib/security + * @run main/othervm Distrust after policyOn invalid + * @run main/othervm Distrust after policyOff valid + * @run main/othervm Distrust before policyOn valid + * @run main/othervm Distrust before policyOff valid + */ + +public class Distrust { + + private static final String TEST_SRC = System.getProperty("test.src", "."); + private static CertificateFactory cf; + + // Each of the roots have a test certificate chain stored in a file + // named "<root>-chain.pem". + private static String[] rootsToTest = new String[] { + "geotrustglobalca", "geotrustprimarycag2", "geotrustprimarycag3", + "geotrustuniversalca", "thawteprimaryrootca", "thawteprimaryrootcag2", + "thawteprimaryrootcag3", "verisignclass3g3ca", "verisignclass3g4ca", + "verisignclass3g5ca", "verisignuniversalrootca" }; + + // Each of the subCAs with a delayed distrust date have a test certificate + // chain stored in a file named "<subCA>-chain.pem". + private static String[] subCAsToTest = new String[] { + "appleistca2g1", "appleistca8g1" }; + + + // A date that is after the restrictions take affect + private static final Date APRIL_17_2019; + + // A date that is a second before the restrictions take affect + private static final Date BEFORE_APRIL_17_2019; + + // A date that is after the subCA restrictions take affect + private static final Date JANUARY_1_2020; + + // A date that is a second before the subCA restrictions take affect + private static final Date BEFORE_JANUARY_1_2020; + + static { + Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC")); + cal.set(2019, Calendar.APRIL, 17, 0, 0, 0); + APRIL_17_2019 = cal.getTime(); + cal.add(Calendar.SECOND, -1); + BEFORE_APRIL_17_2019 = cal.getTime(); + cal.set(2020, Calendar.JANUARY, 1, 0, 0, 0); + JANUARY_1_2020 = cal.getTime(); + cal.add(Calendar.SECOND, -1); + BEFORE_JANUARY_1_2020 = cal.getTime(); + } + + public static void main(String[] args) throws Exception { + + cf = CertificateFactory.getInstance("X.509"); + boolean distrust = args[0].equals("true"); + + boolean before = args[0].equals("before"); + boolean policyOn = args[1].equals("policyOn"); + boolean isValid = args[2].equals("valid"); + + if (!policyOn) { + // disable policy (default is on) + Security.setProperty("jdk.security.caDistrustPolicies", ""); + } + + Date notBefore = before ? BEFORE_APRIL_17_2019 : APRIL_17_2019; + + X509TrustManager pkixTM = getTMF("PKIX", null); + X509TrustManager sunX509TM = getTMF("SunX509", null); + for (String test : rootsToTest) { + System.err.println("Testing " + test); + X509Certificate[] chain = loadCertificateChain(test); + + testTM(sunX509TM, chain, notBefore, isValid); + testTM(pkixTM, chain, notBefore, isValid); + + } + + // test chain if params are passed to TrustManager + System.err.println("Testing verisignuniversalrootca with params"); + testTM(getTMF("PKIX", getParams()), + loadCertificateChain("verisignuniversalrootca"), + notBefore, isValid); + + // test code-signing chain (should be valid as restrictions don't apply) + System.err.println("Testing verisignclass3g5ca code-signing chain"); + Validator v = Validator.getInstance(Validator.TYPE_PKIX, + Validator.VAR_CODE_SIGNING, + getParams()); + // set validation date so this will still pass when cert expires + v.setValidationDate(new Date(1544197375493l)); + v.validate(loadCertificateChain("verisignclass3g5ca-codesigning")); + + // test chains issued through subCAs + notBefore = before ? BEFORE_JANUARY_1_2020 : JANUARY_1_2020; + for (String test : subCAsToTest) { + System.err.println("Testing " + test); + X509Certificate[] chain = loadCertificateChain(test); + + testTM(sunX509TM, chain, notBefore, isValid); + testTM(pkixTM, chain, notBefore, isValid); + } + } + + private static X509TrustManager getTMF(String type, + PKIXBuilderParameters params) throws Exception { + TrustManagerFactory tmf = TrustManagerFactory.getInstance(type); + if (params == null) { + tmf.init((KeyStore)null); + } else { + tmf.init(new CertPathTrustManagerParameters(params)); + } + TrustManager[] tms = tmf.getTrustManagers(); + for (TrustManager tm : tms) { + X509TrustManager xtm = (X509TrustManager)tm; + return xtm; + } + throw new Exception("No TrustManager for " + type); + } + + private static PKIXBuilderParameters getParams() throws Exception { + PKIXBuilderParameters pbp = + new PKIXBuilderParameters(SecurityUtils.getCacertsKeyStore(), + new X509CertSelector()); + pbp.setRevocationEnabled(false); + return pbp; + } + + private static void testTM(X509TrustManager xtm, X509Certificate[] chain, + Date notBefore, boolean valid) throws Exception { + // Check if TLS Server certificate (the first element of the chain) + // is issued after the specified notBefore date (should be rejected + // unless distrust property is false). To do this, we need to + // fake the notBefore date since none of the test certs are issued + // after then. + chain[0] = new DistrustedTLSServerCert(chain[0], notBefore); + + try { + xtm.checkServerTrusted(chain, "ECDHE_RSA"); + if (!valid) { + throw new Exception("chain should be invalid"); + } + } catch (CertificateException ce) { + if (valid) { + throw new Exception("Unexpected exception, chain " + + "should be valid", ce); + } + if (ce instanceof ValidatorException) { + ValidatorException ve = (ValidatorException)ce; + if (ve.getErrorType() != ValidatorException.T_UNTRUSTED_CERT) { + throw new Exception("Unexpected exception: " + ce); + } + } else { + throw new Exception("Unexpected exception: " + ce); + } + } + } + + private static X509Certificate[] loadCertificateChain(String name) + throws Exception { + try (InputStream in = new FileInputStream(TEST_SRC + File.separator + + name + "-chain.pem")) { + Collection<X509Certificate> certs = + (Collection<X509Certificate>)cf.generateCertificates(in); + return certs.toArray(new X509Certificate[0]); + } + } + + private static class DistrustedTLSServerCert extends X509Certificate { + private final X509Certificate cert; + private final Date notBefore; + DistrustedTLSServerCert(X509Certificate cert, Date notBefore) { + this.cert = cert; + this.notBefore = notBefore; + } + public Set<String> getCriticalExtensionOIDs() { + return cert.getCriticalExtensionOIDs(); + } + public byte[] getExtensionValue(String oid) { + return cert.getExtensionValue(oid); + } + public Set<String> getNonCriticalExtensionOIDs() { + return cert.getNonCriticalExtensionOIDs(); + } + public boolean hasUnsupportedCriticalExtension() { + return cert.hasUnsupportedCriticalExtension(); + } + public void checkValidity() throws CertificateExpiredException, + CertificateNotYetValidException { + // always pass + } + public void checkValidity(Date date) throws CertificateExpiredException, + CertificateNotYetValidException { + // always pass + } + public int getVersion() { return cert.getVersion(); } + public BigInteger getSerialNumber() { return cert.getSerialNumber(); } + public Principal getIssuerDN() { return cert.getIssuerDN(); } + public Principal getSubjectDN() { return cert.getSubjectDN(); } + public Date getNotBefore() { return notBefore; } + public Date getNotAfter() { return cert.getNotAfter(); } + public byte[] getTBSCertificate() throws CertificateEncodingException { + return cert.getTBSCertificate(); + } + public byte[] getSignature() { return cert.getSignature(); } + public String getSigAlgName() { return cert.getSigAlgName(); } + public String getSigAlgOID() { return cert.getSigAlgOID(); } + public byte[] getSigAlgParams() { return cert.getSigAlgParams(); } + public boolean[] getIssuerUniqueID() { + return cert.getIssuerUniqueID(); + } + public boolean[] getSubjectUniqueID() { + return cert.getSubjectUniqueID(); + } + public boolean[] getKeyUsage() { return cert.getKeyUsage(); } + public int getBasicConstraints() { return cert.getBasicConstraints(); } + public byte[] getEncoded() throws CertificateEncodingException { + return cert.getEncoded(); + } + public void verify(PublicKey key) throws CertificateException, + InvalidKeyException, NoSuchAlgorithmException, + NoSuchProviderException, SignatureException { + cert.verify(key); + } + public void verify(PublicKey key, String sigProvider) throws + CertificateException, InvalidKeyException, NoSuchAlgorithmException, + NoSuchProviderException, SignatureException { + cert.verify(key, sigProvider); + } + public PublicKey getPublicKey() { return cert.getPublicKey(); } + public String toString() { return cert.toString(); } + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/X509TrustManagerImpl/Symantec/appleistca2g1-chain.pem Tue Apr 16 02:48:40 2019 +0100 @@ -0,0 +1,80 @@ +-----BEGIN CERTIFICATE----- +MIIGGzCCBQOgAwIBAgIITJltLCqcD0gwDQYJKoZIhvcNAQELBQAwYjEcMBoGA1UE +AxMTQXBwbGUgSVNUIENBIDIgLSBHMTEgMB4GA1UECxMXQ2VydGlmaWNhdGlvbiBB +dXRob3JpdHkxEzARBgNVBAoTCkFwcGxlIEluYy4xCzAJBgNVBAYTAlVTMB4XDTE5 +MDEwODIxMTcxNFoXDTIwMDgwODIxMjcwMFowgaoxSjBIBgNVBAMMQWFjdGl2ZS5n +ZW90cnVzdC1nbG9iYWwtY2EudGVzdC1wYWdlcy5jZXJ0aWZpY2F0ZW1hbmFnZXIu +YXBwbGUuY29tMSUwIwYDVQQLDBxtYW5hZ2VtZW50OmlkbXMuZ3JvdXAuODY0ODU5 +MRMwEQYDVQQKDApBcHBsZSBJbmMuMRMwEQYDVQQIDApDYWxpZm9ybmlhMQswCQYD +VQQGEwJVUzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMCjFUrVHTEX +0aVU6x9LiGa6oVr9blaCsMFrLicPQguc43Vs/pN+g4jzRXsTSMe9XefezBQb6tzZ +SMRXVB4kWMr4K1BVgQDkXeyoh4KrXRkdEF9ZIJPNxwTmmYUOc5M6NOYwkLelYz+t +7n1iNIGylbjwU4qwauElk2alFVqYTEPDLzwvqVDb9jMAJ8MPSDjfUlXW0XD9oXZM +hC+8LU9JBgJ3YBdzRHa4WnrudUbWjspqaNfAYpVIX0cfCJKnMsKqaSKjS4pIRtWm +L6NlCTCoIMyOh+wmbWPPX24H2D3+ump5FA35fRYbVznmosl5n1AK34S9tD4XZ7lO +WZKfaFi1liMCAwEAAaOCAoowggKGMAwGA1UdEwEB/wQCMAAwHwYDVR0jBBgwFoAU +2HqURHyQcJAWnt0XnAFEA4bWKikwfgYIKwYBBQUHAQEEcjBwMDQGCCsGAQUFBzAC +hihodHRwOi8vY2VydHMuYXBwbGUuY29tL2FwcGxlaXN0Y2EyZzEuZGVyMDgGCCsG +AQUFBzABhixodHRwOi8vb2NzcC5hcHBsZS5jb20vb2NzcDAzLWFwcGxlaXN0Y2Ey +ZzEwMTBMBgNVHREERTBDgkFhY3RpdmUuZ2VvdHJ1c3QtZ2xvYmFsLWNhLnRlc3Qt +cGFnZXMuY2VydGlmaWNhdGVtYW5hZ2VyLmFwcGxlLmNvbTCB/wYDVR0gBIH3MIH0 +MIHxBgoqhkiG92NkBQsEMIHiMIGkBggrBgEFBQcCAjCBlwyBlFJlbGlhbmNlIG9u +IHRoaXMgY2VydGlmaWNhdGUgYnkgYW55IHBhcnR5IGFzc3VtZXMgYWNjZXB0YW5j +ZSBvZiBhbnkgYXBwbGljYWJsZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2Ug +YW5kL29yIGNlcnRpZmljYXRpb24gcHJhY3RpY2Ugc3RhdGVtZW50cy4wOQYIKwYB +BQUHAgEWLWh0dHA6Ly93d3cuYXBwbGUuY29tL2NlcnRpZmljYXRlYXV0aG9yaXR5 +L3JwYTAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwNwYDVR0fBDAwLjAs +oCqgKIYmaHR0cDovL2NybC5hcHBsZS5jb20vYXBwbGVpc3RjYTJnMS5jcmwwHQYD +VR0OBBYEFP0qkmFJhArI0MsfW0V+/wY9x4GSMA4GA1UdDwEB/wQEAwIFoDANBgkq +hkiG9w0BAQsFAAOCAQEATjT8M0bIq+mFc8k5cd4KDjCMBjYl/l3/8zKlWYGP+nl1 +KRogXcGRa3LcfpdJcqgMrx8e9Xohduvl8MBzwv671rYkppzZdsmZdLVorAdbL5GL +suhTjAS5yL3NBWNMRpeOgFsVr7YtPDEvo3CFsnzjg7THe0S6Y35oYukJtUzGUvSY +kC3ApBTdjj0vAeow+dbt+AHKnQiEnon4ToSFmtnkru08Uxe7uyHCQ2sLUg0EPYc9 +t9I8lviaHfK/mQoCzlme2O/H5Rher8dXCv8hVT1NKbsi28EpgpqcTLS+hn/Edc/q +4dPDoO1Ozs+ixRzFeMpA+JrnAyARb6qbSrAPBgtIbQ== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEQDCCAyigAwIBAgIDAjp0MA0GCSqGSIb3DQEBCwUAMEIxCzAJBgNVBAYTAlVT +MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i +YWwgQ0EwHhcNMTQwNjE2MTU0MjAyWhcNMjIwNTIwMTU0MjAyWjBiMRwwGgYDVQQD +ExNBcHBsZSBJU1QgQ0EgMiAtIEcxMSAwHgYDVQQLExdDZXJ0aWZpY2F0aW9uIEF1 +dGhvcml0eTETMBEGA1UEChMKQXBwbGUgSW5jLjELMAkGA1UEBhMCVVMwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDQk6EdR0MgFrILa+vD1bTox5jN896/ +6E3p4zaAB/xFG2p8RYauVtOkCX9hDWtdflJrfbTIOcT0Zzr3g84Zb4YvfkV+Rxxn +UsqVBV3iNlGFwNRngDVvFd0+/R3S/Y80UNjsdiq+49Pa5P3I6ygClhGXF2Ec6cRZ +O0LcMtEJHdqm0UOG/16yvIzPZtsBiwKulEjzOI/96jKoCOyGl1GUJD5JSZZT6Hmh +QIHpBbuTlVH84/18EUv3ngizFUkVB/nRN6CbSzL2tcTcatH8Cu324MUpoKiLcf4N +krz+VHAYCm3H7Qz7yS0Gw4yF/MuGXNY2jhKLCX/7GRo41fCUMHoPpozzAgMBAAGj +ggEdMIIBGTAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1luMrMTjAdBgNVHQ4E +FgQU2HqURHyQcJAWnt0XnAFEA4bWKikwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNV +HQ8BAf8EBAMCAQYwNQYDVR0fBC4wLDAqoCigJoYkaHR0cDovL2cuc3ltY2IuY29t +L2NybHMvZ3RnbG9iYWwuY3JsMC4GCCsGAQUFBwEBBCIwIDAeBggrBgEFBQcwAYYS +aHR0cDovL2cuc3ltY2QuY29tMEwGA1UdIARFMEMwQQYKYIZIAYb4RQEHNjAzMDEG +CCsGAQUFBwIBFiVodHRwOi8vd3d3Lmdlb3RydXN0LmNvbS9yZXNvdXJjZXMvY3Bz +MA0GCSqGSIb3DQEBCwUAA4IBAQAWR3NvhaJi4ecqdruJlUIml7xKrKxwUzo/MYM9 +PByrmuKxXRx2GqA8DHJXvtOeUODImdZY1wLqzg0pVHzN9cLGkClVo28UqAtCDTqY +bQZ4nvBqox0CCqIopI3CgUY+bWfa3j/+hQ5CKhLetbf7uBunlux3n+zUU5V6/wf0 +8goUwFFSsdaOUAsamVy8C8m97e34XsFW201+I6QRoSzUGwWa5BtS9nw4mQVLunKN +QolgBGYq9P1o12v3mUEo1mwkq+YlUy7Igpnioo8jvjCDsSeL+mh/AUnoxphrEC6Y +XorXykuxx8lYmtA225aV7LaB5PLNbxt5h0wQPInkTfpU3Kqm +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT +MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i +YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG +EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg +R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9 +9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq +fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv +iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU +1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+ +bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW +MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA +ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l +uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn +Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS +tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF +PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un +hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV +5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw== +-----END CERTIFICATE-----
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/X509TrustManagerImpl/Symantec/appleistca8g1-chain.pem Tue Apr 16 02:48:40 2019 +0100 @@ -0,0 +1,64 @@ +-----BEGIN CERTIFICATE----- +MIIElDCCBDqgAwIBAgIIWax3IY1ByGIwCgYIKoZIzj0EAwIwYjEcMBoGA1UEAwwT +QXBwbGUgSVNUIENBIDggLSBHMTEgMB4GA1UECwwXQ2VydGlmaWNhdGlvbiBBdXRo +b3JpdHkxEzARBgNVBAoMCkFwcGxlIEluYy4xCzAJBgNVBAYTAlVTMB4XDTE5MDEw +ODIxMTAyNFoXDTIwMDgwODIxMjAwMFowga0xTTBLBgNVBAMMRGFjdGl2ZS5nZW90 +cnVzdC1nbG9iYWwtY2EtZzIudGVzdC1wYWdlcy5jZXJ0aWZpY2F0ZW1hbmFnZXIu +YXBwbGUuY29tMSUwIwYDVQQLDBxtYW5hZ2VtZW50OmlkbXMuZ3JvdXAuODY0ODU5 +MRMwEQYDVQQKDApBcHBsZSBJbmMuMRMwEQYDVQQIDApDYWxpZm9ybmlhMQswCQYD +VQQGEwJVUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABN4oxNLGzmOIfgFRxDaU +SaOYTQVZCc7a7MXlK1L4/KgN22stgSkrg47aOWviMuzb9Q9hDA/Tn19o9Zr8G5ON +pYijggKMMIICiDAMBgNVHRMBAf8EAjAAMB8GA1UdIwQYMBaAFMPEpFgFY9eDBrqW +jdyyjzL2u7dBMH4GCCsGAQUFBwEBBHIwcDA0BggrBgEFBQcwAoYoaHR0cDovL2Nl +cnRzLmFwcGxlLmNvbS9hcHBsZWlzdGNhOGcxLmRlcjA4BggrBgEFBQcwAYYsaHR0 +cDovL29jc3AuYXBwbGUuY29tL29jc3AwMy1hcHBsZWlzdGNhOGcxMDEwTwYDVR0R +BEgwRoJEYWN0aXZlLmdlb3RydXN0LWdsb2JhbC1jYS1nMi50ZXN0LXBhZ2VzLmNl +cnRpZmljYXRlbWFuYWdlci5hcHBsZS5jb20wgf4GA1UdIASB9jCB8zCB8AYKKoZI +hvdjZAULBDCB4TCBpAYIKwYBBQUHAgIwgZcMgZRSZWxpYW5jZSBvbiB0aGlzIGNl +cnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgYW55 +IGFwcGxpY2FibGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNlIGFuZC9vciBj +ZXJ0aWZpY2F0aW9uIHByYWN0aWNlIHN0YXRlbWVudHMuMDgGCCsGAQUFBwICMCwM +Kmh0dHA6Ly93d3cuYXBwbGUuY29tL2NlcnRpZmljYXRlYXV0aG9yaXR5LzAdBgNV +HSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwNwYDVR0fBDAwLjAsoCqgKIYmaHR0 +cDovL2NybC5hcHBsZS5jb20vYXBwbGVpc3RjYThnMS5jcmwwHQYDVR0OBBYEFCQy +hU8U00tcIz6L0MCT6EGVho0EMA4GA1UdDwEB/wQEAwIDiDAKBggqhkjOPQQDAgNI +ADBFAiAl5nGHi2u8V0aJSp4o1i3TlK7ao8WvxwBuHKfuKibSLAIhAN8PZqhESS9u +V7Dr6qzs88yn/1z6oeqPwDsntFpUFtWG +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDVDCCAtugAwIBAgIQE1Iuv8HdXOEe8nZAdR/n3zAKBggqhkjOPQQDAzCBmDEL +MAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChj +KSAyMDA3IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2 +MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 +eSAtIEcyMB4XDTE2MDYwOTAwMDAwMFoXDTMxMDYwODIzNTk1OVowYjEcMBoGA1UE +AwwTQXBwbGUgSVNUIENBIDggLSBHMTEgMB4GA1UECwwXQ2VydGlmaWNhdGlvbiBB +dXRob3JpdHkxEzARBgNVBAoMCkFwcGxlIEluYy4xCzAJBgNVBAYTAlVTMFkwEwYH +KoZIzj0CAQYIKoZIzj0DAQcDQgAELVSOaLAQE+/0LdvYCbJD6J1lmW40uNSXyY7J +1qgiNzLIcWDusPHyxWT2ukdf/OYHeDIt9sqAIMn9cPhykyGIRaOCATowggE2MBIG +A1UdEwEB/wQIMAYBAf8CAQAwNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2cuc3lt +Y2IuY29tL0dlb1RydXN0UENBLUcyLmNybDAOBgNVHQ8BAf8EBAMCAQYwLgYIKwYB +BQUHAQEEIjAgMB4GCCsGAQUFBzABhhJodHRwOi8vZy5zeW1jZC5jb20wSQYDVR0g +BEIwQDA+BgZngQwBAgIwNDAyBggrBgEFBQcCARYmaHR0cHM6Ly93d3cuZ2VvdHJ1 +c3QuY29tL3Jlc291cmNlcy9jcHMwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUF +BwMCMB0GA1UdDgQWBBTDxKRYBWPXgwa6lo3cso8y9ru3QTAfBgNVHSMEGDAWgBQV +XzVXUVX7JbKtA2n8AaP6vhFV1TAKBggqhkjOPQQDAwNnADBkAjBH2jMNybjCk3Ts +OidXxJX9YDPMd5S3KDCv8vyTdJGhtoly7fQJRNv5rnVz+6YGfsMCMEp6wyheL7NK +mqavsduix2R+j1B3wRjelzJYgXzgM3nwhQKKlJWxpF7IGHuva1taxg== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDEL +MAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChj +KSAyMDA3IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2 +MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 +eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1OVowgZgxCzAJBgNV +BAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykgMjAw +NyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNV +BAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH +MjB2MBAGByqGSM49AgEGBSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcL +So17VDs6bl8VAsBQps8lL33KSLjHUGMcKiEIfJo22Av+0SbFWDEwKCXzXV2juLal +tJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO +BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+EVXVMAoG +CCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGT +qQ7mndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBucz +rD6ogRLQy7rQkgu2npaqBA+K +-----END CERTIFICATE-----
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/X509TrustManagerImpl/Symantec/geotrustglobalca-chain.pem Tue Apr 16 02:48:40 2019 +0100 @@ -0,0 +1,66 @@ +-----BEGIN CERTIFICATE----- +MIIHBjCCBe6gAwIBAgIQanINWwJAuap0V7lFjnfUwTANBgkqhkiG9w0BAQsFADBE +MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMU +R2VvVHJ1c3QgU1NMIENBIC0gRzMwHhcNMTcwNTAzMDAwMDAwWhcNMjAwNTAyMjM1 +OTU5WjCBkTELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNV +BAcMDU1vdW50YWluIFZpZXcxFzAVBgNVBAoMDkdlb1RydXN0LCBJbmMuMRgwFgYD +VQQLDA9Sb290IDEwIC0gVkFMSUQxIjAgBgNVBAMMGXZhbGlkLXJvb3QxMC5nZW90 +cnVzdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDTegUYhAh0 +P7aF6jzk8dit4Vzddo3hM+J7Eak/+N1sqVUS2HpNd7VO50FrbEWKIRusv7QNtlpY +1Cgrla8M4RAhCB0wkkHXZ1Evz6E1AEFQqNSjyuRQxeEXl+xCL+MF+yAMhDRnHh+E +eSJ3ie0T66saOyaLM9fPpr3xomAQ/IRlP1atJ/Z8XbPo25HuxwzxiWFW+RjwVIfI +gxHz4Okwc1uImDUIDlEu9Uaqqb4jHhxU1EkKMmgEncpqwCROcZMujUkogfB49Z7+ +K17r6ARIrUuxqfNPrPwe+O88WgIeDSWffPM67UlvtomZOwuTNdv9OoCX1wUCLS7m +/gZ3rqqqeJvfAgMBAAGjggOkMIIDoDAkBgNVHREEHTAbghl2YWxpZC1yb290MTAu +Z2VvdHJ1c3QuY29tMAkGA1UdEwQCMAAwDgYDVR0PAQH/BAQDAgWgMCsGA1UdHwQk +MCIwIKAeoByGGmh0dHA6Ly9nbi5zeW1jYi5jb20vZ24uY3JsMIGdBgNVHSAEgZUw +gZIwgY8GBmeBDAECAjCBhDA/BggrBgEFBQcCARYzaHR0cHM6Ly93d3cuZ2VvdHJ1 +c3QuY29tL3Jlc291cmNlcy9yZXBvc2l0b3J5L2xlZ2FsMEEGCCsGAQUFBwICMDUM +M2h0dHBzOi8vd3d3Lmdlb3RydXN0LmNvbS9yZXNvdXJjZXMvcmVwb3NpdG9yeS9s +ZWdhbDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwHwYDVR0jBBgwFoAU +0m/3lvSFP3I8MH0j2oV4m6N8WnwwVwYIKwYBBQUHAQEESzBJMB8GCCsGAQUFBzAB +hhNodHRwOi8vZ24uc3ltY2QuY29tMCYGCCsGAQUFBzAChhpodHRwOi8vZ24uc3lt +Y2IuY29tL2duLmNydDCCAfUGCisGAQQB1nkCBAIEggHlBIIB4QHfAHUA3esdK3oN +T6Ygi4GtgWhwfi6OnQHVXIiNPRHEzbbsvswAAAFbz9h5vQAABAMARjBEAiAx/C0U +5NdHxK4v2oHnstYksb1Vny8PcQkSvgpx9PsZEwIgNTOU70Zc5szG23xdbvtoH5lN +SAoVswiF5gFQS5MGu1sAdgCkuQmQtBhYFIe7E6LMZ3AKPDWYBPkb37jjd80OyA3c +EAAAAVvP2HnZAAAEAwBHMEUCIFGjB8r2H0VDwTUE/aY/Mv+M97sqAvEP1doOcHpg +0qyfAiEArw/S2F7OEcmKGUY1WRBuApfAx5d7hzrTSV/jZv95qJwAdgDuS723dc5g +uuFCaR+r4Z5mow9+X7By2IMAxHuJeqj9ywAAAVvP2HoDAAAEAwBHMEUCIQCH6MFZ +tZF3Cqukt3/69fkU0Y5ePXXx8+xkOXRsIG3EGgIgSmCBWrnmPiiGA3x5QP8I8m4r +Uee0y7s4NQNwjMgHrjwAdgC8eOHfxfY8aEZJM02hD6FfCXlpIAnAgbTz9pF/Ptm4 +pQAAAVvP2HqcAAAEAwBHMEUCIA8e2kAVYYuQCtn4PqK98BuHnLm9rC40DboFLCle +SmQsAiEApbCJR05hr9VkNWmjaaUUGGZdVyUu9XX504LHVWyXZDUwDQYJKoZIhvcN +AQELBQADggEBAEtfBfZ2y5uTohvW3h00Kcuop6Nq7Y59GU3MeizPKtx48DB8qHyd +y5bLFwXzsGA1WkwpKzPbROsTGcAAXJHh03bj24AemUr/J/eQcjkfSoNBdHDpiSsk +VZkQK2fGJDiYJ/r9mxKZcgd2pyN3l2OtVtNMv2dnFGF35UkkeqO3jqImwbypAmRX +HdQV9dvW2YDRjzkebNNey6UwY9+YTSzr4da2hcaMHrj588Eqa4DDgNcY9QnE2RzN +giArA+4RlM4AZ3jC2A756I67hrlvH+lhumHLp06hGfMiQJF1aaauFVSa36HKc3C/ +ty+sLdJbemEJLAr8uNXggFD+U8TKw1S4LSw= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIETzCCAzegAwIBAgIDAjpvMA0GCSqGSIb3DQEBCwUAMEIxCzAJBgNVBAYTAlVT +MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i +YWwgQ0EwHhcNMTMxMTA1MjEzNjUwWhcNMjIwNTIwMjEzNjUwWjBEMQswCQYDVQQG +EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3Qg +U1NMIENBIC0gRzMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDjvn4K +hqPPa209K6GXrUkkTdd3uTR5CKWeop7eRxKSPX7qGYax6E89X/fQp3eaWx8KA7UZ +U9ulIZRpY51qTJEMEEe+EfpshiW3qwRoQjgJZfAU2hme+msLq2LvjafvY3AjqK+B +89FuiGdT7BKkKXWKp/JXPaKDmJfyCn3U50NuMHhiIllZuHEnRaoPZsZVP/oyFysx +j0ag+mkUfJ2fWuLrM04QprPtd2PYw5703d95mnrU7t7dmszDt6ldzBE6B7tvl6QB +I0eVH6N3+liSxsfQvc+TGEK3fveeZerVO8rtrMVwof7UEJrwEgRErBpbeFBFV0xv +vYDLgVwts7x2oR5lAgMBAAGjggFKMIIBRjAfBgNVHSMEGDAWgBTAephojYn7qwVk +DBF9qn1luMrMTjAdBgNVHQ4EFgQU0m/3lvSFP3I8MH0j2oV4m6N8WnwwEgYDVR0T +AQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwNgYDVR0fBC8wLTAroCmgJ4Yl +aHR0cDovL2cxLnN5bWNiLmNvbS9jcmxzL2d0Z2xvYmFsLmNybDAvBggrBgEFBQcB +AQQjMCEwHwYIKwYBBQUHMAGGE2h0dHA6Ly9nMi5zeW1jYi5jb20wTAYDVR0gBEUw +QzBBBgpghkgBhvhFAQc2MDMwMQYIKwYBBQUHAgEWJWh0dHA6Ly93d3cuZ2VvdHJ1 +c3QuY29tL3Jlc291cmNlcy9jcHMwKQYDVR0RBCIwIKQeMBwxGjAYBgNVBAMTEVN5 +bWFudGVjUEtJLTEtNTM5MA0GCSqGSIb3DQEBCwUAA4IBAQCg1Pcs+3QLf2TxzUNq +n2JTHAJ8mJCi7k9o1CAacxI+d7NQ63K87oi+fxfqd4+DYZVPhKHLMk9sIb7SaZZ9 +Y73cK6gf0BOEcP72NZWJ+aZ3sEbIu7cT9clgadZM/tKO79NgwYCA4ef7i28heUrg +3Kkbwbf7w0lZXLV3B0TUl/xJAIlvBk4BcBmsLxHA4uYPL4ZLjXvDuacu9PGsFj45 +SVGeF0tPEDpbpaiSb/361gsDTUdWVxnzy2v189bPsPX1oxHSIFMTNDcFLENaY9+N +QNaFHlHpURceA1bJ8TCt55sRornQMYGbaLHZ6PPmlH7HrhMvh+3QJbBo+d4IWvMp +zNSS +-----END CERTIFICATE-----
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/X509TrustManagerImpl/Symantec/geotrustprimarycag2-chain.pem Tue Apr 16 02:48:40 2019 +0100 @@ -0,0 +1,55 @@ +-----BEGIN CERTIFICATE----- +MIIFcDCCBRegAwIBAgIQHw+Lyn4UTWqRF8/JM7DH+zAKBggqhkjOPQQDAjBHMQsw +CQYDVQQGEwJVUzEXMBUGA1UEChMOR2VvVHJ1c3QsIEluYy4xHzAdBgNVBAMTFkdl +b1RydXN0IEVDQyBFViBTU0wgQ0EwHhcNMTcwNTExMDAwMDAwWhcNMTkwNTAzMjM1 +OTU5WjCB8jETMBEGCysGAQQBgjc8AgEDEwJVUzEZMBcGCysGAQQBgjc8AgECDAhE +ZWxhd2FyZTELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNV +BAcMDU1vdW50YWluIFZpZXcxHTAbBgNVBA8TFFByaXZhdGUgT3JnYW5pemF0aW9u +MRAwDgYDVQQFEwczNDc5NzUwMRcwFQYDVQQKDA5HZW9UcnVzdCwgSW5jLjEYMBYG +A1UECwwPUm9vdCAxMiAtIFZBTElEMSIwIAYDVQQDDBl2YWxpZC1yb290MTIuZ2Vv +dHJ1c3QuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEbvbmcvKl4MkBRBNY +7EOQ7ugwPIPPCp73W++hAcbFPqiDmupl/fqfrbjL06FImeWzDY7cQOhLbv0Ha8Yq +UrL8HKOCAzcwggMzMAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsG +AQUFBwMCMA4GA1UdDwEB/wQEAwIFoDCBqQYDVR0gBIGhMIGeMIGSBgkrBgEEAfAi +AQYwgYQwPwYIKwYBBQUHAgEWM2h0dHBzOi8vd3d3Lmdlb3RydXN0LmNvbS9yZXNv +dXJjZXMvcmVwb3NpdG9yeS9sZWdhbDBBBggrBgEFBQcCAjA1DDNodHRwczovL3d3 +dy5nZW90cnVzdC5jb20vcmVzb3VyY2VzL3JlcG9zaXRvcnkvbGVnYWwwBwYFZ4EM +AQEwKwYDVR0fBCQwIjAgoB6gHIYaaHR0cDovL2ZlLnN5bWNiLmNvbS9mZS5jcmww +VwYIKwYBBQUHAQEESzBJMB8GCCsGAQUFBzABhhNodHRwOi8vZmUuc3ltY2QuY29t +MCYGCCsGAQUFBzAChhpodHRwOi8vZmUuc3ltY2IuY29tL2ZlLmNydDAkBgNVHREE +HTAbghl2YWxpZC1yb290MTIuZ2VvdHJ1c3QuY29tMB8GA1UdIwQYMBaAFABLH5GB +DgtDzgRzu5abgh1mY608MIIBfAYKKwYBBAHWeQIEAgSCAWwEggFoAWYAdQDd6x0r +eg1PpiCLga2BaHB+Lo6dAdVciI09EcTNtuy+zAAAAVv4eJwGAAAEAwBGMEQCIBSx +ZdTP+tDh1rstAJ7vyIPNH7HBE6mCRj9W41ccUwbGAiA7p0ljgNoO/ldknmgTiZdI +FlgEy1KgPQiHYvNS+9MHYwB1AKS5CZC0GFgUh7sTosxncAo8NZgE+RvfuON3zQ7I +DdwQAAABW/h4nDMAAAQDAEYwRAIgWf4vMQ9lrM5xKD+iEVXkC7g5CB3fmuxP7fNp +7qX7PB8CIDNe8HT3262gw3D13MGQccxfUhf7dZ9aCRgk7UEDimsJAHYA7ku9t3XO +YLrhQmkfq+GeZqMPfl+wctiDAMR7iXqo/csAAAFb+Hid8wAABAMARzBFAiAxSFtr +/dpMd53ZSC4N9FomEZhoNnARnYe7cWnTAdKVHAIhALEz0JaOqgYTf0k9yYPuNW4E +Bo26yneH6KtdkMV7/gRoMAoGCCqGSM49BAMCA0cAMEQCIBPb1wYt8d6EdjLXiAZp +UfKGFdQF/oexd5GCB1TU0juDAiBWPRPVggfYfc4gLOkYSqIPvPRmEmEhyY8fqsM6 +3YJgDg== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDyDCCA06gAwIBAgIQDww3Kf30lVv4ZevF7vQy/DAKBggqhkjOPQQDAzCBmDEL +MAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChj +KSAyMDA3IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2 +MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 +eSAtIEcyMB4XDTE2MDEwNzAwMDAwMFoXDTI2MDEwNjIzNTk1OVowRzELMAkGA1UE +BhMCVVMxFzAVBgNVBAoTDkdlb1RydXN0LCBJbmMuMR8wHQYDVQQDExZHZW9UcnVz +dCBFQ0MgRVYgU1NMIENBMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEF136Fo2A +bY7q0YbhVBTL4HNFaJyTdoU3y+o8YdhxQuw1SrpQT9EwLTyx8Xzf/LNPeoalIKNu +U/3LQgNct6Fk9aOCAcgwggHEMA4GA1UdDwEB/wQEAwIBBjAdBgNVHSUEFjAUBggr +BgEFBQcDAQYIKwYBBQUHAwIwLgYIKwYBBQUHAQEEIjAgMB4GCCsGAQUFBzABhhJo +dHRwOi8vZy5zeW1jZC5jb20wEgYDVR0TAQH/BAgwBgEB/wIBADCBqQYDVR0gBIGh +MIGeMAcGBWeBDAEBMIGSBgkrBgEEAfAiAQYwgYQwPwYIKwYBBQUHAgEWM2h0dHBz +Oi8vd3d3Lmdlb3RydXN0LmNvbS9yZXNvdXJjZXMvcmVwb3NpdG9yeS9sZWdhbDBB +BggrBgEFBQcCAjA1GjNodHRwczovL3d3dy5nZW90cnVzdC5jb20vcmVzb3VyY2Vz +L3JlcG9zaXRvcnkvbGVnYWwwNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2cuc3lt +Y2IuY29tL0dlb1RydXN0UENBLUcyLmNybDArBgNVHREEJDAipCAwHjEcMBoGA1UE +AxMTU1lNQy1FQ0MtQ0EtcDI1Ni0zMjAdBgNVHQ4EFgQUAEsfkYEOC0POBHO7lpuC +HWZjrTwwHwYDVR0jBBgwFoAUFV81V1FV+yWyrQNp/AGj+r4RVdUwCgYIKoZIzj0E +AwMDaAAwZQIweZGj+Ar54cOBtC1I6rkfdNOtxSg77WBAvvsEv1+knWbbu8Acroz1 +Q9xqHnHLXpgRAjEAxNA5KzWxutl/kVj/7bUCYtvSWLfmb2ZTTsvof7VjjWlRnPje +wLtx+yN5EV7LPWDi +-----END CERTIFICATE-----
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/X509TrustManagerImpl/Symantec/geotrustprimarycag3-chain.pem Tue Apr 16 02:48:40 2019 +0100 @@ -0,0 +1,67 @@ +-----BEGIN CERTIFICATE----- +MIIG6jCCBdKgAwIBAgIQZfxPPcDd0zSbl2UQK6dtRzANBgkqhkiG9w0BAQsFADBG +MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEfMB0GA1UEAxMW +R2VvVHJ1c3QgU0hBMjU2IFNTTCBDQTAeFw0xNzAyMDEwMDAwMDBaFw0yMDAzMDIy +MzU5NTlaMHgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRYwFAYD +VQQHDA1Nb3VudGFpbiBWaWV3MR0wGwYDVQQKDBRTeW1hbnRlYyBDb3Jwb3JhdGlv +bjEdMBsGA1UEAwwUc3NsdGVzdDEzLmJidGVzdC5uZXQwggEiMA0GCSqGSIb3DQEB +AQUAA4IBDwAwggEKAoIBAQDV734wSAESareltMadza6jJ0SVi6bLb/Q23La5v5Z/ +rFCdPzSRrMMKj08NfAA/i1k+TF/d7NZ+rrFvCIN33kfDzSLvIQiJh7NZ/yivA9DY +eH7RAuVXfrsqhsqpgHVNSmMXxaGxOIJ4RcEx0RB3vbb3frm46lCLMH0uCavJ7Txo +gDJpAG6AP/hF524IVJcIcHxhJqZo1pQO/iwb/uNGkqwRuAeL9zKhv0tYyiHKNqyW +AXk51Nzm+TQq0flw0nw7EC9f+VNrquiO5j76JKeL+DaxpUtftTpzL5b5oM/LXwDt +62VUMujOyVuKPIj1ieQVdhETSDvf340tQI7MB4qFrHlFAgMBAAGjggOgMIIDnDAf +BgNVHREEGDAWghRzc2x0ZXN0MTMuYmJ0ZXN0Lm5ldDAJBgNVHRMEAjAAMA4GA1Ud +DwEB/wQEAwIFoDArBgNVHR8EJDAiMCCgHqAchhpodHRwOi8vZ2ouc3ltY2IuY29t +L2dqLmNybDCBnQYDVR0gBIGVMIGSMIGPBgZngQwBAgIwgYQwPwYIKwYBBQUHAgEW +M2h0dHBzOi8vd3d3Lmdlb3RydXN0LmNvbS9yZXNvdXJjZXMvcmVwb3NpdG9yeS9s +ZWdhbDBBBggrBgEFBQcCAjA1DDNodHRwczovL3d3dy5nZW90cnVzdC5jb20vcmVz +b3VyY2VzL3JlcG9zaXRvcnkvbGVnYWwwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsG +AQUFBwMCMB8GA1UdIwQYMBaAFBRnju2DT9YenUAEDARGoXA0sg9yMFcGCCsGAQUF +BwEBBEswSTAfBggrBgEFBQcwAYYTaHR0cDovL2dqLnN5bWNkLmNvbTAmBggrBgEF +BQcwAoYaaHR0cDovL2dqLnN5bWNiLmNvbS9nai5jcnQwggH2BgorBgEEAdZ5AgQC +BIIB5gSCAeIB4AB1AN3rHSt6DU+mIIuBrYFocH4ujp0B1VyIjT0RxM227L7MAAAB +WfvjZWcAAAQDAEYwRAIgIxFLEWNCRmGQl2o+3psXrWAd88rz9G1JbxbAgHFpXmAC +IFxZpWwuj1Aq4Yx6VrBBqvA+K/GlNY2OcThPaeoj3jdfAHYApLkJkLQYWBSHuxOi +zGdwCjw1mAT5G9+443fNDsgN3BAAAAFZ++NlpAAABAMARzBFAiB+iko2tw6USdc2 +E956ZIpXy9TTUiVtpKHzKFhuR7mdwwIhAMwTisbIGh6UTdjXnPktWPFcWhfxQOPB +U41c/v7zuFV9AHcA7ku9t3XOYLrhQmkfq+GeZqMPfl+wctiDAMR7iXqo/csAAAFZ +++NnWwAABAMASDBGAiEAmqY4AhQPt/tU1iR0LvrlpIjKlc0IArbxENVkVbNTYwcC +IQCPlJZQb7mmlPwjy//aJMyOtEeVFb6DzfM4uhJiSrU9WAB2ALx44d/F9jxoRkkz +TaEPoV8JeWkgCcCBtPP2kX8+2bilAAABWfvjZmgAAAQDAEcwRQIgMcV63d6G3RHm +rN34V1zDiAbKG1k/pDEErcfZ+8Y0GdwCIQCcuqmKjnpUYs8ps4/NSx78U2ssNuLA ++QDpYuH1XKHCUTANBgkqhkiG9w0BAQsFAAOCAQEAjYdQJYtrhPJTIHcsyksTWGHS +cpIt7y1bzp+t06KYn6x+ax+09sTJQzr7L2BA3h24blgMWr2yEH0mvQdVncBFt8xr +9O8jeg5dHSeJknnDlXOA23Z2NJLanX7m29/713DxZ+HJXFx0Wiz5mtuTo7Q6FpQF +SI44v0fbUTb7LV81fFpyriroZTlpiMI01NLWGldyCchC795fEYiibSvr1uidjp9i ++MKppG3t3YXb1/Wu2A21b6Z4akgl021A5cJcg8/Q3wjYMqQTtuUEezsBl2jLoey1 +pa/ag3epMe19zTq4iqS3Z4r+2jrZ4IjnKmkDKo4uKvTAfUX2Yu2+Lm3E6Vfdow== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIExzCCA6+gAwIBAgIQQYISfRLZxrMhOUMSVmQAuDANBgkqhkiG9w0BAQsFADCB +mDELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsT +MChjKSAyMDA4IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s +eTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhv +cml0eSAtIEczMB4XDTEzMDUyMzAwMDAwMFoXDTIzMDUyMjIzNTk1OVowRjELMAkG +A1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xHzAdBgNVBAMTFkdlb1Ry +dXN0IFNIQTI1NiBTU0wgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB +AQDGqQtdF6V9xs8q78Zm0UIeX4N4aJGv5qeL8B1EAQoZypzUix3hoZCjwVu011tq +i/wOSR7CYin+gBU5i4EqJ7X7EqgFIgvFLPXZmN0WLztm52KiQzKsj7WFyFIGLFzA +d/pn94PoXgWNyKuhFjKK0kDshjocI6mNtQDecr2FVf4GAWBdrbPgZXOlkhSelFZv +k+6vqTowJUqOCYTvt9LV15tJzenAXmdxIqxQkEMgXaGjFYP9/Kc5vGtlSBJg/90j +szqq9J+cN1NBokeTgTMJ5SLGyBxJoW6NzIOzms3qQ/IZ0yTLqCmuUsz0CCewhOrO +J7XhNBNzklyHhirGsGg2rcsJAgMBAAGjggFcMIIBWDA7BggrBgEFBQcBAQQvMC0w +KwYIKwYBBQUHMAGGH2h0dHA6Ly9wY2EtZzMtb2NzcC5nZW90cnVzdC5jb20wEgYD +VR0TAQH/BAgwBgEB/wIBADBMBgNVHSAERTBDMEEGCmCGSAGG+EUBBzYwMzAxBggr +BgEFBQcCARYlaHR0cDovL3d3dy5nZW90cnVzdC5jb20vcmVzb3VyY2VzL2NwczA7 +BgNVHR8ENDAyMDCgLqAshipodHRwOi8vY3JsLmdlb3RydXN0LmNvbS9HZW9UcnVz +dFBDQS1HMy5jcmwwDgYDVR0PAQH/BAQDAgEGMCoGA1UdEQQjMCGkHzAdMRswGQYD +VQQDExJWZXJpU2lnbk1QS0ktMi00MTYwHQYDVR0OBBYEFBRnju2DT9YenUAEDARG +oXA0sg9yMB8GA1UdIwQYMBaAFMR5yo6hTgMdHNxr2zFblD4/MH8tMA0GCSqGSIb3 +DQEBCwUAA4IBAQAQEOryENYIRuLBjz42WcgrD/5N7OP4tlYxeCXUdvII3e8/zYsc +fqp//AuoI2RRs4fWCfoi+scKUejOuPYDcOAbWrmxspMREPmXBQcpbG1XJVTo+Wab +Dvvbn+6Wb2XLH9hVzjH6zwL00H9QZv8veZulwt/Wz8gVg5aEmLJG1F8TqD6nNJwF +ONrP1mmVqSaHdgHXslEPgWlGJhyZtoNY4ztYj9y0ccC5v0KcHAOe5Eao6rnBzfZb +qTyW+3mkM3Onnni5cNxydMQyyAAbye9I0/s6m/r+eppAaRzI2ig3C9OjuX6WzCso +w1Zsb+nbUrH6mvvnr7WXpiLDxaiTsQDJB7J9 +-----END CERTIFICATE-----
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/X509TrustManagerImpl/Symantec/geotrustuniversalca-chain.pem Tue Apr 16 02:48:40 2019 +0100 @@ -0,0 +1,71 @@ +-----BEGIN CERTIFICATE----- +MIIHATCCBemgAwIBAgIQJmVwMHBfVctB6q6UbCC4eDANBgkqhkiG9w0BAQsFADBH +MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMX +R2VvVHJ1c3QgRVYgU1NMIENBIC0gRzYwHhcNMTcwNTA5MDAwMDAwWhcNMTkwNTAz +MjM1OTU5WjCB8jETMBEGCysGAQQBgjc8AgEDEwJVUzEZMBcGCysGAQQBgjc8AgEC +DAhEZWxhd2FyZTELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAU +BgNVBAcMDU1vdW50YWluIFZpZXcxHTAbBgNVBA8TFFByaXZhdGUgT3JnYW5pemF0 +aW9uMRAwDgYDVQQFEwczNDc5NzUwMRcwFQYDVQQKDA5HZW9UcnVzdCwgSW5jLjEY +MBYGA1UECwwPUm9vdCAxNCAtIFZBTElEMSIwIAYDVQQDDBl2YWxpZC1yb290MTQu +Z2VvdHJ1c3QuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAua4C +iQ+Sk3VXblrh9xI6DqxELgjGxLOxORgayEM1/x4lKC5Dah5Ey9jeDhy6eDLJRXce +JHjR5FYFNpjRpp8w58SzmosAQk7tgRy6HGPtVUUXCVkfUDJ6LIcZE1UcwKO3CUdh +2Dn3naVCNImdqqoUTCr4H/8iIy+1l4aUDnukiAsTV6M2Len0UQpD8MY2KyVmWNJz +GLGzZKXKwU42CZwK8hR+xUH/BSEcWvfU2bFShVGIY1CCpJ5vdhi0QMaRfDzpAXVw +3gvO5bN7RvDD8tABtLUjpnm0P7HzxkVkEO+BGg0P+qpw4bflu+TE7die+pFY1Skz +1rEFOvMEVOCqoinanwIDAQABo4IDOzCCAzcwJAYDVR0RBB0wG4IZdmFsaWQtcm9v +dDE0Lmdlb3RydXN0LmNvbTAJBgNVHRMEAjAAMA4GA1UdDwEB/wQEAwIFoDCBqQYD +VR0gBIGhMIGeMIGSBgkrBgEEAfAiAQYwgYQwPwYIKwYBBQUHAgEWM2h0dHBzOi8v +d3d3Lmdlb3RydXN0LmNvbS9yZXNvdXJjZXMvcmVwb3NpdG9yeS9sZWdhbDBBBggr +BgEFBQcCAjA1DDNodHRwczovL3d3dy5nZW90cnVzdC5jb20vcmVzb3VyY2VzL3Jl +cG9zaXRvcnkvbGVnYWwwBwYFZ4EMAQEwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsG +AQUFBwMCMFcGCCsGAQUFBwEBBEswSTAfBggrBgEFBQcwAYYTaHR0cDovL2ZpLnN5 +bWNkLmNvbTAmBggrBgEFBQcwAoYaaHR0cDovL2ZpLnN5bWNiLmNvbS9maS5jcnQw +KwYDVR0fBCQwIjAgoB6gHIYaaHR0cDovL2ZpLnN5bWNiLmNvbS9maS5jcmwwHwYD +VR0jBBgwFoAUvpmWhYTv5p/5H+H8ZmdbVqX6i1MwggGABgorBgEEAdZ5AgQCBIIB +cASCAWwBagB3AN3rHSt6DU+mIIuBrYFocH4ujp0B1VyIjT0RxM227L7MAAABW/fm +zy4AAAQDAEgwRgIhALUgY0DrJaqjpgv19bbS434UDMpUfIfZ7qyxz30M1LiQAiEA +4dXlkRJLc3i+DcFUNSjRh8dKPLZMC3DhD4bm7tDQaWwAdgCkuQmQtBhYFIe7E6LM +Z3AKPDWYBPkb37jjd80OyA3cEAAAAVvuRpVUAAAEAwBHMEUCIGUbCcQ2agQi+sWo +zudL0F2rSS4elFAgHy/nSzGb/fl0AiEA5zLqvTsn8ioQ89KycY3HocNCLAPtqDqe +t9+6pcJnVFsAdwDuS723dc5guuFCaR+r4Z5mow9+X7By2IMAxHuJeqj9ywAAAVvu +RpV3AAAEAwBIMEYCIQDrKkvy08fPVx4vbVO4wBYw7tpqkmrWTaKCIs7Tx9utYwIh +ANuH3S2ngCM7WzCebmbLFVDmaNxQki3kmZbCOp358sRvMA0GCSqGSIb3DQEBCwUA +A4IBAQAOEMVj7HwG97PurqFqoa9JI2adgj8er1hc70dIGkTt21OKLWvWp0Yafcjx +qqEByFjzkF0/yreVmbxl1zf7utUMfWslmv7ElXDvS79lZ2UWO6vptyaZM6VSJ2s+ +pmGHJaQgw3AbDmu5yLmUPlHwOttv//AOuaZvrQISzrwmMs60sHn+pS7qtSdL3lYa +PtqhCBQNJoLDstn57B/aLBUYx5rSqhK68CCxY4ZcA1i02RakZJIhGbOAOy4x5pZH +uZiiRFTxgZRGNNUDjrhmVVk7cQDu3eDRDkUKD9m7796GJ+aFDZlvzmORaNW5GYjv +0qIRajIKmohnwumn+xaJFpmDEuw+ +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFUjCCAzqgAwIBAgIQAQAZ9apyafiMHhwSEeyNTzANBgkqhkiG9w0BAQsFADBF +MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMV +R2VvVHJ1c3QgVW5pdmVyc2FsIENBMB4XDTE3MDUwMTE0MTcxNloXDTI3MDQyOTE0 +MTcxNlowRzELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xIDAe +BgNVBAMTF0dlb1RydXN0IEVWIFNTTCBDQSAtIEc2MIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEArvBCvG8ORCUSTiERfNmMdtEvKhvmnV8MrSLOw6t3q24c ++r/y69NGdUJArGmBv8crE5Vxd5mYlecmflrJtyuh08HDFc4Mr4yh2xcGmeKA7Uz5 +Q/Wpfropvop1cFB3r/8BwpfxortVi2jkawQ89TDo3l0RacJrjM29dq+rQwqIWvfK +dHuU58t54CsXzvJrqDnhL4v+LQ2mqZMbAfh1Mhh8MftEH5UfOSgY2uXwnu5vERYI +3cl0nakgoJOyUlb187iFd/TrSrYGquv8dYAKTKOTd44YNwxb43iKk/esqxOTiqW8 +rAFv6/E6aOmHwqyP9l7LMtLzVE27ra1wESMR70JttwIDAQABo4IBOjCCATYwHwYD +VR0jBBgwFoAU2rsuqrAMuIgmUXRcbQPTwNiPetYwHQYDVR0OBBYEFL6ZloWE7+af ++R/h/GZnW1al+otTMA4GA1UdDwEB/wQEAwIBBjAuBggrBgEFBQcBAQQiMCAwHgYI +KwYBBQUHMAGGEmh0dHA6Ly9nLnN5bWNkLmNvbTASBgNVHRMBAf8ECDAGAQH/AgEA +MB8GA1UdIAQYMBYwBwYFZ4EMAQEwCwYJKwYBBAHwIgEGMDUGA1UdHwQuMCwwKqAo +oCaGJGh0dHA6Ly9nLnN5bWNiLmNvbS9jcmxzL2d0dW5pY2ExLmNybDAdBgNVHSUE +FjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwKQYDVR0RBCIwIKQeMBwxGjAYBgNVBAMT +EVN5bWFudGVjUEtJLTItNzU3MA0GCSqGSIb3DQEBCwUAA4ICAQA8iM9XJ01hEzSM +iATIdK/z+F1Vtm9hHjp0FzkOvVYkp7v6LIkazg299fyAy2+A/tpSzKyMIzy5B2R/ +sjbWykIK+3vtOlgUNilP7EoudiCjR/692THUtJ/QjPNzFYhO9apU2Wpc33ZYMH0Q +YKUPmAd7eBmsdVKHNLENcMjjCjnkjXnYtxq/jv2R4QhD83tbFnvBoKjxi2vAfDXG +xN8aItVg/FSdScZCMhe0w/HLzcN6N3NCGDBn2PjF0o3QLJa9yVSrvJ9Nh3my6rUb +gMhlfFEQXTmLxucqL5/n5lXyUWd0kTxFv++TalTeqYf3G/oeu5kcpfjUJREp/9ed +gQqhDEGIuJFrMm4qi+sNDrq0OkLBHCqefFArTz2ApiI9zd9pcKfjS3f/EB87AVmW +3m1lfqPeS+w+vBg7VCGNY9gGNUe+w4juTEBiwIjnp7I+aBVnIwxV9PdJoj1ZaLCx +U8AEN6tXD8IcCquLxs3fBsF85svvUfK8qh3ufKB3I3RHGq5Asmtvc5URcyeuA+d2 +zPQ1qAXH5m3DLkb0KdAvJ5E6mQ2S2aqwJPXtpqx2J40C1Qx+uUsHG2vDoT3ZTazt +LPBIIqF2YJr1hr760yXM3Jf14eyc+RXPrjA1mc/CKNbv6SvU5MvlYj+Vvx70y+k8 +U5ev+YdiYoYu0wQtDJQCJjM+eavqxQ== +-----END CERTIFICATE-----
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/X509TrustManagerImpl/Symantec/thawteprimaryrootca-chain.pem Tue Apr 16 02:48:40 2019 +0100 @@ -0,0 +1,66 @@ +-----BEGIN CERTIFICATE----- +MIIG/TCCBeWgAwIBAgIQfVQyuY0yb1Q+TZDQHtRC8TANBgkqhkiG9w0BAQsFADBH +MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMX +R2VvVHJ1c3QgRVYgU1NMIENBIC0gRzQwHhcNMTcwNTAzMDAwMDAwWhcNMTkwNTAz +MjM1OTU5WjCB8jETMBEGCysGAQQBgjc8AgEDEwJVUzEZMBcGCysGAQQBgjc8AgEC +DAhEZWxhd2FyZTELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAU +BgNVBAcMDU1vdW50YWluIFZpZXcxHTAbBgNVBA8TFFByaXZhdGUgT3JnYW5pemF0 +aW9uMRAwDgYDVQQFEwczNDc5NzUwMRcwFQYDVQQKDA5HZW9UcnVzdCwgSW5jLjEY +MBYGA1UECwwPUm9vdCAxMSAtIFZBTElEMSIwIAYDVQQDDBl2YWxpZC1yb290MTEu +Z2VvdHJ1c3QuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy5Wn +8CUYyHQnisa3ihcezpRBrKNF9OGb9ye9G4mUFRAHoFlNdwVP3qxBtEo7N6ylZ7G0 +tMcLwqy+cdMZlyCw0qPQrJQXqp5AEL034IMeckSvR9I2RyR7DUW3kVtKRsDiAUo9 +4r8h/5ZT96OW/jtdE2WPr0Wt5r0DyG8xzUbUdh5tYFwlxMJLeHgomqsG1WXBEDvS +cTJk9JMZpH5d1FYux+T0BkJsYyj0NRcDnQuc6P4QIkpim3wsOBKMa7beEiCanmcK +dSBrBfl2iep67VfOEYfjYTDOwqwaknSfb2H33e0lpunI76Rwv1uZkr/4ciDyaNZS +IsLh1i57eKvWqn+G9wIDAQABo4IDNzCCAzMwJAYDVR0RBB0wG4IZdmFsaWQtcm9v +dDExLmdlb3RydXN0LmNvbTAJBgNVHRMEAjAAMA4GA1UdDwEB/wQEAwIFoDArBgNV +HR8EJDAiMCCgHqAchhpodHRwOi8vZ20uc3ltY2IuY29tL2dtLmNybDCBqQYDVR0g +BIGhMIGeMIGSBgkrBgEEAfAiAQYwgYQwPwYIKwYBBQUHAgEWM2h0dHBzOi8vd3d3 +Lmdlb3RydXN0LmNvbS9yZXNvdXJjZXMvcmVwb3NpdG9yeS9sZWdhbDBBBggrBgEF +BQcCAjA1DDNodHRwczovL3d3dy5nZW90cnVzdC5jb20vcmVzb3VyY2VzL3JlcG9z +aXRvcnkvbGVnYWwwBwYFZ4EMAQEwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUF +BwMCMB8GA1UdIwQYMBaAFN7PXFC3rgIfFReqFugNtSidalrzMFcGCCsGAQUFBwEB +BEswSTAfBggrBgEFBQcwAYYTaHR0cDovL2dtLnN5bWNkLmNvbTAmBggrBgEFBQcw +AoYaaHR0cDovL2dtLnN5bWNiLmNvbS9nbS5jcnQwggF8BgorBgEEAdZ5AgQCBIIB +bASCAWgBZgB1AN3rHSt6DU+mIIuBrYFocH4ujp0B1VyIjT0RxM227L7MAAABW8/Y +RIwAAAQDAEYwRAIgWDLmmEUz8FyqMxfyweXN18EAYitvP3XPnU3XkJzRSrQCIB5y +KErRbSiDkj43iFWQVodPA70HtcgdIzk4X3KA7thOAHYApLkJkLQYWBSHuxOizGdw +Cjw1mAT5G9+443fNDsgN3BAAAAFbz9hEtwAABAMARzBFAiAjTCcAEJDj9M/xY7a/ +pysTrl0MrE6rMzpotNZ5kik1PgIhAMTAYXIUeA7LqKhYlvOvW/cH+uB+8329J8cy +xMF8dmEJAHUA7ku9t3XOYLrhQmkfq+GeZqMPfl+wctiDAMR7iXqo/csAAAFbz9hE +3gAABAMARjBEAiA7UGcNzFIEVvXeJRuWPfhA8t0JOjl//7ZuLYgdnt6/jAIgIHyH +QHLo2q5o99msj2s8o1BaTmxxnSF4TZPm8iZGLywwDQYJKoZIhvcNAQELBQADggEB +AGBUtaCjWXpAPSc7ypv6f+IJGYfGHR7NLBLLjTytKHcIx5Hb0YT14TFWnXacaSHk +XL/vY3v3CrdGqn6UZb4UEdyB54juG6J7DLQF/l8oeG0GzPQLlSOt0ZU4Cq9DayO0 +OFS6jD7K7FqalSiBzvFnDFmWqLXZQaO/dFPHvZVIdhfO6Vl/3yH+nkphrc8AiHqV +0LkFaoki3RUJMqPvb1pyZ41MzMVsS/LMPoxS0JUl+YKAhL5H1JS1OPMY1B++k2hs +BoScopXAC1xsOkpQWg+U2+mMnAebcCeFWtKrjVUIA+lzaAr6jbBOK9dLSschRXBe +R9xGJ3I9J4t0pKD5lFr9+fQ= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEbjCCA1agAwIBAgIQboqQ68/wRIpyDQgF0IKlRDANBgkqhkiG9w0BAQsFADBY +MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMo +R2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xMzEw +MzEwMDAwMDBaFw0yMzEwMzAyMzU5NTlaMEcxCzAJBgNVBAYTAlVTMRYwFAYDVQQK +Ew1HZW9UcnVzdCBJbmMuMSAwHgYDVQQDExdHZW9UcnVzdCBFViBTU0wgQ0EgLSBH +NDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANm0BfI4Zw8J53z1Yyrl +uV6oEa51cdlMhGetiV38KD0qsKXV1OYwCoTU5BjLhTfFRnHrHHtp22VpjDAFPgfh +bzzBC2HmOET8vIwvTnVX9ZaZfD6HHw+QS3DDPzlFOzpry7t7QFTRi0uhctIE6eBy +GpMRei/xq52cmFiuLOp3Xy8uh6+4a+Pi4j/WPeCWRN8RVWNSL/QmeMQPIE0KwGhw +FYY47rd2iKsYj081HtSMydt+PUTUNozBN7VZW4f56fHUxSi9HdzMlnLReqGnILW4 +r/hupWB7K40f7vQr1mnNr8qAWCnoTAAgikkKbo6MqNEAEoS2xeKVosA7pGvwgtCW +XSUCAwEAAaOCAUMwggE/MBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQD +AgEGMC8GCCsGAQUFBwEBBCMwITAfBggrBgEFBQcwAYYTaHR0cDovL2cyLnN5bWNi +LmNvbTBHBgNVHSAEQDA+MDwGBFUdIAAwNDAyBggrBgEFBQcCARYmaHR0cHM6Ly93 +d3cuZ2VvdHJ1c3QuY29tL3Jlc291cmNlcy9jcHMwNAYDVR0fBC0wKzApoCegJYYj +aHR0cDovL2cxLnN5bWNiLmNvbS9HZW9UcnVzdFBDQS5jcmwwKQYDVR0RBCIwIKQe +MBwxGjAYBgNVBAMTEVN5bWFudGVjUEtJLTEtNTM4MB0GA1UdDgQWBBTez1xQt64C +HxUXqhboDbUonWpa8zAfBgNVHSMEGDAWgBQs1VBBlxWL8I82YVtK+2vZmckzkjAN +BgkqhkiG9w0BAQsFAAOCAQEAtI69B7mahew7Z70HYGHmhNHU7+sbuguCS5VktmZT +I723hN3ke40J2s+y9fHDv4eEvk6mqMLnEjkoNOCkVkRADJ+IoxXT6NNe4xwEYPtp +Nk9qfgwqKMHzqlgObM4dB8NKwJyNw3SxroLwGuH5Tim9Rt63Hfl929kPhMuSRcwc +sxj2oM9xbwwum9Its5mTg0SsFaqbLmfsT4hpBVZ7i7JDqTpsHBMzJRv9qMhXAvsc +4NG9O1ZEZcNj9Rvv7DDZ424uE+k5CCoMcvOazPYnKYTT70zHhBFlH8bjgQPbh8x4 +97Wdlj5qf7wRhXp15kF9Dc/55YVpJY/HjQct+GkPy0FTAA== +-----END CERTIFICATE-----
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/X509TrustManagerImpl/Symantec/thawteprimaryrootcag2-chain.pem Tue Apr 16 02:48:40 2019 +0100 @@ -0,0 +1,51 @@ +-----BEGIN CERTIFICATE----- +MIIFNjCCBN2gAwIBAgIQWCw1fnWLWedosJcJlxQbhDAKBggqhkjOPQQDAjBDMQsw +CQYDVQQGEwJVUzEVMBMGA1UEChMMdGhhd3RlLCBJbmMuMR0wGwYDVQQDExR0aGF3 +dGUgRUNDIEVWIFNTTCBDQTAeFw0xNzA1MTEwMDAwMDBaFw0xOTA1MDgyMzU5NTla +MIHsMRMwEQYLKwYBBAGCNzwCAQMTAlVTMRkwFwYLKwYBBAGCNzwCAQIMCERlbGF3 +YXJlMRUwEwYDVQQKDAxUaGF3dGUsIEluYy4xCzAJBgNVBAYTAlVTMRMwEQYDVQQI +DApDYWxpZm9ybmlhMRYwFAYDVQQHDA1Nb3VudGFpbiBWaWV3MR0wGwYDVQQPExRQ +cml2YXRlIE9yZ2FuaXphdGlvbjEQMA4GA1UEBRMHMzg5ODI2MTEXMBUGA1UECwwO +Um9vdCA4IC0gVkFMSUQxHzAdBgNVBAMMFnZhbGlkLXJvb3Q4LnRoYXd0ZS5jb20w +WTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATVxsOfZ4/2K7l7FYl6ejjp5aNuX1J9 +gqfb8WdGQdmKW8TVlhzM9p3BQ61hcISHVW01ZzR2PgYQ5aALzTaZ/Vt9o4IDBzCC +AwMwCQYDVR0TBAIwADB8BgNVHSAEdTBzMGgGC2CGSAGG+EUBBzABMFkwJgYIKwYB +BQUHAgEWGmh0dHBzOi8vd3d3LnRoYXd0ZS5jb20vY3BzMC8GCCsGAQUFBwICMCMM +IWh0dHBzOi8vd3d3LnRoYXd0ZS5jb20vcmVwb3NpdG9yeTAHBgVngQwBATArBgNV +HR8EJDAiMCCgHqAchhpodHRwOi8vdHEuc3ltY2IuY29tL3RxLmNybDAdBgNVHSUE +FjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH/BAQDAgWgMFcGCCsGAQUF +BwEBBEswSTAfBggrBgEFBQcwAYYTaHR0cDovL3RxLnN5bWNkLmNvbTAmBggrBgEF +BQcwAoYaaHR0cDovL3RxLnN5bWNiLmNvbS90cS5jcnQwIQYDVR0RBBowGIIWdmFs +aWQtcm9vdDgudGhhd3RlLmNvbTAfBgNVHSMEGDAWgBRbM681oBoZN0INV+a8vWtj +IMKWATCCAX0GCisGAQQB1nkCBAIEggFtBIIBaQFnAHYA3esdK3oNT6Ygi4GtgWhw +fi6OnQHVXIiNPRHEzbbsvswAAAFb+KihvQAABAMARzBFAiBghdkYlqbxNHmxETaN +TKTcLlmD8amIlOWP7KnL9/WrBAIhANAssLlY1gvBLJ61ULFbdrVTMi1dqMXPBec8 +LfKdwER4AHYApLkJkLQYWBSHuxOizGdwCjw1mAT5G9+443fNDsgN3BAAAAFb+Kih +ywAABAMARzBFAiAW4sOV17H0V1n4pwnfeeKflHLmr1t4pB9KBCYGh0NaEgIhAMUI +rLg1SuTCV2pXxRvWkzIAiifaJcPbxPhEp4DGz2d5AHUA7ku9t3XOYLrhQmkfq+Ge +ZqMPfl+wctiDAMR7iXqo/csAAAFb+Kih/AAABAMARjBEAiA1u/TczjmZ5EDB4Jue +TYEUyFHFDj3ytCItXk6vzcVPYgIgT6Yc1ugrgocOLqpDsRoQ7Jll/5PIi7QFg5N8 +//OhX+kwCgYIKoZIzj0EAwIDRwAwRAIgCK09KwyaiPsZZMtkjCec9zeVx7YRk8oh +PvV2UnQf6sQCIAfYgjH7ZQeIKCMi4ctdTja1ng/lU8ibnkpU5NDZGaTN +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDgDCCAwagAwIBAgIQH/L8vGMmqr0oZpOZH0PsITAKBggqhkjOPQQDAzCBhDEL +MAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMp +IDIwMDcgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAi +BgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMjAeFw0xNjAxMDcwMDAw +MDBaFw0yNjAxMDYyMzU5NTlaMEMxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwx0aGF3 +dGUsIEluYy4xHTAbBgNVBAMTFHRoYXd0ZSBFQ0MgRVYgU1NMIENBMFkwEwYHKoZI +zj0CAQYIKoZIzj0DAQcDQgAEmcXM1zsNS0E2+7pcpYHdwqumr+KIIt3jEJA6jBBm +1SoBGgZESt6OKROJBt2sZJhUl4oU0q5kINTS/bG+eYTTlqOCAZgwggGUMA4GA1Ud +DwEB/wQEAwIBBjAuBggrBgEFBQcBAQQiMCAwHgYIKwYBBQUHMAGGEmh0dHA6Ly90 +LnN5bWNkLmNvbTASBgNVHRMBAf8ECDAGAQH/AgEAMHwGA1UdIAR1MHMwBwYFZ4EM +AQEwaAYLYIZIAYb4RQEHMAEwWTAmBggrBgEFBQcCARYaaHR0cHM6Ly93d3cudGhh +d3RlLmNvbS9jcHMwLwYIKwYBBQUHAgIwIxohaHR0cHM6Ly93d3cudGhhd3RlLmNv +bS9yZXBvc2l0b3J5MDQGA1UdHwQtMCswKaAnoCWGI2h0dHA6Ly90LnN5bWNiLmNv +bS9UaGF3dGVQQ0EtRzIuY3JsMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcD +AjArBgNVHREEJDAipCAwHjEcMBoGA1UEAxMTU1lNQy1FQ0MtQ0EtcDI1Ni0zMTAd +BgNVHQ4EFgQUWzOvNaAaGTdCDVfmvL1rYyDClgEwHwYDVR0jBBgwFoAUmtgAMADn +a3+FGO6Lts6KDPgR4bswCgYIKoZIzj0EAwMDaAAwZQIwMMf+C0NMBVt58Of4YvVO +mVS0OYfzEiB4AOz8QF9pmEyaCAelGeOmq2pOLDEsQbKzAjEA2WTDVMhnnJI3NSnD +itmCtBQnW6NEAohvLUsB4iVehDAJK3mNY8FbYafl4LjFzA4V +-----END CERTIFICATE-----
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/X509TrustManagerImpl/Symantec/thawteprimaryrootcag3-chain.pem Tue Apr 16 02:48:40 2019 +0100 @@ -0,0 +1,67 @@ +-----BEGIN CERTIFICATE----- +MIIG2TCCBcGgAwIBAgIQdS+C2M35zv3l1EWcCL2MfTANBgkqhkiG9w0BAQsFADBX +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhhd3RlLCBJbmMuMTEwLwYDVQQDEyh0 +aGF3dGUgRXh0ZW5kZWQgVmFsaWRhdGlvbiBTSEEyNTYgU1NMIENBMB4XDTE3MDUw +ODAwMDAwMFoXDTE5MDUwODIzNTk1OVowgewxEzARBgsrBgEEAYI3PAIBAxMCVVMx +GTAXBgsrBgEEAYI3PAIBAgwIRGVsYXdhcmUxFTATBgNVBAoMDFRoYXd0ZSwgSW5j +LjELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDU1v +dW50YWluIFZpZXcxHTAbBgNVBA8TFFByaXZhdGUgT3JnYW5pemF0aW9uMRAwDgYD +VQQFEwczODk4MjYxMRcwFQYDVQQLDA5Sb290IDkgLSBWQUxJRDEfMB0GA1UEAwwW +dmFsaWQtcm9vdDkudGhhd3RlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC +AQoCggEBAMGMwXWgvpsjK9b7JwFIs8Ch6EORhDfWRMk16KGdnO0jeIh1D4NRi1GL +g0WcHiW06dFOF9UaT/Lg66mJLjHguftTHSoi9/cuMHcy0gbbWR+j+6RMxr7RwI6S +eC8VesPWxM+5xW6bI+QBWq678ZK8JYr/cALXX+8ekDhY8vswIdzkUp7qHekkoja6 +4ki2JyJO4Q/uf/gWfohsGc88fEiMAQi3qhyZlHm7QzjeUoB0WgPC+CVB+vxSmZip +6rkfjgPeKPlM1tqIAPjQWnQbdi2AvYCOUT0ZvVPPmsbINp7IMdAZmv9yF5qoW36A +oFtBL3wLNe7w+lm5ZnZ15DHB2b2gDAECAwEAAaOCAwkwggMFMCEGA1UdEQQaMBiC +FnZhbGlkLXJvb3Q5LnRoYXd0ZS5jb20wCQYDVR0TBAIwADAOBgNVHQ8BAf8EBAMC +BaAwKwYDVR0fBCQwIjAgoB6gHIYaaHR0cDovL3RmLnN5bWNiLmNvbS90Zi5jcmww +fAYDVR0gBHUwczBoBgtghkgBhvhFAQcwATBZMCYGCCsGAQUFBwIBFhpodHRwczov +L3d3dy50aGF3dGUuY29tL2NwczAvBggrBgEFBQcCAjAjDCFodHRwczovL3d3dy50 +aGF3dGUuY29tL3JlcG9zaXRvcnkwBwYFZ4EMAQEwHQYDVR0lBBYwFAYIKwYBBQUH +AwEGCCsGAQUFBwMCMB8GA1UdIwQYMBaAFDskyDGgt1rQarjSygd0zB4k1MTcMFcG +CCsGAQUFBwEBBEswSTAfBggrBgEFBQcwAYYTaHR0cDovL3RmLnN5bWNkLmNvbTAm +BggrBgEFBQcwAoYaaHR0cDovL3RmLnN5bWNiLmNvbS90Zi5jcnQwggF/BgorBgEE +AdZ5AgQCBIIBbwSCAWsBaQB2AN3rHSt6DU+mIIuBrYFocH4ujp0B1VyIjT0RxM22 +7L7MAAABW+pl8UMAAAQDAEcwRQIhAMdGpN45mO8sPe9cyqC2vxeA7kwbpPL4Ie1Z +qP8A8YSmAiB+O2TOyUyg9TE31kCYyimqMS5tycpG8qTusAi6VClvAAB2AKS5CZC0 +GFgUh7sTosxncAo8NZgE+RvfuON3zQ7IDdwQAAABW+pl8i4AAAQDAEcwRQIhALoI +UwV2CIRu4MVgjNYTnVdKI6ZeklPdb9IQzEYBLI5OAiAgR+WX0RgWiOmn0Khon7ck +QEQ0H+j9VSFAuTqxFNWzXwB3AO5Lvbd1zmC64UJpH6vhnmajD35fsHLYgwDEe4l6 +qP3LAAABW+pl8ZMAAAQDAEgwRgIhAO/SefmFUyrtfsa1WjfN3WRG2pVSRCqaSxc7 +8pbqk7ynAiEA12r243Cr4IWKQdp6IoTqeULQZfZEGGnIUQxVG9yRzdcwDQYJKoZI +hvcNAQELBQADggEBALcczMzw4qLLwR1hbM2qnzs+Ng4ByHPaDcwIZzGlxLCTOjZc +AaVc8TA/MRUQBFxWto2fLmVIoFNS9EceKOx9VWcNK+9gYKkLl0K4amLTWWW+uShT +DooJSdkP2fX2QB1jNsD1jH+44aG6Ll94HEgz88ziVeUH5T0yM3Fou1axDVI1ADKE +Z0UsdhlTIDKcTndv3Wk6HZz2wxtvt3Z3Eenr/6TQuipGCBpfRccVRVhrpIsylVtp +9UkD0UpX0VRgyrQOIXmtbL0WmPodfxB8crczcd6C0Yy2A77torg72fAyUtKmaBBZ +ajj05MMBn8QmmnAZ0pXxvFTnD8MhOZ0nBccJnQM= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIE0DCCA7igAwIBAgIQCkieiFN+iqZFTW4sSyrrIDANBgkqhkiG9w0BAQsFADCB +rjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf +Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw +MDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNV +BAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0xMzA0MDkwMDAwMDBa +Fw0yMzA0MDgyMzU5NTlaMFcxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwx0aGF3dGUs +IEluYy4xMTAvBgNVBAMTKHRoYXd0ZSBFeHRlbmRlZCBWYWxpZGF0aW9uIFNIQTI1 +NiBTU0wgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDyxLx06CX2 +AGIo40zouN8Tn4sHN+9iSvFXCfaC6HXwCqknz5M77DaJpW4d1lTzuASXcrRpJczR +Qg5b1Rx/omBusVIa25MvuwsNZFMWyxwJJJUpIrSKGACJ/vcfcsjoXC8aG6IYuO8Y +XMu12zpO2w+u38R54x6qXKOk5axhmzeFj0h1G7nVaJbpJ3lwVyMau2yTkMdF1xfS +Nyp2s82CqU/AA3vhPXp+W7iF8vUV+3CpvfVQZRad47ZrYW6hep7oDRz3Ko5pfkMw +jnjO7mUeO5uHHkkc+DJGXShGeSpOJ10XWKg3/qgTqWkV3zYiiXW6ygFALu2d1wyq +Mc4nrlfV0lH7AgMBAAGjggE+MIIBOjASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1Ud +DwEB/wQEAwIBBjAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAGGFmh0dHA6Ly9v +Y3NwLnRoYXd0ZS5jb20wOwYDVR0gBDQwMjAwBgRVHSAAMCgwJgYIKwYBBQUHAgEW +Gmh0dHBzOi8vd3d3LnRoYXd0ZS5jb20vY3BzMDcGA1UdHwQwMC4wLKAqoCiGJmh0 +dHA6Ly9jcmwudGhhd3RlLmNvbS9UaGF3dGVQQ0EtRzMuY3JsMCoGA1UdEQQjMCGk +HzAdMRswGQYDVQQDExJWZXJpU2lnbk1QS0ktMi0zNzQwHQYDVR0OBBYEFDskyDGg +t1rQarjSygd0zB4k1MTcMB8GA1UdIwQYMBaAFK1sqpRgnO3k//o+CnQrYwP3tlm/ +MA0GCSqGSIb3DQEBCwUAA4IBAQBomCaq1DPJunVw1J9JrdbBVNzuqlYfeKfwoaTu +C/kSr9+muO7DyzUTalkq+MnpTC+8sbwrwgIw4cO+wvCBjJl3iVgAo8x/owJMU7Ju +Nk/+34d2sz/sWmJQtgBFWPKHrHfm0CBQY8XksnAVGJAFe3uvK0a+a04fU/yEJ66D +0o1HU6cOH2O1utsW2GoJJVV9jz1KwYP5s7mnBFrI8xEEkVMw2VKHyzkAnOxTwwIJ +fqc2jnIhLyO7TMZHpaHuZ8QvXDpHOGHiwx43kp7IL2v679LDzSmNmPhSF+21Uzzf +r8kbYq3fAu5dNPZBS8vDVa+xy9qcc9UCqC2nrPzh5QfQUeg1 +-----END CERTIFICATE-----
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/X509TrustManagerImpl/Symantec/verisignclass3g3ca-chain.pem Tue Apr 16 02:48:40 2019 +0100 @@ -0,0 +1,71 @@ +-----BEGIN CERTIFICATE----- +MIIHIDCCBgigAwIBAgIQS0wGL8U0T0yVa8wAE4DBqjANBgkqhkiG9w0BAQsFADB+ +MQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAd +BgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxLzAtBgNVBAMTJlN5bWFudGVj +IENsYXNzIDMgU2VjdXJlIFNlcnZlciBDQSAtIEc0MB4XDTE3MDUwMTAwMDAwMFoX +DTIwMDQzMDIzNTk1OVowgaExCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9y +bmlhMRYwFAYDVQQHDA1Nb3VudGFpbiBWaWV3MR0wGwYDVQQKDBRTeW1hbnRlYyBD +b3Jwb3JhdGlvbjEXMBUGA1UECwwOUm9vdCA0IC0gVkFMSUQxLTArBgNVBAMMJHZh +bGlkLXJvb3Q0LndlYnNlY3VyaXR5LnN5bWFudGVjLmNvbTCCASIwDQYJKoZIhvcN +AQEBBQADggEPADCCAQoCggEBALll3Mb7Fu0CAWPMWpSbr6RHdAl10hwmMaDr8ENk +hAv3offJxsUmgS+vqCC+xQNiS5ClDeOLyf5QeltArLuaYNjUaXEy00EEuXFQO5kj +HjTdsWeEkOxzmt2thAJx8eMbskvvtqnHHali2LFIOuMXuyS9mpkk7cG1yk85LvgZ +Ov1xrpBCuB+ppir0MhhXRLmcZ9QMgVUzfjrmQoQWHE0Qu69Mci6mk7fuBboqaPe0 +v0s2KsA1tLSknn39HrXE3d5D1AOoLJP1RiHU+RFQIOJ0oiXPZSH0bdiWhO0xcyuo +vXY+0vaQPO1Uwrj/VdpL7bs65dgdFqXpTdqvMURu5WoDumUCAwEAAaOCA3QwggNw +MC8GA1UdEQQoMCaCJHZhbGlkLXJvb3Q0LndlYnNlY3VyaXR5LnN5bWFudGVjLmNv +bTAJBgNVHRMEAjAAMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcD +AQYIKwYBBQUHAwIwYQYDVR0gBFowWDBWBgZngQwBAgIwTDAjBggrBgEFBQcCARYX +aHR0cHM6Ly9kLnN5bWNiLmNvbS9jcHMwJQYIKwYBBQUHAgIwGQwXaHR0cHM6Ly9k +LnN5bWNiLmNvbS9ycGEwHwYDVR0jBBgwFoAUX2DPYZBV34RDFIpgKrL1evRDGO8w +KwYDVR0fBCQwIjAgoB6gHIYaaHR0cDovL3NzLnN5bWNiLmNvbS9zcy5jcmwwVwYI +KwYBBQUHAQEESzBJMB8GCCsGAQUFBzABhhNodHRwOi8vc3Muc3ltY2QuY29tMCYG +CCsGAQUFBzAChhpodHRwOi8vc3Muc3ltY2IuY29tL3NzLmNydDCCAfcGCisGAQQB +1nkCBAIEggHnBIIB4wHhAHYA3esdK3oNT6Ygi4GtgWhwfi6OnQHVXIiNPRHEzbbs +vswAAAFbxYEdRwAABAMARzBFAiEAurXvGE124ya7O5ZjYZckdJ7OU64A4fEAszhI +UG3OqMACIGbAqoQLGMr9sMYBqS3cPxtD6EIK8BXzBaYHOe3pGhcXAHYApLkJkLQY +WBSHuxOizGdwCjw1mAT5G9+443fNDsgN3BAAAAFbxYEdagAABAMARzBFAiBY4mXZ +w8zBWrVURFxwmQGf046/oaidgJQ3Wf9+AlJ+7AIhANWkGBd6nlwE8V/dzQvkjnTz +2edJKGy2NqgyxinZMAbWAHcA7ku9t3XOYLrhQmkfq+GeZqMPfl+wctiDAMR7iXqo +/csAAAFbxYEfSwAABAMASDBGAiEAltQbZJ9+Gt1M+YV4YBJVR63aPhk1dFIyKdQL +yjYdBh0CIQDUGxHmR2KVW8N6wHnAGFlUhcwlBJFoiTqaSRP/1Yk0wAB2ALx44d/F +9jxoRkkzTaEPoV8JeWkgCcCBtPP2kX8+2bilAAABW8WBHkcAAAQDAEcwRQIgFqqM +DTAo3RKfwU9gwkD53Zr1HXPJuoI/MhwHQgc8nvkCIQDbwhd3gOdRJhtMyGqxGqr7 +sbD43D/fkyH3BNWOhff04TANBgkqhkiG9w0BAQsFAAOCAQEAQkWtNshWRmFY1t1Y +pH3Ztxd891f4VYLtBzrpapejHIe5ijlZES2d+x4+aCilVUo6sDs0RUgy5Jk9eU5I +6vOh+NkZ1THFqod+w5FKPgDaDuHHryvRaiGdcpn9x5R7zkpgKQ1WqgvcbzAmZkAr +YxpvXfTLhcgbQhPedxbS5YyU1y1QCi8MUrxTwejcFDhAQXGOW3cTMpGsXtRvQVE0 +iI93jCPb3Djpqus9SS7ggzkfJe3bQpl72bv2agn5peBJa0sC1PqRXIT/cWUQe9ez +rKSDoqdPNjTmIcJjql50T+WceNF5nxNPCq+jhMOcmKXJUF3H6yYc8pjLuDDBAFFz +uxAuxw== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFFTCCA/2gAwIBAgIQKC4nkXkzkuQo8iGnTsk3rjANBgkqhkiG9w0BAQsFADCB +yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL +ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMTk5OSBWZXJp +U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW +ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0 +aG9yaXR5IC0gRzMwHhcNMTMxMDMxMDAwMDAwWhcNMjMxMDMwMjM1OTU5WjB+MQsw +CQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNV +BAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxLzAtBgNVBAMTJlN5bWFudGVjIENs +YXNzIDMgU2VjdXJlIFNlcnZlciBDQSAtIEc0MIIBIjANBgkqhkiG9w0BAQEFAAOC +AQ8AMIIBCgKCAQEAstgFyhx0LbUXVjnFSlIJluhL2AzxaJ+aQihiw6UwU35VEYJb +A3oNL+F5BMm0lncZgQGUWfm893qZJ4Itt4PdWid/sgN6nFMl6UgfRk/InSn4vnlW +9vf92Tpo2otLgjNBEsPIPMzWlnqEIRoiBAMnF4scaGGTDw5RgDMdtLXO637QYqzu +s3sBdO9pNevK1T2p7peYyo2qRA4lmUoVlqTObQJUHypqJuIGOmNIrLRM0XWTUP8T +L9ba4cYY9Z/JJV3zADreJk20KQnNDz0jbxZKgRb78oMQw7jW2FUyPfG9D72MUpVK +Fpd6UiFjdS8W+cRmvvW1Cdj/JwDNRHxvSz+w9wIDAQABo4IBQDCCATwwHQYDVR0O +BBYEFF9gz2GQVd+EQxSKYCqy9Xr0QxjvMBIGA1UdEwEB/wQIMAYBAf8CAQAwawYD +VR0gBGQwYjBgBgpghkgBhvhFAQc2MFIwJgYIKwYBBQUHAgEWGmh0dHA6Ly93d3cu +c3ltYXV0aC5jb20vY3BzMCgGCCsGAQUFBwICMBwaGmh0dHA6Ly93d3cuc3ltYXV0 +aC5jb20vcnBhMC8GA1UdHwQoMCYwJKAioCCGHmh0dHA6Ly9zLnN5bWNiLmNvbS9w +Y2EzLWczLmNybDAOBgNVHQ8BAf8EBAMCAQYwKQYDVR0RBCIwIKQeMBwxGjAYBgNV +BAMTEVN5bWFudGVjUEtJLTEtNTM0MC4GCCsGAQUFBwEBBCIwIDAeBggrBgEFBQcw +AYYSaHR0cDovL3Muc3ltY2QuY29tMA0GCSqGSIb3DQEBCwUAA4IBAQBbF1K+1lZ7 +9Pc0CUuWysf2IdBpgO/nmhnoJOJ/2S9h3RPrWmXk4WqQy04q6YoW51KN9kMbRwUN +gKOomv4p07wdKNWlStRxPA91xQtzPwBIZXkNq2oeJQzAAt5mrL1LBmuaV4oqgX5n +m7pSYHPEFfe7wVDJCKW6V0o6GxBzHOF7tpQDS65RsIJAOloknO4NWF2uuil6yjOe +soHCL47BJ89A8AShP/U3wsr8rFNtqVNpT+F2ZAwlgak3A/I5czTSwXx4GByoaxbn +5+CdKa/Y5Gk5eZVpuXtcXQGc1PfzSEUTZJXXCm5y2kMiJG8+WnDcwJLgLeVX+OQr +J+71/xuzAYN6 +-----END CERTIFICATE-----
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/X509TrustManagerImpl/Symantec/verisignclass3g4ca-chain.pem Tue Apr 16 02:48:40 2019 +0100 @@ -0,0 +1,56 @@ +-----BEGIN CERTIFICATE----- +MIIFxDCCBWmgAwIBAgIQZMjAlhAdRd/Im/aYbmgO8DAKBggqhkjOPQQDAjCBizEL +MAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0aW9uMR8wHQYD +VQQLExZTeW1hbnRlYyBUcnVzdCBOZXR3b3JrMTwwOgYDVQQDEzNTeW1hbnRlYyBD +bGFzcyAzIEVDQyAyNTYgYml0IEV4dGVuZGVkIFZhbGlkYXRpb24gQ0EwHhcNMTcw +NTAxMDAwMDAwWhcNMTkwNTAxMjM1OTU5WjCCAS0xEzARBgsrBgEEAYI3PAIBAxMC +VVMxGTAXBgsrBgEEAYI3PAIBAgwIRGVsYXdhcmUxHTAbBgNVBA8TFFByaXZhdGUg +T3JnYW5pemF0aW9uMRAwDgYDVQQFEwcyMTU4MTEzMQswCQYDVQQGEwJVUzEOMAwG +A1UEEQwFOTQwNDMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDU1vdW50 +YWluIFZpZXcxGTAXBgNVBAkMEDM1MCBFbGxpcyBTdHJlZXQxHTAbBgNVBAoMFFN5 +bWFudGVjIENvcnBvcmF0aW9uMRcwFQYDVQQLDA5Sb290IDMgLSBWQUxJRDEtMCsG +A1UEAwwkdmFsaWQtcm9vdDMud2Vic2VjdXJpdHkuc3ltYW50ZWMuY29tMFkwEwYH +KoZIzj0CAQYIKoZIzj0DAQcDQgAERAIBieoafYh/yFaVSP+vyzoxzZ/zKy4tx7o0 +R1gugD5SArEcRar0oodVQ99eJkT63Xn910gGKx4cP+CM+jZfJqOCAwgwggMEMC8G +A1UdEQQoMCaCJHZhbGlkLXJvb3QzLndlYnNlY3VyaXR5LnN5bWFudGVjLmNvbTAJ +BgNVHRMEAjAAMA4GA1UdDwEB/wQEAwIHgDAdBgNVHSUEFjAUBggrBgEFBQcDAQYI +KwYBBQUHAwIwbwYDVR0gBGgwZjBbBgtghkgBhvhFAQcXBjBMMCMGCCsGAQUFBwIB +FhdodHRwczovL2Quc3ltY2IuY29tL2NwczAlBggrBgEFBQcCAjAZDBdodHRwczov +L2Quc3ltY2IuY29tL3JwYTAHBgVngQwBATAfBgNVHSMEGDAWgBRIE2UXlOyeFioq +dFzoUy20+4PrjjArBgNVHR8EJDAiMCCgHqAchhpodHRwOi8vc24uc3ltY2IuY29t +L3NuLmNybDBXBggrBgEFBQcBAQRLMEkwHwYIKwYBBQUHMAGGE2h0dHA6Ly9zbi5z +eW1jZC5jb20wJgYIKwYBBQUHMAKGGmh0dHA6Ly9zbi5zeW1jYi5jb20vc24uY3J0 +MIIBfQYKKwYBBAHWeQIEAgSCAW0EggFpAWcAdgDd6x0reg1PpiCLga2BaHB+Lo6d +AdVciI09EcTNtuy+zAAAAVvFgWTjAAAEAwBHMEUCIF7mhfWFvkMauS0jlQz7t/fO +nDXX+VeHwI7YIHU3Wvg5AiEA97a9fZzAjALA1VTaXOv/WSDyEzA/X9YPesI4Aq+4 +da8AdQCkuQmQtBhYFIe7E6LMZ3AKPDWYBPkb37jjd80OyA3cEAAAAVvFgWUIAAAE +AwBGMEQCIAM5H16X3/vPGds9N8b7Q3+H8cFe7woTT9ddKPfUyLZJAiAF8FivrVBd +wJ5rjxxJOwPSrlkRV2vhbKfSbJH0lDq1XQB2AO5Lvbd1zmC64UJpH6vhnmajD35f +sHLYgwDEe4l6qP3LAAABW8WBZRoAAAQDAEcwRQIgRpro/bdvZbK5eW5FTbTqGUTi +W5RSpjcFW2Gd27Ql6bACIQCgow7825ZtJ31KRYJ2fiTlqvc6jyZ+u67hFT4qs/1Q +oDAKBggqhkjOPQQDAgNJADBGAiEAl565i7SXROFdn7y+hM0AgChi/75FGmaokJaj +h9jhmiMCIQCqIZZ4SuOgBbkt7bMOSI1sOtFqhlsGVXwZKjzSaIFSYA== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIID4zCCA2qgAwIBAgIQTZVdIK+FxJ9pJfurfGZfiTAKBggqhkjOPQQDAzCByjEL +MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW +ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2ln +biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp +U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y +aXR5IC0gRzQwHhcNMTIxMjIwMDAwMDAwWhcNMjIxMjE5MjM1OTU5WjCBizELMAkG +A1UEBhMCVVMxHTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0aW9uMR8wHQYDVQQL +ExZTeW1hbnRlYyBUcnVzdCBOZXR3b3JrMTwwOgYDVQQDEzNTeW1hbnRlYyBDbGFz +cyAzIEVDQyAyNTYgYml0IEV4dGVuZGVkIFZhbGlkYXRpb24gQ0EwWTATBgcqhkjO +PQIBBggqhkjOPQMBBwNCAATdBD2y8pCTl8bpu7yR21Hwo4bt+8bThZMyBUngBINh +llH/VyGuC9oO5wShf9sqHL3KmDXFcXNAzehqq1SEQybio4IBbTCCAWkwEgYDVR0T +AQH/BAgwBgEB/wIBADA3BgNVHR8EMDAuMCygKqAohiZodHRwOi8vY3JsLndzLnN5 +bWFudGVjLmNvbS9wY2EzLWc0LmNybDAOBgNVHQ8BAf8EBAMCAQYwNwYIKwYBBQUH +AQEEKzApMCcGCCsGAQUFBzABhhtodHRwOi8vb2NzcC53cy5zeW1hbnRlYy5jb20w +ZQYDVR0gBF4wXDBaBgRVHSAAMFIwJgYIKwYBBQUHAgEWGmh0dHA6Ly93d3cuc3lt +YXV0aC5jb20vY3BzMCgGCCsGAQUFBwICMBwaGmh0dHA6Ly93d3cuc3ltYXV0aC5j +b20vcnBhMCoGA1UdEQQjMCGkHzAdMRswGQYDVQQDExJTWU1DLUVDQy1DQS1wMjU2 +LTMwHQYDVR0OBBYEFEgTZReU7J4WKip0XOhTLbT7g+uOMB8GA1UdIwQYMBaAFLMW +kf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMDA2cAMGQCMFyb7oOjdk2MLQVM +gjS6s77Oj+jDNIH7QHfoNGxbFys7rdWno9LzZsJPsrDIdpiPvwIwT8IvzpLFqb3O +fU7UGztmJOpOzYKvVEqI7+O/OpNjVCF9EjDSMs2ryYGwpxFDe0Vm +-----END CERTIFICATE-----
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/X509TrustManagerImpl/Symantec/verisignclass3g5ca-chain.pem Tue Apr 16 02:48:40 2019 +0100 @@ -0,0 +1,71 @@ +-----BEGIN CERTIFICATE----- +MIIHOTCCBiGgAwIBAgIQCBmps2cB8a6CGTXUyg9ZzjANBgkqhkiG9w0BAQsFADB3 +MQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAd +BgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxKDAmBgNVBAMTH1N5bWFudGVj +IENsYXNzIDMgRVYgU1NMIENBIC0gRzMwHhcNMTcwNDI4MDAwMDAwWhcNMTkwNDI4 +MjM1OTU5WjCCAS0xEzARBgsrBgEEAYI3PAIBAxMCVVMxGTAXBgsrBgEEAYI3PAIB +AgwIRGVsYXdhcmUxHTAbBgNVBA8TFFByaXZhdGUgT3JnYW5pemF0aW9uMRAwDgYD +VQQFEwcyMTU4MTEzMQswCQYDVQQGEwJVUzEOMAwGA1UEEQwFOTQwNDMxEzARBgNV +BAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcxGTAXBgNVBAkM +EDM1MCBFbGxpcyBTdHJlZXQxHTAbBgNVBAoMFFN5bWFudGVjIENvcnBvcmF0aW9u +MRcwFQYDVQQLDA5Sb290IDEgLSBWQUxJRDEtMCsGA1UEAwwkdmFsaWQtcm9vdDEu +d2Vic2VjdXJpdHkuc3ltYW50ZWMuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEApbJSThUcOfpFWl6PyOeFqED399DWeBcBoAMdXkPfatQ+uJPeRryZ +4UfC1iuQWQM6agDrMhDmnc+IiBiltbF0PVEHkQXxfR6x6TFF1doWDxVfOgl2y9Pz +ilRgdBdGmnQsWbYqaKlCBS3aZ2jCZMUAKmQce8WNLEf8qDjQcHRT1vI2k5AW3+L0 +FccXRSFXx2wZUAh9qxa2gKxEjnUF+qy42WEgh/mXD4smbhtEf+pCUXPYuODlxOaA +ZCy9SeBrKb5Nl3C9UzBhchONPQLUgzlk8d0M17pFLYKLfa8MvBcKRVyTk7/XXdTj +OmW5OO7f4epmXNlN5fHnGZlA5FE/4candwIDAQABo4IDBzCCAwMwLwYDVR0RBCgw +JoIkdmFsaWQtcm9vdDEud2Vic2VjdXJpdHkuc3ltYW50ZWMuY29tMAkGA1UdEwQC +MAAwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcD +AjBvBgNVHSAEaDBmMFsGC2CGSAGG+EUBBxcGMEwwIwYIKwYBBQUHAgEWF2h0dHBz +Oi8vZC5zeW1jYi5jb20vY3BzMCUGCCsGAQUFBwICMBkMF2h0dHBzOi8vZC5zeW1j +Yi5jb20vcnBhMAcGBWeBDAEBMB8GA1UdIwQYMBaAFAFZq+fdOgtZpmRj1s8gB1fV +kedqMCsGA1UdHwQkMCIwIKAeoByGGmh0dHA6Ly9zci5zeW1jYi5jb20vc3IuY3Js +MFcGCCsGAQUFBwEBBEswSTAfBggrBgEFBQcwAYYTaHR0cDovL3NyLnN5bWNkLmNv +bTAmBggrBgEFBQcwAoYaaHR0cDovL3NyLnN5bWNiLmNvbS9zci5jcnQwggF8Bgor +BgEEAdZ5AgQCBIIBbASCAWgBZgB2AN3rHSt6DU+mIIuBrYFocH4ujp0B1VyIjT0R +xM227L7MAAABW7a3ZxAAAAQDAEcwRQIgeoFObGH+PGc5LRj+f1yzoG3TGHrPQA/z +nRsNG1MXNXACIQCVd5wZWbP1+hp4kaE1sYgUnSiRFN3kfMf5uUQysYvkSwB1AKS5 +CZC0GFgUh7sTosxncAo8NZgE+RvfuON3zQ7IDdwQAAABW7a3Z1AAAAQDAEYwRAIg +MRBDGE2dq1xzPDJ9tKzDTwKP5rC4DrjHZbmtYiZZh3sCIDCMlTV8bpEeeq2evzna +Xq/930hOaclzf4pXEwUHmW/HAHUA7ku9t3XOYLrhQmkfq+GeZqMPfl+wctiDAMR7 +iXqo/csAAAFbtrdpDwAABAMARjBEAiBQpNfvWoFAkIraeupW8zM804c8XvlLIbX4 +6kCYS04HbQIgOmEunrjYREwtG5Rdk1Vd01Fp7lR42AgJ/LQFn7DmXigwDQYJKoZI +hvcNAQELBQADggEBAKlkTQil8u0sfwLdpfFmtUvFexhx4C8gTsZwZeN/40n+S4xR +b6U3rEHIKlFAelipc5EzeYIsJKHGP5qHSs7m7jPKBrf0KsoryvZrSfhMfXDHvrJF +RpF0Rs1VODoK2l/1CosUZ9rTqEjQcv7kUvFvgZpNIoV++k/Y2TsoBsLliRdXKpL8 +SQADr18BlEt1Y8A7E77lJFMmgD4bFN1jJWkEJoAGkrYqsF6i8fAHiESjSLy85Bcs +DGXgP4z8Nifje78wGVygI/4NYgYiFClsk8epBHXOveEV5HRO42XzPG0Zn0BMWCSI +0P08Lq3dwSQSQarkID6iRuhgt4GZvm3zh6MdfrA= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFKzCCBBOgAwIBAgIQfuFKb2/v8tN/P61lTTratDANBgkqhkiG9w0BAQsFADCB +yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL +ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp +U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW +ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0 +aG9yaXR5IC0gRzUwHhcNMTMxMDMxMDAwMDAwWhcNMjMxMDMwMjM1OTU5WjB3MQsw +CQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNV +BAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxKDAmBgNVBAMTH1N5bWFudGVjIENs +YXNzIDMgRVYgU1NMIENBIC0gRzMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK +AoIBAQDYoWV0I+grZOIy1zM3PY71NBZI3U9/hxz4RCMTjvsR2ERaGHGOYBYmkpv9 +FwvhcXBC/r/6HMCqo6e1cej/GIP23xAKE2LIPZyn3i4/DNkd5y77Ks7Imn+Hv9hM +BBUyydHMlXGgTihPhNk1++OGb5RT5nKKY2cuvmn2926OnGAE6yn6xEdC0niY4+wL +pZLct5q9gGQrOHw4CVtm9i2VeoayNC6FnpAOX7ddpFFyRnATv2fytqdNFB5suVPu +IxpOjUhVQ0GxiXVqQCjFfd3SbtICGS97JJRL6/EaqZvjI5rq+jOrCiy39GAI3Z8c +zd0tAWaAr7MvKR0juIrhoXAHDDQPAgMBAAGjggFdMIIBWTAvBggrBgEFBQcBAQQj +MCEwHwYIKwYBBQUHMAGGE2h0dHA6Ly9zMi5zeW1jYi5jb20wEgYDVR0TAQH/BAgw +BgEB/wIBADBlBgNVHSAEXjBcMFoGBFUdIAAwUjAmBggrBgEFBQcCARYaaHR0cDov +L3d3dy5zeW1hdXRoLmNvbS9jcHMwKAYIKwYBBQUHAgIwHBoaaHR0cDovL3d3dy5z +eW1hdXRoLmNvbS9ycGEwMAYDVR0fBCkwJzAloCOgIYYfaHR0cDovL3MxLnN5bWNi +LmNvbS9wY2EzLWc1LmNybDAOBgNVHQ8BAf8EBAMCAQYwKQYDVR0RBCIwIKQeMBwx +GjAYBgNVBAMTEVN5bWFudGVjUEtJLTEtNTMzMB0GA1UdDgQWBBQBWavn3ToLWaZk +Y9bPIAdX1ZHnajAfBgNVHSMEGDAWgBR/02Wnwt3su/AwCfNDOfoCrzMxMzANBgkq +hkiG9w0BAQsFAAOCAQEAQgFVe9AWGl1Y6LubqE3X89frE5SG1n8hC0e8V5uSXU8F +nzikEHzPg74GQ0aNCLxq1xCm+quvL2GoY/Jl339MiBKIT7Np2f8nwAqXkY9W+4nE +qLuSLRtzsMarNvSWbCAI7woeZiRFT2cAQMgHVHQzO6atuyOfZu2iRHA0+w7qAf3P +eHTfp61Vt19N9tY/4IbOJMdCqRMURDVLtt/JYKwMf9mTIUvunORJApjTYHtcvNUw +LwfORELEC5n+5p/8sHiGUW3RLJ3GlvuFgrsEL/digO9i2n/2DqyQuFa9eT/ygG6j +2bkPXToHHZGThkspTOHcteHgM52zyzaRS/6htO7w+Q== +-----END CERTIFICATE-----
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/X509TrustManagerImpl/Symantec/verisignclass3g5ca-codesigning-chain.pem Tue Apr 16 02:48:40 2019 +0100 @@ -0,0 +1,170 @@ +Signer #1: + +Signature: + +Certificate owner: CN="Oracle America, Inc.", OU=Software Engineering, O="Oracle America, Inc.", L=Redwood City, ST=California, C=US + +-----BEGIN CERTIFICATE----- +MIIE4DCCA8igAwIBAgIQMJBKmqOhTgIuAsUw5l33hTANBgkqhkiG9w0BAQsFADB/ +MQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAd +BgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxMDAuBgNVBAMTJ1N5bWFudGVj +IENsYXNzIDMgU0hBMjU2IENvZGUgU2lnbmluZyBDQTAeFw0xNzEyMjEwMDAwMDBa +Fw0yMDAyMDEyMzU5NTlaMIGWMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZv +cm5pYTEVMBMGA1UEBwwMUmVkd29vZCBDaXR5MR0wGwYDVQQKDBRPcmFjbGUgQW1l +cmljYSwgSW5jLjEdMBsGA1UECwwUU29mdHdhcmUgRW5naW5lZXJpbmcxHTAbBgNV +BAMMFE9yYWNsZSBBbWVyaWNhLCBJbmMuMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEAxrxa5UAMwofgt7m++glHqMSYP3nlTDxRnWu14FtVtQiaacn20u3w +T5d+5mkoezHXNU3g1sgwkr/Ovf4YVSwz9wtqZWTbK3/r6Ctb9eRxb2th64N4AuDI +R9C/LU2J7ruXsu7FpEhXMIdNLxR4ihfkBA5ndpNqmXmIG9HvFQkd8APsSFRpMQh7 +Com1YlbkySgMyjBwYfAw74bqNrClBmLNAVfq7JSqjJ8EJtlq6lEJWHXEYysZfRIf +StxZ0XtKD3wtADeowBHs1DRnXrkgD/q3kWX5LF75nfHtRWEtHxWKk7/R452pweIv +ZZYXsvSrRA3vC+jbbhtZiRYRk2QCXsUxrQIDAQABo4IBPjCCATowCQYDVR0TBAIw +ADAOBgNVHQ8BAf8EBAMCB4AwEwYDVR0lBAwwCgYIKwYBBQUHAwMwYQYDVR0gBFow +WDBWBgZngQwBBAEwTDAjBggrBgEFBQcCARYXaHR0cHM6Ly9kLnN5bWNiLmNvbS9j +cHMwJQYIKwYBBQUHAgIwGQwXaHR0cHM6Ly9kLnN5bWNiLmNvbS9ycGEwHwYDVR0j +BBgwFoAUljtT8Hkzl699g+8uK8zKt4YecmYwKwYDVR0fBCQwIjAgoB6gHIYaaHR0 +cDovL3N2LnN5bWNiLmNvbS9zdi5jcmwwVwYIKwYBBQUHAQEESzBJMB8GCCsGAQUF +BzABhhNodHRwOi8vc3Yuc3ltY2QuY29tMCYGCCsGAQUFBzAChhpodHRwOi8vc3Yu +c3ltY2IuY29tL3N2LmNydDANBgkqhkiG9w0BAQsFAAOCAQEAQcZqmjMAuBgnaQZ5 +JsP3+Rzaa5FrukVVk2brqrJFnqt/79khvfCf95pBafHHCqdndB0T4xuzBL4fk2ZW +Z48ACgq3U6oNP9Ci4pcDuTqU/vZHwh7ICkSWLhGzpErfwby7zZV9ZeIK0AB5vJCK +qgL4DetXgqGOm29gAjTKcXa67jP9lX6tAdh9TcQDbBbGny3NHGAiCderJxTOYhid +9+4v+p+lt2OPxlxmZMPnT/9U2Yp3OzH//OYgQysnwy/UkSVCa2DuMPbL4LTxwV65 +nwEU3jT0Iq7io+oEcjW5FTZDgVC2A7lDVVrNlbAW/f5QoKcmyw8hDLo7TH6tDv8n +hhKFDg== +-----END CERTIFICATE----- + +Certificate owner: CN=Symantec Class 3 SHA256 Code Signing CA, OU=Symantec Trust Network, O=Symantec Corporation, C=US + +-----BEGIN CERTIFICATE----- +MIIFWTCCBEGgAwIBAgIQPXjX+XZJYLJhffTwHsqGKjANBgkqhkiG9w0BAQsFADCB +yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL +ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp +U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW +ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0 +aG9yaXR5IC0gRzUwHhcNMTMxMjEwMDAwMDAwWhcNMjMxMjA5MjM1OTU5WjB/MQsw +CQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNV +BAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxMDAuBgNVBAMTJ1N5bWFudGVjIENs +YXNzIDMgU0hBMjU2IENvZGUgU2lnbmluZyBDQTCCASIwDQYJKoZIhvcNAQEBBQAD +ggEPADCCAQoCggEBAJeDHgAWryyx0gjE12iTUWAecfbiR7TbWE0jYmq0v1obUfej +DRh3aLvYNqsvIVDanvPnXydOC8KXyAlwk6naXA1OpA2RoLTsFM6RclQuzqPbROlS +Gz9BPMpK5KrA6DmrU8wh0MzPf5vmwsxYaoIV7j02zxzFlwckjvF7vjEtPW7ctZlC +n0thlV8ccO4XfduL5WGJeMdoG68ReBqYrsRVR1PZszLWoQ5GQMWXkorRU6eZW4U1 +V9Pqk2JhIArHMHckEU1ig7a6e2iCMe5lyt/51Y2yNdyMK29qclxghJzyDJRewFZS +AEjM0/ilfd4v1xPkOKiE1Ua4E4bCG53qWjjdm9sCAwEAAaOCAYMwggF/MC8GCCsG +AQUFBwEBBCMwITAfBggrBgEFBQcwAYYTaHR0cDovL3MyLnN5bWNiLmNvbTASBgNV +HRMBAf8ECDAGAQH/AgEAMGwGA1UdIARlMGMwYQYLYIZIAYb4RQEHFwMwUjAmBggr +BgEFBQcCARYaaHR0cDovL3d3dy5zeW1hdXRoLmNvbS9jcHMwKAYIKwYBBQUHAgIw +HBoaaHR0cDovL3d3dy5zeW1hdXRoLmNvbS9ycGEwMAYDVR0fBCkwJzAloCOgIYYf +aHR0cDovL3MxLnN5bWNiLmNvbS9wY2EzLWc1LmNybDAdBgNVHSUEFjAUBggrBgEF +BQcDAgYIKwYBBQUHAwMwDgYDVR0PAQH/BAQDAgEGMCkGA1UdEQQiMCCkHjAcMRow +GAYDVQQDExFTeW1hbnRlY1BLSS0xLTU2NzAdBgNVHQ4EFgQUljtT8Hkzl699g+8u +K8zKt4YecmYwHwYDVR0jBBgwFoAUf9Nlp8Ld7LvwMAnzQzn6Aq8zMTMwDQYJKoZI +hvcNAQELBQADggEBABOFGh5pqTf3oL2kr34dYVP+nYxeDKZ1HngXI9397BoDVTn7 +cZXHZVqnjjDSRFph23Bv2iEFwi5zuknx0ZP+XcnNXgPgiZ4/dB7X9ziLqdbPuzUv +M1ioklbRyE07guZ5hBb8KLCxR/Mdoj7uh9mmf6RWpT+thC4p3ny8qKqjPQQB6rqT +og5QIikXTIfkOhFf1qQliZsFay+0yQFMJ3sLrBkFIqBgFT/ayftNTI/7cmd3/SeU +x7o1DohJ/o39KK9KEr0Ns5cF3kQMFfo2KwPcwVAB8aERXRTl4r0nS1S+K4ReD6bD +dAUK75fDiSKxH3fzvc1D1PFMqT+1i4SvZPLQFCE= +-----END CERTIFICATE----- + +Certificate owner: CN=VeriSign Class 3 Public Primary Certification Authority - G5, OU="(c) 2006 VeriSign, Inc. - For authorized use only", OU=VeriSign Trust Network, O="VeriSign, Inc.", C=US + +-----BEGIN CERTIFICATE----- +MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB +yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL +ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp +U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW +ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0 +aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCByjEL +MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW +ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2ln +biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp +U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y +aXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1 +nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbex +t0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIz +SdhDY2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQG +BO+QueQA5N06tRn/Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+ +rCpSx4/VBEnkjWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/ +NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E +BAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAH +BgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy +aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKv +MzEzMA0GCSqGSIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzE +p6B4Eq1iDkVwZMXnl2YtmAl+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y +5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKEKQsTb47bDN0lAtukixlE0kF6BWlK +WE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiCKm0oHw0LxOXnGiYZ +4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vEZV8N +hnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq +-----END CERTIFICATE----- + +Timestamp: + +Certificate owner: CN=Symantec SHA256 TimeStamping Signer - G2, OU=Symantec Trust Network, O=Symantec Corporation, C=US + +-----BEGIN CERTIFICATE----- +MIIFSzCCBDOgAwIBAgIQVFjyqtdB1kS8hKl7oJZS5jANBgkqhkiG9w0BAQsFADB3 +MQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAd +BgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxKDAmBgNVBAMTH1N5bWFudGVj +IFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0EwHhcNMTcwMTAyMDAwMDAwWhcNMjgwNDAx +MjM1OTU5WjCBgDELMAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5bWFudGVjIENvcnBv +cmF0aW9uMR8wHQYDVQQLExZTeW1hbnRlYyBUcnVzdCBOZXR3b3JrMTEwLwYDVQQD +EyhTeW1hbnRlYyBTSEEyNTYgVGltZVN0YW1waW5nIFNpZ25lciAtIEcyMIIBIjAN +BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmfP82AQJA4b511ymk8BCfOp8Y89d +AOKO88CQ348p9RjqlLeS5dewoHOB6OkKm0p8Af+dj6Q5pw7qRfQiDDpw7TlFi+TF +G1zwRWhGJAVjdpsc/J5sKrFW5Yp/UnGu8jXVRiMGHM9ILR20zbjZdiOOHP8+v7sG +XGkHpmUO+F6ufS7tTa4178nXAEL9KJUOn11yQgm8w9pE0u3MR4Tk/MotrFi+rveu +2UQNCLfCd9YaQ3DRbgPeUpLEEAhx2boiVfIfvO2bnTviXh1Mg/+XD3sL51WDTtIN +677X7K5uR7mf36XWUbwEVe3/J3BMye0qSxPhsblMD8kB7lVlX2kCeGbLPwIDAQAB +o4IBxzCCAcMwDAYDVR0TAQH/BAIwADBmBgNVHSAEXzBdMFsGC2CGSAGG+EUBBxcD +MEwwIwYIKwYBBQUHAgEWF2h0dHBzOi8vZC5zeW1jYi5jb20vY3BzMCUGCCsGAQUF +BwICMBkaF2h0dHBzOi8vZC5zeW1jYi5jb20vcnBhMEAGA1UdHwQ5MDcwNaAzoDGG +L2h0dHA6Ly90cy1jcmwud3Muc3ltYW50ZWMuY29tL3NoYTI1Ni10c3MtY2EuY3Js +MBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMIMA4GA1UdDwEB/wQEAwIHgDB3BggrBgEF +BQcBAQRrMGkwKgYIKwYBBQUHMAGGHmh0dHA6Ly90cy1vY3NwLndzLnN5bWFudGVj +LmNvbTA7BggrBgEFBQcwAoYvaHR0cDovL3RzLWFpYS53cy5zeW1hbnRlYy5jb20v +c2hhMjU2LXRzcy1jYS5jZXIwKAYDVR0RBCEwH6QdMBsxGTAXBgNVBAMTEFRpbWVT +dGFtcC0yMDQ4LTUwHQYDVR0OBBYEFAm1wf6WcpcpQ5rJ4AK6rvj9L7r2MB8GA1Ud +IwQYMBaAFK9j1sqjToVy4Ke8QfMpojh/gHViMA0GCSqGSIb3DQEBCwUAA4IBAQAX +swqI6VxaXiBrOwoVsmzFqYoyh9Ox9BxTroW+P5v/17y3lIW0x1J+lOi97WGy1KeZ +5MPJk8E1PQvoaApdVpi9sSI70UR617/wbVEyitUj3zgBN/biUyt6KxGPt01sejMD +G3xrCZQXu+TbWNQhE2Xn7NElyix1mpx//Mm7KmirxH20z6PJbKfZxACciQp3kfRN +ovsxO4Zu9uYfUAOGm7/LQqvmdptyWhEBisbvpW+V592uuuYiZfAYWRsRyc2At9iX +Rx9CCPiscR+wRlOz1LLVo6tQdUgSF4Ktz+BBTzJ+zZUcv5GKCD2kp2cClt8kTKXQ +QcCCYKOKFzJL07zPpLSM +-----END CERTIFICATE----- + +Certificate owner: CN=Symantec SHA256 TimeStamping CA, OU=Symantec Trust Network, O=Symantec Corporation, C=US + +-----BEGIN CERTIFICATE----- +MIIFODCCBCCgAwIBAgIQewWx1EloUUT3yYnSnBmdEjANBgkqhkiG9w0BAQsFADCB +vTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL +ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJp +U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MTgwNgYDVQQDEy9W +ZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe +Fw0xNjAxMTIwMDAwMDBaFw0zMTAxMTEyMzU5NTlaMHcxCzAJBgNVBAYTAlVTMR0w +GwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMg +VHJ1c3QgTmV0d29yazEoMCYGA1UEAxMfU3ltYW50ZWMgU0hBMjU2IFRpbWVTdGFt +cGluZyBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALtZnVlVT52M +cl0agaLrVfOwAa08cawyjwVrhponADKXak3JZBRLKbvC2Sm5Luxjs+HPPwtWkPhi +G37rpgfi3n9ebUA41JEG50F8eRzLy60bv9iVkfPw7mz4rZY5Ln/BJ7h4OcWEpe3t +r4eOzo3HberSmLU6Hx45ncP0mqj0hOHE0XxxxgYptD/kgw0mw3sIPk35CrczSf/K +O9T1sptL4YiZGvXA6TMU1t/HgNuR7v68kldyd/TNqMz+CfWTN76ViGrF3PSxS9TO +6AmRX7WEeTWKeKwZMo8jwTJBG1kOqT6xzPnWK++32OTVHW0ROpL2k8mc40juu1MO +1DaXhnjFoTcCAwEAAaOCAXcwggFzMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8E +CDAGAQH/AgEAMGYGA1UdIARfMF0wWwYLYIZIAYb4RQEHFwMwTDAjBggrBgEFBQcC +ARYXaHR0cHM6Ly9kLnN5bWNiLmNvbS9jcHMwJQYIKwYBBQUHAgIwGRoXaHR0cHM6 +Ly9kLnN5bWNiLmNvbS9ycGEwLgYIKwYBBQUHAQEEIjAgMB4GCCsGAQUFBzABhhJo +dHRwOi8vcy5zeW1jZC5jb20wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL3Muc3lt +Y2IuY29tL3VuaXZlcnNhbC1yb290LmNybDATBgNVHSUEDDAKBggrBgEFBQcDCDAo +BgNVHREEITAfpB0wGzEZMBcGA1UEAxMQVGltZVN0YW1wLTIwNDgtMzAdBgNVHQ4E +FgQUr2PWyqNOhXLgp7xB8ymiOH+AdWIwHwYDVR0jBBgwFoAUtnf6aUhHn1MS1cLq +BzJ2B9GXBxkwDQYJKoZIhvcNAQELBQADggEBAHXqsC3VNBlcMkX+DuHUT6Z4wW/X +6t3cT/OhyIGI96ePFeZAKa3mXfSi2VZkhHEwKt0eYRdmIFYGmBmNXXHy+Je8Cf0c +kUfJ4uiNA/vMkC/WCmxOM+zWtJPITJBjSDlAIcTd1m6JmDy1mJfoqQa3CcmPU1dB +kC/hHk1O3MoQeGxCbvC2xfhhXFL1TvZrjfdKer7zzf0D19n2A6gP41P3CnXsxnUu +qmaFBJm3+AZX4cYO9uiv2uybGB+queM6AL/OipTLAduexzi7D1Kr0eOUA2AKTaD+ +J20UMvw/l0Dhv5mJ2+Q5FL3a5NPD6itas5VYVQR9x5rsIwONhSrS/66pYYE= +-----END CERTIFICATE----- +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/X509TrustManagerImpl/Symantec/verisignuniversalrootca-chain.pem Tue Apr 16 02:48:40 2019 +0100 @@ -0,0 +1,73 @@ +-----BEGIN CERTIFICATE----- +MIIHTzCCBjegAwIBAgIQPYH1xfKSpwYMrTEqOxG4OzANBgkqhkiG9w0BAQsFADCB +ijELMAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0aW9uMR8w +HQYDVQQLExZTeW1hbnRlYyBUcnVzdCBOZXR3b3JrMTswOQYDVQQDEzJTeW1hbnRl +YyBDbGFzcyAzIEV4dGVuZGVkIFZhbGlkYXRpb24gU0hBMjU2IFNTTCBDQTAeFw0x +NzA1MDEwMDAwMDBaFw0xOTA1MDEyMzU5NTlaMIIBLTETMBEGCysGAQQBgjc8AgED +EwJVUzEZMBcGCysGAQQBgjc8AgECDAhEZWxhd2FyZTEdMBsGA1UEDxMUUHJpdmF0 +ZSBPcmdhbml6YXRpb24xEDAOBgNVBAUTBzIxNTgxMTMxCzAJBgNVBAYTAlVTMQ4w +DAYDVQQRDAU5NDA0MzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91 +bnRhaW4gVmlldzEZMBcGA1UECQwQMzUwIEVsbGlzIFN0cmVldDEdMBsGA1UECgwU +U3ltYW50ZWMgQ29ycG9yYXRpb24xFzAVBgNVBAsMDlJvb3QgMiAtIFZBTElEMS0w +KwYDVQQDDCR2YWxpZC1yb290Mi53ZWJzZWN1cml0eS5zeW1hbnRlYy5jb20wggEi +MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDjQDZuIKKgrjmO0+0ty8WIlFZk +HcvIGX/kIAxByd/XA19h0Zk6kjFLgZaRtsUdRotG40DST72Ki8Vmy7nX3w/cqpFg +0x0nl7ZORE/L1EjEOUApqEpaA5GtcMaznu/SVVp2mZgoOWhn4EAvocT6GKQWaKi1 +/tCh6UiieHRz6L29CrN6/JWT6OXv6TGePkGcVKSjJrZoNMiNzoTFyCdvVpYutZiv +YsMzcRJ+KxTepwFM1imssBGc5WM2Wit+Z3kWJhYe0IdOIdqmuR6WxwLGb7nrY44R +dPy+h0n71GJvjbEzI+Qb/ehc8HjOGba0sh/+x/p14t7PplDZyicxzaC/tpTnAgMB +AAGjggMJMIIDBTAvBgNVHREEKDAmgiR2YWxpZC1yb290Mi53ZWJzZWN1cml0eS5z +eW1hbnRlYy5jb20wCQYDVR0TBAIwADAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYw +FAYIKwYBBQUHAwEGCCsGAQUFBwMCMG8GA1UdIARoMGYwWwYLYIZIAYb4RQEHFwYw +TDAjBggrBgEFBQcCARYXaHR0cHM6Ly9kLnN5bWNiLmNvbS9jcHMwJQYIKwYBBQUH +AgIwGQwXaHR0cHM6Ly9kLnN5bWNiLmNvbS9ycGEwBwYFZ4EMAQEwHwYDVR0jBBgw +FoAUsm3j5BQPjDxzQqZamRrTFHW2htswKwYDVR0fBCQwIjAgoB6gHIYaaHR0cDov +L3NoLnN5bWNiLmNvbS9zaC5jcmwwVwYIKwYBBQUHAQEESzBJMB8GCCsGAQUFBzAB +hhNodHRwOi8vc2guc3ltY2QuY29tMCYGCCsGAQUFBzAChhpodHRwOi8vc2guc3lt +Y2IuY29tL3NoLmNydDCCAX4GCisGAQQB1nkCBAIEggFuBIIBagFoAHYA3esdK3oN +T6Ygi4GtgWhwfi6OnQHVXIiNPRHEzbbsvswAAAFbxYHx8wAABAMARzBFAiEAoZAV +7qASZQXq7visy9vw4552zDWP/+K/8FmgvPpFHuACICl4k+7Omje9NoIRTwnPs4fm +fqW4rDXzK+HKIGNfEmQ4AHYApLkJkLQYWBSHuxOizGdwCjw1mAT5G9+443fNDsgN +3BAAAAFbxYHyLgAABAMARzBFAiAuvBGEqgabzmMmG2Tzv1KjGR0nTtEz1R1XluNc +w8NrnAIhAOBL9OgiJfN4SRq6Gmfesx8BJGFr7pDfpDKECGOT1uqZAHYA7ku9t3XO +YLrhQmkfq+GeZqMPfl+wctiDAMR7iXqo/csAAAFbxYHz8gAABAMARzBFAiEA2/T1 +kmfJQ/F0SrRDPozVMhaQW/ydrynOQovjsNJM3M0CIEN0T1ac8FsiatIVoxv690J3 +sIfanWlSX7UvPVShVGg2MA0GCSqGSIb3DQEBCwUAA4IBAQB4unTd5lxCGKsEyViE +m1AZpxTwISBdxuixpXoskuHwCw5LApp8WbaO0W4h4ZLfL+P2cAKx7awvfsaLKQ0i +tnmhyCZitwI9cfmRs8wwU3WgVH/CiIWv96R9mqA8AQ0pMRUp240idzd/VkLYc2RL +CFECQOdsgflyp95PqWyFD1aGdMmwCW5nFUYkbA18cJER5VG9nquBNROzM14z73Wa +PelMX56on9fk+KgryPQIMJFQxqwWbiszby6UaWLQ3ZDKiNwdJsmZWvQ/Gw05NTtp +J1gOExSwrDQM0X5gxMaSxTDU7zEWQz2kjYWjdtdtiq8AtRjQ8DlqXseTpHOUB8iW +5vWY +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFSTCCBDGgAwIBAgIQCbdJ/X8LSRbKBVZWz/bZgjANBgkqhkiG9w0BAQsFADCB +vTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL +ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJp +U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MTgwNgYDVQQDEy9W +ZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe +Fw0xMzA0MDkwMDAwMDBaFw0yMzA0MDgyMzU5NTlaMIGKMQswCQYDVQQGEwJVUzEd +MBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVj +IFRydXN0IE5ldHdvcmsxOzA5BgNVBAMTMlN5bWFudGVjIENsYXNzIDMgRXh0ZW5k +ZWQgVmFsaWRhdGlvbiBTSEEyNTYgU1NMIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC +AQ8AMIIBCgKCAQEAwUo5gP1SVSC5FK9OwhPfSgNKsGXFaGaKJJxyi63peok7gyXs +LFcSKSb3qHD0Y+AGVTyD8cPxY0sypzk9D/exa/G+Xxua5KoXZUbBpue3YXWKmCYZ +HqcPo8eypoUnOQR0G8YHFiqSqOjpm8RaIIoby0YJUeSi5CGDM9UnyXvbqOF2hljp +4b0TV2vgGq9xA7MV8EQB5WFk9fIRmVLs7ej1PRNrISfCxgPA8g/VWH/17yql/yjq +jeWOdt8sZmSbNb9j/Z9KSJ8whT7VsvH+yESoWC6gnWC9Cs7BJQgcTfK0w+tcOLfY +1JslzuMzFs/JL8wocPpjdNXExxEVpZnyKSLABQIDAQABo4IBdDCCAXAwNwYIKwYB +BQUHAQEEKzApMCcGCCsGAQUFBzABhhtodHRwOi8vb2NzcC53cy5zeW1hbnRlYy5j +b20wEgYDVR0TAQH/BAgwBgEB/wIBADBlBgNVHSAEXjBcMFoGBFUdIAAwUjAmBggr +BgEFBQcCARYaaHR0cDovL3d3dy5zeW1hdXRoLmNvbS9jcHMwKAYIKwYBBQUHAgIw +HBoaaHR0cDovL3d3dy5zeW1hdXRoLmNvbS9ycGEwPgYDVR0fBDcwNTAzoDGgL4Yt +aHR0cDovL2NybC53cy5zeW1hbnRlYy5jb20vdW5pdmVyc2FsLXJvb3QuY3JsMA4G +A1UdDwEB/wQEAwIBBjAqBgNVHREEIzAhpB8wHTEbMBkGA1UEAxMSVmVyaVNpZ25N +UEtJLTItMzcyMB0GA1UdDgQWBBSybePkFA+MPHNCplqZGtMUdbaG2zAfBgNVHSME +GDAWgBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEAdJ3d +mGjc+GgcDYkNvwlH3cWvtjX7EqazxfQGSbmJcnB0fKn1cxQh6wAW9VOsKBq0salx +V6wBS/SYJMULRSKRRtL+1rYIRPMbgwUcFMBo34qHylbm72/zlBO0W4VPrVe68Ow7 +gOeiAV+7ZYUARJc0uNiuIW+Xva9zHMVw3Mb3x2sgh6oEYmnI9sPzpHSPG1VPKrsH +NUZlCdqof2NXVfDrn0kVlVeqf8tER1EAWVaDHUCRLdgd0l9x7ibBbkUNxU0SP7+R +5TYnB2qysmYrhf8nQaKSs8pOAY371fbh5FTWa8ySae7kOY6dNM4Us/CAauNW7mW0 +zB9UpGiJBN2YLL3Pow== +-----END CERTIFICATE-----
--- a/test/sun/security/ssl/sanity/ciphersuites/CheckCipherSuites.java Wed Apr 03 03:51:25 2019 +0100 +++ b/test/sun/security/ssl/sanity/ciphersuites/CheckCipherSuites.java Tue Apr 16 02:48:40 2019 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2019, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,221 +23,140 @@ /* * @test - * @bug 4750141 4895631 + * @bug 4750141 4895631 8217579 * @summary Check enabled and supported ciphersuites are correct - * @ignore JSSE supported cipher suites are changed with CR 6916074, - * need to update this test case in JDK 7 soon + * @run main CheckCipherSuites default + * @run main/othervm CheckCipherSuites limited */ import java.util.*; - +import java.security.Security; import javax.net.ssl.*; -import javax.crypto.Cipher; -import javax.crypto.spec.*; - public class CheckCipherSuites { + // List of enabled cipher suites when the "crypto.policy" security + // property is set to "unlimited" (the default value). private final static String[] ENABLED_DEFAULT = { - "SSL_RSA_WITH_RC4_128_MD5", - "SSL_RSA_WITH_RC4_128_SHA", + "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384", + "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384", + "TLS_RSA_WITH_AES_256_CBC_SHA256", + "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384", + "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384", + "TLS_DHE_RSA_WITH_AES_256_CBC_SHA256", + "TLS_DHE_DSS_WITH_AES_256_CBC_SHA256", + "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA", + "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA", + "TLS_RSA_WITH_AES_256_CBC_SHA", + "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA", + "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA", + "TLS_DHE_RSA_WITH_AES_256_CBC_SHA", + "TLS_DHE_DSS_WITH_AES_256_CBC_SHA", + "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256", + "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256", + "TLS_RSA_WITH_AES_128_CBC_SHA256", + "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256", + "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256", + "TLS_DHE_RSA_WITH_AES_128_CBC_SHA256", + "TLS_DHE_DSS_WITH_AES_128_CBC_SHA256", + "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA", + "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA", "TLS_RSA_WITH_AES_128_CBC_SHA", - "TLS_ECDH_ECDSA_WITH_RC4_128_SHA", "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA", - "TLS_ECDH_RSA_WITH_RC4_128_SHA", "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA", - "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA", - "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA", - "TLS_ECDHE_RSA_WITH_RC4_128_SHA", - "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA", "TLS_DHE_RSA_WITH_AES_128_CBC_SHA", "TLS_DHE_DSS_WITH_AES_128_CBC_SHA", - "SSL_RSA_WITH_3DES_EDE_CBC_SHA", - "TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA", - "TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA", - "TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA", - "TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA", - "SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA", - "SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA", - "SSL_RSA_WITH_DES_CBC_SHA", - "SSL_DHE_RSA_WITH_DES_CBC_SHA", - "SSL_DHE_DSS_WITH_DES_CBC_SHA", - "SSL_RSA_EXPORT_WITH_RC4_40_MD5", - "SSL_RSA_EXPORT_WITH_DES40_CBC_SHA", - "SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA", - "SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA", - "TLS_EMPTY_RENEGOTIATION_INFO_SCSV", - + "TLS_EMPTY_RENEGOTIATION_INFO_SCSV" }; - private final static String[] ENABLED_UNLIMITED = { - "SSL_RSA_WITH_RC4_128_MD5", - "SSL_RSA_WITH_RC4_128_SHA", - "TLS_RSA_WITH_AES_128_CBC_SHA", - "TLS_RSA_WITH_AES_256_CBC_SHA", - "TLS_ECDH_ECDSA_WITH_RC4_128_SHA", - "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA", - "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA", - "TLS_ECDH_RSA_WITH_RC4_128_SHA", - "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA", - "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA", - "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA", + // List of enabled cipher suites when the "crypto.policy" security + // property is set to "limited". + private final static String[] ENABLED_LIMITED = { + "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256", + "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256", + "TLS_RSA_WITH_AES_128_CBC_SHA256", + "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256", + "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256", + "TLS_DHE_RSA_WITH_AES_128_CBC_SHA256", + "TLS_DHE_DSS_WITH_AES_128_CBC_SHA256", "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA", - "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA", - "TLS_ECDHE_RSA_WITH_RC4_128_SHA", "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA", - "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA", - "TLS_DHE_RSA_WITH_AES_128_CBC_SHA", - "TLS_DHE_RSA_WITH_AES_256_CBC_SHA", - "TLS_DHE_DSS_WITH_AES_128_CBC_SHA", - "TLS_DHE_DSS_WITH_AES_256_CBC_SHA", - "SSL_RSA_WITH_3DES_EDE_CBC_SHA", - "TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA", - "TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA", - "TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA", - "TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA", - "SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA", - "SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA", - "SSL_RSA_WITH_DES_CBC_SHA", - "SSL_DHE_RSA_WITH_DES_CBC_SHA", - "SSL_DHE_DSS_WITH_DES_CBC_SHA", - "SSL_RSA_EXPORT_WITH_RC4_40_MD5", - "SSL_RSA_EXPORT_WITH_DES40_CBC_SHA", - "SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA", - "SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA", - "TLS_EMPTY_RENEGOTIATION_INFO_SCSV", - - }; - - // supported ciphersuites using default JCE policy jurisdiction files - // AES/256 unavailable - private final static String[] SUPPORTED_DEFAULT = { - "SSL_RSA_WITH_RC4_128_MD5", - "SSL_RSA_WITH_RC4_128_SHA", "TLS_RSA_WITH_AES_128_CBC_SHA", - "TLS_ECDH_ECDSA_WITH_RC4_128_SHA", "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA", - "TLS_ECDH_RSA_WITH_RC4_128_SHA", "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA", - "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA", - "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA", - "TLS_ECDHE_RSA_WITH_RC4_128_SHA", - "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA", "TLS_DHE_RSA_WITH_AES_128_CBC_SHA", "TLS_DHE_DSS_WITH_AES_128_CBC_SHA", - "SSL_RSA_WITH_3DES_EDE_CBC_SHA", - "TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA", - "TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA", - "TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA", - "TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA", - "SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA", - "SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA", - "SSL_RSA_WITH_DES_CBC_SHA", - "SSL_DHE_RSA_WITH_DES_CBC_SHA", - "SSL_DHE_DSS_WITH_DES_CBC_SHA", - "SSL_RSA_EXPORT_WITH_RC4_40_MD5", - "SSL_RSA_EXPORT_WITH_DES40_CBC_SHA", - "SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA", - "SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA", - "TLS_EMPTY_RENEGOTIATION_INFO_SCSV", - - "SSL_RSA_WITH_NULL_MD5", - "SSL_RSA_WITH_NULL_SHA", - "TLS_ECDH_ECDSA_WITH_NULL_SHA", - "TLS_ECDH_RSA_WITH_NULL_SHA", - "TLS_ECDHE_ECDSA_WITH_NULL_SHA", - "TLS_ECDHE_RSA_WITH_NULL_SHA", - "SSL_DH_anon_WITH_RC4_128_MD5", - "TLS_DH_anon_WITH_AES_128_CBC_SHA", - "SSL_DH_anon_WITH_3DES_EDE_CBC_SHA", - "SSL_DH_anon_WITH_DES_CBC_SHA", - "TLS_ECDH_anon_WITH_RC4_128_SHA", - "TLS_ECDH_anon_WITH_AES_128_CBC_SHA", - "TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA", - "SSL_DH_anon_EXPORT_WITH_RC4_40_MD5", - "SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA", - "TLS_ECDH_anon_WITH_NULL_SHA", - "TLS_KRB5_WITH_RC4_128_SHA", - "TLS_KRB5_WITH_RC4_128_MD5", - "TLS_KRB5_WITH_3DES_EDE_CBC_SHA", - "TLS_KRB5_WITH_3DES_EDE_CBC_MD5", - "TLS_KRB5_WITH_DES_CBC_SHA", - "TLS_KRB5_WITH_DES_CBC_MD5", - "TLS_KRB5_EXPORT_WITH_RC4_40_SHA", - "TLS_KRB5_EXPORT_WITH_RC4_40_MD5", - "TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA", - "TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5", - + "TLS_EMPTY_RENEGOTIATION_INFO_SCSV" }; - // supported ciphersuites using unlimited JCE policy jurisdiction files - // AES/256 available - private final static String[] SUPPORTED_UNLIMITED = { - "SSL_RSA_WITH_RC4_128_MD5", - "SSL_RSA_WITH_RC4_128_SHA", - "TLS_RSA_WITH_AES_128_CBC_SHA", + // List of supported cipher suites when the "crypto.policy" security + // property is set to "unlimited" (the default value). + private final static String[] SUPPORTED_DEFAULT = { + "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384", + "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384", + "TLS_RSA_WITH_AES_256_CBC_SHA256", + "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384", + "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384", + "TLS_DHE_RSA_WITH_AES_256_CBC_SHA256", + "TLS_DHE_DSS_WITH_AES_256_CBC_SHA256", + "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA", + "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA", "TLS_RSA_WITH_AES_256_CBC_SHA", - "TLS_ECDH_ECDSA_WITH_RC4_128_SHA", - "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA", "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA", - "TLS_ECDH_RSA_WITH_RC4_128_SHA", - "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA", "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA", - "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA", - "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA", - "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA", - "TLS_ECDHE_RSA_WITH_RC4_128_SHA", - "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA", - "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA", - "TLS_DHE_RSA_WITH_AES_128_CBC_SHA", "TLS_DHE_RSA_WITH_AES_256_CBC_SHA", - "TLS_DHE_DSS_WITH_AES_128_CBC_SHA", "TLS_DHE_DSS_WITH_AES_256_CBC_SHA", - "SSL_RSA_WITH_3DES_EDE_CBC_SHA", - "TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA", - "TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA", - "TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA", - "TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA", - "SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA", - "SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA", - "SSL_RSA_WITH_DES_CBC_SHA", - "SSL_DHE_RSA_WITH_DES_CBC_SHA", - "SSL_DHE_DSS_WITH_DES_CBC_SHA", - "SSL_RSA_EXPORT_WITH_RC4_40_MD5", - "SSL_RSA_EXPORT_WITH_DES40_CBC_SHA", - "SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA", - "SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA", + "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256", + "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256", + "TLS_RSA_WITH_AES_128_CBC_SHA256", + "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256", + "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256", + "TLS_DHE_RSA_WITH_AES_128_CBC_SHA256", + "TLS_DHE_DSS_WITH_AES_128_CBC_SHA256", + "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA", + "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA", + "TLS_RSA_WITH_AES_128_CBC_SHA", + "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA", + "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA", + "TLS_DHE_RSA_WITH_AES_128_CBC_SHA", + "TLS_DHE_DSS_WITH_AES_128_CBC_SHA", "TLS_EMPTY_RENEGOTIATION_INFO_SCSV", + "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA", + "TLS_ECDHE_RSA_WITH_RC4_128_SHA", + "SSL_RSA_WITH_RC4_128_SHA", + "TLS_ECDH_ECDSA_WITH_RC4_128_SHA", + "TLS_ECDH_RSA_WITH_RC4_128_SHA", + "SSL_RSA_WITH_RC4_128_MD5", + "TLS_KRB5_WITH_RC4_128_SHA", + "TLS_KRB5_WITH_RC4_128_MD5" + }; - "SSL_RSA_WITH_NULL_MD5", - "SSL_RSA_WITH_NULL_SHA", - "TLS_ECDH_ECDSA_WITH_NULL_SHA", - "TLS_ECDH_RSA_WITH_NULL_SHA", - "TLS_ECDHE_ECDSA_WITH_NULL_SHA", - "TLS_ECDHE_RSA_WITH_NULL_SHA", - "SSL_DH_anon_WITH_RC4_128_MD5", - "TLS_DH_anon_WITH_AES_128_CBC_SHA", - "TLS_DH_anon_WITH_AES_256_CBC_SHA", - "SSL_DH_anon_WITH_3DES_EDE_CBC_SHA", - "SSL_DH_anon_WITH_DES_CBC_SHA", - "TLS_ECDH_anon_WITH_RC4_128_SHA", - "TLS_ECDH_anon_WITH_AES_128_CBC_SHA", - "TLS_ECDH_anon_WITH_AES_256_CBC_SHA", - "TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA", - "SSL_DH_anon_EXPORT_WITH_RC4_40_MD5", - "SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA", - "TLS_ECDH_anon_WITH_NULL_SHA", + // List of supported cipher suites when the "crypto.policy" security + // property is set to "limited". + private final static String[] SUPPORTED_LIMITED = { + "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256", + "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256", + "TLS_RSA_WITH_AES_128_CBC_SHA256", + "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256", + "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256", + "TLS_DHE_RSA_WITH_AES_128_CBC_SHA256", + "TLS_DHE_DSS_WITH_AES_128_CBC_SHA256", + "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA", + "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA", + "TLS_RSA_WITH_AES_128_CBC_SHA", + "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA", + "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA", + "TLS_DHE_RSA_WITH_AES_128_CBC_SHA", + "TLS_DHE_DSS_WITH_AES_128_CBC_SHA", + "TLS_EMPTY_RENEGOTIATION_INFO_SCSV", + "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA", + "TLS_ECDHE_RSA_WITH_RC4_128_SHA", + "SSL_RSA_WITH_RC4_128_SHA", + "TLS_ECDH_ECDSA_WITH_RC4_128_SHA", + "TLS_ECDH_RSA_WITH_RC4_128_SHA", + "SSL_RSA_WITH_RC4_128_MD5", "TLS_KRB5_WITH_RC4_128_SHA", - "TLS_KRB5_WITH_RC4_128_MD5", - "TLS_KRB5_WITH_3DES_EDE_CBC_SHA", - "TLS_KRB5_WITH_3DES_EDE_CBC_MD5", - "TLS_KRB5_WITH_DES_CBC_SHA", - "TLS_KRB5_WITH_DES_CBC_MD5", - "TLS_KRB5_EXPORT_WITH_RC4_40_SHA", - "TLS_KRB5_EXPORT_WITH_RC4_40_MD5", - "TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA", - "TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5", - + "TLS_KRB5_WITH_RC4_128_MD5" }; private static void showSuites(String[] suites) { @@ -252,19 +171,21 @@ public static void main(String[] args) throws Exception { long start = System.currentTimeMillis(); + if (args.length != 1) { + throw new Exception("One arg required"); + } + String[] ENABLED; String[] SUPPORTED; - try { - Cipher c = Cipher.getInstance("AES/CBC/NoPadding"); - SecretKeySpec key = new SecretKeySpec(new byte[32], "AES"); - c.init(Cipher.ENCRYPT_MODE, key); - System.out.println("AES/256 is available"); - ENABLED = ENABLED_UNLIMITED; - SUPPORTED = SUPPORTED_UNLIMITED; - } catch (Exception e) { - System.out.println("AES/256 is NOT available (" + e + ")"); + if (args[0].equals("default")) { ENABLED = ENABLED_DEFAULT; SUPPORTED = SUPPORTED_DEFAULT; + } else if (args[0].equals("limited")) { + Security.setProperty("crypto.policy", "limited"); + ENABLED = ENABLED_LIMITED; + SUPPORTED = SUPPORTED_LIMITED; + } else { + throw new Exception("Illegal argument"); } SSLSocketFactory factory = (SSLSocketFactory)SSLSocketFactory.getDefault();
--- a/test/sun/text/resources/LocaleData Wed Apr 03 03:51:25 2019 +0100 +++ b/test/sun/text/resources/LocaleData Tue Apr 16 02:48:40 2019 +0100 @@ -6373,8 +6373,8 @@ CurrencyNames//bif=Burundian Franc CurrencyNames//bob=Bolivian Boliviano CurrencyNames//btn=Bhutanese Ngultrum -CurrencyNames//byb=Belarusian New Ruble (1994-1999) -CurrencyNames//byr=Belarusian Ruble +CurrencyNames//byb=Belarusian Ruble (1994-1999) +CurrencyNames//byr=Belarusian Ruble (2000-2016) CurrencyNames//cdf=Congolese Franc CurrencyNames//clf=Chilean Unit of Account (UF) CurrencyNames//cny=Chinese Yuan @@ -6406,7 +6406,6 @@ CurrencyNames//mro=Mauritanian Ouguiya CurrencyNames//mur=Mauritian Rupee CurrencyNames//mvr=Maldivian Rufiyaa -CurrencyNames//mwk=Malawian Kwacha CurrencyNames//mxv=Mexican Investment Unit CurrencyNames//mzm=Mozambican Metical (1980-2006) CurrencyNames//mzn=Mozambican Metical @@ -6414,7 +6413,6 @@ CurrencyNames//nio=Nicaraguan C\u00f3rdoba CurrencyNames//nlg=Dutch Guilder CurrencyNames//omr=Omani Rial -CurrencyNames//pen=Peruvian Nuevo Sol CurrencyNames//pgk=Papua New Guinean Kina CurrencyNames//pkr=Pakistani Rupee CurrencyNames//pyg=Paraguayan Guarani @@ -7033,3 +7031,14 @@ # bug 8027695 FormatData/sv_SE/NumberPatterns/2=#,##0 % + +# bug #8129361 +CurrencyNames//hrk=Kuna + +# bug #8164784 +CurrencyNames//mwk=Malawian Malawi Kwacha +CurrencyNames//pen=Peruvian Sol + +# bug #8145952 +CurrencyNames//byn=Belarusian Ruble +CurrencyNames/be_BY/BYN=\u0420\u0443\u0431
--- a/test/sun/text/resources/LocaleDataTest.java Wed Apr 03 03:51:25 2019 +0100 +++ b/test/sun/text/resources/LocaleDataTest.java Tue Apr 16 02:48:40 2019 +0100 @@ -34,7 +34,8 @@ * 6509039 6609737 6610748 6645271 6507067 6873931 6450945 6645268 6646611 * 6645405 6650730 6910489 6573250 6870908 6585666 6716626 6914413 6916787 * 6919624 6998391 7019267 7020960 7025837 7020583 7036905 7066203 7189611 - * 7171028 8013836 7028073 7195759 7085757 6931564 8027695 + * 7171028 8013836 7028073 7195759 7085757 6931564 8027695 8129361 + * 8145952 8164784 * @summary Verify locale data * */