SugiyamaLayoutTest.java :  » UML » modsl » org » modsl » core » agt » layout » sugiyama » Java Open Source

Java Open Source » UML » modsl 
modsl » org » modsl » core » agt » layout » sugiyama » SugiyamaLayoutTest.java
/**
 * Copyright 2008 Andrew Vishnyakov <avishn@gmail.com>
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */

package org.modsl.core.agt.layout.sugiyama;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

import java.util.List;

import org.junit.Before;
import org.junit.Test;
import org.modsl.core.TMetaType;
import org.modsl.core.agt.model.AbstractAGTModelTest;
import org.modsl.core.agt.model.Node;

public class SugiyamaLayoutTest extends AbstractAGTModelTest {

    protected SugiyamaLayoutVisitor layout;

    @Before
    public void setUp() throws Exception {
        super.setUp();
        layout = (SugiyamaLayoutVisitor) new SugiyamaLayoutVisitor().type(TMetaType.GRAPH);
        layout.graph = graph;
    }

    @Test
    public void degreeSorting() {
        List<Node> sorted = layout.sortByOutDegree();
        assertEquals(sorted.size(), graph.getNodes().size());
        assertEquals(n1, sorted.get(0));
        assertEquals(n2, sorted.get(1));
        assertEquals(n5, sorted.get(sorted.size() - 1));
    }

    @Test
    public void removeCycles() {
        layout.removeCycles();
        assertFalse(e1_3.isReverted());
        assertFalse(e1_5.isReverted());
        assertFalse(e2_5.isReverted());
        assertFalse(e2_4.isReverted());
        assertFalse(e3_7.isReverted());
        assertFalse(e4_6.isReverted());
        assertTrue(e6_2.isReverted());
        assertFalse(e7_5.isReverted());
    }

    @Test
    public void sources() {
        assertEquals(1, layout.sources().size());
    }

    @Test
    public void topologicalSort() {
        layout.removeCycles();
        List<Node> sorted = layout.topologicalSort();
        assertEquals(graph.getNodes().size(), sorted.size());
        assertEquals(n1, sorted.get(0));
        assertEquals(n2, sorted.get(1));
        assertEquals(n3, sorted.get(2));
        assertEquals(n4, sorted.get(3));
        assertEquals(n7, sorted.get(4));
        assertEquals(n6, sorted.get(5));
        assertEquals(n5, sorted.get(6));
    }

    @Test
    public void layer() {
        layout.removeCycles();
        layout.splitIntoLayers();
        assertEquals(4, layout.stack.layers.size());
        assertEquals(0, layout.stack.getLayer(n1));
        assertEquals(0, layout.stack.getLayer(n2));
        assertEquals(1, layout.stack.getLayer(n3));
        assertEquals(1, layout.stack.getLayer(n4));
        assertEquals(3, layout.stack.getLayer(n5));
        assertEquals(2, layout.stack.getLayer(n6));
        assertEquals(2, layout.stack.getLayer(n7));
    }

    @Test
    public void undoRemoveCycles() {
        layout.removeCycles();
        layout.undoRemoveCycles();
        assertFalse(e1_3.isReverted());
        assertFalse(e1_5.isReverted());
        assertFalse(e2_5.isReverted());
        assertFalse(e2_4.isReverted());
        assertFalse(e3_7.isReverted());
        assertFalse(e4_6.isReverted());
        assertFalse(e6_2.isReverted());
        assertFalse(e7_5.isReverted());
    }

    @Test
    public void getLayerNodes() {
        layout.removeCycles();
        layout.splitIntoLayers();
        layout.insertDummies();
        assertEquals(2, layout.stack.layers.get(0).size());
        assertTrue(layout.stack.layers.get(0).contains(n1));
        assertTrue(layout.stack.layers.get(0).contains(n2));
        assertEquals(5, layout.stack.layers.get(1).size());
        assertTrue(layout.stack.layers.get(1).contains(n3));
        assertTrue(layout.stack.layers.get(1).contains(n4));
        assertTrue(layout.stack.layers.get(1).contains(e1_5.getBend(0)));
        assertTrue(layout.stack.layers.get(1).contains(e2_5.getBend(0)));
        assertTrue(layout.stack.layers.get(1).contains(e6_2.getBend(0)));
        assertEquals(4, layout.stack.layers.get(2).size());
        assertTrue(layout.stack.layers.get(2).contains(e1_5.getBend(1)));
        assertTrue(layout.stack.layers.get(2).contains(e2_5.getBend(1)));
        assertEquals(1, layout.stack.layers.get(3).size());
    }

