On Mon, 28 Feb 2022 17:28:45 GMT, DamonGuy <d...@openjdk.java.net> wrote:
>> Html does not fit in JButton at certain sizes because default Insets cause >> html to be displayed off-center. >> >> Changes made to SwingUtilities.java layoutCompoundLabelImpl method to enable >> clipping if html does not fit, similar to regular text. AquaButtonUI.java >> now detects when html does not fit, and an implementation for alternate >> insets that are recursively tested for regular text inside >> layoutAndGetText() are now also being used for html content. >> >> Created test (Bug8015854.java) with the same format as the test described on >> the issue. The button is of size 37x37 with an image of a red square sized >> 19x19. The test checks for red pixels on the edges of where the square image >> should be from the center of the button. The test fails with the non-changed >> jdk, but passes with the changes. > > DamonGuy has updated the pull request incrementally with one additional > commit since the last revision: > > Updated exception propagation. Added button location to EDT. Updated > testImageCentering for variable arguments. Moved object instantiation to the > same line. Changes requested by aivanov (Reviewer). test/jdk/javax/swing/JButton/HtmlButtonImageTest/HtmlButtonImageTest.java line 33: > 31: */ > 32: > 33: import java.awt.*; I prefer explicit imports rather than wildcard. In recent years, wildcard imports are usually replaced with explicit ones in the JDK code, including tests. test/jdk/javax/swing/JButton/HtmlButtonImageTest/HtmlButtonImageTest.java line 87: > 85: testImageCentering(leftClr, rightClr, topClr, botClr); > 86: } catch (ClassNotFoundException | InstantiationException | > IllegalAccessException e) { > 87: throw new RuntimeException("Unsupported LookAndFeel: " + e); What I meant is that can omit this catch block altogether. test/jdk/javax/swing/JButton/HtmlButtonImageTest/HtmlButtonImageTest.java line 90: > 88: } catch (IOException e) { > 89: //save image for troubleshooting > 90: BufferedImage failImg = robot.createScreenCapture(new > Rectangle(point.x - BUTTON_WIDTH / 2, point.y - BUTTON_HEIGHT / 2, > BUTTON_WIDTH, BUTTON_HEIGHT)); Could you please wrap this long line? It's far beyond 80 columns. test/jdk/javax/swing/JButton/HtmlButtonImageTest/HtmlButtonImageTest.java line 92: > 90: BufferedImage failImg = robot.createScreenCapture(new > Rectangle(point.x - BUTTON_WIDTH / 2, point.y - BUTTON_HEIGHT / 2, > BUTTON_WIDTH, BUTTON_HEIGHT)); > 91: ImageIO.write(failImg, "png", new File(testDir + > "/fail_square.png")); > 92: throw new RuntimeException("Failed image generation: " + e); This doesn't make sense. I mean `IOException` can be thrown from try-block only from `generateImage` method. In this case, there's nothing to display on screen and therefore nothing to capture. You should not catch `IOException` at all. You should create the screenshot if the conditions you verify aren't met. The screenshot should be taken inside `if (!checkRedness(c))` block before you throw the `RuntimeException` to indicate failure. test/jdk/javax/swing/JButton/HtmlButtonImageTest/HtmlButtonImageTest.java line 94: > 92: throw new RuntimeException("Failed image generation: " + e); > 93: } finally { > 94: // dispose frame when done testing for a LAF before continuing I think this comment is misleading: there's only one LaF tested. I propose removing it. test/jdk/javax/swing/JButton/HtmlButtonImageTest/HtmlButtonImageTest.java line 95: > 93: } finally { > 94: // dispose frame when done testing for a LAF before continuing > 95: SwingUtilities.invokeAndWait(() -> frame.dispose()); `frame` can be null here, if `generateImage` thrown the exception. You should check if frame is null in the lambda expression. test/jdk/javax/swing/JButton/HtmlButtonImageTest/HtmlButtonImageTest.java line 141: > 139: else { > 140: System.out.println("-- Passed"); > 141: } You don't need the else block. Now this message is printed four times. Just print the message after the for-loop. ------------- PR: https://git.openjdk.java.net/jdk/pull/7310