aboutsummaryrefslogtreecommitdiff
path: root/test/java/awt/font/TextLayout/HebrewIsRTLTest.java
blob: 1ced41de18981c60a6299e69be4ab168069c232e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
// Copyright 2019 Azul Systems, Inc.  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 Azul Systems, 385 Moffett Park Drive, Suite 115, Sunnyvale,
// CA 94089 USA or visit www.azul.com if you need additional information or
// have any questions.

import java.awt.Font;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;

/*
 * @test
 * @summary Fix to 8215210 should not break RTL with AAT fonts.
 * @run main/othervm  -Dsun.font.layoutengine=icu HebrewIsRTLTest
 */
public class HebrewIsRTLTest {
    static final String hebrewString = "\u05E9\u059E\u05E9\u0595\u05E9\u05A9\u05E9\u0592\u05E9\u0599\u05E9\u059E\u05E9\u0595\u05E9\u05A9\u05E9\u0592\u05E9\u0599  .  \u05E9\u0599\u05E9\u05A1\u05E9\u0595\u05E9\u0593";
    public static void main(String args[]) {
        if (!System.getProperty("os.name").startsWith("Mac")) {
            return;
        }

        // calculate text size
        BufferedImage biMetrics = new BufferedImage(1000, 1000, BufferedImage.TYPE_INT_RGB);
        Graphics2D biMetricsGraphics = biMetrics.createGraphics();
        Font font = new Font("TimesRoman", Font.PLAIN, 40);
        biMetricsGraphics.setFont(font);
        int width = biMetricsGraphics.getFontMetrics().stringWidth(hebrewString);
        int height = biMetricsGraphics.getFontMetrics().getHeight();

        // create minimal image
        BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        Graphics2D biGraphics = bi.createGraphics();
        biGraphics.setColor(Color.white);
        biGraphics.fillRect(0, 0, width, height);
        biGraphics.setColor(Color.black);
        biGraphics.setFont(font);
        biGraphics.drawString(hebrewString, 0, height);

        int y = bi.getHeight() / 2;
        int x;
        int rgb, rgbLeftCount = 0, rgbRightCount = 0;

        for (x = 0; x < bi.getWidth()/2; x++) {
            rgb = bi.getRGB(x, y);
            if (rgb == Color.BLACK.getRGB()) {
                rgbLeftCount++;
            }
        }
        for (x = bi.getWidth()/2 + 1; x < bi.getWidth(); x++) {
            rgb = bi.getRGB(x, y);
            if (rgb == Color.BLACK.getRGB()) {
                rgbRightCount++;
            }
        }
        if (rgbLeftCount > rgbRightCount) {
            throw new RuntimeException("Hebrew text seems drawn LTR");
        }
    }
}