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

http://diffkit.googlecode.com/ · Groovy · 557 lines · 481 code · 34 blank · 42 comment · 215 complexity · 645236107660d1daef46e94a96340520 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 java.sql.Time
  18. import java.sql.Timestamp;
  19. import groovy.util.GroovyTestCase;
  20. import org.diffkit.common.DKUserException
  21. import org.diffkit.diff.sns.DKPoiSheet
  22. import org.diffkit.diff.engine.DKColumnModel;
  23. import org.diffkit.diff.engine.DKTableModel
  24. import org.diffkit.diff.engine.DKColumnModel.Type;
  25. import org.diffkit.util.DKResourceUtil
  26. import org.diffkit.util.DKTimeUtil;
  27. /**
  28. * @author jpanico
  29. */
  30. public class TestPoiSheet extends GroovyTestCase {
  31. // isSorted = false, so Iterator should sort the rows on the simple key;
  32. // user defined model does not include ROW_NUM
  33. public void testSortHard() {
  34. DKColumnModel col1 = [0, 'COLUMN1', DKColumnModel.Type.INTEGER]
  35. DKColumnModel col2 = [1, 'COLUMN2', DKColumnModel.Type.STRING]
  36. DKColumnModel col3 = [2, 'COLUMN3', DKColumnModel.Type.DECIMAL]
  37. DKColumnModel col4 = [3, 'COLUMN4', DKColumnModel.Type.DECIMAL]
  38. DKColumnModel col5 = [4, 'COLUMN5', DKColumnModel.Type.MIXED]
  39. DKColumnModel col6 = [5, 'COLUMN6', DKColumnModel.Type.MIXED]
  40. DKColumnModel col7 = [6, 'COLUMN7', DKColumnModel.Type.REAL]
  41. DKColumnModel col8 = [7, 'COLUMN8', DKColumnModel.Type.STRING]
  42. DKColumnModel[] cols = [col1,col2,col3,col4,col5,col6,col7,col8]
  43. DKTableModel tableModel = ['MyModel', cols, (int[])[0]]
  44. assert !tableModel.hasRowNum()
  45. def sourceFile = DKResourceUtil.findResourceAsFile('xcel_test.xls', this)
  46. println "sourceFile->$sourceFile"
  47. assert sourceFile
  48. DKPoiSheet poiSheet = [sourceFile, "Sheet1", false, true, false]
  49. assert poiSheet.hasHeader()
  50. Iterator rowIterator = poiSheet.getRowIterator(tableModel)
  51. assert rowIterator
  52. assert rowIterator.hasNext()
  53. def aRow = rowIterator.next()
  54. assert aRow
  55. assert aRow[0] == -2222
  56. aRow = rowIterator.next()
  57. assert aRow[0] == -1111
  58. aRow = rowIterator.next()
  59. assert aRow[0] == 2222
  60. aRow = rowIterator.next()
  61. assert aRow[0] == 11111
  62. assert ! rowIterator.hasNext()
  63. }
  64. // isSorted = false, so Iterator should sort the rows on the simple key;
  65. // user defined model does not include ROW_NUM
  66. public void testSortMedium() {
  67. DKColumnModel col1 = [0, 'A', DKColumnModel.Type.STRING]
  68. DKColumnModel col2 = [1, 'B', DKColumnModel.Type.INTEGER]
  69. DKColumnModel col3 = [2, 'C', DKColumnModel.Type.DATE]
  70. DKColumnModel col4 = [3, 'D', DKColumnModel.Type.STRING]
  71. DKColumnModel col5 = [4, 'E', DKColumnModel.Type.TIME]
  72. DKColumnModel col6 = [5, 'F', DKColumnModel.Type.INTEGER]
  73. DKColumnModel col7 = [6, 'G', DKColumnModel.Type.DECIMAL]
  74. DKColumnModel col8 = [7, 'H', DKColumnModel.Type.DECIMAL]
  75. DKColumnModel col9 = [8, 'I', DKColumnModel.Type.DECIMAL]
  76. DKColumnModel col10 = [9, 'J', DKColumnModel.Type.TIMESTAMP]
  77. DKColumnModel col11 = [10, 'K', DKColumnModel.Type.STRING]
  78. DKColumnModel col12 = [12, 'L', DKColumnModel.Type.INTEGER]
  79. DKColumnModel col13 = [13, 'M', DKColumnModel.Type.INTEGER]
  80. DKColumnModel col14 = [14, 'N', DKColumnModel.Type.STRING]
  81. DKColumnModel col15 = [15, 'O', DKColumnModel.Type.STRING]
  82. DKColumnModel col16 = [16, 'P', DKColumnModel.Type.STRING]
  83. DKColumnModel[] cols = [col1,col2,col3,col4,col5,col6,col7,col8, col9, col10, col11, col12, col13,col14,col15,col16]
  84. DKTableModel tableModel = ['MyModel', cols, (int[])[0]]
  85. assert !tableModel.hasRowNum()
  86. def sourceFile = DKResourceUtil.findResourceAsFile('xcel_test.xls', this)
  87. println "sourceFile->$sourceFile"
  88. assert sourceFile
  89. DKPoiSheet poiSheet = [sourceFile, "easy sheet", false, false, false]
  90. Iterator rowIterator = poiSheet.getRowIterator(tableModel)
  91. assert rowIterator
  92. assert rowIterator.hasNext()
  93. def aRow = rowIterator.next()
  94. assert aRow
  95. assert aRow[0] == 'aaaa'
  96. aRow = rowIterator.next()
  97. assert aRow[0] == 'bbbb'
  98. (1..10).each { rowIterator.next()}
  99. aRow = rowIterator.next()
  100. assert aRow[0] == 'nnnn'
  101. (1..7).each { aRow = rowIterator.next()}
  102. assert aRow[0] == 'uuuu'
  103. assert ! rowIterator.hasNext()
  104. }
  105. // isSorted = false, so Iterator should sort the rows on ROW_NUM, which means
  106. // no change in ordering
  107. public void testSortEasy() {
  108. def sourceFile = DKResourceUtil.findResourceAsFile('xcel_test.xls', this)
  109. println "sourceFile->$sourceFile"
  110. assert sourceFile
  111. DKPoiSheet poiSheet = [sourceFile, "easy sheet", false, false, false]
  112. Iterator rowIterator = poiSheet.getRowIterator(poiSheet.createModelFromSheet())
  113. assert rowIterator
  114. assert rowIterator.hasNext()
  115. def aRow = rowIterator.next()
  116. assert aRow
  117. assert aRow[0] == 1
  118. aRow = rowIterator.next()
  119. assert aRow[0] == 2
  120. (1..10).each { rowIterator.next()}
  121. aRow = rowIterator.next()
  122. assert aRow[0] == 13
  123. (1..7).each { aRow = rowIterator.next()}
  124. assert aRow[0] == 20
  125. assert aRow[1] == 'uuuu'
  126. assert ! rowIterator.hasNext()
  127. }
  128. // read rows using RowIterator, based on model explicitly supplied by Unit.
  129. // There is no ROW_NUM col specified, so that column shouldn't show up.
  130. public void testRowIteratorWithModelEasy() {
  131. DKColumnModel col1 = [0, 'COLUMN1', DKColumnModel.Type.INTEGER]
  132. DKColumnModel col2 = [1, 'COLUMN2', DKColumnModel.Type.STRING]
  133. DKColumnModel col3 = [2, 'COLUMN3', DKColumnModel.Type.DECIMAL]
  134. DKColumnModel col4 = [3, 'COLUMN4', DKColumnModel.Type.DECIMAL]
  135. DKColumnModel col5 = [4, 'COLUMN5', DKColumnModel.Type.STRING]
  136. DKColumnModel col6 = [5, 'COLUMN6', DKColumnModel.Type.STRING]
  137. DKColumnModel col7 = [6, 'COLUMN7', DKColumnModel.Type.REAL]
  138. DKColumnModel col8 = [7, 'COLUMN8', DKColumnModel.Type.STRING]
  139. DKColumnModel[] cols = [col1,col2,col3,col4,col5,col6,col7,col8]
  140. DKTableModel tableModel = ['MyModel', cols, (int[])[0]]
  141. assert !tableModel.hasRowNum()
  142. def sourceFile = DKResourceUtil.findResourceAsFile('xcel_test.xls', this)
  143. println "sourceFile->$sourceFile"
  144. assert sourceFile
  145. DKPoiSheet poiSheet = [sourceFile, "Sheet1", true, true, false]
  146. Iterator rowIterator = poiSheet.getRowIterator(tableModel)
  147. assert rowIterator
  148. assert rowIterator.hasNext()
  149. def aRow = rowIterator.next()
  150. assert aRow
  151. // first row should be row_num=2, because there is a header, first
  152. // column is COLUMN1, because there is no ROW_NUM
  153. assert aRow[0] == 11111
  154. rowIterator.next()
  155. rowIterator.next()
  156. aRow = rowIterator.next()
  157. assert aRow
  158. assert aRow[0] == -2222
  159. assert aRow[0].class == Long.class
  160. assert aRow[1] == ' '
  161. assert aRow[1].class == String.class
  162. assert aRow[2] == 0.0
  163. assert aRow[2].class == BigDecimal.class
  164. assert aRow[3] == 3.0
  165. assert aRow[3].class == BigDecimal.class
  166. assert aRow[4] == '-1.0'
  167. assert aRow[4].class == String.class
  168. // ????
  169. assert aRow[5].toString() == '31-Dec-1899'
  170. assert aRow[5].class == String.class
  171. assert aRow[6] == 14.2
  172. assert aRow[6].class == Double.class
  173. assert aRow[7] == 'FALSE'
  174. assert aRow[7].class == String.class
  175. }
  176. // read rows using RowIterator, based on model extracted from Sheet
  177. public void testRowIteratorHard() {
  178. def sourceFile = DKResourceUtil.findResourceAsFile('xcel_test.xls', this)
  179. println "sourceFile->$sourceFile"
  180. assert sourceFile
  181. DKPoiSheet poiSheet = [sourceFile, "Sheet1", true, true, false]
  182. Iterator rowIterator = poiSheet.getRowIterator(poiSheet.createModelFromSheet())
  183. assert rowIterator
  184. assert rowIterator.hasNext()
  185. def aRow = rowIterator.next()
  186. assert aRow
  187. assert aRow.class == Object[].class
  188. // first row should be row_num=2, because there is a header
  189. assert aRow[0] == 2
  190. rowIterator.next()
  191. rowIterator.next()
  192. aRow = rowIterator.next()
  193. assert aRow
  194. assert aRow[0] == 5
  195. assert aRow[0].class == Integer.class
  196. assert aRow[1] == -2222
  197. assert aRow[1].class == Long.class
  198. assert aRow[2] == ' '
  199. assert aRow[2].class == String.class
  200. assert aRow[3] == 0.0
  201. assert aRow[3].class == BigDecimal.class
  202. assert aRow[4] == 3.0
  203. assert aRow[4].class == BigDecimal.class
  204. assert aRow[5] == '-1.0'
  205. assert aRow[5].class == String.class
  206. // ????
  207. assert aRow[6].toString() == '31-Dec-1899'
  208. assert aRow[6].class == String.class
  209. assert aRow[7] == 14.2
  210. assert aRow[7].class == Double.class
  211. assert aRow[8] == 'FALSE'
  212. assert aRow[8].class == String.class
  213. }
  214. // read rows using RowIterator, based on model extracted from Sheet
  215. public void testRowIteratorEasy() {
  216. def sourceFile = DKResourceUtil.findResourceAsFile('xcel_test.xls', this)
  217. println "sourceFile->$sourceFile"
  218. assert sourceFile
  219. DKPoiSheet poiSheet = [sourceFile, "easy sheet", true, false, false]
  220. Iterator rowIterator = poiSheet.getRowIterator(poiSheet.createModelFromSheet())
  221. assert rowIterator
  222. assert rowIterator.hasNext()
  223. def aRow = rowIterator.next()
  224. assert aRow
  225. assert aRow.class == Object[].class
  226. assert aRow[0] == 1
  227. assert aRow[0].class == Integer.class
  228. assert aRow[1] == 'aaaa'
  229. assert aRow[1].class == String.class
  230. assert aRow[2] == 1111
  231. assert aRow[2].class == BigDecimal.class
  232. assert aRow[3] == DKTimeUtil.createDate( 2008, 0, 1)
  233. assert aRow[3].class == Date.class
  234. assert aRow[4] == 'zzzz'
  235. assert aRow[4].class == String.class
  236. assert aRow[5].toString() == '00:31:31'
  237. assert aRow[5].class == Time.class
  238. assert aRow[6] == 1234
  239. assert aRow[6].class == BigDecimal.class
  240. assert aRow[7] == 123456.78
  241. assert aRow[7].class == BigDecimal.class
  242. assert aRow[8] == 1234.5678
  243. assert aRow[8].class == BigDecimal.class
  244. assert aRow[9] == 1234.5678
  245. assert aRow[9].class == BigDecimal.class
  246. assert aRow[10].toString() == '2004-05-23 14:25:10.487'
  247. assert aRow[10].class == Timestamp.class
  248. assert aRow[11] == 'TRUE'
  249. assert aRow[11].class == String.class
  250. assert aRow[12] == 10
  251. assert aRow[12].class == Long.class
  252. assert aRow[13] == 12345
  253. assert aRow[13].class == BigDecimal.class
  254. assert aRow[14] == 'column14'
  255. assert aRow[14].class == String.class
  256. assert aRow[15] == 'column15'
  257. assert aRow[15].class == String.class
  258. assert aRow[16] == 'my clobby text'
  259. assert aRow[16].class == String.class
  260. while(rowIterator.hasNext()) {
  261. aRow = rowIterator.next();
  262. print "aRow->${aRow[0]} "
  263. println "${aRow[1]} "
  264. }
  265. assert !rowIterator.hasNext()
  266. }
  267. // read row using types explicitly specified in Unit
  268. public void testReadRowHard() {
  269. def sourceFile = DKResourceUtil.findResourceAsFile('xcel_test.xls', this)
  270. println "sourceFile->$sourceFile"
  271. assert sourceFile
  272. DKPoiSheet poiSheet = [sourceFile, "Sheet1", false, false, false]
  273. def rows = poiSheet.rows
  274. assert rows
  275. // ROW_NUM = 4
  276. def row = rows.get(4)
  277. Type[] types = [Type.INTEGER,Type.INTEGER,Type.STRING,Type.DECIMAL,Type.DECIMAL,Type.MIXED,Type.TIME,Type.REAL,Type.BOOLEAN]
  278. def result = DKPoiSheet.readRow( row, types, true)
  279. assert result
  280. assert result.length == types.length
  281. assert result[0] == 5
  282. assert result[0].class == Integer.class
  283. assert result[1] == -2222
  284. assert result[1].class == Long.class
  285. assert result[2] == ' '
  286. assert result[2].class == String.class
  287. assert result[3] == 0.0
  288. assert result[3].class == BigDecimal.class
  289. assert result[4] == 3.0
  290. assert result[4].class == BigDecimal.class
  291. assert result[5] == '-1.0'
  292. assert result[5].class == String.class
  293. assert result[6].toString() == '05:00:00'
  294. assert result[6].class == Time.class
  295. assert result[7] == 14.2
  296. assert result[7].class == Double.class
  297. assert result[8] == Boolean.FALSE
  298. assert result[8].class == Boolean.class
  299. }
  300. // read row using types explicitly specified in Unit
  301. public void testReadRowEasy() {
  302. def sourceFile = DKResourceUtil.findResourceAsFile('xcel_test.xls', this)
  303. println "sourceFile->$sourceFile"
  304. assert sourceFile
  305. DKPoiSheet poiSheet = [sourceFile, "easy sheet", false, false, false]
  306. def rows = poiSheet.rows
  307. assert rows
  308. def row = rows.get(0)
  309. Type[] types = [Type.INTEGER,Type.STRING,Type.INTEGER,Type.DATE,Type.STRING,Type.TIME,Type.INTEGER,Type.DECIMAL,Type.DECIMAL,Type.DECIMAL,Type.TIMESTAMP,Type.BOOLEAN,Type.INTEGER,Type.INTEGER,Type.STRING,Type.STRING,Type.STRING]
  310. def result = DKPoiSheet.readRow( row, types, true)
  311. assert result
  312. assert result.length == types.length
  313. assert result[0] == 1
  314. assert result[0].class == Integer.class
  315. assert result[1] == 'aaaa'
  316. assert result[1].class == String.class
  317. assert result[2] == 1111
  318. assert result[2].class == Long.class
  319. assert result[3] == DKTimeUtil.createDate( 2008, 0, 1)
  320. assert result[3].class == Date.class
  321. assert result[4] == 'zzzz'
  322. assert result[4].class == String.class
  323. assert result[5].toString() == '00:31:31'
  324. assert result[5].class == Time.class
  325. assert result[6] == 1234
  326. assert result[6].class == Long.class
  327. assert result[7] == 123456.78
  328. assert result[7].class == BigDecimal.class
  329. assert result[8] == 1234.5678
  330. assert result[8].class == BigDecimal.class
  331. assert result[9] == 1234.5678
  332. assert result[9].class == BigDecimal.class
  333. assert result[10].toString() == '2004-05-23 14:25:10.487'
  334. assert result[10].class == Timestamp.class
  335. assert result[11] == Boolean.TRUE
  336. assert result[11].class == Boolean.class
  337. assert result[12] == 10
  338. assert result[12].class == Long.class
  339. assert result[13] == 12345
  340. assert result[13].class == Long.class
  341. assert result[14] == 'column14'
  342. assert result[14].class == String.class
  343. assert result[15] == 'column15'
  344. assert result[15].class == String.class
  345. assert result[16] == 'my clobby text'
  346. assert result[16].class == String.class
  347. }
  348. // read cells using types explicitly specified in Unit
  349. public void testReadCellHard() {
  350. def sourceFile = DKResourceUtil.findResourceAsFile('xcel_test.xls', this)
  351. println "sourceFile->$sourceFile"
  352. assert sourceFile
  353. DKPoiSheet poiSheet = [sourceFile, "Sheet1", false, false, false]
  354. def rows = poiSheet.rows
  355. assert rows
  356. // ROW_NUM = 4
  357. def row = rows.get(3)
  358. assert DKPoiSheet.readCell( row.getCell(0), Type.INTEGER).class == Long.class
  359. assert DKPoiSheet.readCell( row.getCell(1), Type.STRING).class == String.class
  360. assert !DKPoiSheet.readCell( row.getCell(2), Type.DECIMAL)
  361. assert DKPoiSheet.readCell( row.getCell(3), Type.DECIMAL).class == BigDecimal.class
  362. assert !DKPoiSheet.readCell( row.getCell(4), Type.DATE)
  363. assert DKPoiSheet.readCell( row.getCell(5), Type.TIME).class == Time.class
  364. assert DKPoiSheet.readCell( row.getCell(6), Type.REAL).class == Double.class
  365. assert DKPoiSheet.readCell( row.getCell(7), Type.BOOLEAN).class == Boolean.class
  366. // ROW_NUM = 5
  367. row = rows.get(4)
  368. assert DKPoiSheet.readCell( row.getCell(4), Type.MIXED).class == String.class
  369. assert DKPoiSheet.readCell( row.getCell(7), Type.BOOLEAN).class == Boolean.class
  370. }
  371. // read cells using types explicitly specified in Unit
  372. public void testReadCellEasy() {
  373. def sourceFile = DKResourceUtil.findResourceAsFile('xcel_test.xls', this)
  374. println "sourceFile->$sourceFile"
  375. assert sourceFile
  376. DKPoiSheet poiSheet = [sourceFile, "easy sheet", false, false, false]
  377. def rows = poiSheet.rows
  378. assert rows
  379. def row = rows.get(0)
  380. assert DKPoiSheet.readCell( row.getCell(0), Type.STRING).class == String.class
  381. assert DKPoiSheet.readCell( row.getCell(1), Type.DECIMAL).class == BigDecimal.class
  382. assert DKPoiSheet.readCell( row.getCell(2), Type.DATE).class == Date.class
  383. assert DKPoiSheet.readCell( row.getCell(4), Type.TIME).class == Time.class
  384. assert DKPoiSheet.readCell( row.getCell(9), Type.TIMESTAMP).class == Timestamp.class
  385. assert DKPoiSheet.readCell( row.getCell(10), Type.BOOLEAN).class == Boolean.class
  386. }
  387. public void testCreateModel() {
  388. def sourceFile = DKResourceUtil.findResourceAsFile('xcel_test.xls', this)
  389. println "sourceFile->$sourceFile"
  390. assert sourceFile
  391. DKPoiSheet poiSheet = [sourceFile, "easy sheet", false, false, false]
  392. def model = poiSheet.createModelFromSheet()
  393. assert model
  394. assert model.name == 'easy sheet'
  395. assert model.keyColumnNames == (String[])['<ROW_NUM>']
  396. assert model.columns.length == 17
  397. assert model.columns[0].name == '<ROW_NUM>'
  398. assert model.columns[0].type == Type.INTEGER
  399. assert model.columns[1].name == 'A'
  400. assert model.columns[1].type == Type.STRING
  401. assert model.columns[2].name == 'B'
  402. assert model.columns[2].type == Type.DECIMAL
  403. assert model.columns[3].name == 'C'
  404. assert model.columns[3].type == Type.DATE
  405. assert model.columns[5].name == 'E'
  406. assert model.columns[5].type == Type.TIME
  407. assert model.columns[10].name == 'J'
  408. assert model.columns[10].type == Type.TIMESTAMP
  409. assert model.columns[11].name == 'K'
  410. assert model.columns[11].type == Type.STRING
  411. poiSheet = [sourceFile, "Sheet1", false, true, false]
  412. model = poiSheet.createModelFromSheet()
  413. assert model
  414. assert model.name == 'Sheet1'
  415. assert model.keyColumnNames == (String[])['<ROW_NUM>']
  416. assert model.columns.length == 9
  417. assert model.columns[0].name == '<ROW_NUM>'
  418. assert model.columns[0].type == Type.INTEGER
  419. assert model.columns[1].name == 'COLUMN1'
  420. assert model.columns[1].type == Type.INTEGER
  421. assert model.columns[2].name == 'COLUMN2'
  422. assert model.columns[2].type == Type.STRING
  423. assert model.columns[3].name == 'COLUMN3'
  424. assert model.columns[3].type == Type.DECIMAL
  425. assert model.columns[5].name == 'COLUMN5'
  426. assert model.columns[5].type == Type.MIXED
  427. assert model.columns[7].name == 'COLUMN7'
  428. assert model.columns[7].type == Type.REAL
  429. }
  430. public void testDiscoverColumnTypes(){
  431. def sourceFile = DKResourceUtil.findResourceAsFile('xcel_test.xls', this)
  432. println "sourceFile->$sourceFile"
  433. assert sourceFile
  434. DKPoiSheet poiSheet = [sourceFile, "easy sheet", false, false, false]
  435. def columnTypes = poiSheet.discoverColumnTypes(poiSheet.getRows())
  436. assert columnTypes
  437. assert columnTypes.size() == 16
  438. assert columnTypes[0] == DKColumnModel.Type.STRING
  439. assert columnTypes[1] == DKColumnModel.Type.DECIMAL
  440. assert columnTypes[2] == DKColumnModel.Type.DATE
  441. assert columnTypes[3] == DKColumnModel.Type.STRING
  442. assert columnTypes[4] == DKColumnModel.Type.TIME
  443. assert columnTypes[5] == DKColumnModel.Type.DECIMAL
  444. assert columnTypes[6] == DKColumnModel.Type.DECIMAL
  445. assert columnTypes[7] == DKColumnModel.Type.DECIMAL
  446. assert columnTypes[8] == DKColumnModel.Type.DECIMAL
  447. assert columnTypes[9] == DKColumnModel.Type.TIMESTAMP
  448. assert columnTypes[10] == DKColumnModel.Type.STRING
  449. assert columnTypes[11] == DKColumnModel.Type.INTEGER
  450. assert columnTypes[12] == DKColumnModel.Type.DECIMAL
  451. assert columnTypes[13] == DKColumnModel.Type.STRING
  452. assert columnTypes[14] == DKColumnModel.Type.STRING
  453. assert columnTypes[15] == DKColumnModel.Type.STRING
  454. poiSheet = [sourceFile, "Sheet1", false, true, false]
  455. columnTypes = poiSheet.discoverColumnTypes(poiSheet.getRows())
  456. assert columnTypes
  457. assert columnTypes.size() == 8
  458. assert columnTypes[0] == DKColumnModel.Type.INTEGER
  459. assert columnTypes[1] == DKColumnModel.Type.STRING
  460. assert columnTypes[2] == DKColumnModel.Type.DECIMAL
  461. assert columnTypes[3] == DKColumnModel.Type.DECIMAL
  462. assert columnTypes[4] == DKColumnModel.Type.MIXED
  463. assert columnTypes[5] == DKColumnModel.Type.MIXED
  464. assert columnTypes[6] == DKColumnModel.Type.REAL
  465. assert columnTypes[7] == DKColumnModel.Type.STRING
  466. }
  467. public void testGetHeaderRow(){
  468. def sourceFile = DKResourceUtil.findResourceAsFile('xcel_test.xls', this)
  469. println "sourceFile->$sourceFile"
  470. assert sourceFile
  471. DKPoiSheet poiSheet = [sourceFile, null, false, false, false]
  472. assert !poiSheet.getHeaderRow()
  473. poiSheet = [sourceFile, null, false, true, false]
  474. def headerRow = poiSheet.getHeaderRow()
  475. assert headerRow
  476. println "lastCellNum->$headerRow.lastCellNum"
  477. println "firstCellNum->$headerRow.firstCellNum"
  478. }
  479. public void testGetRows(){
  480. def sourceFile = DKResourceUtil.findResourceAsFile('xcel_test.xls', this)
  481. println "sourceFile->$sourceFile"
  482. assert sourceFile
  483. DKPoiSheet poiSheet = [sourceFile, null, false, false, false]
  484. def rows = poiSheet.rows
  485. assert rows
  486. assert rows.size() == 5
  487. }
  488. public void testValidateLazy(){
  489. File doesNotExistFile = ['./does_not_exist']
  490. assert !doesNotExistFile.exists()
  491. DKPoiSheet poiSheet = new DKPoiSheet(doesNotExistFile, null, false, false, true)
  492. // this is a validation failure
  493. shouldFail(DKUserException) { poiSheet.validate() }
  494. // this is a validation failure
  495. shouldFail(DKUserException) {
  496. poiSheet = new DKPoiSheet(doesNotExistFile, null, false, false, false)
  497. }
  498. }
  499. public void testGetSheet(){
  500. def sourceFile = DKResourceUtil.findResourceAsFile('xcel_test.xls', this)
  501. println "sourceFile->$sourceFile"
  502. assert sourceFile
  503. DKPoiSheet poiSheet = [sourceFile, null, false, false, false]
  504. def internalSheet = poiSheet.getSheet()
  505. println "internalSheet->$internalSheet"
  506. assert internalSheet
  507. assert internalSheet.sheetName == 'Sheet1'
  508. poiSheet = [sourceFile, 'Sheet1', false, false, false]
  509. internalSheet = poiSheet.getSheet()
  510. println "internalSheet->$internalSheet"
  511. assert internalSheet
  512. assert internalSheet.sheetName == 'Sheet1'
  513. poiSheet = [sourceFile, 'easy sheet', false, false, false]
  514. internalSheet = poiSheet.getSheet()
  515. println "internalSheet->$internalSheet"
  516. assert internalSheet
  517. assert internalSheet.sheetName == 'easy sheet'
  518. poiSheet = [sourceFile, 'does_not_exist', false, false, false]
  519. shouldFail(IOException) {
  520. internalSheet = poiSheet.getSheet()
  521. }
  522. }
  523. }