| # 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. |
| |
| test_that("as_writable_table() works for data.frame, RecordBatch, and Table", { |
| table <- arrow_table(col1 = 1, col2 = "two") |
| expect_identical(as_writable_table(table), table) |
| |
| batch <- record_batch(col1 = 1, col2 = "two") |
| expect_equal(as_writable_table(batch), table) |
| |
| tbl <- tibble::tibble(col1 = 1, col2 = "two") |
| # because of metadata |
| table_from_tbl <- as_writable_table(tbl) |
| table_from_tbl$metadata <- NULL |
| expect_equal(table_from_tbl, table) |
| }) |
| |
| test_that("as_writable_table() errors for invalid input", { |
| # check errors from a wrapper function (i.e., simulate write_*() functions) |
| wrapper_fun <- function(x) as_writable_table(x) |
| |
| # make sure we get the custom error message |
| expect_snapshot_error(wrapper_fun("not a table")) |
| |
| # make sure other errors make it through |
| expect_snapshot_error(wrapper_fun(data.frame(x = I(list(1, "a"))))) |
| }) |
| |
| test_that("all_funs() identifies namespace-qualified and unqualified functions", { |
| expect_equal( |
| all_funs(rlang::quo(pkg::fun())), |
| "pkg::fun" |
| ) |
| expect_equal( |
| all_funs(rlang::quo(pkg::fun(other_pkg::obj))), |
| "pkg::fun" |
| ) |
| expect_equal( |
| all_funs(rlang::quo(other_fun(pkg::fun()))), |
| c("other_fun", "pkg::fun") |
| ) |
| expect_equal( |
| all_funs(rlang::quo(other_pkg::other_fun(pkg::fun()))), |
| c("other_pkg::other_fun", "pkg::fun") |
| ) |
| expect_equal( |
| all_funs(rlang::quo(other_pkg::other_fun(pkg::fun(sum(base::log()))))), |
| c("other_pkg::other_fun", "pkg::fun", "sum", "base::log") |
| ) |
| expect_equal( |
| all_funs(rlang::quo(other_fun(fun(sum(log()))))), |
| c("other_fun", "fun", "sum", "log") |
| ) |
| expect_equal( |
| all_funs(rlang::quo(other_fun(fun(sum(base::log()))))), |
| c("other_fun", "fun", "sum", "base::log") |
| ) |
| }) |
| |
| test_that("parse_compact_col_spec() converts string specs to schema", { |
| compact_schema <- parse_compact_col_spec( |
| col_types = "cidlDTtf_-?", |
| col_names = c("c", "i", "d", "l", "D", "T", "t", "f", "_", "-", "?") |
| ) |
| |
| expect_equal( |
| compact_schema, |
| schema( |
| c = utf8(), |
| i = int32(), |
| d = float64(), |
| l = bool(), |
| D = date32(), |
| T = timestamp(unit = "ns"), |
| t = time32(unit = "ms"), |
| f = dictionary(), |
| `_` = null(), |
| `-` = null() |
| ) |
| ) |
| |
| expect_error( |
| parse_compact_col_spec(c("i", "d"), c("a", "b")), |
| "`col_types` must be a character vector of size 1" |
| ) |
| |
| expect_error( |
| parse_compact_col_spec("idc", c("a", "b")), |
| "Compact specification for `col_types` requires `col_names` of matching length" |
| ) |
| |
| expect_error( |
| parse_compact_col_spec("y", "a"), |
| "Unsupported compact specification: 'y' for column 'a'" |
| ) |
| }) |