/* * Copyright 2017 Nokia Solutions and Networks * Licensed under the Apache License, Version 2.0, * see license.txt file for details. */ package org.rf.ide.core.dryrun; import static org.mockito.Mockito.inOrder; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.verifyZeroInteractions; import java.io.File; import java.util.Arrays; import java.util.function.Consumer; import org.junit.Before; import org.junit.Test; import org.mockito.InOrder; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.rf.ide.core.execution.LogLevel; public class RobotDryRunEventListenerTest { @Mock private Consumer<String> startSuiteHandler; @Mock private RobotDryRunLibraryImportCollector libImportCollector; @Mock private RobotDryRunKeywordSourceCollector kwSourceCollector; @Before public void setUp() { MockitoAnnotations.initMocks(this); } @Test public void suiteStartingEventIsHandled() throws Exception { final RobotDryRunEventListener listener = new RobotDryRunEventListener(libImportCollector, kwSourceCollector, startSuiteHandler); listener.handleSuiteStarted("abc", new File("path")); verify(startSuiteHandler).accept("abc"); verifyNoMoreInteractions(startSuiteHandler); verifyZeroInteractions(libImportCollector); verifyZeroInteractions(kwSourceCollector); } @Test public void libraryImportIsHandled() throws Exception { final RobotDryRunEventListener listener = new RobotDryRunEventListener(libImportCollector, kwSourceCollector, startSuiteHandler); listener.handleLibraryImport("String", "suite.robot", "String.py", Arrays.asList("a1", "a2")); verify(libImportCollector).collectFromLibraryImportEvent("String", "suite.robot", "String.py", Arrays.asList("a1", "a2")); verifyNoMoreInteractions(libImportCollector); verifyZeroInteractions(startSuiteHandler); verifyZeroInteractions(kwSourceCollector); } @Test public void failMessageEventIsHandled() throws Exception { final RobotDryRunEventListener listener = new RobotDryRunEventListener(libImportCollector, kwSourceCollector, startSuiteHandler); listener.handleMessage("fail_message_123", LogLevel.FAIL); verify(libImportCollector).collectFromFailMessageEvent("fail_message_123"); verifyNoMoreInteractions(libImportCollector); verifyZeroInteractions(startSuiteHandler); verifyZeroInteractions(kwSourceCollector); } @Test public void errorMessageEventIsHandled() throws Exception { final RobotDryRunEventListener listener = new RobotDryRunEventListener(libImportCollector, kwSourceCollector, startSuiteHandler); listener.handleMessage("error_message_456", LogLevel.ERROR); verify(libImportCollector).collectFromErrorMessageEvent("error_message_456"); verifyNoMoreInteractions(libImportCollector); verifyZeroInteractions(startSuiteHandler); verifyZeroInteractions(kwSourceCollector); } @Test public void keywordMessageEventIsHandled() throws Exception { final RobotDryRunEventListener listener = new RobotDryRunEventListener(libImportCollector, kwSourceCollector, startSuiteHandler); listener.handleMessage("kw_message_789", LogLevel.NONE); verify(kwSourceCollector).collectFromMessageEvent("kw_message_789"); verifyNoMoreInteractions(kwSourceCollector); verifyZeroInteractions(startSuiteHandler); verifyZeroInteractions(libImportCollector); } @Test public void unsupportedLevelMessageEventsAreIgnored() throws Exception { final RobotDryRunEventListener listener = new RobotDryRunEventListener(libImportCollector, kwSourceCollector, startSuiteHandler); listener.handleMessage("msg", LogLevel.TRACE); listener.handleMessage("msg", LogLevel.DEBUG); listener.handleMessage("msg", LogLevel.INFO); listener.handleMessage("msg", LogLevel.WARN); verifyZeroInteractions(startSuiteHandler); verifyZeroInteractions(libImportCollector); verifyZeroInteractions(kwSourceCollector); } @Test public void multipleEventsAreHandledInRightOrder() throws Exception { final RobotDryRunEventListener listener = new RobotDryRunEventListener(libImportCollector, kwSourceCollector, startSuiteHandler); listener.handleLibraryImport("lib2", "suite1.robot", "lib1.py", Arrays.asList("a", "b")); listener.handleMessage("err_1", LogLevel.ERROR); listener.handleMessage("fail_2", LogLevel.FAIL); listener.handleMessage("fail_1", LogLevel.FAIL); listener.handleMessage("err_3", LogLevel.ERROR); listener.handleMessage("kw_2", LogLevel.NONE); listener.handleMessage("err_2", LogLevel.ERROR); listener.handleLibraryImport("lib3", "suite1.robot", "lib6.py", Arrays.asList("c", "d")); listener.handleLibraryImport("lib1", "other.robot", "lib6.py", Arrays.asList("x")); listener.handleMessage("kw_1", LogLevel.NONE); final InOrder inOrder = inOrder(libImportCollector, kwSourceCollector); inOrder.verify(libImportCollector).collectFromLibraryImportEvent("lib2", "suite1.robot", "lib1.py", Arrays.asList("a", "b")); inOrder.verify(libImportCollector).collectFromErrorMessageEvent("err_1"); inOrder.verify(libImportCollector).collectFromFailMessageEvent("fail_2"); inOrder.verify(libImportCollector).collectFromFailMessageEvent("fail_1"); inOrder.verify(libImportCollector).collectFromErrorMessageEvent("err_3"); inOrder.verify(kwSourceCollector).collectFromMessageEvent("kw_2"); inOrder.verify(libImportCollector).collectFromErrorMessageEvent("err_2"); inOrder.verify(libImportCollector).collectFromLibraryImportEvent("lib3", "suite1.robot", "lib6.py", Arrays.asList("c", "d")); inOrder.verify(libImportCollector).collectFromLibraryImportEvent("lib1", "other.robot", "lib6.py", Arrays.asList("x")); inOrder.verify(kwSourceCollector).collectFromMessageEvent("kw_1"); verifyNoMoreInteractions(libImportCollector); verifyNoMoreInteractions(kwSourceCollector); verifyZeroInteractions(startSuiteHandler); } }