@@ -4,11 +4,23 @@ package scala.collection.convert
4
4
import org .junit .Test
5
5
import org .junit .Assert ._
6
6
7
+ import java .util .{
8
+ AbstractList ,
9
+ AbstractMap ,
10
+ AbstractSet ,
11
+ Collections ,
12
+ Collection => JCollection ,
13
+ HashSet => JHashSet ,
14
+ List => JList ,
15
+ Map => JMap ,
16
+ Set => JSet
17
+ }
18
+ import java .lang .{Iterable => JIterable }
19
+ import java .util .concurrent .{ConcurrentHashMap => JCMap }
20
+ import scala .collection .{AbstractIterable , concurrent , mutable }
7
21
import scala .jdk .CollectionConverters ._
8
22
import JavaCollectionWrappers ._
9
23
10
- import java .util .{AbstractList , AbstractSet , List => JList , Set => JSet }
11
-
12
24
class JTestList (vs : Int * ) extends AbstractList [Int ] {
13
25
def this () = this (Nil : _* )
14
26
override def size = vs.size
@@ -21,58 +33,134 @@ class JTestSet(vs: Int*) extends AbstractSet[Int] {
21
33
override def iterator = vs.iterator.asJava
22
34
}
23
35
36
+ object JTestMap {
37
+ case class JTestMapEntry (key : Int , value : String ) extends JMap .Entry [Int , String ] {
38
+ override def getKey : Int = key
39
+ override def getValue : String = value
40
+ override def setValue (value : String ): String =
41
+ throw new UnsupportedOperationException (" Cannot set value on JTestMapEntry" )
42
+ }
43
+ }
44
+
45
+ class JTestMap (vs : (Int , String )* ) extends AbstractMap [Int , String ] {
46
+ import JTestMap ._
47
+ override def entrySet (): JSet [JMap .Entry [Int , String ]] = {
48
+ val entrySet = new JHashSet [JMap .Entry [Int , String ]](vs.size);
49
+ vs.foreach { case (k, v) => entrySet.add(JTestMapEntry (k, v)) }
50
+ entrySet
51
+ }
52
+ }
53
+
24
54
/** Test that collection wrappers forward equals and hashCode where appropriate. */
25
55
class EqualsTest {
26
56
27
- def jlstOf (vs : Int * ): JList [Int ] = new JTestList (vs : _* )
28
- def jsetOf (vs : Int * ): JSet [Int ] = new JTestSet (vs : _* )
29
-
30
- // Seq extending AbstractList inherits equals
57
+ def jListOf (vs : Int * ): JList [Int ] = new JTestList (vs : _* )
58
+ def jSetOf (vs : Int * ): JSet [Int ] = new JTestSet (vs : _* )
59
+ def jMapOf (vs : (Int , String )* ): JMap [Int , String ] = new JTestMap (vs : _* )
31
60
32
- @ Test def `List as JList has equals` : Unit = {
33
- val list = List (1 , 2 , 3 )
34
- val jlst = new SeqWrapper (list)
35
- assertEquals(jlstOf(1 , 2 , 3 ), jlst)
36
- assertEquals(jlst, jlstOf(1 , 2 , 3 ))
37
- assertTrue(jlst == jlstOf(1 , 2 , 3 ))
38
- assertEquals(jlst.hashCode, jlst.hashCode)
61
+ // SeqWrapper extending util.AbstractList inherits equals
62
+ @ Test def `Seq as JList has equals` : Unit = {
63
+ def seq = Seq (1 , 2 , 3 )
64
+ def jList = new SeqWrapper (seq)
65
+ assertEquals(jList, jList)
66
+ assertEquals(jListOf(1 , 2 , 3 ), jList)
67
+ assertEquals(jList, jListOf(1 , 2 , 3 ))
68
+ assertTrue(jList == jListOf(1 , 2 , 3 ))
69
+ assertEquals(jList.hashCode, jList.hashCode)
39
70
}
40
71
72
+ // SetWrapper extending util.AbstractSet inherits equals
41
73
@ Test def `Set as JSet has equals` : Unit = {
42
- val set = Set (1 , 2 , 3 )
43
- val jset = new SetWrapper (set)
44
- assertEquals(jsetOf(1 , 2 , 3 ), jset)
45
- assertEquals(jset, jsetOf(1 , 2 , 3 ))
46
- assertTrue(jset == jsetOf(1 , 2 , 3 ))
47
- assertEquals(jset.hashCode, jset.hashCode)
74
+ def set = Set (1 , 2 , 3 )
75
+ def jSet = new SetWrapper (set)
76
+ assertEquals(jSet, jSet)
77
+ assertEquals(jSetOf(1 , 2 , 3 ), jSet)
78
+ assertEquals(jSet, jSetOf(1 , 2 , 3 ))
79
+ assertTrue(jSet == jSetOf(1 , 2 , 3 ))
80
+ assertEquals(jSet.hashCode, jSet.hashCode)
48
81
}
49
82
83
+ // MapWrapper extending util.AbstractMap inherits equals
50
84
@ Test def `Map as JMap has equals` : Unit = {
51
- val map = Map (1 -> " one" , 2 -> " two" , 3 -> " three" )
52
- val jmap = new MapWrapper (map)
53
- assertEquals(jmap, jmap)
85
+ def map = Map (1 -> " one" , 2 -> " two" , 3 -> " three" )
86
+ def jMap = new MapWrapper (map)
87
+ assertEquals(jMap, jMap)
88
+ assertEquals(jMapOf(1 -> " one" , 2 -> " two" , 3 -> " three" ), jMap)
89
+ assertEquals(jMap, jMapOf(1 -> " one" , 2 -> " two" , 3 -> " three" ))
90
+ assertTrue(jMap == jMapOf(1 -> " one" , 2 -> " two" , 3 -> " three" ))
91
+ assertEquals(jMap.hashCode, jMap.hashCode)
54
92
}
55
93
56
- @ Test def `Anything as Collection is equal to Anything` : Unit = {
57
- def set = Set (1 , 2 , 3 )
58
- def jset = new IterableWrapper (set)
59
- assertTrue(jset == jset)
60
- assertEquals(jset, jset)
61
- assertNotEquals(jset, set)
62
- assertEquals(jset.hashCode, jset.hashCode)
94
+ @ Test def `Iterable as JIterable does not compare equal` : Unit = {
95
+ // scala iterable without element equality defined
96
+ def iterable : Iterable [Int ] = new AbstractIterable [Int ] {
97
+ override def iterator : Iterator [Int ] = Iterator (1 , 2 , 3 )
98
+ }
99
+ def jIterable = new IterableWrapper (iterable)
100
+ assertNotEquals(jIterable, jIterable)
101
+ assertNotEquals(jIterable.hashCode, jIterable.hashCode)
63
102
}
64
103
65
- @ Test def `Iterator wrapper does not compare equal` : Unit = {
66
- def it = List (1 , 2 , 3 ).iterator
67
- def jit = new IteratorWrapper (it )
68
- assertNotEquals(jit, jit )
69
- assertNotEquals(jit .hashCode, jit .hashCode)
104
+ @ Test def `Iterator as JIterator does not compare equal` : Unit = {
105
+ def iterator = Iterator (1 , 2 , 3 )
106
+ def jIterator = new IteratorWrapper (iterator )
107
+ assertNotEquals(jIterator, jIterator )
108
+ assertNotEquals(jIterator .hashCode, jIterator .hashCode)
70
109
}
71
110
72
- @ Test def `Anything.asScala Iterable has case equals` : Unit = {
73
- def vs = jlstOf(42 , 27 , 37 )
74
- def it = new JListWrapper (vs)
75
- assertEquals(it, it)
76
- assertEquals(it.hashCode, it.hashCode)
111
+ @ Test def `All wrapper compare equal if underlying is equal` (): Unit = {
112
+ val jList = Collections .emptyList[String ]()
113
+ assertEquals(jList.asScala, jList.asScala)
114
+
115
+ val jIterator = jList.iterator()
116
+ assertEquals(jIterator.asScala, jIterator.asScala)
117
+
118
+ val jEnumeration = Collections .emptyEnumeration[String ]()
119
+ assertEquals(jEnumeration.asScala, jEnumeration.asScala)
120
+
121
+ val jIterable = jList.asInstanceOf [JIterable [String ]]
122
+ assertEquals(jIterable.asScala, jIterable.asScala)
123
+
124
+ val jCollection = jList.asInstanceOf [JCollection [String ]]
125
+ assertEquals(jCollection.asScala, jCollection.asScala)
126
+
127
+ val jSet = Collections .emptySet[String ]()
128
+ assertEquals(jSet.asScala, jSet.asScala)
129
+
130
+ val jMap = Collections .emptyMap[String , String ]()
131
+ assertEquals(jMap.asScala, jMap.asScala)
132
+
133
+ val jCMap = new JCMap [String , String ]()
134
+ assertEquals(jCMap.asScala, jCMap.asScala)
135
+
136
+ val iterator = Iterator .empty[String ]
137
+ assertEquals(iterator.asJava, iterator.asJava)
138
+ assertEquals(iterator.asJavaEnumeration, iterator.asJavaEnumeration)
139
+
140
+ val iterable = Iterable .empty[String ]
141
+ assertEquals(iterable.asJava, iterable.asJava)
142
+ assertEquals(iterable.asJavaCollection, iterable.asJavaCollection)
143
+
144
+ val buffer = mutable.Buffer .empty[String ]
145
+ assertEquals(buffer.asJava, buffer.asJava)
146
+
147
+ val seq = mutable.Seq .empty[String ]
148
+ assertEquals(seq.asJava, seq.asJava)
149
+
150
+ val mutableSet = mutable.Set .empty[String ]
151
+ assertEquals(mutableSet.asJava, mutableSet.asJava)
152
+
153
+ val set = Set .empty[String ]
154
+ assertEquals(set.asJava, set.asJava)
155
+
156
+ val mutableMap = mutable.Map .empty[String , String ]
157
+ assertEquals(mutableMap.asJava, mutableMap.asJava)
158
+ assertEquals(mutableMap.asJavaDictionary, mutableMap.asJavaDictionary)
159
+
160
+ val map = Map .empty[String , String ]
161
+ assertEquals(map.asJava, map.asJava)
162
+
163
+ val concurrentMap = concurrent.TrieMap .empty[String , String ]
164
+ assertEquals(concurrentMap.asJava, concurrentMap.asJava)
77
165
}
78
166
}
0 commit comments