-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathViewBuilderTest.java
More file actions
130 lines (111 loc) · 4.57 KB
/
ViewBuilderTest.java
File metadata and controls
130 lines (111 loc) · 4.57 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
/*******************************************************************************
* Stefan Meyer, 2012 Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
* in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
******************************************************************************/
package org.atemsource.atem.utility.view;
import java.util.concurrent.atomic.AtomicInteger;
import javax.inject.Inject;
import junit.framework.Assert;
import org.atemsource.atem.api.EntityTypeRepository;
import org.atemsource.atem.api.attribute.Attribute;
import org.atemsource.atem.api.attribute.relation.SingleAttribute;
import org.atemsource.atem.api.type.EntityType;
import org.atemsource.atem.api.type.PrimitiveType;
import org.atemsource.atem.api.view.View;
import org.atemsource.atem.api.view.ViewVisitor;
import org.atemsource.atem.api.view.Visitor;
import org.atemsource.atem.pojo.EntityA;
import org.atemsource.atem.utility.visitor.AttributeVisitor;
import org.atemsource.atem.utility.visitor.HierachyVisitor;
import org.jmock.Expectations;
import org.jmock.Mockery;
import org.jmock.integration.junit4.JUnit4Mockery;
import org.jmock.lib.legacy.ClassImposteriser;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@ContextConfiguration(locations = {"classpath:/test/meta/pojo/entitytype.xml",
"classpath:/meta/utility/view-example.xml"})
@RunWith(SpringJUnit4ClassRunner.class)
public class ViewBuilderTest
{
private Mockery context = new JUnit4Mockery() {
{
setImposteriser(ClassImposteriser.INSTANCE);
}
};
@Inject
private EntityTypeRepository entityTypeRepository;
@Inject
private ViewBuilderFactory factory;
@Test
public void test()
{
EntityType<EntityA> entityType = entityTypeRepository.getEntityType(EntityA.class);
ViewBuilder viewBuilder = factory.create(entityType);
viewBuilder.include("intP");
ViewBuilder subViewBuilder = viewBuilder.include("list").cascade();
subViewBuilder.include("integer");
View view = viewBuilder.create();
final Attribute listAttribute = entityType.getAttribute("list");
final Attribute intPAttribute = entityType.getAttribute("intP");
final Attribute integerAttribute = subViewBuilder.getEntityType().getAttribute("integer");
final ViewVisitor mockViewVisitor = context.mock(ViewVisitor.class);
context.checking(new Expectations() {
{
oneOf(mockViewVisitor).visit(with(equal(null)), with(equal(listAttribute)),
with(any(AttributeVisitor.class)));
oneOf(mockViewVisitor).visit(with(equal(null)), with(equal(intPAttribute)));
oneOf(mockViewVisitor).visit(with(equal(null)), with(equal(integerAttribute)),
with(any(AttributeVisitor.class)));
}
});
HierachyVisitor.visit(view,mockViewVisitor, null);
}
@Test
public void testRemoveAndIncludePrimitives()
{
EntityType<EntityA> entityType = entityTypeRepository.getEntityType(EntityA.class);
ViewBuilder viewBuilder = factory.create(entityType);
viewBuilder.includePrimitives(false);
viewBuilder.remove("intP");
View view = viewBuilder.create();
final Attribute intPAttribute = entityType.getAttribute("intP");
final AtomicInteger count = new AtomicInteger();
final ViewVisitor mockViewVisitor = new ViewVisitor<Object>() {
@Override
public void visit(Object context, Attribute attribute)
{
if (attribute == intPAttribute)
{
Assert.fail("intP was removed");
}
else if (attribute.getTargetType() instanceof PrimitiveType<?> && attribute instanceof SingleAttribute<?>)
{
count.incrementAndGet();
}
else
{
Assert.fail("not a single primitive " + attribute.getCode());
}
}
@Override
public void visit(Object context, Attribute attribute, Visitor<Object> visitor)
{
Assert.fail("not a primitive " + attribute.getCode());
}
@Override
public void visitSubView(Object context, View view, Visitor<Object> subViewVisitor) {
}
@Override
public void visitSuperView(Object context, View view, Visitor<Object> superViewVisitor) {
}
};
HierachyVisitor.visit(view,mockViewVisitor, null);
Assert.assertTrue(count.intValue() > 2);
}
}