/* * Copyright 2016 Nokia Solutions and Networks * Licensed under the Apache License, Version 2.0, * see license.txt file for details. */ package org.rf.ide.core.testdata.mapping.collect; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.inOrder; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; import static org.mockito.Mockito.when; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Map; import org.junit.Test; import org.mockito.InOrder; import org.rf.ide.core.testdata.model.RobotFileOutput; import org.rf.ide.core.testdata.text.read.recognizer.RobotToken; import org.rf.ide.core.testdata.text.read.recognizer.RobotTokenType; import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.ListMultimap; /** * @author wypych */ public class RobotTokensCollectorTest { @Test public void test_extractRobotTokens_logicCheck() { // prepare final RobotFileOutput tokensHolder = mock(RobotFileOutput.class); final List<ITableTokensCollector> collectors = new ArrayList<>(); final ITableTokensCollector collectorOne = mock(ITableTokensCollector.class); final List<RobotToken> colOneToks = new ArrayList<>(0); when(collectorOne.collect(tokensHolder)).thenReturn(colOneToks); final ITableTokensCollector collectorTwo = mock(ITableTokensCollector.class); final List<RobotToken> colTwoToks = new ArrayList<>(0); when(collectorTwo.collect(tokensHolder)).thenReturn(colTwoToks); collectors.add(collectorOne); collectors.add(collectorTwo); final RobotTokensCollector genCollector = spy(new RobotTokensCollector(collectors)); // execute final ListMultimap<RobotTokenType, RobotToken> toksExtracted = genCollector.extractRobotTokens(tokensHolder); // verify assertThat(toksExtracted.asMap()).isEmpty(); assertThat(toksExtracted).isInstanceOf(ArrayListMultimap.class); final InOrder order = inOrder(genCollector, collectorOne, collectorTwo); order.verify(collectorOne, times(1)).collect(tokensHolder); order.verify(genCollector, times(1)).update(colOneToks, toksExtracted); order.verify(collectorTwo, times(1)).collect(tokensHolder); order.verify(genCollector, times(1)).update(colTwoToks, toksExtracted); order.verifyNoMoreInteractions(); } @Test public void test_update_forTwoTypesTokensAndTwoOfThem() { // prepare final RobotTokenType typeOne = RobotTokenType.START_HASH_COMMENT; final RobotTokenType typeTwo = RobotTokenType.COMMENT_CONTINUE; final List<RobotToken> listTypeOne = createTokensOf(typeOne, 2); final List<RobotToken> listTypeTwo = createTokensOf(typeTwo, 2); @SuppressWarnings("unchecked") final List<RobotToken> listWithAllMixed = mixTypes(listTypeOne, listTypeTwo); final RobotTokensCollector genCollector = new RobotTokensCollector(); final ListMultimap<RobotTokenType, RobotToken> tokensPerType = ArrayListMultimap.create(); // execute genCollector.update(listWithAllMixed, tokensPerType); // verify final Map<RobotTokenType, Collection<RobotToken>> asMap = tokensPerType.asMap(); assertThat(asMap).containsOnlyKeys(typeOne, typeTwo); assertThat(asMap.get(typeOne)).containsExactlyElementsOf(listTypeOne); assertThat(asMap.get(typeTwo)).containsExactlyElementsOf(listTypeTwo); } private List<RobotToken> mixTypes(@SuppressWarnings("unchecked") final List<RobotToken>... typed) { final List<RobotToken> joined = new ArrayList<>(0); int maxSize = 0; for (final List<RobotToken> p : typed) { maxSize = Math.max(maxSize, p.size()); } for (int i = 0; i < maxSize; i++) { for (final List<RobotToken> t : typed) { if (t.size() > i) { joined.add(t.get(i)); } } } return joined; } private List<RobotToken> createTokensOf(final RobotTokenType type, final int times) { final List<RobotToken> product = new ArrayList<>(times); for (int i = 0; i < times; i++) { final RobotToken tok = new RobotToken(); tok.setType(type); product.add(tok); } return product; } }