forked from frictionlessdata/TableSchema.jl
-
Notifications
You must be signed in to change notification settings - Fork 0
/
read.jl
62 lines (55 loc) · 2.3 KB
/
read.jl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
@testset "Read a Table from file" begin
TABLE_CAST = """id,height,age,name,occupation
1.1,10,1,string1,2012
"""
@testset "Basic data reading" begin
t = Table(joinpath(dirname(@__FILE__), "../data/data_types.csv"))
trs = TableSchema.read(t, cast=false)
# check the headers
@test length(t.headers) == 5
HEIGHT_COLUMN = 2
@test t.headers[HEIGHT_COLUMN] == "height"
# check the number of rows
@test length(trs[:,1]) == 5
# check the bottom left index
@test trs[5,1] == 5
# iterate over the rows
@test sum([ row[HEIGHT_COLUMN] for row in t ]) == 51
# no schema, hence exception
@test_throws TableValidationException validate(t)
end
@testset "Passing an IO buffered file" begin
t = Table()
t.schema = Schema(joinpath(dirname(@__FILE__), "../data/schema_valid_missing.json"))
@test TableSchema.is_valid(t.schema)
f = readdlm(joinpath(dirname(@__FILE__), "../data/data_types.csv"), ',')
tr = TableSchema.read(t, data=f)
@test validate(t)
end
@testset "With schema validation" begin
s = Schema(joinpath(dirname(@__FILE__), "../data/schema_valid_missing.json"))
t = Table(joinpath(dirname(@__FILE__), "../data/data_types.csv"), s)
@test validate(t)
t2 = Table(joinpath(dirname(@__FILE__), "../data/data_constraints.csv"), s)
@test !validate(t2)
@test length(t2.errors) == 2
end
@testset "With row casting" begin
s = Schema(joinpath(dirname(@__FILE__), "../data/schema_valid_missing.json"))
t = Table(IOBuffer(TABLE_CAST), s)
tr = TableSchema.read(t)
@test TableSchema.is_valid(t.schema)
@test isa(tr[1,1], String)
@test isa(tr[1,2], Float64)
end
@testset "Remote data and schema reading" begin
t = Table("https://raw.githubusercontent.com/frictionlessdata/TableSchema.jl/master/data/data_types.csv")
trs = TableSchema.read(t, cast=false)
# check the headers
@test length(t.headers) == 5
@test t.headers[2] == "height"
# validate from remote schema
t.schema = Schema("https://raw.githubusercontent.com/frictionlessdata/TableSchema.jl/master/data/schema_valid_missing.json")
@test validate(t)
end
end