1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.commons.io;
19
20 import static org.junit.jupiter.api.Assertions.assertArrayEquals;
21 import static org.junit.jupiter.api.Assertions.assertEquals;
22 import static org.junit.jupiter.api.Assertions.assertFalse;
23 import static org.junit.jupiter.api.Assertions.assertTrue;
24
25 import java.io.IOException;
26 import java.io.RandomAccessFile;
27 import java.nio.charset.StandardCharsets;
28 import java.nio.file.Files;
29 import java.nio.file.LinkOption;
30 import java.nio.file.Path;
31 import java.nio.file.StandardOpenOption;
32
33 import org.junit.jupiter.api.Test;
34 import org.junit.jupiter.api.io.TempDir;
35 import org.junit.jupiter.params.ParameterizedTest;
36 import org.junit.jupiter.params.provider.EnumSource;
37
38
39
40
41 class RandomAccessFileModeTest {
42
43 private static final byte[] BYTES_FIXTURE = "Foo".getBytes(StandardCharsets.US_ASCII);
44
45 private static final String FIXTURE = "test.txt";
46
47
48
49
50 @TempDir
51 public Path tempDir;
52
53 private byte[] read(final RandomAccessFile randomAccessFile) throws IOException {
54 return RandomAccessFiles.read(randomAccessFile, 0, (int) randomAccessFile.length());
55 }
56
57 @ParameterizedTest
58 @EnumSource(RandomAccessFileMode.class)
59 void testCreateFile(final RandomAccessFileMode randomAccessFileMode) throws IOException {
60 final byte[] expected = BYTES_FIXTURE;
61 final Path fixture = writeFixture(expected);
62 try (RandomAccessFile randomAccessFile = randomAccessFileMode.create(fixture.toFile())) {
63 assertArrayEquals(expected, read(randomAccessFile));
64 }
65 }
66
67 @ParameterizedTest
68 @EnumSource(RandomAccessFileMode.class)
69 void testCreatePath(final RandomAccessFileMode randomAccessFileMode) throws IOException {
70 final byte[] expected = BYTES_FIXTURE;
71 final Path fixture = writeFixture(expected);
72 randomAccessFileMode.accept(fixture, raf -> assertArrayEquals(expected, read(raf)));
73 }
74
75 @ParameterizedTest
76 @EnumSource(RandomAccessFileMode.class)
77 void testCreateString(final RandomAccessFileMode randomAccessFileMode) throws IOException {
78 final byte[] expected = BYTES_FIXTURE;
79 final Path fixture = writeFixture(expected);
80 try (RandomAccessFile randomAccessFile = randomAccessFileMode.create(fixture.toString())) {
81 assertArrayEquals(expected, read(randomAccessFile));
82 }
83 }
84
85 @Test
86 void testGetMode() {
87 assertEquals("r", RandomAccessFileMode.READ_ONLY.getMode());
88 assertEquals("rw", RandomAccessFileMode.READ_WRITE.getMode());
89 assertEquals("rwd", RandomAccessFileMode.READ_WRITE_SYNC_CONTENT.getMode());
90 assertEquals("rws", RandomAccessFileMode.READ_WRITE_SYNC_ALL.getMode());
91 }
92
93 @Test
94 void testImplies() {
95 assertTrue(RandomAccessFileMode.READ_WRITE_SYNC_ALL.implies(RandomAccessFileMode.READ_WRITE_SYNC_CONTENT));
96 assertTrue(RandomAccessFileMode.READ_WRITE_SYNC_CONTENT.implies(RandomAccessFileMode.READ_WRITE));
97 assertTrue(RandomAccessFileMode.READ_WRITE.implies(RandomAccessFileMode.READ_ONLY));
98 assertFalse(RandomAccessFileMode.READ_ONLY.implies(RandomAccessFileMode.READ_WRITE_SYNC_ALL));
99 }
100
101 @ParameterizedTest
102 @EnumSource(RandomAccessFileMode.class)
103 void testIoString(final RandomAccessFileMode randomAccessFileMode) throws IOException {
104 final byte[] expected = BYTES_FIXTURE;
105 final Path fixture = writeFixture(expected);
106 try (IORandomAccessFile randomAccessFile = randomAccessFileMode.io(fixture.toString())) {
107 assertArrayEquals(expected, read(randomAccessFile));
108 }
109 }
110
111
112
113
114 @Test
115 void testToString() {
116 assertEquals("READ_ONLY", RandomAccessFileMode.READ_ONLY.toString());
117 assertEquals("READ_WRITE", RandomAccessFileMode.READ_WRITE.toString());
118 assertEquals("READ_WRITE_SYNC_ALL", RandomAccessFileMode.READ_WRITE_SYNC_ALL.toString());
119 assertEquals("READ_WRITE_SYNC_CONTENT", RandomAccessFileMode.READ_WRITE_SYNC_CONTENT.toString());
120 }
121
122 @ParameterizedTest
123 @EnumSource(LinkOption.class)
124 void testValueOf(final LinkOption option) {
125 assertTrue(RandomAccessFileMode.valueOf(option).implies(RandomAccessFileMode.READ_ONLY));
126 }
127
128 @ParameterizedTest
129 @EnumSource(StandardOpenOption.class)
130 void testValueOf(final StandardOpenOption option) {
131 assertTrue(RandomAccessFileMode.valueOf(option).implies(RandomAccessFileMode.READ_ONLY));
132 }
133
134 @Test
135 void testValueOfMode() {
136 assertEquals(RandomAccessFileMode.READ_ONLY, RandomAccessFileMode.valueOfMode("r"));
137 assertEquals(RandomAccessFileMode.READ_WRITE, RandomAccessFileMode.valueOfMode("rw"));
138 assertEquals(RandomAccessFileMode.READ_WRITE_SYNC_CONTENT, RandomAccessFileMode.valueOfMode("rwd"));
139 assertEquals(RandomAccessFileMode.READ_WRITE_SYNC_ALL, RandomAccessFileMode.valueOfMode("rws"));
140 }
141
142 @Test
143 void testValueOfOpenOptions() {
144
145 assertEquals(RandomAccessFileMode.READ_ONLY, RandomAccessFileMode.valueOf(StandardOpenOption.READ));
146
147 assertEquals(RandomAccessFileMode.READ_WRITE, RandomAccessFileMode.valueOf(StandardOpenOption.WRITE));
148 assertEquals(RandomAccessFileMode.READ_WRITE, RandomAccessFileMode.valueOf(StandardOpenOption.READ, StandardOpenOption.WRITE));
149
150 assertEquals(RandomAccessFileMode.READ_WRITE_SYNC_CONTENT, RandomAccessFileMode.valueOf(StandardOpenOption.DSYNC));
151 assertEquals(RandomAccessFileMode.READ_WRITE_SYNC_CONTENT, RandomAccessFileMode.valueOf(StandardOpenOption.WRITE, StandardOpenOption.DSYNC));
152 assertEquals(RandomAccessFileMode.READ_WRITE_SYNC_CONTENT,
153 RandomAccessFileMode.valueOf(StandardOpenOption.READ, StandardOpenOption.WRITE, StandardOpenOption.DSYNC));
154
155 assertEquals(RandomAccessFileMode.READ_WRITE_SYNC_ALL, RandomAccessFileMode.valueOf(StandardOpenOption.SYNC));
156 assertEquals(RandomAccessFileMode.READ_WRITE_SYNC_ALL, RandomAccessFileMode.valueOf(StandardOpenOption.READ, StandardOpenOption.SYNC));
157 assertEquals(RandomAccessFileMode.READ_WRITE_SYNC_ALL,
158 RandomAccessFileMode.valueOf(StandardOpenOption.READ, StandardOpenOption.WRITE, StandardOpenOption.SYNC));
159 }
160
161 private Path writeFixture(final byte[] bytes) throws IOException {
162 return Files.write(tempDir.resolve(FIXTURE), bytes, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING);
163 }
164 }