undefect. CWE-407 — 63 sites patched across 27 ecosystems
Authors: russell@unturf.com · brackishbert@gmail.com · foxhop.net · TimeHexOn.com Patches, unit tests, benchmarks, whitepaper, and outreach briefs. Public domain — no copyright claimed. Use freely.
This commit is contained in:
commit
0a580b313d
70422 changed files with 17213626 additions and 0 deletions
141
test/jdk/java/util/TimeZone/DefaultTimeZoneTest.java
Normal file
141
test/jdk/java/util/TimeZone/DefaultTimeZoneTest.java
Normal file
|
|
@ -0,0 +1,141 @@
|
|||
/*
|
||||
* Copyright (c) 2005, 2025, 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 4296930 5033603 7092679
|
||||
* @summary Ensure that Java detects the platform time zone correctly, even
|
||||
* if changed during runtime. Also ensure that the system time zone detection code
|
||||
* detects the "Automatically adjust clock for daylight saving changes" setting
|
||||
* correctly on Windows. This is a manual test dependent on making changes to
|
||||
* the platform setting of the machine and thus cannot be automated.
|
||||
* @library /java/awt/regtesthelpers
|
||||
* @build PassFailJFrame
|
||||
* @run main/manual DefaultTimeZoneTest
|
||||
*/
|
||||
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.SwingConstants;
|
||||
import javax.swing.BoxLayout;
|
||||
import javax.swing.Box;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.Component;
|
||||
import java.awt.BorderLayout;
|
||||
import java.awt.Window;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
import java.util.TimeZone;
|
||||
|
||||
public class DefaultTimeZoneTest {
|
||||
|
||||
private static final SimpleDateFormat SDF =
|
||||
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss zzzz (XXX)");
|
||||
private static final String INSTRUCTIONS =
|
||||
"""
|
||||
Tests the platform time zone detection on all platforms.
|
||||
(Part I) and on/off of DST adjustment on Windows (Part II).
|
||||
|
||||
Part I:
|
||||
Observe the displayed Time zone ID and the local time.
|
||||
Change the platform time zone setting, then click the
|
||||
"Update Time Zone" button. If the ID and local time
|
||||
update correctly, part I passes, otherwise press fail. Note that
|
||||
some time zone IDs have their aliases that may be displayed.
|
||||
For example, "US/Pacific" is an alias of "America/Los_Angeles".
|
||||
If this platform is Windows, proceed to Part II. Otherwise, press
|
||||
the Pass button to complete this test.
|
||||
|
||||
Part II:
|
||||
Note that Part II may require the Administrator privilege to change
|
||||
Windows setting.
|
||||
|
||||
1. Open the Settings app and navigate to Time & Language > Date & Time
|
||||
2. Select any time zone where daylight saving time is *currently*
|
||||
in effect, such as "(GMT-08:00) Pacific Time (US & Canada);
|
||||
Tijuana", "(GMT+10:00) Canberra, Melbourne, Sydney", and Apply.
|
||||
3. After pressing "Update Time Zone" button, observe that the local
|
||||
time on the Settings app and the test local time are the same (daylight time).
|
||||
4. Turn off "Adjust for daylight saving time automatically"
|
||||
5. Observe the two local times should be the same (standard time).
|
||||
6. Turn on "Adjust for daylight saving time automatically"
|
||||
|
||||
If the local time in the Settings app and test window are always the same,
|
||||
then this test passes. Press the Pass or Fail button based on the Part II
|
||||
result and complete the test.
|
||||
""";
|
||||
|
||||
public static void main(String[] args)
|
||||
throws InterruptedException, InvocationTargetException {
|
||||
// Force platform time zone as default time zone
|
||||
TimeZone.setDefault(null);
|
||||
System.setProperty("user.timezone", "");
|
||||
// Construct test window
|
||||
PassFailJFrame.builder()
|
||||
.title("DefaultTimeZoneTest Instructions")
|
||||
.testUI(createTest())
|
||||
.instructions(INSTRUCTIONS)
|
||||
.build().awaitAndCheck();
|
||||
}
|
||||
|
||||
private static Window createTest() {
|
||||
var contents = new JFrame("DefaultTimeZoneTest");
|
||||
contents.setSize(350, 250);
|
||||
// Panel with vertical layout
|
||||
var panel = new JPanel();
|
||||
panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS));
|
||||
// Time zone ID label
|
||||
var timeZoneID = new JLabel("Time zone ID: " + SDF.getTimeZone().getID(), SwingConstants.CENTER);
|
||||
timeZoneID.setAlignmentX(Component.CENTER_ALIGNMENT);
|
||||
// Time label
|
||||
var label = new JLabel(SDF.format(new Date()), SwingConstants.CENTER);
|
||||
label.setAlignmentX(Component.CENTER_ALIGNMENT);
|
||||
// Update button
|
||||
var button = new JButton("Update Time Zone");
|
||||
button.setAlignmentX(Component.CENTER_ALIGNMENT);
|
||||
// Add components with spacing
|
||||
panel.add(Box.createRigidArea(new Dimension(0, 10)));
|
||||
panel.add(timeZoneID);
|
||||
panel.add(Box.createRigidArea(new Dimension(0, 5)));
|
||||
panel.add(label);
|
||||
panel.add(Box.createRigidArea(new Dimension(0, 10)));
|
||||
panel.add(button);
|
||||
contents.add(panel);
|
||||
|
||||
// Update default time zone on button click
|
||||
button.addActionListener(e -> {
|
||||
// Clear JVM cached timezone and force reload from OS
|
||||
TimeZone.setDefault(null);
|
||||
System.setProperty("user.timezone", "");
|
||||
TimeZone tz = TimeZone.getDefault();
|
||||
SDF.setTimeZone(tz);
|
||||
timeZoneID.setText("Time zone ID: " + tz.getID());
|
||||
label.setText(SDF.format(new Date()));
|
||||
contents.repaint();
|
||||
});
|
||||
return contents;
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue