< prev index next >

test/jdk/java/foreign/TestByteBuffer.java

Print this page
M TestByteBuffer.java

@@ -76,11 +76,11 @@
 import jdk.internal.foreign.MemoryAddressImpl;
 import jdk.internal.foreign.NativeMemorySegmentImpl;
 import org.testng.SkipException;
 import org.testng.annotations.*;
 import sun.nio.ch.DirectBuffer;
-
+import static jdk.incubator.foreign.MemorySegment.*;
 import static org.testng.Assert.*;
 
 public class TestByteBuffer {
 
     static Path tempPath;

@@ -234,10 +234,25 @@
                 checkTuples(base, mbb);
             });
         }
     }
 
+    static final int ALL_ACCESS_MODES = READ | WRITE | CLOSE | ACQUIRE | HANDOFF;
+
+    @Test
+    public void testDefaultAccessModesMappedSegment() throws Throwable {
+        try (MappedMemorySegment segment = MemorySegment.mapFromPath(tempPath, 8, FileChannel.MapMode.READ_WRITE)) {
+            assertTrue(segment.hasAccessModes(ALL_ACCESS_MODES));
+            assertEquals(segment.accessModes(), ALL_ACCESS_MODES);
+        }
+
+        try (MappedMemorySegment segment = MemorySegment.mapFromPath(tempPath, 8, FileChannel.MapMode.READ_ONLY)) {
+            assertTrue(segment.hasAccessModes(ALL_ACCESS_MODES & ~WRITE));
+            assertEquals(segment.accessModes(), ALL_ACCESS_MODES& ~WRITE);
+        }
+    }
+
     @Test
     public void testMappedSegment() throws Throwable {
         File f = new File("test2.out");
         f.createNewFile();
         f.deleteOnExit();

@@ -444,10 +459,25 @@
             MemoryAddress.copy(nativeArray.baseAddress(), heapArray.baseAddress(), bytes);
             checker.accept(heapArray.baseAddress());
         }
     }
 
+    @Test
+    public void testDefaultAccessModesOfBuffer() {
+        ByteBuffer rwBuffer = ByteBuffer.wrap(new byte[4]);
+        try (MemorySegment segment = MemorySegment.ofByteBuffer(rwBuffer)) {
+            assertTrue(segment.hasAccessModes(ALL_ACCESS_MODES));
+            assertEquals(segment.accessModes(), ALL_ACCESS_MODES);
+        }
+
+        ByteBuffer roBuffer = rwBuffer.asReadOnlyBuffer();
+        try (MemorySegment segment = MemorySegment.ofByteBuffer(roBuffer)) {
+            assertTrue(segment.hasAccessModes(ALL_ACCESS_MODES & ~WRITE));
+            assertEquals(segment.accessModes(), ALL_ACCESS_MODES & ~WRITE);
+        }
+    }
+
     @Test(dataProvider="bufferSources")
     public void testBufferToSegment(ByteBuffer bb, Predicate<MemorySegment> segmentChecker) {
         MemorySegment segment = MemorySegment.ofByteBuffer(bb);
         assertEquals(segment.hasAccessModes(MemorySegment.WRITE), !bb.isReadOnly());
         assertTrue(segmentChecker.test(segment));
< prev index next >