blob: 16877dbdf9dba2bd6d5f2a28f57c9f637ec92238 [file] [log] [blame]
/*********************************************************************
* Copyright (c) 2010 Boeing
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Boeing - initial API and implementation
**********************************************************************/
package org.eclipse.osee.framework.skynet.core.importing.parsers;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import org.eclipse.osee.framework.skynet.core.importing.ReqNumbering;
import org.junit.Assert;
import org.junit.Test;
/**
* @author Karol M. Wilk
*/
public final class OutlineResolutionAndNumberTest {
private static final String LAST_OUTLINE_NUMBER = "3.1.1.2.1.7"; /* realistic outline number */
private final OutlineResolution outlineResolution = new OutlineResolution();
@Test
public void testLowerOutlineNumbers() {
Assert.assertTrue(outlineResolution.isInvalidOutlineNumber("3.1.1.2.1.6", LAST_OUTLINE_NUMBER));
Assert.assertTrue(outlineResolution.isInvalidOutlineNumber("3.0", LAST_OUTLINE_NUMBER));
Assert.assertTrue(outlineResolution.isInvalidOutlineNumber("3.1.1.1", LAST_OUTLINE_NUMBER));
Assert.assertTrue(outlineResolution.isInvalidOutlineNumber("2.1.13.1", LAST_OUTLINE_NUMBER));
Assert.assertTrue(outlineResolution.isInvalidOutlineNumber("3.1.0", LAST_OUTLINE_NUMBER));
Assert.assertTrue(outlineResolution.isInvalidOutlineNumber("2.9", LAST_OUTLINE_NUMBER));
Assert.assertTrue(outlineResolution.isInvalidOutlineNumber("2.10", LAST_OUTLINE_NUMBER));
Assert.assertTrue(outlineResolution.isInvalidOutlineNumber("2.1", LAST_OUTLINE_NUMBER));
Assert.assertTrue(outlineResolution.isInvalidOutlineNumber("1.8", LAST_OUTLINE_NUMBER));
Assert.assertTrue(outlineResolution.isInvalidOutlineNumber("0.15", LAST_OUTLINE_NUMBER));
}
@Test
public void testHigherOutlineNumbers() {
Assert.assertFalse(outlineResolution.isInvalidOutlineNumber("3.1.1.2.1.8", LAST_OUTLINE_NUMBER));
Assert.assertTrue(outlineResolution.isInvalidOutlineNumber("3.2.1.3", LAST_OUTLINE_NUMBER));
Assert.assertFalse(outlineResolution.isInvalidOutlineNumber("4.0", LAST_OUTLINE_NUMBER));
Assert.assertTrue(outlineResolution.isInvalidOutlineNumber("4.2", LAST_OUTLINE_NUMBER));
Assert.assertTrue(outlineResolution.isInvalidOutlineNumber("4.2.5.10", LAST_OUTLINE_NUMBER));
Assert.assertTrue(outlineResolution.isInvalidOutlineNumber("3.1.1.4.1.1", LAST_OUTLINE_NUMBER));
}
@Test
public void testZeroBasedOutlineNumbers() {
Assert.assertFalse(outlineResolution.isInvalidOutlineNumber("3.2.1.0.1", "3.2.1"));
Assert.assertTrue(outlineResolution.isInvalidOutlineNumber("3.2.0.0.1", "3.2.1"));
}
@Test
public void testRandomOutlineNumbers() {
Assert.assertTrue(outlineResolution.isInvalidOutlineNumber("6.5", LAST_OUTLINE_NUMBER));
Assert.assertTrue(outlineResolution.isInvalidOutlineNumber("0.25", LAST_OUTLINE_NUMBER));
Assert.assertTrue(outlineResolution.isInvalidOutlineNumber("10.48", LAST_OUTLINE_NUMBER));
Assert.assertTrue(outlineResolution.isInvalidOutlineNumber("200.12.3", LAST_OUTLINE_NUMBER));
Assert.assertFalse(outlineResolution.isInvalidOutlineNumber("4.0", "3.1"));
Assert.assertFalse(outlineResolution.isInvalidOutlineNumber("2.1.1.1.2", "2.1.1.1.1"));
Assert.assertFalse(outlineResolution.isInvalidOutlineNumber("2.1.1.1.1.1", "2.1.1.1.1"));
Assert.assertTrue(outlineResolution.isInvalidOutlineNumber("2.1.1.1.1.2", "2.1.1.1.1"));
Assert.assertFalse(outlineResolution.isInvalidOutlineNumber("3.0", "2.1.1.1.1"));
Assert.assertFalse(outlineResolution.isInvalidOutlineNumber("2.2", "2.1.1.1.1"));
Assert.assertFalse(outlineResolution.isInvalidOutlineNumber("2.1.2", "2.1.1.1.1"));
Assert.assertTrue(outlineResolution.isInvalidOutlineNumber("3.2", "2.1.1.1.1"));
}
@Test
public void testNextSetGeneration() {
Set<String> nextPossibleSet = outlineResolution.generateNextSet(new ReqNumbering(LAST_OUTLINE_NUMBER));
Set<String> expected = new HashSet<>(Arrays.asList("3.2", "3.1.2", "3.1.1.3", "3.1.1.2.2", "3.1.1.2.1.8",
"4.0", "3.1.1.2.1.7.1", "3.1.1.2.1.7.0.1"));
addDotEndingSet(expected);
expected.removeAll(nextPossibleSet);
Assert.assertTrue(expected.isEmpty());
}
/**
* <p>
* Generate next numbers with ending "." by default.
*
* <pre>
* input(current number) output(generated set)
* 1. -> [1.1, 1.1., 1.0.1., 1.0.1, 2.0, 2.0.]
* 3. -> [3.0.1, 3.0.1., 3.1, 3.1., 4.0, 4.0.]
* </pre>
* </p>
*/
@Test
public void testNextSetGeneration_NonZeroBased() {
Set<String> nextPossibleSet = outlineResolution.generateNextSet(new ReqNumbering("1."));
Set<String> expected = new HashSet<>(Arrays.asList("2.0", "1.1", "1.0.1"));
addDotEndingSet(expected);
expected.removeAll(nextPossibleSet);
Assert.assertTrue(expected.isEmpty());
}
@Test
public void testNextSetGeneration_ZeroBased() {
Set<String> nextPossibleSet = outlineResolution.generateNextSet(new ReqNumbering("1.0"));
Set<String> expected = new HashSet<>(Arrays.asList("2.0", "1.1", "1.0.1"));
addDotEndingSet(expected);
expected.removeAll(nextPossibleSet);
Assert.assertTrue(expected.isEmpty());
}
@Test
public void testNextSetGeneration_ZeroExtendedBased() {
Set<String> nextPossibleSet = outlineResolution.generateNextSet(new ReqNumbering("1.0.1"));
Set<String> expected = new HashSet<>(Arrays.asList("2.0", "1.1", "1.0.2"));
addDotEndingSet(expected);
expected.removeAll(nextPossibleSet);
Assert.assertTrue(expected.isEmpty());
}
@Test
public void testNextSetGeneration_DoubleDigitZeroBased() {
Set<String> nextPossibleSet = outlineResolution.generateNextSet(new ReqNumbering("1.0.10"));
Set<String> expected = new HashSet<>(Arrays.asList("2.0", "1.1", "1.0.11", "1.0.10.1", "1.0.10.0.1"));
addDotEndingSet(expected);
expected.removeAll(nextPossibleSet);
Assert.assertTrue(expected.isEmpty());
}
@Test
public void testNextSetGeneration_DoubleDigitHigherBased() {
Set<String> nextPossibleSet = outlineResolution.generateNextSet(new ReqNumbering("1.23"));
Set<String> expected = new HashSet<>(Arrays.asList("2.0", "1.24", "1.23.1", "1.23.0.1"));
addDotEndingSet(expected);
expected.removeAll(nextPossibleSet);
Assert.assertTrue(expected.isEmpty());
}
@Test
public void testNextSetGeneration_SubItems() {
String current = "1.23.1.1";
Set<String> nextPossibleSet = outlineResolution.generateNextSet(new ReqNumbering("1.23"));
Assert.assertFalse(nextPossibleSet.contains(current));
boolean larger_NotGenerated_CorrectInvalid = outlineResolution.isInvalidOutlineNumber(current, "1.23");
Assert.assertFalse(larger_NotGenerated_CorrectInvalid);
larger_NotGenerated_CorrectInvalid = outlineResolution.isInvalidOutlineNumber("1.23.1.10", "1.23");
Assert.assertFalse(larger_NotGenerated_CorrectInvalid);
larger_NotGenerated_CorrectInvalid = outlineResolution.isInvalidOutlineNumber("1.23.0.26.1.0.1", "1.23");
Assert.assertFalse(larger_NotGenerated_CorrectInvalid);
}
private void addDotEndingSet(Set<String> inputSet) {
Set<String> dotEnding = new HashSet<>(inputSet.size());
for (String item : inputSet) {
dotEnding.add(item + ".");
}
inputSet.addAll(dotEnding);
}
}