// Copyright 2010 Google Inc. All Rights Reseved. // // 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 com.google.testing.testify.risk.frontend.model; import com.google.common.collect.Lists; import junit.framework.TestCase; import java.util.List; import java.util.Random; /** * Unit tests the Capability class. * * @author jimr@google.com (Jim Reardon) */ public class CapabilityTest extends TestCase { public void testCapabilityFields() { Long currentTime = 0 - System.currentTimeMillis(); Capability capability = new Capability(42L, 1, 2); assertEquals(1, capability.getAttributeId()); assertEquals(2, capability.getComponentId()); capability.setAttributeId(3); capability.setComponentId(4); assertEquals(3, capability.getAttributeId()); assertEquals(4, capability.getComponentId()); assertEquals(42, capability.getParentProjectId()); capability.setParentProjectId(43); assertEquals(43, capability.getParentProjectId()); assertEquals(null, capability.getCapabilityId()); assertEquals(null, capability.getId()); capability.setCapabilityId(82); assertEquals(82, capability.getCapabilityId().longValue()); assertEquals(82, capability.getId().longValue()); assertEquals(null, capability.getName()); capability.setName("my favorite capability"); assertEquals("my favorite capability", capability.getName()); assertTrue(capability.getDisplayOrder() <= currentTime); capability.setDisplayOrder(5); assertEquals(5, capability.getDisplayOrder()); assertEquals(AccElementType.CAPABILITY, capability.getElementType()); AccLabel label = new AccLabel(); label.setLabelText("demo"); capability.addLabel(label); assertEquals(1, capability.getAccLabels().size()); assertEquals("", capability.getDescription()); capability.setDescription("hello"); assertEquals("hello", capability.getDescription()); capability.setDescription("new hello"); assertEquals("new hello", capability.getDescription()); assertEquals("demo", capability.getAccLabels().get(0).getLabelText()); } public void testRetrieveLabelById() { Capability capability = new Capability(); AccLabel label = new AccLabel(); label.setLabelText("hello"); capability.addLabel(label); label = new AccLabel(); label.setLabelText("is it me you're looking for"); label.setId("2"); capability.addLabel(label); label = new AccLabel(); label.setLabelText("i can see it in your smile"); label.setId("3"); capability.addLabel(label); label = new AccLabel(); label.setId("4"); capability.addLabel(label); label = capability.getAccLabel("2"); assertEquals(label.getLabelText(), "is it me you're looking for"); label = capability.getAccLabel("my endless love"); assertEquals(null, label); capability.updateLabel("i can see it in your smile", "i can see it in your eyes"); assertEquals("i can see it in your eyes", capability.getAccLabel("3").getLabelText()); } public void testSetAccLabelsAndRemove() { AccLabel label = new AccLabel(); label.setLabelText("one"); AccLabel label2 = new AccLabel(); label2.setLabelText("two"); List<AccLabel> labels = Lists.newArrayList( label, label2); Capability capability = new Capability(); capability.setAccLabels(labels); assertEquals(2, capability.getAccLabels().size()); AccLabel delete = new AccLabel(); delete.setLabelText("two"); capability.removeLabel(delete); assertEquals(1, capability.getAccLabels().size()); assertEquals("one", capability.getAccLabels().get(0).getLabelText()); label2.setId("id"); capability.addLabel(label2); assertEquals(2, capability.getAccLabels().size()); delete.setLabelText(null); delete.setId("id"); capability.removeLabel(delete); assertEquals(1, capability.getAccLabels().size()); assertEquals("one", capability.getAccLabels().get(0).getLabelText()); } public void testLabels() { Capability capability = new Capability(0L, 1, 2); assertEquals(null, capability.getCapabilityId()); assertEquals(0, capability.getAccLabels().size()); capability.addLabel("dev owner"); assertEquals(1, capability.getAccLabels().size()); assertEquals("dev owner", capability.getAccLabels().get(0).getLabelText()); } public void testTwoStateLabel() { Capability capability = new Capability(42L, 1, 2); assertEquals(null, capability.getCapabilityId()); capability.setCapabilityId(82L); assertEquals(0, capability.getAccLabels().size()); capability.addLabel("One State"); capability.addLabel("Two State-Hello"); capability.addLabel("Two State Separate", "Yes"); assertEquals(3, capability.getAccLabels().size()); AccLabel label = capability.getAccLabels().get(0); assertEquals(82, label.getElementId().longValue()); assertEquals("One State", label.getLabelText()); assertEquals(42, label.getProjectId().longValue()); assertEquals(AccElementType.CAPABILITY, label.getElementType()); assertEquals("Capability", label.getElementType().getFriendlyName()); label = capability.getAccLabels().get(1); assertEquals("Two State-Hello", label.getLabelText()); assertEquals("Two State", label.getName()); assertEquals("Hello", label.getValue()); assertEquals(42, label.getProjectId().longValue()); assertEquals(82, label.getElementId().longValue()); assertEquals(AccElementType.CAPABILITY, label.getElementType()); label = capability.getAccLabels().get(2); assertEquals("Two State Separate-Yes", label.getLabelText()); assertEquals("Two State Separate", label.getName()); assertEquals("Yes", label.getValue()); capability.removeLabel("doesn't exist"); assertEquals(3, capability.getAccLabels().size()); capability.removeLabel("Two State Separate-Yes"); assertEquals(2, capability.getAccLabels().size()); capability.removeLabel("doesn't", "exist"); assertEquals(2, capability.getAccLabels().size()); capability.removeLabel("Two State", "Hello"); assertEquals(1, capability.getAccLabels().size()); } public void testEdgeCaseLabels() { Capability capability = new Capability(42L, 1, 2); assertEquals(null, capability.getCapabilityId()); assertEquals(0, capability.getAccLabels().size()); capability.addLabel(""); capability.addLabel("-"); capability.addLabel("Two State-"); assertEquals(3, capability.getAccLabels().size()); assertEquals("", capability.getAccLabels().get(0).getLabelText()); assertEquals("-", capability.getAccLabels().get(1).getLabelText()); assertEquals("Two State-", capability.getAccLabels().get(2).getLabelText()); } public void testLabelSetNameValueAndNullText() { AccLabel label = new AccLabel(); label.setId("id"); label.setName("name"); label.setValue("value"); assertEquals("id", label.getId()); assertEquals("name", label.getName()); assertEquals("value", label.getValue()); label.setLabelText(null); assertEquals("id", label.getId()); assertEquals(null, label.getName()); assertEquals(null, label.getValue()); } /** * 'IntersectionKey' is a unique integer generated by a Capability's parent Component and * Attribute. It is used as an index into lookup tables. */ public void testGetCapabilityIntersectionKey() { Random rng = new Random(0); // Keep components minimal to verify this is all keyed off of the IDs. Component compA = new Component(3L); compA.setComponentId(rng.nextLong()); Component compB = new Component(3L); compB.setComponentId(rng.nextLong()); Attribute attrA = new Attribute(3L); attrA.setAttributeId(rng.nextLong()); Attribute attrB = new Attribute(3L); attrB.setAttributeId(rng.nextLong()); Capability capabilityAA = new Capability( 3L, attrA.getAttributeId(), compA.getComponentId()); int keyAA = capabilityAA.getCapabilityIntersectionKey(); Capability capabilityAB = new Capability( 3L, attrA.getAttributeId(), compB.getComponentId()); int keyAB = capabilityAB.getCapabilityIntersectionKey(); Capability capabilityBA = new Capability( 3L, attrB.getAttributeId(), compA.getComponentId()); int keyBA = capabilityBA.getCapabilityIntersectionKey(); Capability capabilityAA2 = new Capability( 3L, attrA.getAttributeId(), compA.getComponentId()); int keyAA2 = capabilityAA2.getCapabilityIntersectionKey(); int keyAA3 = Capability.getCapabilityIntersectionKey(compA, attrA); assertTrue(keyAA != keyBA); assertTrue(keyAA != keyAB); assertTrue(keyAA != keyBA); assertTrue(keyAA == keyAA2); assertTrue(keyAA2 == keyAA3); } public void testCapabilityIntersectionData() { Attribute attribute = new Attribute(); attribute.setAttributeId(52L); Component component = new Component(); component.setComponentId(59L); List<Capability> capabilities = Lists.newArrayList(new Capability(), new Capability()); CapabilityIntersectionData intersect = new CapabilityIntersectionData(attribute, component, capabilities); assertEquals(attribute, intersect.getParentAttribute()); assertEquals(component, intersect.getParentComponent()); assertEquals(2, intersect.getCapabilities().size()); assertEquals(capabilities, intersect.getCapabilities()); } }