[rfc][icedtea-web] a new reproducer using AWT robot "mouse"

Jiri Vanek jvanek at redhat.com
Wed Nov 14 05:47:37 PST 2012


Hi!

The idea in  patch looks overall good, but there are two the main issues - first is with 
"shareability" of core methods and second is that it is not working very well (or better random, or 
not at all :( ). The tests were failing pretty a lot. See the attached log.
Also some minor issues inline,

Shareability - It is necessary to create parts of test framework which will handle  all the common 
rutines for all the robot tests. there must be created shared code in tests-extensions, eg 
net.jnlp.sourceforge.visualrobot.* or something like that, where will be utility  classes with 
shared awt logic.
This framework will then need to grow to allow us test as complicated GUIs as possible.


You are testing only applets, will it be usable also for javaws?


> 2012-11-13  Jana Fabrikova <jfabriko at redhat.com>
>
>      * /tests/reproducers/simple/AppletAWTMouse:
>      adding a new reproducer for testing reactions of a button inside
>      a html page to mouse events
>
> I would like to ask for review of the attached patch,
> thank you,
> Jana
>
> adding_AppletAWTMouse_reproducer.patch
>
>
> diff --git a/tests/reproducers/simple/AppletAWTMouse/resources/AppletAWTMouse.html b/tests/reproducers/simple/AppletAWTMouse/resources/AppletAWTMouse.html
> new file mode 100644
> --- /dev/null
> +++ b/tests/reproducers/simple/AppletAWTMouse/resources/AppletAWTMouse.html


Shouldn't there be license?
> @@ -0,0 +1,35 @@
> +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
> +<html lang="en-US">
> +  <head>
> +    <title>AWT Robot - Applet listens to mouse events</title>
> +    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
> +  </head>
> +  <body id="here" bgcolor="red">

There is custom that not-signed applets have blue backgrund, signed red. Those are not signed - have 
red some particular reason?
> +
> +    <br>
> +    <br>
> +    <br>
> +
> +    <hr color="yellow">

Does this lines and separators have something to do with image processing engine?
> +
> +    <br>
> +    <br>
> +    <br>
> +
> +    <div align="center">
Does this center have something to do with engine?

> +        <applet code="AppletAWTMouse"
> +            width="400"
> +            height="400"
> +            id="embeddedApplet" MAYSCRIPT>

What is this MAYSCRIPT? I remeber you saying it is some necessary hack .. for..??...

> +            <param name="jnlp_href" value="applet-awt-mouse.jnlp">
> +        </applet>
> +    </div>
> +
> +    <br>
> +    <br>
> +    <br>
> +
> +    <hr color="cyan">
> +
> +  </body>
> +</html>
> diff --git a/tests/reproducers/simple/AppletAWTMouse/resources/applet-awt-mouse.jnlp b/tests/reproducers/simple/AppletAWTMouse/resources/applet-awt-mouse.jnlp
> new file mode 100644

> --- /dev/null
> +++ b/tests/reproducers/simple/AppletAWTMouse/resources/applet-awt-mouse.jnlp
> @@ -0,0 +1,20 @@
> +<?xml version="1.0" encoding="UTF-8"?>
There should be definitely license...

> +<jnlp spec="1.0+" codebase="." href="applet-awt-mouse.jnlp">
> +    <information>
> +        <title>AWTRobot mouse events</title>
> +        <vendor>RedHat</vendor>
> +        <homepage href="http://icedtea.classpath.org/wiki/IcedTea-Web#Testing_IcedTea-Web"/>
> +        <description>AWTRobot mouse events</description>
> +    </information>
> +    <resources>
> +        <!-- Application Resources -->
> +        <j2se version="1.6+" href="http://java.sun.com/products/autodl/j2se"/>
> +        <jar href="AppletAWTMouse.jar" main="true" />
> +    </resources>
> +    <applet-desc
> +         name="Applet Listens to Mouse Events"
> +         main-class="AppletAWTMouse"
> +         width="400"
> +         height="400">
> +     </applet-desc>
> +</jnlp>
> diff --git a/tests/reproducers/simple/AppletAWTMouse/srcs/AppletAWTMouse.java b/tests/reproducers/simple/AppletAWTMouse/srcs/AppletAWTMouse.java
> new file mode 100644
> --- /dev/null
> +++ b/tests/reproducers/simple/AppletAWTMouse/srcs/AppletAWTMouse.java
License?

> @@ -0,0 +1,115 @@
> +import java.applet.Applet;
> +import java.awt.GridBagLayout;
> +import java.awt.GridBagConstraints;
> +import java.awt.Color;
> +import java.awt.Button;
> +import java.awt.Insets;
> +import java.awt.event.MouseEvent;
> +import java.awt.event.MouseListener;
> +import java.awt.event.MouseMotionListener;
> +
> +public class AppletAWTMouse extends Applet {

It would be nice to extend this tests both for Applet and JApplet 9can be in same jar and share logic)
They have slightly different approach to AWT
> +
> +    private static final long serialVersionUID = 1L;

:))


