# Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import Dates import TimeZones struct WrappedDate x::Dates.Date end Arrow.ArrowTypes.registertype!(WrappedDate, WrappedDate) struct WrappedTime x::Dates.Time end Arrow.ArrowTypes.registertype!(WrappedTime, WrappedTime) struct WrappedDateTime x::Dates.DateTime end Arrow.ArrowTypes.registertype!(WrappedDateTime, WrappedDateTime) struct WrappedZonedDateTime x::TimeZones.ZonedDateTime end Arrow.ArrowTypes.registertype!(WrappedZonedDateTime, WrappedZonedDateTime) @testset "Date and time wrappers with missing" begin for T in (WrappedDate, WrappedTime, WrappedDateTime, WrappedZonedDateTime) if T == WrappedZonedDateTime time = T(Dates.now(TimeZones.tz"UTC")) else time = T(Dates.now()) end table = (; x = [missing, missing, time, missing, time]) io = IOBuffer() Arrow.write(io, table) seekstart(io) tbl = Arrow.Table(io) @test isequal(collect(tbl.x), table.x) end end @testset "`default(T) isa T`" begin for T in (Dates.Date, Dates.Time, Dates.DateTime, TimeZones.ZonedDateTime, Dates.Nanosecond, Dates.Millisecond, Dates.Second, Dates.Day, Dates.Month, Dates.Year) @test Arrow.ArrowTypes.default(T) isa T end end