1fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffinpackage junitparams;
2fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin
3fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffinimport org.junit.Test;
4fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffinimport org.junit.runner.RunWith;
5fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin
6fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffinimport junitparams.internal.Utils;
7fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin
8fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffinimport static junitparams.JUnitParamsRunner.*;
9fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffinimport static junitparams.internal.Utils.*;
10fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffinimport static org.assertj.core.api.Assertions.assertThat;
11fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffinimport static org.junit.Assert.fail;
12fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin
13fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin
14fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin@RunWith(JUnitParamsRunner.class)
15fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffinpublic class ObjectStringificationTest {
16fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin
17fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin    @Test
18fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin    public void stringifyString() throws Exception {
19fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin        assertThat(stringify("exampleName", 0)).isEqualTo("[0] exampleName");
20fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin    }
21fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin
22fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin    @Test
23fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin    public void stringifyClassWithToStringAndOneParam() throws Exception {
24fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin        ClassWithToString obj = new ClassWithToString("exampleName");
25fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin
26fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin        assertThat(stringify(obj, 0)).isEqualTo("[0] exampleName");
27fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin    }
28fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin
29fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin    @Test
30fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin    public void stringifyClassWithToStringAndManyParams() throws Exception {
31fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin        ClassWithToString obj1 = new ClassWithToString("one");
32fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin        ClassWithToString obj2 = new ClassWithToString("two");
33fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin
34fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin        assertThat(stringify(new Object[]{obj1, obj2}, 0)).isEqualTo("[0] one, two");
35fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin    }
36fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin
37fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin    @Test
38fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin    public void stringifyClassWithToStringInSuperclass() throws Exception {
39fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin        ClassWithToString obj = new ClassWithToString("exampleName");
40fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin
41fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin        assertThat(Utils.stringify(obj, 0)).isEqualTo("[0] exampleName");
42fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin    }
43fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin
44fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin    private class ClassWithToString {
45fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin        private String description;
46fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin
47fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin        public ClassWithToString(String description) {
48fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin            this.description = description;
49fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin        }
50fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin
51fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin        @Override
52fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin        public String toString() {
53fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin            return description;
54fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin        }
55fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin    }
56fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin
57fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin    @Test
58fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin    public void stringifyArray() {
59fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin        Double[] nullArray = null;
60fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin        int[] primitiveArray = {1, 2, 3};
61fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin        String[] array = {"one", "two", null};
62fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin        Object[] mixed = $(
63fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin                $(nullArray, "stringOne", primitiveArray, "stringTwo", array)
64fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin        );
65fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin
66fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin        assertThat(Utils.stringify(mixed)).isEqualTo("null, stringOne, [1, 2, 3], stringTwo, [one, two, null]");
67fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin    }
68fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin
69fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin    @Test
70fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin    @Parameters
71fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin    public void shouldCreateParameterObjectsOnce(Object object) {
72fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin        assertThat(object).isInstanceOf(A.class);
73fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin    }
74fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin
75fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin    public Object[] parametersForShouldCreateParameterObjectsOnce() {
76fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin        return new Object[]{new A()};
77fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin    }
78fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin
79fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin    static class A {
80fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin        static int instances = 0;
81fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin        String test = "test";
82fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin
83fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin        A() {
84fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin            if (++instances > 1) {
85fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin                fail();
86fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin            }
87fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin        }
88fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin
89fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin        @Override
90fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin        public String toString() {
91fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin            return "[0] exampleName" + super.toString();
92fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin        }
93fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin    }
94fd1f9491413fcdbfae3cbd43651db31fdabce41aPaul Duffin}
95