embulk 0.1.0

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.
Files changed (204) hide show
  1. checksums.yaml +15 -0
  2. data/.gitignore +13 -0
  3. data/Gemfile +3 -0
  4. data/Gemfile.lock +33 -0
  5. data/README.md +117 -0
  6. data/Rakefile +58 -0
  7. data/bin/embulk +63 -0
  8. data/build.gradle +149 -0
  9. data/embulk-cli/build.gradle +6 -0
  10. data/embulk-cli/pom.xml +94 -0
  11. data/embulk-cli/src/main/java/org/embulk/cli/Main.java +15 -0
  12. data/embulk-core/build.gradle +6 -0
  13. data/embulk-core/pom.xml +143 -0
  14. data/embulk-core/src/main/java/org/embulk/EmbulkService.java +39 -0
  15. data/embulk-core/src/main/java/org/embulk/command/Runner.java +199 -0
  16. data/embulk-core/src/main/java/org/embulk/command/TablePrinter.java +119 -0
  17. data/embulk-core/src/main/java/org/embulk/config/CommitReport.java +26 -0
  18. data/embulk-core/src/main/java/org/embulk/config/Config.java +15 -0
  19. data/embulk-core/src/main/java/org/embulk/config/ConfigDefault.java +15 -0
  20. data/embulk-core/src/main/java/org/embulk/config/ConfigException.java +20 -0
  21. data/embulk-core/src/main/java/org/embulk/config/ConfigLoader.java +83 -0
  22. data/embulk-core/src/main/java/org/embulk/config/ConfigSource.java +28 -0
  23. data/embulk-core/src/main/java/org/embulk/config/DataSource.java +35 -0
  24. data/embulk-core/src/main/java/org/embulk/config/DataSourceImpl.java +208 -0
  25. data/embulk-core/src/main/java/org/embulk/config/DataSourceSerDe.java +80 -0
  26. data/embulk-core/src/main/java/org/embulk/config/GenericTypeReference.java +20 -0
  27. data/embulk-core/src/main/java/org/embulk/config/ModelManager.java +125 -0
  28. data/embulk-core/src/main/java/org/embulk/config/NextConfig.java +26 -0
  29. data/embulk-core/src/main/java/org/embulk/config/Task.java +10 -0
  30. data/embulk-core/src/main/java/org/embulk/config/TaskInvocationHandler.java +180 -0
  31. data/embulk-core/src/main/java/org/embulk/config/TaskSerDe.java +343 -0
  32. data/embulk-core/src/main/java/org/embulk/config/TaskSource.java +28 -0
  33. data/embulk-core/src/main/java/org/embulk/config/TaskValidationException.java +37 -0
  34. data/embulk-core/src/main/java/org/embulk/config/TaskValidator.java +24 -0
  35. data/embulk-core/src/main/java/org/embulk/exec/ExecModule.java +45 -0
  36. data/embulk-core/src/main/java/org/embulk/exec/ExecuteInterruptedException.java +10 -0
  37. data/embulk-core/src/main/java/org/embulk/exec/ExecuteResult.java +19 -0
  38. data/embulk-core/src/main/java/org/embulk/exec/ExtensionServiceLoaderModule.java +43 -0
  39. data/embulk-core/src/main/java/org/embulk/exec/ForSystemConfig.java +16 -0
  40. data/embulk-core/src/main/java/org/embulk/exec/GuessExecutor.java +307 -0
  41. data/embulk-core/src/main/java/org/embulk/exec/LocalExecutor.java +274 -0
  42. data/embulk-core/src/main/java/org/embulk/exec/LoggerProvider.java +30 -0
  43. data/embulk-core/src/main/java/org/embulk/exec/NoSampleException.java +10 -0
  44. data/embulk-core/src/main/java/org/embulk/exec/PooledBufferAllocator.java +58 -0
  45. data/embulk-core/src/main/java/org/embulk/exec/PreviewExecutor.java +138 -0
  46. data/embulk-core/src/main/java/org/embulk/exec/PreviewResult.java +27 -0
  47. data/embulk-core/src/main/java/org/embulk/exec/PreviewedNoticeError.java +17 -0
  48. data/embulk-core/src/main/java/org/embulk/exec/SamplingParserPlugin.java +116 -0
  49. data/embulk-core/src/main/java/org/embulk/exec/SystemConfigModule.java +24 -0
  50. data/embulk-core/src/main/java/org/embulk/jruby/JRubyPluginSource.java +69 -0
  51. data/embulk-core/src/main/java/org/embulk/jruby/JRubyScriptingModule.java +100 -0
  52. data/embulk-core/src/main/java/org/embulk/plugin/BuiltinPluginSourceModule.java +17 -0
  53. data/embulk-core/src/main/java/org/embulk/plugin/InjectedPluginSource.java +92 -0
  54. data/embulk-core/src/main/java/org/embulk/plugin/PluginManager.java +34 -0
  55. data/embulk-core/src/main/java/org/embulk/plugin/PluginSource.java +6 -0
  56. data/embulk-core/src/main/java/org/embulk/plugin/PluginSourceNotMatchException.java +19 -0
  57. data/embulk-core/src/main/java/org/embulk/plugin/PluginType.java +47 -0
  58. data/embulk-core/src/main/java/org/embulk/plugin/SetThreadContextClassLoader.java +19 -0
  59. data/embulk-core/src/main/java/org/embulk/spi/Buffer.java +113 -0
  60. data/embulk-core/src/main/java/org/embulk/spi/BufferAllocator.java +8 -0
  61. data/embulk-core/src/main/java/org/embulk/spi/Column.java +92 -0
  62. data/embulk-core/src/main/java/org/embulk/spi/ColumnConfig.java +79 -0
  63. data/embulk-core/src/main/java/org/embulk/spi/DecoderPlugin.java +16 -0
  64. data/embulk-core/src/main/java/org/embulk/spi/EncoderPlugin.java +16 -0
  65. data/embulk-core/src/main/java/org/embulk/spi/Exec.java +76 -0
  66. data/embulk-core/src/main/java/org/embulk/spi/ExecAction.java +6 -0
  67. data/embulk-core/src/main/java/org/embulk/spi/ExecSession.java +105 -0
  68. data/embulk-core/src/main/java/org/embulk/spi/Extension.java +42 -0
  69. data/embulk-core/src/main/java/org/embulk/spi/FileInput.java +11 -0
  70. data/embulk-core/src/main/java/org/embulk/spi/FileInputPlugin.java +19 -0
  71. data/embulk-core/src/main/java/org/embulk/spi/FileInputRunner.java +113 -0
  72. data/embulk-core/src/main/java/org/embulk/spi/FileOutput.java +13 -0
  73. data/embulk-core/src/main/java/org/embulk/spi/FileOutputPlugin.java +20 -0
  74. data/embulk-core/src/main/java/org/embulk/spi/FileOutputRunner.java +167 -0
  75. data/embulk-core/src/main/java/org/embulk/spi/FormatterPlugin.java +18 -0
  76. data/embulk-core/src/main/java/org/embulk/spi/GuessPlugin.java +9 -0
  77. data/embulk-core/src/main/java/org/embulk/spi/InputPlugin.java +20 -0
  78. data/embulk-core/src/main/java/org/embulk/spi/OutputPlugin.java +21 -0
  79. data/embulk-core/src/main/java/org/embulk/spi/Page.java +45 -0
  80. data/embulk-core/src/main/java/org/embulk/spi/PageBuilder.java +327 -0
  81. data/embulk-core/src/main/java/org/embulk/spi/PageFormat.java +47 -0
  82. data/embulk-core/src/main/java/org/embulk/spi/PageOutput.java +11 -0
  83. data/embulk-core/src/main/java/org/embulk/spi/PageReader.java +227 -0
  84. data/embulk-core/src/main/java/org/embulk/spi/ParserPlugin.java +17 -0
  85. data/embulk-core/src/main/java/org/embulk/spi/Schema.java +101 -0
  86. data/embulk-core/src/main/java/org/embulk/spi/SchemaConfig.java +52 -0
  87. data/embulk-core/src/main/java/org/embulk/spi/SchemaVisitor.java +14 -0
  88. data/embulk-core/src/main/java/org/embulk/spi/Transactional.java +10 -0
  89. data/embulk-core/src/main/java/org/embulk/spi/TransactionalFileInput.java +17 -0
  90. data/embulk-core/src/main/java/org/embulk/spi/TransactionalFileOutput.java +19 -0
  91. data/embulk-core/src/main/java/org/embulk/spi/TransactionalPageOutput.java +17 -0
  92. data/embulk-core/src/main/java/org/embulk/spi/time/DateTimeZoneSerDe.java +57 -0
  93. data/embulk-core/src/main/java/org/embulk/spi/time/JRubyTimeParserHelper.java +8 -0
  94. data/embulk-core/src/main/java/org/embulk/spi/time/JRubyTimeParserHelperFactory.java +6 -0
  95. data/embulk-core/src/main/java/org/embulk/spi/time/Timestamp.java +159 -0
  96. data/embulk-core/src/main/java/org/embulk/spi/time/TimestampFormat.java +98 -0
  97. data/embulk-core/src/main/java/org/embulk/spi/time/TimestampFormatter.java +55 -0
  98. data/embulk-core/src/main/java/org/embulk/spi/time/TimestampParseException.java +6 -0
  99. data/embulk-core/src/main/java/org/embulk/spi/time/TimestampParser.java +60 -0
  100. data/embulk-core/src/main/java/org/embulk/spi/time/TimestampSerDe.java +50 -0
  101. data/embulk-core/src/main/java/org/embulk/spi/type/AbstractType.java +55 -0
  102. data/embulk-core/src/main/java/org/embulk/spi/type/BooleanType.java +12 -0
  103. data/embulk-core/src/main/java/org/embulk/spi/type/DoubleType.java +12 -0
  104. data/embulk-core/src/main/java/org/embulk/spi/type/LongType.java +12 -0
  105. data/embulk-core/src/main/java/org/embulk/spi/type/StringType.java +12 -0
  106. data/embulk-core/src/main/java/org/embulk/spi/type/TimestampType.java +39 -0
  107. data/embulk-core/src/main/java/org/embulk/spi/type/Type.java +15 -0
  108. data/embulk-core/src/main/java/org/embulk/spi/type/TypeDeserializer.java +47 -0
  109. data/embulk-core/src/main/java/org/embulk/spi/type/Types.java +14 -0
  110. data/embulk-core/src/main/java/org/embulk/spi/util/CharsetSerDe.java +55 -0
  111. data/embulk-core/src/main/java/org/embulk/spi/util/Decoders.java +81 -0
  112. data/embulk-core/src/main/java/org/embulk/spi/util/Encoders.java +81 -0
  113. data/embulk-core/src/main/java/org/embulk/spi/util/FileInputInputStream.java +110 -0
  114. data/embulk-core/src/main/java/org/embulk/spi/util/FileOutputOutputStream.java +94 -0
  115. data/embulk-core/src/main/java/org/embulk/spi/util/InputStreamFileInput.java +111 -0
  116. data/embulk-core/src/main/java/org/embulk/spi/util/Inputs.java +74 -0
  117. data/embulk-core/src/main/java/org/embulk/spi/util/LineDecoder.java +118 -0
  118. data/embulk-core/src/main/java/org/embulk/spi/util/LineEncoder.java +109 -0
  119. data/embulk-core/src/main/java/org/embulk/spi/util/ListFileInput.java +52 -0
  120. data/embulk-core/src/main/java/org/embulk/spi/util/Newline.java +38 -0
  121. data/embulk-core/src/main/java/org/embulk/spi/util/PagePrinter.java +102 -0
  122. data/embulk-core/src/main/java/org/embulk/spi/util/Pages.java +139 -0
  123. data/embulk-core/src/test/java/org/embulk/EmbulkTestRuntime.java +110 -0
  124. data/embulk-core/src/test/java/org/embulk/GuiceBinder.java +72 -0
  125. data/embulk-core/src/test/java/org/embulk/RandomManager.java +53 -0
  126. data/embulk-core/src/test/java/org/embulk/TestPluginSourceModule.java +23 -0
  127. data/embulk-core/src/test/java/org/embulk/TestUtilityModule.java +17 -0
  128. data/embulk-core/src/test/java/org/embulk/config/TestConfigSource.java +114 -0
  129. data/embulk-core/src/test/java/org/embulk/config/TestTaskSource.java +70 -0
  130. data/embulk-core/src/test/java/org/embulk/plugin/MockPluginSource.java +57 -0
  131. data/embulk-core/src/test/java/org/embulk/plugin/TestPluginType.java +18 -0
  132. data/embulk-core/src/test/java/org/embulk/spi/MockFileOutput.java +63 -0
  133. data/embulk-core/src/test/java/org/embulk/spi/MockFormatterPlugin.java +101 -0
  134. data/embulk-core/src/test/java/org/embulk/spi/MockParserPlugin.java +73 -0
  135. data/embulk-core/src/test/java/org/embulk/spi/PageTestUtils.java +78 -0
  136. data/embulk-core/src/test/java/org/embulk/spi/TestFileInputInputStream.java +67 -0
  137. data/embulk-core/src/test/java/org/embulk/spi/TestFileInputRunner.java +180 -0
  138. data/embulk-core/src/test/java/org/embulk/spi/TestFileOutputRunner.java +192 -0
  139. data/embulk-core/src/test/java/org/embulk/spi/TestInputStreamFileInput.java +188 -0
  140. data/embulk-core/src/test/java/org/embulk/spi/TestPageBuilderReader.java +301 -0
  141. data/embulk-core/src/test/java/org/embulk/spi/time/TestTimestamp.java +116 -0
  142. data/embulk-core/src/test/java/org/embulk/spi/time/TestTimestampFormatterParser.java +52 -0
  143. data/embulk-core/src/test/java/org/embulk/spi/type/TestTypeSerDe.java +45 -0
  144. data/embulk-core/src/test/java/org/embulk/spi/util/TestLineDecoder.java +132 -0
  145. data/embulk-core/src/test/java/org/embulk/spi/util/TestLineEncoder.java +123 -0
  146. data/embulk-standards/build.gradle +6 -0
  147. data/embulk-standards/pom.xml +68 -0
  148. data/embulk-standards/src/main/java/org/embulk/standards/CsvFormatterPlugin.java +158 -0
  149. data/embulk-standards/src/main/java/org/embulk/standards/CsvParserPlugin.java +233 -0
  150. data/embulk-standards/src/main/java/org/embulk/standards/CsvTokenizer.java +355 -0
  151. data/embulk-standards/src/main/java/org/embulk/standards/GzipFileDecoderPlugin.java +55 -0
  152. data/embulk-standards/src/main/java/org/embulk/standards/GzipFileEncoderPlugin.java +39 -0
  153. data/embulk-standards/src/main/java/org/embulk/standards/LocalFileInputPlugin.java +138 -0
  154. data/embulk-standards/src/main/java/org/embulk/standards/LocalFileOutputPlugin.java +128 -0
  155. data/embulk-standards/src/main/java/org/embulk/standards/NullOutputPlugin.java +46 -0
  156. data/embulk-standards/src/main/java/org/embulk/standards/S3FileInputPlugin.java +238 -0
  157. data/embulk-standards/src/main/java/org/embulk/standards/StandardPluginExtension.java +16 -0
  158. data/embulk-standards/src/main/java/org/embulk/standards/StandardPluginModule.java +44 -0
  159. data/embulk-standards/src/main/java/org/embulk/standards/StdoutOutputPlugin.java +71 -0
  160. data/embulk-standards/src/main/resources/META-INF/services/org.embulk.spi.Extension +1 -0
  161. data/embulk-standards/src/test/java/org/embulk/standards/TestCsvParserPlugin.java +69 -0
  162. data/embulk-standards/src/test/java/org/embulk/standards/TestCsvTokenizer.java +291 -0
  163. data/embulk-standards/src/test/java/org/embulk/standards/TestS3FileInputPlugin.java +43 -0
  164. data/embulk.gemspec +27 -0
  165. data/examples/config.yml +34 -0
  166. data/examples/csv/sample.csv.gz +0 -0
  167. data/gradle/wrapper/gradle-wrapper.jar +0 -0
  168. data/gradle/wrapper/gradle-wrapper.properties +6 -0
  169. data/gradlew +164 -0
  170. data/gradlew.bat +90 -0
  171. data/lib/embulk.rb +16 -0
  172. data/lib/embulk/buffer.rb +17 -0
  173. data/lib/embulk/column.rb +47 -0
  174. data/lib/embulk/command/embulk.rb +39 -0
  175. data/lib/embulk/command/embulk_example.rb +32 -0
  176. data/lib/embulk/command/embulk_generate_bin.rb +62 -0
  177. data/lib/embulk/command/embulk_run.rb +243 -0
  178. data/lib/embulk/data/bundle/.bundle/config +3 -0
  179. data/lib/embulk/data/bundle/Gemfile +31 -0
  180. data/lib/embulk/data/bundle/Gemfile.lock +8 -0
  181. data/lib/embulk/data/bundle/embulk/input_example.rb +40 -0
  182. data/lib/embulk/data/bundle/embulk/output_example.rb +51 -0
  183. data/lib/embulk/data_source.rb +66 -0
  184. data/lib/embulk/error.rb +5 -0
  185. data/lib/embulk/guess_charset.rb +26 -0
  186. data/lib/embulk/guess_csv.rb +195 -0
  187. data/lib/embulk/guess_gzip.rb +18 -0
  188. data/lib/embulk/guess_newline.rb +20 -0
  189. data/lib/embulk/guess_plugin.rb +113 -0
  190. data/lib/embulk/input_plugin.rb +53 -0
  191. data/lib/embulk/java/bootstrap.rb +12 -0
  192. data/lib/embulk/java/imports.rb +26 -0
  193. data/lib/embulk/java/time_helper.rb +77 -0
  194. data/lib/embulk/output_plugin.rb +104 -0
  195. data/lib/embulk/page.rb +28 -0
  196. data/lib/embulk/page_builder.rb +22 -0
  197. data/lib/embulk/plugin.rb +152 -0
  198. data/lib/embulk/plugin_registry.rb +70 -0
  199. data/lib/embulk/schema.rb +85 -0
  200. data/lib/embulk/time_format_guess.rb +331 -0
  201. data/lib/embulk/version.rb +3 -0
  202. data/pom.xml +533 -0
  203. data/settings.gradle +5 -0
  204. metadata +370 -0
