package ru.yandex.qatools.allure.data.io; import com.google.inject.Inject; import ru.yandex.qatools.allure.model.Description; import ru.yandex.qatools.allure.model.Label; import ru.yandex.qatools.allure.model.TestCaseResult; import ru.yandex.qatools.allure.model.TestSuiteResult; import java.util.ArrayList; import java.util.HashSet; import java.util.Iterator; import java.util.Set; import static ru.yandex.qatools.allure.data.utils.DescriptionUtils.mergeDescriptions; /** * @author Dmitry Baev charlie@yandex-team.ru * Date: 09.02.15 */ public class TestCaseReader implements Reader<TestCaseResult> { public static final String SUITE_NAME = "suite-name"; public static final String SUITE_TITLE = "suite-title"; private Iterator<TestSuiteResult> testSuites; private Iterator<TestCaseResult> testCases; private TestSuiteResult currentSuite; @Inject public TestCaseReader(Reader<TestSuiteResult> suiteResultsReader) { testSuites = suiteResultsReader.iterator(); } @Override public Iterator<TestCaseResult> iterator() { return new TestCaseResultIterator(); } private class TestCaseResultIterator implements Iterator<TestCaseResult> { private boolean nextSuite() { if ((testCases == null || !testCases.hasNext()) && testSuites.hasNext()) { currentSuite = testSuites.next(); testCases = currentSuite.getTestCases().iterator(); return true; } return false; } @Override public boolean hasNext() { return testCases != null && testCases.hasNext() || nextSuite() && hasNext(); } @Override public TestCaseResult next() { if (!hasNext()) { return null; } TestCaseResult result = testCases.next(); Set<Label> labels = new HashSet<>(currentSuite.getLabels()); labels.add(new Label().withName(SUITE_NAME).withValue(currentSuite.getName())); labels.add(new Label().withName(SUITE_TITLE).withValue(currentSuite.getTitle())); labels.addAll(result.getLabels()); result.setLabels(new ArrayList<>(labels)); Description description = mergeDescriptions(currentSuite, result); result.setDescription(description); return result; } @Override public void remove() { throw new UnsupportedOperationException(); } } }