• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Protocol Buffers - Google's data interchange format
2 // Copyright 2008 Google Inc.  All rights reserved.
3 //
4 // Use of this source code is governed by a BSD-style
5 // license that can be found in the LICENSE file or at
6 // https://developers.google.com/open-source/licenses/bsd
7 
8 package com.google.protobuf.kotlin
9 
10 import com.google.common.testing.EqualsTester
11 import com.google.common.truth.Truth.assertThat
12 import kotlin.test.assertFailsWith
13 import org.junit.Test
14 import org.junit.runner.RunWith
15 import org.junit.runners.JUnit4
16 
17 @RunWith(JUnit4::class)
18 @OptIn(OnlyForUseByGeneratedProtoCode::class)
19 class DslMapTest {
20   class DummyProxy private constructor() : DslProxy()
21 
22   @Test
matchesMapnull23   fun matchesMap() {
24     assertThat(DslMap<Int, Int, DummyProxy>(mapOf(1 to -1, 2 to -2))).containsExactly(1, -1, 2, -2)
25   }
26 
27   @Test
reflectsChangesInMapnull28   fun reflectsChangesInMap() {
29     val mutableMap = mutableMapOf(1 to -1, 2 to -2)
30     val dslMap = DslMap<Int, Int, DummyProxy>(mutableMap)
31     mutableMap[3] = -3
32     assertThat(dslMap).containsExactly(1, -1, 2, -2, 3, -3).inOrder()
33   }
34 
35   @Test
dslMapIsNotMutablenull36   fun dslMapIsNotMutable() {
37     val dslMap = DslMap<Int, Int, DummyProxy>(mutableMapOf(1 to -1))
38     assertThat(dslMap is MutableMap<*, *>).isFalse()
39   }
40 
41   @Test
dslMapKeysAreNotMutablenull42   fun dslMapKeysAreNotMutable() {
43     val dslMap = DslMap<Int, Int, DummyProxy>(mutableMapOf(1 to -1))
44     assertThat(dslMap.keys is MutableSet<*>).isFalse()
45   }
46 
47   @Test
dslMapValuesAreNotMutablenull48   fun dslMapValuesAreNotMutable() {
49     val dslMap = DslMap<Int, Int, DummyProxy>(mutableMapOf(1 to -1))
50     assertThat(dslMap.values is MutableSet<*>).isFalse()
51   }
52 
53   @Test
dslMapEntriesAreNotMutablenull54   fun dslMapEntriesAreNotMutable() {
55     val dslMap = DslMap<Int, Int, DummyProxy>(mutableMapOf(1 to -1))
56     assertThat(dslMap.entries is MutableSet<*>).isFalse()
57   }
58 
59   @Test
dslMapEntryObjectsAreNotMutablenull60   fun dslMapEntryObjectsAreNotMutable() {
61     val dslMap = DslMap<Int, Int, DummyProxy>(mutableMapOf(1 to -1))
62     assertThat(dslMap.entries.single() is MutableMap.MutableEntry<*, *>).isFalse()
63   }
64 
65   @Suppress("PLATFORM_CLASS_MAPPED_TO_KOTLIN", "UNCHECKED_CAST")
66   @Test
dslMapIsNotEvenSecretlyMutablenull67   fun dslMapIsNotEvenSecretlyMutable() {
68     val dslMap = DslMap<Int, Int, DummyProxy>(mutableMapOf(1 to -1))
69     val dslMapAsJavaUtilMap = dslMap as java.util.Map<Int, Int>
70     assertFailsWith<UnsupportedOperationException> { dslMapAsJavaUtilMap.put(2, -2) }
71   }
72 
73   @Suppress("PLATFORM_CLASS_MAPPED_TO_KOTLIN", "UNCHECKED_CAST")
74   @Test
dslMapKeysAreNotEvenSecretlyMutablenull75   fun dslMapKeysAreNotEvenSecretlyMutable() {
76     val dslMap = DslMap<Int, Int, DummyProxy>(mutableMapOf(1 to -1))
77     val dslMapKeysAsJavaUtilSet = dslMap.keys as java.util.Set<Int>
78     assertFailsWith<UnsupportedOperationException> { dslMapKeysAsJavaUtilSet.remove(1) }
79   }
80 
81   @Suppress("PLATFORM_CLASS_MAPPED_TO_KOTLIN", "UNCHECKED_CAST")
82   @Test
dslMapKeysIteratorIsNotEvenSecretlyMutablenull83   fun dslMapKeysIteratorIsNotEvenSecretlyMutable() {
84     val dslMap = DslMap<Int, Int, DummyProxy>(mutableMapOf(1 to -1))
85     val dslMapKeysAsJavaUtilSet = dslMap.keys as java.util.Set<Int>
86     val itr = dslMapKeysAsJavaUtilSet.iterator()
87     itr.next()
88     assertFailsWith<UnsupportedOperationException> { itr.remove() }
89   }
90 
91   @Suppress("PLATFORM_CLASS_MAPPED_TO_KOTLIN", "UNCHECKED_CAST")
92   @Test
dslMapValuesAreNotEvenSecretlyMutablenull93   fun dslMapValuesAreNotEvenSecretlyMutable() {
94     val dslMap = DslMap<Int, Int, DummyProxy>(mutableMapOf(1 to -1))
95     val dslMapValuesAsJavaUtilCollection = dslMap.values as java.util.Collection<Int>
96     assertFailsWith<UnsupportedOperationException> { dslMapValuesAsJavaUtilCollection.remove(1) }
97   }
98 
99   @Suppress("PLATFORM_CLASS_MAPPED_TO_KOTLIN", "UNCHECKED_CAST")
100   @Test
dslMapValuesIteratorIsNotEvenSecretlyMutablenull101   fun dslMapValuesIteratorIsNotEvenSecretlyMutable() {
102     val dslMap = DslMap<Int, Int, DummyProxy>(mutableMapOf(1 to -1))
103     val dslMapValuesAsJavaUtilCollection = dslMap.values as java.util.Collection<Int>
104     val itr = dslMapValuesAsJavaUtilCollection.iterator()
105     itr.next()
106     assertFailsWith<UnsupportedOperationException> { itr.remove() }
107   }
108 
109   @Suppress("PLATFORM_CLASS_MAPPED_TO_KOTLIN", "UNCHECKED_CAST")
110   @Test
dslMapEntriesAreNotEvenSecretlyMutablenull111   fun dslMapEntriesAreNotEvenSecretlyMutable() {
112     val dslMap = DslMap<Int, Int, DummyProxy>(mutableMapOf(1 to -1))
113     val dslMapEntriesAsJavaUtilSet = dslMap.entries as java.util.Set<Map.Entry<Int, Int>>
114     val entry = dslMap.entries.single()
115     assertFailsWith<UnsupportedOperationException> { dslMapEntriesAsJavaUtilSet.remove(entry) }
116   }
117 
118   @Suppress("PLATFORM_CLASS_MAPPED_TO_KOTLIN", "UNCHECKED_CAST")
119   @Test
dslMapEntriesIteratorIsNotEvenSecretlyMutablenull120   fun dslMapEntriesIteratorIsNotEvenSecretlyMutable() {
121     val dslMap = DslMap<Int, Int, DummyProxy>(mutableMapOf(1 to -1))
122     val dslMapEntriesAsJavaUtilSet = dslMap.entries as java.util.Set<Map.Entry<Int, Int>>
123     val itr = dslMapEntriesAsJavaUtilSet.iterator()
124     itr.next()
125     assertFailsWith<UnsupportedOperationException> { itr.remove() }
126   }
127 
128   @Suppress("PLATFORM_CLASS_MAPPED_TO_KOTLIN", "UNCHECKED_CAST")
129   @Test
dslMapEntryObjectsAreNotEvenSecretlyMutablenull130   fun dslMapEntryObjectsAreNotEvenSecretlyMutable() {
131     val dslMap = DslMap<Int, Int, DummyProxy>(mutableMapOf(1 to -1))
132     val dslMapEntryAsJavaUtilMapEntry = dslMap.entries.single() as java.util.Map.Entry<Int, Int>
133     assertFailsWith<UnsupportedOperationException> { dslMapEntryAsJavaUtilMapEntry.value = 2 }
134   }
135 
136   @Test
expectedToStringnull137   fun expectedToString() {
138     assertThat(DslMap<Int, Int, DummyProxy>(mapOf(1 to 2, 2 to 3)).toString())
139       .isEqualTo("{1=2, 2=3}")
140   }
141 
142   @Test
equalitynull143   fun equality() {
144     EqualsTester()
145       .addEqualityGroup(DslMap<Int, Int, DummyProxy>(mapOf(1 to 2, 2 to 3)), mapOf(1 to 2, 2 to 3))
146       .addEqualityGroup(DslMap<Int, Int, DummyProxy>(mapOf(1 to 3, 2 to 3)), mapOf(1 to 3, 2 to 3))
147       .addEqualityGroup(
148         DslMap<Int, Int, DummyProxy>(emptyMap()),
149         DslMap<String, String, DummyProxy>(emptyMap()),
150         emptyMap<Int, Int>(),
151       )
152       .testEquals()
153   }
154 }
155