Skip to content

Commit 54b8fec

Browse files
committed
add tests
1 parent ac980ac commit 54b8fec

File tree

9 files changed

+228
-7
lines changed

9 files changed

+228
-7
lines changed

net.lecousin.core/src/main/java/net/lecousin/framework/io/text/CharacterStreamWritePool.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,11 @@ public IAsync<IOException> write(CharSequence s) {
8686

8787
/** Returns the synchronization point of the latest write operation. */
8888
public IAsync<IOException> flush() {
89-
return lastWrite;
89+
if (!(stream instanceof ICharacterStream.Writable.Buffered))
90+
return lastWrite;
91+
Async<IOException> result = new Async<>();
92+
lastWrite.onDone(() -> ((ICharacterStream.Writable.Buffered)stream).flush().onDone(result), result);
93+
return result;
9094
}
9195

9296
}

net.lecousin.core/src/test/java/net/lecousin/framework/core/tests/io/o2i/TestOutputToInputBuffersAsReadableBuffered.java

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import java.util.Collection;
55

66
import net.lecousin.framework.concurrent.threads.Task;
7+
import net.lecousin.framework.concurrent.threads.Task.Priority;
78
import net.lecousin.framework.core.test.io.TestIO;
89
import net.lecousin.framework.core.test.io.TestReadableBuffered;
910
import net.lecousin.framework.core.test.runners.LCConcurrentRunner;
@@ -19,7 +20,7 @@ public class TestOutputToInputBuffersAsReadableBuffered extends TestReadableBuff
1920

2021
@Parameters(name = "nbBuf = {2}")
2122
public static Collection<Object[]> parameters() {
22-
return TestIO.UsingGeneratedTestFiles.generateTestCases(true);
23+
return TestIO.UsingGeneratedTestFiles.generateTestCases(false);
2324
}
2425

