mirror of
https://github.com/JetBrains/JetBrainsRuntime.git
synced 2026-01-29 11:50:50 +01:00
Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7714eae794 |
@@ -109,12 +109,6 @@ else
|
||||
WITH_BUNDLED_FREETYPE=""
|
||||
fi
|
||||
|
||||
if [ "$bundle_type" == "lb" ]; then
|
||||
WITH_VULKAN=""
|
||||
else
|
||||
WITH_VULKAN="--with-vulkan"
|
||||
fi
|
||||
|
||||
REPRODUCIBLE_BUILD_OPTS="--with-source-date=$SOURCE_DATE_EPOCH
|
||||
--with-hotspot-build-time=$BUILD_TIME
|
||||
--with-copyright-year=$COPYRIGHT_YEAR
|
||||
|
||||
@@ -54,7 +54,7 @@ function do_configure {
|
||||
--with-boot-jdk="$BOOT_JDK" \
|
||||
--enable-cds=yes \
|
||||
--with-gtk-shell1-protocol=$GTK_SHELL_PATH \
|
||||
$WITH_VULKAN \
|
||||
--with-vulkan \
|
||||
$DISABLE_WARNINGS_AS_ERRORS \
|
||||
$STATIC_CONF_ARGS \
|
||||
$REPRODUCIBLE_BUILD_OPTS \
|
||||
@@ -133,11 +133,6 @@ case "$bundle_type" in
|
||||
jbr_name_postfix="_${bundle_type}"
|
||||
do_maketest=1
|
||||
;;
|
||||
"lb")
|
||||
do_reset_changes=1
|
||||
jbr_name_postfix="_${bundle_type}"
|
||||
do_maketest=1
|
||||
;;
|
||||
"nomod" | "")
|
||||
bundle_type=""
|
||||
;;
|
||||
|
||||
@@ -50,6 +50,12 @@ function do_configure {
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -n "${JCEF_BUILD_LEGACY:-}" ]; then
|
||||
WITH_VULKAN=""
|
||||
else
|
||||
WITH_VULKAN="--with-vulkan"
|
||||
fi
|
||||
|
||||
sh configure \
|
||||
$WITH_DEBUG_LEVEL \
|
||||
--with-vendor-name="$VENDOR_NAME" \
|
||||
@@ -150,11 +156,6 @@ case "$bundle_type" in
|
||||
jbrsdk_name_postfix="_${bundle_type}"
|
||||
do_maketest=1
|
||||
;;
|
||||
"lb")
|
||||
do_reset_changes=1
|
||||
jbr_name_postfix="_${bundle_type}"
|
||||
do_maketest=1
|
||||
;;
|
||||
"nomod" | "")
|
||||
bundle_type=""
|
||||
jbrsdk_name_postfix="_${bundle_type}"
|
||||
@@ -185,7 +186,7 @@ JBRSDK_BUNDLE=jbrsdk
|
||||
echo Fixing permissions
|
||||
chmod -R a+r $JSDK
|
||||
|
||||
if [ "$bundle_type" == "jcef" ] || [ "$bundle_type" == "lb" ]; then
|
||||
if [ "$bundle_type" == "jcef" ]; then
|
||||
git apply -p0 < jb/project/tools/patches/add_jcef_module.patch || do_exit $?
|
||||
update_jsdk_mods $JSDK $JCEF_PATH/jmods $JSDK/jmods $JSDK_MODS_DIR || do_exit $?
|
||||
cp $JCEF_PATH/jmods/* $JSDK_MODS_DIR # $JSDK/jmods is not changed
|
||||
@@ -198,7 +199,7 @@ create_image_bundle "jbr${jbr_name_postfix}" "jbr" $JSDK_MODS_DIR "$modules" ||
|
||||
|
||||
# create sdk image bundle
|
||||
modules=$(cat $JSDK/release | grep MODULES | sed s/MODULES=//g | sed s/' '/','/g | sed s/\"//g | sed s/\\n//g) || do_exit $?
|
||||
if [ "$bundle_type" == "jcef" ] || [ "$bundle_type" == "lb" ] || [ "$bundle_type" == "$JBRSDK_BUNDLE" ]; then
|
||||
if [ "$bundle_type" == "jcef" ]|| [ "$bundle_type" == "$JBRSDK_BUNDLE" ]; then
|
||||
modules=${modules},$(get_mods_list "$JCEF_PATH"/jmods)
|
||||
fi
|
||||
create_image_bundle "$JBRSDK_BUNDLE${jbr_name_postfix}" $JBRSDK_BUNDLE $JSDK_MODS_DIR "$modules" || do_exit $?
|
||||
|
||||
@@ -28,6 +28,7 @@ package java.io;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.channels.FileChannel;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.InvalidPathException;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.StandardOpenOption;
|
||||
import java.util.Arrays;
|
||||
@@ -157,11 +158,25 @@ public class FileInputStream extends InputStream
|
||||
|
||||
try (var guard = IoOverNio.RecursionGuard.create(FileInputStream.class)) {
|
||||
IoOverNio.blackhole(guard);
|
||||
Path nioPath = IoOverNioFileSystem.getNioPath(file, true);
|
||||
useNio = nioPath != null;
|
||||
java.nio.file.FileSystem nioFs = IoOverNioFileSystem.acquireNioFs(path);
|
||||
Path nioPath = null;
|
||||
if (nioFs != null && path != null) {
|
||||
try {
|
||||
nioPath = nioFs.getPath(path);
|
||||
isRegularFile = Files.isRegularFile(nioPath);
|
||||
} catch (InvalidPathException _) {
|
||||
// Nothing.
|
||||
}
|
||||
}
|
||||
|
||||
// Two significant differences between the legacy java.io and java.nio.files:
|
||||
// * java.nio.file allows to open directories as streams, java.io.FileInputStream doesn't.
|
||||
// * java.nio.file doesn't work well with pseudo devices, i.e., `seek()` fails, while java.io works well.
|
||||
useNio = nioPath != null && isRegularFile == Boolean.TRUE;
|
||||
|
||||
if (useNio) {
|
||||
var bundle = IoOverNioFileSystem.initializeStreamUsingNio(
|
||||
this, nioPath.getFileSystem(), file, nioPath, Set.of(StandardOpenOption.READ), channelCleanable);
|
||||
this, nioFs, file, nioPath, Set.of(StandardOpenOption.READ), channelCleanable);
|
||||
channel = bundle.channel();
|
||||
fd = bundle.fd();
|
||||
externalChannelHolder = bundle.externalChannelHolder();
|
||||
|
||||
@@ -227,10 +227,11 @@ public class FileOutputStream extends OutputStream
|
||||
|
||||
try (var guard = IoOverNio.RecursionGuard.create(FileOutputStream.class)) {
|
||||
IoOverNio.blackhole(guard);
|
||||
Path nioPath = IoOverNioFileSystem.getNioPath(file, false);
|
||||
useNio = nioPath != null;
|
||||
java.nio.file.FileSystem nioFs = IoOverNioFileSystem.acquireNioFs(path);
|
||||
useNio = path != null && nioFs != null;
|
||||
if (useNio) {
|
||||
java.nio.file.FileSystem nioFs = nioPath.getFileSystem();
|
||||
Path nioPath = nioFs.getPath(path);
|
||||
|
||||
// java.io backend doesn't open DOS hidden files for writing, but java.nio.file opens.
|
||||
// This code mimics the old behavior.
|
||||
if (nioFs.getSeparator().equals("\\")) {
|
||||
|
||||
@@ -41,7 +41,6 @@ import java.nio.file.FileSystems;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.InvalidPathException;
|
||||
import java.nio.file.LinkOption;
|
||||
import java.nio.file.NoSuchFileException;
|
||||
import java.nio.file.OpenOption;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.StandardCopyOption;
|
||||
@@ -59,7 +58,6 @@ import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.EnumSet;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
|
||||
@@ -125,69 +123,6 @@ class IoOverNioFileSystem extends FileSystem {
|
||||
return result;
|
||||
}
|
||||
|
||||
static Path getNioPath(File file, boolean mustBeRegularFile) {
|
||||
String path = file.getPath();
|
||||
java.nio.file.FileSystem nioFs = IoOverNioFileSystem.acquireNioFs(path);
|
||||
if (nioFs == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
Path nioPath;
|
||||
try {
|
||||
nioPath = nioFs.getPath(path);
|
||||
} catch (InvalidPathException _) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (!mustBeRegularFile) {
|
||||
return nioPath;
|
||||
}
|
||||
|
||||
if (isWindowsPipe(nioPath)) {
|
||||
// https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-createnamedpipea see nMaxInstances:
|
||||
//
|
||||
// Getting file attributes in this case is dangerous.
|
||||
// GetFileAttributesW acquires a connection to the pipe internally,
|
||||
// occupying a place on the server side.
|
||||
// The server and the client are very likely two different processes, and it takes time to deliver
|
||||
// the connection closing message to the server.
|
||||
// If the caller invokes CreateFileW fast enough after GetFileAttributesW and nMaxInstances = 1,
|
||||
// CreateFileW is called before the server closes the previous connection created by GetFileAttributesW
|
||||
// and ERROR_PIPE_BUSY is returned.
|
||||
//
|
||||
// Anyway, `readAttributes(nioPath).isRegularFile()` returns true for pipes, so it's safe to return here.
|
||||
return nioPath;
|
||||
}
|
||||
|
||||
// Two significant differences between the legacy java.io and java.nio.files:
|
||||
// * java.nio.file allows to open directories as streams, java.io.FileInputStream doesn't.
|
||||
// * java.nio.file doesn't work well with pseudo devices, i.e., `seek()` fails, while java.io works well.
|
||||
try {
|
||||
if (Files.readAttributes(nioPath, BasicFileAttributes.class, LinkOption.NOFOLLOW_LINKS).isRegularFile()) {
|
||||
return nioPath;
|
||||
}
|
||||
} catch (NoSuchFileException _) {
|
||||
return nioPath;
|
||||
} catch (IOException _) {
|
||||
// Ignored.
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* <a href="https://learn.microsoft.com/en-us/windows/win32/ipc/pipe-names">
|
||||
* The pipe path format: {@code ^\\(\w+|\.)\pipe\.*}
|
||||
* </a>
|
||||
*/
|
||||
private static boolean isWindowsPipe(Path path) {
|
||||
// A small JMH benchmark shows that this code takes less than a microsecond,
|
||||
// and the JIT compiler does its job very well here.
|
||||
return path.isAbsolute() &&
|
||||
path.getRoot().toString().startsWith("\\\\") &&
|
||||
path.getRoot().toString().toLowerCase(Locale.getDefault()).endsWith("\\pipe\\");
|
||||
}
|
||||
|
||||
private static boolean setPermission0(java.nio.file.FileSystem nioFs, File f, int access, boolean enable, boolean owneronly) {
|
||||
if (f.getPath().isEmpty()) {
|
||||
if (nioFs.getSeparator().equals("\\")) {
|
||||
|
||||
@@ -27,11 +27,16 @@ package java.io;
|
||||
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.channels.FileChannel;
|
||||
import java.nio.file.Path;
|
||||
|
||||
import java.nio.channels.NonWritableChannelException;
|
||||
import java.nio.file.FileSystem;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.InvalidPathException;
|
||||
import java.nio.file.LinkOption;
|
||||
import java.nio.file.NoSuchFileException;
|
||||
import java.nio.file.OpenOption;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.StandardOpenOption;
|
||||
import java.nio.file.attribute.BasicFileAttributes;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashSet;
|
||||
|
||||
@@ -276,11 +281,35 @@ public class RandomAccessFile implements DataOutput, DataInput, Closeable {
|
||||
|
||||
try (var guard = IoOverNio.RecursionGuard.create(RandomAccessFile.class)) {
|
||||
IoOverNio.blackhole(guard);
|
||||
Path nioPath = IoOverNioFileSystem.getNioPath(file, true);
|
||||
useNio = nioPath != null;
|
||||
FileSystem nioFs = IoOverNioFileSystem.acquireNioFs(path);
|
||||
Path nioPath = null;
|
||||
if (nioFs != null) {
|
||||
try {
|
||||
nioPath = nioFs.getPath(path);
|
||||
} catch (InvalidPathException _) {
|
||||
// Nothing.
|
||||
}
|
||||
}
|
||||
|
||||
// Two significant differences between the legacy java.io and java.nio.files:
|
||||
// * java.nio.file allows to open directories as streams, java.io.FileInputStream doesn't.
|
||||
// * java.nio.file doesn't work well with pseudo devices, i.e., `seek()` fails, while java.io works well.
|
||||
boolean isRegularFile;
|
||||
try {
|
||||
isRegularFile = nioPath != null &&
|
||||
Files.readAttributes(nioPath, BasicFileAttributes.class, LinkOption.NOFOLLOW_LINKS).isRegularFile();
|
||||
}
|
||||
catch (NoSuchFileException _) {
|
||||
isRegularFile = true;
|
||||
}
|
||||
catch (IOException _) {
|
||||
isRegularFile = false;
|
||||
}
|
||||
|
||||
useNio = nioPath != null && isRegularFile;
|
||||
if (useNio) {
|
||||
var bundle = IoOverNioFileSystem.initializeStreamUsingNio(
|
||||
this, nioPath.getFileSystem(), file, nioPath, optionsForChannel(imode), channelCleanable);
|
||||
this, nioFs, file, nioPath, optionsForChannel(imode), channelCleanable);
|
||||
channel = bundle.channel();
|
||||
fd = bundle.fd();
|
||||
externalChannelHolder = bundle.externalChannelHolder();
|
||||
|
||||
@@ -850,6 +850,22 @@ public class CSS implements Serializable {
|
||||
return r != null ? r : conv.parseCssValue(key.getDefaultValue());
|
||||
}
|
||||
|
||||
static Object mergeTextDecoration(String value) {
|
||||
if (value.startsWith("none")) {
|
||||
return null;
|
||||
}
|
||||
|
||||
boolean underline = value.contains("underline");
|
||||
boolean strikeThrough = value.contains("line-through");
|
||||
if (!underline && !strikeThrough) {
|
||||
return null;
|
||||
}
|
||||
String newValue = underline && strikeThrough
|
||||
? "underline,line-through"
|
||||
: (underline ? "underline" : "line-through");
|
||||
return new StringValue().parseCssValue(newValue);
|
||||
}
|
||||
|
||||
/**
|
||||
* Maps from a StyleConstants to a CSS Attribute.
|
||||
*/
|
||||
|
||||
@@ -2506,7 +2506,7 @@ public class HTMLDocument extends DefaultStyledDocument {
|
||||
tagMap.put(HTML.Tag.SCRIPT, ha);
|
||||
tagMap.put(HTML.Tag.SELECT, fa);
|
||||
tagMap.put(HTML.Tag.SMALL, ca);
|
||||
tagMap.put(HTML.Tag.SPAN, ca);
|
||||
tagMap.put(HTML.Tag.SPAN, new ConvertSpanAction());
|
||||
tagMap.put(HTML.Tag.STRIKE, conv);
|
||||
tagMap.put(HTML.Tag.S, conv);
|
||||
tagMap.put(HTML.Tag.STRONG, ca);
|
||||
@@ -3430,11 +3430,43 @@ public class HTMLDocument extends DefaultStyledDocument {
|
||||
if (styleAttributes != null) {
|
||||
charAttr.addAttributes(styleAttributes);
|
||||
}
|
||||
|
||||
convertAttributes(t, attr);
|
||||
}
|
||||
|
||||
public void end(HTML.Tag t) {
|
||||
popCharacterStyle();
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts HTML tags to CSS attributes.
|
||||
* @param t the current HTML tag
|
||||
* @param attr the attributes of the HTML tag
|
||||
*/
|
||||
void convertAttributes(HTML.Tag t, MutableAttributeSet attr) {
|
||||
}
|
||||
}
|
||||
|
||||
final class ConvertSpanAction extends CharacterAction {
|
||||
@Override
|
||||
void convertAttributes(HTML.Tag t, MutableAttributeSet attr) {
|
||||
Object newDecoration = attr.getAttribute(CSS.Attribute.TEXT_DECORATION);
|
||||
Object previousDecoration =
|
||||
charAttrStack.peek()
|
||||
.getAttribute(CSS.Attribute.TEXT_DECORATION);
|
||||
|
||||
if (newDecoration != null
|
||||
&& !"none".equals(newDecoration.toString())
|
||||
&& previousDecoration != null
|
||||
&& !"none".equals(previousDecoration.toString())) {
|
||||
StyleSheet sheet = getStyleSheet();
|
||||
sheet.addCSSAttribute(charAttr,
|
||||
CSS.Attribute.TEXT_DECORATION,
|
||||
CSS.mergeTextDecoration(newDecoration + ","
|
||||
+ previousDecoration)
|
||||
.toString());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -3442,35 +3474,9 @@ public class HTMLDocument extends DefaultStyledDocument {
|
||||
* mappings that have a corresponding StyleConstants
|
||||
* and CSS mapping. The conversion is to CSS attributes.
|
||||
*/
|
||||
class ConvertAction extends TagAction {
|
||||
|
||||
public void start(HTML.Tag t, MutableAttributeSet attr) {
|
||||
pushCharacterStyle();
|
||||
if (!foundInsertTag) {
|
||||
// Note that the third argument should really be based off
|
||||
// inParagraph and impliedP. If we're wrong (that is
|
||||
// insertTagDepthDelta shouldn't be changed), we'll end up
|
||||
// removing an extra EndSpec, which won't matter anyway.
|
||||
boolean insert = canInsertTag(t, attr, false);
|
||||
if (foundInsertTag) {
|
||||
if (!inParagraph) {
|
||||
inParagraph = impliedP = true;
|
||||
}
|
||||
}
|
||||
if (!insert) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (attr.isDefined(IMPLIED)) {
|
||||
attr.removeAttribute(IMPLIED);
|
||||
}
|
||||
if (styleAttributes != null) {
|
||||
charAttr.addAttributes(styleAttributes);
|
||||
}
|
||||
// We also need to add attr, otherwise we lose custom
|
||||
// attributes, including class/id for style lookups, and
|
||||
// further confuse style lookup (doesn't have tag).
|
||||
charAttr.addAttribute(t, attr.copyAttributes());
|
||||
final class ConvertAction extends CharacterAction {
|
||||
@Override
|
||||
void convertAttributes(HTML.Tag t, MutableAttributeSet attr) {
|
||||
StyleSheet sheet = getStyleSheet();
|
||||
if (t == HTML.Tag.B) {
|
||||
sheet.addCSSAttribute(charAttr, CSS.Attribute.FONT_WEIGHT, "bold");
|
||||
@@ -3511,11 +3517,6 @@ public class HTMLDocument extends DefaultStyledDocument {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void end(HTML.Tag t) {
|
||||
popCharacterStyle();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class AnchorAction extends CharacterAction {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2001, 2018, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2001, 2024, 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
|
||||
@@ -24,9 +24,16 @@
|
||||
*/
|
||||
package javax.swing.text.html;
|
||||
|
||||
import javax.swing.text.*;
|
||||
import java.io.Serializable;
|
||||
import java.util.*;
|
||||
import java.util.Arrays;
|
||||
import java.util.Enumeration;
|
||||
import java.util.NoSuchElementException;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import javax.swing.text.AttributeSet;
|
||||
import javax.swing.text.MutableAttributeSet;
|
||||
import javax.swing.text.SimpleAttributeSet;
|
||||
|
||||
/**
|
||||
* An implementation of <code>AttributeSet</code> that can multiplex
|
||||
@@ -196,15 +203,24 @@ class MuxingAttributeSet implements AttributeSet, Serializable {
|
||||
* @see AttributeSet#getAttribute
|
||||
*/
|
||||
public Object getAttribute(Object key) {
|
||||
AttributeSet[] as = getAttributes();
|
||||
int n = as.length;
|
||||
for (int i = 0; i < n; i++) {
|
||||
Object o = as[i].getAttribute(key);
|
||||
if (o != null) {
|
||||
return o;
|
||||
final AttributeSet[] as = getAttributes();
|
||||
final int n = as.length;
|
||||
if (key != CSS.Attribute.TEXT_DECORATION) {
|
||||
for (int i = 0; i < n; i++) {
|
||||
Object o = as[i].getAttribute(key);
|
||||
if (o != null) {
|
||||
return o;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
return null;
|
||||
|
||||
String values = Arrays.stream(as)
|
||||
.map(a -> a.getAttribute(key))
|
||||
.filter(Objects::nonNull)
|
||||
.map(Object::toString)
|
||||
.collect(Collectors.joining(","));
|
||||
return CSS.mergeTextDecoration(values);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2024, 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
|
||||
@@ -24,17 +24,53 @@
|
||||
*/
|
||||
package javax.swing.text.html;
|
||||
|
||||
import sun.swing.SwingUtilities2;
|
||||
import java.util.*;
|
||||
import java.awt.*;
|
||||
import java.io.*;
|
||||
import java.net.*;
|
||||
import java.awt.Color;
|
||||
import java.awt.Component;
|
||||
import java.awt.Container;
|
||||
import java.awt.Font;
|
||||
import java.awt.FontMetrics;
|
||||
import java.awt.Graphics;
|
||||
import java.awt.Graphics2D;
|
||||
import java.awt.Insets;
|
||||
import java.awt.Rectangle;
|
||||
import java.awt.RenderingHints;
|
||||
import java.awt.Shape;
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.Reader;
|
||||
import java.io.Serializable;
|
||||
import java.io.StringReader;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import java.util.EmptyStackException;
|
||||
import java.util.Enumeration;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Hashtable;
|
||||
import java.util.Stack;
|
||||
import java.util.StringTokenizer;
|
||||
import java.util.Vector;
|
||||
|
||||
import javax.swing.Icon;
|
||||
import javax.swing.ImageIcon;
|
||||
import javax.swing.UIManager;
|
||||
import javax.swing.border.*;
|
||||
import javax.swing.border.BevelBorder;
|
||||
import javax.swing.border.Border;
|
||||
import javax.swing.event.ChangeListener;
|
||||
import javax.swing.text.*;
|
||||
import javax.swing.text.AttributeSet;
|
||||
import javax.swing.text.Document;
|
||||
import javax.swing.text.Element;
|
||||
import javax.swing.text.MutableAttributeSet;
|
||||
import javax.swing.text.SimpleAttributeSet;
|
||||
import javax.swing.text.Style;
|
||||
import javax.swing.text.StyleConstants;
|
||||
import javax.swing.text.StyleContext;
|
||||
import javax.swing.text.StyledDocument;
|
||||
import javax.swing.text.View;
|
||||
|
||||
import sun.swing.SwingUtilities2;
|
||||
|
||||
/**
|
||||
* Support for defining the visual characteristics of
|
||||
@@ -2820,10 +2856,31 @@ public class StyleSheet extends StyleContext {
|
||||
return doGetAttribute(key);
|
||||
}
|
||||
|
||||
/**
|
||||
* Merges the current value of the 'text-decoration' property
|
||||
* with the value from parent.
|
||||
*/
|
||||
private Object getTextDecoration(Object value) {
|
||||
AttributeSet parent = getResolveParent();
|
||||
if (parent == null) {
|
||||
return value;
|
||||
}
|
||||
|
||||
Object parentValue = parent.getAttribute(CSS.Attribute.TEXT_DECORATION);
|
||||
return parentValue == null
|
||||
? value
|
||||
: CSS.mergeTextDecoration(value + "," + parentValue);
|
||||
}
|
||||
|
||||
Object doGetAttribute(Object key) {
|
||||
Object retValue = super.getAttribute(key);
|
||||
if (retValue != null) {
|
||||
return retValue;
|
||||
if (key != CSS.Attribute.TEXT_DECORATION) {
|
||||
return retValue;
|
||||
} else {
|
||||
// Merge current value with parent
|
||||
return getTextDecoration(retValue);
|
||||
}
|
||||
}
|
||||
|
||||
if (key == CSS.Attribute.FONT_SIZE) {
|
||||
|
||||
135
test/jdk/javax/swing/text/html/HTMLDocument/HTMLStrikeOnly.java
Normal file
135
test/jdk/javax/swing/text/html/HTMLDocument/HTMLStrikeOnly.java
Normal file
@@ -0,0 +1,135 @@
|
||||
/*
|
||||
* Copyright (c) 2024, 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.awt.Dimension;
|
||||
import java.awt.Graphics;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
||||
import javax.imageio.ImageIO;
|
||||
import javax.swing.JEditorPane;
|
||||
import javax.swing.text.View;
|
||||
import javax.swing.text.html.CSS;
|
||||
|
||||
/*
|
||||
* @test
|
||||
* @bug 8326734
|
||||
* @summary Tests different combinations of setting 'line-through'
|
||||
* @run main HTMLStrikeOnly
|
||||
*/
|
||||
public class HTMLStrikeOnly {
|
||||
private static final String HTML = """
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>line-through</title>
|
||||
<style>
|
||||
.lineThrough { text-decoration: line-through }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<p><s><span style='text-decoration: line-through'>line-through?</span></s></p>
|
||||
<p><strike><span style='text-decoration: line-through'>line-through?</span></strike></p>
|
||||
<p><span style='text-decoration: line-through'><s>line-through?</s></span></p>
|
||||
<p><span style='text-decoration: line-through'><strike>line-through?</strike></span></p>
|
||||
|
||||
<p><s><span class="lineThrough">line-through?</span></s></p>
|
||||
<p><strike><span class="lineThrough">line-through?</span></strike></p>
|
||||
<p><span class="lineThrough"><s>line-through?</s></span></p>
|
||||
<p><span class="lineThrough"><strike>line-through?</strike></span></p>
|
||||
|
||||
<p style='text-decoration: line-through'><s>line-through?</s></p>
|
||||
<p style='text-decoration: line-through'><strike>line-through?</strike></p>
|
||||
<p style='text-decoration: line-through'><span style='text-decoration: line-through'>line-through?</span></p>
|
||||
|
||||
<p class="lineThrough"><s>line-through</s></p>
|
||||
<p class="lineThrough"><strike>line-through</strike></p>
|
||||
<p class="lineThrough"><span style='text-decoration: line-through'>line-through</span></p>
|
||||
<p class="lineThrough"><span class="lineThrough">line-through</span></p>
|
||||
</body>
|
||||
</html>
|
||||
""";
|
||||
public static void main(String[] args) {
|
||||
final JEditorPane html = new JEditorPane("text/html", HTML);
|
||||
html.setEditable(false);
|
||||
|
||||
final Dimension size = html.getPreferredSize();
|
||||
html.setSize(size);
|
||||
|
||||
BufferedImage image = new BufferedImage(size.width, size.height,
|
||||
BufferedImage.TYPE_INT_RGB);
|
||||
Graphics g = image.createGraphics();
|
||||
// Paint the editor pane to ensure all views are created
|
||||
html.paint(g);
|
||||
g.dispose();
|
||||
|
||||
int errorCount = 0;
|
||||
String firstError = null;
|
||||
|
||||
System.out.println("----- Views -----");
|
||||
final View bodyView = html.getUI()
|
||||
.getRootView(html)
|
||||
.getView(1)
|
||||
.getView(1);
|
||||
for (int i = 0; i < bodyView.getViewCount(); i++) {
|
||||
View pView = bodyView.getView(i);
|
||||
View contentView = getContentView(pView);
|
||||
|
||||
String decoration =
|
||||
contentView.getAttributes()
|
||||
.getAttribute(CSS.Attribute.TEXT_DECORATION)
|
||||
.toString();
|
||||
|
||||
System.out.println(i + ": " + decoration);
|
||||
if (!decoration.contains("line-through")
|
||||
|| decoration.contains("underline")) {
|
||||
errorCount++;
|
||||
if (firstError == null) {
|
||||
firstError = "Line " + i + ": " + decoration;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (errorCount > 0) {
|
||||
saveImage(image);
|
||||
throw new RuntimeException(errorCount + " error(s) found, "
|
||||
+ "the first one: " + firstError);
|
||||
}
|
||||
}
|
||||
|
||||
private static View getContentView(View parent) {
|
||||
View view = parent.getView(0);
|
||||
return view.getViewCount() > 0
|
||||
? getContentView(view)
|
||||
: view;
|
||||
}
|
||||
|
||||
private static void saveImage(BufferedImage image) {
|
||||
try {
|
||||
ImageIO.write(image, "png",
|
||||
new File("html.png"));
|
||||
} catch (IOException ignored) { }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,157 @@
|
||||
/*
|
||||
* Copyright (c) 2024, 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.awt.Dimension;
|
||||
import java.awt.Graphics;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
||||
import javax.imageio.ImageIO;
|
||||
import javax.swing.JEditorPane;
|
||||
import javax.swing.text.View;
|
||||
import javax.swing.text.html.CSS;
|
||||
|
||||
/*
|
||||
* @test
|
||||
* @bug 8323801 8326734
|
||||
* @summary Tests different combination of 'underline' and 'line-through';
|
||||
* the text should render with both 'underline' and 'line-through'.
|
||||
* @run main HTMLTextDecoration
|
||||
*/
|
||||
public final class HTMLTextDecoration {
|
||||
private static final String HTML = """
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>underline + line-through text</title>
|
||||
<style>
|
||||
.underline { text-decoration: underline }
|
||||
.lineThrough { text-decoration: line-through }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<p><u><span style='text-decoration: line-through'>underline + line-through?</span></u></p>
|
||||
<p><s><span style='text-decoration: underline'>underline + line-through?</span></s></p>
|
||||
<p><strike><span style='text-decoration: underline'>underline + line-through?</span></strike></p>
|
||||
|
||||
<p><span style='text-decoration: line-through'><u>underline + line-through?</u></span></p>
|
||||
<p><span style='text-decoration: underline'><s>underline + line-through?</s></span></p>
|
||||
<p><span style='text-decoration: underline'><strike>underline + line-through?</strike></span></p>
|
||||
|
||||
<p><span style='text-decoration: line-through'><span style='text-decoration: underline'>underline + line-through?</span></span></p>
|
||||
<p><span style='text-decoration: underline'><span style='text-decoration: line-through'>underline + line-through?</span></span></p>
|
||||
|
||||
<p style='text-decoration: line-through'><u>underline + line-through?</u></p>
|
||||
<p style='text-decoration: underline'><s>underline + line-through?</s></p>
|
||||
<p style='text-decoration: underline'><strike>underline + line-through?</strike></p>
|
||||
|
||||
<p style='text-decoration: line-through'><span style='text-decoration: underline'>underline + line-through?</span></p>
|
||||
<p style='text-decoration: underline'><span style='text-decoration: line-through'>underline + line-through?</span></p>
|
||||
|
||||
<p class="underline"><span class="lineThrough">underline + line-through?</span></p>
|
||||
<p class="underline"><s>underline + line-through?</s></p>
|
||||
<p class="underline"><strike>underline + line-through?</strike></p>
|
||||
|
||||
<p class="lineThrough"><span class="underline">underline + line-through?</span></p>
|
||||
<p class="lineThrough"><u>underline + line-through?</u></p>
|
||||
|
||||
<div class="underline"><span class="lineThrough">underline + line-through?</span></div>
|
||||
<div class="underline"><s>underline + line-through?</s></div>
|
||||
<div class="underline"><strike>underline + line-through?</strike></div>
|
||||
|
||||
<div class="lineThrough"><span class="underline">underline + line-through?</span></div>
|
||||
<div class="lineThrough"><u>underline + line-through?</u></div>
|
||||
|
||||
<div class="underline"><p class="lineThrough">underline + line-through?</p></div>
|
||||
<div class="lineThrough"><p class="underline">underline + line-through?</p></div>
|
||||
|
||||
<div class="underline"><div class="lineThrough">underline + line-through?</div></div>
|
||||
<div class="lineThrough"><div class="underline">underline + line-through?</div></div>
|
||||
</body>
|
||||
</html>
|
||||
""";
|
||||
|
||||
public static void main(String[] args) {
|
||||
final JEditorPane html = new JEditorPane("text/html", HTML);
|
||||
html.setEditable(false);
|
||||
|
||||
final Dimension size = html.getPreferredSize();
|
||||
html.setSize(size);
|
||||
|
||||
BufferedImage image = new BufferedImage(size.width, size.height,
|
||||
BufferedImage.TYPE_INT_RGB);
|
||||
Graphics g = image.createGraphics();
|
||||
// Paint the editor pane to ensure all views are created
|
||||
html.paint(g);
|
||||
g.dispose();
|
||||
|
||||
int errorCount = 0;
|
||||
String firstError = null;
|
||||
|
||||
System.out.println("----- Views -----");
|
||||
final View bodyView = html.getUI()
|
||||
.getRootView(html)
|
||||
.getView(1)
|
||||
.getView(1);
|
||||
for (int i = 0; i < bodyView.getViewCount(); i++) {
|
||||
View pView = bodyView.getView(i);
|
||||
View contentView = getContentView(pView);
|
||||
|
||||
String decoration =
|
||||
contentView.getAttributes()
|
||||
.getAttribute(CSS.Attribute.TEXT_DECORATION)
|
||||
.toString();
|
||||
|
||||
System.out.println(i + ": " + decoration);
|
||||
if (!decoration.contains("underline")
|
||||
|| !decoration.contains("line-through")) {
|
||||
errorCount++;
|
||||
if (firstError == null) {
|
||||
firstError = "Line " + i + ": " + decoration;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (errorCount > 0) {
|
||||
saveImage(image);
|
||||
throw new RuntimeException(errorCount + " error(s) found, "
|
||||
+ "the first one: " + firstError);
|
||||
}
|
||||
}
|
||||
|
||||
private static View getContentView(View parent) {
|
||||
View view = parent.getView(0);
|
||||
return view.getViewCount() > 0
|
||||
? getContentView(view)
|
||||
: view;
|
||||
}
|
||||
|
||||
private static void saveImage(BufferedImage image) {
|
||||
try {
|
||||
ImageIO.write(image, "png",
|
||||
new File("html.png"));
|
||||
} catch (IOException ignored) { }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,128 @@
|
||||
/*
|
||||
* Copyright (c) 2024, 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.awt.Dimension;
|
||||
import java.awt.Graphics;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
||||
import javax.imageio.ImageIO;
|
||||
import javax.swing.JEditorPane;
|
||||
import javax.swing.text.View;
|
||||
import javax.swing.text.html.CSS;
|
||||
|
||||
/*
|
||||
* @test
|
||||
* @bug 8335967
|
||||
* @summary Tests 'text-decoration: none' is respected
|
||||
* @run main HTMLTextDecorationNone
|
||||
*/
|
||||
public final class HTMLTextDecorationNone {
|
||||
private static final String HTML = """
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>text-decoration: none (<a>)</title>
|
||||
<style>
|
||||
a.none { text-decoration: none }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<p><a href="https://openjdk.org/">underlined</a></p>
|
||||
<p><a href="https://openjdk.org/" style="text-decoration: none">not underlined</a></p>
|
||||
<p><a href="https://openjdk.org/" class="none">not underlined</a></p>
|
||||
<p style="text-decoration: underline"><a
|
||||
href="https://openjdk.org/" style="text-decoration: none">underlined?</a></p>
|
||||
<p style="text-decoration: underline"><a
|
||||
href="https://openjdk.org/" class="none">underlined?</a></p>
|
||||
</body>
|
||||
</html>
|
||||
""";
|
||||
|
||||
private static final boolean[] underlined = {true, false, false, true, true};
|
||||
|
||||
public static void main(String[] args) {
|
||||
final JEditorPane html = new JEditorPane("text/html", HTML);
|
||||
html.setEditable(false);
|
||||
|
||||
final Dimension size = html.getPreferredSize();
|
||||
html.setSize(size);
|
||||
|
||||
BufferedImage image = new BufferedImage(size.width, size.height,
|
||||
BufferedImage.TYPE_INT_RGB);
|
||||
Graphics g = image.createGraphics();
|
||||
// Paint the editor pane to ensure all views are created
|
||||
html.paint(g);
|
||||
g.dispose();
|
||||
|
||||
int errorCount = 0;
|
||||
String firstError = null;
|
||||
|
||||
System.out.println("----- Views -----");
|
||||
final View bodyView = html.getUI()
|
||||
.getRootView(html)
|
||||
.getView(1)
|
||||
.getView(1);
|
||||
for (int i = 0; i < bodyView.getViewCount(); i++) {
|
||||
View pView = bodyView.getView(i);
|
||||
View contentView = getContentView(pView);
|
||||
|
||||
Object decorationAttr =
|
||||
contentView.getAttributes()
|
||||
.getAttribute(CSS.Attribute.TEXT_DECORATION);
|
||||
String decoration = decorationAttr == null
|
||||
? "none" : decorationAttr.toString();
|
||||
|
||||
System.out.println(i + ": " + decoration);
|
||||
if (decoration.contains("underline") != underlined[i]) {
|
||||
errorCount++;
|
||||
if (firstError == null) {
|
||||
firstError = "Line " + i + ": " + decoration + " vs "
|
||||
+ (underlined[i] ? "underline" : "none");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (errorCount > 0) {
|
||||
saveImage(image);
|
||||
throw new RuntimeException(errorCount + " error(s) found, "
|
||||
+ "the first one: " + firstError);
|
||||
}
|
||||
}
|
||||
|
||||
private static View getContentView(View parent) {
|
||||
View view = parent.getView(0);
|
||||
return view.getViewCount() > 0
|
||||
? getContentView(view)
|
||||
: view;
|
||||
}
|
||||
|
||||
private static void saveImage(BufferedImage image) {
|
||||
try {
|
||||
ImageIO.write(image, "png",
|
||||
new File("html.png"));
|
||||
} catch (IOException ignored) { }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,129 @@
|
||||
/*
|
||||
* Copyright (c) 2024, 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.awt.Dimension;
|
||||
import java.awt.Graphics;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
||||
import javax.imageio.ImageIO;
|
||||
import javax.swing.JEditorPane;
|
||||
import javax.swing.text.View;
|
||||
import javax.swing.text.html.CSS;
|
||||
|
||||
/*
|
||||
* @test
|
||||
* @bug 8326734
|
||||
* @summary Tests different combinations of setting 'underline'
|
||||
* @run main HTMLUnderlineOnly
|
||||
*/
|
||||
public class HTMLUnderlineOnly {
|
||||
private static final String HTML = """
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>underline</title>
|
||||
<style>
|
||||
.underline { text-decoration: underline }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<p><u><span style='text-decoration: underline'>underline?</span></u></p>
|
||||
<p><span style='text-decoration: underline'><u>underline?</u></span></p>
|
||||
|
||||
<p><u><span class="underline">underline?</span></u></p>
|
||||
<p><span class="underline"><u>underline?</u></span></p>
|
||||
|
||||
<p style='text-decoration: underline'><u>underline?</u></p>
|
||||
<p style='text-decoration: underline'><span style='text-decoration: underline'>underline?</span></p>
|
||||
|
||||
<p class="underline"><u>underline</u></p>
|
||||
<p class="underline"><span style='text-decoration: underline'>underline</span></p>
|
||||
<p class="underline"><span class="underline">underline</span></p>
|
||||
</body>
|
||||
</html>
|
||||
""";
|
||||
public static void main(String[] args) {
|
||||
final JEditorPane html = new JEditorPane("text/html", HTML);
|
||||
html.setEditable(false);
|
||||
|
||||
final Dimension size = html.getPreferredSize();
|
||||
html.setSize(size);
|
||||
|
||||
BufferedImage image = new BufferedImage(size.width, size.height,
|
||||
BufferedImage.TYPE_INT_RGB);
|
||||
Graphics g = image.createGraphics();
|
||||
// Paint the editor pane to ensure all views are created
|
||||
html.paint(g);
|
||||
g.dispose();
|
||||
|
||||
int errorCount = 0;
|
||||
String firstError = null;
|
||||
|
||||
System.out.println("----- Views -----");
|
||||
final View bodyView = html.getUI()
|
||||
.getRootView(html)
|
||||
.getView(1)
|
||||
.getView(1);
|
||||
for (int i = 0; i < bodyView.getViewCount(); i++) {
|
||||
View pView = bodyView.getView(i);
|
||||
View contentView = getContentView(pView);
|
||||
|
||||
String decoration =
|
||||
contentView.getAttributes()
|
||||
.getAttribute(CSS.Attribute.TEXT_DECORATION)
|
||||
.toString();
|
||||
|
||||
System.out.println(i + ": " + decoration);
|
||||
if (!decoration.contains("underline")
|
||||
|| decoration.contains("line-through")) {
|
||||
errorCount++;
|
||||
if (firstError == null) {
|
||||
firstError = "Line " + i + ": " + decoration;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (errorCount > 0) {
|
||||
saveImage(image);
|
||||
throw new RuntimeException(errorCount + " error(s) found, "
|
||||
+ "the first one: " + firstError);
|
||||
}
|
||||
}
|
||||
|
||||
private static View getContentView(View parent) {
|
||||
View view = parent.getView(0);
|
||||
return view.getViewCount() > 0
|
||||
? getContentView(view)
|
||||
: view;
|
||||
}
|
||||
|
||||
private static void saveImage(BufferedImage image) {
|
||||
try {
|
||||
ImageIO.write(image, "png",
|
||||
new File("html.png"));
|
||||
} catch (IOException ignored) { }
|
||||
}
|
||||
}
|
||||
@@ -31,7 +31,7 @@ import javax.swing.text.html.HTMLEditorKit;
|
||||
|
||||
/*
|
||||
* @test
|
||||
* @bug 8323801
|
||||
* @bug 8323801 8326734
|
||||
* @summary Tests that '<u><s>' produce underlined and struck-through text
|
||||
*/
|
||||
public final class HTMLUnderlineStrike {
|
||||
|
||||
@@ -24,14 +24,11 @@
|
||||
/* @test
|
||||
* @summary java.io.RandomAccessFileTest uses java.nio.file inside.
|
||||
* @library testNio
|
||||
* @compile --enable-preview --source 25 RandomAccessFileTest.java
|
||||
* @run junit/othervm
|
||||
* -Djava.nio.file.spi.DefaultFileSystemProvider=testNio.ManglingFileSystemProvidera
|
||||
* -Djava.nio.file.spi.DefaultFileSystemProvider=testNio.ManglingFileSystemProvider
|
||||
* -Djbr.java.io.use.nio=true
|
||||
* --add-opens jdk.unsupported/com.sun.nio.file=ALL-UNNAMED
|
||||
* --add-opens java.base/java.io=ALL-UNNAMED
|
||||
* --enable-native-access=ALL-UNNAMED
|
||||
* --enable-preview
|
||||
* RandomAccessFileTest
|
||||
*/
|
||||
|
||||
@@ -48,9 +45,6 @@ import testNio.ManglingFileSystemProvider;
|
||||
import java.io.EOFException;
|
||||
import java.io.File;
|
||||
import java.io.RandomAccessFile;
|
||||
import java.lang.foreign.*;
|
||||
import java.lang.invoke.MethodHandle;
|
||||
import java.lang.invoke.VarHandle;
|
||||
import java.lang.reflect.Field;
|
||||
import java.nio.channels.FileChannel;
|
||||
import java.nio.channels.FileLock;
|
||||
@@ -61,7 +55,6 @@ import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.EnumSet;
|
||||
import java.util.Objects;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
@@ -300,122 +293,4 @@ public class RandomAccessFileTest {
|
||||
FileSystems.getDefault().provider().newFileChannel(file.toPath(), Collections.singleton(option)).close();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* JBR-9779
|
||||
*/
|
||||
@Test
|
||||
public void testWindowsPipe() throws Throwable {
|
||||
Assume.assumeTrue("Windows-only test", System.getProperty("os.name").toLowerCase().startsWith("win"));
|
||||
|
||||
// Creating a pipe.
|
||||
Linker linker = Linker.nativeLinker();
|
||||
SymbolLookup loader = SymbolLookup.libraryLookup("kernel32", Arena.global());
|
||||
|
||||
StructLayout captureLayout = Linker.Option.captureStateLayout();
|
||||
VarHandle GetLastError = captureLayout.varHandle(MemoryLayout.PathElement.groupElement("GetLastError"));
|
||||
|
||||
MethodHandle CreateNamedPipeW = linker.downcallHandle(
|
||||
loader.find("CreateNamedPipeW").get(),
|
||||
FunctionDescriptor.of(ValueLayout.JAVA_LONG,
|
||||
ValueLayout.ADDRESS, ValueLayout.JAVA_INT, ValueLayout.JAVA_INT,
|
||||
ValueLayout.JAVA_INT, ValueLayout.JAVA_INT, ValueLayout.JAVA_INT, ValueLayout.JAVA_INT,
|
||||
ValueLayout.ADDRESS),
|
||||
Linker.Option.captureCallState("GetLastError")
|
||||
);
|
||||
|
||||
MethodHandle ConnectNamedPipe = linker.downcallHandle(
|
||||
loader.find("ConnectNamedPipe").get(),
|
||||
FunctionDescriptor.of(ValueLayout.JAVA_INT, ValueLayout.JAVA_LONG, ValueLayout.ADDRESS),
|
||||
Linker.Option.captureCallState("GetLastError")
|
||||
);
|
||||
|
||||
MethodHandle DisconnectNamedPipe = linker.downcallHandle(
|
||||
loader.find("DisconnectNamedPipe").get(),
|
||||
FunctionDescriptor.of(ValueLayout.JAVA_INT, ValueLayout.JAVA_LONG)
|
||||
);
|
||||
|
||||
MethodHandle PeekNamedPipe = linker.downcallHandle(
|
||||
loader.find("PeekNamedPipe").get(),
|
||||
FunctionDescriptor.of(ValueLayout.JAVA_INT, ValueLayout.JAVA_LONG,
|
||||
ValueLayout.ADDRESS, ValueLayout.JAVA_INT, ValueLayout.ADDRESS,
|
||||
ValueLayout.ADDRESS, ValueLayout.ADDRESS)
|
||||
);
|
||||
|
||||
MethodHandle CloseHandle = linker.downcallHandle(
|
||||
loader.find("CloseHandle").get(),
|
||||
FunctionDescriptor.of(ValueLayout.JAVA_INT, ValueLayout.JAVA_LONG)
|
||||
);
|
||||
|
||||
String pipeName = "\\\\.\\pipe\\jbr-test-pipe-" + System.nanoTime();
|
||||
Arena arena = Arena.ofAuto();
|
||||
char[] nameChars = (pipeName + "\0").toCharArray(); // `char` on Windows is UTF-16, as WinAPI expects.
|
||||
MemorySegment pipeWinPath = arena.allocateFrom(ValueLayout.JAVA_CHAR, nameChars);
|
||||
MemorySegment capturedState = arena.allocate(captureLayout);
|
||||
|
||||
final long INVALID_HANDLE_VALUE = -1L;
|
||||
|
||||
long hPipe = (long) CreateNamedPipeW.invokeExact(
|
||||
capturedState,
|
||||
pipeWinPath,
|
||||
0x00000003, // dwOpenMode = PIPE_ACCESS_DUPLEX
|
||||
0x00000000, // dwPipeMode = PIPE_TYPE_BYTE
|
||||
1, // nMaxInstances. Limit to 1 to force ERROR_PIPE_BUSY.
|
||||
1024, // nOutBufferSize
|
||||
1024, // nInBufferSize
|
||||
0, // nDefaultTimeOut
|
||||
MemorySegment.NULL // lpSecurityAttributes
|
||||
);
|
||||
|
||||
if (hPipe == INVALID_HANDLE_VALUE) {
|
||||
int errorCode = (int) GetLastError.get(capturedState);
|
||||
throw new Exception("CreateNamedPipeW failed: " + errorCode);
|
||||
}
|
||||
|
||||
AtomicBoolean keepRunning = new AtomicBoolean(true);
|
||||
Thread serverThread = new Thread(() -> {
|
||||
// This server accepts a connection and does nothing until the client disconnects explicitly.
|
||||
try {
|
||||
int i = 0;
|
||||
while (keepRunning.get()) {
|
||||
int connected = (int) ConnectNamedPipe.invokeExact(capturedState, hPipe, MemorySegment.NULL);
|
||||
if (connected == 0) {
|
||||
int errorCode = (int) GetLastError.get(capturedState);
|
||||
// https://learn.microsoft.com/en-us/windows/win32/debug/system-error-codes--0-499-
|
||||
if (errorCode == 6 && !keepRunning.get()) { // ERROR_INVALID_HANDLE
|
||||
break;
|
||||
}
|
||||
throw new Exception("ConnectNamedPipe failed: " + errorCode);
|
||||
}
|
||||
try {
|
||||
int peekResult;
|
||||
do {
|
||||
// Random timeout. The timeout must be big enough to reveal possible consequent
|
||||
// attempts to connect to the pipe.
|
||||
Thread.sleep(1000);
|
||||
|
||||
// Check if the pipe is still connected by peeking at it.
|
||||
peekResult = (int) PeekNamedPipe.invokeExact(hPipe, MemorySegment.NULL, 0,
|
||||
MemorySegment.NULL, MemorySegment.NULL, MemorySegment.NULL);
|
||||
}
|
||||
while (keepRunning.get() && peekResult != 0);
|
||||
} finally {
|
||||
int disconnected = (int) DisconnectNamedPipe.invokeExact(hPipe);
|
||||
}
|
||||
}
|
||||
} catch (Throwable e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
});
|
||||
|
||||
serverThread.setDaemon(true);
|
||||
serverThread.start();
|
||||
|
||||
try {
|
||||
new RandomAccessFile(pipeName, "rw").close();
|
||||
} finally {
|
||||
keepRunning.set(false);
|
||||
int closed = (int) CloseHandle.invokeExact(hPipe);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -112,7 +112,7 @@
|
||||
############################################################################
|
||||
|
||||
java/awt/dnd/RemoveDropTargetCrashTest/RemoveDropTargetCrashTest.java JBR-8960 windows-x64
|
||||
java/awt/Focus/ModalDialogInFocusEventTest.java JBR-7818 linux-6.14.0-1010-aws,linux-6.14.0-1012-aws,linux-6.14.0-1014-aws,linux-6.14.0-1015-aws,linux-6.14.0-1017-aws,linux-6.14.0-1018-aws
|
||||
java/awt/Focus/ModalDialogInFocusEventTest.java JBR-7818 linux-6.14.0-1010-aws,linux-6.14.0-1012-aws,linux-6.14.0-1014-aws,linux-6.14.0-1015-aws,linux-6.14.0-1017-aws
|
||||
java/awt/Frame/GetGraphicsStressTest/GetGraphicsStressTest.java JBR-8542 windows-all timeout
|
||||
java/awt/Graphics2D/TextPerf.java JBR-8541 linux-all,windows-all
|
||||
java/awt/GridBagLayout/ComponentShortage.java 8355280,JBR-9347 windows-all,linux-all,macosx-x64
|
||||
@@ -126,7 +126,7 @@ javax/swing/JButton/TestMnemonicAction.java JBR-6508 windows-all,linux-all,macos
|
||||
javax/swing/JComboBox/8072767/bug8072767.java JBR-5540 windows-all,macosx-all
|
||||
javax/swing/JWindow/ShapedAndTranslucentWindows/PerPixelTranslucentCanvas.java JBR-7404 macosx-all
|
||||
javax/swing/JWindow/ShapedAndTranslucentWindows/PerPixelTranslucentGradient.java JBR-9446 macosx-all
|
||||
javax/swing/plaf/synth/7158712/bug7158712.java 8322653,JBR-9061 macosx-all,linux-6.8.0-1033-aws,linux-6.8.0-1036-aws,linux-6.8.0-1039-aws,linux-6.8.0-1040-aws,linux-6.8.0-1043-aws,linux-6.8.0-1044-aws
|
||||
javax/swing/plaf/synth/7158712/bug7158712.java 8322653,JBR-9061 macosx-all,linux-6.8.0-1033-aws,linux-6.8.0-1036-aws,linux-6.8.0-1039-aws,linux-6.8.0-1040-aws,linux-6.8.0-1043-aws
|
||||
javax/swing/UI/UnninstallUIMemoryLeaks/UnninstallUIMemoryLeaks.java JBR-5952,JBR-6274 windows-all,macosx-all
|
||||
|
||||
jb/build/ResolveSymbolsTest/ResolveSymbolsRealEnv.java JBR-8544 linux-all
|
||||
|
||||
@@ -6,7 +6,6 @@ java/awt/Dialog/NestedDialogs/Modal/NestedModalDialogTest.java JBR-6294 linux-al
|
||||
java/awt/dnd/MissedDragEnterTest.java JBR-6091 windows-all
|
||||
java/awt/event/ComponentEvent/TextComponentTextEventTest.java JBR-7141 windows-x64
|
||||
java/awt/Focus/FocusKeepTest.java JBR-8874 windows-x64
|
||||
java/awt/Focus/NonFocusableWindowTest/NonfocusableOwnerTest.java JBR-9846 windows-10.0
|
||||
java/awt/Frame/FramesGC/FramesGC.java 8079069,JBR-6057 macosx-all,windows-all
|
||||
java/awt/FullScreen/CurrentDisplayModeTest/CurrentDisplayModeTest.java JBR-5059 linux-all
|
||||
java/awt/FullScreen/MultimonFullscreenTest/MultimonDeadlockTest.java JBR-4379 windows-all
|
||||
@@ -150,9 +149,6 @@ javax/swing/JWindow/ShapedAndTranslucentWindows/PerPixelTranslucentSwing.java 81
|
||||
javax/swing/plaf/basic/BasicHTML/4251579/bug4251579.java 8253184,JBR-5510 windows-all,linux-all
|
||||
javax/swing/plaf/nimbus/8041642/bug8041642.java 8253184,JBR-5510 windows-all,linux-all
|
||||
javax/swing/text/html/CSS/4530474/bug4530474.java JBR-5510,JBR-5951 linux-all,windows-x64
|
||||
|
||||
jb/java/awt/Focus/RequestFocusInParent.java JBR-9843 windows-10.0
|
||||
|
||||
sanity/client/SwingSet/src/ButtonDemoScreenshotTest.java 8265770,8273312,JBR-5510 windows-all,macosx-all,linux-all
|
||||
sanity/client/SwingSet/src/EditorPaneDemoTest.java JBR-5510 linux-all
|
||||
sanity/client/SwingSet/src/FileChooserDemoTest.java JBR-8534 windows-x64
|
||||
|
||||
@@ -128,7 +128,7 @@ java/awt/event/StressTest/MouseAndKeyEventStressTest.java JBR-6479 generic-all
|
||||
java/awt/FileDialog/8003399/bug8003399.java JBR-6930 windows-all
|
||||
java/awt/FlowLayout/PreferredLayoutSize.java JBR-6349 linux-all
|
||||
java/awt/Focus/EmptyWindowKeyTest.java JBR-7913 windows-all
|
||||
java/awt/Focus/FocusKeepTest.java JBR-9487 linux-6.8.0-1040-aws,linux-6.8.0-1043-aws,linux-6.8.0-1044-aws
|
||||
java/awt/Focus/FocusKeepTest.java JBR-9487 linux-6.8.0-1040-aws,linux-6.8.0-1043-aws
|
||||
java/awt/Focus/FocusOwnerFrameOnClick/FocusOwnerFrameOnClick.java 8081489 generic-all
|
||||
java/awt/Focus/FocusSubRequestTest/FocusSubRequestTest.java JBR-5178 windows-all
|
||||
java/awt/Focus/FocusTransitionTest/FocusTransitionTest.java JBR-5809 linux-all
|
||||
@@ -136,7 +136,7 @@ java/awt/Focus/FocusTraversalPolicy/ButtonGroupLayoutTraversal/ButtonGroupLayout
|
||||
java/awt/Focus/FrameMinimizeTest/FrameMinimizeTest.java 8016266 linux-all
|
||||
java/awt/Focus/IconifiedFrameFocusChangeTest/IconifiedFrameFocusChangeTest.java 6849364 generic-all
|
||||
java/awt/Focus/InactiveFocusRace.java 8023263,JBR-8586 linux-all,windows-x64
|
||||
java/awt/Focus/InputVerifierTest3/InputVerifierTest3.java JBR-7311 linux-6.8.0-1036-aws,linux-6.8.0-1039-aws,linux-6.8.0-1040-aws,linux-6.8.0-1043-aws,linux-6.8.0-1044-aws
|
||||
java/awt/Focus/InputVerifierTest3/InputVerifierTest3.java JBR-7311 linux-6.8.0-1036-aws,linux-6.8.0-1039-aws,linux-6.8.0-1040-aws,linux-6.8.0-1043-aws
|
||||
java/awt/Focus/AutoRequestFocusTest/AutoRequestFocusToFrontTest.java 6848406 generic-all
|
||||
java/awt/Focus/AutoRequestFocusTest/AutoRequestFocusSetVisibleTest.java 6848407 generic-all
|
||||
java/awt/Focus/LabelScrollBarFocus.java JBR-8027 linux-all
|
||||
@@ -893,7 +893,7 @@ java/nio/channels/DatagramChannel/ManySourcesAndTargets.java 8264385 macosx-a
|
||||
java/nio/channels/DatagramChannel/MulticastSendReceiveTests.java 8144003,JBR-9218 macosx-all,linux-6.16.7-200.fc42.x86_64,linux-6.17.7-200.fc42.x86_64,linux-6.17.8-200.fc42.x86_64,linux-6.17.13-200.fc42.x86_64
|
||||
java/nio/channels/DatagramChannel/Promiscuous.java 8144003,JBR-9218 macosx-all,linux-6.16.7-200.fc42.x86_64,linux-6.17.7-200.fc42.x86_64,linux-6.17.8-200.fc42.x86_64,linux-6.17.13-200.fc42.x86_64
|
||||
java/nio/channels/DatagramChannel/PromiscuousIPv6.java JBR-8828,JBR-9218 macosx-x64,linux-6.16.7-200.fc42.x86_64,linux-6.17.7-200.fc42.x86_64,linux-6.17.8-200.fc42.x86_64,linux-6.17.13-200.fc42.x86_64
|
||||
java/nio/channels/DatagramChannel/SendReceiveMaxSize.java JBR-9447 linux-6.14.0-1013-aws,linux-6.14.0-1014-aws,linux-6.14.0-1015-aws,linux-6.14.0-1017-aws,linux-6.14.0-1018-aws
|
||||
java/nio/channels/DatagramChannel/SendReceiveMaxSize.java JBR-9447 linux-6.14.0-1013-aws,linux-6.14.0-1014-aws,linux-6.14.0-1015-aws,linux-6.14.0-1017-aws
|
||||
java/nio/channels/DatagramChannel/Unref.java 8233437 generic-all
|
||||
java/nio/channels/FileChannel/LargeGatheringWrite.java JBR-9316 linux-6.16.7-200.fc42.x86_64,linux-6.17.7-200.fc42.x86_64,linux-6.17.8-200.fc42.x86_64,linux-6.17.13-200.fc42.x86_64
|
||||
java/nio/channels/Selector/LotsOfInterrupts.java#virtual JBR-8940 windows-aarch64
|
||||
|
||||
@@ -8,7 +8,7 @@ java/awt/dnd/DnDAWTLockTest.java JBR-8745 linux-all
|
||||
java/awt/dnd/DragOverDropTargetPerformanceTest.java JBR-5799 windows-all
|
||||
java/awt/dnd/DragSourceGCrashTest.java JBR-8745 linux-all
|
||||
java/awt/dnd/InterJVMGetDropSuccessTest/InterJVMGetDropSuccessTest.java JBR-8745 linux-all
|
||||
java/awt/dnd/InterJVMLinkTest.java JBR-9255 linux-6.16.7-200.fc42.x86_64,linux-6.17.7-200.fc42.x86_64,linux-6.17.8-200.fc42.x86_64,linux-6.17.8-200.fc42.aarch64,linux-6.17.13-200.fc42.x86_64,linux-6.17.13-200.fc42.aarch64,linux-6.17.12-300.fc43.aarch64,linux-6.17.12-300.fc43.x86_64
|
||||
java/awt/dnd/InterJVMLinkTest.java JBR-9255 linux-6.16.7-200.fc42.x86_64,linux-6.17.7-200.fc42.x86_64,linux-6.17.8-200.fc42.x86_64,linux-6.17.13-200.fc42.x86_64,linux-6.17.8-200.fc42.aarch64,linux-6.17.13-200.fc42.aarch64
|
||||
java/awt/Dialog/ChoiceModalDialogTest.java JBR-8724 windows-all
|
||||
java/awt/dnd/MozillaDnDTest.java JBR-6442 linux-all
|
||||
java/awt/event/ComponentEvent/TextComponentTextEventTest.java JBR-6287 windows-all
|
||||
@@ -70,7 +70,7 @@ javax/swing/JButton/bug4490179.java JBR-8925 windows-all
|
||||
javax/swing/JFileChooser/JFileChooserSetLocationTest.java JBR-8098 linux-all,windows-all
|
||||
javax/swing/JInternalFrame/4202966/IntFrameCoord.java JBR-9006 window-all
|
||||
javax/swing/JMenu/bug4342646.java JBR-8727 linux-all,windows-all
|
||||
javax/swing/JPopupMenu/6580930/bug6580930.java JBR-5071 linux-6.8.0-1033-aws,linux-6.8.0-1036-aws,linux-6.8.0-1039-aws,linux-6.8.0-1040-aws,linux-6.8.0-1043-aws,linux-6.8.0-1044-aws
|
||||
javax/swing/JPopupMenu/6580930/bug6580930.java JBR-5071 linux-6.8.0-1033-aws,linux-6.8.0-1036-aws,linux-6.8.0-1039-aws,linux-6.8.0-1040-aws,linux-6.8.0-1043-aws
|
||||
javax/swing/JTable/JTableRightOrientationTest.java JBR-8102 linux-all,windows-all
|
||||
javax/swing/text/ParagraphView/6364882/bug6364882.java JBR-8747 linux-all
|
||||
javax/swing/plaf/basic/BasicGraphicsUtils/8132119/bug8132119.java JBR-8357 linux-all
|
||||
@@ -137,7 +137,7 @@ java/awt/Robot/HiDPIScreenCapture/ScreenCaptureResolutionTest.java nobug generic
|
||||
java/awt/Robot/HiDPIScreenCapture/ScreenCaptureTest.java nobug generic-all
|
||||
java/awt/Robot/ScreenCaptureRobotTest.java#id1 nobug generic-all
|
||||
java/awt/Toolkit/ScreenInsetsDPIVariation/ScreenInsetsDPIVariation.java nobug generic-all
|
||||
java/awt/TrayIcon/RightClickWhenBalloonDisplayed/RightClickWhenBalloonDisplayed.java 8238720,JBR-6931 windows-all,linux-6.16.7-200.fc42.x86_64,linux-6.17.7-200.fc42.x86_64,linux-6.17.8-200.fc42.x86_64,linux-6.17.13-200.fc42.aarch64,linux-6.17.13-200.fc42.x86_64,linux-6.17.12-300.fc43.aarch64,linux-6.17.12-300.fc43.x86_64
|
||||
java/awt/TrayIcon/RightClickWhenBalloonDisplayed/RightClickWhenBalloonDisplayed.java 8238720,JBR-6931 windows-all,linux-6.16.7-200.fc42.x86_64,linux-6.17.7-200.fc42.x86_64,linux-6.17.8-200.fc42.x86_64,linux-6.17.13-200.fc42.x86_64
|
||||
java/awt/Window/8159168/SetShapeTest.java nobug generic-all
|
||||
java/awt/Window/BackgroundIsNotUpdated/BackgroundIsNotUpdated.java nobug generic-all
|
||||
java/awt/Window/GetScreenLocation/GetScreenLocationTest.java nobug generic-all
|
||||
|
||||
@@ -7,8 +7,8 @@ java/awt/image/DrawImage/BlitRotateClippedArea.java JBR-9026 linux-all
|
||||
java/awt/image/DrawImage/EABlitTest.java JBR-9027 linux-all
|
||||
javax/swing/GraphicsConfigNotifier/StalePreferredSize.java JBR-9031 linux-all
|
||||
javax/swing/GraphicsConfigNotifier/TestMultiScreenGConfigNotify.java JBR-8266 linux-x64
|
||||
javax/swing/JButton/SwingButtonResizeTestWithOpenGL.java#id0 JBR-7928,JBR-9341 linux-6.8.0-1036-aws,linux-6.8.0-1039-aws,linux-6.8.0-1040-aws,linux-6.8.0-1043-aws,linux-6.8.0-1044-aws,linux-6.14.9-arch1-1
|
||||
javax/swing/JButton/SwingButtonResizeTestWithOpenGL.java#id2 JBR-7928 linux-6.8.0-1036-aws,linux-6.8.0-1039-aws,linux-6.8.0-1040-aws,linux-6.8.0-1043-aws,linux-6.8.0-1044-aws
|
||||
javax/swing/JButton/SwingButtonResizeTestWithOpenGL.java#id0 JBR-7928,JBR-9341 linux-6.8.0-1036-aws,linux-6.8.0-1039-aws,linux-6.8.0-1040-aws,linux-6.8.0-1043-aws,linux-6.14.9-arch1-1
|
||||
javax/swing/JButton/SwingButtonResizeTestWithOpenGL.java#id2 JBR-7928 linux-6.8.0-1036-aws,linux-6.8.0-1039-aws,linux-6.8.0-1040-aws,linux-6.8.0-1043-aws
|
||||
javax/swing/JEditorPane/JEditorPaneFontFallback.java JBR-8305 linux-all
|
||||
javax/swing/JFormattedTextField/bug4741926.java JBR-9321 linux-6.14.9-arch1-1
|
||||
javax/swing/JPasswordField/TestSelectedTextBackgroundColor.java JBR-9277 linux-6.14.9-arch1-1
|
||||
|
||||
@@ -2,14 +2,15 @@ java/awt/font/GlyphVector/LayoutCompatTest.java JBR-8262 linux-all
|
||||
java/awt/MenuShortcut/FunctionKeyShortcut.java JBR-7932 linux-all
|
||||
java/awt/Multiscreen/MultiScreenCheckScreenIDTest.java JBR-8263 linux-x64
|
||||
|
||||
javax/swing/JComponent/6989617/bug6989617.java JBR-8796 linux-6.14.0-1010-aws,linux-6.14.0-1012-aws,linux-6.14.0-1014-aws,linux-6.14.0-1015-aws,linux-6.14.0-1017-aws,linux-6.14.0-1018-aws
|
||||
javax/swing/JComponent/6989617/bug6989617.java JBR-8796 linux-6.14.0-1010-aws,linux-6.14.0-1012-aws,linux-6.14.0-1014-aws,linux-6.14.0-1015-aws,linux-6.14.0-1017-aws
|
||||
javax/swing/JDesktopPane/TestDesktopManagerNPE.java JBR-8449 linux-x64
|
||||
javax/swing/GraphicsConfigNotifier/TestMultiScreenGConfigNotify.java JBR-8266 linux-x64
|
||||
javax/swing/InputVerifier/VerifyTarget/VerifyTargetTest.java JBR-7520,JBR-9320 linux-6.8.0-1036-aws,linux-6.8.0-1039-aws,linux-6.8.0-1040-aws,linux-6.8.0-1043-aws,linux-6.8.0-1044-aws,linux-6.14.9-arch1-1
|
||||
javax/swing/JButton/SwingButtonResizeTestWithOpenGL.java#id0 JBR-7928,JBR-9341 linux-6.8.0-1036-aws,linux-6.8.0-1039-aws,linux-6.8.0-1040-aws,linux-6.8.0-1043-aws,linux-6.8.0-1044-aws,linux-6.14.9-arch1-1
|
||||
javax/swing/JButton/SwingButtonResizeTestWithOpenGL.java#id2 JBR-7928,JBR-9341 linux-6.8.0-1036-aws,linux-6.8.0-1039-aws,linux-6.8.0-1040-aws,linux-6.8.0-1043-aws,linux-6.8.0-1044-aws,linux-6.14.9-arch1-1
|
||||
javax/swing/InputVerifier/VerifyTarget/VerifyTargetTest.java JBR-7520,JBR-9320 linux-6.8.0-1036-aws,linux-6.8.0-1039-aws,linux-6.8.0-1040-aws,linux-6.8.0-1043-aws,linux-6.14.9-arch1-1
|
||||
javax/swing/JButton/SwingButtonResizeTestWithOpenGL.java#id0 JBR-7928,JBR-9341 linux-6.8.0-1036-aws,linux-6.8.0-1039-aws,linux-6.8.0-1040-aws,linux-6.8.0-1043-aws,linux-6.14.9-arch1-1
|
||||
javax/swing/JButton/SwingButtonResizeTestWithOpenGL.java#id2 JBR-7928,JBR-9341 linux-6.8.0-1036-aws,linux-6.8.0-1039-aws,linux-6.8.0-1040-aws,linux-6.8.0-1043-aws,linux-6.14.9-arch1-1
|
||||
javax/swing/JEditorPane/JEditorPaneFontFallback.java JBR-8305 linux-all
|
||||
javax/swing/JFormattedTextField/bug4741926.java JBR-7530,JBR-9321 linux-all,linux-6.14.9-arch1-1
|
||||
javax/swing/JFormattedTextField/TestSelectedTextBackgroundColor.java JBR-8790 linux-all
|
||||
javax/swing/JPasswordField/TestSelectedTextBackgroundColor.java JBR-9277 linux-6.14.9-arch1-1
|
||||
javax/swing/JSpinner/TestSelectedTextBackgroundColor.java JBR-9277 linux-6.14.9-arch1-1
|
||||
|
||||
|
||||
Reference in New Issue
Block a user