> +
> +    public void init() {
> +        String initStr = "Applet initialized.";
> +        System.out.println(initStr);
> +
> +        // sets background of the applet
> +        setBackground(Color.blue);

Is this colour (again) necessary for correct work of the framework?
> +
> +        this.setLayout(new GridBagLayout());
> +        GridBagConstraints c = new GridBagConstraints();
> +
> +        Button b = createButton("", Color.GREEN);

Textless buttons are rare;) (but nvm:)

Is this colour (again) necessary for correct work of the framework?

> +
> +        b.addMouseMotionListener(new MouseMotionListener() {
> +            public void mouseDragged(MouseEvent e) {
snipped many listeners
> +                    break;
> +                default:
> +                    break;
> +                }
> +            }
> +        });
> +        c.fill = GridBagConstraints.HORIZONTAL;
> +        c.weighty = 3;
> +        c.weightx = 2;
> +        c.gridheight = 1;
> +        c.insets = new Insets(0, 100, 200, 100); // left and bot and right padding
> +        c.gridx = 1;
> +        c.gridy = 0;
> +        c.ipady = 30;
> +        this.add(b, c);
> +    }
> +
> +    private Button createButton(String label, Color color) {
> +        Button b = new Button(label);
> +        b.setBackground(color);
> +        b.setSize(100, 50);
> +        return b;
> +    }
> +}


I like idea of one html+html and multiple launches of it in this case.