@@ -0,0 +1,116 @@
1
+ package org.embulk.spi.time;
2
+
3
+ import static org.junit.Assert.assertEquals;
4
+ import static org.junit.Assert.assertFalse;
5
+
6
+ import org.junit.Test;
7
+
8
+ public class TestTimestamp
9
+ {
10
+ @Test
11
+ public void testEqualsToTimestamp()
12
+ {
13
+ assertEqualsMethods(Timestamp.ofEpochSecond(0), Timestamp.ofEpochSecond(0));
14
+ assertEqualsMethods(Timestamp.ofEpochSecond(10), Timestamp.ofEpochSecond(10));
15
+ assertEqualsMethods(Timestamp.ofEpochSecond(10, 2), Timestamp.ofEpochSecond(10, 2));
16
+ }
17
+
18
+ private void assertEqualsMethods(Timestamp t1, Timestamp t2)
19
+ {
20
+ assertEquals(t1, t2);
21
+ assertEquals(t1.hashCode(), t2.hashCode());
22
+ assertEquals(0, t1.compareTo(t2));
23
+ }
24
+
25
+ @Test
26
+ public void testNotEqualsToTimestamp()
27
+ {
28
+ assertFalse(Timestamp.ofEpochSecond(0).equals(Timestamp.ofEpochSecond(1)));
29
+ assertFalse(Timestamp.ofEpochSecond(10).equals(Timestamp.ofEpochSecond(10, 2)));
30
+ assertFalse(Timestamp.ofEpochSecond(10, 2).equals(Timestamp.ofEpochSecond(20, 2)));
31
+ }
32
+
33
+ @Test
34
+ public void testEqualsToNull()
35
+ {
36
+ assertFalse(Timestamp.ofEpochSecond(0).equals(null));
37
+ assertFalse(Timestamp.ofEpochSecond(1, 2).equals(null));
38
+ }
39
+
40
+ @Test
41
+ public void testEqualsOtherClass()
42
+ {
43
+ assertFalse(Timestamp.ofEpochSecond(0).equals(new Object()));
44
+ assertFalse(Timestamp.ofEpochSecond(1, 2).equals("other"));
45
+ }
46
+
47
+ @Test
48
+ public void testAdjustMillisToNanos()
49
+ {
50
+ Timestamp t = Timestamp.ofEpochMilli(3); // 3 msec = 3_000 usec == 3_000_000 nsec
51
+ assertEquals(0L, t.getEpochSecond());
52
+ assertEquals(3_000_000, t.getNano());
53
+ }
54
+
55
+ @Test
56
+ public void testAdjustMillisToSeconds()
57
+ {
58
+ Timestamp t = Timestamp.ofEpochMilli(3_000); // 3_000 msec = 3 sec
59
+ assertEquals(3L, t.getEpochSecond());
60
+ assertEquals(0, t.getNano());
61
+ }
62
+
63
+ @Test
64
+ public void testAdjustNano()
65
+ {
66
+ Timestamp t = Timestamp.ofEpochSecond(0, 1_000_000_000); // 1_000_000_000 nsec = 1_000_000 usec = 1_000 msec = 1 sec
67
+ assertEquals(1L, t.getEpochSecond());
68
+ assertEquals(0, t.getNano());
69
+ }
70
+
71
+ @Test
72
+ public void testCompareTo()
73
+ {
74
+ assertEquals(-1, Timestamp.ofEpochSecond(3).compareTo(Timestamp.ofEpochSecond(4)));
75
+ assertEquals(-1, Timestamp.ofEpochSecond(3).compareTo(Timestamp.ofEpochSecond(3, 4)));
76
+ assertEquals( 1, Timestamp.ofEpochSecond(4).compareTo(Timestamp.ofEpochSecond(3)));
77
+ assertEquals( 1, Timestamp.ofEpochSecond(3, 4).compareTo(Timestamp.ofEpochSecond(3)));
78
+ }
79
+
80
+ @Test
81
+ public void testToString()
82
+ {
83
+ assertEquals("1970-01-01 00:00:00 UTC", Timestamp.ofEpochSecond(0).toString());
84
+ assertEquals("2015-01-19 07:36:10 UTC", Timestamp.ofEpochSecond(1421652970).toString());
85
+ assertEquals("2015-01-19 07:36:10.100 UTC", Timestamp.ofEpochSecond(1421652970, 100*1000*1000).toString());
86
+ assertEquals("2015-01-19 07:36:10.120 UTC", Timestamp.ofEpochSecond(1421652970, 120*1000*1000).toString());
87
+ assertEquals("2015-01-19 07:36:10.123 UTC", Timestamp.ofEpochSecond(1421652970, 123*1000*1000).toString());
88
+ assertEquals("2015-01-19 07:36:10.123400 UTC", Timestamp.ofEpochSecond(1421652970, 123400*1000).toString());
89
+ assertEquals("2015-01-19 07:36:10.123450 UTC", Timestamp.ofEpochSecond(1421652970, 123450*1000).toString());
90
+ assertEquals("2015-01-19 07:36:10.123456 UTC", Timestamp.ofEpochSecond(1421652970, 123456*1000).toString());
91
+ assertEquals("2015-01-19 07:36:10.123456700 UTC", Timestamp.ofEpochSecond(1421652970, 123456700).toString());
92
+ assertEquals("2015-01-19 07:36:10.123456780 UTC", Timestamp.ofEpochSecond(1421652970, 123456780).toString());
93
+ assertEquals("2015-01-19 07:36:10.123456789 UTC", Timestamp.ofEpochSecond(1421652970, 123456789).toString());
94
+ }
95
+
96
+ @Test
97
+ public void testFromString()
98
+ {
99
+ checkToStringFromString(Timestamp.ofEpochSecond(0));
100
+ checkToStringFromString(Timestamp.ofEpochSecond(1421652970));
101
+ checkToStringFromString(Timestamp.ofEpochSecond(1421652970, 100*1000*1000));
102
+ checkToStringFromString(Timestamp.ofEpochSecond(1421652970, 120*1000*1000));
103
+ checkToStringFromString(Timestamp.ofEpochSecond(1421652970, 123*1000*1000));
104
+ checkToStringFromString(Timestamp.ofEpochSecond(1421652970, 123400*1000));
105
+ checkToStringFromString(Timestamp.ofEpochSecond(1421652970, 123450*1000));
106
+ checkToStringFromString(Timestamp.ofEpochSecond(1421652970, 123456*1000));
107
+ checkToStringFromString(Timestamp.ofEpochSecond(1421652970, 123456700));
108
+ checkToStringFromString(Timestamp.ofEpochSecond(1421652970, 123456780));
109
+ checkToStringFromString(Timestamp.ofEpochSecond(1421652970, 123456789));
110
+ }
111
+
112
+ private void checkToStringFromString(Timestamp timestamp)
113
+ {
114
+ assertEquals(timestamp, Timestamp.fromString(timestamp.toString()));
115
+ }
116
+ }
@@ -0,0 +1,52 @@
1
+ package org.embulk.spi.time;
2
+
3
+ import org.junit.Rule;
4
+ import org.junit.Before;
5
+ import org.junit.Test;
6
+ import static org.junit.Assert.assertEquals;
7
+ import org.embulk.config.Config;
8
+ import org.embulk.config.ConfigSource;
9
+ import org.embulk.spi.Exec;
10
+ import org.embulk.EmbulkTestRuntime;
11
+
12
+ public class TestTimestampFormatterParser
13
+ {
14
+ @Rule
15
+ public EmbulkTestRuntime runtime = new EmbulkTestRuntime();
16
+
17
+ private interface FormatterTestTask
18
+ extends TimestampFormatter.FormatterTask
19
+ {
20
+ @Config("time_format")
21
+ public TimestampFormat getTimeFormat();
22
+ }
23
+
24
+ private interface ParserTestTask
25
+ extends TimestampParser.ParserTask
26
+ {
27
+ @Config("time_format")
28
+ public TimestampFormat getTimeFormat();
29
+ }
30
+
31
+ @Test
32
+ public void testSimpleFormat() throws Exception
33
+ {
34
+ ConfigSource config = Exec.newConfigSource()
35
+ .set("time_format", "%Y-%m-%d %H:%M:%S %Z");
36
+ FormatterTestTask task = config.loadConfig(FormatterTestTask.class);
37
+
38
+ TimestampFormatter formatter = task.getTimeFormat().newFormatter(task);
39
+ assertEquals("2014-11-19 02:46:29 UTC", formatter.format(Timestamp.ofEpochSecond(1416365189)));
40
+ }
41
+
42
+ @Test
43
+ public void testSimpleParse() throws Exception
44
+ {
45
+ ConfigSource config = Exec.newConfigSource()
46
+ .set("time_format", "%Y-%m-%d %H:%M:%S %Z");
47
+ ParserTestTask task = config.loadConfig(ParserTestTask.class);
48
+
49
+ TimestampParser parser = task.getTimeFormat().newParser(task);
50
+ assertEquals(Timestamp.ofEpochSecond(1416365189), parser.parse("2014-11-19 02:46:29 UTC"));
51
+ }
52
+ }
@@ -0,0 +1,45 @@
1
+ package org.embulk.spi.type;
2
+
3
+ import org.junit.Rule;
4
+ import org.junit.Before;
5
+ import org.junit.Test;
6
+ import static org.junit.Assert.assertEquals;
7
+ import static org.junit.Assert.assertTrue;
8
+ import com.google.inject.Inject;
9
+ import com.fasterxml.jackson.annotation.JsonCreator;
10
+ import com.fasterxml.jackson.annotation.JsonProperty;
11
+ import org.embulk.EmbulkTestRuntime;
12
+
13
+ public class TestTypeSerDe
14
+ {
15
+ @Rule
16
+ public EmbulkTestRuntime runtime = new EmbulkTestRuntime();
17
+
18
+ private static class HasType
19
+ {
20
+ private Type type;
21
+ // TODO test TimestampType
22
+
23
+ @JsonCreator
24
+ public HasType(
25
+ @JsonProperty("type") Type type)
26
+ {
27
+ this.type = type;
28
+ }
29
+
30
+ @JsonProperty("type")
31
+ public Type getType()
32
+ {
33
+ return type;
34
+ }
35
+ }
36
+
37
+ @Test
38
+ public void testGetType()
39
+ {
40
+ HasType type = new HasType(StringType.STRING);
41
+ String json = runtime.getModelManager().writeObject(type);
42
+ HasType decoded = runtime.getModelManager().readObject(HasType.class, json);
43
+ assertTrue(StringType.STRING == decoded.getType());
44
+ }
45
+ }
@@ -0,0 +1,132 @@
1
+ package org.embulk.spi.util;
2
+
3
+ import java.util.List;
4
+ import java.util.ArrayList;
5
+ import java.nio.ByteBuffer;
6
+ import java.nio.charset.Charset;
7
+ import java.nio.charset.UnsupportedCharsetException;
8
+ import com.google.common.collect.ImmutableList;
9
+ import org.junit.Rule;
10
+ import org.junit.Before;
11
+ import org.junit.Test;
12
+ import static org.junit.Assert.assertEquals;
13
+ import org.embulk.config.ConfigSource;
14
+ import org.embulk.spi.Exec;
15
+ import org.embulk.spi.Buffer;
16
+ import org.embulk.spi.util.ListFileInput;
17
+ import org.embulk.EmbulkTestRuntime;
18
+
19
+ public class TestLineDecoder
20
+ {
21
+ @Rule
22
+ public EmbulkTestRuntime runtime = new EmbulkTestRuntime();
23
+
24
+ @Test
25
+ public void testDefaultValues()
26
+ {
27
+ ConfigSource config = Exec.newConfigSource();
28
+ LineDecoder.DecoderTask task = config.loadConfig(LineDecoder.DecoderTask.class);
29
+ assertEquals(Charset.forName("utf-8"), task.getCharset());
30
+ assertEquals(Newline.CRLF, task.getNewline());
31
+ }
32
+
33
+ @Test
34
+ public void testLoadConfig()
35
+ {
36
+ ConfigSource config = Exec.newConfigSource()
37
+ .set("charset", "utf-16")
38
+ .set("newline", "CRLF");
39
+ LineDecoder.DecoderTask task = config.loadConfig(LineDecoder.DecoderTask.class);
40
+ assertEquals(Charset.forName("utf-16"), task.getCharset());
41
+ assertEquals(Newline.CRLF, task.getNewline());
42
+ }
43
+
44
+ private static LineDecoder.DecoderTask getExampleConfig()
45
+ {
46
+ ConfigSource config = Exec.newConfigSource()
47
+ .set("charset", "utf-8")
48
+ .set("newline", "LF");
49
+ return config.loadConfig(LineDecoder.DecoderTask.class);
50
+ }
51
+
52
+ private static LineDecoder newDecoder(Charset charset, Newline newline, List<Buffer> buffers)
53
+ {
54
+ ListFileInput input = new ListFileInput(ImmutableList.of(buffers));
55
+ return new LineDecoder(input, getExampleConfig());
56
+ }
57
+
58
+ private static List<String> doDecode(Charset charset, Newline newline, List<Buffer> buffers)
59
+ {
60
+ ImmutableList.Builder<String> builder = ImmutableList.builder();
61
+ LineDecoder decoder = newDecoder(charset, newline, buffers);
62
+ decoder.nextFile();
63
+ while (true) {
64
+ String line = decoder.poll();
65
+ if (line == null) {
66
+ break;
67
+ }
68
+ builder.add(line);
69
+ }
70
+ return builder.build();
71
+ }
72
+
73
+ private static List<Buffer> bufferList(String charsetName, String... sources) throws UnsupportedCharsetException
74
+ {
75
+ Charset charset = Charset.forName(charsetName);
76
+
77
+ List<Buffer> buffers = new ArrayList<Buffer>();
78
+ for (String source : sources) {
79
+ ByteBuffer buffer = charset.encode(source);
80
+ buffers.add(Buffer.wrap(buffer.array(), 0, buffer.limit()));
81
+ }
82
+
83
+ return buffers;
84
+ }
85
+
86
+ @Test
87
+ public void testDecodeBasicAscii() throws Exception
88
+ {
89
+ List<String> decoded = doDecode(
90
+ Charset.forName("utf-8"), Newline.LF,
91
+ bufferList("utf-8", "test1\ntest2\ntest3\n"));
92
+ assertEquals(ImmutableList.of("test1", "test2", "test3"), decoded);
93
+ }
94
+
95
+ @Test
96
+ public void testDecodeBasicAsciiCRLF() throws Exception
97
+ {
98
+ List<String> decoded = doDecode(
99
+ Charset.forName("utf-8"), Newline.CRLF,
100
+ bufferList("utf-8", "test1\r\ntest2\r\ntest3\r\n"));
101
+ assertEquals(ImmutableList.of("test1", "test2", "test3"), decoded);
102
+ }
103
+
104
+ @Test
105
+ public void testDecodeBasicAsciiTail() throws Exception
106
+ {
107
+ List<String> decoded = doDecode(
108
+ Charset.forName("utf-8"), Newline.LF,
109
+ bufferList("utf-8", "test1"));
110
+ assertEquals(ImmutableList.of("test1"), decoded);
111
+ }
112
+
113
+ @Test
114
+ public void testDecodeChunksLF() throws Exception
115
+ {
116
+ List<String> decoded = doDecode(
117
+ Charset.forName("utf-8"), Newline.LF,
118
+ bufferList("utf-8", "t", "1", "\n", "t", "2"));
119
+ assertEquals(ImmutableList.of("t1", "t2"), decoded);
120
+ }
121
+
122
+ @Test
123
+ public void testDecodeChunksCRLF() throws Exception
124
+ {
125
+ List<String> decoded = doDecode(
126
+ Charset.forName("utf-8"), Newline.CRLF,
127
+ bufferList("utf-8", "t", "1", "\r\n", "t", "2", "\r", "\n", "t3"));
128
+ assertEquals(ImmutableList.of("t1", "t2", "t3"), decoded);
129
+ }
130
+
131
+ // TODO test multibytes
132
+ }
@@ -0,0 +1,123 @@
1
+ package org.embulk.spi.util;
2
+
3
+ import java.util.List;
4
+ import java.util.ArrayList;
5
+ import java.util.Iterator;
6
+ import java.io.UnsupportedEncodingException;
7
+ import java.nio.ByteBuffer;
8
+ import java.nio.charset.Charset;
9
+ import java.nio.charset.UnsupportedCharsetException;
10
+ import com.google.common.collect.ImmutableList;
11
+ import org.junit.Rule;
12
+ import org.junit.Before;
13
+ import org.junit.Test;
14
+ import static org.junit.Assert.assertEquals;
15
+ import static org.junit.Assert.assertFalse;
16
+ import org.embulk.config.ConfigSource;
17
+ import org.embulk.spi.Buffer;
18
+ import org.embulk.spi.Exec;
19
+ import org.embulk.spi.MockFileOutput;
20
+ import org.embulk.spi.FileOutput;
21
+ import org.embulk.EmbulkTestRuntime;
22
+
23
+ public class TestLineEncoder
24
+ {
25
+ @Rule
26
+ public EmbulkTestRuntime runtime = new EmbulkTestRuntime();
27
+
28
+ private LineEncoder newEncoder(String charset, String newline,
29
+ FileOutput output) throws Exception
30
+ {
31
+ ConfigSource config = Exec.newConfigSource()
32
+ .set("charset", charset)
33
+ .set("newline", newline);
34
+ return new LineEncoder(output, config.loadConfig(LineEncoder.EncoderTask.class));
35
+ }
36
+
37
+ @Test
38
+ public void testAddLine() throws Exception
39
+ {
40
+ try (MockFileOutput output = new MockFileOutput()) {
41
+ LineEncoder encoder = newEncoder("utf-8", "LF", output);
42
+ encoder.nextFile();
43
+ for (String line : new String[] { "abc", "日本語(Japanese)" }) {
44
+ encoder.addLine(line);
45
+ }
46
+ encoder.finish();
47
+ // TODO
48
+ //Iterator<Buffer> ite = output.getLastBuffers().iterator();
49
+ //assertEquals("abc", bufferToString(ite.next(), "utf-8"));
50
+ //assertEquals("\n", bufferToString(ite.next(), "utf-8"));
51
+ //assertEquals("日本語(Japanese)", bufferToString(ite.next(), "utf-8"));
52
+ //assertEquals("\n", bufferToString(ite.next(), "utf-8"));
53
+ //assertFalse(ite.hasNext());
54
+ }
55
+ }
56
+
57
+ @Test
58
+ public void testAddTextAddNewLine() throws Exception
59
+ {
60
+ try (MockFileOutput output = new MockFileOutput()) {
61
+ LineEncoder encoder = newEncoder("utf-8", "LF", output);
62
+ encoder.nextFile();
63
+ for (String line : new String[] { "abc", "日本語(Japanese)" }) {
64
+ encoder.addText(line);
65
+ encoder.addNewLine();
66
+ }
67
+ encoder.finish();
68
+ // TODO
69
+ //Iterator<Buffer> ite = output.getLastBuffers().iterator();
70
+ //assertEquals("abc", bufferToString(ite.next(), "utf-8"));
71
+ //assertEquals("\n", bufferToString(ite.next(), "utf-8"));
72
+ //assertEquals("日本語(Japanese)", bufferToString(ite.next(), "utf-8"));
73
+ //assertEquals("\n", bufferToString(ite.next(), "utf-8"));
74
+ //assertFalse(ite.hasNext());
75
+ }
76
+ }
77
+
78
+ @Test
79
+ public void testNewLine() throws Exception
80
+ {
81
+ try (MockFileOutput output = new MockFileOutput()) {
82
+ LineEncoder encoder = newEncoder("utf-8", "CRLF", output);
83
+ encoder.nextFile();
84
+ for (String line : new String[] { "abc", "日本語(Japanese)" }) {
85
+ encoder.addLine(line);
86
+ }
87
+ encoder.finish();
88
+ // TODO
89
+ //Iterator<Buffer> ite = output.getLastBuffers().iterator();
90
+ //assertEquals("abc", bufferToString(ite.next(), "utf-8"));
91
+ //assertEquals("\r\n", bufferToString(ite.next(), "utf-8"));
92
+ //assertEquals("日本語(Japanese)", bufferToString(ite.next(), "utf-8"));
93
+ //assertEquals("\r\n", bufferToString(ite.next(), "utf-8"));
94
+ //assertFalse(ite.hasNext());
95
+ }
96
+ }
97
+
98
+ @Test
99
+ public void testCharset() throws Exception
100
+ {
101
+ try (MockFileOutput output = new MockFileOutput()) {
102
+ LineEncoder encoder = newEncoder("MS932", "CR", output);
103
+ encoder.nextFile();
104
+ for (String line : new String[] { "abc", "日本語(Japanese)" }) {
105
+ encoder.addLine(line);
106
+ }
107
+ encoder.finish();
108
+ // TODO
109
+ //Iterator<Buffer> ite = output.getLastBuffers().iterator();
110
+ //assertEquals("abc", bufferToString(ite.next(), "MS932"));
111
+ //assertEquals("\r", bufferToString(ite.next(), "MS932"));
112
+ //assertEquals("日本語(Japanese)", bufferToString(ite.next(), "MS932"));
113
+ //assertEquals("\r", bufferToString(ite.next(), "MS932"));
114
+ //assertFalse(ite.hasNext());
115
+ }
116
+ }
117
+
118
+ private String bufferToString(Buffer buffer, String charset)
119
+ throws UnsupportedEncodingException
120
+ {
121
+ return new String(buffer.array(), buffer.offset(), buffer.limit(), charset);
122
+ }
123
+ }