1 /*
2  * Copyright (C) 2007 Google Inc.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.google.inject.util;
18 
19 import com.google.common.base.Objects;
20 import com.google.common.testing.EqualsTester;
21 import com.google.inject.Provider;
22 
23 import junit.framework.TestCase;
24 
25 import javax.inject.Inject;
26 
27 /**
28  * Unit tests for {@link Providers}.
29  *
30  * @author Kevin Bourrillion (kevinb9n@gmail.com)
31  */
32 public class ProvidersTest extends TestCase {
33 
testOfInstance()34   public void testOfInstance() {
35     String foo = "foo";
36     Provider<String> p = Providers.of(foo);
37     assertSame(foo, p.get());
38     assertSame(foo, p.get());
39   }
40 
testOfNull()41   public void testOfNull() {
42     Provider<String> p = Providers.of(null);
43     assertNull(p.get());
44   }
45 
testOfEquality()46   public void testOfEquality() {
47     new EqualsTester()
48         .addEqualityGroup(
49             Providers.of(null),
50             Providers.of(null))
51         .addEqualityGroup(
52             Providers.of("Hello"),
53             Providers.of("Hello"))
54         .testEquals();
55   }
56 
testGuicifyEquality()57   public void testGuicifyEquality() {
58     new EqualsTester()
59         .addEqualityGroup(
60             Providers.guicify(new JavaxProvider(10)),
61             Providers.guicify(new JavaxProvider(10)))
62         .addEqualityGroup(
63             Providers.guicify(new JavaxProvider(11)),
64             Providers.guicify(new JavaxProvider(11)))
65         .addEqualityGroup(
66             Providers.guicify(new JavaxProviderWithDependencies()),
67             Providers.guicify(new JavaxProviderWithDependencies()))
68         .testEquals();
69   }
70 
71   private static class JavaxProvider implements javax.inject.Provider<Integer> {
72     private final int value;
73 
JavaxProvider(int value)74     public JavaxProvider(int value) {
75       this.value = value;
76     }
77 
get()78     public Integer get() {
79       return value;
80     }
81 
hashCode()82     @Override public int hashCode() {
83       return Objects.hashCode(value);
84     }
85 
equals(Object obj)86     @Override public boolean equals(Object obj) {
87       return (obj instanceof JavaxProvider) && (value == ((JavaxProvider) obj).value);
88     }
89   }
90 
91   private static class JavaxProviderWithDependencies implements javax.inject.Provider<Integer> {
92     private int value;
93 
setValue(int value)94     @Inject void setValue(int value) {
95       this.value = value;
96     }
97 
get()98     public Integer get() {
99       return value;
100     }
101 
hashCode()102     @Override public int hashCode() {
103       return 42;
104     }
105 
equals(Object obj)106     @Override public boolean equals(Object obj) {
107       return (obj instanceof JavaxProviderWithDependencies);
108     }
109   }
110 }
111