sts/reproducers/simple/AppletAWTMouse/testcases/AppletAWTMouseTest.java 
b/tests/reproducers/simple/AppletAWTMouse/testcases/AppletAWTMouseTest.java
> new file mode 100644
> --- /dev/null
> +++ b/tests/reproducers/simple/AppletAWTMouse/testcases/AppletAWTMouseTest.java
> @@ -0,0 +1,445 @@
snip license
> +obligated to do so.  If you do not wish to do so, delete this
> +exception statement from your version.
> + */
> +
> +import java.awt.AWTException;
> +import java.awt.Color;
> +import java.awt.Rectangle;
> +import java.awt.Robot;
> +import java.awt.Toolkit;
> +import java.awt.event.InputEvent;
> +import java.awt.image.BufferedImage;
> +
> +import net.sourceforge.jnlp.ProcessResult;
> +import net.sourceforge.jnlp.browsertesting.BrowserTest;
> +import net.sourceforge.jnlp.browsertesting.Browsers;
> +import net.sourceforge.jnlp.closinglisteners.CountingClosingListener;
> +import net.sourceforge.jnlp.annotations.NeedsDisplay;
> +import net.sourceforge.jnlp.annotations.TestInBrowsers;
> +import org.junit.Assert;
> +import org.junit.Test;
> +
> +public class AppletAWTMouseTest extends BrowserTest {
> +
> +    private final String exceptionStr = "xception";
> +    private final String errStr = "rror";
"rror" is quite short one. Especially if it will be extracted to framework, it can be easily 
misinterpreted during runtime.
And.. IS it used somewhere? Is not enough aoutoclosing listener?

> +    private final String initStr = "Applet initialized.";
> +    private final String afterStr = "afterTests";
> +

javadoc!

> +    private static final Color UPPER_HORIZONTAL_RULE_COLOR = Color.yellow;
> +    private static final Color LOWER_HORIZONTAL_RULE_COLOR = Color.cyan;
> +    private static final Color PAGE_BACKGROUND_COLOR = Color.red;
> +    private static final Color APPLET_BACKGROUND_COLOR = Color.blue;
> +    private static final Color BUTTON_COLOR = Color.green;

Here I see that the rulers are necessary ... Interesting.
As this will go probably to framework, you will need to allow user to set this up in constructor and 
have some () constructor with default values. So you will probably return "instance of framework" so 
you will happily get rid of most static method (which does not mean, that they will not have static 
backend)

> +
> +    private static final int SENSIBLE_DELAY = 100; //ms
> +
> +    // test identifiers constants:
> +    private static final int ENTER_EXIT = 0;
> +    private static final int MOUSE_CLICK1 = 1;
> +    private static final int MOUSE_CLICK2 = 2;
> +    private static final int MOUSE_CLICK3 = 3;
> +    private static final int MOUSE_DRAG = 4;
> +    private static final int MOUSE_MOVE = 5;
> +
I don't like this this int constant signpost. If nothing better canbe done here, then I would like 
to suggest at least enumeration.


> +    BufferedImage screenCapture;
Is this  varibale necessary? I tihn it can be just in-method local varibale. If it will have some 
purpose here (and will not be/or will be  moved to framework, then it will need some 
private/public... identifier, unles it really must be package private.

If this is class field, only because of thread-work, then it signify bad design;)



> +

Framework? (javadoc!!!)
> +    private static BufferedImage createScreenshot() { // of the whole monitor
> +        Toolkit toolkit = Toolkit.getDefaultToolkit();
> +        Rectangle captureSize = new Rectangle(toolkit.getScreenSize());
How does this work on multuiple monitors? I think it would be much better to capture jsut desired 
window. (not usre if possible via pure java)

> +        BufferedImage screenshot = null;
> +        try {
> +            Robot robot = new Robot();
> +            screenshot = robot.createScreenCapture(captureSize);
> +        } catch (AWTException e) {
> +            e.printStackTrace();
> +        }
> +        return screenshot;
> +    }
> +

Framework? (javadoc!!!)
> +    private static int findHorizontalRule(BufferedImage screen,
> +            Color ruleColor, boolean fromTop) {
> +        final int height = screen.getHeight();
> +        int gap = 0;
> +
> +        if (!fromTop) {
> +            return findHorizontalEdgeGap(screen, ruleColor,
> +                    PAGE_BACKGROUND_COLOR, 1, height - 1, gap);
> +        } else {
> +            return findHorizontalEdgeGap(screen, PAGE_BACKGROUND_COLOR,
> +                    ruleColor, 1, height - 1, gap);
> +        }
> +    }

Framework? (javadoc!!!)

> +
> +    private static int findHorizontalEdgeGap(BufferedImage screen,
> +            Color area1Color, Color area2Color, int y1, int y2, int gap) {
> +        final int width = screen.getWidth();
> +        final int area1RGB = area1Color.getRGB();
> +        final int area2RGB = area2Color.getRGB();
> +        int edgePosition = Integer.MIN_VALUE;
> +        int lastFound = Integer.MIN_VALUE;
> +
> +        for (int y = y1; y < y2 - gap; y++) {
> +            int found = 0;
> +            for (int x = 0; x < width; x++) {
> +                int c1 = screen.getRGB(x, y - 1);
> +                int c2 = screen.getRGB(x, y + gap);
> +                if (c1 == area1RGB && c2 == area2RGB) {
> +                    found++;
> +                }
> +            }
> +            if (found > lastFound) {
> +                lastFound = found;
> +                edgePosition = y;
> +            }
> +        }
> +        return edgePosition;
> +    }
> +

Framework? (javadoc!!!)

> +    private static int findVerticalEdgeGap(BufferedImage screen,
> +            Color area1Color, Color area2Color, int y1, int y2, int gap) {
> +        final int width = screen.getWidth();
> +        final int area1RGB = area1Color.getRGB();
> +        final int area2RGB = area2Color.getRGB();
> +        int edgePosition = Integer.MIN_VALUE;
> +        int lastFound = Integer.MIN_VALUE;
> +
> +        for (int x = 1; x < width - 1 - gap; x++) {
> +            int found = 0;
> +            for (int y = y1; y < y2; y++) {
> +                int c1 = screen.getRGB(x - 1, y);
> +                int c2 = screen.getRGB(x + gap, y);
> +                if (c1 == area1RGB && c2 == area2RGB) {
> +                    found++;
> +                }
> +            }
> +            if (found > lastFound) {
> +                lastFound = found;
> +                edgePosition = x;
> +            }
> +        }
> +        return edgePosition;
> +    }
> +

Framework? (javadoc!!!)

> +    private static Rectangle findColoredAreaGap(BufferedImage screen,
> +            Color searchForColor, Color surroundWithColor, int y1, int y2,
> +            int gap) {
> +        int ymin = findHorizontalEdgeGap(screen, surroundWithColor,
> +                searchForColor, y1, y2, gap);
> +        int ymax = findHorizontalEdgeGap(screen, searchForColor,
> +                surroundWithColor, y1, y2, gap);
> +        int xmin = findVerticalEdgeGap(screen, surroundWithColor,
> +                searchForColor, ymin, ymax, gap);
> +        int xmax = findVerticalEdgeGap(screen, searchForColor,
> +                surroundWithColor, ymin, ymax, gap);
> +        return new Rectangle(xmin, ymin, xmax - xmin, ymax - ymin);
> +    }
> +

Framework?????(javadoc!!!)
Will probably need some more generalization?

> +    private void moveInAndOutOfRectangle(Rectangle bR) {
> +        int xin = bR.x + bR.width / 2;
> +        int yin = bR.y + bR.height / 2;
> +        int xout = xin + bR.width + 10;
> +        int yout = yin + bR.height + 10;
> +
> +        try {
> +            Robot robot = new Robot();
> +            robot.delay(SENSIBLE_DELAY);
> +            robot.mouseMove(xout, yout);
> +            robot.delay(SENSIBLE_DELAY);
> +            robot.mouseMove(xin, yin);
> +            robot.delay(SENSIBLE_DELAY);
> +            robot.mouseMove(xout, yout);
> +            robot.delay(SENSIBLE_DELAY);
> +        } catch (AWTException e) {
> +            e.printStackTrace();
> +        }
> +
> +    }
> +

Framework?????(javadoc!!!)
Will probably need some more generalization?

> +    private void clickInsideRectangle(Rectangle bR, int button) {
> +        int x = bR.x + bR.width / 2;
> +        int y = bR.y + bR.height / 2;
> +
> +        try {
> +            Robot robot = new Robot();
> +            robot.delay(SENSIBLE_DELAY);
> +            robot.mouseMove(x, y);
> +            robot.delay(SENSIBLE_DELAY);
> +            robot.mousePress(button);
> +            robot.delay(SENSIBLE_DELAY);
> +            robot.mouseRelease(button);
> +        } catch (AWTException e) {
> +            e.printStackTrace();
> +        }
> +
> +    }
> +

Framework?????(javadoc!!!)
Will probably need some more generalization?

> +    private void dragFromRectangle(Rectangle bR) {
> +        int x = bR.x + bR.width / 2;
> +        int y = bR.y + bR.height / 2;
> +
> +        try {
> +            Robot robot = new Robot();
> +            robot.delay(SENSIBLE_DELAY);
> +            robot.mouseMove(x, y);
> +            robot.delay(SENSIBLE_DELAY);
> +            robot.mousePress(InputEvent.BUTTON1_MASK);
> +            robot.delay(SENSIBLE_DELAY);
> +            robot.mouseMove(x + 100, y + 100);
> +            robot.delay(SENSIBLE_DELAY);
> +            robot.mouseRelease(InputEvent.BUTTON1_MASK);
> +        } catch (AWTException e) {
> +            e.printStackTrace();
> +        }
> +    }
> +

Framework?????(javadoc!!!)
Will probably need some more generalization?
> +    private void moveInsideRectangle(Rectangle bR) {
> +        int x = bR.x + bR.width / 2;
> +        int y = bR.y + bR.height / 2;
> +        int x2 = x + bR.width / 3;
> +        int y2 = y + bR.height / 3;
> +
> +        try {
> +            Robot robot = new Robot();
> +            robot.delay(SENSIBLE_DELAY);
> +            robot.mouseMove(x, y);
> +            robot.delay(SENSIBLE_DELAY);
> +            robot.mouseMove(x2, y2);
> +            robot.delay(SENSIBLE_DELAY);
> +        } catch (AWTException e) {
> +            e.printStackTrace();
> +        }
> +
> +    }


It can be good habit to save mouse position in @beforeClass and restore it in @afterClass. Nut it nvm.
> +

The problem you are trying to solve here is tu run parallel awtrobot+screencapture and browser(javaws)
to use sleep for this is not the path you should follow :)

