package com.sleekbyte.tailor.output; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import com.sleekbyte.tailor.common.Location; import com.sleekbyte.tailor.common.Rules; import com.sleekbyte.tailor.common.Severity; import com.sleekbyte.tailor.format.Formatter; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.runners.MockitoJUnitRunner; import java.io.File; import java.io.IOException; import java.util.List; /** * Tests for {@link Printer}. */ @RunWith(MockitoJUnitRunner.class) public class PrinterTest { private static final String WARNING_MSG = "this is a warning"; private static final String ERROR_MSG = "this is an error"; private static final int LINE_NUMBER = 23; private static final int COLUMN_NUMBER = 13; private File inputFile = new File("abc.swift"); private Formatter formatter = mock(Formatter.class); private Printer printer = new Printer(inputFile, Severity.ERROR, formatter); private Printer warnPrinter = new Printer(inputFile, Severity.WARNING, formatter); @Test public void testFormatterDisplayMessage() throws IOException { printer.error(Rules.LOWER_CAMEL_CASE, ERROR_MSG, new Location(LINE_NUMBER, COLUMN_NUMBER)); List<ViolationMessage> violationsMessage = printer.getViolationMessages(); printer.printAllMessages(); verify(formatter).displayViolationMessages(violationsMessage, inputFile); } @Test public void testFormatterParseErrorMessage() throws IOException { printer.setShouldPrintParseErrorMessage(true); printer.printAllMessages(); verify(formatter).displayParseErrorMessage(inputFile); } @Test public void testError() throws IOException { printer.error(Rules.LOWER_CAMEL_CASE, ERROR_MSG, new Location(LINE_NUMBER, COLUMN_NUMBER)); ViolationMessage message = printer.getViolationMessages().get(0); assertEquals(message.getSeverity(), Severity.ERROR); validateViolationMessage(message, Rules.LOWER_CAMEL_CASE, ERROR_MSG, LINE_NUMBER, COLUMN_NUMBER); printer.printAllMessages(); } @Test public void testWarn() throws IOException { printer.warn(Rules.LOWER_CAMEL_CASE, WARNING_MSG, new Location(LINE_NUMBER, COLUMN_NUMBER)); ViolationMessage message = printer.getViolationMessages().get(0); assertEquals(message.getSeverity(), Severity.WARNING); validateViolationMessage(message, Rules.LOWER_CAMEL_CASE, WARNING_MSG, LINE_NUMBER, COLUMN_NUMBER); printer.printAllMessages(); } @Test public void testWarnWithLocationSuccess() throws IOException { printer.warn(Rules.LOWER_CAMEL_CASE, WARNING_MSG, new Location(LINE_NUMBER, COLUMN_NUMBER)); ViolationMessage message = printer.getViolationMessages().get(0); assertEquals(Severity.WARNING, message.getSeverity()); printer.printAllMessages(); } @Test public void testErrorWithLocationSuccess() throws IOException { printer.error(Rules.LOWER_CAMEL_CASE, ERROR_MSG, new Location(LINE_NUMBER, COLUMN_NUMBER)); ViolationMessage message = printer.getViolationMessages().get(0); assertEquals(Severity.ERROR, message.getSeverity()); printer.printAllMessages(); } @Test public void testErrorWithMaxSeverityWarn() throws IOException { warnPrinter.error(Rules.LOWER_CAMEL_CASE, ERROR_MSG, new Location(LINE_NUMBER, COLUMN_NUMBER)); ViolationMessage message = warnPrinter.getViolationMessages().get(0); assertEquals(Severity.WARNING, message.getSeverity()); warnPrinter.printAllMessages(); } @Test public void testWarnWithMaxSeverityWarn() throws IOException { warnPrinter.warn(Rules.LOWER_CAMEL_CASE, WARNING_MSG, new Location(LINE_NUMBER, COLUMN_NUMBER)); ViolationMessage message = warnPrinter.getViolationMessages().get(0); assertEquals(Severity.WARNING, message.getSeverity()); warnPrinter.printAllMessages(); } private void validateViolationMessage(ViolationMessage message, Rules rule, String msg, int line, int column) { assertEquals(rule, message.getRule()); assertEquals(msg, message.getMessage()); assertEquals(line, message.getLineNumber()); assertEquals(column, message.getColumnNumber()); } }