package ru.yandex.qatools.allure.aspects;
import org.junit.Test;
import ru.yandex.qatools.allure.config.AllureConfig;
import java.text.MessageFormat;
import java.util.Arrays;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.MatcherAssert.assertThat;
import static ru.yandex.qatools.allure.aspects.AllureAspectUtils.cutEnd;
import static ru.yandex.qatools.allure.aspects.AllureAspectUtils.getName;
import static ru.yandex.qatools.allure.aspects.AllureAspectUtils.getTitle;
/**
* User: hrundelb
* Date: 28.02.14
* Time: 16:51
*/
public class AllureAspectUtilsTest {
private final static String NAME_PATTERN_WITH_TWO_ARGS = "{method} (first arg:{0}, second arg:{1})";
private final static String NAME_PATTERN_WITH_ONE_ARG = "{method} (arg:{0})";
private final static String NAME_PATTERN_WITH_THIS = "{method} this:{this} ()";
private final static String METHOD_NAME = "getSomethingNew";
private final static String TITLE_STRING_WITH_TWO_ARGS = "{0} (first arg:{1}, second arg:{2})";
private final static String TITLE_STRING_WITH_ONE_ARG = "{0} (arg:{1})";
private final static String TITLE_STRING_WITH_THIS = "{0} this:{1} ()";
public static final String TOO_LONG_NAME = "this name pattern is too long, over 150 symbols! Guys, what are" +
" you thinking for when you made so long title??? Could you please made it more carefully...?";
@Test
public void getTitleWithStringArray() {
String[] firstArg = {"one string", "two string", "three string"};
int secondArg = 2454575;
String title = getTitle(NAME_PATTERN_WITH_TWO_ARGS, METHOD_NAME, null, new Object[]{firstArg, secondArg});
Object[] args = {METHOD_NAME, Arrays.toString(firstArg), secondArg};
assertThat("Method with String[] and int arguments is processed incorrectly", title,
equalTo(MessageFormat.format(TITLE_STRING_WITH_TWO_ARGS, args)));
}
@Test
public void getTitleWithLongArray() {
long[] firstArg = {20000L, 464564L, 8798765465465465132L};
Integer secondArg = 1546825;
String title = getTitle(NAME_PATTERN_WITH_TWO_ARGS, METHOD_NAME, null, new Object[]{firstArg, secondArg});
Object[] args = {METHOD_NAME, Arrays.toString(firstArg), secondArg};
assertThat("Method with long[] and Integer arguments is processed incorrectly", title,
equalTo(MessageFormat.format(TITLE_STRING_WITH_TWO_ARGS, args)));
}
@Test
public void getTitleWithIntArray() {
int[] firstArg = {1, 2, 3};
String title = getTitle(NAME_PATTERN_WITH_TWO_ARGS, METHOD_NAME, null, new Object[]{firstArg, true});
Object[] args = {METHOD_NAME, Arrays.toString(firstArg), true};
assertThat("Method with int[] and String arguments is processed incorrectly", title,
equalTo(MessageFormat.format(TITLE_STRING_WITH_TWO_ARGS, args)));
}
@Test
public void getTitleWithShortArray() {
short[] firstArg = {32767, 0, -32768};
String secondArg = "aaabbbbccdddd";
String title = getTitle(NAME_PATTERN_WITH_TWO_ARGS, METHOD_NAME, null, new Object[]{firstArg, secondArg});
Object[] args = {METHOD_NAME, Arrays.toString(firstArg), secondArg};
assertThat("Method with short[] and String arguments is processed incorrectly", title,
equalTo(MessageFormat.format(TITLE_STRING_WITH_TWO_ARGS, args)));
}
@Test
public void getTitleWithCharArray() {
char[] firstArg = {'a', 'b', 'z'};
double secondArg = 25.546548946;
String title = getTitle(NAME_PATTERN_WITH_TWO_ARGS, METHOD_NAME, null, new Object[]{firstArg, secondArg});
Object[] args = {METHOD_NAME, Arrays.toString(firstArg), secondArg};
assertThat("Method with char[] and double arguments is processed incorrectly", title,
equalTo(MessageFormat.format(TITLE_STRING_WITH_TWO_ARGS, args)));
}
@Test
public void getTitleWithByteArray() {
byte[] firstArg = {1, 127, -128};
char secondArg = 'x';
String title = getTitle(NAME_PATTERN_WITH_TWO_ARGS, METHOD_NAME, null, new Object[]{firstArg, secondArg});
Object[] args = {METHOD_NAME, Arrays.toString(firstArg), secondArg};
assertThat("Method with byte[] and char arguments is processed incorrectly", title,
equalTo(MessageFormat.format(TITLE_STRING_WITH_TWO_ARGS, args)));
}
@Test
public void getTitleWithBooleanArray() {
boolean[] firstArg = {true, false, false};
float secondArg = 0.00005F;
String title = getTitle(NAME_PATTERN_WITH_TWO_ARGS, METHOD_NAME, null, new Object[]{firstArg, secondArg});
Object[] args = {METHOD_NAME, Arrays.toString(firstArg), secondArg};
assertThat("Method with boolean[] and float arguments is processed incorrectly", title,
equalTo(MessageFormat.format(TITLE_STRING_WITH_TWO_ARGS, args)));
}
@Test
public void getTitleWithFloatArray() {
float[] firstArg = {0.1F, 1.002F, 6.45F};
byte secondArg = 127;
String title = getTitle(NAME_PATTERN_WITH_TWO_ARGS, METHOD_NAME, null, new Object[]{firstArg, secondArg});
Object[] args = {METHOD_NAME, Arrays.toString(firstArg), secondArg};
assertThat("Method with float[] and byte arguments is processed incorrectly", title,
equalTo(MessageFormat.format(TITLE_STRING_WITH_TWO_ARGS, args)));
}
@Test
public void getTitleWithDoubleArray() {
double[] firstArg = {4.0000006, 0.4, 6.0};
short secondArg = -5462;
String title = getTitle(NAME_PATTERN_WITH_TWO_ARGS, METHOD_NAME, null, new Object[]{firstArg, secondArg});
Object[] args = {METHOD_NAME, Arrays.toString(firstArg), secondArg};
assertThat("Method with double[] and short arguments is processed incorrectly", title,
equalTo(MessageFormat.format(TITLE_STRING_WITH_TWO_ARGS, args)));
}
@Test
public void getTitleWithoutArray() {
double firstArg = 0.00000001;
String secondArg = "second arg";
String title = getTitle(NAME_PATTERN_WITH_TWO_ARGS, METHOD_NAME, null, new Object[]{firstArg, secondArg});
Object[] args = {METHOD_NAME, firstArg, secondArg};
assertThat("Method with double and String arguments is processed incorrectly", title,
equalTo(MessageFormat.format("{0} (first arg:{1}, second arg:{2})", args)));
}
@Test
public void getTitleWithEmptyArray() {
String[] firstArg = new String[0];
long secondArg = 1000000000000L;
String title = getTitle(NAME_PATTERN_WITH_TWO_ARGS, METHOD_NAME, null, new Object[]{firstArg, secondArg});
Object[] args = {METHOD_NAME, Arrays.toString(firstArg), secondArg};
assertThat("Method with empty String[] and long arguments is processed incorrectly", title,
equalTo(MessageFormat.format(TITLE_STRING_WITH_TWO_ARGS, args)));
}
@Test
public void getTitleWithoutParams() {
String title = getTitle("{method}", METHOD_NAME, null, null);
Object[] args = {METHOD_NAME};
assertThat("Method without arguments is processed incorrectly", title,
equalTo(MessageFormat.format("{0}", args)));
}
@Test
public void getTitleWithTooLongTitle() {
String title = getTitle(TOO_LONG_NAME, METHOD_NAME, null, null);
assertThat("Wrong title shortcut", title,
equalTo(cutEnd(TOO_LONG_NAME, AllureConfig.newInstance().getMaxTitleLength())));
}
@Test
public void getTitleWithNullParam() {
String title = getTitle(NAME_PATTERN_WITH_ONE_ARG, METHOD_NAME, null, new Object[]{null});
Object[] args = {METHOD_NAME, null};
assertThat("Method with null String argument is processed incorrectly", title,
equalTo(MessageFormat.format(TITLE_STRING_WITH_ONE_ARG, args)));
}
@Test
public void getTitleWithNullArgInArrayParam() {
String[] firstArg = new String[]{null, "something"};
String title = getTitle(NAME_PATTERN_WITH_ONE_ARG, METHOD_NAME, null, new Object[]{firstArg});
Object[] args = {METHOD_NAME, Arrays.toString(firstArg)};
assertThat("Method with String[] argument that has nulls is processed incorrectly", title,
equalTo(MessageFormat.format(TITLE_STRING_WITH_ONE_ARG, args)));
}
@Test
public void getTitleWithArrayOfArrays() {
Object[] firstArg = new Object[]{new String[]{"a", "b"}, "something", null};
String title = getTitle(NAME_PATTERN_WITH_ONE_ARG, METHOD_NAME, null, new Object[]{firstArg});
Object[] args = {METHOD_NAME, Arrays.toString(firstArg)};
assertThat("Method with array of arrays argument that has nulls is processed incorrectly", title,
equalTo(MessageFormat.format(TITLE_STRING_WITH_ONE_ARG, args)));
}
@Test
public void getTitleWithThis() {
String thisObject = "something";
String title = getTitle(NAME_PATTERN_WITH_THIS, METHOD_NAME, thisObject, new Object[]{});
Object[] args = {METHOD_NAME, thisObject};
assertThat("Method with {this} is processed incorrectly", title,
equalTo(MessageFormat.format(TITLE_STRING_WITH_THIS, args)));
}
@Test
public void getNameLongMethodNameTest() throws Exception {
String name = getName(TOO_LONG_NAME, null);
assertThat("Invalid method name short cut", name,
equalTo("... 150 symbols! Guys, what are you thinking for when you made so long title??? Could" +
" you please made it more carefully...?"));
}
@Test
public void getNameLongMethodNameAndParametersTest() throws Exception {
String name = getName(METHOD_NAME, new Object[]{TOO_LONG_NAME});
assertThat("Invalid method name short cut", name,
equalTo("getSomethingNew[this name pattern is too long, over 150 symbols! Guys, what are you " +
"thinking for when you made so long t...]"));
}
}