You need to run browser in different thread, and listen to some string like "hey I'm loaded", then 
you can start your thread (or probably this will be possible to do synchronously if browser will be 
in thread), which will move mouse, take screenshot and evaluate. There are some generic methods for 
this in tests-extensions for javaws, feel free to create such a generalised stuff for browser. It 
will be necessary (there are already some async tests for browser, feel free tolearn from theirs 
mistakes)



> +    private class ScreenshotAndActionThread implements Runnable {
> +        Thread t;
> +        int test;
> +
> +        ScreenshotAndActionThread(int testId) {
> +            t = new Thread(this, "screenshot thread");
> +            t.start();
> +            test = testId;
> +        }
> +
> +        public void run() {
> +            // wait for the applet (from another thread) to load
> +            try {

this is nasty EVIL :)

> +                Thread.sleep(5000);
> +            } catch (InterruptedException ie) {
> +                // Handle exception
> +                ie.printStackTrace();
> +            }
> +
> +            // capture the screen
This is very nasty too. You need to wrap this by your class with getScreenshot method wit eg some 
waiting until it will not be null.

> +            screenCapture = createScreenshot();
> +

ScreenCapture and its processing are quite separable logic.

> +            // find auxiliary rules for orientation on the screen
> +            final int y1 = findHorizontalRule(screenCapture,
> +                    UPPER_HORIZONTAL_RULE_COLOR, true);
> +            final int y2 = findHorizontalRule(screenCapture,
> +                    LOWER_HORIZONTAL_RULE_COLOR, false);
> +
> +            // find applet rectangle
> +            int gap = 0;
> +            Rectangle appletArea = findColoredAreaGap(screenCapture,
> +                    APPLET_BACKGROUND_COLOR, PAGE_BACKGROUND_COLOR, y1, y2, gap);
> +
> +            // find the button
> +            gap = 4;
> +            Rectangle buttonRectangle = findColoredAreaGap(screenCapture,
> +                    BUTTON_COLOR, APPLET_BACKGROUND_COLOR, appletArea.y,
> +                    appletArea.y + appletArea.height, gap);
> +
> +            // activate the applet by a click
> +            clickInsideRectangle(appletArea, InputEvent.BUTTON1_MASK);
> +

This will probably need to remain in testclass, but it will also probably need some generalisisatio 
via interface.

> +            switch (test) {
> +            case ENTER_EXIT:
> +                // move in and out of the button area
> +                moveInAndOutOfRectangle(buttonRectangle);
> +                break;
> +            case MOUSE_CLICK1:
> +                // click the button
> +                clickInsideRectangle(buttonRectangle, InputEvent.BUTTON1_MASK);
> +                break;
> +            case MOUSE_CLICK2:
> +                clickInsideRectangle(buttonRectangle, InputEvent.BUTTON2_MASK);
> +                break;
> +            case MOUSE_CLICK3:
> +                clickInsideRectangle(buttonRectangle, InputEvent.BUTTON3_MASK);
> +                break;
> +            case MOUSE_DRAG:
> +                // move onto the button
> +                // press mouse and move
> +                dragFromRectangle(buttonRectangle);
> +                break;
> +            case MOUSE_MOVE:
> +                // move in the button rectangle
> +                moveInsideRectangle(buttonRectangle);
> +                break;
> +            default:
> +                break;
> +            }
> +        }
> +    }
> +
> +
> +    private class CountingClosingListenerImpl extends CountingClosingListener {
> +
> +        @Override
> +        protected boolean isAlowedToFinish(String s) {
> +            if (s.contains(exceptionStr)) {
> +                return true;
> +            }
> +            return (s.contains(initStr) && s.contains(afterStr));
> +        }
> +    }
> +
> +    private void evaluateStdoutContents(String[] testStrs, ProcessResult pr) {
> +
> +        // Assert that the applet was initialized.
> +        Assert.assertTrue("AppletAWTMouseTest stdout should contain " + initStr
> +                + " but it didnt.", pr.stdout.contains(initStr));
> +
> +        // Assert that there are no errors.
> +        int ind = pr.stdout.indexOf(errStr);
> +        Assert.assertTrue("AppletAWTMouse - an error occured", (ind == -1));// no
> +
> +        // Assert that there are no exceptions.
> +        ind = pr.stdout.indexOf(exceptionStr);
> +        Assert.assertTrue("AppletAWTMouse - an exception occured", (ind == -1));// no
> +
> +        // Assert there are all the test messages from applet
> +        for (String testStr : testStrs) {
> +            Assert.assertTrue("AppletAWTMouse stdout should contain " + testStr
> +                    + " but it did not", pr.stdout.contains(testStr));
> +        }
> +
> +    }
> +
> +    private void appletAWTMouseTest(String url, String[] testStrs)
> +            throws Exception {
> +
> +        String strURL = "/" + url;
> +        ProcessResult pr = server.executeBrowser(strURL,
> +                new CountingClosingListenerImpl(),
> +                new CountingClosingListenerImpl());
> +        evaluateStdoutContents(testStrs, pr);
> +
> +    }
> +