2526
public TestOutputToInputBuffersAsReadableBuffered(File testFile, byte[] testBuf, int nbBuf) {
@@ -28,10 +29,14 @@ public TestOutputToInputBuffersAsReadableBuffered(File testFile, byte[] testBuf,
2829

2930
@Override
3031
protected OutputToInputBuffers createReadableBufferedFromFile(FileIO.ReadOnly file, long fileSize, int bufferingSize) throws Exception {
31-
OutputToInputBuffers o2i = new OutputToInputBuffers(true, -3, Task.Priority.NORMAL);
32-
IOUtil.copy(file, o2i, fileSize, false, null, 0).blockException(0);
33-
o2i.endOfData();
34-
file.closeAsync();
32+
OutputToInputBuffers o2i = new OutputToInputBuffers(true, nbBuf > 100 ? 3 : 0, Task.Priority.NORMAL);
33+
Task.cpu("Copy to o2i", Priority.NORMAL, () -> {
34+
IOUtil.copy(file, o2i, fileSize, false, null, 0).onDone(() -> {
35+
o2i.endOfData();
36+
file.closeAsync();
37+
});
38+
return null;
39+
}).executeIn(1000).start();
3540
return o2i;
3641
}
3742

net.lecousin.core/src/test/java/net/lecousin/framework/core/tests/io/text/TestBufferedReadableCharacterStream.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,22 @@
11
package net.lecousin.framework.core.tests.io.text;
22

33
import java.io.File;
4+
import java.nio.ByteBuffer;
45
import java.nio.charset.Charset;
6+
import java.nio.charset.StandardCharsets;
57
import java.util.Collection;
68

79
import net.lecousin.framework.core.test.io.TestCharacterStreamReadable;
810
import net.lecousin.framework.core.test.io.TestIO;
911
import net.lecousin.framework.core.test.runners.LCConcurrentRunner;
1012
import net.lecousin.framework.io.IO;
13+
import net.lecousin.framework.io.buffering.ByteArrayIO;
14+
import net.lecousin.framework.io.data.CharArray;
1115
import net.lecousin.framework.io.text.BufferedReadableCharacterStream;
1216
import net.lecousin.framework.io.text.ICharacterStream;
1317

18+
import org.junit.Assert;
19+
import org.junit.Test;
1420
import org.junit.runner.RunWith;
1521
import org.junit.runners.Parameterized.Parameters;
1622

@@ -31,4 +37,20 @@ protected ICharacterStream.Readable openStream(IO.Readable io) {
3137
return new BufferedReadableCharacterStream(io, Charset.forName("UTF-8"), 4096, 4);
3238
}
3339

40+
@Test
41+
public void testWithInitBytesAndChars() throws Exception {
42+
try (ByteArrayIO io = new ByteArrayIO("This is a text".getBytes(StandardCharsets.US_ASCII), "test");
43+
BufferedReadableCharacterStream stream = new BufferedReadableCharacterStream(io, StandardCharsets.US_ASCII, 16, 2, ByteBuffer.wrap(" World!".getBytes(StandardCharsets.US_ASCII)), new CharArray("Hello".toCharArray()))) {
44+
char[] buf = new char[1024];
45+
int nb = stream.readFullySync(buf, 0, buf.length);
46+
Assert.assertEquals("Hello World!This is a text", new String(buf, 0, nb));
47+
}
48+
try (ByteArrayIO io = new ByteArrayIO("This is a text".getBytes(StandardCharsets.US_ASCII), "test");
49+
BufferedReadableCharacterStream stream = new BufferedReadableCharacterStream(io, StandardCharsets.US_ASCII, 16, 2, ByteBuffer.allocate(0), new CharArray(new char[0]))) {
50+
char[] buf = new char[1024];
51+
int nb = stream.readFullySync(buf, 0, buf.length);
52+
Assert.assertEquals("This is a text", new String(buf, 0, nb));
53+
}
54+
}
55+
3456
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
package net.lecousin.framework.core.tests.io.text;
2+
3+
import java.io.File;
4+
import java.nio.charset.StandardCharsets;
5+
import java.util.Arrays;
6+
import java.util.Collection;
7+
8+
import net.lecousin.framework.concurrent.threads.Task.Priority;
9+
import net.lecousin.framework.core.test.LCCoreAbstractTest;
10+
import net.lecousin.framework.core.test.runners.LCConcurrentRunner;
11+
import net.lecousin.framework.io.FileIO;
12+
import net.lecousin.framework.io.TemporaryFiles;
13+
import net.lecousin.framework.io.text.BufferedReadableCharacterStream;
14+
import net.lecousin.framework.io.text.BufferedWritableCharacterStream;
15+
import net.lecousin.framework.io.text.CharacterStreamWritePool;
16+
import net.lecousin.framework.io.text.ICharacterStream;
17+
import net.lecousin.framework.io.text.WritableCharacterStream;
18+
import net.lecousin.framework.text.CharArrayStringBuffer;
19+
20+
import org.junit.After;
21+
import org.junit.Assert;
22+
import org.junit.Before;
23+
import org.junit.Test;
24+
import org.junit.runner.RunWith;
25+
import org.junit.runners.Parameterized.Parameters;
26+
27+
@RunWith(LCConcurrentRunner.Parameterized.class) @org.junit.runners.Parameterized.UseParametersRunnerFactory(LCConcurrentRunner.ConcurrentParameterizedRunnedFactory.class)
28+
public class TestCharacterStreamWritePool extends LCCoreAbstractTest {
29+
30+
@Parameters(name = "buffered = {0}")
31+
public static Collection<Object[]> parameters() {
32+
return Arrays.asList(
33+
new Object[] { Boolean.FALSE },
34+
new Object[] { Boolean.TRUE }
35+
);
36+
}
37+
38+
public TestCharacterStreamWritePool(boolean buffered) {
39+
this.buffered = buffered;
40+
}
41+
42+
private boolean buffered;
43+
private File file;
44+
private ICharacterStream.Writable stream;
45+
private CharacterStreamWritePool pool;
46+
47+
@Before
48+
public void initPool() throws Exception {
49+
file = TemporaryFiles.get().createFileSync("test", "charpool");
50+
FileIO.WriteOnly fio = new FileIO.WriteOnly(file, Priority.NORMAL);
51+
if (buffered)
52+
stream = new BufferedWritableCharacterStream(fio, StandardCharsets.UTF_8, 16);
53+
else
54+
stream = new WritableCharacterStream(fio, StandardCharsets.UTF_8);
55+
pool = new CharacterStreamWritePool(stream);
56+
}
57+
58+
@After
59+
public void closeResources() {
60+
try {
61+
stream.close();
62+
} catch (Exception e) {
63+
// ignore
64+
}
65+
file.delete();
66+
}
67+
68+
private void checkFile(String text, int nb) throws Exception {
69+
try (FileIO.ReadOnly fio = new FileIO.ReadOnly(file, Priority.NORMAL); BufferedReadableCharacterStream cs = new BufferedReadableCharacterStream(fio, StandardCharsets.UTF_8, 256, 3)) {
70+
char[] chars = new char[text.length()];
71+
for (int i = 0; i < nb; ++i) {
72+
Assert.assertEquals("Read " + i, chars.length, cs.readFullySync(chars, 0, chars.length));
73+
Assert.assertArrayEquals(text.toCharArray(), chars);
74+
}
75+
Assert.assertEquals(0, cs.readFullySync(chars, 0, chars.length));
76+
}
77+
}
78+
79+
@Test
80+
public void testCharByChar() throws Exception {
81+
char[] chars = "Hello World!".toCharArray();
82+
83+
for (int i = 0; i < 10; ++i)
84+
for (int j = 0; j < chars.length; ++j)
85+
pool.write(chars[j]);
86+
pool.flush().blockThrow(0);
87+
stream.close();
88+
checkFile("Hello World!", 10);
89+
}
90+
91+
@Test
92+
public void testChars() throws Exception {
93+
String text = "Hello World !";
94+
pool.write(text.toCharArray());
95+
pool.write(new char[0]);
96+
pool.write(new CharArrayStringBuffer().append(text).asCharBuffers());
97+
pool.write(text);
98+
pool.write(new CharArrayStringBuffer().append(text));
99+
pool.write((CharSequence)text);
100+
pool.flush().blockThrow(0);
101+
stream.close();
102+
checkFile(text, 5);
103+
}
104+
105+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package net.lecousin.framework.core.tests.plugins;
2+
3+
import java.util.Collection;
4+
import java.util.LinkedList;
5+
import java.util.List;
6+
7+
import net.lecousin.framework.plugins.ExtensionPoint;
8+
import net.lecousin.framework.plugins.Plugin;
9+
10+
public class AnExtensionPoint2 implements ExtensionPoint<AnExtensionPoint2.MyPlugin> {
11+
12+
public static class MyPlugin implements Plugin {
13+
}
14+
15+
@Override
16+
public Class<MyPlugin> getPluginClass() {
17+
return MyPlugin.class;
18+
}
19+
20+
private List<MyPlugin> plugins = new LinkedList<>();
21+
22+
@Override
23+
public void addPlugin(MyPlugin plugin) {
24+
plugins.add(plugin);
25+
}
26+
27+
@Override
28+
public void allPluginsLoaded() {
29+
}
30+
31+
@Override
32+
public Collection<MyPlugin> getPlugins() {
33+
return plugins;
34+
}
35+
36+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package net.lecousin.framework.core.tests.plugins;
2+
3+
import net.lecousin.framework.plugins.Plugin;
4+
5+
public class OrphelanPlugin implements Plugin {
6+
7+
}

net.lecousin.core/src/test/java/net/lecousin/framework/core/tests/plugins/TestPlugins.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package net.lecousin.framework.core.tests.plugins;
22

3+
import java.util.ArrayList;
34
import java.util.Collection;
45

56
import net.lecousin.framework.core.test.LCCoreAbstractTest;
@@ -27,6 +28,7 @@ public void testPlugins() {
2728
custom.loadPluginConfiguration(null, null);
2829
Assert.assertNull(ExtensionPoints.getCustomExtensionPoint(FakeCustom.class));
2930
Assert.assertNull(ExtensionPoints.getExtensionPoint(FakePoint.class));
31+
new FakePoint().printInfo(new StringBuilder());
3032
// for coverage
3133
for (ExtensionPoint<?> e : ExtensionPoints.getExtensionPoints()) {
3234
e.getPluginClass();
@@ -36,6 +38,9 @@ public void testPlugins() {
3638
ACustomExtensionPointWithFile c = ExtensionPoints.getCustomExtensionPoint(ACustomExtensionPointWithFile.class);
3739
Assert.assertNotNull(c);
3840
Assert.assertEquals("The test is successful", c.pluginContent);
41+
42+
ExtensionPoints.add(new AnExtensionPoint2());
43+
Assert.assertEquals(1, ExtensionPoints.getExtensionPoint(AnExtensionPoint2.class).getPlugins().size());
3944
}
4045

4146
public static class FakeCustom implements CustomExtensionPoint {
@@ -61,7 +66,9 @@ public void allPluginsLoaded() {
6166

6267
@Override
6368
public Collection<Plugin> getPlugins() {
64-
return null;
69+
ArrayList<Plugin> list = new ArrayList<>(1);
70+
list.add(null);
71+
return list;
6572
}
6673
}
6774

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package net.lecousin.framework.core.tests.protocols;
2+
3+
import java.io.IOException;
4+
import java.io.InputStream;
5+
import java.net.URL;
6+
7+
import net.lecousin.framework.core.test.LCCoreAbstractTest;
8+
9+
import org.junit.Assert;
10+
import org.junit.Test;
11+
12+
public class TestClasspathProtocol extends LCCoreAbstractTest {
13+
14+
@Test
15+
public void test() throws Exception {
16+
URL url = new URL("classpath:/net/lecousin/framework/locale/b.en");
17+
InputStream in = url.openStream();
18+
Assert.assertNotNull(in);
19+
in.close();
20+
url = new URL("classpath:/net/lecousin/framework/locale/b.enxxx");
21+
try {
22+
in = url.openStream();
23+
Assert.assertNull(in);
24+
} catch (IOException e) {
25+
// ok
26+
}
27+
url = new URL("classpath:/java/lang/String.class");
28+
in = url.openStream();
29+
Assert.assertNotNull(in);
30+
in.close();
31+
}
32+
33+
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
11

22
net.lecousin.framework.core.tests.plugins.AnExtensionPoint:net.lecousin.framework.core.tests.plugins.APlugin
3+
net.lecousin.framework.core.tests.plugins.AnExtensionPointThatDoesNotExist:net.lecousin.framework.core.tests.plugins.OrphelanPlugin
4+
net.lecousin.framework.core.tests.plugins.AnExtensionPoint2:net.lecousin.framework.core.tests.plugins.AnExtensionPoint2$MyPlugin
35

0 commit comments

Comments
 (0)