On 27.07.2020 23:43, Alexander Zuev wrote:
   As for the test i have a manual test that i use to reproduce the situation 
but i am not sure i can make
the automated test case - the configuration required is quite unique. I tried 
to play with the setting
that manages the magnification factor but changing it does not trigger the bug.

I guess something like this should work:

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BaseMultiResolutionImage;
import java.awt.image.BufferedImage;
import java.awt.image.ImageObserver;
import java.awt.image.ImageProducer;

import static java.awt.image.BufferedImage.TYPE_INT_RGB;

public final class SkipRequestedImageVariant {

    public static void main(String[] args) {
        var mri = new BaseMultiResolutionImage(1,
                                               generateFakeImage(),
                                               generateImage(200, Color.GREEN),
                                               generateFakeImage());

        BufferedImage target = new BufferedImage(500, 500, TYPE_INT_RGB);
        Graphics2D g2d = target.createGraphics();
        g2d.drawImage(mri, 0, 0, 500, 500, null);
        g2d.dispose();
        if (Color.GREEN.getRGB() != target.getRGB(1, 1)) {
            throw new RuntimeException("Wrong resolution variant was used");
        }
    }

    private static BufferedImage generateImage(int size, Color c) {
        BufferedImage img = new BufferedImage(size, size, TYPE_INT_RGB);
        Graphics g = img.createGraphics();
        g.setColor(c);
        g.fillRect(0, 0, size, size);
        g.dispose();
        return img;
    }

    private static Image generateFakeImage() {
        return new Image(){
            @Override
            public int getWidth(ImageObserver observer) {
                return -1;
            }

            @Override
            public int getHeight(ImageObserver observer) {
                return -1;
            }

            @Override
            public ImageProducer getSource() {
                return null;
            }

            @Override
            public Graphics getGraphics() {
                return null;
            }

            @Override
            public Object getProperty(String name, ImageObserver observer) {
                return null;
            }
        };
    }
}

Reply via email to