tests and evaluation and listener looks greate!


> +    @Test
> +    @TestInBrowsers(testIn = { Browsers.all })
> +    @NeedsDisplay
> +    public void AppletAWTMouse_EnterAndExit_Test() throws Exception {
> +        // another thread:
> +        new ScreenshotAndActionThread(ENTER_EXIT);
> +
> +        // this thread:
> +        // display the page, activate applet, move over the button
> +        String[] testStrings = { "mouseEntered", "mouseExited" };
> +        appletAWTMouseTest("AppletAWTMouse.html", testStrings);
> +    }
...snip of simialr tests
> +    @Test
> +    @TestInBrowsers(testIn = { Browsers.all })
> +    @NeedsDisplay
> +    public void AppletAWTMouse_Move_Test() throws Exception {
> +        // another thread:
> +        new ScreenshotAndActionThread(MOUSE_MOVE);
> +
> +        // this thread:
> +        // display the page, activate applet, click on button
> +        String[] testStrings = { "mouseMoved" };
> +        appletAWTMouseTest("AppletAWTMouse.html", testStrings);
> +    }
> +}
>

I have also encountered some undesired behaviour like clicking on "aplication menu" of my xfce, or 
eg epiphany was showing applet in unfocused(hidden) tab, which is unaxceptable for visual test and 
will need some tweek in Epiphany stub.


