/* * Copyright (c) 2007, 2008 Borland Software Corporation * * 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: * Artem Tikhomirov (Borland) - initial API and implementation */ package org.eclipse.gmf.tests.tr; import java.util.HashSet; import junit.framework.TestCase; import org.eclipse.gmf.codegen.gmfgen.GenAuditContainer; import org.eclipse.gmf.codegen.gmfgen.GenAuditRoot; import org.eclipse.gmf.codegen.gmfgen.GenAuditRule; import org.eclipse.gmf.internal.bridge.genmodel.DiagramGenModelTransformer; import org.eclipse.gmf.mappings.AuditContainer; import org.eclipse.gmf.mappings.AuditRule; import org.eclipse.gmf.mappings.GMFMapFactory; import org.eclipse.gmf.mappings.Severity; /** * @author artem */ public class AuditRootTest extends TestCase { private AuditContainer topCat; private GenAuditRoot genRoot; @Override protected void setUp() throws Exception { super.setUp(); // four containers (levels: 1-2-1), owning one rule each topCat = createAuditContainer("ac1"); final AuditContainer containerChild1 = createAuditContainer("ac2"); containerChild1.setParentContainer(topCat); final AuditContainer containerChild1bis = createAuditContainer("ac2-bis"); containerChild1bis.setParentContainer(topCat); final AuditContainer containerChild2 = createAuditContainer("ac3"); containerChild2.setParentContainer(containerChild1); topCat.getAudits().add(createAuditRule("r1")); containerChild1.getAudits().add(createAuditRule("r2")); containerChild2.getAudits().add(createAuditRule("r3")); containerChild1bis.getAudits().add(createAuditRule("r4")); class DiagramGenModelTransformerX extends DiagramGenModelTransformer { private DiagramGenModelTransformerX() { } public GenAuditRoot go(AuditContainer audits) { super.process(audits); return getResult().getAudits(); } }; genRoot = new DiagramGenModelTransformerX().go(topCat); assertNotNull(genRoot); } private static AuditContainer createAuditContainer(String id) { AuditContainer container = GMFMapFactory.eINSTANCE.createAuditContainer(); container.setId(id); container.setName("Name of \"" + id + "\""); //$NON-NLS-1$ //$NON-NLS-2$ container.setDescription("Description of \"" + id + "\""); //$NON-NLS-1$ //$NON-NLS-2$ return container; } private static AuditRule createAuditRule(String token) { AuditRule r = GMFMapFactory.eINSTANCE.createAuditRule(); r.setId(token); r.setMessage("Message for " + token); r.setDescription("Description for " + token); r.setSeverity(Severity.get(token.hashCode() % 3)); r.setUseInLiveMode(token.hashCode() % 2 == 0); return r; } public void testStructure() { //count nodes assertEquals(4, genRoot.getCategories().size()); assertEquals(4, genRoot.getRules().size()); HashSet<GenAuditContainer> c = new HashSet<GenAuditContainer>(genRoot.getCategories()); for (GenAuditRule r : genRoot.getRules()) { assertNotNull(r.getCategory()); assertTrue("each rule belongs to sole category", c.remove(r.getCategory())); assertEquals(genRoot, r.getCategory().getRoot()); // temp check assertEquals(genRoot, r.getRoot()); } } public void testPath() { final GenAuditContainer c1 = findGenCategory(topCat); assertEquals(1, c1.getPath().size()); assertEquals(c1, c1.getPath().get(0)); final AuditContainer ac2 = topCat.getChildContainers().get(0); final GenAuditContainer c2 = findGenCategory(ac2); assertEquals(2, c2.getPath().size()); assertEquals(c1, c2.getPath().get(0)); assertEquals(c2, c2.getPath().get(1)); final GenAuditContainer c2bis = findGenCategory(topCat.getChildContainers().get(1)); assertEquals(2, c2bis.getPath().size()); assertEquals(c1, c2bis.getPath().get(0)); assertEquals(c2bis, c2bis.getPath().get(1)); final GenAuditContainer c3 = findGenCategory(ac2.getChildContainers().get(0)); assertEquals(3, c3.getPath().size()); assertEquals(c1, c3.getPath().get(0)); assertEquals(c2, c3.getPath().get(1)); assertEquals(c3, c3.getPath().get(2)); } public void testCategoryAttributes() { // id, message, desc AuditContainer ci = topCat.getChildContainers().get(1); GenAuditContainer co = findGenCategory(ci); assertNotNull(co); assertEquals(ci.getDescription(), co.getDescription()); assertEquals(ci.getName(), co.getName()); } public void testRuleAttributes() { final AuditRule ri = (topCat.getChildContainers().get(1)).getAudits().get(0); GenAuditRule ro = findGenRule(ri); assertNotNull(ro); assertEquals(ri.getName(), ro.getName()); assertEquals(ri.getDescription(), ro.getDescription()); assertEquals(ri.getMessage(), ro.getMessage()); assertEquals(ri.isUseInLiveMode(), ro.isUseInLiveMode()); assertEquals(ri.getSeverity().getLiteral(), ro.getSeverity().getLiteral()); assertEquals(ri.getContainer().getId(), ro.getCategory().getId()); } private GenAuditContainer findGenCategory(AuditContainer ac) { for (Object o : genRoot.getCategories()) { if (ac.getId().equals(((GenAuditContainer) o).getId())) { return (GenAuditContainer) o; } } return null; } private GenAuditRule findGenRule(AuditRule r) { for (Object o : genRoot.getRules()) { if (r.getId().equals(((GenAuditRule) o).getId())) { return (GenAuditRule) o; } } return null; } }