|
| 1 | +package test.scala.jdk.javaapi; |
| 2 | + |
| 3 | +import org.junit.Assert; |
| 4 | +import org.junit.Test; |
| 5 | +import scala.Array; |
| 6 | +import scala.Tuple2; |
| 7 | +import scala.collection.Iterable; |
| 8 | +import scala.collection.Iterator; |
| 9 | +import scala.collection.concurrent.TrieMap; |
| 10 | +import scala.collection.mutable.*; |
| 11 | +import scala.collection.mutable.Map; |
| 12 | +import scala.collection.mutable.Set; |
| 13 | +import scala.jdk.javaapi.CollectionConverters; |
| 14 | + |
| 15 | +import java.util.*; |
| 16 | +import java.util.concurrent.ConcurrentMap; |
| 17 | + |
| 18 | +public class CollectionConvertersTest { |
| 19 | + |
| 20 | + /** |
| 21 | + * The following conversions are supported via asScala and asJava: |
| 22 | + * |
| 23 | + * scala.collection.Iterable <=> java.lang.Iterable |
| 24 | + * scala.collection.Iterator <=> java.util.Iterator |
| 25 | + * scala.collection.mutable.Buffer <=> java.util.List |
| 26 | + * scala.collection.mutable.Set <=> java.util.Set |
| 27 | + * scala.collection.mutable.Map <=> java.util.Map |
| 28 | + * scala.collection.concurrent.Map <=> java.util.concurrent.ConcurrentMap |
| 29 | + */ |
| 30 | + @Test |
| 31 | + public void shouldConvertAsScala() { |
| 32 | + // scala.collection.Iterable <=> java.lang.Iterable |
| 33 | + java.lang.Iterable iterable = CollectionConverters.asJava(TestObjects.iterable()); |
| 34 | + Assert.assertEquals("A", iterable.iterator().next()); |
| 35 | + Iterable scalaIterable = CollectionConverters.asScala(iterable); |
| 36 | + Assert.assertEquals(TestObjects.iterable().head(), scalaIterable.head()); |
| 37 | + |
| 38 | + // scala.collection.Iterator <=> java.util.Iterator |
| 39 | + java.util.Iterator iterator = CollectionConverters.asJava(TestObjects.iterator()); |
| 40 | + Assert.assertEquals("A", iterator.next()); |
| 41 | + Iterator scalaIterator = CollectionConverters.asScala(iterator); |
| 42 | + Assert.assertTrue(scalaIterator.contains("B")); |
| 43 | + |
| 44 | + // scala.collection.mutable.Buffer <=> java.util.List |
| 45 | + List<String> list = CollectionConverters.asJava(TestObjects.buffer()); |
| 46 | + Assert.assertEquals("A", list.get(0)); |
| 47 | + Buffer<String> scalaBuffer = CollectionConverters.asScala(list); |
| 48 | + Assert.assertEquals("A", scalaBuffer.head()); |
| 49 | + |
| 50 | + // scala.collection.mutable.Set <=> java.util.Set |
| 51 | + java.util.Set<String> set = CollectionConverters.asJava(TestObjects.mutableSet()); |
| 52 | + Assert.assertTrue(set.contains("A")); |
| 53 | + Set<String> scalaSet = CollectionConverters.asScala(set); |
| 54 | + Assert.assertTrue(scalaSet.contains("A")); |
| 55 | + |
| 56 | + // scala.collection.mutable.Map <=> java.util.Map |
| 57 | + java.util.Map<String, String> map = CollectionConverters.asJava(TestObjects.mutableMap()); |
| 58 | + Assert.assertEquals("B", map.get("A")); |
| 59 | + Map<String, String> scalaMap = CollectionConverters.asScala(map); |
| 60 | + Assert.assertEquals("B", scalaMap.get("A").get()); |
| 61 | + |
| 62 | + // scala.collection.concurrent.Map <=> java.util.concurrent.ConcurrentMap |
| 63 | + ConcurrentMap<String, String> concurrentMap = CollectionConverters.asJava(TestObjects.concurrentMap()); |
| 64 | + Assert.assertEquals("B", concurrentMap.get("A")); |
| 65 | + scala.collection.concurrent.Map<String, String> scalaConcurrentMap = CollectionConverters.asScala(concurrentMap); |
| 66 | + Assert.assertEquals("B", scalaConcurrentMap.get("A").get()); |
| 67 | + } |
| 68 | + |
| 69 | + /** |
| 70 | + * The following conversions are supported via asScala and through specially-named methods to convert to Java collections, as shown: |
| 71 | + * |
| 72 | + * scala.collection.Iterable <=> java.util.Collection (via asJavaCollection) |
| 73 | + * scala.collection.Iterator <=> java.util.Enumeration (via asJavaEnumeration) |
| 74 | + * scala.collection.mutable.Map <=> java.util.Dictionary (via asJavaDictionary) |
| 75 | + */ |
| 76 | + public void convertAsCollection() { |
| 77 | + // scala.collection.Iterable <=> java.util.Collection (via asJavaCollection) |
| 78 | + Collection<String> collection = CollectionConverters.asJavaCollection(TestObjects.iterable()); |
| 79 | + Assert.assertTrue(collection.contains("A")); |
| 80 | + Iterable<String> iterable = CollectionConverters.asScala(collection); |
| 81 | + Assert.assertEquals("A", iterable.head()); |
| 82 | + |
| 83 | + // scala.collection.Iterator <=> java.util.Enumeration (via asJavaEnumeration) |
| 84 | + Enumeration<String> enumeration = CollectionConverters.asJavaEnumeration(TestObjects.iterator()); |
| 85 | + Assert.assertEquals("A", enumeration.nextElement()); |
| 86 | + Iterator<String> iterator = CollectionConverters.asScala(enumeration); |
| 87 | + Assert.assertEquals("A", iterator.next()); |
| 88 | + |
| 89 | + // scala.collection.mutable.Map <=> java.util.Dictionary (via asJavaDictionary) |
| 90 | + Dictionary<String, String> dictionary = CollectionConverters.asJavaDictionary(TestObjects.mutableMap()); |
| 91 | + Assert.assertEquals("B", dictionary.get("A")); |
| 92 | + Map<String, String> map = CollectionConverters.asScala(dictionary); |
| 93 | + Assert.assertEquals("B", map.get("A").get()); |
| 94 | + } |
| 95 | + |
| 96 | + /** In addition, the following one-way conversions are provided via asJava: |
| 97 | + * |
| 98 | + * scala.collection.Seq => java.util.List |
| 99 | + * scala.collection.mutable.Seq => java.util.List |
| 100 | + * scala.collection.Set => java.util.Set |
| 101 | + * scala.collection.Map => java.util.Map |
| 102 | + */ |
| 103 | + public void convertsAsJava() { |
| 104 | + // scala.collection.Seq => java.util.List |
| 105 | + Assert.assertEquals("A", CollectionConverters.asJava(TestObjects.seq()).get(0)); |
| 106 | + |
| 107 | + // scala.collection.mutable.Seq => java.util.List |
| 108 | + Assert.assertEquals("A", CollectionConverters.asJava(TestObjects.mutableSeq()).get(0)); |
| 109 | + |
| 110 | + // scala.collection.Set => java.util.Set |
| 111 | + Assert.assertTrue(CollectionConverters.asJava(TestObjects.set()).contains("A")); |
| 112 | + |
| 113 | + // scala.collection.Map => java.util.Map |
| 114 | + Assert.assertEquals("B", CollectionConverters.asJava(TestObjects.map()).get("A")); |
| 115 | + } |
| 116 | + |
| 117 | + /** |
| 118 | + * The following one way conversion is provided via asScala: |
| 119 | + * |
| 120 | + * java.util.Properties => scala.collection.mutable.Map |
| 121 | + */ |
| 122 | + public void convertsFromProperties() { |
| 123 | + Properties properties = new Properties(); |
| 124 | + properties.put("key", "value"); |
| 125 | + Map<String, String> stringStringMap = CollectionConverters.asScala(properties); |
| 126 | + Assert.assertEquals("value", stringStringMap.get("key").get()); |
| 127 | + } |
| 128 | +} |
0 commit comments