I'm sorry for so much hints, but  this feature is really needed one and so it have to be scalable, 
reusable and maintainable, and also stable.


J.

-------------- next part --------------
port: 58007
dir: /home/jvanek/hg/icedtea-web/tests.build/reproducers_test_server_deploydir
Exception in thread "screenshot thread" java.lang.ArrayIndexOutOfBoundsException: Coordinate out of bounds!
	at sun.awt.image.IntegerInterleavedRaster.getDataElements(IntegerInterleavedRaster.java:219)
	at java.awt.image.BufferedImage.getRGB(BufferedImage.java:888)
	at AppletAWTMouseTest.findHorizontalEdgeGap(AppletAWTMouseTest.java:118)
	at AppletAWTMouseTest.findColoredAreaGap(AppletAWTMouseTest.java:160)
	at AppletAWTMouseTest.access$600(AppletAWTMouseTest.java:55)
	at AppletAWTMouseTest$ScreenshotAndActionThread.run(AppletAWTMouseTest.java:283)
	at java.lang.Thread.run(Thread.java:722)
FAILED: AppletAWTMouse_EnterAndExit_Test - chromium-browser(AppletAWTMouseTest) AppletAWTMouse stdout should contain mouseEntered but it did not
Exception in thread "screenshot thread" java.lang.ArrayIndexOutOfBoundsException: Coordinate out of bounds!
	at sun.awt.image.IntegerInterleavedRaster.getDataElements(IntegerInterleavedRaster.java:219)
	at java.awt.image.BufferedImage.getRGB(BufferedImage.java:888)
	at AppletAWTMouseTest.findHorizontalEdgeGap(AppletAWTMouseTest.java:118)
	at AppletAWTMouseTest.findColoredAreaGap(AppletAWTMouseTest.java:160)
	at AppletAWTMouseTest.access$600(AppletAWTMouseTest.java:55)
	at AppletAWTMouseTest$ScreenshotAndActionThread.run(AppletAWTMouseTest.java:283)
	at java.lang.Thread.run(Thread.java:722)
