package com.codeborne.selenide.logevents;
import com.codeborne.selenide.WebDriverRunner;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import static com.codeborne.selenide.Selenide.$;
import static com.codeborne.selenide.logevents.LogEvent.EventStatus.PASS;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.*;
public class SelenideLoggerTest {
private WebDriver webdriver = mock(WebDriver.class);
@Before
public void setUp() {
WebDriverRunner.closeWebDriver();
WebDriverRunner.setWebDriver(webdriver);
}
@After
public void tearDown() {
WebDriverRunner.closeWebDriver();
}
@Test
public void convertsJavaMethodNameToHumanReadableClause() {
assertEquals("click", SelenideLogger.readableMethodName("click"));
assertEquals("set value", SelenideLogger.readableMethodName("setValue"));
assertEquals("should be", SelenideLogger.readableMethodName("shouldBe"));
assertEquals("converts java method name to human readable clause",
SelenideLogger.readableMethodName("convertsJavaMethodNameToHumanReadableClause"));
}
@Test
public void printsReadableArgumentsValues() {
assertEquals("", SelenideLogger.readableArguments(null));
assertEquals("111", SelenideLogger.readableArguments(111));
assertEquals("[1, 2, 3]", SelenideLogger.readableArguments(1, 2, 3));
assertEquals("a", SelenideLogger.readableArguments(new String[] {"a"}));
assertEquals("[a, bb]", SelenideLogger.readableArguments(new String[] {"a", "bb"}));
assertEquals("null", SelenideLogger.readableArguments(new String[] {null}));
assertEquals("[null, a, null]", SelenideLogger.readableArguments(new String[] {null, "a", null}));
}
@Test
public void canAddManyListenersPerThread() {
LogEventListener listener1 = mock(LogEventListener.class);
LogEventListener listener2 = mock(LogEventListener.class);
LogEventListener listener3 = mock(LogEventListener.class);
SelenideLogger.addListener("simpleReport", listener1);
SelenideLogger.addListener("softAsserts", listener2);
SelenideLogger.addListener("userProvided", listener3);
WebElement webElement = mock(WebElement.class);
when(webdriver.findElement(By.cssSelector("div"))).thenReturn(webElement);
when(webElement.isDisplayed()).thenReturn(true);
$("div").click();
verifyEvent(listener1);
verifyEvent(listener2);
verifyEvent(listener3);
verifyNoMoreInteractions(listener1, listener2, listener3);
reset(listener1, listener2, listener3);
SelenideLogger.removeListener("simpleReport");
SelenideLogger.removeListener("softAsserts");
$("div").click();
verifyEvent(listener3);
verifyNoMoreInteractions(listener1, listener2, listener3);
}
private void verifyEvent(LogEventListener listener1) {
ArgumentCaptor<LogEvent> event = ArgumentCaptor.forClass(LogEvent.class);
verify(listener1).onEvent(event.capture());
LogEvent value = event.getValue();
assertThat(value.getElement(), equalTo("div"));
assertThat(value.getSubject(), equalTo("click()"));
assertThat(value.getStatus(), equalTo(PASS));
}
}