embulk-input-filesplit 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/README.md +40 -0
- data/build.gradle +64 -0
- data/classpath/embulk-input-filesplit-0.1.1.jar +0 -0
- data/lib/embulk/input/filesplit.rb +3 -0
- data/src/main/java/org/embulk/input/filesplit/LocalFileSplitInputPlugin.java +187 -0
- data/src/main/java/org/embulk/input/filesplit/PartialFile.java +53 -0
- data/src/main/java/org/embulk/input/filesplit/PartialFileInputStream.java +154 -0
- data/src/test/java/org/embulk/input/filesplit/EmbulkPluginTester.java +95 -0
- data/src/test/java/org/embulk/input/filesplit/EmptyConfigSource.java +107 -0
- data/src/test/java/org/embulk/input/filesplit/LocalFileSplitInputPluginTest.java +94 -0
- data/src/test/java/org/embulk/input/filesplit/LocalFileSplitInputTest.java +81 -0
- data/src/test/java/org/embulk/input/filesplit/PartialFileInputStreamTest.java +570 -0
- data/src/test/resources/data/empty.csv +0 -0
- data/src/test/resources/data/test-header.csv +5 -0
- data/src/test/resources/data/test-only-header.csv +1 -0
- data/src/test/resources/data/test.csv +4 -0
- data/src/test/resources/resource.txt +0 -0
- data/src/test/resources/yml/test-header.yml +25 -0
- data/src/test/resources/yml/test-only-header.yml +25 -0
- data/src/test/resources/yml/test-tasks.yml +24 -0
- data/src/test/resources/yml/test.yml +23 -0
- metadata +64 -0
@@ -0,0 +1,95 @@
|
|
1
|
+
package org.embulk.input.filesplit;
|
2
|
+
|
3
|
+
import java.io.BufferedReader;
|
4
|
+
import java.io.BufferedWriter;
|
5
|
+
import java.io.File;
|
6
|
+
import java.io.FileReader;
|
7
|
+
import java.io.FileWriter;
|
8
|
+
import java.io.IOException;
|
9
|
+
import java.net.URISyntaxException;
|
10
|
+
import java.util.Arrays;
|
11
|
+
import java.util.regex.Matcher;
|
12
|
+
import java.util.regex.Pattern;
|
13
|
+
|
14
|
+
import org.embulk.EmbulkService;
|
15
|
+
import org.embulk.config.ConfigLoader;
|
16
|
+
import org.embulk.config.ConfigSource;
|
17
|
+
import org.embulk.exec.ExecutionResult;
|
18
|
+
import org.embulk.exec.LocalExecutor;
|
19
|
+
import org.embulk.plugin.InjectedPluginSource;
|
20
|
+
import org.embulk.spi.ExecSession;
|
21
|
+
|
22
|
+
import com.google.inject.Binder;
|
23
|
+
import com.google.inject.Injector;
|
24
|
+
import com.google.inject.Module;
|
25
|
+
|
26
|
+
public class EmbulkPluginTester {
|
27
|
+
|
28
|
+
private final Class<?> iface;
|
29
|
+
private final String name;
|
30
|
+
private final Class<?> impl;
|
31
|
+
|
32
|
+
|
33
|
+
public EmbulkPluginTester(Class<?> iface, String name, Class<?> impl)
|
34
|
+
{
|
35
|
+
this.iface = iface;
|
36
|
+
this.name = name;
|
37
|
+
this.impl = impl;
|
38
|
+
}
|
39
|
+
|
40
|
+
public void run(String ymlPath) throws Exception
|
41
|
+
{
|
42
|
+
EmbulkService service = new EmbulkService(new EmptyConfigSource()) {
|
43
|
+
protected Iterable<? extends Module> getAdditionalModules(ConfigSource systemConfig)
|
44
|
+
{
|
45
|
+
return Arrays.asList(new Module()
|
46
|
+
{
|
47
|
+
@Override
|
48
|
+
public void configure(Binder binder)
|
49
|
+
{
|
50
|
+
InjectedPluginSource.registerPluginTo(binder, iface, name, impl);
|
51
|
+
}
|
52
|
+
});
|
53
|
+
}
|
54
|
+
};
|
55
|
+
Injector injector = service.getInjector();
|
56
|
+
ConfigSource config = injector.getInstance(ConfigLoader.class).fromYamlFile(convert(ymlPath));
|
57
|
+
ExecSession session = new ExecSession(injector, config);
|
58
|
+
LocalExecutor executor = injector.getInstance(LocalExecutor.class);
|
59
|
+
ExecutionResult result = executor.run(session, config);
|
60
|
+
System.out.println(result);
|
61
|
+
}
|
62
|
+
|
63
|
+
private File convert(String yml) {
|
64
|
+
try {
|
65
|
+
File rootPath = new File(EmbulkPluginTester.class.getResource("/resource.txt").toURI()).getParentFile();
|
66
|
+
File ymlPath = new File(EmbulkPluginTester.class.getResource(yml).toURI());
|
67
|
+
File tempYmlPath = new File(ymlPath.getParentFile(), "temp-" + ymlPath.getName());
|
68
|
+
Pattern pathPrefixPattern = Pattern.compile("^ *path(_prefix)?: '(.*)'$");
|
69
|
+
try (BufferedReader reader = new BufferedReader(new FileReader(ymlPath))) {
|
70
|
+
try (BufferedWriter writer = new BufferedWriter(new FileWriter(tempYmlPath))) {
|
71
|
+
String line;
|
72
|
+
while ((line = reader.readLine()) != null) {
|
73
|
+
Matcher matcher = pathPrefixPattern.matcher(line);
|
74
|
+
if (matcher.matches()) {
|
75
|
+
int group = 2;
|
76
|
+
writer.write(line.substring(0, matcher.start(group)));
|
77
|
+
writer.write(new File(rootPath, matcher.group(group)).getAbsolutePath());
|
78
|
+
writer.write(line.substring(matcher.end(group)));
|
79
|
+
} else {
|
80
|
+
writer.write(line);
|
81
|
+
}
|
82
|
+
writer.newLine();
|
83
|
+
}
|
84
|
+
}
|
85
|
+
}
|
86
|
+
return tempYmlPath.getAbsoluteFile();
|
87
|
+
|
88
|
+
} catch (IOException e) {
|
89
|
+
throw new RuntimeException(e);
|
90
|
+
} catch (URISyntaxException e) {
|
91
|
+
throw new RuntimeException(e);
|
92
|
+
}
|
93
|
+
}
|
94
|
+
|
95
|
+
}
|
@@ -0,0 +1,107 @@
|
|
1
|
+
package org.embulk.input.filesplit;
|
2
|
+
|
3
|
+
import java.util.Collections;
|
4
|
+
import java.util.List;
|
5
|
+
import java.util.Map.Entry;
|
6
|
+
|
7
|
+
import org.embulk.config.ConfigSource;
|
8
|
+
import org.embulk.config.DataSource;
|
9
|
+
|
10
|
+
import com.fasterxml.jackson.databind.JsonNode;
|
11
|
+
import com.fasterxml.jackson.databind.node.ObjectNode;
|
12
|
+
|
13
|
+
public class EmptyConfigSource implements ConfigSource
|
14
|
+
{
|
15
|
+
|
16
|
+
@Override
|
17
|
+
public <E> E get(Class<E> type, String attrName)
|
18
|
+
{
|
19
|
+
return null;
|
20
|
+
}
|
21
|
+
|
22
|
+
@Override
|
23
|
+
public <E> E get(Class<E> type, String attrName, E defaultValue)
|
24
|
+
{
|
25
|
+
return defaultValue;
|
26
|
+
}
|
27
|
+
|
28
|
+
@Override
|
29
|
+
public List<String> getAttributeNames()
|
30
|
+
{
|
31
|
+
return Collections.emptyList();
|
32
|
+
}
|
33
|
+
|
34
|
+
@Override
|
35
|
+
public Iterable<Entry<String, JsonNode>> getAttributes()
|
36
|
+
{
|
37
|
+
return Collections.emptyList();
|
38
|
+
}
|
39
|
+
|
40
|
+
@Override
|
41
|
+
public ObjectNode getObjectNode()
|
42
|
+
{
|
43
|
+
return null;
|
44
|
+
}
|
45
|
+
|
46
|
+
@Override
|
47
|
+
public boolean isEmpty()
|
48
|
+
{
|
49
|
+
return true;
|
50
|
+
}
|
51
|
+
|
52
|
+
@Override
|
53
|
+
public ConfigSource deepCopy()
|
54
|
+
{
|
55
|
+
return this;
|
56
|
+
}
|
57
|
+
|
58
|
+
@Override
|
59
|
+
public ConfigSource getNested(String s)
|
60
|
+
{
|
61
|
+
// TODO 自動生成されたメソッド・スタブ
|
62
|
+
return null;
|
63
|
+
}
|
64
|
+
|
65
|
+
@Override
|
66
|
+
public ConfigSource getNestedOrSetEmpty(String s)
|
67
|
+
{
|
68
|
+
// TODO 自動生成されたメソッド・スタブ
|
69
|
+
return null;
|
70
|
+
}
|
71
|
+
|
72
|
+
@Override
|
73
|
+
public <T> T loadConfig(Class<T> class1)
|
74
|
+
{
|
75
|
+
// TODO 自動生成されたメソッド・スタブ
|
76
|
+
return null;
|
77
|
+
}
|
78
|
+
|
79
|
+
@Override
|
80
|
+
public ConfigSource merge(DataSource datasource)
|
81
|
+
{
|
82
|
+
// TODO 自動生成されたメソッド・スタブ
|
83
|
+
return null;
|
84
|
+
}
|
85
|
+
|
86
|
+
@Override
|
87
|
+
public ConfigSource set(String s, Object obj)
|
88
|
+
{
|
89
|
+
// TODO 自動生成されたメソッド・スタブ
|
90
|
+
return null;
|
91
|
+
}
|
92
|
+
|
93
|
+
@Override
|
94
|
+
public ConfigSource setAll(DataSource datasource)
|
95
|
+
{
|
96
|
+
// TODO 自動生成されたメソッド・スタブ
|
97
|
+
return null;
|
98
|
+
}
|
99
|
+
|
100
|
+
@Override
|
101
|
+
public ConfigSource setNested(String s, DataSource datasource)
|
102
|
+
{
|
103
|
+
// TODO 自動生成されたメソッド・スタブ
|
104
|
+
return null;
|
105
|
+
}
|
106
|
+
|
107
|
+
}
|
@@ -0,0 +1,94 @@
|
|
1
|
+
package org.embulk.input.filesplit;
|
2
|
+
|
3
|
+
import java.io.File;
|
4
|
+
import java.io.IOException;
|
5
|
+
import java.net.URISyntaxException;
|
6
|
+
import java.nio.charset.Charset;
|
7
|
+
import java.nio.file.FileSystem;
|
8
|
+
import java.nio.file.FileSystems;
|
9
|
+
import java.nio.file.Files;
|
10
|
+
import java.util.ArrayList;
|
11
|
+
import java.util.Collections;
|
12
|
+
import java.util.List;
|
13
|
+
|
14
|
+
import org.embulk.spi.InputPlugin;
|
15
|
+
import org.junit.Test;
|
16
|
+
import static org.junit.Assert.assertEquals;
|
17
|
+
|
18
|
+
public class LocalFileSplitInputPluginTest {
|
19
|
+
|
20
|
+
private EmbulkPluginTester tester = new EmbulkPluginTester(InputPlugin.class, "filesplit", LocalFileSplitInputPlugin.class);
|
21
|
+
|
22
|
+
@Test
|
23
|
+
public void test() throws Exception
|
24
|
+
{
|
25
|
+
run("/yml/test.yml", "/data/test.csv");
|
26
|
+
}
|
27
|
+
|
28
|
+
@Test
|
29
|
+
public void testTasks() throws Exception
|
30
|
+
{
|
31
|
+
run("/yml/test-tasks.yml", "/data/test.csv");
|
32
|
+
}
|
33
|
+
|
34
|
+
@Test
|
35
|
+
public void testHeader() throws Exception
|
36
|
+
{
|
37
|
+
run("/yml/test-header.yml", "/data/test.csv");
|
38
|
+
}
|
39
|
+
|
40
|
+
@Test
|
41
|
+
public void testOnlyHeader() throws Exception
|
42
|
+
{
|
43
|
+
run("/yml/test-only-header.yml", "/data/empty.csv");
|
44
|
+
}
|
45
|
+
|
46
|
+
private void run(String ymlPath, String expectedName) throws Exception
|
47
|
+
{
|
48
|
+
List<String> expected = readAll(expectedName);
|
49
|
+
Collections.sort(expected);
|
50
|
+
|
51
|
+
File file = prepare();
|
52
|
+
tester.run(ymlPath);
|
53
|
+
|
54
|
+
List<String> actual= readAll(file);
|
55
|
+
Collections.sort(actual);
|
56
|
+
|
57
|
+
assertEquals(expected, actual);
|
58
|
+
}
|
59
|
+
|
60
|
+
private File prepare() throws URISyntaxException
|
61
|
+
{
|
62
|
+
File file = new File(new File(getClass().getResource("/resource.txt").toURI()).getParentFile(), "temp");
|
63
|
+
file.mkdir();
|
64
|
+
for (File child : file.listFiles()) {
|
65
|
+
child.delete();
|
66
|
+
}
|
67
|
+
return file;
|
68
|
+
}
|
69
|
+
|
70
|
+
private List<String> readAll(String name) throws IOException, URISyntaxException
|
71
|
+
{
|
72
|
+
return readAll(new File(getClass().getResource(name).toURI()));
|
73
|
+
}
|
74
|
+
|
75
|
+
private List<String> readAll(File file) throws IOException
|
76
|
+
{
|
77
|
+
if (file.isFile()) {
|
78
|
+
FileSystem fs = FileSystems.getDefault();
|
79
|
+
Charset charset = Charset.forName("UTF-8");
|
80
|
+
return Files.readAllLines(fs.getPath(file.getAbsolutePath()), charset);
|
81
|
+
}
|
82
|
+
|
83
|
+
if (file.isDirectory()) {
|
84
|
+
List<String> lines = new ArrayList<String>();
|
85
|
+
for (File child : file.listFiles()) {
|
86
|
+
lines.addAll(readAll(child));
|
87
|
+
}
|
88
|
+
return lines;
|
89
|
+
}
|
90
|
+
|
91
|
+
return Collections.emptyList();
|
92
|
+
}
|
93
|
+
|
94
|
+
}
|
@@ -0,0 +1,81 @@
|
|
1
|
+
/*
|
2
|
+
* $Id: typical.epf 2627 2010-03-18 01:40:13Z tiba $
|
3
|
+
*/
|
4
|
+
package org.embulk.input.filesplit;
|
5
|
+
|
6
|
+
import static org.junit.Assert.assertEquals;
|
7
|
+
|
8
|
+
import java.io.BufferedReader;
|
9
|
+
import java.io.File;
|
10
|
+
import java.io.IOException;
|
11
|
+
import java.io.InputStream;
|
12
|
+
import java.io.InputStreamReader;
|
13
|
+
import java.net.URISyntaxException;
|
14
|
+
|
15
|
+
import org.embulk.input.filesplit.LocalFileSplitInputPlugin.LocalFileSplitInput.FileSplitProvider;
|
16
|
+
import org.junit.Test;
|
17
|
+
|
18
|
+
public class LocalFileSplitInputTest {
|
19
|
+
|
20
|
+
@Test
|
21
|
+
public void testHeader() throws Exception
|
22
|
+
{
|
23
|
+
try (BufferedReader reader = new BufferedReader(new InputStreamReader(open("/data/test-header.csv", 0, 20)))) {
|
24
|
+
assertEquals("id,name,value", reader.readLine());
|
25
|
+
assertEquals("1,aaaaa,12345", reader.readLine());
|
26
|
+
assertEquals(null, reader.readLine());
|
27
|
+
}
|
28
|
+
|
29
|
+
try (BufferedReader reader = new BufferedReader(new InputStreamReader(open("/data/test-header.csv", 0, 10)))) {
|
30
|
+
assertEquals("id,name,value", reader.readLine());
|
31
|
+
assertEquals(null, reader.readLine());
|
32
|
+
}
|
33
|
+
|
34
|
+
try (BufferedReader reader = new BufferedReader(new InputStreamReader(open("/data/test-header.csv", 1, 2)))) {
|
35
|
+
assertEquals("id,name,value", reader.readLine());
|
36
|
+
assertEquals(null, reader.readLine());
|
37
|
+
}
|
38
|
+
|
39
|
+
try (BufferedReader reader = new BufferedReader(new InputStreamReader(open("/data/test-header.csv", 1, 20)))) {
|
40
|
+
assertEquals("id,name,value", reader.readLine());
|
41
|
+
assertEquals("1,aaaaa,12345", reader.readLine());
|
42
|
+
assertEquals(null, reader.readLine());
|
43
|
+
}
|
44
|
+
|
45
|
+
try (BufferedReader reader = new BufferedReader(new InputStreamReader(open("/data/test-header.csv", 1, 40)))) {
|
46
|
+
assertEquals("id,name,value", reader.readLine());
|
47
|
+
assertEquals("1,aaaaa,12345", reader.readLine());
|
48
|
+
assertEquals("2,bbb,67890", reader.readLine());
|
49
|
+
assertEquals(null, reader.readLine());
|
50
|
+
}
|
51
|
+
|
52
|
+
try (BufferedReader reader = new BufferedReader(new InputStreamReader(open("/data/test-header.csv", 20, 40)))) {
|
53
|
+
assertEquals("id,name,value", reader.readLine());
|
54
|
+
assertEquals("2,bbb,67890", reader.readLine());
|
55
|
+
assertEquals(null, reader.readLine());
|
56
|
+
}
|
57
|
+
}
|
58
|
+
|
59
|
+
@Test
|
60
|
+
public void testOnlyHeader() throws Exception
|
61
|
+
{
|
62
|
+
try (BufferedReader reader = new BufferedReader(new InputStreamReader(open("/data/test-only-header.csv", 0, 10)))) {
|
63
|
+
assertEquals("id,name,value", reader.readLine());
|
64
|
+
assertEquals(null, reader.readLine());
|
65
|
+
}
|
66
|
+
|
67
|
+
try (BufferedReader reader = new BufferedReader(new InputStreamReader(open("/data/test-only-header.csv", 1, 10)))) {
|
68
|
+
assertEquals("id,name,value", reader.readLine());
|
69
|
+
assertEquals(null, reader.readLine());
|
70
|
+
}
|
71
|
+
}
|
72
|
+
|
73
|
+
private InputStream open(String name, int start, int end) throws IOException, URISyntaxException
|
74
|
+
{
|
75
|
+
File path = new File(getClass().getResource(name).toURI());
|
76
|
+
try (FileSplitProvider provider = new FileSplitProvider(new PartialFile(path.getAbsolutePath(), start, end), true)) {
|
77
|
+
return provider.openNext();
|
78
|
+
}
|
79
|
+
}
|
80
|
+
|
81
|
+
}
|
@@ -0,0 +1,570 @@
|
|
1
|
+
package org.embulk.input.filesplit;
|
2
|
+
|
3
|
+
import java.io.ByteArrayInputStream;
|
4
|
+
import java.io.IOException;
|
5
|
+
import java.io.InputStream;
|
6
|
+
import java.io.UnsupportedEncodingException;
|
7
|
+
|
8
|
+
import org.junit.Test;
|
9
|
+
|
10
|
+
import static org.junit.Assert.assertEquals;
|
11
|
+
|
12
|
+
public class PartialFileInputStreamTest
|
13
|
+
{
|
14
|
+
private byte[] buffer = new byte[8];
|
15
|
+
|
16
|
+
@Test
|
17
|
+
public void testEmpty() throws IOException
|
18
|
+
{
|
19
|
+
try (InputStream in = createInput("", 0, 0)) {
|
20
|
+
assertEquals(-1, in.read());
|
21
|
+
}
|
22
|
+
try (InputStream in = createInput("", 0, 0)) {
|
23
|
+
assertEquals(-1, in.read(buffer));
|
24
|
+
}
|
25
|
+
}
|
26
|
+
|
27
|
+
@Test
|
28
|
+
public void testNoLineBreak() throws IOException
|
29
|
+
{
|
30
|
+
try (InputStream in = createInput("12345", 0, 4)) {
|
31
|
+
assertEquals('1', in.read());
|
32
|
+
assertEquals('2', in.read());
|
33
|
+
assertEquals('3', in.read());
|
34
|
+
assertEquals('4', in.read());
|
35
|
+
assertEquals('5', in.read());
|
36
|
+
assertEquals(-1, in.read());
|
37
|
+
}
|
38
|
+
try (InputStream in = createInput("12345", 0, 4)) {
|
39
|
+
assertEquals(5, in.read(buffer));
|
40
|
+
assertEquals('1', buffer[0]);
|
41
|
+
assertEquals('2', buffer[1]);
|
42
|
+
assertEquals('3', buffer[2]);
|
43
|
+
assertEquals('4', buffer[3]);
|
44
|
+
assertEquals('5', buffer[4]);
|
45
|
+
}
|
46
|
+
|
47
|
+
try (InputStream in = createInput("12345", 1, 4)) {
|
48
|
+
assertEquals(-1, in.read());
|
49
|
+
}
|
50
|
+
try (InputStream in = createInput("12345", 1, 4)) {
|
51
|
+
assertEquals(-1, in.read(buffer));
|
52
|
+
}
|
53
|
+
}
|
54
|
+
|
55
|
+
@Test
|
56
|
+
public void testLF() throws IOException
|
57
|
+
{
|
58
|
+
try (InputStream in = createInput("12345\n67\n89", 0, 4)) {
|
59
|
+
assertEquals('1', in.read());
|
60
|
+
assertEquals('2', in.read());
|
61
|
+
assertEquals('3', in.read());
|
62
|
+
assertEquals('4', in.read());
|
63
|
+
assertEquals('5', in.read());
|
64
|
+
assertEquals('\n', in.read());
|
65
|
+
assertEquals(-1, in.read());
|
66
|
+
}
|
67
|
+
try (InputStream in = createInput("12345\n67\n89", 0, 4)) {
|
68
|
+
assertEquals(6, in.read(buffer));
|
69
|
+
assertEquals('1', buffer[0]);
|
70
|
+
assertEquals('2', buffer[1]);
|
71
|
+
assertEquals('3', buffer[2]);
|
72
|
+
assertEquals('4', buffer[3]);
|
73
|
+
assertEquals('5', buffer[4]);
|
74
|
+
assertEquals('\n', buffer[5]);
|
75
|
+
}
|
76
|
+
|
77
|
+
try (InputStream in = createInput("12345\n67\n89", 1, 4)) {
|
78
|
+
assertEquals(-1, in.read());
|
79
|
+
}
|
80
|
+
try (InputStream in = createInput("12345\n67\n89", 1, 4)) {
|
81
|
+
assertEquals(-1, in.read(buffer));
|
82
|
+
}
|
83
|
+
|
84
|
+
try (InputStream in = createInput("12345\n67\n89", 1, 7)) {
|
85
|
+
assertEquals('6', in.read());
|
86
|
+
assertEquals('7', in.read());
|
87
|
+
assertEquals('\n', in.read());
|
88
|
+
assertEquals(-1, in.read());
|
89
|
+
}
|
90
|
+
try (InputStream in = createInput("12345\n67\n89", 1, 7)) {
|
91
|
+
assertEquals(3, in.read(buffer));
|
92
|
+
assertEquals('6', buffer[0]);
|
93
|
+
assertEquals('7', buffer[1]);
|
94
|
+
assertEquals('\n', buffer[2]);
|
95
|
+
}
|
96
|
+
|
97
|
+
try (InputStream in = createInput("12345\n67\n89", 1, 10)) {
|
98
|
+
assertEquals('6', in.read());
|
99
|
+
assertEquals('7', in.read());
|
100
|
+
assertEquals('\n', in.read());
|
101
|
+
assertEquals('8', in.read());
|
102
|
+
assertEquals('9', in.read());
|
103
|
+
assertEquals(-1, in.read());
|
104
|
+
}
|
105
|
+
try (InputStream in = createInput("12345\n67\n89", 1, 10)) {
|
106
|
+
assertEquals(5, in.read(buffer));
|
107
|
+
assertEquals('6', buffer[0]);
|
108
|
+
assertEquals('7', buffer[1]);
|
109
|
+
assertEquals('\n', buffer[2]);
|
110
|
+
assertEquals('8', buffer[3]);
|
111
|
+
assertEquals('9', buffer[4]);
|
112
|
+
}
|
113
|
+
|
114
|
+
try (InputStream in = createInput("12345\n67\n89", 10, 11)) {
|
115
|
+
assertEquals(-1, in.read());
|
116
|
+
}
|
117
|
+
try (InputStream in = createInput("12345\n67\n89", 10, 11)) {
|
118
|
+
assertEquals(-1, in.read(buffer));
|
119
|
+
}
|
120
|
+
|
121
|
+
// \nの直後まで
|
122
|
+
try (InputStream in = createInput("12345\n67\n89", 4, 9)) {
|
123
|
+
assertEquals('6', in.read());
|
124
|
+
assertEquals('7', in.read());
|
125
|
+
assertEquals('\n', in.read());
|
126
|
+
assertEquals(-1, in.read());
|
127
|
+
}
|
128
|
+
try (InputStream in = createInput("12345\n67\n89", 4, 9)) {
|
129
|
+
assertEquals(3, in.read(buffer));
|
130
|
+
assertEquals('6', buffer[0]);
|
131
|
+
assertEquals('7', buffer[1]);
|
132
|
+
assertEquals('\n', buffer[2]);
|
133
|
+
assertEquals(-1, in.read(buffer));
|
134
|
+
}
|
135
|
+
try (InputStream in = createInput("12345\n67\n89", 4, 9)) {
|
136
|
+
assertEquals(3, in.read(buffer, 0, 3));
|
137
|
+
assertEquals('6', buffer[0]);
|
138
|
+
assertEquals('7', buffer[1]);
|
139
|
+
assertEquals('\n', buffer[2]);
|
140
|
+
assertEquals(-1, in.read(buffer));
|
141
|
+
}
|
142
|
+
// \nの直後から
|
143
|
+
try (InputStream in = createInput("12345\n67\n89", 9, 11)) {
|
144
|
+
assertEquals('8', in.read());
|
145
|
+
assertEquals('9', in.read());
|
146
|
+
assertEquals(-1, in.read());
|
147
|
+
}
|
148
|
+
try (InputStream in = createInput("12345\n67\n89", 9, 11)) {
|
149
|
+
assertEquals(2, in.read(buffer));
|
150
|
+
assertEquals('8', buffer[0]);
|
151
|
+
assertEquals('9', buffer[1]);
|
152
|
+
}
|
153
|
+
|
154
|
+
// \nの直前まで
|
155
|
+
try (InputStream in = createInput("12345\n67\n89", 4, 8)) {
|
156
|
+
assertEquals('6', in.read());
|
157
|
+
assertEquals('7', in.read());
|
158
|
+
assertEquals('\n', in.read());
|
159
|
+
assertEquals(-1, in.read());
|
160
|
+
}
|
161
|
+
try (InputStream in = createInput("12345\n67\n89", 4, 8)) {
|
162
|
+
assertEquals(3, in.read(buffer));
|
163
|
+
assertEquals('6', buffer[0]);
|
164
|
+
assertEquals('7', buffer[1]);
|
165
|
+
assertEquals('\n', buffer[2]);
|
166
|
+
}
|
167
|
+
|
168
|
+
// \nの直前から
|
169
|
+
try (InputStream in = createInput("12345\n67\n89", 8, 11)) {
|
170
|
+
assertEquals('8', in.read());
|
171
|
+
assertEquals('9', in.read());
|
172
|
+
assertEquals(-1, in.read());
|
173
|
+
}
|
174
|
+
try (InputStream in = createInput("12345\n67\n89", 8, 11)) {
|
175
|
+
assertEquals(2, in.read(buffer));
|
176
|
+
assertEquals('8', buffer[0]);
|
177
|
+
assertEquals('9', buffer[1]);
|
178
|
+
}
|
179
|
+
|
180
|
+
// \nで終わる(最後まで)
|
181
|
+
try (InputStream in = createInput("12345\n67\n", 5, 9)) {
|
182
|
+
assertEquals('6', in.read());
|
183
|
+
assertEquals('7', in.read());
|
184
|
+
assertEquals('\n', in.read());
|
185
|
+
assertEquals(-1, in.read());
|
186
|
+
}
|
187
|
+
try (InputStream in = createInput("12345\n67\n", 5, 9)) {
|
188
|
+
assertEquals(3, in.read(buffer));
|
189
|
+
assertEquals('6', buffer[0]);
|
190
|
+
assertEquals('7', buffer[1]);
|
191
|
+
assertEquals('\n', buffer[2]);
|
192
|
+
}
|
193
|
+
|
194
|
+
// \nで終わる(直前まで)
|
195
|
+
try (InputStream in = createInput("12345\n67\n", 5, 8)) {
|
196
|
+
assertEquals('6', in.read());
|
197
|
+
assertEquals('7', in.read());
|
198
|
+
assertEquals('\n', in.read());
|
199
|
+
assertEquals(-1, in.read());
|
200
|
+
}
|
201
|
+
try (InputStream in = createInput("12345\n67\n", 5, 8)) {
|
202
|
+
assertEquals(3, in.read(buffer));
|
203
|
+
assertEquals('6', buffer[0]);
|
204
|
+
assertEquals('7', buffer[1]);
|
205
|
+
assertEquals('\n', buffer[2]);
|
206
|
+
}
|
207
|
+
}
|
208
|
+
|
209
|
+
|
210
|
+
@Test
|
211
|
+
public void testCRLF() throws IOException
|
212
|
+
{
|
213
|
+
try (InputStream in = createInput("12345\r\n67\r\n89", 0, 4)) {
|
214
|
+
assertEquals('1', in.read());
|
215
|
+
assertEquals('2', in.read());
|
216
|
+
assertEquals('3', in.read());
|
217
|
+
assertEquals('4', in.read());
|
218
|
+
assertEquals('5', in.read());
|
219
|
+
assertEquals('\r', in.read());
|
220
|
+
assertEquals('\n', in.read());
|
221
|
+
assertEquals(-1, in.read());
|
222
|
+
}
|
223
|
+
try (InputStream in = createInput("12345\r\n67\r\n89", 0, 4)) {
|
224
|
+
assertEquals(7, in.read(buffer));
|
225
|
+
assertEquals('1', buffer[0]);
|
226
|
+
assertEquals('2', buffer[1]);
|
227
|
+
assertEquals('3', buffer[2]);
|
228
|
+
assertEquals('4', buffer[3]);
|
229
|
+
assertEquals('5', buffer[4]);
|
230
|
+
assertEquals('\r', buffer[5]);
|
231
|
+
assertEquals('\n', buffer[6]);
|
232
|
+
}
|
233
|
+
|
234
|
+
try (InputStream in = createInput("12345\r\n67\r\n89", 1, 4)) {
|
235
|
+
assertEquals(-1, in.read());
|
236
|
+
}
|
237
|
+
try (InputStream in = createInput("12345\r\n67\r\n89", 1, 4)) {
|
238
|
+
assertEquals(-1, in.read(buffer));
|
239
|
+
}
|
240
|
+
|
241
|
+
try (InputStream in = createInput("12345\r\n67\r\n89", 1, 8)) {
|
242
|
+
assertEquals('6', in.read());
|
243
|
+
assertEquals('7', in.read());
|
244
|
+
assertEquals('\r', in.read());
|
245
|
+
assertEquals('\n', in.read());
|
246
|
+
assertEquals(-1, in.read());
|
247
|
+
}
|
248
|
+
try (InputStream in = createInput("12345\r\n67\r\n89", 1, 8)) {
|
249
|
+
assertEquals(4, in.read(buffer));
|
250
|
+
assertEquals('6', buffer[0]);
|
251
|
+
assertEquals('7', buffer[1]);
|
252
|
+
assertEquals('\r', buffer[2]);
|
253
|
+
assertEquals('\n', buffer[3]);
|
254
|
+
}
|
255
|
+
|
256
|
+
try (InputStream in = createInput("12345\r\n67\r\n89", 1, 12)) {
|
257
|
+
assertEquals('6', in.read());
|
258
|
+
assertEquals('7', in.read());
|
259
|
+
assertEquals('\r', in.read());
|
260
|
+
assertEquals('\n', in.read());
|
261
|
+
assertEquals('8', in.read());
|
262
|
+
assertEquals('9', in.read());
|
263
|
+
assertEquals(-1, in.read());
|
264
|
+
}
|
265
|
+
try (InputStream in = createInput("12345\r\n67\r\n89", 1, 12)) {
|
266
|
+
assertEquals(6, in.read(buffer));
|
267
|
+
assertEquals('6', buffer[0]);
|
268
|
+
assertEquals('7', buffer[1]);
|
269
|
+
assertEquals('\r', buffer[2]);
|
270
|
+
assertEquals('\n', buffer[3]);
|
271
|
+
assertEquals('8', buffer[4]);
|
272
|
+
assertEquals('9', buffer[5]);
|
273
|
+
}
|
274
|
+
|
275
|
+
try (InputStream in = createInput("12345\r\n67\r\n89", 12, 13)) {
|
276
|
+
assertEquals(-1, in.read());
|
277
|
+
}
|
278
|
+
try (InputStream in = createInput("12345\r\n67\r\n89", 12, 13)) {
|
279
|
+
assertEquals(-1, in.read(buffer));
|
280
|
+
}
|
281
|
+
|
282
|
+
// \nの直後まで
|
283
|
+
try (InputStream in = createInput("12345\r\n67\r\n89", 4, 11)) {
|
284
|
+
assertEquals('6', in.read());
|
285
|
+
assertEquals('7', in.read());
|
286
|
+
assertEquals('\r', in.read());
|
287
|
+
assertEquals('\n', in.read());
|
288
|
+
assertEquals(-1, in.read());
|
289
|
+
}
|
290
|
+
try (InputStream in = createInput("12345\r\n67\r\n89", 4, 11)) {
|
291
|
+
assertEquals(4, in.read(buffer));
|
292
|
+
assertEquals('6', buffer[0]);
|
293
|
+
assertEquals('7', buffer[1]);
|
294
|
+
assertEquals('\r', buffer[2]);
|
295
|
+
assertEquals('\n', buffer[3]);
|
296
|
+
assertEquals(-1, in.read(buffer));
|
297
|
+
}
|
298
|
+
try (InputStream in = createInput("12345\r\n67\r\n89", 4, 11)) {
|
299
|
+
assertEquals(4, in.read(buffer, 0, 4));
|
300
|
+
assertEquals('6', buffer[0]);
|
301
|
+
assertEquals('7', buffer[1]);
|
302
|
+
assertEquals('\r', buffer[2]);
|
303
|
+
assertEquals('\n', buffer[3]);
|
304
|
+
assertEquals(-1, in.read(buffer));
|
305
|
+
}
|
306
|
+
// \nの直後から
|
307
|
+
try (InputStream in = createInput("12345\r\n67\r\n89", 11, 13)) {
|
308
|
+
assertEquals('8', in.read());
|
309
|
+
assertEquals('9', in.read());
|
310
|
+
assertEquals(-1, in.read());
|
311
|
+
}
|
312
|
+
try (InputStream in = createInput("12345\r\n67\r\n89", 11, 13)) {
|
313
|
+
assertEquals(2, in.read(buffer));
|
314
|
+
assertEquals('8', buffer[0]);
|
315
|
+
assertEquals('9', buffer[1]);
|
316
|
+
}
|
317
|
+
|
318
|
+
// \rと\nの間まで
|
319
|
+
try (InputStream in = createInput("12345\r\n67\r\n89", 4, 10)) {
|
320
|
+
assertEquals('6', in.read());
|
321
|
+
assertEquals('7', in.read());
|
322
|
+
assertEquals('\r', in.read());
|
323
|
+
assertEquals('\n', in.read());
|
324
|
+
assertEquals(-1, in.read());
|
325
|
+
}
|
326
|
+
try (InputStream in = createInput("12345\r\n67\r\n89", 4, 10)) {
|
327
|
+
assertEquals(4, in.read(buffer));
|
328
|
+
assertEquals('6', buffer[0]);
|
329
|
+
assertEquals('7', buffer[1]);
|
330
|
+
assertEquals('\r', buffer[2]);
|
331
|
+
assertEquals('\n', buffer[3]);
|
332
|
+
}
|
333
|
+
|
334
|
+
// \rと\nの間から
|
335
|
+
try (InputStream in = createInput("12345\r\n67\r\n89", 10, 13)) {
|
336
|
+
assertEquals('8', in.read());
|
337
|
+
assertEquals('9', in.read());
|
338
|
+
assertEquals(-1, in.read());
|
339
|
+
}
|
340
|
+
try (InputStream in = createInput("12345\r\n67\r\n89", 10, 13)) {
|
341
|
+
assertEquals(2, in.read(buffer));
|
342
|
+
assertEquals('8', buffer[0]);
|
343
|
+
assertEquals('9', buffer[1]);
|
344
|
+
}
|
345
|
+
|
346
|
+
// \rの直前まで
|
347
|
+
try (InputStream in = createInput("12345\r\n67\r\n89", 4, 9)) {
|
348
|
+
assertEquals('6', in.read());
|
349
|
+
assertEquals('7', in.read());
|
350
|
+
assertEquals('\r', in.read());
|
351
|
+
assertEquals('\n', in.read());
|
352
|
+
assertEquals(-1, in.read());
|
353
|
+
}
|
354
|
+
try (InputStream in = createInput("12345\r\n67\r\n89", 4, 9)) {
|
355
|
+
assertEquals(4, in.read(buffer));
|
356
|
+
assertEquals('6', buffer[0]);
|
357
|
+
assertEquals('7', buffer[1]);
|
358
|
+
assertEquals('\r', buffer[2]);
|
359
|
+
assertEquals('\n', buffer[3]);
|
360
|
+
}
|
361
|
+
|
362
|
+
// \rの直前から
|
363
|
+
try (InputStream in = createInput("12345\r\n67\r\n89", 9, 13)) {
|
364
|
+
assertEquals('8', in.read());
|
365
|
+
assertEquals('9', in.read());
|
366
|
+
assertEquals(-1, in.read());
|
367
|
+
}
|
368
|
+
try (InputStream in = createInput("12345\r\n67\r\n89", 9, 13)) {
|
369
|
+
assertEquals(2, in.read(buffer));
|
370
|
+
assertEquals('8', buffer[0]);
|
371
|
+
assertEquals('9', buffer[1]);
|
372
|
+
}
|
373
|
+
|
374
|
+
// \r\nで終わる(最後まで)
|
375
|
+
try (InputStream in = createInput("12345\r\n67\r\n", 5, 11)) {
|
376
|
+
assertEquals('6', in.read());
|
377
|
+
assertEquals('7', in.read());
|
378
|
+
assertEquals('\r', in.read());
|
379
|
+
assertEquals('\n', in.read());
|
380
|
+
assertEquals(-1, in.read());
|
381
|
+
}
|
382
|
+
try (InputStream in = createInput("12345\r\n67\r\n", 5, 11)) {
|
383
|
+
assertEquals(4, in.read(buffer));
|
384
|
+
assertEquals('6', buffer[0]);
|
385
|
+
assertEquals('7', buffer[1]);
|
386
|
+
assertEquals('\r', buffer[2]);
|
387
|
+
assertEquals('\n', buffer[3]);
|
388
|
+
}
|
389
|
+
|
390
|
+
// \r\nで終わる(直前まで)
|
391
|
+
try (InputStream in = createInput("12345\r\n67\r\n", 5, 10)) {
|
392
|
+
assertEquals('6', in.read());
|
393
|
+
assertEquals('7', in.read());
|
394
|
+
assertEquals('\r', in.read());
|
395
|
+
assertEquals('\n', in.read());
|
396
|
+
assertEquals(-1, in.read());
|
397
|
+
}
|
398
|
+
try (InputStream in = createInput("12345\r\n67\r\n", 5, 10)) {
|
399
|
+
assertEquals(4, in.read(buffer));
|
400
|
+
assertEquals('6', buffer[0]);
|
401
|
+
assertEquals('7', buffer[1]);
|
402
|
+
assertEquals('\r', buffer[2]);
|
403
|
+
assertEquals('\n', buffer[3]);
|
404
|
+
}
|
405
|
+
}
|
406
|
+
|
407
|
+
@Test
|
408
|
+
public void testCR() throws IOException
|
409
|
+
{
|
410
|
+
try (InputStream in = createInput("12345\r67\r89", 0, 4)) {
|
411
|
+
assertEquals('1', in.read());
|
412
|
+
assertEquals('2', in.read());
|
413
|
+
assertEquals('3', in.read());
|
414
|
+
assertEquals('4', in.read());
|
415
|
+
assertEquals('5', in.read());
|
416
|
+
assertEquals('\r', in.read());
|
417
|
+
assertEquals(-1, in.read());
|
418
|
+
}
|
419
|
+
try (InputStream in = createInput("12345\r67\r89", 0, 4)) {
|
420
|
+
assertEquals(6, in.read(buffer));
|
421
|
+
assertEquals('1', buffer[0]);
|
422
|
+
assertEquals('2', buffer[1]);
|
423
|
+
assertEquals('3', buffer[2]);
|
424
|
+
assertEquals('4', buffer[3]);
|
425
|
+
assertEquals('5', buffer[4]);
|
426
|
+
assertEquals('\r', buffer[5]);
|
427
|
+
}
|
428
|
+
|
429
|
+
try (InputStream in = createInput("12345\r67\r89", 1, 4)) {
|
430
|
+
assertEquals(-1, in.read());
|
431
|
+
}
|
432
|
+
try (InputStream in = createInput("12345\r67\r89", 1, 4)) {
|
433
|
+
assertEquals(-1, in.read(buffer));
|
434
|
+
}
|
435
|
+
|
436
|
+
try (InputStream in = createInput("12345\r67\r89", 1, 7)) {
|
437
|
+
assertEquals('6', in.read());
|
438
|
+
assertEquals('7', in.read());
|
439
|
+
assertEquals('\r', in.read());
|
440
|
+
assertEquals(-1, in.read());
|
441
|
+
}
|
442
|
+
try (InputStream in = createInput("12345\r67\r89", 1, 7)) {
|
443
|
+
assertEquals(3, in.read(buffer));
|
444
|
+
assertEquals('6', buffer[0]);
|
445
|
+
assertEquals('7', buffer[1]);
|
446
|
+
assertEquals('\r', buffer[2]);
|
447
|
+
}
|
448
|
+
|
449
|
+
try (InputStream in = createInput("12345\r67\r89", 1, 10)) {
|
450
|
+
assertEquals('6', in.read());
|
451
|
+
assertEquals('7', in.read());
|
452
|
+
assertEquals('\r', in.read());
|
453
|
+
assertEquals('8', in.read());
|
454
|
+
assertEquals('9', in.read());
|
455
|
+
assertEquals(-1, in.read());
|
456
|
+
}
|
457
|
+
try (InputStream in = createInput("12345\r67\r89", 1, 10)) {
|
458
|
+
assertEquals(5, in.read(buffer));
|
459
|
+
assertEquals('6', buffer[0]);
|
460
|
+
assertEquals('7', buffer[1]);
|
461
|
+
assertEquals('\r', buffer[2]);
|
462
|
+
assertEquals('8', buffer[3]);
|
463
|
+
assertEquals('9', buffer[4]);
|
464
|
+
}
|
465
|
+
|
466
|
+
try (InputStream in = createInput("12345\r67\r89", 10, 11)) {
|
467
|
+
assertEquals(-1, in.read());
|
468
|
+
}
|
469
|
+
try (InputStream in = createInput("12345\r67\r89", 10, 11)) {
|
470
|
+
assertEquals(-1, in.read(buffer));
|
471
|
+
}
|
472
|
+
|
473
|
+
// \rの直後まで
|
474
|
+
try (InputStream in = createInput("12345\r67\r89", 4, 9)) {
|
475
|
+
assertEquals('6', in.read());
|
476
|
+
assertEquals('7', in.read());
|
477
|
+
assertEquals('\r', in.read());
|
478
|
+
assertEquals(-1, in.read());
|
479
|
+
}
|
480
|
+
try (InputStream in = createInput("12345\r67\r89", 4, 9)) {
|
481
|
+
assertEquals(3, in.read(buffer));
|
482
|
+
assertEquals('6', buffer[0]);
|
483
|
+
assertEquals('7', buffer[1]);
|
484
|
+
assertEquals('\r', buffer[2]);
|
485
|
+
assertEquals(-1, in.read(buffer));
|
486
|
+
}
|
487
|
+
try (InputStream in = createInput("12345\r67\r89", 4, 9)) {
|
488
|
+
assertEquals(3, in.read(buffer, 0, 3));
|
489
|
+
assertEquals('6', buffer[0]);
|
490
|
+
assertEquals('7', buffer[1]);
|
491
|
+
assertEquals('\r', buffer[2]);
|
492
|
+
assertEquals(-1, in.read(buffer));
|
493
|
+
}
|
494
|
+
// \rの直後から
|
495
|
+
try (InputStream in = createInput("12345\r67\r89", 9, 11)) {
|
496
|
+
assertEquals('8', in.read());
|
497
|
+
assertEquals('9', in.read());
|
498
|
+
assertEquals(-1, in.read());
|
499
|
+
}
|
500
|
+
try (InputStream in = createInput("12345\r67\r89", 9, 11)) {
|
501
|
+
assertEquals(2, in.read(buffer));
|
502
|
+
assertEquals('8', buffer[0]);
|
503
|
+
assertEquals('9', buffer[1]);
|
504
|
+
}
|
505
|
+
|
506
|
+
// \rの直前まで
|
507
|
+
try (InputStream in = createInput("12345\r67\r89", 4, 8)) {
|
508
|
+
assertEquals('6', in.read());
|
509
|
+
assertEquals('7', in.read());
|
510
|
+
assertEquals('\r', in.read());
|
511
|
+
assertEquals(-1, in.read());
|
512
|
+
}
|
513
|
+
try (InputStream in = createInput("12345\r67\r89", 4, 8)) {
|
514
|
+
assertEquals(3, in.read(buffer));
|
515
|
+
assertEquals('6', buffer[0]);
|
516
|
+
assertEquals('7', buffer[1]);
|
517
|
+
assertEquals('\r', buffer[2]);
|
518
|
+
}
|
519
|
+
|
520
|
+
// \rの直前から
|
521
|
+
try (InputStream in = createInput("12345\r67\r89", 8, 11)) {
|
522
|
+
assertEquals('8', in.read());
|
523
|
+
assertEquals('9', in.read());
|
524
|
+
assertEquals(-1, in.read());
|
525
|
+
}
|
526
|
+
try (InputStream in = createInput("12345\r67\r89", 8, 11)) {
|
527
|
+
assertEquals(2, in.read(buffer));
|
528
|
+
assertEquals('8', buffer[0]);
|
529
|
+
assertEquals('9', buffer[1]);
|
530
|
+
}
|
531
|
+
|
532
|
+
// \rで終わる(最後まで)
|
533
|
+
try (InputStream in = createInput("12345\r67\r", 5, 9)) {
|
534
|
+
assertEquals('6', in.read());
|
535
|
+
assertEquals('7', in.read());
|
536
|
+
assertEquals('\r', in.read());
|
537
|
+
assertEquals(-1, in.read());
|
538
|
+
}
|
539
|
+
try (InputStream in = createInput("12345\r67\r", 5, 9)) {
|
540
|
+
assertEquals(3, in.read(buffer));
|
541
|
+
assertEquals('6', buffer[0]);
|
542
|
+
assertEquals('7', buffer[1]);
|
543
|
+
assertEquals('\r', buffer[2]);
|
544
|
+
}
|
545
|
+
|
546
|
+
// \rで終わる(直前まで)
|
547
|
+
try (InputStream in = createInput("12345\r67\r", 5, 8)) {
|
548
|
+
assertEquals('6', in.read());
|
549
|
+
assertEquals('7', in.read());
|
550
|
+
assertEquals('\r', in.read());
|
551
|
+
assertEquals(-1, in.read());
|
552
|
+
}
|
553
|
+
try (InputStream in = createInput("12345\r67\r", 5, 8)) {
|
554
|
+
assertEquals(3, in.read(buffer));
|
555
|
+
assertEquals('6', buffer[0]);
|
556
|
+
assertEquals('7', buffer[1]);
|
557
|
+
assertEquals('\r', buffer[2]);
|
558
|
+
}
|
559
|
+
}
|
560
|
+
|
561
|
+
private InputStream createInput(String s, int start, int end)
|
562
|
+
{
|
563
|
+
try {
|
564
|
+
return new PartialFileInputStream(new ByteArrayInputStream(s.getBytes("UTF-8")), start, end);
|
565
|
+
} catch (UnsupportedEncodingException e) {
|
566
|
+
throw new RuntimeException(e);
|
567
|
+
}
|
568
|
+
}
|
569
|
+
|
570
|
+
}
|