    @Test
    public void insertDummies() {
        int sn = graph.getNodes().size();
        int se = graph.getEdges().size();
        layout.removeCycles();
        layout.splitIntoLayers();
        layout.insertDummies();
        // log.debug(new ToStringVisitor().toString(root));
        assertEquals(sn, graph.getNodes().size());
        assertEquals(se, graph.getEdges().size());
        assertTrue(n1.isConnectedTo(e1_5.getBend(0)));
        assertTrue(e1_5.getBend(0).isConnectedTo(e1_5.getBend(1)));
        assertTrue(e1_5.getBend(1).isConnectedTo(n5));
        assertTrue(n2.isConnectedTo(e2_5.getBend(0)));
        assertTrue(e2_5.getBend(0).isConnectedTo(e2_5.getBend(1)));
        assertTrue(e2_5.getBend(1).isConnectedTo(n5));
        assertTrue(n6.isConnectedTo(e6_2.getBend(0)));
        assertTrue(e6_2.getBend(0).isConnectedTo(n2));
    }

    @Test
    public void reduceCrossings2L() {

        layout.removeCycles();
        layout.splitIntoLayers();
        layout.insertDummies();
        layout.stack.initIndexes();

        // log.debug(new ToStringVisitor().toString(root));
        layout.stack.reduceCrossings2L(0, 1);
        // log.debug(layout.stack.toString());

        assertTrue(n3.getIndex() < 3);
        assertTrue(e1_5.getBend(0).getIndex() < 2);
        assertTrue(n4.getIndex() > 1);
        assertTrue(e2_5.getBend(0).getIndex() > 1);
        assertTrue(e6_2.getBend(0).getIndex() > 1);

    }

    @Test
    public void reduceCrossings() {
        layout.removeCycles();
        layout.splitIntoLayers();
        layout.insertDummies();
        layout.stack.initIndexes();
        layout.stack.reduceCrossings();
        // log.debug(new ToStringVisitor().toString(root));
    }
}

/*
 * 
 * 
 * null:GRAPH { e1_3:EDGE(n1->n3) e2_4:EDGE(n2->n4) e3_7:EDGE(n3->n7)
 * e4_6:EDGE(n4->n6) e1_5:EDGE(dummyNode3->n5) e2_5:EDGE(dummyNode7->n5)
 * e6_2:EDGE(dummyNode9->n6) e7_5:EDGE(n7->n5) dummyEdge2:EDGE(n1->dummyNode1)
 * dummyEdge4:EDGE(dummyNode1->dummyNode3) dummyEdge6:EDGE(n2->dummyNode5)
 * dummyEdge8:EDGE(dummyNode5->dummyNode7) dummyEdge10:EDGE(n2->dummyNode9)
 * n1:NODE n2:NODE n3:NODE n4:NODE n5:NODE n6:NODE n7:NODE dummyNode1:NODE
 * dummyNode3:NODE dummyNode5:NODE dummyNode7:NODE dummyNode9:NODE }
 * 
 * crossings
 * 
 * null(0,0):GRAPH { e1_3:EDGE(n1->n3) e2_4:EDGE(n2->n4) e3_7:EDGE(n3->n7)
 * e4_6:EDGE(n4->n6) e1_5:EDGE(dummyNode3->n5) e2_5:EDGE(dummyNode7->n5)
 * e6_2:EDGE(dummyNode9->n6) e7_5:EDGE(n7->n5) dummyEdge2:EDGE(n1->dummyNode1)
 * dummyEdge4:EDGE(dummyNode1->dummyNode3) dummyEdge6:EDGE(n2->dummyNode5)
 * dummyEdge8:EDGE(dummyNode5->dummyNode7) dummyEdge10:EDGE(n2->dummyNode9)
 * n1(2,1):NODE n2(1,1):NODE n3(4,2):NODE n4(1,2):NODE n5(1,4):NODE n6(1,3):NODE
 * n7(3,3):NODE dummyNode1(5,2):NODE dummyNode3(4,3):NODE dummyNode5(2,2):NODE
 * dummyNode7(2,3):NODE dummyNode9(3,2):NODE }
 * 
 */
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.