1 /* 2 * Copyright (c) 2023, 2024, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 */ 23 24 import static org.junit.jupiter.api.Assertions.*; 25 26 import org.junit.jupiter.api.Test; 27 import org.junit.jupiter.params.provider.MethodSource; 28 import org.junit.jupiter.params.ParameterizedTest; 29 30 import jdk.internal.misc.PreviewFeatures; 31 32 import java.util.Arrays; 33 import java.util.stream.Stream; 34 35 import java.time.Duration; 36 import java.time.Instant; 37 import java.time.LocalDate; 38 import java.time.LocalDateTime; 39 import java.time.LocalTime; 40 import java.time.MonthDay; 41 import java.time.OffsetDateTime; 42 import java.time.OffsetTime; 43 import java.util.Optional; 44 import java.util.OptionalDouble; 45 import java.util.OptionalInt; 46 import java.util.OptionalLong; 47 import java.time.Period; 48 import java.time.Year; 49 import java.time.YearMonth; 50 import java.time.ZonedDateTime; 51 52 /* 53 * @test 54 * @summary Test that classes are value classes or not depending on --enable-preview 55 * @modules java.base/jdk.internal.misc 56 * @run junit/othervm -Xlog --enable-preview UseValueClassTest 57 * @run junit/othervm -Xlog UseValueClassTest 58 */ 59 60 public class UseValueClassTest { 61 62 // Classes to be checked 63 private static Stream<Class<?>> classProvider() { 64 Class<?>[] classes = { 65 Byte.class, 66 Short.class, 67 Integer.class, 68 Long.class, 69 Float.class, 70 Double.class, 71 Boolean.class, 72 Character.class, 73 Number.class, 74 Record.class, 75 Duration.class, 76 Instant.class, 77 LocalDate.class, 78 LocalDateTime.class, 79 LocalTime.class, 80 MonthDay.class, 81 OffsetDateTime.class, 82 OffsetTime.class, 83 Optional.class, 84 OptionalDouble.class, 85 OptionalInt.class, 86 OptionalLong.class, 87 Period.class, 88 Year.class, 89 YearMonth.class, 90 ZonedDateTime.class, 91 }; 92 return Arrays.stream(classes, 0, classes.length); 93 } 94 95 /** 96 * Verify that the class is a value class if --enable-preview is true 97 * @param clazz a class 98 */ 99 @ParameterizedTest 100 @MethodSource("classProvider") 101 public void testValue(Class<?> clazz) { 102 System.out.printf("isPreview: %s%n", PreviewFeatures.isEnabled()); 103 assertEquals(PreviewFeatures.isEnabled(), clazz.isValue(), clazz.getName()); 104 } 105 }