|
1 |
| package com.agical.rmock.core.match.reference; |
|
2 |
| |
|
3 |
| import java.io.IOException; |
|
4 |
| import java.lang.reflect.Array; |
|
5 |
| |
|
6 |
| import com.agical.rmock.core.describe.ExpressionDescriber; |
|
7 |
| import com.agical.rmock.core.match.Reference; |
|
8 |
| |
|
9 |
| public class ArrayRefernce implements Reference { |
|
10 |
| private final Object object;private final ReferenceFactory referenceFactory = new ReferenceFactory(); |
|
11 |
| |
|
12 |
80
| public ArrayRefernce(Object object) {
|
|
13 |
80
| this.object = object;
|
|
14 |
| |
|
15 |
| } |
|
16 |
| |
|
17 |
8
| public Object getObject() {
|
|
18 |
8
| return object;
|
|
19 |
| } |
|
20 |
| |
|
21 |
4
| public void describeWith(ExpressionDescriber expressionDescriber) throws IOException {
|
|
22 |
4
| if ( object == null) {
|
|
23 |
1
| expressionDescriber.describeReference("<null>");
|
|
24 |
| } |
|
25 |
| else { |
|
26 |
| |
|
27 |
3
| Class componentType = object.getClass().getComponentType();
|
|
28 |
3
| int length = Array.getLength(object);
|
|
29 |
3
| expressionDescriber.beginArray(componentType, length);
|
|
30 |
3
| for (int i = 0; i < length; i++) {
|
|
31 |
7
| expressionDescriber.describeReference("<"+Array.get(object, i)+">");
|
|
32 |
| } |
|
33 |
3
| expressionDescriber.endArray();
|
|
34 |
| } |
|
35 |
| } |
|
36 |
| |
|
37 |
32
| public boolean objectEquals(Object object) {
|
|
38 |
32
| if (object == null || this.object == null) {
|
|
39 |
2
| return this.object == object;
|
|
40 |
| } |
|
41 |
30
| if (!object.getClass().isArray()) {
|
|
42 |
1
| return false;
|
|
43 |
| } |
|
44 |
29
| if (Array.getLength(this.object) != Array.getLength(object)) {
|
|
45 |
1
| return false;
|
|
46 |
| } |
|
47 |
28
| Reference[] referenceArray = getReferenceArray();
|
|
48 |
28
| for (int i = 0; i < referenceArray.length; i++) {
|
|
49 |
75
| Reference reference = referenceArray[i];
|
|
50 |
75
| if (!referenceArray[i].objectEquals(Array.get(object, i))) {
|
|
51 |
1
| return false;
|
|
52 |
| } |
|
53 |
| } |
|
54 |
27
| return true;
|
|
55 |
| } |
|
56 |
| |
|
57 |
31
| private Reference[] getReferenceArray() {
|
|
58 |
31
| int length = Array.getLength(this.object);
|
|
59 |
31
| Reference[] references = new Reference[length];
|
|
60 |
31
| for (int i = 0; i < references.length; i++) {
|
|
61 |
81
| references[i]=referenceFactory.create(Array.get(this.object, i));
|
|
62 |
| } |
|
63 |
31
| return references;
|
|
64 |
| } |
|
65 |
| |
|
66 |
3
| public int objectCompareTo(Object object) {
|
|
67 |
3
| Reference[] referenceArray = getReferenceArray();
|
|
68 |
3
| for (int i = 0; i < referenceArray.length; i++) {
|
|
69 |
4
| Reference reference = referenceArray[i];
|
|
70 |
4
| int value;
|
|
71 |
?
| if ((value = referenceArray[i].objectCompareTo(Array.get(object, i))) != 0) {
|
|
72 |
2
| return value;
|
|
73 |
| } |
|
74 |
| } |
|
75 |
1
| return 0;
|
|
76 |
| } |
|
77 |
| } |