package com.sleekbyte.tailor.functional;
import com.sleekbyte.tailor.common.Messages;
import com.sleekbyte.tailor.common.Rules;
import com.sleekbyte.tailor.common.Severity;
import com.sleekbyte.tailor.output.Printer;
import org.junit.runner.RunWith;
import org.mockito.runners.MockitoJUnitRunner;
/**
* Functional tests for max name length rule.
*/
@RunWith(MockitoJUnitRunner.class)
public class MaxNameLengthTest extends RuleTest {
@Override
protected String[] getCommandArgs() {
return new String[] {
"--max-line-length", "40",
"--max-name-length", "5",
"--only=max-line-length,max-name-length"
};
}
@Override
protected void addAllExpectedMsgs() {
addExpectedNameMsg(1, 7, Messages.CLASS + Messages.NAME, 23, 5);
addExpectedNameMsg(4, 5, Messages.CONSTANT + Messages.NAME, 22, 5);
addExpectedLineMsg(4, 41, Messages.LINE, 75, 40);
addExpectedNameMsg(4, 42, Messages.ELEMENT + Messages.NAME, 19, 5);
addExpectedNameMsg(6, 6, Messages.ENUM + Messages.NAME, 21, 5);
addExpectedNameMsg(7, 13, Messages.ENUM_CASE + Messages.NAME, 24, 5);
addExpectedLineMsg(7, 41, Messages.LINE, 46, 40);
addExpectedNameMsg(10, 6, Messages.FUNCTION + Messages.NAME, 23, 5);
addExpectedNameMsg(10, 30, Messages.CONSTANT + Messages.NAME, 25, 5); // external param
addExpectedLineMsg(10, 41, Messages.LINE, 94, 40);
addExpectedNameMsg(10, 56, Messages.CONSTANT + Messages.NAME, 23, 5); // local param
addExpectedNameMsg(15, 1, Messages.LABEL + Messages.NAME, 13, 5);
addExpectedNameMsg(24, 10, Messages.PROTOCOL + Messages.NAME, 19, 5);
addExpectedNameMsg(27, 8, Messages.STRUCT + Messages.NAME, 21, 5);
addExpectedNameMsg(32, 13, Messages.SETTER + Messages.NAME, 16, 5);
addExpectedNameMsg(38, 11, Messages.TYPEALIAS + Messages.NAME, 19, 5);
addExpectedNameMsg(38, 33, Messages.TYPE + Messages.NAME, 6, 5);
addExpectedNameMsg(41, 9, Messages.VARIABLE + Messages.NAME, 19, 5);
addExpectedNameMsg(48, 6, Messages.FUNCTION + Messages.NAME, 24, 5);
addExpectedNameMsg(48, 31, Messages.CONSTANT + Messages.NAME, 25, 5); // external param
addExpectedLineMsg(48, 41, Messages.LINE, 95, 40);
addExpectedNameMsg(48, 57, Messages.CONSTANT + Messages.NAME, 23, 5); // local param
addExpectedNameMsg(52, 5, Messages.CONSTANT + Messages.NAME, 23, 5);
addExpectedNameMsg(53, 5, Messages.VARIABLE + Messages.NAME, 23, 5);
addExpectedNameMsg(55, 6, Messages.ENUM + Messages.NAME, 8, 5);
addExpectedNameMsg(56, 10, Messages.ENUM_CASE + Messages.NAME, 20, 5);
addExpectedNameMsg(57, 18, Messages.TYPE + Messages.NAME, 8, 5);
}
private void addExpectedNameMsg(int line, int column, String msg, int length, int limit) {
String lengthVersusLimit = " (" + length + "/" + limit + ")";
msg += Messages.EXCEEDS_CHARACTER_LIMIT + lengthVersusLimit;
expectedMessages.add(Printer.genOutputStringForTest(Rules.MAX_NAME_LENGTH, inputFile.getName(), line, column,
Severity.WARNING, msg));
}
private void addExpectedLineMsg(int line, int column, String msg, int length, int limit) {
String lengthVersusLimit = " (" + length + "/" + limit + ")";
msg += Messages.EXCEEDS_CHARACTER_LIMIT + lengthVersusLimit;
expectedMessages.add(Printer.genOutputStringForTest(Rules.MAX_LINE_LENGTH, inputFile.getName(), line, column,
Severity.WARNING, msg));
}
}