Adding manual test scenarios

This commit is contained in:
Martin Pernollet 2022-04-28 11:51:45 +02:00
parent 72eba19fe0
commit 02e173e2cd
6 changed files with 226 additions and 9 deletions

View File

@ -196,7 +196,7 @@ This will run all test named `**/Test*.java` or `**/*Test.java`.
mvn clean install
```
#### Run unit tests and integration tests
#### Run unit tests and automated integration tests
Integration tests compare charts to baseline images pixel wise. They are important in te toolbelt but have the drawback of being less portable accross computers
* Different OS have different frame insets (changing actual rendering area size) leading to chart screenshots of different size accross OS.
@ -210,15 +210,17 @@ This will run all test named `**/ITTest*.java` and unit tests.
mvn clean install -Pintegration-tests
```
#### Skip tests
#### Skip automated tests
This will skip all tests (unit and integration)
```
mvn clean install -DskipTests
```
#### Manual tests
Some [test require a manual verification](jzy3d-tests-java9/src/test/java/org/jzy3d/tests/manual).
### Deploy source & javadocs
```
mvn clean source:jar javadoc:jar deploy

View File

@ -47,11 +47,13 @@ public class FrameAWT extends java.awt.Frame implements IFrame {
this.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
FrameAWT.this.remove((java.awt.Component) FrameAWT.this.chart.getCanvas());
FrameAWT.this.chart.stopAllThreads();
FrameAWT.this.chart.dispose();
FrameAWT.this.chart = null;
FrameAWT.this.dispose();
if(FrameAWT.this.chart!=null) {
FrameAWT.this.remove((java.awt.Component) FrameAWT.this.chart.getCanvas());
FrameAWT.this.chart.stopAllThreads();
FrameAWT.this.chart.dispose();
FrameAWT.this.chart = null;
FrameAWT.this.dispose();
}
}
});
}

View File

@ -6,3 +6,13 @@ This project holds a collection of integration tests and let them run them on Ja
See [the generated readme file](README_GENERATED.md) to easily watch all baseline
images used for tests.
## Automated tests
Most of the [integration tests](src/test/java/org/jzy3d/tests/integration) are automated and run while building this project.
## Manual tests
Some [test require a manual verification](src/test/java/org/jzy3d/tests/manual).

View File

@ -0,0 +1,23 @@
This tests allows verifying that the layout of the chart remains unchanged while using multiple monitors (screens) with different HiDPI capabilities.
## Setup
- Primary screen : HiDPI enabled
- Secondary screen : no HiDPI
## Contexts
- [ ] OS in {macOS 10, Windows 10, Ubuntu 20}
- [ ] Chip in {GPU (Native), CPU (EmulGL)}
## Instructions
- Run `MTest_Layout_Native` which will open on the main screen. (Use `--add-exports java.base/java.lang=ALL-UNNAMED --add-exports java.desktop/sun.awt=ALL-UNNAMED --add-exports java.desktop/sun.java2d=ALL-UNNAMED` VM optionsà
- Drag the chart window in the secondary screen.
### To be verified
When moving chart windows from primary to secondary monitor (screen).
- [ ] Axis text labels have the same size.
- [ ] Legend text labels have the same size.
- [ ] Colorbar text labels have the same size.
- [ ] Colorbar position remains the same.
### To indicate
- Context (OS, Chip)

View File

@ -0,0 +1,149 @@
package org.jzy3d.tests.manual.layout;
import org.jzy3d.analysis.AWTAbstractAnalysis;
import org.jzy3d.chart.EmulGLSkin;
import org.jzy3d.chart.controllers.RateLimiterAdaptsToRenderTime;
import org.jzy3d.chart.controllers.mouse.camera.AdaptiveRenderingPolicy;
import org.jzy3d.chart.factories.EmulGLChartFactory;
import org.jzy3d.colors.Color;
import org.jzy3d.colors.ColorMapper;
import org.jzy3d.colors.colormaps.ColorMapRainbow;
import org.jzy3d.maths.Range;
import org.jzy3d.painters.Font;
import org.jzy3d.plot3d.builder.Func3D;
import org.jzy3d.plot3d.builder.SurfaceBuilder;
import org.jzy3d.plot3d.builder.concrete.OrthonormalGrid;
import org.jzy3d.plot3d.primitives.Shape;
import org.jzy3d.plot3d.primitives.axis.layout.IAxisLayout;
import org.jzy3d.plot3d.primitives.axis.layout.LabelOrientation;
import org.jzy3d.plot3d.primitives.axis.layout.ZAxisSide;
import org.jzy3d.plot3d.primitives.axis.layout.fonts.HiDPIProportionalFontSizePolicy;
import org.jzy3d.plot3d.rendering.canvas.Quality;
import org.jzy3d.plot3d.rendering.legends.colorbars.AWTColorbarLegend;
import org.jzy3d.plot3d.rendering.view.AWTView;
import org.jzy3d.plot3d.rendering.view.View;
import org.jzy3d.plot3d.rendering.view.layout.ViewAndColorbarsLayout;
/**
* QTP
* valider avec / sans HiDPI :
* - le layout du texte est le même
* - les marges / offset sont appliquées correctement
* - marche côté gauche / côté droit
* - avec vertical / oblique / etc
*
* - Le calcul d'offset de label ne prend pas en compte la rotation du texte dans la place qu'il prend
*
* @author martin
*
*/
public class MTest_Layout_EmulGL extends AWTAbstractAnalysis{
static final float ALPHA_FACTOR = 0.55f;// .61f;
public static void main(String[] args) {
MTest_Layout_EmulGL d = new MTest_Layout_EmulGL();
d.init();
d.getChart().open(1264, 812);
}
public MTest_Layout_EmulGL() {
factory = new EmulGLChartFactory();
}
@Override
public void init() {
Quality q = Quality.Advanced();
q.setAnimated(false);
q.setHiDPIEnabled(true);
// --------------------------------------------------------
// Configure chart content
Shape surface = surface();
chart = factory.newChart(q);
IAxisLayout layout = chart.getAxisLayout();
//layout.setFont(new Font("Apple Chancery", 20));
layout.setFont(new Font("Helvetica", 20));
layout.setFontSizePolicy(new HiDPIProportionalFontSizePolicy(chart.getView()));
layout.setXAxisLabel("My X axis label is a little long to draw");
layout.setYAxisLabel("My Y axis label is a little long to draw");
layout.setZAxisLabel("My Z axis label is a little long to draw");
layout.setZAxisSide(ZAxisSide.LEFT);
layout.setZAxisLabelOrientation(LabelOrientation.VERTICAL);
layout.setYAxisLabelOrientation(LabelOrientation.PARALLEL_TO_AXIS);
layout.setXAxisLabelOrientation(LabelOrientation.PARALLEL_TO_AXIS);
layout.setAxisLabelOffsetAuto(true);
layout.setAxisLabelOffsetMargin(20);
layout.setXTickColor(Color.RED);
layout.setYTickColor(Color.GREEN);
layout.setZTickColor(Color.BLUE);
View view = chart.getView();
//view.setDisplayAxisWholeBounds(true);
//view.setMaintainAllObjectsInView(true);
view.setCameraRenderingSphereRadiusFactor(1.1f);
AWTColorbarLegend colorbar = new AWTColorbarLegend(surface, chart.getView().getAxis().getLayout());
surface.setLegend(colorbar);
chart.add(surface);
// --------------------------------------------------------
// Open and enable controllers
chart.getKeyboard();
chart.getMouse();
if (factory instanceof EmulGLChartFactory) {
EmulGLSkin skin = EmulGLSkin.on(chart);
skin.getCanvas().setProfileDisplayMethod(true);
skin.getCanvas().setDebugEvents(true);
skin.getLayout().setShrinkColorbar(true);
AdaptiveRenderingPolicy policy = new AdaptiveRenderingPolicy();
policy.renderingRateLimiter = new RateLimiterAdaptsToRenderTime();
policy.optimizeForRenderingTimeLargerThan = 130;// ms
policy.optimizeByDroppingFaceAndKeepingWireframeWithColor = true;
skin.getMouse().setPolicy(policy);
skin.getThread().setSpeed(15);
}
else {
((ViewAndColorbarsLayout)((AWTView)view).getLayout()).setShrinkColorbar(true);
}
}
private static Shape surface() {
Func3D func = new Func3D((x,y)->x * Math.sin(x * y));
Range range = new Range(-3, 3);
int steps = 50;
Shape surface = new SurfaceBuilder().orthonormal(new OrthonormalGrid(range, steps), func);
ColorMapper colorMapper =
new ColorMapper(new ColorMapRainbow(), surface, new Color(1, 1, 1, ALPHA_FACTOR));// 0.65f));
surface.setColorMapper(colorMapper);
surface.setFaceDisplayed(true);
surface.setWireframeDisplayed(true);
surface.setWireframeColor(Color.BLACK);
surface.setWireframeWidth(1);
return surface;
}
}

View File

@ -0,0 +1,31 @@
package org.jzy3d.tests.manual.layout;
import org.jzy3d.chart.factories.AWTChartFactory;
/**
* QTP
* valider avec / sans HiDPI :
* - le layout du texte est le même
* - les marges / offset sont appliquées correctement
* - marche côté gauche / côté droit
* - avec vertical / oblique / etc
*
* - Le calcul d'offset de label ne prend pas en compte la rotation du texte dans la place qu'il prend
*
* @author martin
*
*/
public class MTest_Layout_Native {
static final float ALPHA_FACTOR = 0.55f;// .61f;
public static void main(String[] args) {
MTest_Layout_EmulGL d = new MTest_Layout_EmulGL();
d.setFactory(new AWTChartFactory());
d.init();
d.getChart().open(1264, 812);
}
}