/*******************************************************************************
* Copyright (c) 2014, 2015 Ericsson
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Marc Dumais (Ericsson) - Initial API and implementation
* Marc Khouzam (Ericsson) - Move to o.e.cdt.dsf.gdb.tests (bug 455237)
* Marc Dumais (Ericsson) - Move VisualizerVirtualBoundsGraphicObjectTest
* to o.e.cdt.dsf.gdb.multicoreVisualizer.ui.tests
*******************************************************************************/
package org.eclipse.cdt.dsf.gdb.multicorevisualizer.ui.test;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.cdt.visualizer.ui.canvas.VirtualBoundsGraphicObject;
import org.junit.Test;
public class VisualizerVirtualBoundsGraphicObjectTest {
// testcases
/**
* Test that VirtualBoundsGraphicObject scale correctly.
* To do that create a hierarchy of graphical object using virtual coordinates
* and sizes (bounds). Then set the real, pixel-bounds for the outer-most object.
* Verify that child objects end-up with expected pixel bounds.
*
* Also test retrieval of child objects.
*/
@Test
public void testVirtualBoundsGraphicObjectRelativeSizingAndRetrieval() throws Exception {
// we create the graphical objects with no margin, so as to make the sizes
// easier to predict / understand, for this test
VirtualBoundsGraphicObject containerA = new VirtualBoundsGraphicObject(true, 0);
VirtualBoundsGraphicObject containerB = new VirtualBoundsGraphicObject(true, 0);
VirtualBoundsGraphicObject containerC = new VirtualBoundsGraphicObject(true, 0);
VirtualBoundsGraphicObject containerD = new VirtualBoundsGraphicObject(true, 0);
VirtualBoundsGraphicObject containerE = new VirtualBoundsGraphicObject(true, 0);
VirtualBoundsGraphicObject containerF = new VirtualBoundsGraphicObject(true, 0);
// Add B within A
containerA.addChildObject("B", containerB);
// A - The outer-most container - is a virtual square of size 10x10
containerA.setVirtualBounds(new Rectangle(0, 0, 10, 10));
// Relative to A, B starts at (1,1) and is of size 8x8
containerB.setVirtualBounds(new Rectangle(1, 1, 8, 8));
// Add C, D and E within B
containerB.addChildObject("C", containerC);
containerB.addChildObject("D", containerD);
containerB.addChildObject("E", containerE);
// Relative to B, C starts at (3,2) and is of size 2x2
containerC.setVirtualBounds(new Rectangle(3, 2, 2, 2));
// Relative to B, D starts at (3,5) and is of size 2x2
containerD.setVirtualBounds(new Rectangle(3, 5, 2, 2));
// Relative to B, E starts at (6,1) and is of size 1x6
containerE.setVirtualBounds(new Rectangle(6, 1, 1, 6));
// Add F within C
containerC.addChildObject("F", containerF);
// Relative to C, F starts at (1,1) and is of size 1x1
containerF.setVirtualBounds(new Rectangle(1, 1, 1, 1));
// Define the real pixel bounds of the outer-most container -
// the pixel coordinates of all children objects will be
// computed recursively
containerA.setBounds(100, 50, 100, 100);
// check computed bounds for containerA
org.junit.Assert.assertEquals(100, containerA.getBounds().x);
org.junit.Assert.assertEquals(50, containerA.getBounds().y);
org.junit.Assert.assertEquals(100, containerA.getBounds().width);
org.junit.Assert.assertEquals(100, containerA.getBounds().height);
// check computed bounds for containerB
org.junit.Assert.assertEquals(110, containerB.getBounds().x);
org.junit.Assert.assertEquals(60, containerB.getBounds().y);
org.junit.Assert.assertEquals(80, containerB.getBounds().width);
org.junit.Assert.assertEquals(80, containerB.getBounds().height);
// check computed bounds for containerC
org.junit.Assert.assertEquals(140, containerC.getBounds().x);
org.junit.Assert.assertEquals(80, containerC.getBounds().y);
org.junit.Assert.assertEquals(20, containerC.getBounds().width);
org.junit.Assert.assertEquals(20, containerC.getBounds().height);
// check computed bounds for containerD
org.junit.Assert.assertEquals(140, containerD.getBounds().x);
org.junit.Assert.assertEquals(110, containerD.getBounds().y);
org.junit.Assert.assertEquals(20, containerD.getBounds().width);
org.junit.Assert.assertEquals(20, containerD.getBounds().height);
// check computed bounds for containerE
org.junit.Assert.assertEquals(170, containerE.getBounds().x);
org.junit.Assert.assertEquals(70, containerE.getBounds().y);
org.junit.Assert.assertEquals(10, containerE.getBounds().width);
org.junit.Assert.assertEquals(60, containerE.getBounds().height);
// check computed bounds for containerF
org.junit.Assert.assertEquals(150, containerF.getBounds().x);
org.junit.Assert.assertEquals(90, containerF.getBounds().y);
org.junit.Assert.assertEquals(10, containerF.getBounds().width);
org.junit.Assert.assertEquals(10, containerF.getBounds().height);
// check recursive object retrieval returns expected number of child objects, for A
org.junit.Assert.assertEquals(5, containerA.getAllObjects(true).size());
// check recursive object retrieval returns expected number of child objects, for B
org.junit.Assert.assertEquals(4, containerB.getAllObjects(true).size());
// check non-recursive object retrieval returns expected number of (1st level) child objects, for A
org.junit.Assert.assertEquals(1, containerA.getAllObjects(false).size());
// check object retrieval returns expected number of "selectable" child objects, for C
org.junit.Assert.assertEquals(1, containerC.getSelectableObjects().size());
// check specific children-object retrieval
VirtualBoundsGraphicObject obj = containerA.getObject("D");
org.junit.Assert.assertEquals(containerD, obj);
// check another specific object retrieval
obj = containerC.getObject("F");
org.junit.Assert.assertEquals(containerF, obj);
// Check the retrieval of a non-existing object
obj = containerC.getObject("blablabla");
org.junit.Assert.assertEquals(null, obj);
}
}