FAILED: AppletAWTMouse_EnterAndExit_Test - opera(AppletAWTMouseTest) AppletAWTMouse stdout should contain mouseEntered but it did not
FAILED: AppletAWTMouse_EnterAndExit_Test - midori(AppletAWTMouseTest) AppletAWTMouseTest stdout should contain Applet initialized. but it didnt.
Exception in thread "screenshot thread" java.lang.ArrayIndexOutOfBoundsException: Coordinate out of bounds!
	at sun.awt.image.IntegerInterleavedRaster.getDataElements(IntegerInterleavedRaster.java:219)
	at java.awt.image.BufferedImage.getRGB(BufferedImage.java:888)
	at AppletAWTMouseTest.findHorizontalEdgeGap(AppletAWTMouseTest.java:118)
	at AppletAWTMouseTest.findColoredAreaGap(AppletAWTMouseTest.java:160)
	at AppletAWTMouseTest.access$600(AppletAWTMouseTest.java:55)
	at AppletAWTMouseTest$ScreenshotAndActionThread.run(AppletAWTMouseTest.java:283)
	at java.lang.Thread.run(Thread.java:722)
Passed: AppletAWTMouseTest.AppletAWTMouse_EnterAndExit_Test - epiphany
Passed: AppletAWTMouseTest.AppletAWTMouse_ClickButton1_Test - chromium-browser
FAILED: AppletAWTMouse_ClickButton1_Test - opera(AppletAWTMouseTest) AppletAWTMouse stdout should contain mousePressedButton1 but it did not
FAILED: AppletAWTMouse_ClickButton1_Test - midori(AppletAWTMouseTest) AppletAWTMouseTest stdout should contain Applet initialized. but it didnt.
Exception in thread "screenshot thread" java.lang.ArrayIndexOutOfBoundsException: Coordinate out of bounds!
	at sun.awt.image.IntegerInterleavedRaster.getDataElements(IntegerInterleavedRaster.java:219)
	at java.awt.image.BufferedImage.getRGB(BufferedImage.java:888)
	at AppletAWTMouseTest.findHorizontalEdgeGap(AppletAWTMouseTest.java:118)
	at AppletAWTMouseTest.findColoredAreaGap(AppletAWTMouseTest.java:160)
	at AppletAWTMouseTest.access$600(AppletAWTMouseTest.java:55)
	at AppletAWTMouseTest$ScreenshotAndActionThread.run(AppletAWTMouseTest.java:283)
	at java.lang.Thread.run(Thread.java:722)
