/tst/org/diffkit/diff/sns/tst/TestSpreadSheetSource.groovy

http://diffkit.googlecode.com/ · Groovy · 205 lines · 163 code · 16 blank · 26 comment · 98 complexity · d26ab6e5b2987768a359e10528af6562 MD5 · raw file

  1. /**
  2. * Copyright 2010-2011 Joseph Panico
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. package org.diffkit.diff.sns.tst
  17. import groovy.util.GroovyTestCase;
  18. import java.sql.Time
  19. import java.sql.Timestamp
  20. import org.diffkit.diff.engine.DKColumnModel;
  21. import org.diffkit.diff.engine.DKTableModel
  22. import org.diffkit.diff.engine.DKColumnModel.Type
  23. import org.diffkit.diff.sns.DKSpreadSheetFileSource
  24. import org.diffkit.util.DKResourceUtil
  25. import org.diffkit.util.DKTimeUtil
  26. /**
  27. * @author jpanico
  28. */
  29. public class TestSpreadSheetSource extends GroovyTestCase {
  30. public void testReadHard() {
  31. def sourceFile = DKResourceUtil.findResourceAsFile('xcel_test.xls', this)
  32. println "sourceFile->$sourceFile"
  33. assert sourceFile
  34. def source = new DKSpreadSheetFileSource(sourceFile.absolutePath, 'Sheet1', null, null, null, true, true, false)
  35. source.open(null)
  36. def aRow = source.nextRow
  37. assert aRow
  38. assert aRow.class == Object[].class
  39. // first row should be ROW_NUM=2, because there is a header
  40. assert aRow[0] == 2
  41. source.nextRow
  42. source.nextRow
  43. aRow = source.nextRow
  44. assert aRow
  45. assert aRow[0] == 5
  46. assert aRow[0].class == Integer.class
  47. assert aRow[1] == -2222
  48. assert aRow[1].class == Long.class
  49. assert aRow[2] == ' '
  50. assert aRow[2].class == String.class
  51. assert aRow[3] == 0.0
  52. assert aRow[3].class == BigDecimal.class
  53. assert aRow[4] == 3.0
  54. assert aRow[4].class == BigDecimal.class
  55. assert aRow[5] == '-1.0'
  56. assert aRow[5].class == String.class
  57. // ????
  58. assert aRow[6].toString() == '31-Dec-1899'
  59. assert aRow[6].class == String.class
  60. assert aRow[7] == 14.2
  61. assert aRow[7].class == Double.class
  62. assert aRow[8] == 'FALSE'
  63. assert aRow[8].class == String.class
  64. assert ! source.nextRow
  65. assert ! source.nextRow
  66. assert source.lastIndex == 3
  67. }
  68. public void testReadEasy() {
  69. def sourceFile = DKResourceUtil.findResourceAsFile('xcel_test.xls', this)
  70. println "sourceFile->$sourceFile"
  71. assert sourceFile
  72. def source = new DKSpreadSheetFileSource(sourceFile.absolutePath, 'easy sheet', null, null, null, true, false, false)
  73. source.open(null)
  74. def aRow = source.nextRow
  75. assert aRow
  76. assert aRow.class == Object[].class
  77. assert aRow[0] == 1
  78. assert aRow[0].class == Integer.class
  79. assert aRow[1] == 'aaaa'
  80. assert aRow[1].class == String.class
  81. assert aRow[2] == 1111
  82. assert aRow[2].class == BigDecimal.class
  83. assert aRow[3] == DKTimeUtil.createDate( 2008, 0, 1)
  84. assert aRow[3].class == Date.class
  85. assert aRow[4] == 'zzzz'
  86. assert aRow[4].class == String.class
  87. assert aRow[5].toString() == '00:31:31'
  88. assert aRow[5].class == Time.class
  89. assert aRow[6] == 1234
  90. assert aRow[6].class == BigDecimal.class
  91. assert aRow[7] == 123456.78
  92. assert aRow[7].class == BigDecimal.class
  93. assert aRow[8] == 1234.5678
  94. assert aRow[8].class == BigDecimal.class
  95. assert aRow[9] == 1234.5678
  96. assert aRow[9].class == BigDecimal.class
  97. assert aRow[10].toString() == '2004-05-23 14:25:10.487'
  98. assert aRow[10].class == Timestamp.class
  99. assert aRow[11] == 'TRUE'
  100. assert aRow[11].class == String.class
  101. assert aRow[12] == 10
  102. assert aRow[12].class == Long.class
  103. assert aRow[13] == 12345
  104. assert aRow[13].class == BigDecimal.class
  105. assert aRow[14] == 'column14'
  106. assert aRow[14].class == String.class
  107. assert aRow[15] == 'column15'
  108. assert aRow[15].class == String.class
  109. assert aRow[16] == 'my clobby text'
  110. assert aRow[16].class == String.class
  111. assert source.lastIndex ==0
  112. (1..19).each { assert source.nextRow }
  113. assert ! source.nextRow
  114. assert source.lastIndex == 19
  115. }
  116. public void testModelColumns() {
  117. def sourceFile = DKResourceUtil.findResourceAsFile('xcel_test.xls', this)
  118. println "sourceFile->$sourceFile"
  119. assert sourceFile
  120. assert sourceFile.canRead()
  121. // explicitly specified sheet name happens to be first sheet, no model, with header
  122. def source = new DKSpreadSheetFileSource(sourceFile.absolutePath, 'Sheet1', null, null, null, true, true, false)
  123. def model = source.model
  124. assert model
  125. assert model.name == 'Sheet1'
  126. assert model.keyColumnNames == (String[])['<ROW_NUM>']
  127. assert model.columns.length == 9
  128. assert model.columns[0].name == '<ROW_NUM>'
  129. assert model.columns[0].type == Type.INTEGER
  130. assert model.columns[1].name == 'COLUMN1'
  131. assert model.columns[1].type == Type.INTEGER
  132. assert model.columns[2].name == 'COLUMN2'
  133. assert model.columns[2].type == Type.STRING
  134. assert model.columns[3].name == 'COLUMN3'
  135. assert model.columns[3].type == Type.DECIMAL
  136. assert model.columns[5].name == 'COLUMN5'
  137. assert model.columns[5].type == Type.MIXED
  138. assert model.columns[7].name == 'COLUMN7'
  139. assert model.columns[7].type == Type.REAL
  140. source.open(null)
  141. source.close(null)
  142. // no sheet name supplied, default sheet is first sheet (Sheet1)
  143. source = new DKSpreadSheetFileSource(sourceFile.absolutePath, null, null, null, null, true, true, false)
  144. model = source.model
  145. assert model
  146. assert model.name == 'Sheet1'
  147. // explicitly specified sheet name is not same as default, no header so get default header names
  148. source = new DKSpreadSheetFileSource(sourceFile.absolutePath, 'easy sheet', null, null, null, true, false, false)
  149. model = source.model
  150. assert model
  151. assert model.name == 'easy sheet'
  152. assert model.keyColumnNames == (String[])['<ROW_NUM>']
  153. assert model.columns.length == 17
  154. assert model.columns[0].name == '<ROW_NUM>'
  155. assert model.columns[0].type == Type.INTEGER
  156. assert model.columns[1].name == 'A'
  157. assert model.columns[1].type == Type.STRING
  158. assert model.columns[2].name == 'B'
  159. assert model.columns[2].type == Type.DECIMAL
  160. assert model.columns[3].name == 'C'
  161. assert model.columns[3].type == Type.DATE
  162. assert model.columns[5].name == 'E'
  163. assert model.columns[5].type == Type.TIME
  164. assert model.columns[10].name == 'J'
  165. assert model.columns[10].type == Type.TIMESTAMP
  166. assert model.columns[11].name == 'K'
  167. assert model.columns[11].type == Type.STRING
  168. // automatic Model extraction, but user-supplied key
  169. source = new DKSpreadSheetFileSource(sourceFile.absolutePath, 'Sheet1', null, (String[])['COLUMN1'], null, true, true, false)
  170. model = source.model
  171. assert model
  172. assert model.name == 'Sheet1'
  173. assert model.keyColumnNames == (String[])['COLUMN1']
  174. // NOTE that when have user-supplied key, the ROW_NUM is no longer included
  175. assert model.columns.length == 8
  176. // supply own model
  177. DKColumnModel col1 = [0, 'col1', DKColumnModel.Type.DECIMAL]
  178. DKColumnModel col2 = [1, 'col2', DKColumnModel.Type.STRING]
  179. DKTableModel myModel = ['myModel', (DKColumnModel[])[col1, col2], (int[])[0]]
  180. source = new DKSpreadSheetFileSource(sourceFile.absolutePath, 'Sheet1', myModel, null, null, true, true, false)
  181. model = source.model
  182. assert model
  183. assert model.name == 'myModel'
  184. assert model.keyColumnNames == (String[])['col1']
  185. assert model.columns.length == 2
  186. assert model.columns[0].name == 'col1'
  187. assert model.columns[1].name == 'col2'
  188. }
  189. }