summaryrefslogtreecommitdiff
path: root/Resources/DefaultContent/Libraries/lua-csv/lua/test.lua
diff options
context:
space:
mode:
Diffstat (limited to 'Resources/DefaultContent/Libraries/lua-csv/lua/test.lua')
-rw-r--r--Resources/DefaultContent/Libraries/lua-csv/lua/test.lua102
1 files changed, 102 insertions, 0 deletions
diff --git a/Resources/DefaultContent/Libraries/lua-csv/lua/test.lua b/Resources/DefaultContent/Libraries/lua-csv/lua/test.lua
new file mode 100644
index 0000000..f418cf6
--- /dev/null
+++ b/Resources/DefaultContent/Libraries/lua-csv/lua/test.lua
@@ -0,0 +1,102 @@
+pcall(require, "strict")
+local csv = require"csv"
+
+local errors = 0
+
+local function testhandle(handle, correct_result)
+ local result = {}
+ for r in handle:lines() do
+ if not r[1] then
+ local r2 = {}
+ for k, v in pairs(r) do r2[#r2+1] = k..":"..tostring(v) end
+ table.sort(r2)
+ r = r2
+ end
+ result[#result+1] = table.concat(r, ",")
+ end
+
+ handle:close()
+
+ result = table.concat(result, "!\n").."!"
+ if result ~= correct_result then
+ io.stderr:write(
+ ("Error reading '%s':\nExpected output:\n%s\n\nActual output:\n%s\n\n"):
+ format(handle:name(), correct_result, result))
+ errors = errors + 1
+ return false
+ end
+ return true
+end
+
+local function test(filename, correct_result, parameters)
+ parameters = parameters or {}
+ for i = 1, 16 do
+ parameters.buffer_size = i
+ local f = csv.open(filename, parameters)
+ local fileok = testhandle(f, correct_result)
+
+ if fileok then
+ f = io.open(filename, "r")
+ local data = f:read("*a")
+ f:close()
+
+ f = csv.openstring(data, parameters)
+ testhandle(f, correct_result)
+ end
+ end
+end
+
+test("../test-data/embedded-newlines.csv", [[
+embedded
+newline,embedded
+newline,embedded
+newline!
+embedded
+newline,embedded
+newline,embedded
+newline!]])
+
+test("../test-data/embedded-quotes.csv", [[
+embedded "quotes",embedded "quotes",embedded "quotes"!
+embedded "quotes",embedded "quotes",embedded "quotes"!]])
+
+test("../test-data/header.csv", [[
+alpha:ONE,bravo:two,charlie:3!
+alpha:four,bravo:five,charlie:6!]], {header=true})
+
+test("../test-data/header.csv", [[
+apple:one,charlie:30!
+apple:four,charlie:60!]],
+{ columns = {
+ apple = { name = "ALPHA", transform = string.lower },
+ charlie = { transform = function(x) return tonumber(x) * 10 end }}})
+
+test("../test-data/blank-line.csv", [[
+this,file,ends,with,a,blank,line!]])
+
+test("../test-data/BOM.csv", [[
+apple:one,charlie:30!
+apple:four,charlie:60!]],
+{ columns = {
+ apple = { name = "ALPHA", transform = string.lower },
+ charlie = { transform = function(x) return tonumber(x) * 10 end }}})
+
+test("../test-data/bars.txt", [[
+there's a comma in this field, but no newline,embedded
+newline,embedded
+newline!
+embedded
+newline,embedded
+newline,embedded
+newline!]])
+
+
+if errors == 0 then
+ io.stdout:write("Passed\n")
+elseif errors == 1 then
+ io.stdout:write("1 error\n")
+else
+ io.stdout:write(("%d errors\n"):format(errors))
+end
+
+os.exit(errors)