Passed: AppletAWTMouseTest.AppletAWTMouse_ClickButton1_Test - epiphany
Passed: AppletAWTMouseTest.AppletAWTMouse_ClickButton2_Test - chromium-browser
Passed: AppletAWTMouseTest.AppletAWTMouse_ClickButton2_Test - opera
FAILED: AppletAWTMouse_ClickButton2_Test - midori(AppletAWTMouseTest) AppletAWTMouseTest stdout should contain Applet initialized. but it didnt.
Passed: AppletAWTMouseTest.AppletAWTMouse_ClickButton2_Test - epiphany
Passed: AppletAWTMouseTest.AppletAWTMouse_ClickButton3_Test - chromium-browser
Passed: AppletAWTMouseTest.AppletAWTMouse_ClickButton3_Test - opera
FAILED: AppletAWTMouse_ClickButton3_Test - midori(AppletAWTMouseTest) AppletAWTMouseTest stdout should contain Applet initialized. but it didnt.
Passed: AppletAWTMouseTest.AppletAWTMouse_ClickButton3_Test - epiphany
Passed: AppletAWTMouseTest.AppletAWTMouse_Drag_Test - chromium-browser
Passed: AppletAWTMouseTest.AppletAWTMouse_Drag_Test - opera
FAILED: AppletAWTMouse_Drag_Test - midori(AppletAWTMouseTest) AppletAWTMouseTest stdout should contain Applet initialized. but it didnt.
Exception in thread "screenshot thread" java.lang.ArrayIndexOutOfBoundsException: Coordinate out of bounds!
	at sun.awt.image.IntegerInterleavedRaster.getDataElements(IntegerInterleavedRaster.java:219)
	at java.awt.image.BufferedImage.getRGB(BufferedImage.java:888)
	at AppletAWTMouseTest.findHorizontalEdgeGap(AppletAWTMouseTest.java:118)
	at AppletAWTMouseTest.findColoredAreaGap(AppletAWTMouseTest.java:160)
	at AppletAWTMouseTest.access$600(AppletAWTMouseTest.java:55)
	at AppletAWTMouseTest$ScreenshotAndActionThread.run(AppletAWTMouseTest.java:283)
	at java.lang.Thread.run(Thread.java:722)
FAILED: AppletAWTMouse_Drag_Test - epiphany(AppletAWTMouseTest) AppletAWTMouse stdout should contain mouseDragged but it did not
Passed: AppletAWTMouseTest.AppletAWTMouse_Move_Test - chromium-browser
Passed: AppletAWTMouseTest.AppletAWTMouse_Move_Test - opera
FAILED: AppletAWTMouse_Move_Test - midori(AppletAWTMouseTest) AppletAWTMouseTest stdout should contain Applet initialized. but it didnt.
Exception in thread "screenshot thread" java.lang.ArrayIndexOutOfBoundsException: Coordinate out of bounds!
	at sun.awt.image.IntegerInterleavedRaster.getDataElements(IntegerInterleavedRaster.java:219)
	at java.awt.image.BufferedImage.getRGB(BufferedImage.java:888)
	at AppletAWTMouseTest.findHorizontalEdgeGap(AppletAWTMouseTest.java:118)
	at AppletAWTMouseTest.findColoredAreaGap(AppletAWTMouseTest.java:160)
	at AppletAWTMouseTest.access$600(AppletAWTMouseTest.java:55)
	at AppletAWTMouseTest$ScreenshotAndActionThread.run(AppletAWTMouseTest.java:283)
	at java.lang.Thread.run(Thread.java:722)
Passed: AppletAWTMouseTest.AppletAWTMouse_Move_Test - epiphany
Total tests run: 24; From  those : 0 known to fail
Test known to fail: passed: 0; failed: 0; ignored: 0
Test results: passed: 14; failed: 10; ignored: 0
xsltproc  /home/jvanek/hg/icedtea-web/tests/report-styles/logs.xsl /home/jvanek/hg/icedtea-web/tests.build/test-extensions/ServerAccess-logs.xml > /home/jvanek/hg/icedtea-web/tests.build/logs_reproducers.html
xsltproc  --stringparam logs logs_reproducers.html /home/jvanek/hg/icedtea-web/tests/report-styles/jreport.xsl /home/jvanek/hg/icedtea-web/tests.build/test-extensions/tests-output.xml > /home/jvanek/hg/icedtea-web/tests.build/index_reproducers.html
touch stamps/run-netx-dist-tests.stamp



More information about the distro-pkg-dev mailing list