private void loadRequirementsFromClasses(List<Class<?>> classes) { int maxDepth = maximumClassDepth(classes,rootPackage); for (Class candidateClass : classes) { addRequirementTo(requirementsByPath, candidateClass, maxDepth); } leafRequirements = findLeafRequirementsIn(requirementsByPath); persistRequirementsAsJSON(requirementsByPath); }
@Override public Set<TestTag> getTagsFor(TestOutcome testOutcome) { Set<TestTag> result = new HashSet<>(); for (Requirement requirement : getAllRequirements()) { if (isMatchingRequirementFor(testOutcome, requirement)) { result.add(requirement.asTag()); } } return result; }
private void addRequirementTo(SortedMap<String, Requirement> requirementsByPath, Class candidateClass) { String fullRequirementName = getFullRequirementPath(candidateClass); String[] packageNames = fullRequirementName.split(DOT_REGEX); String currentPath = ""; for (int level = 0; level < packageNames.length; level++) { currentPath = (currentPath.isEmpty()) ? packageNames[level] : Joiner.on(".").join(currentPath, packageNames[level]); String defaultRequirementType = getDefaultType(level); Requirement currentRequirement; if (!requirementsByPath.containsKey(currentPath)) { if (level < packageNames.length - 1) { currentRequirement = newParentRequirement(currentPath, packageNames[level], level, defaultRequirementType); requirementsByPath.put(currentPath, currentRequirement); } else { currentRequirement = newRequirement(candidateClass, currentPath, packageNames[level], level, defaultRequirementType); String fullPath = getFullRequirementPath(candidateClass); requirementsByPath.put(fullPath, currentRequirement); } } } }
private void loadRequirementsFromClasses(List<Class<?>> classes) { for (Class candidateClass : classes) { addRequirementTo(requirementsByPath, candidateClass); } leafRequirements = findLeafRequirementsIn(requirementsByPath); persistRequirementsAsJSON(requirementsByPath); }
private SortedMap<String, Requirement> loadRequirementsFromClasses(List<Class<?>> classes) { SortedMap<String, Requirement> requirementMap = new TreeMap<>(); int maxDepth = maximumClassDepth(classes, rootPackage); for (Class candidateClass : classes) { addRequirementTo(requirementMap, candidateClass, maxDepth); } addChildrenTo(requirementMap); persistRequirementsAsJSON(requirementMap); return requirementMap; }
@Override public Set<TestTag> getTagsFor(TestOutcome testOutcome) { Set<TestTag> result = new HashSet<TestTag>(); for (Requirement requirement : getAllRequirements()) { if (isMatchingRequirementFor(testOutcome, requirement)) { result.add(TestTag.withName(humanReadableVersionOf(requirement.getName())).andType(requirement.getType())); } } return result; }
private boolean isMatchingRequirementFor(TestOutcome testOutcome, Requirement requirement) { return (fullPathOf(requirement).matchesOrIsADescendantOf(normalizedPath(testOutcome.getPathId()))) || (fullPathOf(requirement).matchesOrIsADescendantOf(normalizedPath(testOutcome.getPath()))); }
private Requirement getRequirement(Class candidateClass, String packageName, int level, String requirementTitle, String requirementType, String narrativeText, String cardNumber, Optional<Narrative> narrative) { if (narrative.isPresent()) { requirementTitle = narrative.get().title(); requirementType = narrative.get().type(); narrativeText = Joiner.on("\n").join(narrative.get().text()); cardNumber = narrative.get().cardNumber(); } if (StringUtils.isEmpty(requirementType)) { requirementType = getRequirementType(level, candidateClass); } return Requirement.named(humanReadableVersionOf(packageName)) .withOptionalCardNumber(cardNumber) .withOptionalDisplayName(StringUtils.isEmpty(requirementTitle) ? humanReadableVersionOf(packageName) : humanReadableVersionOf(requirementTitle)) .withType(requirementType) .withNarrative(narrativeText); }
private Collection<Requirement> getAllRequirements() { return getRequirementsByPath().values(); }
private Requirement newRequirement(Class candidateClass, String currentPath, String packageName, int level, String defaultRequirementType) { String requirementTitle = packageName; String requirementType = defaultRequirementType; String narrativeText = ""; String cardNumber = ""; Optional<Narrative> narrative = NarrativeFinder.forClass(candidateClass); return getRequirement(candidateClass, packageName, level, requirementTitle, requirementType, narrativeText, cardNumber, narrative); }
public SortedMap<String, Requirement> getRequirementsByPath() { getRequirements(); return requirementsByPath; }
private String getRequirementType(int level, Class candidateClass) { if ((candidateClass != null) && (candidateClass.getName().endsWith(".package-info"))) { return getDefaultType(level); } else { return "story"; } }
@Override public List<Requirement> getRequirements() { return NewList.copyOf(rootRequirementsIn(getRequirementsByPath().values())); }
@Override public Set<TestTag> getTagsFor(TestOutcome testOutcome) { Set<TestTag> result = new HashSet<>(); for (Requirement requirement : getAllRequirements()) { if (isMatchingRequirementFor(testOutcome, requirement)) { result.add(TestTag.withName(humanReadableVersionOf(requirement.getName())).andType(requirement.getType())); } } return result; }
private boolean isMatchingRequirementFor(TestOutcome testOutcome, Requirement requirement) { if (testOutcome.getTestCase() != null) { return (fullPathOf(requirement).matchesOrIsADescendantOf(normalizedPath(testOutcome.getPathId()))); } else { return (fullPathOf(requirement).matchesOrIsADescendantOf(normalizedPath(testOutcome.getPath()))); } }
private Requirement getRequirement(Class candidateClass, String packageName, int level, String requirementTitle, String requirementType, String narrativeText, String cardNumber, Optional<Narrative> narrative) { if (narrative.isPresent()) { requirementTitle = narrative.get().title(); requirementType = narrative.get().type(); narrativeText = Joiner.on("\n").join(narrative.get().text()); cardNumber = narrative.get().cardNumber(); } if (StringUtils.isEmpty(requirementType)) { requirementType = getRequirementType(level, candidateClass); } return Requirement.named(humanReadableVersionOf(packageName)) .withOptionalCardNumber(cardNumber) .withOptionalDisplayName(StringUtils.isEmpty(requirementTitle) ? humanReadableVersionOf(packageName) : requirementTitle) .withType(requirementType) .withNarrative(narrativeText); }
private Collection<Requirement> getAllRequirements() { return getRequirementsByPath().values(); }
private Requirement newRequirement(Class candidateClass, String currentPath, String packageName, int level, String defaultRequirementType) { String requirementTitle = packageName; String requirementType = defaultRequirementType; String narrativeText = ""; String cardNumber = ""; Optional<Narrative> narrative = NarrativeFinder.forClass(candidateClass); return getRequirement(candidateClass, packageName, level, requirementTitle, requirementType, narrativeText, cardNumber, narrative); }
public SortedMap<String, Requirement> getRequirementsByPath() { getRequirements(); return requirementsByPath; }
private String getRequirementType(int level, Class candidateClass) { if ((candidateClass != null) && (candidateClass.getName().endsWith(".package-info"))) { return getDefaultType(level); } else { return "story"; } }