CRAN Package Check Results for Package plotly

Last updated on 2018-07-17 01:47:14 CEST.

Flavor Version Tinstall Tcheck Ttotal Status Flags
r-devel-linux-x86_64-debian-clang 4.7.1 11.64 177.65 189.29 ERROR
r-devel-linux-x86_64-debian-gcc 4.7.1 8.92 137.10 146.02 ERROR
r-devel-linux-x86_64-fedora-clang 4.7.1 220.92 ERROR
r-devel-linux-x86_64-fedora-gcc 4.7.1 212.37 ERROR
r-devel-windows-ix86+x86_64 4.7.1 25.00 199.00 224.00 ERROR
r-patched-linux-x86_64 4.7.1 10.50 170.06 180.56 ERROR
r-patched-solaris-x86 4.7.1 265.40 ERROR
r-release-linux-x86_64 4.7.1 9.69 170.30 179.99 ERROR
r-release-windows-ix86+x86_64 4.7.1 24.00 291.00 315.00 ERROR
r-release-osx-x86_64 4.7.1 OK
r-oldrel-windows-ix86+x86_64 4.7.1 10.00 213.00 223.00 ERROR
r-oldrel-osx-x86_64 4.7.1 OK

Check Details

Version: 4.7.1
Check: package dependencies
Result: NOTE
    Package suggested but not available for checking: ‘RSelenium’
Flavors: r-devel-linux-x86_64-debian-clang, r-devel-linux-x86_64-debian-gcc, r-devel-linux-x86_64-fedora-clang, r-devel-linux-x86_64-fedora-gcc, r-patched-linux-x86_64, r-release-linux-x86_64

Version: 4.7.1
Check: for unstated dependencies in ‘tests’
Result: WARN
    '::' or ':::' imports not declared from:
     ‘reshape2’ ‘stringr’
    'data(package=)' call not declared from: ‘lattice’
Flavors: r-devel-linux-x86_64-debian-clang, r-devel-linux-x86_64-debian-gcc, r-devel-linux-x86_64-fedora-clang, r-devel-linux-x86_64-fedora-gcc, r-devel-windows-ix86+x86_64

Version: 4.7.1
Check: tests
Result: ERROR
     Running ‘testthat.R’ [96s/76s]
    Running the tests in ‘tests/testthat.R’ failed.
    Complete output:
     > library("testthat")
     > library("plotly")
     Loading required package: ggplot2
    
     Attaching package: 'plotly'
    
     The following object is masked from 'package:ggplot2':
    
     last_plot
    
     The following object is masked from 'package:stats':
    
     filter
    
     The following object is masked from 'package:graphics':
    
     layout
    
     > library("RSclient")
     >
     > # report any differences in plot (list) hashes if this is a Travis pull request
     > report_diffs <- grepl("^[0-9]+$", Sys.getenv("TRAVIS_PULL_REQUEST"))
     > # build a ggplot2 comparison table?
     > build_table <- Sys.getenv("PLOTLY_TABLE") == "TRUE"
     >
     > # stuff that should be done once (not everytime save_outputs() is called)
     > if (report_diffs || build_table) {
     + message("Spinning up an independent R session with plotly's master branch installed")
     + Rserve::Rserve(args = "--vanilla --RS-enable-remote")
     + conn <- RSconnect()
     + # ensure the seed is the same for randomized tests
     + set.seed(1)
     + RSeval(conn, "set.seed(1)")
     + # we don't make assumptions about ggplot2 versioning,
     + # but it is _strongly_ recommended to use the CRAN version (of ggplot2)
     + RSeval(conn, "devtools::install_github('ropensci/plotly')")
     + RSeval(conn, "library(plotly)")
     + if (report_diffs) {
     + # hash of the version being tested
     + this_hash <- substr(Sys.getenv("TRAVIS_COMMIT"), 1, 7)
     + # hash of version to compare with (master)
     + master_hash <- RSeval(conn, "packageDescription('plotly')$GithubSHA1")
     + master_hash <- substr(master_hash, 1, 7)
     + # plotly-test-table repo hosts the diff pages & keeps track of previous versions
     + table_dir <- normalizePath("../../plotly-test-table", mustWork = T)
     + # Make sure we have appropriate versions of plotlyjs
     + # (see plotly-test-table/template/template/index.html)
     + file.copy(
     + file.path("..", "inst", "htmlwidgets", "lib", "plotlyjs", "plotly-latest.min.js"),
     + file.path(table_dir, "template", "New.min.js"),
     + overwrite = TRUE
     + )
     + download.file(
     + "https://raw.githubusercontent.com/ropensci/plotly/master/inst/htmlwidgets/lib/plotlyjs/plotly-latest.min.js",
     + file.path(table_dir, "template", "Old.min.js"),
     + method = "curl"
     + )
     + # directory for placing test differences
     + this_dir <- file.path(table_dir, this_hash)
     + if (dir.exists(this_dir)) {
     + message("Tests were already run on this commit. Nuking the old results...")
     + unlink(this_dir, recursive = T)
     + }
     + master_dir <- file.path(table_dir, master_hash)
     + # csv file that tracks plot hashes
     + hash_file <- file.path(table_dir, "hashes.csv")
     + if (!file.exists(hash_file)) {
     + file.create(hash_file)
     + cat("commit,test,hash\n", file = hash_file, append = T)
     + }
     + hash_info <- utils::read.csv(hash_file)
     + master_info <- hash_info[hash_info$commit %in% master_hash, ]
     + }
     + }
     >
     > # Some tests make plot.ly HTTP requests and require a valid user account
     > # (see test-plotly-filename.R). For security reasons, these tests should be
     > # skipped on pull requests (the .travis.yml file uses encrypted credentials
     > # & encrypted environment vars cannot be accessed on pull request builds)
     > skip_if_not_master <- function() {
     + is_pr <- grepl("^[0-9]+$", Sys.getenv("TRAVIS_PULL_REQUEST"))
     + is_r_release <- Sys.getenv("TRAVIS_R_VERSION_STRING", "release") == "release"
     + if (!is_pr && is_r_release) return(invisible(TRUE))
     + skip("plot.ly API calls are only tested on the master build on r-release")
     + }
     >
     > # This function is called within testthat/test-*.R files.
     > # It takes a ggplot or plotly object as input, and it returns a figure
     > # object (aka the data behind the plot).
     > save_outputs <- function(gg, name) {
     + print(paste("Running test:", name))
     + p <- plotly_build(gg)$x[c("data", "layout")]
     + has_diff <- if (report_diffs) {
     + # save a hash of the R object
     + plot_hash <- digest::digest(p)
     + info <- paste(this_hash, name, plot_hash, sep = ",")
     + cat(paste(info, "\n"), file = hash_file, append = T)
     + test_info <- master_info[master_info$test %in% name, ]
     + # is the plot hash different from master?
     + !isTRUE(plot_hash == test_info$hash)
     + } else FALSE
     + if (has_diff || build_table) {
     + RSassign(conn, gg)
     + pm <- RSeval(conn, "tryCatch(plotly::plotly_build(gg)$x[c('data', 'layout')], error = function(e) e$message)")
     + if (build_table) {
     + # save pngs of ggplot
     + filename <- paste0(gsub("\\s+", "-", name), ".png")
     + ggFile <- paste("ggplot", filename, sep = "-")
     + res <- tryCatch(ggsave(ggFile, gg),
     + error = function(e) {
     + err <- qplot() +
     + annotate('text', label = paste('Error:', e$message),
     + x = 1, y = 1, color = 'red')
     + ggsave(ggFile, err, width = 3, height = 2, units = 'in')
     + })
     + img <- function(x, f) {
     + tryCatch(plotly_IMAGE(x, out_file = f, width = 300, height = 400),
     + error = function(e) {
     + err <- qplot() +
     + annotate('text', label = paste('Error:', e$message),
     + x = 1, y = 1, color = 'red')
     + # TODO: convert pixels to inches?
     + ggsave(plotlyFile, err, width = 3, height = 2, units = 'in')
     + })
     + }
     + # save _this_ plotly version
     + plotlyFile <- paste("plotly", this_hash, filename, sep = "-")
     + res <- img(p, plotlyFile)
     + # save _master_ plotly version
     + plotlyFile <- paste("plotly", "master", filename, sep = "-")
     + RSassign(conn, plotlyFile, "plotlyFile")
     + RSassign(conn, img, "img")
     + res <- RSeval(conn, "img(p, plotlyFile)")
     + }
     + # it could be that the hash didn't exist, so make sure they're different
     + # before build a diff page
     + if (plot_hash != digest::digest(pm)) {
     + test_dir <- file.path(this_dir, gsub("\\s+", "-", name))
     + if (dir.exists(test_dir)) stop(shQuote(name), " has already been used to save_outputs() in another test.")
     + dir.create(test_dir, recursive = T)
     + # copy over diffing template
     + file.copy(
     + dir(file.path(table_dir, "template", "template"), full.names = TRUE), test_dir
     + )
     + # overwrite the default JSON
     + writeLines(
     + paste("New =", plotly:::to_JSON(p)),
     + file.path(test_dir, "New.json")
     + )
     + writeLines(
     + paste("Old =", plotly:::to_JSON(pm)),
     + file.path(test_dir, "Old.json")
     + )
     + }
     + }
     + p
     + }
     >
     > # use me just like testthat::test_check()
     > test_run <- function(...) {
     + # shut down the other R session on exit
     + if (report_diffs || build_table) {
     + on.exit(RSshutdown(conn))
     + on.exit(RSclose(conn), add = TRUE)
     + }
     + test_check(...)
     + }
     >
     > if (packageVersion("ggplot2") > "2.2.1") {
     + test_run("plotly")
     + }
     [1] "Running test: cookbook-axes-flevels"
     [1] "Running test: cookbook-axes-ylim.hide"
     [1] "Running test: cookbook-axes-scale.hide"
     [1] "Running test: cookbook-axes-coord-ylim"
     [1] "Running test: cookbook-axes-linear-axes"
     [1] "Running test: cookbook-axes-log2-scale"
     [1] "Running test: cookbook-axes-log2-coord"
     [1] "Running test: cookbook-axes-log2-labels"
     [1] "Running test: cookbook-axes-scale_y_log10"
     [1] "Running test: cookbook-axes-scale_y_log10-labels"
     [1] "Running test: cookbook-axes-no-x-title"
     [1] "Running test: cookbook-axes-scale-name"
     [1] "Running test: cookbook-axes-fonts"
     [1] "Running test: cookbook-axes-label-funs"
     [1] "Running test: cookbook-axes-custom-formatter"
     [1] "Running test: cookbook-axes-blank-minor-major"
     [1] "Running test: cookbook-axes-blank-minor"
     [1] "Running test: cookbook-axes-blank-x"
     [1] "Running test: cookbook-axes-blank-y"
     [1] "Running test: cookbook-axes-basic-bar"
     [1] "Running test: cookbook-axes-basic-horizontal-line"
     [1] "Running test: cookbook-axes-dashed-red-line"
     [1] "Running test: cookbook-axes-bar-error-wide"
     [1] "Running test: cookbook-axes-bar-error-narrow"
     [1] "Running test: cookbook-axes-bar-error-diff"
     [1] "Running test: cookbook-axes-bar-dodge-color"
     [1] "Running test: cookbook-axes-bar-dodge-color-error"
     [1] "Running test: cookbook-axes-bar-dodge-color-err4"
     [1] "Running test: cookbook-axes-scatter-basic"
     [1] "Running test: cookbook-axes-scatter-hline"
     [1] "Running test: cookbook-axes-scatter-hline-vline"
     [1] "Running test: cookbook-axes-scatter-facet"
     [1] "Running test: cookbook-axes-scatter-facet-hline"
     [1] "Running test: cookbook-axes-scatter-facet-hline-vline"
     [1] "Running test: scatterplots-hollow"
     [1] "Running test: scatterplots-smooth-lm"
     [1] "Running test: scatterplots-smooth-lm-se-false"
     [1] "Running test: scatterplots-loess"
     [1] "Running test: scatterplots-color"
     [1] "Running test: scatterplots-scale-color-hue"
     [1] "Running test: scatterplots-full-range"
     [1] "Running test: scatterplots-shape"
     [1] "Running test: scatterplots-shape-manual"
     [1] "Running test: scatterplots-overlap"
     [1] "Running test: scatterplots-jitter"
     [1] "Running test: scatterplots-geom_jitter"
     [1] "Running test: cookbook-axes-single-abline"
     [1] "Running test: cookbook-axes-multiple-abline"
     [1] "Running test: area-simple"
     [1] "Running test: area-area-fillcolor"
     [1] "Running test: area-traces_order"
     [1] "Running test: bar-dodge"
     [1] "Running test: bar-stack"
     [1] "Running test: bar-identity"
     [1] "Running test: bar-dates"
     [1] "Running test: bar-nocolor"
     [1] "Running test: bar-color"
     [1] "Running test: bar-black-outline"
     [1] "Running test: bar-aes-fill-guides-color-none"
     [1] "Running test: bar-aes-colour-guides-fill-FALSE"
     [1] "Running test: bar-position-stack"
     [1] "Running test: bar-position-fill"
     [1] "Running test: bar-category-names"
     [1] "Running test: bar-coord-flip"
     [1] "Running test: boxplot"
     [1] "Running test: boxplot-datetime"
     [1] "Running test: boxplot-legends_for_fill"
     [1] "Running test: boxplot-fillcolor"
     [1] "Running test: col"
     [1] "Running test: contour"
     [1] "Running test: date-strings"
     [1] "Running test: date-class-Date"
     [1] "Running test: date-irregular-time-series"
     [1] "Running test: density-simple"
     [1] "Running test: density-fill"
     [1] "Running test: density-color"
     [1] "Running test: density-histogram"
     [1] "Running test: density-traces_order"
     [1] "Running test: density2d"
     [1] "Running test: density2dfill"
     [1] "Running test: errorbar-horizontal"
     [1] "Running test: errorbar"
     [1] "Running test: errorbar-unique-groups"
     [1] "Running test: barley"
     [1] "Running test: 3-panels"
     [1] "Running test: facet_wrap_free"
     [1] "Running test: facet_wrap_free_y"
     [1] "Running test: facet_wrap_free_x"
     [1] "Running test: facet_grid_free"
     [1] "Running test: facet_grid_free_y"
     [1] "Running test: facet_grid_free_x"
     [1] "Running test: facet_wrap_free_mult"
     [1] "Running test: facet_wrap"
     [1] "Running test: facet_wrap-labeller"
     [1] "Running test: facet_grid-labeller"
     [1] "Running test: facet_wrap-free_y"
     [1] "Running test: heatmap"
     [1] "Running test: heatmap-midpoint"
     [1] "Running test: heatmap-discrete"
     [1] "Running test: hex-basic"
     [1] "Running test: hex-bins"
     [1] "Running test: hex-binwidth"
     [1] "Running test: histogram-counts"
     [1] "Running test: histogram-density"
     [1] "Running test: histogram-fill"
     [1] "Running test: histogram-fixed-fill-color"
     [1] "Running test: histogram-density-binwidth"
     [1] "Running test: histogram-fill-factor"
     [1] "Running test: histogram-fill-factor-identity"
     [1] "Running test: histogram-fill-factor-dodge"
     [1] "Running test: histogram-fill-factor-facets"
     [1] "Running test: histogram-vline"
     [1] "Running test: histogram-dates"
     [1] "Running test: histogram-POSIXt-bins"
     [1] "Running test: histogram-Date-bins"
     [1] "Running test: hline"
     [1] "Running test: hline-multiple"
     [1] "Running test: hline-factor"
     [1] "Running test: jitter-basic"
     [1] "Running test: labels-ggtitle"
     [1] "Running test: labels-ylab"
     [1] "Running test: labels-angles"
     [1] "Running test: scatter_legend"
     [1] "Running test: legend-hide"
     [1] "Running test: legend-very-long-legend-items"
     [1] "Running test: legend-one-entry"
     [1] "Running test: legend-hide-legend"
     [1] "Running test: legend-many legend items"
     [1] "Running test: linetype-types"
     [1] "Running test: linetype-colors"
     ── 1. Failure: Translates both dates and datetimes (with dynamic ticks) correctl
     paste("date:", d$date) not equivalent to `dates1`.
     100/100 mismatches
     x[1]: "date: 2002-01-01"
     y[1]: "~date: 2002-01-01"
    
     x[2]: "date: 2002-02-01"
     y[2]: "~date: 2002-02-01"
    
     x[3]: "date: 2002-03-01"
     y[3]: "~date: 2002-03-01"
    
     x[4]: "date: 2002-04-01"
     y[4]: "~date: 2002-04-01"
    
     x[5]: "date: 2002-05-01"
     y[5]: "~date: 2002-05-01"
    
     ── 2. Failure: Translates both dates and datetimes (with dynamic ticks) correctl
     paste("date:", d2$date) not equivalent to `dates2`.
     100/100 mismatches
     x[1]: "date: 2002-01-01 01:00:00"
     y[1]: "~date: 2002-01-01 01:00:00"
    
     x[2]: "date: 2002-02-01 01:00:00"
     y[2]: "~date: 2002-02-01 01:00:00"
    
     x[3]: "date: 2002-03-01 01:00:00"
     y[3]: "~date: 2002-03-01 01:00:00"
    
     x[4]: "date: 2002-04-01 02:00:00"
     y[4]: "~date: 2002-04-01 02:00:00"
    
     x[5]: "date: 2002-05-01 02:00:00"
     y[5]: "~date: 2002-05-01 02:00:00"
    
     ── 3. Failure: geom_linerange() without a y aesthetic translates to a path (@tes
     unlist(l$data[[1]]$text) not equivalent to c(...).
     10/14 mismatches
     x[1]: "~x: 1<br />~ymin: 0"
     y[1]: "x: 1<br />ymin: 0"
    
     x[2]: "~x: 1<br />~ymax: 1"
     y[2]: "x: 1<br />ymax: 1"
    
     x[4]: "~x: 2<br />~ymin: 0"
     y[4]: "x: 2<br />ymin: 0"
    
     x[5]: "~x: 2<br />~ymax: 2"
     y[5]: "x: 2<br />ymax: 2"
    
     x[7]: "~x: 3<br />~ymin: 0"
     y[7]: "x: 3<br />ymin: 0"
    
     [1] "Running test: map-facet"
     [1] "Running test: path-lines-diff-from-paths"
     [1] "Running test: path-colors"
     [1] "Running test: path-colors2"
     [1] "Running test: path-colored-groups-stay-together"
     [1] "Running test: path-line-symbols"
     [1] "Running test: point-size-alpha"
     [1] "Running test: open-shapes"
     [1] "Running test: all-shapes"
     [1] "Running test: point-size-alpha2"
     [1] "Running test: polygon-black"
     ── 4. Failure: polygons with different hovertext must be different traces (@tes
     info$data[[1]]$x not equivalent to c(10, 11, 11, 10, 10).
     5/5 mismatches (average diff: 2)
     [1] 12 - 10 == 2
     [2] 13 - 11 == 2
     [3] 13 - 11 == 2
     [4] 12 - 10 == 2
     [5] 12 - 10 == 2
    
     ── 5. Failure: polygons with different hovertext must be different traces (@tes
     info$data[[2]]$x not equivalent to c(12, 13, 13, 12, 12).
     5/5 mismatches (average diff: 2)
     [1] 10 - 12 == -2
     [2] 11 - 13 == -2
     [3] 11 - 13 == -2
     [4] 10 - 12 == -2
     [5] 10 - 12 == -2
    
     ── 6. Failure: polygons with different hovertext must be different traces (@tes
     sapply(info$data, "[[", "text") not equivalent to c("lab: left", "lab: right").
     2/2 mismatches
     x[1]: "~lab: NA"
     y[1]: "lab: left"
    
     x[2]: "~lab: ~"
     y[2]: "lab: right"
    
     [1] "Running test: polygon-aes-color"
     [1] "Running test: polygon-aes-fill"
     [1] "Running test: polygon-color-aes-fill"
     [1] "Running test: polygon-color-fill-aes-linetype"
     [1] "Running test: polygon-color-fill-aes-size"
     [1] "Running test: polygons-canada-borders"
     ── 7. Failure: borders become one trace with NA (@test-ggplot-polygons.R#147) ─
     length(info$data) not equivalent to 1.
     1/1 mismatches
     [1] 2 - 1 == 1
    
     ── 8. Failure: borders become one trace with NA (@test-ggplot-polygons.R#149) ─
     nchar(info$data[[1]]$text) not equivalent to 0.
     1/1 mismatches
     [1] 10 - 0 == 10
    
     [1] "Running test: polygon-star-group"
     ── 9. Failure: geom_polygon(aes(group)) -> 1 trace (@test-ggplot-polygons.R#162)
     length(has.data) not equivalent to `n.traces`.
     1/1 mismatches
     [1] 2 - 1 == 1
    
     ── 10. Failure: geom_polygon(aes(group)) -> 1 trace (@test-ggplot-polygons.R#165
     tr$x not equivalent to c(0, -1, 2, -2, 1, 0, NA, 10, 9, 12, 8, 11, 10).
     Lengths differ: 6 is not 13
    
     ── 11. Failure: geom_polygon(aes(group)) -> 1 trace (@test-ggplot-polygons.R#168
     tr$y not equivalent to c(2, 0, 1, 1, 0, 2, NA, 2, 0, 1, 1, 0, 2).
     Lengths differ: 6 is not 13
    
     [1] "Running test: polygon-star-group-color"
     ── 12. Failure: geom_polygon(aes(group), color) -> 1 trace (@test-ggplot-polygon
     length(has.data) not equivalent to `n.traces`.
     1/1 mismatches
     [1] 2 - 1 == 1
    
     ── 13. Failure: geom_polygon(aes(group), color) -> 1 trace (@test-ggplot-polygon
     tr$x not equivalent to c(0, -1, 2, -2, 1, 0, NA, 10, 9, 12, 8, 11, 10).
     Lengths differ: 6 is not 13
    
     ── 14. Failure: geom_polygon(aes(group), color) -> 1 trace (@test-ggplot-polygon
     tr$y not equivalent to c(2, 0, 1, 1, 0, 2, NA, 2, 0, 1, 1, 0, 2).
     Lengths differ: 6 is not 13
    
     [1] "Running test: polygon-star-fill-color"
     [1] "Running test: rect-black"
     [1] "Running test: rect-black4"
     [1] "Running test: rect-color"
     [1] "Running test: rect-fill"
     [1] "Running test: rect-fill-color"
     [1] "Running test: rect-fill-hex-alpha"
     [1] "Running test: ribbon-alpha"
     [1] "Running test: ribbon-group"
     [1] "Running test: ribbon-colour"
     [1] "Running test: ribbon-fill"
     [1] "Running test: segment"
     [1] "Running test: segment-multiple-non-numeric"
     [1] "Running test: sf"
     [1] "Running test: sf-fill-text"
     [1] "Running test: sf-points"
     [1] "Running test: size-is-a-vector"
     [1] "Running test: size-global-scaling"
     [1] "Running test: smooth-basic"
     [1] "Running test: smooth-se-false"
     [1] "Running test: smooth-group"
     [1] "Running test: smooth-colour"
     [1] "Running test: smooth-fill2"
     [1] "Running test: smooth-facet"
     ── 15. Failure: Basic geom_spoke() (@test-ggplot-spoke.R#20) ──────────────────
     `angle` not equivalent to rep(paste0("angle: ", format(df$angle)), each = 2).
     200/200 mismatches
     x[1]: "~angle: 0.619975157"
     y[1]: "angle: 0.619975157"
    
     x[2]: "~angle: 0.619975157"
     y[2]: "angle: 0.619975157"
    
     x[3]: "~angle: 4.906998908"
     y[3]: "angle: 4.906998908"
    
     x[4]: "~angle: 4.906998908"
     y[4]: "angle: 4.906998908"
    
     x[5]: "~angle: 4.348301551"
     y[5]: "angle: 4.348301551"
    
     [1] "Running test: step-gg.hv"
     [1] "Running test: step-gg.vh"
     [1] "Running test: step-gg.hvh"
     [1] "Running test: step-gg.vhv"
     [1] "Running test: text"
     [1] "Running test: text-colour"
     [1] "Running test: theme-background"
     [1] "Running test: theme-ticks-and-grids"
     [1] "Running test: theme-ticks-default"
     [1] "Running test: theme-zeroline-default"
     [1] "Running test: theme-marker-default"
     [1] "Running test: theme-panel-border-1"
     [1] "Running test: theme-panel-border-2"
     [1] "Running test: ticks-boxes"
     [1] "Running test: ticks-boxes-facet-grid"
     [1] "Running test: ticks-boxes-scales-free"
     [1] "Running test: ticks-boxes-space-free"
     [1] "Running test: ticks-flip"
     [1] "Running test: ticks-flip-grid"
     [1] "Running test: ticks-flip-grid-free"
     [1] "Running test: ticks-limits-hide"
     [1] "Running test: ticks-limits-gap"
     [1] "Running test: ticks-breaks-nochange"
     [1] "Running test: ticks-breaks-more"
     [1] "Running test: ticks-breaks-less"
     [1] "Running test: ticks-scale-labels"
     [1] "Running test: ticks-hide-ticks-lines-labels"
     [1] "Running test: ticks-hide-ticks-labels"
     [1] "Running test: ticks-ycontinuous-ranges"
     [1] "Running test: ticks-ylim-ranges"
     [1] "Running test: ticks-yreverse-ranges"
     [1] "Running test: ticks-yreverse-limits-ranges"
     [1] "Running test: ticks-ylim-reversed-ranges"
     [1] "Running test: ticks-evenly-spaced-ticks"
     [1] "Running test: ticks-uneven"
     [1] "Running test: ticks-line-breaks"
     [1] "Running test: tooltip-datetime"
     ── 16. Failure: datetimes are displayed in tooltip properly (@test-ggplot-toolti
     paste0("time: ", test$time) not identical to sapply(txt, "[[", 1).
     100/100 mismatches
     x[1]: "time: 2016-03-12 16:33:56"
     y[1]: "~time: 2016-03-12 16:33:56"
    
     x[2]: "time: 2016-03-12 16:34:56"
     y[2]: "~time: 2016-03-12 16:34:56"
    
     x[3]: "time: 2016-03-12 16:35:56"
     y[3]: "~time: 2016-03-12 16:35:56"
    
     x[4]: "time: 2016-03-12 16:36:56"
     y[4]: "~time: 2016-03-12 16:36:56"
    
     x[5]: "time: 2016-03-12 16:37:56"
     y[5]: "~time: 2016-03-12 16:37:56"
    
     [1] "Running test: tooltip-date"
     ── 17. Failure: dates are displayed in tooltip properly (@test-ggplot-tooltip.R#
     paste0("time: ", test$time) not identical to sapply(txt, "[[", 1).
     100/100 mismatches
     x[1]: "time: 2016-03-12 00:00:01"
     y[1]: "~time: 2016-03-12 00:00:01"
    
     x[2]: "time: 2016-03-12 00:00:02"
     y[2]: "~time: 2016-03-12 00:00:02"
    
     x[3]: "time: 2016-03-12 00:00:03"
     y[3]: "~time: 2016-03-12 00:00:03"
    
     x[4]: "time: 2016-03-12 00:00:04"
     y[4]: "~time: 2016-03-12 00:00:04"
    
     x[5]: "time: 2016-03-12 00:00:05"
     y[5]: "~time: 2016-03-12 00:00:05"
    
     ── 18. Failure: tooltip argument respects ordering (@test-ggplot-tooltip.R#36)
     all(grepl("^density", sapply(txt, "[[", 1))) isn't true.
    
     ── 19. Error: tooltip argument respects ordering (@test-ggplot-tooltip.R#37) ──
     subscript out of bounds
     1: expect_true(all(grepl("^mpg", sapply(txt, "[[", 2)))) at testthat/test-ggplot-tooltip.R:37
     2: quasi_label(enquo(object), label)
     3: eval_bare(get_expr(quo), get_env(quo))
     4: grepl("^mpg", sapply(txt, "[[", 2))
     5: sapply(txt, "[[", 2)
     6: lapply(X = X, FUN = FUN, ...)
    
     [1] "Running test: heatmap-discrete-tooltip"
     [1] "Running test: group-lines-hovertext"
     ── 20. Failure: group domain is included in hovertext (@test-ggplot-tooltip.R#69
     all(grepl(pattern, txt)) isn't true.
    
     ── 21. Failure: tooltip elements are not crossed (@test-ggplot-tooltip.R#91) ──
     `y_equal_ten` not equivalent to `sample_2`.
     4 element mismatches
    
     [1] "Running test: hovertext-display"
     [1] "Running test: violin"
     [1] "Running test: violin-aes"
     [1] "Running test: vline"
     [1] "Running test: vline-multiple"
     [1] "Running test: ylim-one-trace"
     [1] "Running test: error-simple"
     [1] "Running test: error-simple-line"
     [1] "Running test: error-simple-line-point"
     [1] "Running test: error-simple-line-point-crazy"
     [1] "Running test: error-rect-alpha"
     [1] "Running test: plotly-color-scatterplot-color-factor"
     [1] "Running test: plotly-color-scatterplot-color-factor-custom"
     [1] "Running test: plotly-color-scatterplot-color-factor-custom2"
     [1] "Running test: plotly-color-bar-color-factor-custom"
     [1] "Running test: plotly-color-scatterplot-color-numeric"
     [1] "Running test: plotly-color-scatterplot-color-numeric-custom"
     [1] "Running test: plotly-color-scatterplot-scatter3d-axes"
     [1] "Running test: plotly-color-color-manual"
     [1] "Running test: plotly-colorbar"
     [1] "Running test: plotly-colorbar-expand"
     [1] "Running test: plotly-colorbar-restrict"
     [1] "Running test: plotly-colorbar-z-expand"
     [1] "Running test: plotly-colorbar-z-restrict"
     [1] "Running test: plotly-NAs"
     [1] "Running test: plotly-NAs-connect"
     [1] "Running test: plotly-NAs-within-group"
     [1] "Running test: plotly-NAs-within-color"
     [1] "Running test: plotly-NAs-within-color2"
     [1] "Running test: plotly-no-NAs-for-irrelevant-group"
     [1] "Running test: plotly-linetype-linetype"
     [1] "Running test: plotly-linetype-linetype2"
     [1] "Running test: plotly-linetype-linetype3"
     [1] "Running test: plotly-linetype-manual"
     [1] "Running test: plotly-linetype-ordering"
     [1] "Running test: plotly-linetype-alphabetical"
     [1] "Running test: plotly-subplot-simple"
     [1] "Running test: plotly-subplot-simple2"
     [1] "Running test: plotly-subplot-group"
     [1] "Running test: plotly-subplot-shareX"
     [1] "Running test: plotly-subplot-shareY"
     [1] "Running test: plotly-subplot-shareBoth"
     [1] "Running test: plotly-subplot-width-height"
     [1] "Running test: plotly-subplot-recursive"
     [1] "Running test: plotly-subplot-plot-list"
     [1] "Running test: plotly-subplot-ggmatrix"
     [1] "Running test: plotly-subplot-geo-cartesian"
     [1] "Running test: plotly-subplot-subplot-legendgroup"
     [1] "Running test: plotly-symbol-scatterplot-symbol"
     [1] "Running test: plotly-symbol-scatterplot-symbol2"
     [1] "Running test: plotly-symbol-pch"
     [1] "Running test: plotly-symbol-logical"
     [1] "Running test: plotly-symbol-symbol-manual"
     [1] "Running test: plotly-symbol-ordering"
     [1] "Running test: plotly-symbol-alphabetical"
     [1] "Running test: plotly-scatterplot"
     [1] "Running test: plotly-bar-inference"
     [1] "Running test: plotly-box-data-array"
     [1] "Running test: plotly-group-within-trace"
     [1] "Running test: plotly-alpha-blending"
     [1] "Running test: plotly-alpha-no-color"
     [1] "Running test: plotly-factor-axis"
     [1] "Running test: plotly-character-axis"
     [1] "Running test: plotly-histogram"
     [1] "Running test: plotly-histogram-vert"
     [1] "Running test: plotly-inherit-FALSE"
     [1] "Running test: plotly-time-series-summary"
     ══ testthat results ═══════════════════════════════════════════════════════════
     OK: 1134 SKIPPED: 27 FAILED: 21
     1. Failure: Translates both dates and datetimes (with dynamic ticks) correctly (@test-ggplot-lines.R#85)
     2. Failure: Translates both dates and datetimes (with dynamic ticks) correctly (@test-ggplot-lines.R#86)
     3. Failure: geom_linerange() without a y aesthetic translates to a path (@test-ggplot-lines.R#111)
     4. Failure: polygons with different hovertext must be different traces (@test-ggplot-polygons.R#25)
     5. Failure: polygons with different hovertext must be different traces (@test-ggplot-polygons.R#26)
     6. Failure: polygons with different hovertext must be different traces (@test-ggplot-polygons.R#31)
     7. Failure: borders become one trace with NA (@test-ggplot-polygons.R#147)
     8. Failure: borders become one trace with NA (@test-ggplot-polygons.R#149)
     9. Failure: geom_polygon(aes(group)) -> 1 trace (@test-ggplot-polygons.R#162)
     1. ...
    
     Error: testthat unit tests failed
     Execution halted
Flavor: r-devel-linux-x86_64-debian-clang

Version: 4.7.1
Check: tests
Result: ERROR
     Running ‘testthat.R’ [68s/105s]
    Running the tests in ‘tests/testthat.R’ failed.
    Complete output:
     > library("testthat")
     > library("plotly")
     Loading required package: ggplot2
    
     Attaching package: 'plotly'
    
     The following object is masked from 'package:ggplot2':
    
     last_plot
    
     The following object is masked from 'package:stats':
    
     filter
    
     The following object is masked from 'package:graphics':
    
     layout
    
     > library("RSclient")
     >
     > # report any differences in plot (list) hashes if this is a Travis pull request
     > report_diffs <- grepl("^[0-9]+$", Sys.getenv("TRAVIS_PULL_REQUEST"))
     > # build a ggplot2 comparison table?
     > build_table <- Sys.getenv("PLOTLY_TABLE") == "TRUE"
     >
     > # stuff that should be done once (not everytime save_outputs() is called)
     > if (report_diffs || build_table) {
     + message("Spinning up an independent R session with plotly's master branch installed")
     + Rserve::Rserve(args = "--vanilla --RS-enable-remote")
     + conn <- RSconnect()
     + # ensure the seed is the same for randomized tests
     + set.seed(1)
     + RSeval(conn, "set.seed(1)")
     + # we don't make assumptions about ggplot2 versioning,
     + # but it is _strongly_ recommended to use the CRAN version (of ggplot2)
     + RSeval(conn, "devtools::install_github('ropensci/plotly')")
     + RSeval(conn, "library(plotly)")
     + if (report_diffs) {
     + # hash of the version being tested
     + this_hash <- substr(Sys.getenv("TRAVIS_COMMIT"), 1, 7)
     + # hash of version to compare with (master)
     + master_hash <- RSeval(conn, "packageDescription('plotly')$GithubSHA1")
     + master_hash <- substr(master_hash, 1, 7)
     + # plotly-test-table repo hosts the diff pages & keeps track of previous versions
     + table_dir <- normalizePath("../../plotly-test-table", mustWork = T)
     + # Make sure we have appropriate versions of plotlyjs
     + # (see plotly-test-table/template/template/index.html)
     + file.copy(
     + file.path("..", "inst", "htmlwidgets", "lib", "plotlyjs", "plotly-latest.min.js"),
     + file.path(table_dir, "template", "New.min.js"),
     + overwrite = TRUE
     + )
     + download.file(
     + "https://raw.githubusercontent.com/ropensci/plotly/master/inst/htmlwidgets/lib/plotlyjs/plotly-latest.min.js",
     + file.path(table_dir, "template", "Old.min.js"),
     + method = "curl"
     + )
     + # directory for placing test differences
     + this_dir <- file.path(table_dir, this_hash)
     + if (dir.exists(this_dir)) {
     + message("Tests were already run on this commit. Nuking the old results...")
     + unlink(this_dir, recursive = T)
     + }
     + master_dir <- file.path(table_dir, master_hash)
     + # csv file that tracks plot hashes
     + hash_file <- file.path(table_dir, "hashes.csv")
     + if (!file.exists(hash_file)) {
     + file.create(hash_file)
     + cat("commit,test,hash\n", file = hash_file, append = T)
     + }
     + hash_info <- utils::read.csv(hash_file)
     + master_info <- hash_info[hash_info$commit %in% master_hash, ]
     + }
     + }
     >
     > # Some tests make plot.ly HTTP requests and require a valid user account
     > # (see test-plotly-filename.R). For security reasons, these tests should be
     > # skipped on pull requests (the .travis.yml file uses encrypted credentials
     > # & encrypted environment vars cannot be accessed on pull request builds)
     > skip_if_not_master <- function() {
     + is_pr <- grepl("^[0-9]+$", Sys.getenv("TRAVIS_PULL_REQUEST"))
     + is_r_release <- Sys.getenv("TRAVIS_R_VERSION_STRING", "release") == "release"
     + if (!is_pr && is_r_release) return(invisible(TRUE))
     + skip("plot.ly API calls are only tested on the master build on r-release")
     + }
     >
     > # This function is called within testthat/test-*.R files.
     > # It takes a ggplot or plotly object as input, and it returns a figure
     > # object (aka the data behind the plot).
     > save_outputs <- function(gg, name) {
     + print(paste("Running test:", name))
     + p <- plotly_build(gg)$x[c("data", "layout")]
     + has_diff <- if (report_diffs) {
     + # save a hash of the R object
     + plot_hash <- digest::digest(p)
     + info <- paste(this_hash, name, plot_hash, sep = ",")
     + cat(paste(info, "\n"), file = hash_file, append = T)
     + test_info <- master_info[master_info$test %in% name, ]
     + # is the plot hash different from master?
     + !isTRUE(plot_hash == test_info$hash)
     + } else FALSE
     + if (has_diff || build_table) {
     + RSassign(conn, gg)
     + pm <- RSeval(conn, "tryCatch(plotly::plotly_build(gg)$x[c('data', 'layout')], error = function(e) e$message)")
     + if (build_table) {
     + # save pngs of ggplot
     + filename <- paste0(gsub("\\s+", "-", name), ".png")
     + ggFile <- paste("ggplot", filename, sep = "-")
     + res <- tryCatch(ggsave(ggFile, gg),
     + error = function(e) {
     + err <- qplot() +
     + annotate('text', label = paste('Error:', e$message),
     + x = 1, y = 1, color = 'red')
     + ggsave(ggFile, err, width = 3, height = 2, units = 'in')
     + })
     + img <- function(x, f) {
     + tryCatch(plotly_IMAGE(x, out_file = f, width = 300, height = 400),
     + error = function(e) {
     + err <- qplot() +
     + annotate('text', label = paste('Error:', e$message),
     + x = 1, y = 1, color = 'red')
     + # TODO: convert pixels to inches?
     + ggsave(plotlyFile, err, width = 3, height = 2, units = 'in')
     + })
     + }
     + # save _this_ plotly version
     + plotlyFile <- paste("plotly", this_hash, filename, sep = "-")
     + res <- img(p, plotlyFile)
     + # save _master_ plotly version
     + plotlyFile <- paste("plotly", "master", filename, sep = "-")
     + RSassign(conn, plotlyFile, "plotlyFile")
     + RSassign(conn, img, "img")
     + res <- RSeval(conn, "img(p, plotlyFile)")
     + }
     + # it could be that the hash didn't exist, so make sure they're different
     + # before build a diff page
     + if (plot_hash != digest::digest(pm)) {
     + test_dir <- file.path(this_dir, gsub("\\s+", "-", name))
     + if (dir.exists(test_dir)) stop(shQuote(name), " has already been used to save_outputs() in another test.")
     + dir.create(test_dir, recursive = T)
     + # copy over diffing template
     + file.copy(
     + dir(file.path(table_dir, "template", "template"), full.names = TRUE), test_dir
     + )
     + # overwrite the default JSON
     + writeLines(
     + paste("New =", plotly:::to_JSON(p)),
     + file.path(test_dir, "New.json")
     + )
     + writeLines(
     + paste("Old =", plotly:::to_JSON(pm)),
     + file.path(test_dir, "Old.json")
     + )
     + }
     + }
     + p
     + }
     >
     > # use me just like testthat::test_check()
     > test_run <- function(...) {
     + # shut down the other R session on exit
     + if (report_diffs || build_table) {
     + on.exit(RSshutdown(conn))
     + on.exit(RSclose(conn), add = TRUE)
     + }
     + test_check(...)
     + }
     >
     > if (packageVersion("ggplot2") > "2.2.1") {
     + test_run("plotly")
     + }
     [1] "Running test: cookbook-axes-flevels"
     [1] "Running test: cookbook-axes-ylim.hide"
     [1] "Running test: cookbook-axes-scale.hide"
     [1] "Running test: cookbook-axes-coord-ylim"
     [1] "Running test: cookbook-axes-linear-axes"
     [1] "Running test: cookbook-axes-log2-scale"
     [1] "Running test: cookbook-axes-log2-coord"
     [1] "Running test: cookbook-axes-log2-labels"
     [1] "Running test: cookbook-axes-scale_y_log10"
     [1] "Running test: cookbook-axes-scale_y_log10-labels"
     [1] "Running test: cookbook-axes-no-x-title"
     [1] "Running test: cookbook-axes-scale-name"
     [1] "Running test: cookbook-axes-fonts"
     [1] "Running test: cookbook-axes-label-funs"
     [1] "Running test: cookbook-axes-custom-formatter"
     [1] "Running test: cookbook-axes-blank-minor-major"
     [1] "Running test: cookbook-axes-blank-minor"
     [1] "Running test: cookbook-axes-blank-x"
     [1] "Running test: cookbook-axes-blank-y"
     [1] "Running test: cookbook-axes-basic-bar"
     [1] "Running test: cookbook-axes-basic-horizontal-line"
     [1] "Running test: cookbook-axes-dashed-red-line"
     [1] "Running test: cookbook-axes-bar-error-wide"
     [1] "Running test: cookbook-axes-bar-error-narrow"
     [1] "Running test: cookbook-axes-bar-error-diff"
     [1] "Running test: cookbook-axes-bar-dodge-color"
     [1] "Running test: cookbook-axes-bar-dodge-color-error"
     [1] "Running test: cookbook-axes-bar-dodge-color-err4"
     [1] "Running test: cookbook-axes-scatter-basic"
     [1] "Running test: cookbook-axes-scatter-hline"
     [1] "Running test: cookbook-axes-scatter-hline-vline"
     [1] "Running test: cookbook-axes-scatter-facet"
     [1] "Running test: cookbook-axes-scatter-facet-hline"
     [1] "Running test: cookbook-axes-scatter-facet-hline-vline"
     [1] "Running test: scatterplots-hollow"
     [1] "Running test: scatterplots-smooth-lm"
     [1] "Running test: scatterplots-smooth-lm-se-false"
     [1] "Running test: scatterplots-loess"
     [1] "Running test: scatterplots-color"
     [1] "Running test: scatterplots-scale-color-hue"
     [1] "Running test: scatterplots-full-range"
     [1] "Running test: scatterplots-shape"
     [1] "Running test: scatterplots-shape-manual"
     [1] "Running test: scatterplots-overlap"
     [1] "Running test: scatterplots-jitter"
     [1] "Running test: scatterplots-geom_jitter"
     [1] "Running test: cookbook-axes-single-abline"
     [1] "Running test: cookbook-axes-multiple-abline"
     [1] "Running test: area-simple"
     [1] "Running test: area-area-fillcolor"
     [1] "Running test: area-traces_order"
     [1] "Running test: bar-dodge"
     [1] "Running test: bar-stack"
     [1] "Running test: bar-identity"
     [1] "Running test: bar-dates"
     [1] "Running test: bar-nocolor"
     [1] "Running test: bar-color"
     [1] "Running test: bar-black-outline"
     [1] "Running test: bar-aes-fill-guides-color-none"
     [1] "Running test: bar-aes-colour-guides-fill-FALSE"
     [1] "Running test: bar-position-stack"
     [1] "Running test: bar-position-fill"
     [1] "Running test: bar-category-names"
     [1] "Running test: bar-coord-flip"
     [1] "Running test: boxplot"
     [1] "Running test: boxplot-datetime"
     [1] "Running test: boxplot-legends_for_fill"
     [1] "Running test: boxplot-fillcolor"
     [1] "Running test: col"
     [1] "Running test: contour"
     [1] "Running test: date-strings"
     [1] "Running test: date-class-Date"
     [1] "Running test: date-irregular-time-series"
     [1] "Running test: density-simple"
     [1] "Running test: density-fill"
     [1] "Running test: density-color"
     [1] "Running test: density-histogram"
     [1] "Running test: density-traces_order"
     [1] "Running test: density2d"
     [1] "Running test: density2dfill"
     [1] "Running test: errorbar-horizontal"
     [1] "Running test: errorbar"
     [1] "Running test: errorbar-unique-groups"
     [1] "Running test: barley"
     [1] "Running test: 3-panels"
     [1] "Running test: facet_wrap_free"
     [1] "Running test: facet_wrap_free_y"
     [1] "Running test: facet_wrap_free_x"
     [1] "Running test: facet_grid_free"
     [1] "Running test: facet_grid_free_y"
     [1] "Running test: facet_grid_free_x"
     [1] "Running test: facet_wrap_free_mult"
     [1] "Running test: facet_wrap"
     [1] "Running test: facet_wrap-labeller"
     [1] "Running test: facet_grid-labeller"
     [1] "Running test: facet_wrap-free_y"
     [1] "Running test: heatmap"
     [1] "Running test: heatmap-midpoint"
     [1] "Running test: heatmap-discrete"
     [1] "Running test: hex-basic"
     [1] "Running test: hex-bins"
     [1] "Running test: hex-binwidth"
     [1] "Running test: histogram-counts"
     [1] "Running test: histogram-density"
     [1] "Running test: histogram-fill"
     [1] "Running test: histogram-fixed-fill-color"
     [1] "Running test: histogram-density-binwidth"
     [1] "Running test: histogram-fill-factor"
     [1] "Running test: histogram-fill-factor-identity"
     [1] "Running test: histogram-fill-factor-dodge"
     [1] "Running test: histogram-fill-factor-facets"
     [1] "Running test: histogram-vline"
     [1] "Running test: histogram-dates"
     [1] "Running test: histogram-POSIXt-bins"
     [1] "Running test: histogram-Date-bins"
     [1] "Running test: hline"
     [1] "Running test: hline-multiple"
     [1] "Running test: hline-factor"
     [1] "Running test: jitter-basic"
     [1] "Running test: labels-ggtitle"
     [1] "Running test: labels-ylab"
     [1] "Running test: labels-angles"
     [1] "Running test: scatter_legend"
     [1] "Running test: legend-hide"
     [1] "Running test: legend-very-long-legend-items"
     [1] "Running test: legend-one-entry"
     [1] "Running test: legend-hide-legend"
     [1] "Running test: legend-many legend items"
     [1] "Running test: linetype-types"
     [1] "Running test: linetype-colors"
     ── 1. Failure: Translates both dates and datetimes (with dynamic ticks) correctl
     paste("date:", d$date) not equivalent to `dates1`.
     100/100 mismatches
     x[1]: "date: 2002-01-01"
     y[1]: "~date: 2002-01-01"
    
     x[2]: "date: 2002-02-01"
     y[2]: "~date: 2002-02-01"
    
     x[3]: "date: 2002-03-01"
     y[3]: "~date: 2002-03-01"
    
     x[4]: "date: 2002-04-01"
     y[4]: "~date: 2002-04-01"
    
     x[5]: "date: 2002-05-01"
     y[5]: "~date: 2002-05-01"
    
     ── 2. Failure: Translates both dates and datetimes (with dynamic ticks) correctl
     paste("date:", d2$date) not equivalent to `dates2`.
     100/100 mismatches
     x[1]: "date: 2002-01-01 01:00:00"
     y[1]: "~date: 2002-01-01 01:00:00"
    
     x[2]: "date: 2002-02-01 01:00:00"
     y[2]: "~date: 2002-02-01 01:00:00"
    
     x[3]: "date: 2002-03-01 01:00:00"
     y[3]: "~date: 2002-03-01 01:00:00"
    
     x[4]: "date: 2002-04-01 02:00:00"
     y[4]: "~date: 2002-04-01 02:00:00"
    
     x[5]: "date: 2002-05-01 02:00:00"
     y[5]: "~date: 2002-05-01 02:00:00"
    
     ── 3. Failure: geom_linerange() without a y aesthetic translates to a path (@tes
     unlist(l$data[[1]]$text) not equivalent to c(...).
     10/14 mismatches
     x[1]: "~x: 1<br />~ymin: 0"
     y[1]: "x: 1<br />ymin: 0"
    
     x[2]: "~x: 1<br />~ymax: 1"
     y[2]: "x: 1<br />ymax: 1"
    
     x[4]: "~x: 2<br />~ymin: 0"
     y[4]: "x: 2<br />ymin: 0"
    
     x[5]: "~x: 2<br />~ymax: 2"
     y[5]: "x: 2<br />ymax: 2"
    
     x[7]: "~x: 3<br />~ymin: 0"
     y[7]: "x: 3<br />ymin: 0"
    
     [1] "Running test: map-facet"
     [1] "Running test: path-lines-diff-from-paths"
     [1] "Running test: path-colors"
     [1] "Running test: path-colors2"
     [1] "Running test: path-colored-groups-stay-together"
     [1] "Running test: path-line-symbols"
     [1] "Running test: point-size-alpha"
     [1] "Running test: open-shapes"
     [1] "Running test: all-shapes"
     [1] "Running test: point-size-alpha2"
     [1] "Running test: polygon-black"
     ── 4. Failure: polygons with different hovertext must be different traces (@tes
     info$data[[1]]$x not equivalent to c(10, 11, 11, 10, 10).
     5/5 mismatches (average diff: 2)
     [1] 12 - 10 == 2
     [2] 13 - 11 == 2
     [3] 13 - 11 == 2
     [4] 12 - 10 == 2
     [5] 12 - 10 == 2
    
     ── 5. Failure: polygons with different hovertext must be different traces (@tes
     info$data[[2]]$x not equivalent to c(12, 13, 13, 12, 12).
     5/5 mismatches (average diff: 2)
     [1] 10 - 12 == -2
     [2] 11 - 13 == -2
     [3] 11 - 13 == -2
     [4] 10 - 12 == -2
     [5] 10 - 12 == -2
    
     ── 6. Failure: polygons with different hovertext must be different traces (@tes
     sapply(info$data, "[[", "text") not equivalent to c("lab: left", "lab: right").
     2/2 mismatches
     x[1]: "~lab: NA"
     y[1]: "lab: left"
    
     x[2]: "~lab: ~"
     y[2]: "lab: right"
    
     [1] "Running test: polygon-aes-color"
     [1] "Running test: polygon-aes-fill"
     [1] "Running test: polygon-color-aes-fill"
     [1] "Running test: polygon-color-fill-aes-linetype"
     [1] "Running test: polygon-color-fill-aes-size"
     [1] "Running test: polygons-canada-borders"
     ── 7. Failure: borders become one trace with NA (@test-ggplot-polygons.R#147) ─
     length(info$data) not equivalent to 1.
     1/1 mismatches
     [1] 2 - 1 == 1
    
     ── 8. Failure: borders become one trace with NA (@test-ggplot-polygons.R#149) ─
     nchar(info$data[[1]]$text) not equivalent to 0.
     1/1 mismatches
     [1] 10 - 0 == 10
    
     [1] "Running test: polygon-star-group"
     ── 9. Failure: geom_polygon(aes(group)) -> 1 trace (@test-ggplot-polygons.R#162)
     length(has.data) not equivalent to `n.traces`.
     1/1 mismatches
     [1] 2 - 1 == 1
    
     ── 10. Failure: geom_polygon(aes(group)) -> 1 trace (@test-ggplot-polygons.R#165
     tr$x not equivalent to c(0, -1, 2, -2, 1, 0, NA, 10, 9, 12, 8, 11, 10).
     Lengths differ: 6 is not 13
    
     ── 11. Failure: geom_polygon(aes(group)) -> 1 trace (@test-ggplot-polygons.R#168
     tr$y not equivalent to c(2, 0, 1, 1, 0, 2, NA, 2, 0, 1, 1, 0, 2).
     Lengths differ: 6 is not 13
    
     [1] "Running test: polygon-star-group-color"
     ── 12. Failure: geom_polygon(aes(group), color) -> 1 trace (@test-ggplot-polygon
     length(has.data) not equivalent to `n.traces`.
     1/1 mismatches
     [1] 2 - 1 == 1
    
     ── 13. Failure: geom_polygon(aes(group), color) -> 1 trace (@test-ggplot-polygon
     tr$x not equivalent to c(0, -1, 2, -2, 1, 0, NA, 10, 9, 12, 8, 11, 10).
     Lengths differ: 6 is not 13
    
     ── 14. Failure: geom_polygon(aes(group), color) -> 1 trace (@test-ggplot-polygon
     tr$y not equivalent to c(2, 0, 1, 1, 0, 2, NA, 2, 0, 1, 1, 0, 2).
     Lengths differ: 6 is not 13
    
     [1] "Running test: polygon-star-fill-color"
     [1] "Running test: rect-black"
     [1] "Running test: rect-black4"
     [1] "Running test: rect-color"
     [1] "Running test: rect-fill"
     [1] "Running test: rect-fill-color"
     [1] "Running test: rect-fill-hex-alpha"
     [1] "Running test: ribbon-alpha"
     [1] "Running test: ribbon-group"
     [1] "Running test: ribbon-colour"
     [1] "Running test: ribbon-fill"
     [1] "Running test: segment"
     [1] "Running test: segment-multiple-non-numeric"
     [1] "Running test: sf"
     [1] "Running test: sf-fill-text"
     [1] "Running test: sf-points"
     [1] "Running test: size-is-a-vector"
     [1] "Running test: size-global-scaling"
     [1] "Running test: smooth-basic"
     [1] "Running test: smooth-se-false"
     [1] "Running test: smooth-group"
     [1] "Running test: smooth-colour"
     [1] "Running test: smooth-fill2"
     [1] "Running test: smooth-facet"
     ── 15. Failure: Basic geom_spoke() (@test-ggplot-spoke.R#20) ──────────────────
     `angle` not equivalent to rep(paste0("angle: ", format(df$angle)), each = 2).
     200/200 mismatches
     x[1]: "~angle: 4.51220845"
     y[1]: "angle: 4.51220845"
    
     x[2]: "~angle: 4.51220845"
     y[2]: "angle: 4.51220845"
    
     x[3]: "~angle: 6.07669122"
     y[3]: "angle: 6.07669122"
    
     x[4]: "~angle: 6.07669122"
     y[4]: "angle: 6.07669122"
    
     x[5]: "~angle: 2.17813837"
     y[5]: "angle: 2.17813837"
    
     [1] "Running test: step-gg.hv"
     [1] "Running test: step-gg.vh"
     [1] "Running test: step-gg.hvh"
     [1] "Running test: step-gg.vhv"
     [1] "Running test: text"
     [1] "Running test: text-colour"
     [1] "Running test: theme-background"
     [1] "Running test: theme-ticks-and-grids"
     [1] "Running test: theme-ticks-default"
     [1] "Running test: theme-zeroline-default"
     [1] "Running test: theme-marker-default"
     [1] "Running test: theme-panel-border-1"
     [1] "Running test: theme-panel-border-2"
     [1] "Running test: ticks-boxes"
     [1] "Running test: ticks-boxes-facet-grid"
     [1] "Running test: ticks-boxes-scales-free"
     [1] "Running test: ticks-boxes-space-free"
     [1] "Running test: ticks-flip"
     [1] "Running test: ticks-flip-grid"
     [1] "Running test: ticks-flip-grid-free"
     [1] "Running test: ticks-limits-hide"
     [1] "Running test: ticks-limits-gap"
     [1] "Running test: ticks-breaks-nochange"
     [1] "Running test: ticks-breaks-more"
     [1] "Running test: ticks-breaks-less"
     [1] "Running test: ticks-scale-labels"
     [1] "Running test: ticks-hide-ticks-lines-labels"
     [1] "Running test: ticks-hide-ticks-labels"
     [1] "Running test: ticks-ycontinuous-ranges"
     [1] "Running test: ticks-ylim-ranges"
     [1] "Running test: ticks-yreverse-ranges"
     [1] "Running test: ticks-yreverse-limits-ranges"
     [1] "Running test: ticks-ylim-reversed-ranges"
     [1] "Running test: ticks-evenly-spaced-ticks"
     [1] "Running test: ticks-uneven"
     [1] "Running test: ticks-line-breaks"
     [1] "Running test: tooltip-datetime"
     ── 16. Failure: datetimes are displayed in tooltip properly (@test-ggplot-toolti
     paste0("time: ", test$time) not identical to sapply(txt, "[[", 1).
     100/100 mismatches
     x[1]: "time: 2016-03-12 16:33:56"
     y[1]: "~time: 2016-03-12 16:33:56"
    
     x[2]: "time: 2016-03-12 16:34:56"
     y[2]: "~time: 2016-03-12 16:34:56"
    
     x[3]: "time: 2016-03-12 16:35:56"
     y[3]: "~time: 2016-03-12 16:35:56"
    
     x[4]: "time: 2016-03-12 16:36:56"
     y[4]: "~time: 2016-03-12 16:36:56"
    
     x[5]: "time: 2016-03-12 16:37:56"
     y[5]: "~time: 2016-03-12 16:37:56"
    
     [1] "Running test: tooltip-date"
     ── 17. Failure: dates are displayed in tooltip properly (@test-ggplot-tooltip.R#
     paste0("time: ", test$time) not identical to sapply(txt, "[[", 1).
     100/100 mismatches
     x[1]: "time: 2016-03-12 00:00:01"
     y[1]: "~time: 2016-03-12 00:00:01"
    
     x[2]: "time: 2016-03-12 00:00:02"
     y[2]: "~time: 2016-03-12 00:00:02"
    
     x[3]: "time: 2016-03-12 00:00:03"
     y[3]: "~time: 2016-03-12 00:00:03"
    
     x[4]: "time: 2016-03-12 00:00:04"
     y[4]: "~time: 2016-03-12 00:00:04"
    
     x[5]: "time: 2016-03-12 00:00:05"
     y[5]: "~time: 2016-03-12 00:00:05"
    
     ── 18. Failure: tooltip argument respects ordering (@test-ggplot-tooltip.R#36)
     all(grepl("^density", sapply(txt, "[[", 1))) isn't true.
    
     ── 19. Error: tooltip argument respects ordering (@test-ggplot-tooltip.R#37) ──
     subscript out of bounds
     1: expect_true(all(grepl("^mpg", sapply(txt, "[[", 2)))) at testthat/test-ggplot-tooltip.R:37
     2: quasi_label(enquo(object), label)
     3: eval_bare(get_expr(quo), get_env(quo))
     4: grepl("^mpg", sapply(txt, "[[", 2))
     5: sapply(txt, "[[", 2)
     6: lapply(X = X, FUN = FUN, ...)
    
     [1] "Running test: heatmap-discrete-tooltip"
     [1] "Running test: group-lines-hovertext"
     ── 20. Failure: group domain is included in hovertext (@test-ggplot-tooltip.R#69
     all(grepl(pattern, txt)) isn't true.
    
     ── 21. Failure: tooltip elements are not crossed (@test-ggplot-tooltip.R#91) ──
     `y_equal_ten` not equivalent to `sample_2`.
     4 element mismatches
    
     [1] "Running test: hovertext-display"
     [1] "Running test: violin"
     [1] "Running test: violin-aes"
     [1] "Running test: vline"
     [1] "Running test: vline-multiple"
     [1] "Running test: ylim-one-trace"
     [1] "Running test: error-simple"
     [1] "Running test: error-simple-line"
     [1] "Running test: error-simple-line-point"
     [1] "Running test: error-simple-line-point-crazy"
     [1] "Running test: error-rect-alpha"
     [1] "Running test: plotly-color-scatterplot-color-factor"
     [1] "Running test: plotly-color-scatterplot-color-factor-custom"
     [1] "Running test: plotly-color-scatterplot-color-factor-custom2"
     [1] "Running test: plotly-color-bar-color-factor-custom"
     [1] "Running test: plotly-color-scatterplot-color-numeric"
     [1] "Running test: plotly-color-scatterplot-color-numeric-custom"
     [1] "Running test: plotly-color-scatterplot-scatter3d-axes"
     [1] "Running test: plotly-color-color-manual"
     [1] "Running test: plotly-colorbar"
     [1] "Running test: plotly-colorbar-expand"
     [1] "Running test: plotly-colorbar-restrict"
     [1] "Running test: plotly-colorbar-z-expand"
     [1] "Running test: plotly-colorbar-z-restrict"
     [1] "Running test: plotly-NAs"
     [1] "Running test: plotly-NAs-connect"
     [1] "Running test: plotly-NAs-within-group"
     [1] "Running test: plotly-NAs-within-color"
     [1] "Running test: plotly-NAs-within-color2"
     [1] "Running test: plotly-no-NAs-for-irrelevant-group"
     [1] "Running test: plotly-linetype-linetype"
     [1] "Running test: plotly-linetype-linetype2"
     [1] "Running test: plotly-linetype-linetype3"
     [1] "Running test: plotly-linetype-manual"
     [1] "Running test: plotly-linetype-ordering"
     [1] "Running test: plotly-linetype-alphabetical"
     [1] "Running test: plotly-subplot-simple"
     [1] "Running test: plotly-subplot-simple2"
     [1] "Running test: plotly-subplot-group"
     [1] "Running test: plotly-subplot-shareX"
     [1] "Running test: plotly-subplot-shareY"
     [1] "Running test: plotly-subplot-shareBoth"
     [1] "Running test: plotly-subplot-width-height"
     [1] "Running test: plotly-subplot-recursive"
     [1] "Running test: plotly-subplot-plot-list"
     [1] "Running test: plotly-subplot-ggmatrix"
     [1] "Running test: plotly-subplot-geo-cartesian"
     [1] "Running test: plotly-subplot-subplot-legendgroup"
     [1] "Running test: plotly-symbol-scatterplot-symbol"
     [1] "Running test: plotly-symbol-scatterplot-symbol2"
     [1] "Running test: plotly-symbol-pch"
     [1] "Running test: plotly-symbol-logical"
     [1] "Running test: plotly-symbol-symbol-manual"
     [1] "Running test: plotly-symbol-ordering"
     [1] "Running test: plotly-symbol-alphabetical"
     [1] "Running test: plotly-scatterplot"
     [1] "Running test: plotly-bar-inference"
     [1] "Running test: plotly-box-data-array"
     [1] "Running test: plotly-group-within-trace"
     [1] "Running test: plotly-alpha-blending"
     [1] "Running test: plotly-alpha-no-color"
     [1] "Running test: plotly-factor-axis"
     [1] "Running test: plotly-character-axis"
     [1] "Running test: plotly-histogram"
     [1] "Running test: plotly-histogram-vert"
     [1] "Running test: plotly-inherit-FALSE"
     [1] "Running test: plotly-time-series-summary"
     ══ testthat results ═══════════════════════════════════════════════════════════
     OK: 1134 SKIPPED: 27 FAILED: 21
     1. Failure: Translates both dates and datetimes (with dynamic ticks) correctly (@test-ggplot-lines.R#85)
     2. Failure: Translates both dates and datetimes (with dynamic ticks) correctly (@test-ggplot-lines.R#86)
     3. Failure: geom_linerange() without a y aesthetic translates to a path (@test-ggplot-lines.R#111)
     4. Failure: polygons with different hovertext must be different traces (@test-ggplot-polygons.R#25)
     5. Failure: polygons with different hovertext must be different traces (@test-ggplot-polygons.R#26)
     6. Failure: polygons with different hovertext must be different traces (@test-ggplot-polygons.R#31)
     7. Failure: borders become one trace with NA (@test-ggplot-polygons.R#147)
     8. Failure: borders become one trace with NA (@test-ggplot-polygons.R#149)
     9. Failure: geom_polygon(aes(group)) -> 1 trace (@test-ggplot-polygons.R#162)
     1. ...
    
     Error: testthat unit tests failed
     Execution halted
Flavor: r-devel-linux-x86_64-debian-gcc

Version: 4.7.1
Check: tests
Result: ERROR
     Running ‘testthat.R’ [105s/112s]
    Running the tests in ‘tests/testthat.R’ failed.
    Complete output:
     > library("testthat")
     > library("plotly")
     Loading required package: ggplot2
    
     Attaching package: 'plotly'
    
     The following object is masked from 'package:ggplot2':
    
     last_plot
    
     The following object is masked from 'package:stats':
    
     filter
    
     The following object is masked from 'package:graphics':
    
     layout
    
     > library("RSclient")
     >
     > # report any differences in plot (list) hashes if this is a Travis pull request
     > report_diffs <- grepl("^[0-9]+$", Sys.getenv("TRAVIS_PULL_REQUEST"))
     > # build a ggplot2 comparison table?
     > build_table <- Sys.getenv("PLOTLY_TABLE") == "TRUE"
     >
     > # stuff that should be done once (not everytime save_outputs() is called)
     > if (report_diffs || build_table) {
     + message("Spinning up an independent R session with plotly's master branch installed")
     + Rserve::Rserve(args = "--vanilla --RS-enable-remote")
     + conn <- RSconnect()
     + # ensure the seed is the same for randomized tests
     + set.seed(1)
     + RSeval(conn, "set.seed(1)")
     + # we don't make assumptions about ggplot2 versioning,
     + # but it is _strongly_ recommended to use the CRAN version (of ggplot2)
     + RSeval(conn, "devtools::install_github('ropensci/plotly')")
     + RSeval(conn, "library(plotly)")
     + if (report_diffs) {
     + # hash of the version being tested
     + this_hash <- substr(Sys.getenv("TRAVIS_COMMIT"), 1, 7)
     + # hash of version to compare with (master)
     + master_hash <- RSeval(conn, "packageDescription('plotly')$GithubSHA1")
     + master_hash <- substr(master_hash, 1, 7)
     + # plotly-test-table repo hosts the diff pages & keeps track of previous versions
     + table_dir <- normalizePath("../../plotly-test-table", mustWork = T)
     + # Make sure we have appropriate versions of plotlyjs
     + # (see plotly-test-table/template/template/index.html)
     + file.copy(
     + file.path("..", "inst", "htmlwidgets", "lib", "plotlyjs", "plotly-latest.min.js"),
     + file.path(table_dir, "template", "New.min.js"),
     + overwrite = TRUE
     + )
     + download.file(
     + "https://raw.githubusercontent.com/ropensci/plotly/master/inst/htmlwidgets/lib/plotlyjs/plotly-latest.min.js",
     + file.path(table_dir, "template", "Old.min.js"),
     + method = "curl"
     + )
     + # directory for placing test differences
     + this_dir <- file.path(table_dir, this_hash)
     + if (dir.exists(this_dir)) {
     + message("Tests were already run on this commit. Nuking the old results...")
     + unlink(this_dir, recursive = T)
     + }
     + master_dir <- file.path(table_dir, master_hash)
     + # csv file that tracks plot hashes
     + hash_file <- file.path(table_dir, "hashes.csv")
     + if (!file.exists(hash_file)) {
     + file.create(hash_file)
     + cat("commit,test,hash\n", file = hash_file, append = T)
     + }
     + hash_info <- utils::read.csv(hash_file)
     + master_info <- hash_info[hash_info$commit %in% master_hash, ]
     + }
     + }
     >
     > # Some tests make plot.ly HTTP requests and require a valid user account
     > # (see test-plotly-filename.R). For security reasons, these tests should be
     > # skipped on pull requests (the .travis.yml file uses encrypted credentials
     > # & encrypted environment vars cannot be accessed on pull request builds)
     > skip_if_not_master <- function() {
     + is_pr <- grepl("^[0-9]+$", Sys.getenv("TRAVIS_PULL_REQUEST"))
     + is_r_release <- Sys.getenv("TRAVIS_R_VERSION_STRING", "release") == "release"
     + if (!is_pr && is_r_release) return(invisible(TRUE))
     + skip("plot.ly API calls are only tested on the master build on r-release")
     + }
     >
     > # This function is called within testthat/test-*.R files.
     > # It takes a ggplot or plotly object as input, and it returns a figure
     > # object (aka the data behind the plot).
     > save_outputs <- function(gg, name) {
     + print(paste("Running test:", name))
     + p <- plotly_build(gg)$x[c("data", "layout")]
     + has_diff <- if (report_diffs) {
     + # save a hash of the R object
     + plot_hash <- digest::digest(p)
     + info <- paste(this_hash, name, plot_hash, sep = ",")
     + cat(paste(info, "\n"), file = hash_file, append = T)
     + test_info <- master_info[master_info$test %in% name, ]
     + # is the plot hash different from master?
     + !isTRUE(plot_hash == test_info$hash)
     + } else FALSE
     + if (has_diff || build_table) {
     + RSassign(conn, gg)
     + pm <- RSeval(conn, "tryCatch(plotly::plotly_build(gg)$x[c('data', 'layout')], error = function(e) e$message)")
     + if (build_table) {
     + # save pngs of ggplot
     + filename <- paste0(gsub("\\s+", "-", name), ".png")
     + ggFile <- paste("ggplot", filename, sep = "-")
     + res <- tryCatch(ggsave(ggFile, gg),
     + error = function(e) {
     + err <- qplot() +
     + annotate('text', label = paste('Error:', e$message),
     + x = 1, y = 1, color = 'red')
     + ggsave(ggFile, err, width = 3, height = 2, units = 'in')
     + })
     + img <- function(x, f) {
     + tryCatch(plotly_IMAGE(x, out_file = f, width = 300, height = 400),
     + error = function(e) {
     + err <- qplot() +
     + annotate('text', label = paste('Error:', e$message),
     + x = 1, y = 1, color = 'red')
     + # TODO: convert pixels to inches?
     + ggsave(plotlyFile, err, width = 3, height = 2, units = 'in')
     + })
     + }
     + # save _this_ plotly version
     + plotlyFile <- paste("plotly", this_hash, filename, sep = "-")
     + res <- img(p, plotlyFile)
     + # save _master_ plotly version
     + plotlyFile <- paste("plotly", "master", filename, sep = "-")
     + RSassign(conn, plotlyFile, "plotlyFile")
     + RSassign(conn, img, "img")
     + res <- RSeval(conn, "img(p, plotlyFile)")
     + }
     + # it could be that the hash didn't exist, so make sure they're different
     + # before build a diff page
     + if (plot_hash != digest::digest(pm)) {
     + test_dir <- file.path(this_dir, gsub("\\s+", "-", name))
     + if (dir.exists(test_dir)) stop(shQuote(name), " has already been used to save_outputs() in another test.")
     + dir.create(test_dir, recursive = T)
     + # copy over diffing template
     + file.copy(
     + dir(file.path(table_dir, "template", "template"), full.names = TRUE), test_dir
     + )
     + # overwrite the default JSON
     + writeLines(
     + paste("New =", plotly:::to_JSON(p)),
     + file.path(test_dir, "New.json")
     + )
     + writeLines(
     + paste("Old =", plotly:::to_JSON(pm)),
     + file.path(test_dir, "Old.json")
     + )
     + }
     + }
     + p
     + }
     >
     > # use me just like testthat::test_check()
     > test_run <- function(...) {
     + # shut down the other R session on exit
     + if (report_diffs || build_table) {
     + on.exit(RSshutdown(conn))
     + on.exit(RSclose(conn), add = TRUE)
     + }
     + test_check(...)
     + }
     >
     > if (packageVersion("ggplot2") > "2.2.1") {
     + test_run("plotly")
     + }
     [1] "Running test: cookbook-axes-flevels"
     [1] "Running test: cookbook-axes-ylim.hide"
     [1] "Running test: cookbook-axes-scale.hide"
     [1] "Running test: cookbook-axes-coord-ylim"
     [1] "Running test: cookbook-axes-linear-axes"
     [1] "Running test: cookbook-axes-log2-scale"
     [1] "Running test: cookbook-axes-log2-coord"
     [1] "Running test: cookbook-axes-log2-labels"
     [1] "Running test: cookbook-axes-scale_y_log10"
     [1] "Running test: cookbook-axes-scale_y_log10-labels"
     [1] "Running test: cookbook-axes-no-x-title"
     [1] "Running test: cookbook-axes-scale-name"
     [1] "Running test: cookbook-axes-fonts"
     [1] "Running test: cookbook-axes-label-funs"
     [1] "Running test: cookbook-axes-custom-formatter"
     [1] "Running test: cookbook-axes-blank-minor-major"
     [1] "Running test: cookbook-axes-blank-minor"
     [1] "Running test: cookbook-axes-blank-x"
     [1] "Running test: cookbook-axes-blank-y"
     [1] "Running test: cookbook-axes-basic-bar"
     [1] "Running test: cookbook-axes-basic-horizontal-line"
     [1] "Running test: cookbook-axes-dashed-red-line"
     [1] "Running test: cookbook-axes-bar-error-wide"
     [1] "Running test: cookbook-axes-bar-error-narrow"
     [1] "Running test: cookbook-axes-bar-error-diff"
     [1] "Running test: cookbook-axes-bar-dodge-color"
     [1] "Running test: cookbook-axes-bar-dodge-color-error"
     [1] "Running test: cookbook-axes-bar-dodge-color-err4"
     [1] "Running test: cookbook-axes-scatter-basic"
     [1] "Running test: cookbook-axes-scatter-hline"
     [1] "Running test: cookbook-axes-scatter-hline-vline"
     [1] "Running test: cookbook-axes-scatter-facet"
     [1] "Running test: cookbook-axes-scatter-facet-hline"
     [1] "Running test: cookbook-axes-scatter-facet-hline-vline"
     [1] "Running test: scatterplots-hollow"
     [1] "Running test: scatterplots-smooth-lm"
     [1] "Running test: scatterplots-smooth-lm-se-false"
     [1] "Running test: scatterplots-loess"
     [1] "Running test: scatterplots-color"
     [1] "Running test: scatterplots-scale-color-hue"
     [1] "Running test: scatterplots-full-range"
     [1] "Running test: scatterplots-shape"
     [1] "Running test: scatterplots-shape-manual"
     [1] "Running test: scatterplots-overlap"
     [1] "Running test: scatterplots-jitter"
     [1] "Running test: scatterplots-geom_jitter"
     [1] "Running test: cookbook-axes-single-abline"
     [1] "Running test: cookbook-axes-multiple-abline"
     OMP: Warning #96: Cannot form a team with 11 threads, using 2 instead.
     OMP: Hint Consider unsetting KMP_DEVICE_THREAD_LIMIT (KMP_ALL_THREADS), KMP_TEAMS_THREAD_LIMIT, and OMP_THREAD_LIMIT (if any are set).
     [1] "Running test: area-simple"
     [1] "Running test: area-area-fillcolor"
     [1] "Running test: area-traces_order"
     [1] "Running test: bar-dodge"
     [1] "Running test: bar-stack"
     [1] "Running test: bar-identity"
     [1] "Running test: bar-dates"
     [1] "Running test: bar-nocolor"
     [1] "Running test: bar-color"
     [1] "Running test: bar-black-outline"
     [1] "Running test: bar-aes-fill-guides-color-none"
     [1] "Running test: bar-aes-colour-guides-fill-FALSE"
     [1] "Running test: bar-position-stack"
     [1] "Running test: bar-position-fill"
     [1] "Running test: bar-category-names"
     [1] "Running test: bar-coord-flip"
     [1] "Running test: boxplot"
     [1] "Running test: boxplot-datetime"
     [1] "Running test: boxplot-legends_for_fill"
     [1] "Running test: boxplot-fillcolor"
     [1] "Running test: col"
     [1] "Running test: contour"
     [1] "Running test: date-strings"
     [1] "Running test: date-class-Date"
     [1] "Running test: date-irregular-time-series"
     [1] "Running test: density-simple"
     [1] "Running test: density-fill"
     [1] "Running test: density-color"
     [1] "Running test: density-histogram"
     [1] "Running test: density-traces_order"
     [1] "Running test: density2d"
     [1] "Running test: density2dfill"
     [1] "Running test: errorbar-horizontal"
     [1] "Running test: errorbar"
     [1] "Running test: errorbar-unique-groups"
     [1] "Running test: barley"
     [1] "Running test: 3-panels"
     [1] "Running test: facet_wrap_free"
     [1] "Running test: facet_wrap_free_y"
     [1] "Running test: facet_wrap_free_x"
     [1] "Running test: facet_grid_free"
     [1] "Running test: facet_grid_free_y"
     [1] "Running test: facet_grid_free_x"
     [1] "Running test: facet_wrap_free_mult"
     [1] "Running test: facet_wrap"
     [1] "Running test: facet_wrap-labeller"
     [1] "Running test: facet_grid-labeller"
     [1] "Running test: facet_wrap-free_y"
     [1] "Running test: heatmap"
     [1] "Running test: heatmap-midpoint"
     [1] "Running test: heatmap-discrete"
     [1] "Running test: hex-basic"
     [1] "Running test: hex-bins"
     [1] "Running test: hex-binwidth"
     [1] "Running test: histogram-counts"
     [1] "Running test: histogram-density"
     [1] "Running test: histogram-fill"
     [1] "Running test: histogram-fixed-fill-color"
     [1] "Running test: histogram-density-binwidth"
     [1] "Running test: histogram-fill-factor"
     [1] "Running test: histogram-fill-factor-identity"
     [1] "Running test: histogram-fill-factor-dodge"
     [1] "Running test: histogram-fill-factor-facets"
     [1] "Running test: histogram-vline"
     [1] "Running test: histogram-dates"
     [1] "Running test: histogram-POSIXt-bins"
     [1] "Running test: histogram-Date-bins"
     [1] "Running test: hline"
     [1] "Running test: hline-multiple"
     [1] "Running test: hline-factor"
     [1] "Running test: jitter-basic"
     [1] "Running test: labels-ggtitle"
     [1] "Running test: labels-ylab"
     [1] "Running test: labels-angles"
     [1] "Running test: scatter_legend"
     [1] "Running test: legend-hide"
     [1] "Running test: legend-very-long-legend-items"
     [1] "Running test: legend-one-entry"
     [1] "Running test: legend-hide-legend"
     [1] "Running test: legend-many legend items"
     [1] "Running test: linetype-types"
     [1] "Running test: linetype-colors"
     ── 1. Failure: Translates both dates and datetimes (with dynamic ticks) correctl
     paste("date:", d$date) not equivalent to `dates1`.
     100/100 mismatches
     x[1]: "date: 2002-01-01"
     y[1]: "~date: 2002-01-01"
    
     x[2]: "date: 2002-02-01"
     y[2]: "~date: 2002-02-01"
    
     x[3]: "date: 2002-03-01"
     y[3]: "~date: 2002-03-01"
    
     x[4]: "date: 2002-04-01"
     y[4]: "~date: 2002-04-01"
    
     x[5]: "date: 2002-05-01"
     y[5]: "~date: 2002-05-01"
    
     ── 2. Failure: Translates both dates and datetimes (with dynamic ticks) correctl
     paste("date:", d2$date) not equivalent to `dates2`.
     100/100 mismatches
     x[1]: "date: 2002-01-01 00:00:00"
     y[1]: "~date: 2002-01-01 00:00:00"
    
     x[2]: "date: 2002-02-01 00:00:00"
     y[2]: "~date: 2002-02-01 00:00:00"
    
     x[3]: "date: 2002-03-01 00:00:00"
     y[3]: "~date: 2002-03-01 00:00:00"
    
     x[4]: "date: 2002-04-01 01:00:00"
     y[4]: "~date: 2002-04-01 01:00:00"
    
     x[5]: "date: 2002-05-01 01:00:00"
     y[5]: "~date: 2002-05-01 01:00:00"
    
     ── 3. Failure: geom_linerange() without a y aesthetic translates to a path (@tes
     unlist(l$data[[1]]$text) not equivalent to c(...).
     10/14 mismatches
     x[1]: "~x: 1<br />~ymin: 0"
     y[1]: "x: 1<br />ymin: 0"
    
     x[2]: "~x: 1<br />~ymax: 1"
     y[2]: "x: 1<br />ymax: 1"
    
     x[4]: "~x: 2<br />~ymin: 0"
     y[4]: "x: 2<br />ymin: 0"
    
     x[5]: "~x: 2<br />~ymax: 2"
     y[5]: "x: 2<br />ymax: 2"
    
     x[7]: "~x: 3<br />~ymin: 0"
     y[7]: "x: 3<br />ymin: 0"
    
     [1] "Running test: map-facet"
     [1] "Running test: path-lines-diff-from-paths"
     [1] "Running test: path-colors"
     [1] "Running test: path-colors2"
     [1] "Running test: path-colored-groups-stay-together"
     [1] "Running test: path-line-symbols"
     [1] "Running test: point-size-alpha"
     [1] "Running test: open-shapes"
     [1] "Running test: all-shapes"
     [1] "Running test: point-size-alpha2"
     [1] "Running test: polygon-black"
     ── 4. Failure: polygons with different hovertext must be different traces (@tes
     info$data[[1]]$x not equivalent to c(10, 11, 11, 10, 10).
     5/5 mismatches (average diff: 2)
     [1] 12 - 10 == 2
     [2] 13 - 11 == 2
     [3] 13 - 11 == 2
     [4] 12 - 10 == 2
     [5] 12 - 10 == 2
    
     ── 5. Failure: polygons with different hovertext must be different traces (@tes
     info$data[[2]]$x not equivalent to c(12, 13, 13, 12, 12).
     5/5 mismatches (average diff: 2)
     [1] 10 - 12 == -2
     [2] 11 - 13 == -2
     [3] 11 - 13 == -2
     [4] 10 - 12 == -2
     [5] 10 - 12 == -2
    
     ── 6. Failure: polygons with different hovertext must be different traces (@tes
     sapply(info$data, "[[", "text") not equivalent to c("lab: left", "lab: right").
     2/2 mismatches
     x[1]: "~lab: NA"
     y[1]: "lab: left"
    
     x[2]: "~lab: ~"
     y[2]: "lab: right"
    
     [1] "Running test: polygon-aes-color"
     [1] "Running test: polygon-aes-fill"
     [1] "Running test: polygon-color-aes-fill"
     [1] "Running test: polygon-color-fill-aes-linetype"
     [1] "Running test: polygon-color-fill-aes-size"
     [1] "Running test: polygons-canada-borders"
     ── 7. Failure: borders become one trace with NA (@test-ggplot-polygons.R#147) ─
     length(info$data) not equivalent to 1.
     1/1 mismatches
     [1] 2 - 1 == 1
    
     ── 8. Failure: borders become one trace with NA (@test-ggplot-polygons.R#149) ─
     nchar(info$data[[1]]$text) not equivalent to 0.
     1/1 mismatches
     [1] 10 - 0 == 10
    
     [1] "Running test: polygon-star-group"
     ── 9. Failure: geom_polygon(aes(group)) -> 1 trace (@test-ggplot-polygons.R#162)
     length(has.data) not equivalent to `n.traces`.
     1/1 mismatches
     [1] 2 - 1 == 1
    
     ── 10. Failure: geom_polygon(aes(group)) -> 1 trace (@test-ggplot-polygons.R#165
     tr$x not equivalent to c(0, -1, 2, -2, 1, 0, NA, 10, 9, 12, 8, 11, 10).
     Lengths differ: 6 is not 13
    
     ── 11. Failure: geom_polygon(aes(group)) -> 1 trace (@test-ggplot-polygons.R#168
     tr$y not equivalent to c(2, 0, 1, 1, 0, 2, NA, 2, 0, 1, 1, 0, 2).
     Lengths differ: 6 is not 13
    
     [1] "Running test: polygon-star-group-color"
     ── 12. Failure: geom_polygon(aes(group), color) -> 1 trace (@test-ggplot-polygon
     length(has.data) not equivalent to `n.traces`.
     1/1 mismatches
     [1] 2 - 1 == 1
    
     ── 13. Failure: geom_polygon(aes(group), color) -> 1 trace (@test-ggplot-polygon
     tr$x not equivalent to c(0, -1, 2, -2, 1, 0, NA, 10, 9, 12, 8, 11, 10).
     Lengths differ: 6 is not 13
    
     ── 14. Failure: geom_polygon(aes(group), color) -> 1 trace (@test-ggplot-polygon
     tr$y not equivalent to c(2, 0, 1, 1, 0, 2, NA, 2, 0, 1, 1, 0, 2).
     Lengths differ: 6 is not 13
    
     [1] "Running test: polygon-star-fill-color"
     [1] "Running test: rect-black"
     [1] "Running test: rect-black4"
     [1] "Running test: rect-color"
     [1] "Running test: rect-fill"
     [1] "Running test: rect-fill-color"
     [1] "Running test: rect-fill-hex-alpha"
     [1] "Running test: ribbon-alpha"
     [1] "Running test: ribbon-group"
     [1] "Running test: ribbon-colour"
     [1] "Running test: ribbon-fill"
     [1] "Running test: segment"
     [1] "Running test: segment-multiple-non-numeric"
     [1] "Running test: sf"
     [1] "Running test: sf-fill-text"
     [1] "Running test: sf-points"
     [1] "Running test: size-is-a-vector"
     [1] "Running test: size-global-scaling"
     [1] "Running test: smooth-basic"
     [1] "Running test: smooth-se-false"
     [1] "Running test: smooth-group"
     [1] "Running test: smooth-colour"
     [1] "Running test: smooth-fill2"
     [1] "Running test: smooth-facet"
     ── 15. Failure: Basic geom_spoke() (@test-ggplot-spoke.R#20) ──────────────────
     `angle` not equivalent to rep(paste0("angle: ", format(df$angle)), each = 2).
     200/200 mismatches
     x[1]: "~angle: 0.5735783"
     y[1]: "angle: 0.5735783"
    
     x[2]: "~angle: 0.5735783"
     y[2]: "angle: 0.5735783"
    
     x[3]: "~angle: 3.5275416"
     y[3]: "angle: 3.5275416"
    
     x[4]: "~angle: 3.5275416"
     y[4]: "angle: 3.5275416"
    
     x[5]: "~angle: 4.2230139"
     y[5]: "angle: 4.2230139"
    
     [1] "Running test: step-gg.hv"
     [1] "Running test: step-gg.vh"
     [1] "Running test: step-gg.hvh"
     [1] "Running test: step-gg.vhv"
     [1] "Running test: text"
     [1] "Running test: text-colour"
     [1] "Running test: theme-background"
     [1] "Running test: theme-ticks-and-grids"
     [1] "Running test: theme-ticks-default"
     [1] "Running test: theme-zeroline-default"
     [1] "Running test: theme-marker-default"
     [1] "Running test: theme-panel-border-1"
     [1] "Running test: theme-panel-border-2"
     [1] "Running test: ticks-boxes"
     [1] "Running test: ticks-boxes-facet-grid"
     [1] "Running test: ticks-boxes-scales-free"
     [1] "Running test: ticks-boxes-space-free"
     [1] "Running test: ticks-flip"
     [1] "Running test: ticks-flip-grid"
     [1] "Running test: ticks-flip-grid-free"
     [1] "Running test: ticks-limits-hide"
     [1] "Running test: ticks-limits-gap"
     [1] "Running test: ticks-breaks-nochange"
     [1] "Running test: ticks-breaks-more"
     [1] "Running test: ticks-breaks-less"
     [1] "Running test: ticks-scale-labels"
     [1] "Running test: ticks-hide-ticks-lines-labels"
     [1] "Running test: ticks-hide-ticks-labels"
     [1] "Running test: ticks-ycontinuous-ranges"
     [1] "Running test: ticks-ylim-ranges"
     [1] "Running test: ticks-yreverse-ranges"
     [1] "Running test: ticks-yreverse-limits-ranges"
     [1] "Running test: ticks-ylim-reversed-ranges"
     [1] "Running test: ticks-evenly-spaced-ticks"
     [1] "Running test: ticks-uneven"
     [1] "Running test: ticks-line-breaks"
     [1] "Running test: tooltip-datetime"
     ── 16. Failure: datetimes are displayed in tooltip properly (@test-ggplot-toolti
     paste0("time: ", test$time) not identical to sapply(txt, "[[", 1).
     100/100 mismatches
     x[1]: "time: 2016-03-12 16:33:56"
     y[1]: "~time: 2016-03-12 16:33:56"
    
     x[2]: "time: 2016-03-12 16:34:56"
     y[2]: "~time: 2016-03-12 16:34:56"
    
     x[3]: "time: 2016-03-12 16:35:56"
     y[3]: "~time: 2016-03-12 16:35:56"
    
     x[4]: "time: 2016-03-12 16:36:56"
     y[4]: "~time: 2016-03-12 16:36:56"
    
     x[5]: "time: 2016-03-12 16:37:56"
     y[5]: "~time: 2016-03-12 16:37:56"
    
     [1] "Running test: tooltip-date"
     ── 17. Failure: dates are displayed in tooltip properly (@test-ggplot-tooltip.R#
     paste0("time: ", test$time) not identical to sapply(txt, "[[", 1).
     100/100 mismatches
     x[1]: "time: 2016-03-12 00:00:01"
     y[1]: "~time: 2016-03-12 00:00:01"
    
     x[2]: "time: 2016-03-12 00:00:02"
     y[2]: "~time: 2016-03-12 00:00:02"
    
     x[3]: "time: 2016-03-12 00:00:03"
     y[3]: "~time: 2016-03-12 00:00:03"
    
     x[4]: "time: 2016-03-12 00:00:04"
     y[4]: "~time: 2016-03-12 00:00:04"
    
     x[5]: "time: 2016-03-12 00:00:05"
     y[5]: "~time: 2016-03-12 00:00:05"
    
     ── 18. Failure: tooltip argument respects ordering (@test-ggplot-tooltip.R#36)
     all(grepl("^density", sapply(txt, "[[", 1))) isn't true.
    
     ── 19. Error: tooltip argument respects ordering (@test-ggplot-tooltip.R#37) ──
     subscript out of bounds
     1: expect_true(all(grepl("^mpg", sapply(txt, "[[", 2)))) at testthat/test-ggplot-tooltip.R:37
     2: quasi_label(enquo(object), label)
     3: eval_bare(get_expr(quo), get_env(quo))
     4: grepl("^mpg", sapply(txt, "[[", 2))
     5: sapply(txt, "[[", 2)
     6: lapply(X = X, FUN = FUN, ...)
    
     [1] "Running test: heatmap-discrete-tooltip"
     [1] "Running test: group-lines-hovertext"
     ── 20. Failure: group domain is included in hovertext (@test-ggplot-tooltip.R#69
     all(grepl(pattern, txt)) isn't true.
    
     ── 21. Failure: tooltip elements are not crossed (@test-ggplot-tooltip.R#91) ──
     `y_equal_ten` not equivalent to `sample_2`.
     4 element mismatches
    
     [1] "Running test: hovertext-display"
     [1] "Running test: violin"
     [1] "Running test: violin-aes"
     [1] "Running test: vline"
     [1] "Running test: vline-multiple"
     [1] "Running test: ylim-one-trace"
     [1] "Running test: error-simple"
     [1] "Running test: error-simple-line"
     [1] "Running test: error-simple-line-point"
     [1] "Running test: error-simple-line-point-crazy"
     [1] "Running test: error-rect-alpha"
     [1] "Running test: plotly-color-scatterplot-color-factor"
     [1] "Running test: plotly-color-scatterplot-color-factor-custom"
     [1] "Running test: plotly-color-scatterplot-color-factor-custom2"
     [1] "Running test: plotly-color-bar-color-factor-custom"
     [1] "Running test: plotly-color-scatterplot-color-numeric"
     [1] "Running test: plotly-color-scatterplot-color-numeric-custom"
     [1] "Running test: plotly-color-scatterplot-scatter3d-axes"
     [1] "Running test: plotly-color-color-manual"
     [1] "Running test: plotly-colorbar"
     [1] "Running test: plotly-colorbar-expand"
     [1] "Running test: plotly-colorbar-restrict"
     [1] "Running test: plotly-colorbar-z-expand"
     [1] "Running test: plotly-colorbar-z-restrict"
     [1] "Running test: plotly-NAs"
     [1] "Running test: plotly-NAs-connect"
     [1] "Running test: plotly-NAs-within-group"
     [1] "Running test: plotly-NAs-within-color"
     [1] "Running test: plotly-NAs-within-color2"
     [1] "Running test: plotly-no-NAs-for-irrelevant-group"
     [1] "Running test: plotly-linetype-linetype"
     [1] "Running test: plotly-linetype-linetype2"
     [1] "Running test: plotly-linetype-linetype3"
     [1] "Running test: plotly-linetype-manual"
     [1] "Running test: plotly-linetype-ordering"
     [1] "Running test: plotly-linetype-alphabetical"
     [1] "Running test: plotly-subplot-simple"
     [1] "Running test: plotly-subplot-simple2"
     [1] "Running test: plotly-subplot-group"
     [1] "Running test: plotly-subplot-shareX"
     [1] "Running test: plotly-subplot-shareY"
     [1] "Running test: plotly-subplot-shareBoth"
     [1] "Running test: plotly-subplot-width-height"
     [1] "Running test: plotly-subplot-recursive"
     [1] "Running test: plotly-subplot-plot-list"
     [1] "Running test: plotly-subplot-ggmatrix"
     [1] "Running test: plotly-subplot-geo-cartesian"
     [1] "Running test: plotly-subplot-subplot-legendgroup"
     [1] "Running test: plotly-symbol-scatterplot-symbol"
     [1] "Running test: plotly-symbol-scatterplot-symbol2"
     [1] "Running test: plotly-symbol-pch"
     [1] "Running test: plotly-symbol-logical"
     [1] "Running test: plotly-symbol-symbol-manual"
     [1] "Running test: plotly-symbol-ordering"
     [1] "Running test: plotly-symbol-alphabetical"
     [1] "Running test: plotly-scatterplot"
     [1] "Running test: plotly-bar-inference"
     [1] "Running test: plotly-box-data-array"
     [1] "Running test: plotly-group-within-trace"
     [1] "Running test: plotly-alpha-blending"
     [1] "Running test: plotly-alpha-no-color"
     [1] "Running test: plotly-factor-axis"
     [1] "Running test: plotly-character-axis"
     [1] "Running test: plotly-histogram"
     [1] "Running test: plotly-histogram-vert"
     [1] "Running test: plotly-inherit-FALSE"
     [1] "Running test: plotly-time-series-summary"
     ══ testthat results ═══════════════════════════════════════════════════════════
     OK: 1134 SKIPPED: 27 FAILED: 21
     1. Failure: Translates both dates and datetimes (with dynamic ticks) correctly (@test-ggplot-lines.R#85)
     2. Failure: Translates both dates and datetimes (with dynamic ticks) correctly (@test-ggplot-lines.R#86)
     3. Failure: geom_linerange() without a y aesthetic translates to a path (@test-ggplot-lines.R#111)
     4. Failure: polygons with different hovertext must be different traces (@test-ggplot-polygons.R#25)
     5. Failure: polygons with different hovertext must be different traces (@test-ggplot-polygons.R#26)
     6. Failure: polygons with different hovertext must be different traces (@test-ggplot-polygons.R#31)
     7. Failure: borders become one trace with NA (@test-ggplot-polygons.R#147)
     8. Failure: borders become one trace with NA (@test-ggplot-polygons.R#149)
     9. Failure: geom_polygon(aes(group)) -> 1 trace (@test-ggplot-polygons.R#162)
     1. ...
    
     Error: testthat unit tests failed
     Execution halted
Flavor: r-devel-linux-x86_64-fedora-clang

Version: 4.7.1
Check: tests
Result: ERROR
     Running ‘testthat.R’ [101s/109s]
    Running the tests in ‘tests/testthat.R’ failed.
    Complete output:
     > library("testthat")
     > library("plotly")
     Loading required package: ggplot2
    
     Attaching package: 'plotly'
    
     The following object is masked from 'package:ggplot2':
    
     last_plot
    
     The following object is masked from 'package:stats':
    
     filter
    
     The following object is masked from 'package:graphics':
    
     layout
    
     > library("RSclient")
     >
     > # report any differences in plot (list) hashes if this is a Travis pull request
     > report_diffs <- grepl("^[0-9]+$", Sys.getenv("TRAVIS_PULL_REQUEST"))
     > # build a ggplot2 comparison table?
     > build_table <- Sys.getenv("PLOTLY_TABLE") == "TRUE"
     >
     > # stuff that should be done once (not everytime save_outputs() is called)
     > if (report_diffs || build_table) {
     + message("Spinning up an independent R session with plotly's master branch installed")
     + Rserve::Rserve(args = "--vanilla --RS-enable-remote")
     + conn <- RSconnect()
     + # ensure the seed is the same for randomized tests
     + set.seed(1)
     + RSeval(conn, "set.seed(1)")
     + # we don't make assumptions about ggplot2 versioning,
     + # but it is _strongly_ recommended to use the CRAN version (of ggplot2)
     + RSeval(conn, "devtools::install_github('ropensci/plotly')")
     + RSeval(conn, "library(plotly)")
     + if (report_diffs) {
     + # hash of the version being tested
     + this_hash <- substr(Sys.getenv("TRAVIS_COMMIT"), 1, 7)
     + # hash of version to compare with (master)
     + master_hash <- RSeval(conn, "packageDescription('plotly')$GithubSHA1")
     + master_hash <- substr(master_hash, 1, 7)
     + # plotly-test-table repo hosts the diff pages & keeps track of previous versions
     + table_dir <- normalizePath("../../plotly-test-table", mustWork = T)
     + # Make sure we have appropriate versions of plotlyjs
     + # (see plotly-test-table/template/template/index.html)
     + file.copy(
     + file.path("..", "inst", "htmlwidgets", "lib", "plotlyjs", "plotly-latest.min.js"),
     + file.path(table_dir, "template", "New.min.js"),
     + overwrite = TRUE
     + )
     + download.file(
     + "https://raw.githubusercontent.com/ropensci/plotly/master/inst/htmlwidgets/lib/plotlyjs/plotly-latest.min.js",
     + file.path(table_dir, "template", "Old.min.js"),
     + method = "curl"
     + )
     + # directory for placing test differences
     + this_dir <- file.path(table_dir, this_hash)
     + if (dir.exists(this_dir)) {
     + message("Tests were already run on this commit. Nuking the old results...")
     + unlink(this_dir, recursive = T)
     + }
     + master_dir <- file.path(table_dir, master_hash)
     + # csv file that tracks plot hashes
     + hash_file <- file.path(table_dir, "hashes.csv")
     + if (!file.exists(hash_file)) {
     + file.create(hash_file)
     + cat("commit,test,hash\n", file = hash_file, append = T)
     + }
     + hash_info <- utils::read.csv(hash_file)
     + master_info <- hash_info[hash_info$commit %in% master_hash, ]
     + }
     + }
     >
     > # Some tests make plot.ly HTTP requests and require a valid user account
     > # (see test-plotly-filename.R). For security reasons, these tests should be
     > # skipped on pull requests (the .travis.yml file uses encrypted credentials
     > # & encrypted environment vars cannot be accessed on pull request builds)
     > skip_if_not_master <- function() {
     + is_pr <- grepl("^[0-9]+$", Sys.getenv("TRAVIS_PULL_REQUEST"))
     + is_r_release <- Sys.getenv("TRAVIS_R_VERSION_STRING", "release") == "release"
     + if (!is_pr && is_r_release) return(invisible(TRUE))
     + skip("plot.ly API calls are only tested on the master build on r-release")
     + }
     >
     > # This function is called within testthat/test-*.R files.
     > # It takes a ggplot or plotly object as input, and it returns a figure
     > # object (aka the data behind the plot).
     > save_outputs <- function(gg, name) {
     + print(paste("Running test:", name))
     + p <- plotly_build(gg)$x[c("data", "layout")]
     + has_diff <- if (report_diffs) {
     + # save a hash of the R object
     + plot_hash <- digest::digest(p)
     + info <- paste(this_hash, name, plot_hash, sep = ",")
     + cat(paste(info, "\n"), file = hash_file, append = T)
     + test_info <- master_info[master_info$test %in% name, ]
     + # is the plot hash different from master?
     + !isTRUE(plot_hash == test_info$hash)
     + } else FALSE
     + if (has_diff || build_table) {
     + RSassign(conn, gg)
     + pm <- RSeval(conn, "tryCatch(plotly::plotly_build(gg)$x[c('data', 'layout')], error = function(e) e$message)")
     + if (build_table) {
     + # save pngs of ggplot
     + filename <- paste0(gsub("\\s+", "-", name), ".png")
     + ggFile <- paste("ggplot", filename, sep = "-")
     + res <- tryCatch(ggsave(ggFile, gg),
     + error = function(e) {
     + err <- qplot() +
     + annotate('text', label = paste('Error:', e$message),
     + x = 1, y = 1, color = 'red')
     + ggsave(ggFile, err, width = 3, height = 2, units = 'in')
     + })
     + img <- function(x, f) {
     + tryCatch(plotly_IMAGE(x, out_file = f, width = 300, height = 400),
     + error = function(e) {
     + err <- qplot() +
     + annotate('text', label = paste('Error:', e$message),
     + x = 1, y = 1, color = 'red')
     + # TODO: convert pixels to inches?
     + ggsave(plotlyFile, err, width = 3, height = 2, units = 'in')
     + })
     + }
     + # save _this_ plotly version
     + plotlyFile <- paste("plotly", this_hash, filename, sep = "-")
     + res <- img(p, plotlyFile)
     + # save _master_ plotly version
     + plotlyFile <- paste("plotly", "master", filename, sep = "-")
     + RSassign(conn, plotlyFile, "plotlyFile")
     + RSassign(conn, img, "img")
     + res <- RSeval(conn, "img(p, plotlyFile)")
     + }
     + # it could be that the hash didn't exist, so make sure they're different
     + # before build a diff page
     + if (plot_hash != digest::digest(pm)) {
     + test_dir <- file.path(this_dir, gsub("\\s+", "-", name))
     + if (dir.exists(test_dir)) stop(shQuote(name), " has already been used to save_outputs() in another test.")
     + dir.create(test_dir, recursive = T)
     + # copy over diffing template
     + file.copy(
     + dir(file.path(table_dir, "template", "template"), full.names = TRUE), test_dir
     + )
     + # overwrite the default JSON
     + writeLines(
     + paste("New =", plotly:::to_JSON(p)),
     + file.path(test_dir, "New.json")
     + )
     + writeLines(
     + paste("Old =", plotly:::to_JSON(pm)),
     + file.path(test_dir, "Old.json")
     + )
     + }
     + }
     + p
     + }
     >
     > # use me just like testthat::test_check()
     > test_run <- function(...) {
     + # shut down the other R session on exit
     + if (report_diffs || build_table) {
     + on.exit(RSshutdown(conn))
     + on.exit(RSclose(conn), add = TRUE)
     + }
     + test_check(...)
     + }
     >
     > if (packageVersion("ggplot2") > "2.2.1") {
     + test_run("plotly")
     + }
     [1] "Running test: cookbook-axes-flevels"
     [1] "Running test: cookbook-axes-ylim.hide"
     [1] "Running test: cookbook-axes-scale.hide"
     [1] "Running test: cookbook-axes-coord-ylim"
     [1] "Running test: cookbook-axes-linear-axes"
     [1] "Running test: cookbook-axes-log2-scale"
     [1] "Running test: cookbook-axes-log2-coord"
     [1] "Running test: cookbook-axes-log2-labels"
     [1] "Running test: cookbook-axes-scale_y_log10"
     [1] "Running test: cookbook-axes-scale_y_log10-labels"
     [1] "Running test: cookbook-axes-no-x-title"
     [1] "Running test: cookbook-axes-scale-name"
     [1] "Running test: cookbook-axes-fonts"
     [1] "Running test: cookbook-axes-label-funs"
     [1] "Running test: cookbook-axes-custom-formatter"
     [1] "Running test: cookbook-axes-blank-minor-major"
     [1] "Running test: cookbook-axes-blank-minor"
     [1] "Running test: cookbook-axes-blank-x"
     [1] "Running test: cookbook-axes-blank-y"
     [1] "Running test: cookbook-axes-basic-bar"
     [1] "Running test: cookbook-axes-basic-horizontal-line"
     [1] "Running test: cookbook-axes-dashed-red-line"
     [1] "Running test: cookbook-axes-bar-error-wide"
     [1] "Running test: cookbook-axes-bar-error-narrow"
     [1] "Running test: cookbook-axes-bar-error-diff"
     [1] "Running test: cookbook-axes-bar-dodge-color"
     [1] "Running test: cookbook-axes-bar-dodge-color-error"
     [1] "Running test: cookbook-axes-bar-dodge-color-err4"
     [1] "Running test: cookbook-axes-scatter-basic"
     [1] "Running test: cookbook-axes-scatter-hline"
     [1] "Running test: cookbook-axes-scatter-hline-vline"
     [1] "Running test: cookbook-axes-scatter-facet"
     [1] "Running test: cookbook-axes-scatter-facet-hline"
     [1] "Running test: cookbook-axes-scatter-facet-hline-vline"
     [1] "Running test: scatterplots-hollow"
     [1] "Running test: scatterplots-smooth-lm"
     [1] "Running test: scatterplots-smooth-lm-se-false"
     [1] "Running test: scatterplots-loess"
     [1] "Running test: scatterplots-color"
     [1] "Running test: scatterplots-scale-color-hue"
     [1] "Running test: scatterplots-full-range"
     [1] "Running test: scatterplots-shape"
     [1] "Running test: scatterplots-shape-manual"
     [1] "Running test: scatterplots-overlap"
     [1] "Running test: scatterplots-jitter"
     [1] "Running test: scatterplots-geom_jitter"
     [1] "Running test: cookbook-axes-single-abline"
     [1] "Running test: cookbook-axes-multiple-abline"
     [1] "Running test: area-simple"
     [1] "Running test: area-area-fillcolor"
     [1] "Running test: area-traces_order"
     [1] "Running test: bar-dodge"
     [1] "Running test: bar-stack"
     [1] "Running test: bar-identity"
     [1] "Running test: bar-dates"
     [1] "Running test: bar-nocolor"
     [1] "Running test: bar-color"
     [1] "Running test: bar-black-outline"
     [1] "Running test: bar-aes-fill-guides-color-none"
     [1] "Running test: bar-aes-colour-guides-fill-FALSE"
     [1] "Running test: bar-position-stack"
     [1] "Running test: bar-position-fill"
     [1] "Running test: bar-category-names"
     [1] "Running test: bar-coord-flip"
     [1] "Running test: boxplot"
     [1] "Running test: boxplot-datetime"
     [1] "Running test: boxplot-legends_for_fill"
     [1] "Running test: boxplot-fillcolor"
     [1] "Running test: col"
     [1] "Running test: contour"
     [1] "Running test: date-strings"
     [1] "Running test: date-class-Date"
     [1] "Running test: date-irregular-time-series"
     [1] "Running test: density-simple"
     [1] "Running test: density-fill"
     [1] "Running test: density-color"
     [1] "Running test: density-histogram"
     [1] "Running test: density-traces_order"
     [1] "Running test: density2d"
     [1] "Running test: density2dfill"
     [1] "Running test: errorbar-horizontal"
     [1] "Running test: errorbar"
     [1] "Running test: errorbar-unique-groups"
     [1] "Running test: barley"
     [1] "Running test: 3-panels"
     [1] "Running test: facet_wrap_free"
     [1] "Running test: facet_wrap_free_y"
     [1] "Running test: facet_wrap_free_x"
     [1] "Running test: facet_grid_free"
     [1] "Running test: facet_grid_free_y"
     [1] "Running test: facet_grid_free_x"
     [1] "Running test: facet_wrap_free_mult"
     [1] "Running test: facet_wrap"
     [1] "Running test: facet_wrap-labeller"
     [1] "Running test: facet_grid-labeller"
     [1] "Running test: facet_wrap-free_y"
     [1] "Running test: heatmap"
     [1] "Running test: heatmap-midpoint"
     [1] "Running test: heatmap-discrete"
     [1] "Running test: hex-basic"
     [1] "Running test: hex-bins"
     [1] "Running test: hex-binwidth"
     [1] "Running test: histogram-counts"
     [1] "Running test: histogram-density"
     [1] "Running test: histogram-fill"
     [1] "Running test: histogram-fixed-fill-color"
     [1] "Running test: histogram-density-binwidth"
     [1] "Running test: histogram-fill-factor"
     [1] "Running test: histogram-fill-factor-identity"
     [1] "Running test: histogram-fill-factor-dodge"
     [1] "Running test: histogram-fill-factor-facets"
     [1] "Running test: histogram-vline"
     [1] "Running test: histogram-dates"
     [1] "Running test: histogram-POSIXt-bins"
     [1] "Running test: histogram-Date-bins"
     [1] "Running test: hline"
     [1] "Running test: hline-multiple"
     [1] "Running test: hline-factor"
     [1] "Running test: jitter-basic"
     [1] "Running test: labels-ggtitle"
     [1] "Running test: labels-ylab"
     [1] "Running test: labels-angles"
     [1] "Running test: scatter_legend"
     [1] "Running test: legend-hide"
     [1] "Running test: legend-very-long-legend-items"
     [1] "Running test: legend-one-entry"
     [1] "Running test: legend-hide-legend"
     [1] "Running test: legend-many legend items"
     [1] "Running test: linetype-types"
     [1] "Running test: linetype-colors"
     ── 1. Failure: Translates both dates and datetimes (with dynamic ticks) correctl
     paste("date:", d$date) not equivalent to `dates1`.
     100/100 mismatches
     x[1]: "date: 2002-01-01"
     y[1]: "~date: 2002-01-01"
    
     x[2]: "date: 2002-02-01"
     y[2]: "~date: 2002-02-01"
    
     x[3]: "date: 2002-03-01"
     y[3]: "~date: 2002-03-01"
    
     x[4]: "date: 2002-04-01"
     y[4]: "~date: 2002-04-01"
    
     x[5]: "date: 2002-05-01"
     y[5]: "~date: 2002-05-01"
    
     ── 2. Failure: Translates both dates and datetimes (with dynamic ticks) correctl
     paste("date:", d2$date) not equivalent to `dates2`.
     100/100 mismatches
     x[1]: "date: 2002-01-01 00:00:00"
     y[1]: "~date: 2002-01-01 00:00:00"
    
     x[2]: "date: 2002-02-01 00:00:00"
     y[2]: "~date: 2002-02-01 00:00:00"
    
     x[3]: "date: 2002-03-01 00:00:00"
     y[3]: "~date: 2002-03-01 00:00:00"
    
     x[4]: "date: 2002-04-01 01:00:00"
     y[4]: "~date: 2002-04-01 01:00:00"
    
     x[5]: "date: 2002-05-01 01:00:00"
     y[5]: "~date: 2002-05-01 01:00:00"
    
     ── 3. Failure: geom_linerange() without a y aesthetic translates to a path (@tes
     unlist(l$data[[1]]$text) not equivalent to c(...).
     10/14 mismatches
     x[1]: "~x: 1<br />~ymin: 0"
     y[1]: "x: 1<br />ymin: 0"
    
     x[2]: "~x: 1<br />~ymax: 1"
     y[2]: "x: 1<br />ymax: 1"
    
     x[4]: "~x: 2<br />~ymin: 0"
     y[4]: "x: 2<br />ymin: 0"
    
     x[5]: "~x: 2<br />~ymax: 2"
     y[5]: "x: 2<br />ymax: 2"
    
     x[7]: "~x: 3<br />~ymin: 0"
     y[7]: "x: 3<br />ymin: 0"
    
     [1] "Running test: map-facet"
     [1] "Running test: path-lines-diff-from-paths"
     [1] "Running test: path-colors"
     [1] "Running test: path-colors2"
     [1] "Running test: path-colored-groups-stay-together"
     [1] "Running test: path-line-symbols"
     [1] "Running test: point-size-alpha"
     [1] "Running test: open-shapes"
     [1] "Running test: all-shapes"
     [1] "Running test: point-size-alpha2"
     [1] "Running test: polygon-black"
     ── 4. Failure: polygons with different hovertext must be different traces (@tes
     info$data[[1]]$x not equivalent to c(10, 11, 11, 10, 10).
     5/5 mismatches (average diff: 2)
     [1] 12 - 10 == 2
     [2] 13 - 11 == 2
     [3] 13 - 11 == 2
     [4] 12 - 10 == 2
     [5] 12 - 10 == 2
    
     ── 5. Failure: polygons with different hovertext must be different traces (@tes
     info$data[[2]]$x not equivalent to c(12, 13, 13, 12, 12).
     5/5 mismatches (average diff: 2)
     [1] 10 - 12 == -2
     [2] 11 - 13 == -2
     [3] 11 - 13 == -2
     [4] 10 - 12 == -2
     [5] 10 - 12 == -2
    
     ── 6. Failure: polygons with different hovertext must be different traces (@tes
     sapply(info$data, "[[", "text") not equivalent to c("lab: left", "lab: right").
     2/2 mismatches
     x[1]: "~lab: NA"
     y[1]: "lab: left"
    
     x[2]: "~lab: ~"
     y[2]: "lab: right"
    
     [1] "Running test: polygon-aes-color"
     [1] "Running test: polygon-aes-fill"
     [1] "Running test: polygon-color-aes-fill"
     [1] "Running test: polygon-color-fill-aes-linetype"
     [1] "Running test: polygon-color-fill-aes-size"
     [1] "Running test: polygons-canada-borders"
     ── 7. Failure: borders become one trace with NA (@test-ggplot-polygons.R#147) ─
     length(info$data) not equivalent to 1.
     1/1 mismatches
     [1] 2 - 1 == 1
    
     ── 8. Failure: borders become one trace with NA (@test-ggplot-polygons.R#149) ─
     nchar(info$data[[1]]$text) not equivalent to 0.
     1/1 mismatches
     [1] 10 - 0 == 10
    
     [1] "Running test: polygon-star-group"
     ── 9. Failure: geom_polygon(aes(group)) -> 1 trace (@test-ggplot-polygons.R#162)
     length(has.data) not equivalent to `n.traces`.
     1/1 mismatches
     [1] 2 - 1 == 1
    
     ── 10. Failure: geom_polygon(aes(group)) -> 1 trace (@test-ggplot-polygons.R#165
     tr$x not equivalent to c(0, -1, 2, -2, 1, 0, NA, 10, 9, 12, 8, 11, 10).
     Lengths differ: 6 is not 13
    
     ── 11. Failure: geom_polygon(aes(group)) -> 1 trace (@test-ggplot-polygons.R#168
     tr$y not equivalent to c(2, 0, 1, 1, 0, 2, NA, 2, 0, 1, 1, 0, 2).
     Lengths differ: 6 is not 13
    
     [1] "Running test: polygon-star-group-color"
     ── 12. Failure: geom_polygon(aes(group), color) -> 1 trace (@test-ggplot-polygon
     length(has.data) not equivalent to `n.traces`.
     1/1 mismatches
     [1] 2 - 1 == 1
    
     ── 13. Failure: geom_polygon(aes(group), color) -> 1 trace (@test-ggplot-polygon
     tr$x not equivalent to c(0, -1, 2, -2, 1, 0, NA, 10, 9, 12, 8, 11, 10).
     Lengths differ: 6 is not 13
    
     ── 14. Failure: geom_polygon(aes(group), color) -> 1 trace (@test-ggplot-polygon
     tr$y not equivalent to c(2, 0, 1, 1, 0, 2, NA, 2, 0, 1, 1, 0, 2).
     Lengths differ: 6 is not 13
    
     [1] "Running test: polygon-star-fill-color"
     [1] "Running test: rect-black"
     [1] "Running test: rect-black4"
     [1] "Running test: rect-color"
     [1] "Running test: rect-fill"
     [1] "Running test: rect-fill-color"
     [1] "Running test: rect-fill-hex-alpha"
     [1] "Running test: ribbon-alpha"
     [1] "Running test: ribbon-group"
     [1] "Running test: ribbon-colour"
     [1] "Running test: ribbon-fill"
     [1] "Running test: segment"
     [1] "Running test: segment-multiple-non-numeric"
     [1] "Running test: sf"
     [1] "Running test: sf-fill-text"
     [1] "Running test: sf-points"
     [1] "Running test: size-is-a-vector"
     [1] "Running test: size-global-scaling"
     [1] "Running test: smooth-basic"
     [1] "Running test: smooth-se-false"
     [1] "Running test: smooth-group"
     [1] "Running test: smooth-colour"
     [1] "Running test: smooth-fill2"
     [1] "Running test: smooth-facet"
     ── 15. Failure: Basic geom_spoke() (@test-ggplot-spoke.R#20) ──────────────────
     `angle` not equivalent to rep(paste0("angle: ", format(df$angle)), each = 2).
     200/200 mismatches
     x[1]: "~angle: 1.83195925"
     y[1]: "angle: 1.83195925"
    
     x[2]: "~angle: 1.83195925"
     y[2]: "angle: 1.83195925"
    
     x[3]: "~angle: 1.85410697"
     y[3]: "angle: 1.85410697"
    
     x[4]: "~angle: 1.85410697"
     y[4]: "angle: 1.85410697"
    
     x[5]: "~angle: 1.10530783"
     y[5]: "angle: 1.10530783"
    
     [1] "Running test: step-gg.hv"
     [1] "Running test: step-gg.vh"
     [1] "Running test: step-gg.hvh"
     [1] "Running test: step-gg.vhv"
     [1] "Running test: text"
     [1] "Running test: text-colour"
     [1] "Running test: theme-background"
     [1] "Running test: theme-ticks-and-grids"
     [1] "Running test: theme-ticks-default"
     [1] "Running test: theme-zeroline-default"
     [1] "Running test: theme-marker-default"
     [1] "Running test: theme-panel-border-1"
     [1] "Running test: theme-panel-border-2"
     [1] "Running test: ticks-boxes"
     [1] "Running test: ticks-boxes-facet-grid"
     [1] "Running test: ticks-boxes-scales-free"
     [1] "Running test: ticks-boxes-space-free"
     [1] "Running test: ticks-flip"
     [1] "Running test: ticks-flip-grid"
     [1] "Running test: ticks-flip-grid-free"
     [1] "Running test: ticks-limits-hide"
     [1] "Running test: ticks-limits-gap"
     [1] "Running test: ticks-breaks-nochange"
     [1] "Running test: ticks-breaks-more"
     [1] "Running test: ticks-breaks-less"
     [1] "Running test: ticks-scale-labels"
     [1] "Running test: ticks-hide-ticks-lines-labels"
     [1] "Running test: ticks-hide-ticks-labels"
     [1] "Running test: ticks-ycontinuous-ranges"
     [1] "Running test: ticks-ylim-ranges"
     [1] "Running test: ticks-yreverse-ranges"
     [1] "Running test: ticks-yreverse-limits-ranges"
     [1] "Running test: ticks-ylim-reversed-ranges"
     [1] "Running test: ticks-evenly-spaced-ticks"
     [1] "Running test: ticks-uneven"
     [1] "Running test: ticks-line-breaks"
     [1] "Running test: tooltip-datetime"
     ── 16. Failure: datetimes are displayed in tooltip properly (@test-ggplot-toolti
     paste0("time: ", test$time) not identical to sapply(txt, "[[", 1).
     100/100 mismatches
     x[1]: "time: 2016-03-12 16:33:56"
     y[1]: "~time: 2016-03-12 16:33:56"
    
     x[2]: "time: 2016-03-12 16:34:56"
     y[2]: "~time: 2016-03-12 16:34:56"
    
     x[3]: "time: 2016-03-12 16:35:56"
     y[3]: "~time: 2016-03-12 16:35:56"
    
     x[4]: "time: 2016-03-12 16:36:56"
     y[4]: "~time: 2016-03-12 16:36:56"
    
     x[5]: "time: 2016-03-12 16:37:56"
     y[5]: "~time: 2016-03-12 16:37:56"
    
     [1] "Running test: tooltip-date"
     ── 17. Failure: dates are displayed in tooltip properly (@test-ggplot-tooltip.R#
     paste0("time: ", test$time) not identical to sapply(txt, "[[", 1).
     100/100 mismatches
     x[1]: "time: 2016-03-12 00:00:01"
     y[1]: "~time: 2016-03-12 00:00:01"
    
     x[2]: "time: 2016-03-12 00:00:02"
     y[2]: "~time: 2016-03-12 00:00:02"
    
     x[3]: "time: 2016-03-12 00:00:03"
     y[3]: "~time: 2016-03-12 00:00:03"
    
     x[4]: "time: 2016-03-12 00:00:04"
     y[4]: "~time: 2016-03-12 00:00:04"
    
     x[5]: "time: 2016-03-12 00:00:05"
     y[5]: "~time: 2016-03-12 00:00:05"
    
     ── 18. Failure: tooltip argument respects ordering (@test-ggplot-tooltip.R#36)
     all(grepl("^density", sapply(txt, "[[", 1))) isn't true.
    
     ── 19. Error: tooltip argument respects ordering (@test-ggplot-tooltip.R#37) ──
     subscript out of bounds
     1: expect_true(all(grepl("^mpg", sapply(txt, "[[", 2)))) at testthat/test-ggplot-tooltip.R:37
     2: quasi_label(enquo(object), label)
     3: eval_bare(get_expr(quo), get_env(quo))
     4: grepl("^mpg", sapply(txt, "[[", 2))
     5: sapply(txt, "[[", 2)
     6: lapply(X = X, FUN = FUN, ...)
    
     [1] "Running test: heatmap-discrete-tooltip"
     [1] "Running test: group-lines-hovertext"
     ── 20. Failure: group domain is included in hovertext (@test-ggplot-tooltip.R#69
     all(grepl(pattern, txt)) isn't true.
    
     ── 21. Failure: tooltip elements are not crossed (@test-ggplot-tooltip.R#91) ──
     `y_equal_ten` not equivalent to `sample_2`.
     4 element mismatches
    
     [1] "Running test: hovertext-display"
     [1] "Running test: violin"
     [1] "Running test: violin-aes"
     [1] "Running test: vline"
     [1] "Running test: vline-multiple"
     [1] "Running test: ylim-one-trace"
     [1] "Running test: error-simple"
     [1] "Running test: error-simple-line"
     [1] "Running test: error-simple-line-point"
     [1] "Running test: error-simple-line-point-crazy"
     [1] "Running test: error-rect-alpha"
     [1] "Running test: plotly-color-scatterplot-color-factor"
     [1] "Running test: plotly-color-scatterplot-color-factor-custom"
     [1] "Running test: plotly-color-scatterplot-color-factor-custom2"
     [1] "Running test: plotly-color-bar-color-factor-custom"
     [1] "Running test: plotly-color-scatterplot-color-numeric"
     [1] "Running test: plotly-color-scatterplot-color-numeric-custom"
     [1] "Running test: plotly-color-scatterplot-scatter3d-axes"
     [1] "Running test: plotly-color-color-manual"
     [1] "Running test: plotly-colorbar"
     [1] "Running test: plotly-colorbar-expand"
     [1] "Running test: plotly-colorbar-restrict"
     [1] "Running test: plotly-colorbar-z-expand"
     [1] "Running test: plotly-colorbar-z-restrict"
     [1] "Running test: plotly-NAs"
     [1] "Running test: plotly-NAs-connect"
     [1] "Running test: plotly-NAs-within-group"
     [1] "Running test: plotly-NAs-within-color"
     [1] "Running test: plotly-NAs-within-color2"
     [1] "Running test: plotly-no-NAs-for-irrelevant-group"
     [1] "Running test: plotly-linetype-linetype"
     [1] "Running test: plotly-linetype-linetype2"
     [1] "Running test: plotly-linetype-linetype3"
     [1] "Running test: plotly-linetype-manual"
     [1] "Running test: plotly-linetype-ordering"
     [1] "Running test: plotly-linetype-alphabetical"
     [1] "Running test: plotly-subplot-simple"
     [1] "Running test: plotly-subplot-simple2"
     [1] "Running test: plotly-subplot-group"
     [1] "Running test: plotly-subplot-shareX"
     [1] "Running test: plotly-subplot-shareY"
     [1] "Running test: plotly-subplot-shareBoth"
     [1] "Running test: plotly-subplot-width-height"
     [1] "Running test: plotly-subplot-recursive"
     [1] "Running test: plotly-subplot-plot-list"
     [1] "Running test: plotly-subplot-ggmatrix"
     [1] "Running test: plotly-subplot-geo-cartesian"
     [1] "Running test: plotly-subplot-subplot-legendgroup"
     [1] "Running test: plotly-symbol-scatterplot-symbol"
     [1] "Running test: plotly-symbol-scatterplot-symbol2"
     [1] "Running test: plotly-symbol-pch"
     [1] "Running test: plotly-symbol-logical"
     [1] "Running test: plotly-symbol-symbol-manual"
     [1] "Running test: plotly-symbol-ordering"
     [1] "Running test: plotly-symbol-alphabetical"
     [1] "Running test: plotly-scatterplot"
     [1] "Running test: plotly-bar-inference"
     [1] "Running test: plotly-box-data-array"
     [1] "Running test: plotly-group-within-trace"
     [1] "Running test: plotly-alpha-blending"
     [1] "Running test: plotly-alpha-no-color"
     [1] "Running test: plotly-factor-axis"
     [1] "Running test: plotly-character-axis"
     [1] "Running test: plotly-histogram"
     [1] "Running test: plotly-histogram-vert"
     [1] "Running test: plotly-inherit-FALSE"
     [1] "Running test: plotly-time-series-summary"
     ══ testthat results ═══════════════════════════════════════════════════════════
     OK: 1134 SKIPPED: 27 FAILED: 21
     1. Failure: Translates both dates and datetimes (with dynamic ticks) correctly (@test-ggplot-lines.R#85)
     2. Failure: Translates both dates and datetimes (with dynamic ticks) correctly (@test-ggplot-lines.R#86)
     3. Failure: geom_linerange() without a y aesthetic translates to a path (@test-ggplot-lines.R#111)
     4. Failure: polygons with different hovertext must be different traces (@test-ggplot-polygons.R#25)
     5. Failure: polygons with different hovertext must be different traces (@test-ggplot-polygons.R#26)
     6. Failure: polygons with different hovertext must be different traces (@test-ggplot-polygons.R#31)
     7. Failure: borders become one trace with NA (@test-ggplot-polygons.R#147)
     8. Failure: borders become one trace with NA (@test-ggplot-polygons.R#149)
     9. Failure: geom_polygon(aes(group)) -> 1 trace (@test-ggplot-polygons.R#162)
     1. ...
    
     Error: testthat unit tests failed
     Execution halted
Flavor: r-devel-linux-x86_64-fedora-gcc

Version: 4.7.1
Check: tests
Result: ERROR
     Running 'testthat.R' [86s]
    Running the tests in 'tests/testthat.R' failed.
    Complete output:
     > library("testthat")
     > library("plotly")
     Loading required package: ggplot2
    
     Attaching package: 'plotly'
    
     The following object is masked from 'package:ggplot2':
    
     last_plot
    
     The following object is masked from 'package:stats':
    
     filter
    
     The following object is masked from 'package:graphics':
    
     layout
    
     > library("RSclient")
     >
     > # report any differences in plot (list) hashes if this is a Travis pull request
     > report_diffs <- grepl("^[0-9]+$", Sys.getenv("TRAVIS_PULL_REQUEST"))
     > # build a ggplot2 comparison table?
     > build_table <- Sys.getenv("PLOTLY_TABLE") == "TRUE"
     >
     > # stuff that should be done once (not everytime save_outputs() is called)
     > if (report_diffs || build_table) {
     + message("Spinning up an independent R session with plotly's master branch installed")
     + Rserve::Rserve(args = "--vanilla --RS-enable-remote")
     + conn <- RSconnect()
     + # ensure the seed is the same for randomized tests
     + set.seed(1)
     + RSeval(conn, "set.seed(1)")
     + # we don't make assumptions about ggplot2 versioning,
     + # but it is _strongly_ recommended to use the CRAN version (of ggplot2)
     + RSeval(conn, "devtools::install_github('ropensci/plotly')")
     + RSeval(conn, "library(plotly)")
     + if (report_diffs) {
     + # hash of the version being tested
     + this_hash <- substr(Sys.getenv("TRAVIS_COMMIT"), 1, 7)
     + # hash of version to compare with (master)
     + master_hash <- RSeval(conn, "packageDescription('plotly')$GithubSHA1")
     + master_hash <- substr(master_hash, 1, 7)
     + # plotly-test-table repo hosts the diff pages & keeps track of previous versions
     + table_dir <- normalizePath("../../plotly-test-table", mustWork = T)
     + # Make sure we have appropriate versions of plotlyjs
     + # (see plotly-test-table/template/template/index.html)
     + file.copy(
     + file.path("..", "inst", "htmlwidgets", "lib", "plotlyjs", "plotly-latest.min.js"),
     + file.path(table_dir, "template", "New.min.js"),
     + overwrite = TRUE
     + )
     + download.file(
     + "https://raw.githubusercontent.com/ropensci/plotly/master/inst/htmlwidgets/lib/plotlyjs/plotly-latest.min.js",
     + file.path(table_dir, "template", "Old.min.js"),
     + method = "curl"
     + )
     + # directory for placing test differences
     + this_dir <- file.path(table_dir, this_hash)
     + if (dir.exists(this_dir)) {
     + message("Tests were already run on this commit. Nuking the old results...")
     + unlink(this_dir, recursive = T)
     + }
     + master_dir <- file.path(table_dir, master_hash)
     + # csv file that tracks plot hashes
     + hash_file <- file.path(table_dir, "hashes.csv")
     + if (!file.exists(hash_file)) {
     + file.create(hash_file)
     + cat("commit,test,hash\n", file = hash_file, append = T)
     + }
     + hash_info <- utils::read.csv(hash_file)
     + master_info <- hash_info[hash_info$commit %in% master_hash, ]
     + }
     + }
     >
     > # Some tests make plot.ly HTTP requests and require a valid user account
     > # (see test-plotly-filename.R). For security reasons, these tests should be
     > # skipped on pull requests (the .travis.yml file uses encrypted credentials
     > # & encrypted environment vars cannot be accessed on pull request builds)
     > skip_if_not_master <- function() {
     + is_pr <- grepl("^[0-9]+$", Sys.getenv("TRAVIS_PULL_REQUEST"))
     + is_r_release <- Sys.getenv("TRAVIS_R_VERSION_STRING", "release") == "release"
     + if (!is_pr && is_r_release) return(invisible(TRUE))
     + skip("plot.ly API calls are only tested on the master build on r-release")
     + }
     >
     > # This function is called within testthat/test-*.R files.
     > # It takes a ggplot or plotly object as input, and it returns a figure
     > # object (aka the data behind the plot).
     > save_outputs <- function(gg, name) {
     + print(paste("Running test:", name))
     + p <- plotly_build(gg)$x[c("data", "layout")]
     + has_diff <- if (report_diffs) {
     + # save a hash of the R object
     + plot_hash <- digest::digest(p)
     + info <- paste(this_hash, name, plot_hash, sep = ",")
     + cat(paste(info, "\n"), file = hash_file, append = T)
     + test_info <- master_info[master_info$test %in% name, ]
     + # is the plot hash different from master?
     + !isTRUE(plot_hash == test_info$hash)
     + } else FALSE
     + if (has_diff || build_table) {
     + RSassign(conn, gg)
     + pm <- RSeval(conn, "tryCatch(plotly::plotly_build(gg)$x[c('data', 'layout')], error = function(e) e$message)")
     + if (build_table) {
     + # save pngs of ggplot
     + filename <- paste0(gsub("\\s+", "-", name), ".png")
     + ggFile <- paste("ggplot", filename, sep = "-")
     + res <- tryCatch(ggsave(ggFile, gg),
     + error = function(e) {
     + err <- qplot() +
     + annotate('text', label = paste('Error:', e$message),
     + x = 1, y = 1, color = 'red')
     + ggsave(ggFile, err, width = 3, height = 2, units = 'in')
     + })
     + img <- function(x, f) {
     + tryCatch(plotly_IMAGE(x, out_file = f, width = 300, height = 400),
     + error = function(e) {
     + err <- qplot() +
     + annotate('text', label = paste('Error:', e$message),
     + x = 1, y = 1, color = 'red')
     + # TODO: convert pixels to inches?
     + ggsave(plotlyFile, err, width = 3, height = 2, units = 'in')
     + })
     + }
     + # save _this_ plotly version
     + plotlyFile <- paste("plotly", this_hash, filename, sep = "-")
     + res <- img(p, plotlyFile)
     + # save _master_ plotly version
     + plotlyFile <- paste("plotly", "master", filename, sep = "-")
     + RSassign(conn, plotlyFile, "plotlyFile")
     + RSassign(conn, img, "img")
     + res <- RSeval(conn, "img(p, plotlyFile)")
     + }
     + # it could be that the hash didn't exist, so make sure they're different
     + # before build a diff page
     + if (plot_hash != digest::digest(pm)) {
     + test_dir <- file.path(this_dir, gsub("\\s+", "-", name))
     + if (dir.exists(test_dir)) stop(shQuote(name), " has already been used to save_outputs() in another test.")
     + dir.create(test_dir, recursive = T)
     + # copy over diffing template
     + file.copy(
     + dir(file.path(table_dir, "template", "template"), full.names = TRUE), test_dir
     + )
     + # overwrite the default JSON
     + writeLines(
     + paste("New =", plotly:::to_JSON(p)),
     + file.path(test_dir, "New.json")
     + )
     + writeLines(
     + paste("Old =", plotly:::to_JSON(pm)),
     + file.path(test_dir, "Old.json")
     + )
     + }
     + }
     + p
     + }
     >
     > # use me just like testthat::test_check()
     > test_run <- function(...) {
     + # shut down the other R session on exit
     + if (report_diffs || build_table) {
     + on.exit(RSshutdown(conn))
     + on.exit(RSclose(conn), add = TRUE)
     + }
     + test_check(...)
     + }
     >
     > if (packageVersion("ggplot2") > "2.2.1") {
     + test_run("plotly")
     + }
     [1] "Running test: cookbook-axes-flevels"
     [1] "Running test: cookbook-axes-ylim.hide"
     [1] "Running test: cookbook-axes-scale.hide"
     [1] "Running test: cookbook-axes-coord-ylim"
     [1] "Running test: cookbook-axes-linear-axes"
     [1] "Running test: cookbook-axes-log2-scale"
     [1] "Running test: cookbook-axes-log2-coord"
     [1] "Running test: cookbook-axes-log2-labels"
     [1] "Running test: cookbook-axes-scale_y_log10"
     [1] "Running test: cookbook-axes-scale_y_log10-labels"
     [1] "Running test: cookbook-axes-no-x-title"
     [1] "Running test: cookbook-axes-scale-name"
     [1] "Running test: cookbook-axes-fonts"
     [1] "Running test: cookbook-axes-label-funs"
     [1] "Running test: cookbook-axes-custom-formatter"
     [1] "Running test: cookbook-axes-blank-minor-major"
     [1] "Running test: cookbook-axes-blank-minor"
     [1] "Running test: cookbook-axes-blank-x"
     [1] "Running test: cookbook-axes-blank-y"
     [1] "Running test: cookbook-axes-basic-bar"
     [1] "Running test: cookbook-axes-basic-horizontal-line"
     [1] "Running test: cookbook-axes-dashed-red-line"
     [1] "Running test: cookbook-axes-bar-error-wide"
     [1] "Running test: cookbook-axes-bar-error-narrow"
     [1] "Running test: cookbook-axes-bar-error-diff"
     [1] "Running test: cookbook-axes-bar-dodge-color"
     [1] "Running test: cookbook-axes-bar-dodge-color-error"
     [1] "Running test: cookbook-axes-bar-dodge-color-err4"
     [1] "Running test: cookbook-axes-scatter-basic"
     [1] "Running test: cookbook-axes-scatter-hline"
     [1] "Running test: cookbook-axes-scatter-hline-vline"
     [1] "Running test: cookbook-axes-scatter-facet"
     [1] "Running test: cookbook-axes-scatter-facet-hline"
     [1] "Running test: cookbook-axes-scatter-facet-hline-vline"
     [1] "Running test: scatterplots-hollow"
     [1] "Running test: scatterplots-smooth-lm"
     [1] "Running test: scatterplots-smooth-lm-se-false"
     [1] "Running test: scatterplots-loess"
     [1] "Running test: scatterplots-color"
     [1] "Running test: scatterplots-scale-color-hue"
     [1] "Running test: scatterplots-full-range"
     [1] "Running test: scatterplots-shape"
     [1] "Running test: scatterplots-shape-manual"
     [1] "Running test: scatterplots-overlap"
     [1] "Running test: scatterplots-jitter"
     [1] "Running test: scatterplots-geom_jitter"
     [1] "Running test: cookbook-axes-single-abline"
     [1] "Running test: cookbook-axes-multiple-abline"
     [1] "Running test: area-simple"
     [1] "Running test: area-area-fillcolor"
     [1] "Running test: area-traces_order"
     [1] "Running test: bar-dodge"
     [1] "Running test: bar-stack"
     [1] "Running test: bar-identity"
     [1] "Running test: bar-dates"
     [1] "Running test: bar-nocolor"
     [1] "Running test: bar-color"
     [1] "Running test: bar-black-outline"
     [1] "Running test: bar-aes-fill-guides-color-none"
     [1] "Running test: bar-aes-colour-guides-fill-FALSE"
     [1] "Running test: bar-position-stack"
     [1] "Running test: bar-position-fill"
     [1] "Running test: bar-category-names"
     [1] "Running test: bar-coord-flip"
     [1] "Running test: boxplot"
     [1] "Running test: boxplot-datetime"
     [1] "Running test: boxplot-legends_for_fill"
     [1] "Running test: boxplot-fillcolor"
     [1] "Running test: col"
     [1] "Running test: contour"
     [1] "Running test: date-strings"
     [1] "Running test: date-class-Date"
     [1] "Running test: date-irregular-time-series"
     [1] "Running test: density-simple"
     [1] "Running test: density-fill"
     [1] "Running test: density-color"
     [1] "Running test: density-histogram"
     [1] "Running test: density-traces_order"
     [1] "Running test: density2d"
     [1] "Running test: density2dfill"
     [1] "Running test: errorbar-horizontal"
     [1] "Running test: errorbar"
     [1] "Running test: errorbar-unique-groups"
     [1] "Running test: barley"
     [1] "Running test: 3-panels"
     [1] "Running test: facet_wrap_free"
     [1] "Running test: facet_wrap_free_y"
     [1] "Running test: facet_wrap_free_x"
     [1] "Running test: facet_grid_free"
     [1] "Running test: facet_grid_free_y"
     [1] "Running test: facet_grid_free_x"
     [1] "Running test: facet_wrap_free_mult"
     [1] "Running test: facet_wrap"
     [1] "Running test: facet_wrap-labeller"
     [1] "Running test: facet_grid-labeller"
     [1] "Running test: facet_wrap-free_y"
     [1] "Running test: heatmap"
     [1] "Running test: heatmap-midpoint"
     [1] "Running test: heatmap-discrete"
     [1] "Running test: hex-basic"
     [1] "Running test: hex-bins"
     [1] "Running test: hex-binwidth"
     [1] "Running test: histogram-counts"
     [1] "Running test: histogram-density"
     [1] "Running test: histogram-fill"
     [1] "Running test: histogram-fixed-fill-color"
     [1] "Running test: histogram-density-binwidth"
     [1] "Running test: histogram-fill-factor"
     [1] "Running test: histogram-fill-factor-identity"
     [1] "Running test: histogram-fill-factor-dodge"
     [1] "Running test: histogram-fill-factor-facets"
     [1] "Running test: histogram-vline"
     [1] "Running test: histogram-dates"
     [1] "Running test: histogram-POSIXt-bins"
     [1] "Running test: histogram-Date-bins"
     [1] "Running test: hline"
     [1] "Running test: hline-multiple"
     [1] "Running test: hline-factor"
     [1] "Running test: jitter-basic"
     [1] "Running test: labels-ggtitle"
     [1] "Running test: labels-ylab"
     [1] "Running test: labels-angles"
     [1] "Running test: scatter_legend"
     [1] "Running test: legend-hide"
     [1] "Running test: legend-very-long-legend-items"
     [1] "Running test: legend-one-entry"
     [1] "Running test: legend-hide-legend"
     [1] "Running test: legend-many legend items"
     [1] "Running test: linetype-types"
     [1] "Running test: linetype-colors"
     -- 1. Failure: Translates both dates and datetimes (with dynamic ticks) correctl
     paste("date:", d$date) not equivalent to `dates1`.
     100/100 mismatches
     x[1]: "date: 2002-01-01"
     y[1]: "~date: 2002-01-01"
    
     x[2]: "date: 2002-02-01"
     y[2]: "~date: 2002-02-01"
    
     x[3]: "date: 2002-03-01"
     y[3]: "~date: 2002-03-01"
    
     x[4]: "date: 2002-04-01"
     y[4]: "~date: 2002-04-01"
    
     x[5]: "date: 2002-05-01"
     y[5]: "~date: 2002-05-01"
    
     -- 2. Failure: Translates both dates and datetimes (with dynamic ticks) correctl
     paste("date:", d2$date) not equivalent to `dates2`.
     100/100 mismatches
     x[1]: "date: 2002-01-01 01:00:00"
     y[1]: "~date: 2002-01-01 01:00:00"
    
     x[2]: "date: 2002-02-01 01:00:00"
     y[2]: "~date: 2002-02-01 01:00:00"
    
     x[3]: "date: 2002-03-01 01:00:00"
     y[3]: "~date: 2002-03-01 01:00:00"
    
     x[4]: "date: 2002-04-01 02:00:00"
     y[4]: "~date: 2002-04-01 02:00:00"
    
     x[5]: "date: 2002-05-01 02:00:00"
     y[5]: "~date: 2002-05-01 02:00:00"
    
     -- 3. Failure: geom_linerange() without a y aesthetic translates to a path (@tes
     unlist(l$data[[1]]$text) not equivalent to c(...).
     10/14 mismatches
     x[1]: "~x: 1<br />~ymin: 0"
     y[1]: "x: 1<br />ymin: 0"
    
     x[2]: "~x: 1<br />~ymax: 1"
     y[2]: "x: 1<br />ymax: 1"
    
     x[4]: "~x: 2<br />~ymin: 0"
     y[4]: "x: 2<br />ymin: 0"
    
     x[5]: "~x: 2<br />~ymax: 2"
     y[5]: "x: 2<br />ymax: 2"
    
     x[7]: "~x: 3<br />~ymin: 0"
     y[7]: "x: 3<br />ymin: 0"
    
     [1] "Running test: map-facet"
     [1] "Running test: path-lines-diff-from-paths"
     [1] "Running test: path-colors"
     [1] "Running test: path-colors2"
     [1] "Running test: path-colored-groups-stay-together"
     [1] "Running test: path-line-symbols"
     [1] "Running test: point-size-alpha"
     [1] "Running test: open-shapes"
     [1] "Running test: all-shapes"
     [1] "Running test: point-size-alpha2"
     [1] "Running test: polygon-black"
     -- 4. Failure: polygons with different hovertext must be different traces (@tes
     info$data[[1]]$x not equivalent to c(10, 11, 11, 10, 10).
     5/5 mismatches (average diff: 2)
     [1] 12 - 10 == 2
     [2] 13 - 11 == 2
     [3] 13 - 11 == 2
     [4] 12 - 10 == 2
     [5] 12 - 10 == 2
    
     -- 5. Failure: polygons with different hovertext must be different traces (@tes
     info$data[[2]]$x not equivalent to c(12, 13, 13, 12, 12).
     5/5 mismatches (average diff: 2)
     [1] 10 - 12 == -2
     [2] 11 - 13 == -2
     [3] 11 - 13 == -2
     [4] 10 - 12 == -2
     [5] 10 - 12 == -2
    
     -- 6. Failure: polygons with different hovertext must be different traces (@tes
     sapply(info$data, "[[", "text") not equivalent to c("lab: left", "lab: right").
     2/2 mismatches
     x[1]: "~lab: NA"
     y[1]: "lab: left"
    
     x[2]: "~lab: ~"
     y[2]: "lab: right"
    
     [1] "Running test: polygon-aes-color"
     [1] "Running test: polygon-aes-fill"
     [1] "Running test: polygon-color-aes-fill"
     [1] "Running test: polygon-color-fill-aes-linetype"
     [1] "Running test: polygon-color-fill-aes-size"
     [1] "Running test: polygons-canada-borders"
     -- 7. Failure: borders become one trace with NA (@test-ggplot-polygons.R#147) -
     length(info$data) not equivalent to 1.
     1/1 mismatches
     [1] 2 - 1 == 1
    
     -- 8. Failure: borders become one trace with NA (@test-ggplot-polygons.R#149) -
     nchar(info$data[[1]]$text) not equivalent to 0.
     1/1 mismatches
     [1] 10 - 0 == 10
    
     [1] "Running test: polygon-star-group"
     -- 9. Failure: geom_polygon(aes(group)) -> 1 trace (@test-ggplot-polygons.R#162)
     length(has.data) not equivalent to `n.traces`.
     1/1 mismatches
     [1] 2 - 1 == 1
    
     -- 10. Failure: geom_polygon(aes(group)) -> 1 trace (@test-ggplot-polygons.R#165
     tr$x not equivalent to c(0, -1, 2, -2, 1, 0, NA, 10, 9, 12, 8, 11, 10).
     Lengths differ: 6 is not 13
    
     -- 11. Failure: geom_polygon(aes(group)) -> 1 trace (@test-ggplot-polygons.R#168
     tr$y not equivalent to c(2, 0, 1, 1, 0, 2, NA, 2, 0, 1, 1, 0, 2).
     Lengths differ: 6 is not 13
    
     [1] "Running test: polygon-star-group-color"
     -- 12. Failure: geom_polygon(aes(group), color) -> 1 trace (@test-ggplot-polygon
     length(has.data) not equivalent to `n.traces`.
     1/1 mismatches
     [1] 2 - 1 == 1
    
     -- 13. Failure: geom_polygon(aes(group), color) -> 1 trace (@test-ggplot-polygon
     tr$x not equivalent to c(0, -1, 2, -2, 1, 0, NA, 10, 9, 12, 8, 11, 10).
     Lengths differ: 6 is not 13
    
     -- 14. Failure: geom_polygon(aes(group), color) -> 1 trace (@test-ggplot-polygon
     tr$y not equivalent to c(2, 0, 1, 1, 0, 2, NA, 2, 0, 1, 1, 0, 2).
     Lengths differ: 6 is not 13
    
     [1] "Running test: polygon-star-fill-color"
     [1] "Running test: rect-black"
     [1] "Running test: rect-black4"
     [1] "Running test: rect-color"
     [1] "Running test: rect-fill"
     [1] "Running test: rect-fill-color"
     [1] "Running test: rect-fill-hex-alpha"
     [1] "Running test: ribbon-alpha"
     [1] "Running test: ribbon-group"
     [1] "Running test: ribbon-colour"
     [1] "Running test: ribbon-fill"
     [1] "Running test: segment"
     [1] "Running test: segment-multiple-non-numeric"
     [1] "Running test: sf"
     [1] "Running test: sf-fill-text"
     [1] "Running test: sf-points"
     [1] "Running test: size-is-a-vector"
     [1] "Running test: size-global-scaling"
     [1] "Running test: smooth-basic"
     [1] "Running test: smooth-se-false"
     [1] "Running test: smooth-group"
     [1] "Running test: smooth-colour"
     [1] "Running test: smooth-fill2"
     [1] "Running test: smooth-facet"
     -- 15. Failure: Basic geom_spoke() (@test-ggplot-spoke.R#20) ------------------
     `angle` not equivalent to rep(paste0("angle: ", format(df$angle)), each = 2).
     200/200 mismatches
     x[1]: "~angle: 3.6034833"
     y[1]: "angle: 3.6034833"
    
     x[2]: "~angle: 3.6034833"
     y[2]: "angle: 3.6034833"
    
     x[3]: "~angle: 1.6697646"
     y[3]: "angle: 1.6697646"
    
     x[4]: "~angle: 1.6697646"
     y[4]: "angle: 1.6697646"
    
     x[5]: "~angle: 1.2717858"
     y[5]: "angle: 1.2717858"
    
     [1] "Running test: step-gg.hv"
     [1] "Running test: step-gg.vh"
     [1] "Running test: step-gg.hvh"
     [1] "Running test: step-gg.vhv"
     [1] "Running test: text"
     [1] "Running test: text-colour"
     [1] "Running test: theme-background"
     [1] "Running test: theme-ticks-and-grids"
     [1] "Running test: theme-ticks-default"
     [1] "Running test: theme-zeroline-default"
     [1] "Running test: theme-marker-default"
     [1] "Running test: theme-panel-border-1"
     [1] "Running test: theme-panel-border-2"
     [1] "Running test: ticks-boxes"
     [1] "Running test: ticks-boxes-facet-grid"
     [1] "Running test: ticks-boxes-scales-free"
     [1] "Running test: ticks-boxes-space-free"
     [1] "Running test: ticks-flip"
     [1] "Running test: ticks-flip-grid"
     [1] "Running test: ticks-flip-grid-free"
     [1] "Running test: ticks-limits-hide"
     [1] "Running test: ticks-limits-gap"
     [1] "Running test: ticks-breaks-nochange"
     [1] "Running test: ticks-breaks-more"
     [1] "Running test: ticks-breaks-less"
     [1] "Running test: ticks-scale-labels"
     [1] "Running test: ticks-hide-ticks-lines-labels"
     [1] "Running test: ticks-hide-ticks-labels"
     [1] "Running test: ticks-ycontinuous-ranges"
     [1] "Running test: ticks-ylim-ranges"
     [1] "Running test: ticks-yreverse-ranges"
     [1] "Running test: ticks-yreverse-limits-ranges"
     [1] "Running test: ticks-ylim-reversed-ranges"
     [1] "Running test: ticks-evenly-spaced-ticks"
     [1] "Running test: ticks-uneven"
     [1] "Running test: ticks-line-breaks"
     [1] "Running test: tooltip-datetime"
     -- 16. Failure: datetimes are displayed in tooltip properly (@test-ggplot-toolti
     paste0("time: ", test$time) not identical to sapply(txt, "[[", 1).
     100/100 mismatches
     x[1]: "time: 2016-03-12 16:33:56"
     y[1]: "~time: 2016-03-12 16:33:56"
    
     x[2]: "time: 2016-03-12 16:34:56"
     y[2]: "~time: 2016-03-12 16:34:56"
    
     x[3]: "time: 2016-03-12 16:35:56"
     y[3]: "~time: 2016-03-12 16:35:56"
    
     x[4]: "time: 2016-03-12 16:36:56"
     y[4]: "~time: 2016-03-12 16:36:56"
    
     x[5]: "time: 2016-03-12 16:37:56"
     y[5]: "~time: 2016-03-12 16:37:56"
    
     [1] "Running test: tooltip-date"
     -- 17. Failure: dates are displayed in tooltip properly (@test-ggplot-tooltip.R#
     paste0("time: ", test$time) not identical to sapply(txt, "[[", 1).
     100/100 mismatches
     x[1]: "time: 2016-03-12 00:00:01"
     y[1]: "~time: 2016-03-12 00:00:01"
    
     x[2]: "time: 2016-03-12 00:00:02"
     y[2]: "~time: 2016-03-12 00:00:02"
    
     x[3]: "time: 2016-03-12 00:00:03"
     y[3]: "~time: 2016-03-12 00:00:03"
    
     x[4]: "time: 2016-03-12 00:00:04"
     y[4]: "~time: 2016-03-12 00:00:04"
    
     x[5]: "time: 2016-03-12 00:00:05"
     y[5]: "~time: 2016-03-12 00:00:05"
    
     -- 18. Failure: tooltip argument respects ordering (@test-ggplot-tooltip.R#36)
     all(grepl("^density", sapply(txt, "[[", 1))) isn't true.
    
     -- 19. Error: tooltip argument respects ordering (@test-ggplot-tooltip.R#37) --
     subscript out of bounds
     1: expect_true(all(grepl("^mpg", sapply(txt, "[[", 2)))) at testthat/test-ggplot-tooltip.R:37
     2: quasi_label(enquo(object), label)
     3: eval_bare(get_expr(quo), get_env(quo))
     4: grepl("^mpg", sapply(txt, "[[", 2))
     5: sapply(txt, "[[", 2)
     6: lapply(X = X, FUN = FUN, ...)
    
     [1] "Running test: heatmap-discrete-tooltip"
     [1] "Running test: group-lines-hovertext"
     -- 20. Failure: group domain is included in hovertext (@test-ggplot-tooltip.R#69
     all(grepl(pattern, txt)) isn't true.
    
     -- 21. Failure: tooltip elements are not crossed (@test-ggplot-tooltip.R#91) --
     `y_equal_ten` not equivalent to `sample_2`.
     4 element mismatches
    
     [1] "Running test: hovertext-display"
     [1] "Running test: violin"
     [1] "Running test: violin-aes"
     [1] "Running test: vline"
     [1] "Running test: vline-multiple"
     [1] "Running test: ylim-one-trace"
     [1] "Running test: error-simple"
     [1] "Running test: error-simple-line"
     [1] "Running test: error-simple-line-point"
     [1] "Running test: error-simple-line-point-crazy"
     [1] "Running test: error-rect-alpha"
     [1] "Running test: plotly-color-scatterplot-color-factor"
     [1] "Running test: plotly-color-scatterplot-color-factor-custom"
     [1] "Running test: plotly-color-scatterplot-color-factor-custom2"
     [1] "Running test: plotly-color-bar-color-factor-custom"
     [1] "Running test: plotly-color-scatterplot-color-numeric"
     [1] "Running test: plotly-color-scatterplot-color-numeric-custom"
     [1] "Running test: plotly-color-scatterplot-scatter3d-axes"
     [1] "Running test: plotly-color-color-manual"
     [1] "Running test: plotly-colorbar"
     [1] "Running test: plotly-colorbar-expand"
     [1] "Running test: plotly-colorbar-restrict"
     [1] "Running test: plotly-colorbar-z-expand"
     [1] "Running test: plotly-colorbar-z-restrict"
     [1] "Running test: plotly-NAs"
     [1] "Running test: plotly-NAs-connect"
     [1] "Running test: plotly-NAs-within-group"
     [1] "Running test: plotly-NAs-within-color"
     [1] "Running test: plotly-NAs-within-color2"
     [1] "Running test: plotly-no-NAs-for-irrelevant-group"
     [1] "Running test: plotly-linetype-linetype"
     [1] "Running test: plotly-linetype-linetype2"
     [1] "Running test: plotly-linetype-linetype3"
     [1] "Running test: plotly-linetype-manual"
     [1] "Running test: plotly-linetype-ordering"
     [1] "Running test: plotly-linetype-alphabetical"
     [1] "Running test: plotly-subplot-simple"
     [1] "Running test: plotly-subplot-simple2"
     [1] "Running test: plotly-subplot-group"
     [1] "Running test: plotly-subplot-shareX"
     [1] "Running test: plotly-subplot-shareY"
     [1] "Running test: plotly-subplot-shareBoth"
     [1] "Running test: plotly-subplot-width-height"
     [1] "Running test: plotly-subplot-recursive"
     [1] "Running test: plotly-subplot-plot-list"
     [1] "Running test: plotly-subplot-ggmatrix"
     [1] "Running test: plotly-subplot-geo-cartesian"
     [1] "Running test: plotly-subplot-subplot-legendgroup"
     [1] "Running test: plotly-symbol-scatterplot-symbol"
     [1] "Running test: plotly-symbol-scatterplot-symbol2"
     [1] "Running test: plotly-symbol-pch"
     [1] "Running test: plotly-symbol-logical"
     [1] "Running test: plotly-symbol-symbol-manual"
     [1] "Running test: plotly-symbol-ordering"
     [1] "Running test: plotly-symbol-alphabetical"
     [1] "Running test: plotly-scatterplot"
     [1] "Running test: plotly-bar-inference"
     [1] "Running test: plotly-box-data-array"
     [1] "Running test: plotly-group-within-trace"
     [1] "Running test: plotly-alpha-blending"
     [1] "Running test: plotly-alpha-no-color"
     [1] "Running test: plotly-factor-axis"
     [1] "Running test: plotly-character-axis"
     [1] "Running test: plotly-histogram"
     [1] "Running test: plotly-histogram-vert"
     [1] "Running test: plotly-inherit-FALSE"
     [1] "Running test: plotly-time-series-summary"
     == testthat results ===========================================================
     OK: 1134 SKIPPED: 27 FAILED: 21
     1. Failure: Translates both dates and datetimes (with dynamic ticks) correctly (@test-ggplot-lines.R#85)
     2. Failure: Translates both dates and datetimes (with dynamic ticks) correctly (@test-ggplot-lines.R#86)
     3. Failure: geom_linerange() without a y aesthetic translates to a path (@test-ggplot-lines.R#111)
     4. Failure: polygons with different hovertext must be different traces (@test-ggplot-polygons.R#25)
     5. Failure: polygons with different hovertext must be different traces (@test-ggplot-polygons.R#26)
     6. Failure: polygons with different hovertext must be different traces (@test-ggplot-polygons.R#31)
     7. Failure: borders become one trace with NA (@test-ggplot-polygons.R#147)
     8. Failure: borders become one trace with NA (@test-ggplot-polygons.R#149)
     9. Failure: geom_polygon(aes(group)) -> 1 trace (@test-ggplot-polygons.R#162)
     1. ...
    
     Error: testthat unit tests failed
     Execution halted
Flavor: r-devel-windows-ix86+x86_64

Version: 4.7.1
Check: tests
Result: ERROR
     Running ‘testthat.R’ [88s/109s]
    Running the tests in ‘tests/testthat.R’ failed.
    Complete output:
     > library("testthat")
     > library("plotly")
     Loading required package: ggplot2
    
     Attaching package: 'plotly'
    
     The following object is masked from 'package:ggplot2':
    
     last_plot
    
     The following object is masked from 'package:stats':
    
     filter
    
     The following object is masked from 'package:graphics':
    
     layout
    
     > library("RSclient")
     >
     > # report any differences in plot (list) hashes if this is a Travis pull request
     > report_diffs <- grepl("^[0-9]+$", Sys.getenv("TRAVIS_PULL_REQUEST"))
     > # build a ggplot2 comparison table?
     > build_table <- Sys.getenv("PLOTLY_TABLE") == "TRUE"
     >
     > # stuff that should be done once (not everytime save_outputs() is called)
     > if (report_diffs || build_table) {
     + message("Spinning up an independent R session with plotly's master branch installed")
     + Rserve::Rserve(args = "--vanilla --RS-enable-remote")
     + conn <- RSconnect()
     + # ensure the seed is the same for randomized tests
     + set.seed(1)
     + RSeval(conn, "set.seed(1)")
     + # we don't make assumptions about ggplot2 versioning,
     + # but it is _strongly_ recommended to use the CRAN version (of ggplot2)
     + RSeval(conn, "devtools::install_github('ropensci/plotly')")
     + RSeval(conn, "library(plotly)")
     + if (report_diffs) {
     + # hash of the version being tested
     + this_hash <- substr(Sys.getenv("TRAVIS_COMMIT"), 1, 7)
     + # hash of version to compare with (master)
     + master_hash <- RSeval(conn, "packageDescription('plotly')$GithubSHA1")
     + master_hash <- substr(master_hash, 1, 7)
     + # plotly-test-table repo hosts the diff pages & keeps track of previous versions
     + table_dir <- normalizePath("../../plotly-test-table", mustWork = T)
     + # Make sure we have appropriate versions of plotlyjs
     + # (see plotly-test-table/template/template/index.html)
     + file.copy(
     + file.path("..", "inst", "htmlwidgets", "lib", "plotlyjs", "plotly-latest.min.js"),
     + file.path(table_dir, "template", "New.min.js"),
     + overwrite = TRUE
     + )
     + download.file(
     + "https://raw.githubusercontent.com/ropensci/plotly/master/inst/htmlwidgets/lib/plotlyjs/plotly-latest.min.js",
     + file.path(table_dir, "template", "Old.min.js"),
     + method = "curl"
     + )
     + # directory for placing test differences
     + this_dir <- file.path(table_dir, this_hash)
     + if (dir.exists(this_dir)) {
     + message("Tests were already run on this commit. Nuking the old results...")
     + unlink(this_dir, recursive = T)
     + }
     + master_dir <- file.path(table_dir, master_hash)
     + # csv file that tracks plot hashes
     + hash_file <- file.path(table_dir, "hashes.csv")
     + if (!file.exists(hash_file)) {
     + file.create(hash_file)
     + cat("commit,test,hash\n", file = hash_file, append = T)
     + }
     + hash_info <- utils::read.csv(hash_file)
     + master_info <- hash_info[hash_info$commit %in% master_hash, ]
     + }
     + }
     >
     > # Some tests make plot.ly HTTP requests and require a valid user account
     > # (see test-plotly-filename.R). For security reasons, these tests should be
     > # skipped on pull requests (the .travis.yml file uses encrypted credentials
     > # & encrypted environment vars cannot be accessed on pull request builds)
     > skip_if_not_master <- function() {
     + is_pr <- grepl("^[0-9]+$", Sys.getenv("TRAVIS_PULL_REQUEST"))
     + is_r_release <- Sys.getenv("TRAVIS_R_VERSION_STRING", "release") == "release"
     + if (!is_pr && is_r_release) return(invisible(TRUE))
     + skip("plot.ly API calls are only tested on the master build on r-release")
     + }
     >
     > # This function is called within testthat/test-*.R files.
     > # It takes a ggplot or plotly object as input, and it returns a figure
     > # object (aka the data behind the plot).
     > save_outputs <- function(gg, name) {
     + print(paste("Running test:", name))
     + p <- plotly_build(gg)$x[c("data", "layout")]
     + has_diff <- if (report_diffs) {
     + # save a hash of the R object
     + plot_hash <- digest::digest(p)
     + info <- paste(this_hash, name, plot_hash, sep = ",")
     + cat(paste(info, "\n"), file = hash_file, append = T)
     + test_info <- master_info[master_info$test %in% name, ]
     + # is the plot hash different from master?
     + !isTRUE(plot_hash == test_info$hash)
     + } else FALSE
     + if (has_diff || build_table) {
     + RSassign(conn, gg)
     + pm <- RSeval(conn, "tryCatch(plotly::plotly_build(gg)$x[c('data', 'layout')], error = function(e) e$message)")
     + if (build_table) {
     + # save pngs of ggplot
     + filename <- paste0(gsub("\\s+", "-", name), ".png")
     + ggFile <- paste("ggplot", filename, sep = "-")
     + res <- tryCatch(ggsave(ggFile, gg),
     + error = function(e) {
     + err <- qplot() +
     + annotate('text', label = paste('Error:', e$message),
     + x = 1, y = 1, color = 'red')
     + ggsave(ggFile, err, width = 3, height = 2, units = 'in')
     + })
     + img <- function(x, f) {
     + tryCatch(plotly_IMAGE(x, out_file = f, width = 300, height = 400),
     + error = function(e) {
     + err <- qplot() +
     + annotate('text', label = paste('Error:', e$message),
     + x = 1, y = 1, color = 'red')
     + # TODO: convert pixels to inches?
     + ggsave(plotlyFile, err, width = 3, height = 2, units = 'in')
     + })
     + }
     + # save _this_ plotly version
     + plotlyFile <- paste("plotly", this_hash, filename, sep = "-")
     + res <- img(p, plotlyFile)
     + # save _master_ plotly version
     + plotlyFile <- paste("plotly", "master", filename, sep = "-")
     + RSassign(conn, plotlyFile, "plotlyFile")
     + RSassign(conn, img, "img")
     + res <- RSeval(conn, "img(p, plotlyFile)")
     + }
     + # it could be that the hash didn't exist, so make sure they're different
     + # before build a diff page
     + if (plot_hash != digest::digest(pm)) {
     + test_dir <- file.path(this_dir, gsub("\\s+", "-", name))
     + if (dir.exists(test_dir)) stop(shQuote(name), " has already been used to save_outputs() in another test.")
     + dir.create(test_dir, recursive = T)
     + # copy over diffing template
     + file.copy(
     + dir(file.path(table_dir, "template", "template"), full.names = TRUE), test_dir
     + )
     + # overwrite the default JSON
     + writeLines(
     + paste("New =", plotly:::to_JSON(p)),
     + file.path(test_dir, "New.json")
     + )
     + writeLines(
     + paste("Old =", plotly:::to_JSON(pm)),
     + file.path(test_dir, "Old.json")
     + )
     + }
     + }
     + p
     + }
     >
     > # use me just like testthat::test_check()
     > test_run <- function(...) {
     + # shut down the other R session on exit
     + if (report_diffs || build_table) {
     + on.exit(RSshutdown(conn))
     + on.exit(RSclose(conn), add = TRUE)
     + }
     + test_check(...)
     + }
     >
     > if (packageVersion("ggplot2") > "2.2.1") {
     + test_run("plotly")
     + }
     [1] "Running test: cookbook-axes-flevels"
     [1] "Running test: cookbook-axes-ylim.hide"
     [1] "Running test: cookbook-axes-scale.hide"
     [1] "Running test: cookbook-axes-coord-ylim"
     [1] "Running test: cookbook-axes-linear-axes"
     [1] "Running test: cookbook-axes-log2-scale"
     [1] "Running test: cookbook-axes-log2-coord"
     [1] "Running test: cookbook-axes-log2-labels"
     [1] "Running test: cookbook-axes-scale_y_log10"
     [1] "Running test: cookbook-axes-scale_y_log10-labels"
     [1] "Running test: cookbook-axes-no-x-title"
     [1] "Running test: cookbook-axes-scale-name"
     [1] "Running test: cookbook-axes-fonts"
     [1] "Running test: cookbook-axes-label-funs"
     [1] "Running test: cookbook-axes-custom-formatter"
     [1] "Running test: cookbook-axes-blank-minor-major"
     [1] "Running test: cookbook-axes-blank-minor"
     [1] "Running test: cookbook-axes-blank-x"
     [1] "Running test: cookbook-axes-blank-y"
     [1] "Running test: cookbook-axes-basic-bar"
     [1] "Running test: cookbook-axes-basic-horizontal-line"
     [1] "Running test: cookbook-axes-dashed-red-line"
     [1] "Running test: cookbook-axes-bar-error-wide"
     [1] "Running test: cookbook-axes-bar-error-narrow"
     [1] "Running test: cookbook-axes-bar-error-diff"
     [1] "Running test: cookbook-axes-bar-dodge-color"
     [1] "Running test: cookbook-axes-bar-dodge-color-error"
     [1] "Running test: cookbook-axes-bar-dodge-color-err4"
     [1] "Running test: cookbook-axes-scatter-basic"
     [1] "Running test: cookbook-axes-scatter-hline"
     [1] "Running test: cookbook-axes-scatter-hline-vline"
     [1] "Running test: cookbook-axes-scatter-facet"
     [1] "Running test: cookbook-axes-scatter-facet-hline"
     [1] "Running test: cookbook-axes-scatter-facet-hline-vline"
     [1] "Running test: scatterplots-hollow"
     [1] "Running test: scatterplots-smooth-lm"
     [1] "Running test: scatterplots-smooth-lm-se-false"
     [1] "Running test: scatterplots-loess"
     [1] "Running test: scatterplots-color"
     [1] "Running test: scatterplots-scale-color-hue"
     [1] "Running test: scatterplots-full-range"
     [1] "Running test: scatterplots-shape"
     [1] "Running test: scatterplots-shape-manual"
     [1] "Running test: scatterplots-overlap"
     [1] "Running test: scatterplots-jitter"
     [1] "Running test: scatterplots-geom_jitter"
     [1] "Running test: cookbook-axes-single-abline"
     [1] "Running test: cookbook-axes-multiple-abline"
     [1] "Running test: area-simple"
     [1] "Running test: area-area-fillcolor"
     [1] "Running test: area-traces_order"
     [1] "Running test: bar-dodge"
     [1] "Running test: bar-stack"
     [1] "Running test: bar-identity"
     [1] "Running test: bar-dates"
     [1] "Running test: bar-nocolor"
     [1] "Running test: bar-color"
     [1] "Running test: bar-black-outline"
     [1] "Running test: bar-aes-fill-guides-color-none"
     [1] "Running test: bar-aes-colour-guides-fill-FALSE"
     [1] "Running test: bar-position-stack"
     [1] "Running test: bar-position-fill"
     [1] "Running test: bar-category-names"
     [1] "Running test: bar-coord-flip"
     [1] "Running test: boxplot"
     [1] "Running test: boxplot-datetime"
     [1] "Running test: boxplot-legends_for_fill"
     [1] "Running test: boxplot-fillcolor"
     [1] "Running test: col"
     [1] "Running test: contour"
     [1] "Running test: date-strings"
     [1] "Running test: date-class-Date"
     [1] "Running test: date-irregular-time-series"
     [1] "Running test: density-simple"
     [1] "Running test: density-fill"
     [1] "Running test: density-color"
     [1] "Running test: density-histogram"
     [1] "Running test: density-traces_order"
     [1] "Running test: density2d"
     [1] "Running test: density2dfill"
     [1] "Running test: errorbar-horizontal"
     [1] "Running test: errorbar"
     [1] "Running test: errorbar-unique-groups"
     [1] "Running test: barley"
     [1] "Running test: 3-panels"
     [1] "Running test: facet_wrap_free"
     [1] "Running test: facet_wrap_free_y"
     [1] "Running test: facet_wrap_free_x"
     [1] "Running test: facet_grid_free"
     [1] "Running test: facet_grid_free_y"
     [1] "Running test: facet_grid_free_x"
     [1] "Running test: facet_wrap_free_mult"
     [1] "Running test: facet_wrap"
     [1] "Running test: facet_wrap-labeller"
     [1] "Running test: facet_grid-labeller"
     [1] "Running test: facet_wrap-free_y"
     [1] "Running test: heatmap"
     [1] "Running test: heatmap-midpoint"
     [1] "Running test: heatmap-discrete"
     [1] "Running test: hex-basic"
     [1] "Running test: hex-bins"
     [1] "Running test: hex-binwidth"
     [1] "Running test: histogram-counts"
     [1] "Running test: histogram-density"
     [1] "Running test: histogram-fill"
     [1] "Running test: histogram-fixed-fill-color"
     [1] "Running test: histogram-density-binwidth"
     [1] "Running test: histogram-fill-factor"
     [1] "Running test: histogram-fill-factor-identity"
     [1] "Running test: histogram-fill-factor-dodge"
     [1] "Running test: histogram-fill-factor-facets"
     [1] "Running test: histogram-vline"
     [1] "Running test: histogram-dates"
     [1] "Running test: histogram-POSIXt-bins"
     [1] "Running test: histogram-Date-bins"
     [1] "Running test: hline"
     [1] "Running test: hline-multiple"
     [1] "Running test: hline-factor"
     [1] "Running test: jitter-basic"
     [1] "Running test: labels-ggtitle"
     [1] "Running test: labels-ylab"
     [1] "Running test: labels-angles"
     [1] "Running test: scatter_legend"
     [1] "Running test: legend-hide"
     [1] "Running test: legend-very-long-legend-items"
     [1] "Running test: legend-one-entry"
     [1] "Running test: legend-hide-legend"
     [1] "Running test: legend-many legend items"
     [1] "Running test: linetype-types"
     [1] "Running test: linetype-colors"
     ── 1. Failure: Translates both dates and datetimes (with dynamic ticks) correctl
     paste("date:", d$date) not equivalent to `dates1`.
     100/100 mismatches
     x[1]: "date: 2002-01-01"
     y[1]: "~date: 2002-01-01"
    
     x[2]: "date: 2002-02-01"
     y[2]: "~date: 2002-02-01"
    
     x[3]: "date: 2002-03-01"
     y[3]: "~date: 2002-03-01"
    
     x[4]: "date: 2002-04-01"
     y[4]: "~date: 2002-04-01"
    
     x[5]: "date: 2002-05-01"
     y[5]: "~date: 2002-05-01"
    
     ── 2. Failure: Translates both dates and datetimes (with dynamic ticks) correctl
     paste("date:", d2$date) not equivalent to `dates2`.
     100/100 mismatches
     x[1]: "date: 2002-01-01 01:00:00"
     y[1]: "~date: 2002-01-01 01:00:00"
    
     x[2]: "date: 2002-02-01 01:00:00"
     y[2]: "~date: 2002-02-01 01:00:00"
    
     x[3]: "date: 2002-03-01 01:00:00"
     y[3]: "~date: 2002-03-01 01:00:00"
    
     x[4]: "date: 2002-04-01 02:00:00"
     y[4]: "~date: 2002-04-01 02:00:00"
    
     x[5]: "date: 2002-05-01 02:00:00"
     y[5]: "~date: 2002-05-01 02:00:00"
    
     ── 3. Failure: geom_linerange() without a y aesthetic translates to a path (@tes
     unlist(l$data[[1]]$text) not equivalent to c(...).
     10/14 mismatches
     x[1]: "~x: 1<br />~ymin: 0"
     y[1]: "x: 1<br />ymin: 0"
    
     x[2]: "~x: 1<br />~ymax: 1"
     y[2]: "x: 1<br />ymax: 1"
    
     x[4]: "~x: 2<br />~ymin: 0"
     y[4]: "x: 2<br />ymin: 0"
    
     x[5]: "~x: 2<br />~ymax: 2"
     y[5]: "x: 2<br />ymax: 2"
    
     x[7]: "~x: 3<br />~ymin: 0"
     y[7]: "x: 3<br />ymin: 0"
    
     [1] "Running test: map-facet"
     [1] "Running test: path-lines-diff-from-paths"
     [1] "Running test: path-colors"
     [1] "Running test: path-colors2"
     [1] "Running test: path-colored-groups-stay-together"
     [1] "Running test: path-line-symbols"
     [1] "Running test: point-size-alpha"
     [1] "Running test: open-shapes"
     [1] "Running test: all-shapes"
     [1] "Running test: point-size-alpha2"
     [1] "Running test: polygon-black"
     ── 4. Failure: polygons with different hovertext must be different traces (@tes
     info$data[[1]]$x not equivalent to c(10, 11, 11, 10, 10).
     5/5 mismatches (average diff: 2)
     [1] 12 - 10 == 2
     [2] 13 - 11 == 2
     [3] 13 - 11 == 2
     [4] 12 - 10 == 2
     [5] 12 - 10 == 2
    
     ── 5. Failure: polygons with different hovertext must be different traces (@tes
     info$data[[2]]$x not equivalent to c(12, 13, 13, 12, 12).
     5/5 mismatches (average diff: 2)
     [1] 10 - 12 == -2
     [2] 11 - 13 == -2
     [3] 11 - 13 == -2
     [4] 10 - 12 == -2
     [5] 10 - 12 == -2
    
     ── 6. Failure: polygons with different hovertext must be different traces (@tes
     sapply(info$data, "[[", "text") not equivalent to c("lab: left", "lab: right").
     2/2 mismatches
     x[1]: "~lab: NA"
     y[1]: "lab: left"
    
     x[2]: "~lab: ~"
     y[2]: "lab: right"
    
     [1] "Running test: polygon-aes-color"
     [1] "Running test: polygon-aes-fill"
     [1] "Running test: polygon-color-aes-fill"
     [1] "Running test: polygon-color-fill-aes-linetype"
     [1] "Running test: polygon-color-fill-aes-size"
     [1] "Running test: polygons-canada-borders"
     ── 7. Failure: borders become one trace with NA (@test-ggplot-polygons.R#147) ─
     length(info$data) not equivalent to 1.
     1/1 mismatches
     [1] 2 - 1 == 1
    
     ── 8. Failure: borders become one trace with NA (@test-ggplot-polygons.R#149) ─
     nchar(info$data[[1]]$text) not equivalent to 0.
     1/1 mismatches
     [1] 10 - 0 == 10
    
     [1] "Running test: polygon-star-group"
     ── 9. Failure: geom_polygon(aes(group)) -> 1 trace (@test-ggplot-polygons.R#162)
     length(has.data) not equivalent to `n.traces`.
     1/1 mismatches
     [1] 2 - 1 == 1
    
     ── 10. Failure: geom_polygon(aes(group)) -> 1 trace (@test-ggplot-polygons.R#165
     tr$x not equivalent to c(0, -1, 2, -2, 1, 0, NA, 10, 9, 12, 8, 11, 10).
     Lengths differ: 6 is not 13
    
     ── 11. Failure: geom_polygon(aes(group)) -> 1 trace (@test-ggplot-polygons.R#168
     tr$y not equivalent to c(2, 0, 1, 1, 0, 2, NA, 2, 0, 1, 1, 0, 2).
     Lengths differ: 6 is not 13
    
     [1] "Running test: polygon-star-group-color"
     ── 12. Failure: geom_polygon(aes(group), color) -> 1 trace (@test-ggplot-polygon
     length(has.data) not equivalent to `n.traces`.
     1/1 mismatches
     [1] 2 - 1 == 1
    
     ── 13. Failure: geom_polygon(aes(group), color) -> 1 trace (@test-ggplot-polygon
     tr$x not equivalent to c(0, -1, 2, -2, 1, 0, NA, 10, 9, 12, 8, 11, 10).
     Lengths differ: 6 is not 13
    
     ── 14. Failure: geom_polygon(aes(group), color) -> 1 trace (@test-ggplot-polygon
     tr$y not equivalent to c(2, 0, 1, 1, 0, 2, NA, 2, 0, 1, 1, 0, 2).
     Lengths differ: 6 is not 13
    
     [1] "Running test: polygon-star-fill-color"
     [1] "Running test: rect-black"
     [1] "Running test: rect-black4"
     [1] "Running test: rect-color"
     [1] "Running test: rect-fill"
     [1] "Running test: rect-fill-color"
     [1] "Running test: rect-fill-hex-alpha"
     [1] "Running test: ribbon-alpha"
     [1] "Running test: ribbon-group"
     [1] "Running test: ribbon-colour"
     [1] "Running test: ribbon-fill"
     [1] "Running test: segment"
     [1] "Running test: segment-multiple-non-numeric"
     [1] "Running test: sf"
     [1] "Running test: sf-fill-text"
     [1] "Running test: sf-points"
     [1] "Running test: size-is-a-vector"
     [1] "Running test: size-global-scaling"
     [1] "Running test: smooth-basic"
     [1] "Running test: smooth-se-false"
     [1] "Running test: smooth-group"
     [1] "Running test: smooth-colour"
     [1] "Running test: smooth-fill2"
     [1] "Running test: smooth-facet"
     ── 15. Failure: Basic geom_spoke() (@test-ggplot-spoke.R#20) ──────────────────
     `angle` not equivalent to rep(paste0("angle: ", format(df$angle)), each = 2).
     200/200 mismatches
     x[1]: "~angle: 4.70939975"
     y[1]: "angle: 4.70939975"
    
     x[2]: "~angle: 4.70939975"
     y[2]: "angle: 4.70939975"
    
     x[3]: "~angle: 5.63370213"
     y[3]: "angle: 5.63370213"
    
     x[4]: "~angle: 5.63370213"
     y[4]: "angle: 5.63370213"
    
     x[5]: "~angle: 3.08466628"
     y[5]: "angle: 3.08466628"
    
     [1] "Running test: step-gg.hv"
     [1] "Running test: step-gg.vh"
     [1] "Running test: step-gg.hvh"
     [1] "Running test: step-gg.vhv"
     [1] "Running test: text"
     [1] "Running test: text-colour"
     [1] "Running test: theme-background"
     [1] "Running test: theme-ticks-and-grids"
     [1] "Running test: theme-ticks-default"
     [1] "Running test: theme-zeroline-default"
     [1] "Running test: theme-marker-default"
     [1] "Running test: theme-panel-border-1"
     [1] "Running test: theme-panel-border-2"
     [1] "Running test: ticks-boxes"
     [1] "Running test: ticks-boxes-facet-grid"
     [1] "Running test: ticks-boxes-scales-free"
     [1] "Running test: ticks-boxes-space-free"
     [1] "Running test: ticks-flip"
     [1] "Running test: ticks-flip-grid"
     [1] "Running test: ticks-flip-grid-free"
     [1] "Running test: ticks-limits-hide"
     [1] "Running test: ticks-limits-gap"
     [1] "Running test: ticks-breaks-nochange"
     [1] "Running test: ticks-breaks-more"
     [1] "Running test: ticks-breaks-less"
     [1] "Running test: ticks-scale-labels"
     [1] "Running test: ticks-hide-ticks-lines-labels"
     [1] "Running test: ticks-hide-ticks-labels"
     [1] "Running test: ticks-ycontinuous-ranges"
     [1] "Running test: ticks-ylim-ranges"
     [1] "Running test: ticks-yreverse-ranges"
     [1] "Running test: ticks-yreverse-limits-ranges"
     [1] "Running test: ticks-ylim-reversed-ranges"
     [1] "Running test: ticks-evenly-spaced-ticks"
     [1] "Running test: ticks-uneven"
     [1] "Running test: ticks-line-breaks"
     [1] "Running test: tooltip-datetime"
     ── 16. Failure: datetimes are displayed in tooltip properly (@test-ggplot-toolti
     paste0("time: ", test$time) not identical to sapply(txt, "[[", 1).
     100/100 mismatches
     x[1]: "time: 2016-03-12 16:33:56"
     y[1]: "~time: 2016-03-12 16:33:56"
    
     x[2]: "time: 2016-03-12 16:34:56"
     y[2]: "~time: 2016-03-12 16:34:56"
    
     x[3]: "time: 2016-03-12 16:35:56"
     y[3]: "~time: 2016-03-12 16:35:56"
    
     x[4]: "time: 2016-03-12 16:36:56"
     y[4]: "~time: 2016-03-12 16:36:56"
    
     x[5]: "time: 2016-03-12 16:37:56"
     y[5]: "~time: 2016-03-12 16:37:56"
    
     [1] "Running test: tooltip-date"
     ── 17. Failure: dates are displayed in tooltip properly (@test-ggplot-tooltip.R#
     paste0("time: ", test$time) not identical to sapply(txt, "[[", 1).
     100/100 mismatches
     x[1]: "time: 2016-03-12 00:00:01"
     y[1]: "~time: 2016-03-12 00:00:01"
    
     x[2]: "time: 2016-03-12 00:00:02"
     y[2]: "~time: 2016-03-12 00:00:02"
    
     x[3]: "time: 2016-03-12 00:00:03"
     y[3]: "~time: 2016-03-12 00:00:03"
    
     x[4]: "time: 2016-03-12 00:00:04"
     y[4]: "~time: 2016-03-12 00:00:04"
    
     x[5]: "time: 2016-03-12 00:00:05"
     y[5]: "~time: 2016-03-12 00:00:05"
    
     ── 18. Failure: tooltip argument respects ordering (@test-ggplot-tooltip.R#36)
     all(grepl("^density", sapply(txt, "[[", 1))) isn't true.
    
     ── 19. Error: tooltip argument respects ordering (@test-ggplot-tooltip.R#37) ──
     subscript out of bounds
     1: expect_true(all(grepl("^mpg", sapply(txt, "[[", 2)))) at testthat/test-ggplot-tooltip.R:37
     2: quasi_label(enquo(object), label)
     3: eval_bare(get_expr(quo), get_env(quo))
     4: grepl("^mpg", sapply(txt, "[[", 2))
     5: sapply(txt, "[[", 2)
     6: lapply(X = X, FUN = FUN, ...)
    
     [1] "Running test: heatmap-discrete-tooltip"
     [1] "Running test: group-lines-hovertext"
     ── 20. Failure: group domain is included in hovertext (@test-ggplot-tooltip.R#69
     all(grepl(pattern, txt)) isn't true.
    
     ── 21. Failure: tooltip elements are not crossed (@test-ggplot-tooltip.R#91) ──
     `y_equal_ten` not equivalent to `sample_2`.
     4 element mismatches
    
     [1] "Running test: hovertext-display"
     [1] "Running test: violin"
     [1] "Running test: violin-aes"
     [1] "Running test: vline"
     [1] "Running test: vline-multiple"
     [1] "Running test: ylim-one-trace"
     [1] "Running test: error-simple"
     [1] "Running test: error-simple-line"
     [1] "Running test: error-simple-line-point"
     [1] "Running test: error-simple-line-point-crazy"
     [1] "Running test: error-rect-alpha"
     [1] "Running test: plotly-color-scatterplot-color-factor"
     [1] "Running test: plotly-color-scatterplot-color-factor-custom"
     [1] "Running test: plotly-color-scatterplot-color-factor-custom2"
     [1] "Running test: plotly-color-bar-color-factor-custom"
     [1] "Running test: plotly-color-scatterplot-color-numeric"
     [1] "Running test: plotly-color-scatterplot-color-numeric-custom"
     [1] "Running test: plotly-color-scatterplot-scatter3d-axes"
     [1] "Running test: plotly-color-color-manual"
     [1] "Running test: plotly-colorbar"
     [1] "Running test: plotly-colorbar-expand"
     [1] "Running test: plotly-colorbar-restrict"
     [1] "Running test: plotly-colorbar-z-expand"
     [1] "Running test: plotly-colorbar-z-restrict"
     [1] "Running test: plotly-NAs"
     [1] "Running test: plotly-NAs-connect"
     [1] "Running test: plotly-NAs-within-group"
     [1] "Running test: plotly-NAs-within-color"
     [1] "Running test: plotly-NAs-within-color2"
     [1] "Running test: plotly-no-NAs-for-irrelevant-group"
     [1] "Running test: plotly-linetype-linetype"
     [1] "Running test: plotly-linetype-linetype2"
     [1] "Running test: plotly-linetype-linetype3"
     [1] "Running test: plotly-linetype-manual"
     [1] "Running test: plotly-linetype-ordering"
     [1] "Running test: plotly-linetype-alphabetical"
     [1] "Running test: plotly-subplot-simple"
     [1] "Running test: plotly-subplot-simple2"
     [1] "Running test: plotly-subplot-group"
     [1] "Running test: plotly-subplot-shareX"
     [1] "Running test: plotly-subplot-shareY"
     [1] "Running test: plotly-subplot-shareBoth"
     [1] "Running test: plotly-subplot-width-height"
     [1] "Running test: plotly-subplot-recursive"
     [1] "Running test: plotly-subplot-plot-list"
     [1] "Running test: plotly-subplot-ggmatrix"
     [1] "Running test: plotly-subplot-geo-cartesian"
     [1] "Running test: plotly-subplot-subplot-legendgroup"
     [1] "Running test: plotly-symbol-scatterplot-symbol"
     [1] "Running test: plotly-symbol-scatterplot-symbol2"
     [1] "Running test: plotly-symbol-pch"
     [1] "Running test: plotly-symbol-logical"
     [1] "Running test: plotly-symbol-symbol-manual"
     [1] "Running test: plotly-symbol-ordering"
     [1] "Running test: plotly-symbol-alphabetical"
     [1] "Running test: plotly-scatterplot"
     [1] "Running test: plotly-bar-inference"
     [1] "Running test: plotly-box-data-array"
     [1] "Running test: plotly-group-within-trace"
     [1] "Running test: plotly-alpha-blending"
     [1] "Running test: plotly-alpha-no-color"
     [1] "Running test: plotly-factor-axis"
     [1] "Running test: plotly-character-axis"
     [1] "Running test: plotly-histogram"
     [1] "Running test: plotly-histogram-vert"
     [1] "Running test: plotly-inherit-FALSE"
     [1] "Running test: plotly-time-series-summary"
     ══ testthat results ═══════════════════════════════════════════════════════════
     OK: 1134 SKIPPED: 27 FAILED: 21
     1. Failure: Translates both dates and datetimes (with dynamic ticks) correctly (@test-ggplot-lines.R#85)
     2. Failure: Translates both dates and datetimes (with dynamic ticks) correctly (@test-ggplot-lines.R#86)
     3. Failure: geom_linerange() without a y aesthetic translates to a path (@test-ggplot-lines.R#111)
     4. Failure: polygons with different hovertext must be different traces (@test-ggplot-polygons.R#25)
     5. Failure: polygons with different hovertext must be different traces (@test-ggplot-polygons.R#26)
     6. Failure: polygons with different hovertext must be different traces (@test-ggplot-polygons.R#31)
     7. Failure: borders become one trace with NA (@test-ggplot-polygons.R#147)
     8. Failure: borders become one trace with NA (@test-ggplot-polygons.R#149)
     9. Failure: geom_polygon(aes(group)) -> 1 trace (@test-ggplot-polygons.R#162)
     1. ...
    
     Error: testthat unit tests failed
     Execution halted
Flavor: r-patched-linux-x86_64

Version: 4.7.1
Check: package dependencies
Result: NOTE
    Packages suggested but not available for checking: ‘Rserve’ ‘RSelenium’
Flavor: r-patched-solaris-x86

Version: 4.7.1
Check: tests
Result: ERROR
     Running ‘testthat.R’ [125s/147s]
    Running the tests in ‘tests/testthat.R’ failed.
    Complete output:
     > library("testthat")
     > library("plotly")
     Loading required package: ggplot2
    
     Attaching package: 'plotly'
    
     The following object is masked from 'package:ggplot2':
    
     last_plot
    
     The following object is masked from 'package:stats':
    
     filter
    
     The following object is masked from 'package:graphics':
    
     layout
    
     > library("RSclient")
     >
     > # report any differences in plot (list) hashes if this is a Travis pull request
     > report_diffs <- grepl("^[0-9]+$", Sys.getenv("TRAVIS_PULL_REQUEST"))
     > # build a ggplot2 comparison table?
     > build_table <- Sys.getenv("PLOTLY_TABLE") == "TRUE"
     >
     > # stuff that should be done once (not everytime save_outputs() is called)
     > if (report_diffs || build_table) {
     + message("Spinning up an independent R session with plotly's master branch installed")
     + Rserve::Rserve(args = "--vanilla --RS-enable-remote")
     + conn <- RSconnect()
     + # ensure the seed is the same for randomized tests
     + set.seed(1)
     + RSeval(conn, "set.seed(1)")
     + # we don't make assumptions about ggplot2 versioning,
     + # but it is _strongly_ recommended to use the CRAN version (of ggplot2)
     + RSeval(conn, "devtools::install_github('ropensci/plotly')")
     + RSeval(conn, "library(plotly)")
     + if (report_diffs) {
     + # hash of the version being tested
     + this_hash <- substr(Sys.getenv("TRAVIS_COMMIT"), 1, 7)
     + # hash of version to compare with (master)
     + master_hash <- RSeval(conn, "packageDescription('plotly')$GithubSHA1")
     + master_hash <- substr(master_hash, 1, 7)
     + # plotly-test-table repo hosts the diff pages & keeps track of previous versions
     + table_dir <- normalizePath("../../plotly-test-table", mustWork = T)
     + # Make sure we have appropriate versions of plotlyjs
     + # (see plotly-test-table/template/template/index.html)
     + file.copy(
     + file.path("..", "inst", "htmlwidgets", "lib", "plotlyjs", "plotly-latest.min.js"),
     + file.path(table_dir, "template", "New.min.js"),
     + overwrite = TRUE
     + )
     + download.file(
     + "https://raw.githubusercontent.com/ropensci/plotly/master/inst/htmlwidgets/lib/plotlyjs/plotly-latest.min.js",
     + file.path(table_dir, "template", "Old.min.js"),
     + method = "curl"
     + )
     + # directory for placing test differences
     + this_dir <- file.path(table_dir, this_hash)
     + if (dir.exists(this_dir)) {
     + message("Tests were already run on this commit. Nuking the old results...")
     + unlink(this_dir, recursive = T)
     + }
     + master_dir <- file.path(table_dir, master_hash)
     + # csv file that tracks plot hashes
     + hash_file <- file.path(table_dir, "hashes.csv")
     + if (!file.exists(hash_file)) {
     + file.create(hash_file)
     + cat("commit,test,hash\n", file = hash_file, append = T)
     + }
     + hash_info <- utils::read.csv(hash_file)
     + master_info <- hash_info[hash_info$commit %in% master_hash, ]
     + }
     + }
     >
     > # Some tests make plot.ly HTTP requests and require a valid user account
     > # (see test-plotly-filename.R). For security reasons, these tests should be
     > # skipped on pull requests (the .travis.yml file uses encrypted credentials
     > # & encrypted environment vars cannot be accessed on pull request builds)
     > skip_if_not_master <- function() {
     + is_pr <- grepl("^[0-9]+$", Sys.getenv("TRAVIS_PULL_REQUEST"))
     + is_r_release <- Sys.getenv("TRAVIS_R_VERSION_STRING", "release") == "release"
     + if (!is_pr && is_r_release) return(invisible(TRUE))
     + skip("plot.ly API calls are only tested on the master build on r-release")
     + }
     >
     > # This function is called within testthat/test-*.R files.
     > # It takes a ggplot or plotly object as input, and it returns a figure
     > # object (aka the data behind the plot).
     > save_outputs <- function(gg, name) {
     + print(paste("Running test:", name))
     + p <- plotly_build(gg)$x[c("data", "layout")]
     + has_diff <- if (report_diffs) {
     + # save a hash of the R object
     + plot_hash <- digest::digest(p)
     + info <- paste(this_hash, name, plot_hash, sep = ",")
     + cat(paste(info, "\n"), file = hash_file, append = T)
     + test_info <- master_info[master_info$test %in% name, ]
     + # is the plot hash different from master?
     + !isTRUE(plot_hash == test_info$hash)
     + } else FALSE
     + if (has_diff || build_table) {
     + RSassign(conn, gg)
     + pm <- RSeval(conn, "tryCatch(plotly::plotly_build(gg)$x[c('data', 'layout')], error = function(e) e$message)")
     + if (build_table) {
     + # save pngs of ggplot
     + filename <- paste0(gsub("\\s+", "-", name), ".png")
     + ggFile <- paste("ggplot", filename, sep = "-")
     + res <- tryCatch(ggsave(ggFile, gg),
     + error = function(e) {
     + err <- qplot() +
     + annotate('text', label = paste('Error:', e$message),
     + x = 1, y = 1, color = 'red')
     + ggsave(ggFile, err, width = 3, height = 2, units = 'in')
     + })
     + img <- function(x, f) {
     + tryCatch(plotly_IMAGE(x, out_file = f, width = 300, height = 400),
     + error = function(e) {
     + err <- qplot() +
     + annotate('text', label = paste('Error:', e$message),
     + x = 1, y = 1, color = 'red')
     + # TODO: convert pixels to inches?
     + ggsave(plotlyFile, err, width = 3, height = 2, units = 'in')
     + })
     + }
     + # save _this_ plotly version
     + plotlyFile <- paste("plotly", this_hash, filename, sep = "-")
     + res <- img(p, plotlyFile)
     + # save _master_ plotly version
     + plotlyFile <- paste("plotly", "master", filename, sep = "-")
     + RSassign(conn, plotlyFile, "plotlyFile")
     + RSassign(conn, img, "img")
     + res <- RSeval(conn, "img(p, plotlyFile)")
     + }
     + # it could be that the hash didn't exist, so make sure they're different
     + # before build a diff page
     + if (plot_hash != digest::digest(pm)) {
     + test_dir <- file.path(this_dir, gsub("\\s+", "-", name))
     + if (dir.exists(test_dir)) stop(shQuote(name), " has already been used to save_outputs() in another test.")
     + dir.create(test_dir, recursive = T)
     + # copy over diffing template
     + file.copy(
     + dir(file.path(table_dir, "template", "template"), full.names = TRUE), test_dir
     + )
     + # overwrite the default JSON
     + writeLines(
     + paste("New =", plotly:::to_JSON(p)),
     + file.path(test_dir, "New.json")
     + )
     + writeLines(
     + paste("Old =", plotly:::to_JSON(pm)),
     + file.path(test_dir, "Old.json")
     + )
     + }
     + }
     + p
     + }
     >
     > # use me just like testthat::test_check()
     > test_run <- function(...) {
     + # shut down the other R session on exit
     + if (report_diffs || build_table) {
     + on.exit(RSshutdown(conn))
     + on.exit(RSclose(conn), add = TRUE)
     + }
     + test_check(...)
     + }
     >
     > if (packageVersion("ggplot2") > "2.2.1") {
     + test_run("plotly")
     + }
     [1] "Running test: cookbook-axes-flevels"
     [1] "Running test: cookbook-axes-ylim.hide"
     [1] "Running test: cookbook-axes-scale.hide"
     [1] "Running test: cookbook-axes-coord-ylim"
     [1] "Running test: cookbook-axes-linear-axes"
     [1] "Running test: cookbook-axes-log2-scale"
     [1] "Running test: cookbook-axes-log2-coord"
     [1] "Running test: cookbook-axes-log2-labels"
     [1] "Running test: cookbook-axes-scale_y_log10"
     [1] "Running test: cookbook-axes-scale_y_log10-labels"
     [1] "Running test: cookbook-axes-no-x-title"
     [1] "Running test: cookbook-axes-scale-name"
     [1] "Running test: cookbook-axes-fonts"
     [1] "Running test: cookbook-axes-label-funs"
     [1] "Running test: cookbook-axes-custom-formatter"
     [1] "Running test: cookbook-axes-blank-minor-major"
     [1] "Running test: cookbook-axes-blank-minor"
     [1] "Running test: cookbook-axes-blank-x"
     [1] "Running test: cookbook-axes-blank-y"
     [1] "Running test: cookbook-axes-basic-bar"
     [1] "Running test: cookbook-axes-basic-horizontal-line"
     [1] "Running test: cookbook-axes-dashed-red-line"
     [1] "Running test: cookbook-axes-bar-error-wide"
     [1] "Running test: cookbook-axes-bar-error-narrow"
     [1] "Running test: cookbook-axes-bar-error-diff"
     [1] "Running test: cookbook-axes-bar-dodge-color"
     [1] "Running test: cookbook-axes-bar-dodge-color-error"
     [1] "Running test: cookbook-axes-bar-dodge-color-err4"
     [1] "Running test: cookbook-axes-scatter-basic"
     [1] "Running test: cookbook-axes-scatter-hline"
     [1] "Running test: cookbook-axes-scatter-hline-vline"
     [1] "Running test: cookbook-axes-scatter-facet"
     [1] "Running test: cookbook-axes-scatter-facet-hline"
     [1] "Running test: cookbook-axes-scatter-facet-hline-vline"
     [1] "Running test: scatterplots-hollow"
     [1] "Running test: scatterplots-smooth-lm"
     [1] "Running test: scatterplots-smooth-lm-se-false"
     [1] "Running test: scatterplots-loess"
     [1] "Running test: scatterplots-color"
     [1] "Running test: scatterplots-scale-color-hue"
     [1] "Running test: scatterplots-full-range"
     [1] "Running test: scatterplots-shape"
     [1] "Running test: scatterplots-shape-manual"
     [1] "Running test: scatterplots-overlap"
     [1] "Running test: scatterplots-jitter"
     [1] "Running test: scatterplots-geom_jitter"
     [1] "Running test: cookbook-axes-single-abline"
     [1] "Running test: cookbook-axes-multiple-abline"
     [1] "Running test: area-simple"
     [1] "Running test: area-area-fillcolor"
     [1] "Running test: area-traces_order"
     [1] "Running test: bar-dodge"
     [1] "Running test: bar-stack"
     [1] "Running test: bar-identity"
     [1] "Running test: bar-dates"
     [1] "Running test: bar-nocolor"
     [1] "Running test: bar-color"
     [1] "Running test: bar-black-outline"
     [1] "Running test: bar-aes-fill-guides-color-none"
     [1] "Running test: bar-aes-colour-guides-fill-FALSE"
     [1] "Running test: bar-position-stack"
     [1] "Running test: bar-position-fill"
     [1] "Running test: bar-category-names"
     [1] "Running test: bar-coord-flip"
     [1] "Running test: boxplot"
     [1] "Running test: boxplot-datetime"
     [1] "Running test: boxplot-legends_for_fill"
     [1] "Running test: boxplot-fillcolor"
     [1] "Running test: col"
     [1] "Running test: contour"
     [1] "Running test: date-strings"
     [1] "Running test: date-class-Date"
     [1] "Running test: date-irregular-time-series"
     [1] "Running test: density-simple"
     [1] "Running test: density-fill"
     [1] "Running test: density-color"
     [1] "Running test: density-histogram"
     [1] "Running test: density-traces_order"
     [1] "Running test: density2d"
     [1] "Running test: density2dfill"
     [1] "Running test: errorbar-horizontal"
     [1] "Running test: errorbar"
     [1] "Running test: errorbar-unique-groups"
     [1] "Running test: barley"
     [1] "Running test: 3-panels"
     [1] "Running test: facet_wrap_free"
     [1] "Running test: facet_wrap_free_y"
     [1] "Running test: facet_wrap_free_x"
     [1] "Running test: facet_grid_free"
     [1] "Running test: facet_grid_free_y"
     [1] "Running test: facet_grid_free_x"
     [1] "Running test: facet_wrap_free_mult"
     [1] "Running test: facet_wrap"
     [1] "Running test: facet_wrap-labeller"
     [1] "Running test: facet_grid-labeller"
     [1] "Running test: facet_wrap-free_y"
     [1] "Running test: heatmap"
     [1] "Running test: heatmap-midpoint"
     [1] "Running test: heatmap-discrete"
     [1] "Running test: hex-basic"
     [1] "Running test: hex-bins"
     [1] "Running test: hex-binwidth"
     [1] "Running test: histogram-counts"
     [1] "Running test: histogram-density"
     [1] "Running test: histogram-fill"
     [1] "Running test: histogram-fixed-fill-color"
     [1] "Running test: histogram-density-binwidth"
     [1] "Running test: histogram-fill-factor"
     [1] "Running test: histogram-fill-factor-identity"
     [1] "Running test: histogram-fill-factor-dodge"
     [1] "Running test: histogram-fill-factor-facets"
     [1] "Running test: histogram-vline"
     [1] "Running test: histogram-dates"
     [1] "Running test: histogram-POSIXt-bins"
     [1] "Running test: histogram-Date-bins"
     [1] "Running test: hline"
     [1] "Running test: hline-multiple"
     [1] "Running test: hline-factor"
     [1] "Running test: jitter-basic"
     [1] "Running test: labels-ggtitle"
     [1] "Running test: labels-ylab"
     [1] "Running test: labels-angles"
     [1] "Running test: scatter_legend"
     [1] "Running test: legend-hide"
     [1] "Running test: legend-very-long-legend-items"
     [1] "Running test: legend-one-entry"
     [1] "Running test: legend-hide-legend"
     [1] "Running test: legend-many legend items"
     [1] "Running test: linetype-types"
     [1] "Running test: linetype-colors"
     ── 1. Failure: Translates both dates and datetimes (with dynamic ticks) correctl
     paste("date:", d$date) not equivalent to `dates1`.
     100/100 mismatches
     x[1]: "date: 2002-01-01"
     y[1]: "~date: 2002-01-01"
    
     x[2]: "date: 2002-02-01"
     y[2]: "~date: 2002-02-01"
    
     x[3]: "date: 2002-03-01"
     y[3]: "~date: 2002-03-01"
    
     x[4]: "date: 2002-04-01"
     y[4]: "~date: 2002-04-01"
    
     x[5]: "date: 2002-05-01"
     y[5]: "~date: 2002-05-01"
    
     ── 2. Failure: Translates both dates and datetimes (with dynamic ticks) correctl
     paste("date:", d2$date) not equivalent to `dates2`.
     100/100 mismatches
     x[1]: "date: 2002-01-01 00:00:00"
     y[1]: "~date: 2002-01-01 00:00:00"
    
     x[2]: "date: 2002-02-01 00:00:00"
     y[2]: "~date: 2002-02-01 00:00:00"
    
     x[3]: "date: 2002-03-01 00:00:00"
     y[3]: "~date: 2002-03-01 00:00:00"
    
     x[4]: "date: 2002-04-01 01:00:00"
     y[4]: "~date: 2002-04-01 01:00:00"
    
     x[5]: "date: 2002-05-01 01:00:00"
     y[5]: "~date: 2002-05-01 01:00:00"
    
     ── 3. Failure: geom_linerange() without a y aesthetic translates to a path (@tes
     unlist(l$data[[1]]$text) not equivalent to c(...).
     10/14 mismatches
     x[1]: "~x: 1<br />~ymin: 0"
     y[1]: "x: 1<br />ymin: 0"
    
     x[2]: "~x: 1<br />~ymax: 1"
     y[2]: "x: 1<br />ymax: 1"
    
     x[4]: "~x: 2<br />~ymin: 0"
     y[4]: "x: 2<br />ymin: 0"
    
     x[5]: "~x: 2<br />~ymax: 2"
     y[5]: "x: 2<br />ymax: 2"
    
     x[7]: "~x: 3<br />~ymin: 0"
     y[7]: "x: 3<br />ymin: 0"
    
     [1] "Running test: map-facet"
     [1] "Running test: path-lines-diff-from-paths"
     [1] "Running test: path-colors"
     [1] "Running test: path-colors2"
     [1] "Running test: path-colored-groups-stay-together"
     [1] "Running test: path-line-symbols"
     [1] "Running test: point-size-alpha"
     [1] "Running test: open-shapes"
     [1] "Running test: all-shapes"
     [1] "Running test: point-size-alpha2"
     [1] "Running test: polygon-black"
     ── 4. Failure: polygons with different hovertext must be different traces (@tes
     info$data[[1]]$x not equivalent to c(10, 11, 11, 10, 10).
     5/5 mismatches (average diff: 2)
     [1] 12 - 10 == 2
     [2] 13 - 11 == 2
     [3] 13 - 11 == 2
     [4] 12 - 10 == 2
     [5] 12 - 10 == 2
    
     ── 5. Failure: polygons with different hovertext must be different traces (@tes
     info$data[[2]]$x not equivalent to c(12, 13, 13, 12, 12).
     5/5 mismatches (average diff: 2)
     [1] 10 - 12 == -2
     [2] 11 - 13 == -2
     [3] 11 - 13 == -2
     [4] 10 - 12 == -2
     [5] 10 - 12 == -2
    
     ── 6. Failure: polygons with different hovertext must be different traces (@tes
     sapply(info$data, "[[", "text") not equivalent to c("lab: left", "lab: right").
     2/2 mismatches
     x[1]: "~lab: NA"
     y[1]: "lab: left"
    
     x[2]: "~lab: ~"
     y[2]: "lab: right"
    
     [1] "Running test: polygon-aes-color"
     [1] "Running test: polygon-aes-fill"
     [1] "Running test: polygon-color-aes-fill"
     [1] "Running test: polygon-color-fill-aes-linetype"
     [1] "Running test: polygon-color-fill-aes-size"
     [1] "Running test: polygons-canada-borders"
     ── 7. Failure: borders become one trace with NA (@test-ggplot-polygons.R#147) ─
     length(info$data) not equivalent to 1.
     1/1 mismatches
     [1] 2 - 1 == 1
    
     ── 8. Failure: borders become one trace with NA (@test-ggplot-polygons.R#149) ─
     nchar(info$data[[1]]$text) not equivalent to 0.
     1/1 mismatches
     [1] 10 - 0 == 10
    
     [1] "Running test: polygon-star-group"
     ── 9. Failure: geom_polygon(aes(group)) -> 1 trace (@test-ggplot-polygons.R#162)
     length(has.data) not equivalent to `n.traces`.
     1/1 mismatches
     [1] 2 - 1 == 1
    
     ── 10. Failure: geom_polygon(aes(group)) -> 1 trace (@test-ggplot-polygons.R#165
     tr$x not equivalent to c(0, -1, 2, -2, 1, 0, NA, 10, 9, 12, 8, 11, 10).
     Lengths differ: 6 is not 13
    
     ── 11. Failure: geom_polygon(aes(group)) -> 1 trace (@test-ggplot-polygons.R#168
     tr$y not equivalent to c(2, 0, 1, 1, 0, 2, NA, 2, 0, 1, 1, 0, 2).
     Lengths differ: 6 is not 13
    
     [1] "Running test: polygon-star-group-color"
     ── 12. Failure: geom_polygon(aes(group), color) -> 1 trace (@test-ggplot-polygon
     length(has.data) not equivalent to `n.traces`.
     1/1 mismatches
     [1] 2 - 1 == 1
    
     ── 13. Failure: geom_polygon(aes(group), color) -> 1 trace (@test-ggplot-polygon
     tr$x not equivalent to c(0, -1, 2, -2, 1, 0, NA, 10, 9, 12, 8, 11, 10).
     Lengths differ: 6 is not 13
    
     ── 14. Failure: geom_polygon(aes(group), color) -> 1 trace (@test-ggplot-polygon
     tr$y not equivalent to c(2, 0, 1, 1, 0, 2, NA, 2, 0, 1, 1, 0, 2).
     Lengths differ: 6 is not 13
    
     [1] "Running test: polygon-star-fill-color"
     [1] "Running test: rect-black"
     [1] "Running test: rect-black4"
     [1] "Running test: rect-color"
     [1] "Running test: rect-fill"
     [1] "Running test: rect-fill-color"
     [1] "Running test: rect-fill-hex-alpha"
     [1] "Running test: ribbon-alpha"
     [1] "Running test: ribbon-group"
     [1] "Running test: ribbon-colour"
     [1] "Running test: ribbon-fill"
     [1] "Running test: segment"
     [1] "Running test: segment-multiple-non-numeric"
     [1] "Running test: sf"
     [1] "Running test: sf-fill-text"
     [1] "Running test: sf-points"
     [1] "Running test: size-is-a-vector"
     [1] "Running test: size-global-scaling"
     [1] "Running test: smooth-basic"
     [1] "Running test: smooth-se-false"
     [1] "Running test: smooth-group"
     [1] "Running test: smooth-colour"
     [1] "Running test: smooth-fill2"
     [1] "Running test: smooth-facet"
     ── 15. Failure: Basic geom_spoke() (@test-ggplot-spoke.R#20) ──────────────────
     `angle` not equivalent to rep(paste0("angle: ", format(df$angle)), each = 2).
     200/200 mismatches
     x[1]: "~angle: 1.55432459"
     y[1]: "angle: 1.55432459"
    
     x[2]: "~angle: 1.55432459"
     y[2]: "angle: 1.55432459"
    
     x[3]: "~angle: 1.56734568"
     y[3]: "angle: 1.56734568"
    
     x[4]: "~angle: 1.56734568"
     y[4]: "angle: 1.56734568"
    
     x[5]: "~angle: 0.67188186"
     y[5]: "angle: 0.67188186"
    
     [1] "Running test: step-gg.hv"
     [1] "Running test: step-gg.vh"
     [1] "Running test: step-gg.hvh"
     [1] "Running test: step-gg.vhv"
     [1] "Running test: text"
     [1] "Running test: text-colour"
     [1] "Running test: theme-background"
     [1] "Running test: theme-ticks-and-grids"
     [1] "Running test: theme-ticks-default"
     [1] "Running test: theme-zeroline-default"
     [1] "Running test: theme-marker-default"
     [1] "Running test: theme-panel-border-1"
     [1] "Running test: theme-panel-border-2"
     [1] "Running test: ticks-boxes"
     [1] "Running test: ticks-boxes-facet-grid"
     [1] "Running test: ticks-boxes-scales-free"
     [1] "Running test: ticks-boxes-space-free"
     [1] "Running test: ticks-flip"
     [1] "Running test: ticks-flip-grid"
     [1] "Running test: ticks-flip-grid-free"
     [1] "Running test: ticks-limits-hide"
     [1] "Running test: ticks-limits-gap"
     [1] "Running test: ticks-breaks-nochange"
     [1] "Running test: ticks-breaks-more"
     [1] "Running test: ticks-breaks-less"
     [1] "Running test: ticks-scale-labels"
     [1] "Running test: ticks-hide-ticks-lines-labels"
     [1] "Running test: ticks-hide-ticks-labels"
     [1] "Running test: ticks-ycontinuous-ranges"
     [1] "Running test: ticks-ylim-ranges"
     [1] "Running test: ticks-yreverse-ranges"
     [1] "Running test: ticks-yreverse-limits-ranges"
     [1] "Running test: ticks-ylim-reversed-ranges"
     [1] "Running test: ticks-evenly-spaced-ticks"
     [1] "Running test: ticks-uneven"
     [1] "Running test: ticks-line-breaks"
     [1] "Running test: tooltip-datetime"
     ── 16. Failure: datetimes are displayed in tooltip properly (@test-ggplot-toolti
     paste0("time: ", test$time) not identical to sapply(txt, "[[", 1).
     100/100 mismatches
     x[1]: "time: 2016-03-12 16:33:56"
     y[1]: "~time: 2016-03-12 16:33:56"
    
     x[2]: "time: 2016-03-12 16:34:56"
     y[2]: "~time: 2016-03-12 16:34:56"
    
     x[3]: "time: 2016-03-12 16:35:56"
     y[3]: "~time: 2016-03-12 16:35:56"
    
     x[4]: "time: 2016-03-12 16:36:56"
     y[4]: "~time: 2016-03-12 16:36:56"
    
     x[5]: "time: 2016-03-12 16:37:56"
     y[5]: "~time: 2016-03-12 16:37:56"
    
     [1] "Running test: tooltip-date"
     ── 17. Failure: dates are displayed in tooltip properly (@test-ggplot-tooltip.R#
     paste0("time: ", test$time) not identical to sapply(txt, "[[", 1).
     100/100 mismatches
     x[1]: "time: 2016-03-12 00:00:01"
     y[1]: "~time: 2016-03-12 00:00:01"
    
     x[2]: "time: 2016-03-12 00:00:02"
     y[2]: "~time: 2016-03-12 00:00:02"
    
     x[3]: "time: 2016-03-12 00:00:03"
     y[3]: "~time: 2016-03-12 00:00:03"
    
     x[4]: "time: 2016-03-12 00:00:04"
     y[4]: "~time: 2016-03-12 00:00:04"
    
     x[5]: "time: 2016-03-12 00:00:05"
     y[5]: "~time: 2016-03-12 00:00:05"
    
     ── 18. Failure: tooltip argument respects ordering (@test-ggplot-tooltip.R#36)
     all(grepl("^density", sapply(txt, "[[", 1))) isn't true.
    
     ── 19. Error: tooltip argument respects ordering (@test-ggplot-tooltip.R#37) ──
     subscript out of bounds
     1: expect_true(all(grepl("^mpg", sapply(txt, "[[", 2)))) at testthat/test-ggplot-tooltip.R:37
     2: quasi_label(enquo(object), label)
     3: eval_bare(get_expr(quo), get_env(quo))
     4: grepl("^mpg", sapply(txt, "[[", 2))
     5: sapply(txt, "[[", 2)
     6: lapply(X = X, FUN = FUN, ...)
    
     [1] "Running test: heatmap-discrete-tooltip"
     [1] "Running test: group-lines-hovertext"
     ── 20. Failure: group domain is included in hovertext (@test-ggplot-tooltip.R#69
     all(grepl(pattern, txt)) isn't true.
    
     ── 21. Failure: tooltip elements are not crossed (@test-ggplot-tooltip.R#91) ──
     `y_equal_ten` not equivalent to `sample_2`.
     4 element mismatches
    
     [1] "Running test: hovertext-display"
     [1] "Running test: violin"
     [1] "Running test: violin-aes"
     [1] "Running test: vline"
     [1] "Running test: vline-multiple"
     [1] "Running test: ylim-one-trace"
     [1] "Running test: error-simple"
     [1] "Running test: error-simple-line"
     [1] "Running test: error-simple-line-point"
     [1] "Running test: error-simple-line-point-crazy"
     [1] "Running test: error-rect-alpha"
     [1] "Running test: plotly-color-scatterplot-color-factor"
     [1] "Running test: plotly-color-scatterplot-color-factor-custom"
     [1] "Running test: plotly-color-scatterplot-color-factor-custom2"
     [1] "Running test: plotly-color-bar-color-factor-custom"
     [1] "Running test: plotly-color-scatterplot-color-numeric"
     [1] "Running test: plotly-color-scatterplot-color-numeric-custom"
     [1] "Running test: plotly-color-scatterplot-scatter3d-axes"
     [1] "Running test: plotly-color-color-manual"
     [1] "Running test: plotly-colorbar"
     [1] "Running test: plotly-colorbar-expand"
     [1] "Running test: plotly-colorbar-restrict"
     [1] "Running test: plotly-colorbar-z-expand"
     [1] "Running test: plotly-colorbar-z-restrict"
     [1] "Running test: plotly-NAs"
     [1] "Running test: plotly-NAs-connect"
     [1] "Running test: plotly-NAs-within-group"
     [1] "Running test: plotly-NAs-within-color"
     [1] "Running test: plotly-NAs-within-color2"
     [1] "Running test: plotly-no-NAs-for-irrelevant-group"
     [1] "Running test: plotly-linetype-linetype"
     [1] "Running test: plotly-linetype-linetype2"
     [1] "Running test: plotly-linetype-linetype3"
     [1] "Running test: plotly-linetype-manual"
     [1] "Running test: plotly-linetype-ordering"
     [1] "Running test: plotly-linetype-alphabetical"
     [1] "Running test: plotly-subplot-simple"
     [1] "Running test: plotly-subplot-simple2"
     [1] "Running test: plotly-subplot-group"
     [1] "Running test: plotly-subplot-shareX"
     [1] "Running test: plotly-subplot-shareY"
     [1] "Running test: plotly-subplot-shareBoth"
     [1] "Running test: plotly-subplot-width-height"
     [1] "Running test: plotly-subplot-recursive"
     [1] "Running test: plotly-subplot-plot-list"
     [1] "Running test: plotly-subplot-ggmatrix"
     [1] "Running test: plotly-subplot-geo-cartesian"
     [1] "Running test: plotly-subplot-subplot-legendgroup"
     [1] "Running test: plotly-symbol-scatterplot-symbol"
     [1] "Running test: plotly-symbol-scatterplot-symbol2"
     [1] "Running test: plotly-symbol-pch"
     [1] "Running test: plotly-symbol-logical"
     [1] "Running test: plotly-symbol-symbol-manual"
     [1] "Running test: plotly-symbol-ordering"
     [1] "Running test: plotly-symbol-alphabetical"
     [1] "Running test: plotly-scatterplot"
     [1] "Running test: plotly-bar-inference"
     [1] "Running test: plotly-box-data-array"
     [1] "Running test: plotly-group-within-trace"
     [1] "Running test: plotly-alpha-blending"
     [1] "Running test: plotly-alpha-no-color"
     [1] "Running test: plotly-factor-axis"
     [1] "Running test: plotly-character-axis"
     [1] "Running test: plotly-histogram"
     [1] "Running test: plotly-histogram-vert"
     [1] "Running test: plotly-inherit-FALSE"
     [1] "Running test: plotly-time-series-summary"
     ══ testthat results ═══════════════════════════════════════════════════════════
     OK: 1134 SKIPPED: 27 FAILED: 21
     1. Failure: Translates both dates and datetimes (with dynamic ticks) correctly (@test-ggplot-lines.R#85)
     2. Failure: Translates both dates and datetimes (with dynamic ticks) correctly (@test-ggplot-lines.R#86)
     3. Failure: geom_linerange() without a y aesthetic translates to a path (@test-ggplot-lines.R#111)
     4. Failure: polygons with different hovertext must be different traces (@test-ggplot-polygons.R#25)
     5. Failure: polygons with different hovertext must be different traces (@test-ggplot-polygons.R#26)
     6. Failure: polygons with different hovertext must be different traces (@test-ggplot-polygons.R#31)
     7. Failure: borders become one trace with NA (@test-ggplot-polygons.R#147)
     8. Failure: borders become one trace with NA (@test-ggplot-polygons.R#149)
     9. Failure: geom_polygon(aes(group)) -> 1 trace (@test-ggplot-polygons.R#162)
     1. ...
    
     Error: testthat unit tests failed
     Execution halted
Flavor: r-patched-solaris-x86

Version: 4.7.1
Check: tests
Result: ERROR
     Running ‘testthat.R’ [89s/111s]
    Running the tests in ‘tests/testthat.R’ failed.
    Complete output:
     > library("testthat")
     > library("plotly")
     Loading required package: ggplot2
    
     Attaching package: 'plotly'
    
     The following object is masked from 'package:ggplot2':
    
     last_plot
    
     The following object is masked from 'package:stats':
    
     filter
    
     The following object is masked from 'package:graphics':
    
     layout
    
     > library("RSclient")
     >
     > # report any differences in plot (list) hashes if this is a Travis pull request
     > report_diffs <- grepl("^[0-9]+$", Sys.getenv("TRAVIS_PULL_REQUEST"))
     > # build a ggplot2 comparison table?
     > build_table <- Sys.getenv("PLOTLY_TABLE") == "TRUE"
     >
     > # stuff that should be done once (not everytime save_outputs() is called)
     > if (report_diffs || build_table) {
     + message("Spinning up an independent R session with plotly's master branch installed")
     + Rserve::Rserve(args = "--vanilla --RS-enable-remote")
     + conn <- RSconnect()
     + # ensure the seed is the same for randomized tests
     + set.seed(1)
     + RSeval(conn, "set.seed(1)")
     + # we don't make assumptions about ggplot2 versioning,
     + # but it is _strongly_ recommended to use the CRAN version (of ggplot2)
     + RSeval(conn, "devtools::install_github('ropensci/plotly')")
     + RSeval(conn, "library(plotly)")
     + if (report_diffs) {
     + # hash of the version being tested
     + this_hash <- substr(Sys.getenv("TRAVIS_COMMIT"), 1, 7)
     + # hash of version to compare with (master)
     + master_hash <- RSeval(conn, "packageDescription('plotly')$GithubSHA1")
     + master_hash <- substr(master_hash, 1, 7)
     + # plotly-test-table repo hosts the diff pages & keeps track of previous versions
     + table_dir <- normalizePath("../../plotly-test-table", mustWork = T)
     + # Make sure we have appropriate versions of plotlyjs
     + # (see plotly-test-table/template/template/index.html)
     + file.copy(
     + file.path("..", "inst", "htmlwidgets", "lib", "plotlyjs", "plotly-latest.min.js"),
     + file.path(table_dir, "template", "New.min.js"),
     + overwrite = TRUE
     + )
     + download.file(
     + "https://raw.githubusercontent.com/ropensci/plotly/master/inst/htmlwidgets/lib/plotlyjs/plotly-latest.min.js",
     + file.path(table_dir, "template", "Old.min.js"),
     + method = "curl"
     + )
     + # directory for placing test differences
     + this_dir <- file.path(table_dir, this_hash)
     + if (dir.exists(this_dir)) {
     + message("Tests were already run on this commit. Nuking the old results...")
     + unlink(this_dir, recursive = T)
     + }
     + master_dir <- file.path(table_dir, master_hash)
     + # csv file that tracks plot hashes
     + hash_file <- file.path(table_dir, "hashes.csv")
     + if (!file.exists(hash_file)) {
     + file.create(hash_file)
     + cat("commit,test,hash\n", file = hash_file, append = T)
     + }
     + hash_info <- utils::read.csv(hash_file)
     + master_info <- hash_info[hash_info$commit %in% master_hash, ]
     + }
     + }
     >
     > # Some tests make plot.ly HTTP requests and require a valid user account
     > # (see test-plotly-filename.R). For security reasons, these tests should be
     > # skipped on pull requests (the .travis.yml file uses encrypted credentials
     > # & encrypted environment vars cannot be accessed on pull request builds)
     > skip_if_not_master <- function() {
     + is_pr <- grepl("^[0-9]+$", Sys.getenv("TRAVIS_PULL_REQUEST"))
     + is_r_release <- Sys.getenv("TRAVIS_R_VERSION_STRING", "release") == "release"
     + if (!is_pr && is_r_release) return(invisible(TRUE))
     + skip("plot.ly API calls are only tested on the master build on r-release")
     + }
     >
     > # This function is called within testthat/test-*.R files.
     > # It takes a ggplot or plotly object as input, and it returns a figure
     > # object (aka the data behind the plot).
     > save_outputs <- function(gg, name) {
     + print(paste("Running test:", name))
     + p <- plotly_build(gg)$x[c("data", "layout")]
     + has_diff <- if (report_diffs) {
     + # save a hash of the R object
     + plot_hash <- digest::digest(p)
     + info <- paste(this_hash, name, plot_hash, sep = ",")
     + cat(paste(info, "\n"), file = hash_file, append = T)
     + test_info <- master_info[master_info$test %in% name, ]
     + # is the plot hash different from master?
     + !isTRUE(plot_hash == test_info$hash)
     + } else FALSE
     + if (has_diff || build_table) {
     + RSassign(conn, gg)
     + pm <- RSeval(conn, "tryCatch(plotly::plotly_build(gg)$x[c('data', 'layout')], error = function(e) e$message)")
     + if (build_table) {
     + # save pngs of ggplot
     + filename <- paste0(gsub("\\s+", "-", name), ".png")
     + ggFile <- paste("ggplot", filename, sep = "-")
     + res <- tryCatch(ggsave(ggFile, gg),
     + error = function(e) {
     + err <- qplot() +
     + annotate('text', label = paste('Error:', e$message),
     + x = 1, y = 1, color = 'red')
     + ggsave(ggFile, err, width = 3, height = 2, units = 'in')
     + })
     + img <- function(x, f) {
     + tryCatch(plotly_IMAGE(x, out_file = f, width = 300, height = 400),
     + error = function(e) {
     + err <- qplot() +
     + annotate('text', label = paste('Error:', e$message),
     + x = 1, y = 1, color = 'red')
     + # TODO: convert pixels to inches?
     + ggsave(plotlyFile, err, width = 3, height = 2, units = 'in')
     + })
     + }
     + # save _this_ plotly version
     + plotlyFile <- paste("plotly", this_hash, filename, sep = "-")
     + res <- img(p, plotlyFile)
     + # save _master_ plotly version
     + plotlyFile <- paste("plotly", "master", filename, sep = "-")
     + RSassign(conn, plotlyFile, "plotlyFile")
     + RSassign(conn, img, "img")
     + res <- RSeval(conn, "img(p, plotlyFile)")
     + }
     + # it could be that the hash didn't exist, so make sure they're different
     + # before build a diff page
     + if (plot_hash != digest::digest(pm)) {
     + test_dir <- file.path(this_dir, gsub("\\s+", "-", name))
     + if (dir.exists(test_dir)) stop(shQuote(name), " has already been used to save_outputs() in another test.")
     + dir.create(test_dir, recursive = T)
     + # copy over diffing template
     + file.copy(
     + dir(file.path(table_dir, "template", "template"), full.names = TRUE), test_dir
     + )
     + # overwrite the default JSON
     + writeLines(
     + paste("New =", plotly:::to_JSON(p)),
     + file.path(test_dir, "New.json")
     + )
     + writeLines(
     + paste("Old =", plotly:::to_JSON(pm)),
     + file.path(test_dir, "Old.json")
     + )
     + }
     + }
     + p
     + }
     >
     > # use me just like testthat::test_check()
     > test_run <- function(...) {
     + # shut down the other R session on exit
     + if (report_diffs || build_table) {
     + on.exit(RSshutdown(conn))
     + on.exit(RSclose(conn), add = TRUE)
     + }
     + test_check(...)
     + }
     >
     > if (packageVersion("ggplot2") > "2.2.1") {
     + test_run("plotly")
     + }
     [1] "Running test: cookbook-axes-flevels"
     [1] "Running test: cookbook-axes-ylim.hide"
     [1] "Running test: cookbook-axes-scale.hide"
     [1] "Running test: cookbook-axes-coord-ylim"
     [1] "Running test: cookbook-axes-linear-axes"
     [1] "Running test: cookbook-axes-log2-scale"
     [1] "Running test: cookbook-axes-log2-coord"
     [1] "Running test: cookbook-axes-log2-labels"
     [1] "Running test: cookbook-axes-scale_y_log10"
     [1] "Running test: cookbook-axes-scale_y_log10-labels"
     [1] "Running test: cookbook-axes-no-x-title"
     [1] "Running test: cookbook-axes-scale-name"
     [1] "Running test: cookbook-axes-fonts"
     [1] "Running test: cookbook-axes-label-funs"
     [1] "Running test: cookbook-axes-custom-formatter"
     [1] "Running test: cookbook-axes-blank-minor-major"
     [1] "Running test: cookbook-axes-blank-minor"
     [1] "Running test: cookbook-axes-blank-x"
     [1] "Running test: cookbook-axes-blank-y"
     [1] "Running test: cookbook-axes-basic-bar"
     [1] "Running test: cookbook-axes-basic-horizontal-line"
     [1] "Running test: cookbook-axes-dashed-red-line"
     [1] "Running test: cookbook-axes-bar-error-wide"
     [1] "Running test: cookbook-axes-bar-error-narrow"
     [1] "Running test: cookbook-axes-bar-error-diff"
     [1] "Running test: cookbook-axes-bar-dodge-color"
     [1] "Running test: cookbook-axes-bar-dodge-color-error"
     [1] "Running test: cookbook-axes-bar-dodge-color-err4"
     [1] "Running test: cookbook-axes-scatter-basic"
     [1] "Running test: cookbook-axes-scatter-hline"
     [1] "Running test: cookbook-axes-scatter-hline-vline"
     [1] "Running test: cookbook-axes-scatter-facet"
     [1] "Running test: cookbook-axes-scatter-facet-hline"
     [1] "Running test: cookbook-axes-scatter-facet-hline-vline"
     [1] "Running test: scatterplots-hollow"
     [1] "Running test: scatterplots-smooth-lm"
     [1] "Running test: scatterplots-smooth-lm-se-false"
     [1] "Running test: scatterplots-loess"
     [1] "Running test: scatterplots-color"
     [1] "Running test: scatterplots-scale-color-hue"
     [1] "Running test: scatterplots-full-range"
     [1] "Running test: scatterplots-shape"
     [1] "Running test: scatterplots-shape-manual"
     [1] "Running test: scatterplots-overlap"
     [1] "Running test: scatterplots-jitter"
     [1] "Running test: scatterplots-geom_jitter"
     [1] "Running test: cookbook-axes-single-abline"
     [1] "Running test: cookbook-axes-multiple-abline"
     [1] "Running test: area-simple"
     [1] "Running test: area-area-fillcolor"
     [1] "Running test: area-traces_order"
     [1] "Running test: bar-dodge"
     [1] "Running test: bar-stack"
     [1] "Running test: bar-identity"
     [1] "Running test: bar-dates"
     [1] "Running test: bar-nocolor"
     [1] "Running test: bar-color"
     [1] "Running test: bar-black-outline"
     [1] "Running test: bar-aes-fill-guides-color-none"
     [1] "Running test: bar-aes-colour-guides-fill-FALSE"
     [1] "Running test: bar-position-stack"
     [1] "Running test: bar-position-fill"
     [1] "Running test: bar-category-names"
     [1] "Running test: bar-coord-flip"
     [1] "Running test: boxplot"
     [1] "Running test: boxplot-datetime"
     [1] "Running test: boxplot-legends_for_fill"
     [1] "Running test: boxplot-fillcolor"
     [1] "Running test: col"
     [1] "Running test: contour"
     [1] "Running test: date-strings"
     [1] "Running test: date-class-Date"
     [1] "Running test: date-irregular-time-series"
     [1] "Running test: density-simple"
     [1] "Running test: density-fill"
     [1] "Running test: density-color"
     [1] "Running test: density-histogram"
     [1] "Running test: density-traces_order"
     [1] "Running test: density2d"
     [1] "Running test: density2dfill"
     [1] "Running test: errorbar-horizontal"
     [1] "Running test: errorbar"
     [1] "Running test: errorbar-unique-groups"
     [1] "Running test: barley"
     [1] "Running test: 3-panels"
     [1] "Running test: facet_wrap_free"
     [1] "Running test: facet_wrap_free_y"
     [1] "Running test: facet_wrap_free_x"
     [1] "Running test: facet_grid_free"
     [1] "Running test: facet_grid_free_y"
     [1] "Running test: facet_grid_free_x"
     [1] "Running test: facet_wrap_free_mult"
     [1] "Running test: facet_wrap"
     [1] "Running test: facet_wrap-labeller"
     [1] "Running test: facet_grid-labeller"
     [1] "Running test: facet_wrap-free_y"
     [1] "Running test: heatmap"
     [1] "Running test: heatmap-midpoint"
     [1] "Running test: heatmap-discrete"
     [1] "Running test: hex-basic"
     [1] "Running test: hex-bins"
     [1] "Running test: hex-binwidth"
     [1] "Running test: histogram-counts"
     [1] "Running test: histogram-density"
     [1] "Running test: histogram-fill"
     [1] "Running test: histogram-fixed-fill-color"
     [1] "Running test: histogram-density-binwidth"
     [1] "Running test: histogram-fill-factor"
     [1] "Running test: histogram-fill-factor-identity"
     [1] "Running test: histogram-fill-factor-dodge"
     [1] "Running test: histogram-fill-factor-facets"
     [1] "Running test: histogram-vline"
     [1] "Running test: histogram-dates"
     [1] "Running test: histogram-POSIXt-bins"
     [1] "Running test: histogram-Date-bins"
     [1] "Running test: hline"
     [1] "Running test: hline-multiple"
     [1] "Running test: hline-factor"
     [1] "Running test: jitter-basic"
     [1] "Running test: labels-ggtitle"
     [1] "Running test: labels-ylab"
     [1] "Running test: labels-angles"
     [1] "Running test: scatter_legend"
     [1] "Running test: legend-hide"
     [1] "Running test: legend-very-long-legend-items"
     [1] "Running test: legend-one-entry"
     [1] "Running test: legend-hide-legend"
     [1] "Running test: legend-many legend items"
     [1] "Running test: linetype-types"
     [1] "Running test: linetype-colors"
     ── 1. Failure: Translates both dates and datetimes (with dynamic ticks) correctl
     paste("date:", d$date) not equivalent to `dates1`.
     100/100 mismatches
     x[1]: "date: 2002-01-01"
     y[1]: "~date: 2002-01-01"
    
     x[2]: "date: 2002-02-01"
     y[2]: "~date: 2002-02-01"
    
     x[3]: "date: 2002-03-01"
     y[3]: "~date: 2002-03-01"
    
     x[4]: "date: 2002-04-01"
     y[4]: "~date: 2002-04-01"
    
     x[5]: "date: 2002-05-01"
     y[5]: "~date: 2002-05-01"
    
     ── 2. Failure: Translates both dates and datetimes (with dynamic ticks) correctl
     paste("date:", d2$date) not equivalent to `dates2`.
     100/100 mismatches
     x[1]: "date: 2002-01-01 01:00:00"
     y[1]: "~date: 2002-01-01 01:00:00"
    
     x[2]: "date: 2002-02-01 01:00:00"
     y[2]: "~date: 2002-02-01 01:00:00"
    
     x[3]: "date: 2002-03-01 01:00:00"
     y[3]: "~date: 2002-03-01 01:00:00"
    
     x[4]: "date: 2002-04-01 02:00:00"
     y[4]: "~date: 2002-04-01 02:00:00"
    
     x[5]: "date: 2002-05-01 02:00:00"
     y[5]: "~date: 2002-05-01 02:00:00"
    
     ── 3. Failure: geom_linerange() without a y aesthetic translates to a path (@tes
     unlist(l$data[[1]]$text) not equivalent to c(...).
     10/14 mismatches
     x[1]: "~x: 1<br />~ymin: 0"
     y[1]: "x: 1<br />ymin: 0"
    
     x[2]: "~x: 1<br />~ymax: 1"
     y[2]: "x: 1<br />ymax: 1"
    
     x[4]: "~x: 2<br />~ymin: 0"
     y[4]: "x: 2<br />ymin: 0"
    
     x[5]: "~x: 2<br />~ymax: 2"
     y[5]: "x: 2<br />ymax: 2"
    
     x[7]: "~x: 3<br />~ymin: 0"
     y[7]: "x: 3<br />ymin: 0"
    
     [1] "Running test: map-facet"
     [1] "Running test: path-lines-diff-from-paths"
     [1] "Running test: path-colors"
     [1] "Running test: path-colors2"
     [1] "Running test: path-colored-groups-stay-together"
     [1] "Running test: path-line-symbols"
     [1] "Running test: point-size-alpha"
     [1] "Running test: open-shapes"
     [1] "Running test: all-shapes"
     [1] "Running test: point-size-alpha2"
     [1] "Running test: polygon-black"
     ── 4. Failure: polygons with different hovertext must be different traces (@tes
     info$data[[1]]$x not equivalent to c(10, 11, 11, 10, 10).
     5/5 mismatches (average diff: 2)
     [1] 12 - 10 == 2
     [2] 13 - 11 == 2
     [3] 13 - 11 == 2
     [4] 12 - 10 == 2
     [5] 12 - 10 == 2
    
     ── 5. Failure: polygons with different hovertext must be different traces (@tes
     info$data[[2]]$x not equivalent to c(12, 13, 13, 12, 12).
     5/5 mismatches (average diff: 2)
     [1] 10 - 12 == -2
     [2] 11 - 13 == -2
     [3] 11 - 13 == -2
     [4] 10 - 12 == -2
     [5] 10 - 12 == -2
    
     ── 6. Failure: polygons with different hovertext must be different traces (@tes
     sapply(info$data, "[[", "text") not equivalent to c("lab: left", "lab: right").
     2/2 mismatches
     x[1]: "~lab: NA"
     y[1]: "lab: left"
    
     x[2]: "~lab: ~"
     y[2]: "lab: right"
    
     [1] "Running test: polygon-aes-color"
     [1] "Running test: polygon-aes-fill"
     [1] "Running test: polygon-color-aes-fill"
     [1] "Running test: polygon-color-fill-aes-linetype"
     [1] "Running test: polygon-color-fill-aes-size"
     [1] "Running test: polygons-canada-borders"
     ── 7. Failure: borders become one trace with NA (@test-ggplot-polygons.R#147) ─
     length(info$data) not equivalent to 1.
     1/1 mismatches
     [1] 2 - 1 == 1
    
     ── 8. Failure: borders become one trace with NA (@test-ggplot-polygons.R#149) ─
     nchar(info$data[[1]]$text) not equivalent to 0.
     1/1 mismatches
     [1] 10 - 0 == 10
    
     [1] "Running test: polygon-star-group"
     ── 9. Failure: geom_polygon(aes(group)) -> 1 trace (@test-ggplot-polygons.R#162)
     length(has.data) not equivalent to `n.traces`.
     1/1 mismatches
     [1] 2 - 1 == 1
    
     ── 10. Failure: geom_polygon(aes(group)) -> 1 trace (@test-ggplot-polygons.R#165
     tr$x not equivalent to c(0, -1, 2, -2, 1, 0, NA, 10, 9, 12, 8, 11, 10).
     Lengths differ: 6 is not 13
    
     ── 11. Failure: geom_polygon(aes(group)) -> 1 trace (@test-ggplot-polygons.R#168
     tr$y not equivalent to c(2, 0, 1, 1, 0, 2, NA, 2, 0, 1, 1, 0, 2).
     Lengths differ: 6 is not 13
    
     [1] "Running test: polygon-star-group-color"
     ── 12. Failure: geom_polygon(aes(group), color) -> 1 trace (@test-ggplot-polygon
     length(has.data) not equivalent to `n.traces`.
     1/1 mismatches
     [1] 2 - 1 == 1
    
     ── 13. Failure: geom_polygon(aes(group), color) -> 1 trace (@test-ggplot-polygon
     tr$x not equivalent to c(0, -1, 2, -2, 1, 0, NA, 10, 9, 12, 8, 11, 10).
     Lengths differ: 6 is not 13
    
     ── 14. Failure: geom_polygon(aes(group), color) -> 1 trace (@test-ggplot-polygon
     tr$y not equivalent to c(2, 0, 1, 1, 0, 2, NA, 2, 0, 1, 1, 0, 2).
     Lengths differ: 6 is not 13
    
     [1] "Running test: polygon-star-fill-color"
     [1] "Running test: rect-black"
     [1] "Running test: rect-black4"
     [1] "Running test: rect-color"
     [1] "Running test: rect-fill"
     [1] "Running test: rect-fill-color"
     [1] "Running test: rect-fill-hex-alpha"
     [1] "Running test: ribbon-alpha"
     [1] "Running test: ribbon-group"
     [1] "Running test: ribbon-colour"
     [1] "Running test: ribbon-fill"
     [1] "Running test: segment"
     [1] "Running test: segment-multiple-non-numeric"
     [1] "Running test: sf"
     [1] "Running test: sf-fill-text"
     [1] "Running test: sf-points"
     [1] "Running test: size-is-a-vector"
     [1] "Running test: size-global-scaling"
     [1] "Running test: smooth-basic"
     [1] "Running test: smooth-se-false"
     [1] "Running test: smooth-group"
     [1] "Running test: smooth-colour"
     [1] "Running test: smooth-fill2"
     [1] "Running test: smooth-facet"
     ── 15. Failure: Basic geom_spoke() (@test-ggplot-spoke.R#20) ──────────────────
     `angle` not equivalent to rep(paste0("angle: ", format(df$angle)), each = 2).
     200/200 mismatches
     x[1]: "~angle: 3.9975619"
     y[1]: "angle: 3.9975619"
    
     x[2]: "~angle: 3.9975619"
     y[2]: "angle: 3.9975619"
    
     x[3]: "~angle: 2.6050381"
     y[3]: "angle: 2.6050381"
    
     x[4]: "~angle: 2.6050381"
     y[4]: "angle: 2.6050381"
    
     x[5]: "~angle: 2.7762575"
     y[5]: "angle: 2.7762575"
    
     [1] "Running test: step-gg.hv"
     [1] "Running test: step-gg.vh"
     [1] "Running test: step-gg.hvh"
     [1] "Running test: step-gg.vhv"
     [1] "Running test: text"
     [1] "Running test: text-colour"
     [1] "Running test: theme-background"
     [1] "Running test: theme-ticks-and-grids"
     [1] "Running test: theme-ticks-default"
     [1] "Running test: theme-zeroline-default"
     [1] "Running test: theme-marker-default"
     [1] "Running test: theme-panel-border-1"
     [1] "Running test: theme-panel-border-2"
     [1] "Running test: ticks-boxes"
     [1] "Running test: ticks-boxes-facet-grid"
     [1] "Running test: ticks-boxes-scales-free"
     [1] "Running test: ticks-boxes-space-free"
     [1] "Running test: ticks-flip"
     [1] "Running test: ticks-flip-grid"
     [1] "Running test: ticks-flip-grid-free"
     [1] "Running test: ticks-limits-hide"
     [1] "Running test: ticks-limits-gap"
     [1] "Running test: ticks-breaks-nochange"
     [1] "Running test: ticks-breaks-more"
     [1] "Running test: ticks-breaks-less"
     [1] "Running test: ticks-scale-labels"
     [1] "Running test: ticks-hide-ticks-lines-labels"
     [1] "Running test: ticks-hide-ticks-labels"
     [1] "Running test: ticks-ycontinuous-ranges"
     [1] "Running test: ticks-ylim-ranges"
     [1] "Running test: ticks-yreverse-ranges"
     [1] "Running test: ticks-yreverse-limits-ranges"
     [1] "Running test: ticks-ylim-reversed-ranges"
     [1] "Running test: ticks-evenly-spaced-ticks"
     [1] "Running test: ticks-uneven"
     [1] "Running test: ticks-line-breaks"
     [1] "Running test: tooltip-datetime"
     ── 16. Failure: datetimes are displayed in tooltip properly (@test-ggplot-toolti
     paste0("time: ", test$time) not identical to sapply(txt, "[[", 1).
     100/100 mismatches
     x[1]: "time: 2016-03-12 16:33:56"
     y[1]: "~time: 2016-03-12 16:33:56"
    
     x[2]: "time: 2016-03-12 16:34:56"
     y[2]: "~time: 2016-03-12 16:34:56"
    
     x[3]: "time: 2016-03-12 16:35:56"
     y[3]: "~time: 2016-03-12 16:35:56"
    
     x[4]: "time: 2016-03-12 16:36:56"
     y[4]: "~time: 2016-03-12 16:36:56"
    
     x[5]: "time: 2016-03-12 16:37:56"
     y[5]: "~time: 2016-03-12 16:37:56"
    
     [1] "Running test: tooltip-date"
     ── 17. Failure: dates are displayed in tooltip properly (@test-ggplot-tooltip.R#
     paste0("time: ", test$time) not identical to sapply(txt, "[[", 1).
     100/100 mismatches
     x[1]: "time: 2016-03-12 00:00:01"
     y[1]: "~time: 2016-03-12 00:00:01"
    
     x[2]: "time: 2016-03-12 00:00:02"
     y[2]: "~time: 2016-03-12 00:00:02"
    
     x[3]: "time: 2016-03-12 00:00:03"
     y[3]: "~time: 2016-03-12 00:00:03"
    
     x[4]: "time: 2016-03-12 00:00:04"
     y[4]: "~time: 2016-03-12 00:00:04"
    
     x[5]: "time: 2016-03-12 00:00:05"
     y[5]: "~time: 2016-03-12 00:00:05"
    
     ── 18. Failure: tooltip argument respects ordering (@test-ggplot-tooltip.R#36)
     all(grepl("^density", sapply(txt, "[[", 1))) isn't true.
    
     ── 19. Error: tooltip argument respects ordering (@test-ggplot-tooltip.R#37) ──
     subscript out of bounds
     1: expect_true(all(grepl("^mpg", sapply(txt, "[[", 2)))) at testthat/test-ggplot-tooltip.R:37
     2: quasi_label(enquo(object), label)
     3: eval_bare(get_expr(quo), get_env(quo))
     4: grepl("^mpg", sapply(txt, "[[", 2))
     5: sapply(txt, "[[", 2)
     6: lapply(X = X, FUN = FUN, ...)
    
     [1] "Running test: heatmap-discrete-tooltip"
     [1] "Running test: group-lines-hovertext"
     ── 20. Failure: group domain is included in hovertext (@test-ggplot-tooltip.R#69
     all(grepl(pattern, txt)) isn't true.
    
     ── 21. Failure: tooltip elements are not crossed (@test-ggplot-tooltip.R#91) ──
     `y_equal_ten` not equivalent to `sample_2`.
     4 element mismatches
    
     [1] "Running test: hovertext-display"
     [1] "Running test: violin"
     [1] "Running test: violin-aes"
     [1] "Running test: vline"
     [1] "Running test: vline-multiple"
     [1] "Running test: ylim-one-trace"
     [1] "Running test: error-simple"
     [1] "Running test: error-simple-line"
     [1] "Running test: error-simple-line-point"
     [1] "Running test: error-simple-line-point-crazy"
     [1] "Running test: error-rect-alpha"
     [1] "Running test: plotly-color-scatterplot-color-factor"
     [1] "Running test: plotly-color-scatterplot-color-factor-custom"
     [1] "Running test: plotly-color-scatterplot-color-factor-custom2"
     [1] "Running test: plotly-color-bar-color-factor-custom"
     [1] "Running test: plotly-color-scatterplot-color-numeric"
     [1] "Running test: plotly-color-scatterplot-color-numeric-custom"
     [1] "Running test: plotly-color-scatterplot-scatter3d-axes"
     [1] "Running test: plotly-color-color-manual"
     [1] "Running test: plotly-colorbar"
     [1] "Running test: plotly-colorbar-expand"
     [1] "Running test: plotly-colorbar-restrict"
     [1] "Running test: plotly-colorbar-z-expand"
     [1] "Running test: plotly-colorbar-z-restrict"
     [1] "Running test: plotly-NAs"
     [1] "Running test: plotly-NAs-connect"
     [1] "Running test: plotly-NAs-within-group"
     [1] "Running test: plotly-NAs-within-color"
     [1] "Running test: plotly-NAs-within-color2"
     [1] "Running test: plotly-no-NAs-for-irrelevant-group"
     [1] "Running test: plotly-linetype-linetype"
     [1] "Running test: plotly-linetype-linetype2"
     [1] "Running test: plotly-linetype-linetype3"
     [1] "Running test: plotly-linetype-manual"
     [1] "Running test: plotly-linetype-ordering"
     [1] "Running test: plotly-linetype-alphabetical"
     [1] "Running test: plotly-subplot-simple"
     [1] "Running test: plotly-subplot-simple2"
     [1] "Running test: plotly-subplot-group"
     [1] "Running test: plotly-subplot-shareX"
     [1] "Running test: plotly-subplot-shareY"
     [1] "Running test: plotly-subplot-shareBoth"
     [1] "Running test: plotly-subplot-width-height"
     [1] "Running test: plotly-subplot-recursive"
     [1] "Running test: plotly-subplot-plot-list"
     [1] "Running test: plotly-subplot-ggmatrix"
     [1] "Running test: plotly-subplot-geo-cartesian"
     [1] "Running test: plotly-subplot-subplot-legendgroup"
     [1] "Running test: plotly-symbol-scatterplot-symbol"
     [1] "Running test: plotly-symbol-scatterplot-symbol2"
     [1] "Running test: plotly-symbol-pch"
     [1] "Running test: plotly-symbol-logical"
     [1] "Running test: plotly-symbol-symbol-manual"
     [1] "Running test: plotly-symbol-ordering"
     [1] "Running test: plotly-symbol-alphabetical"
     [1] "Running test: plotly-scatterplot"
     [1] "Running test: plotly-bar-inference"
     [1] "Running test: plotly-box-data-array"
     [1] "Running test: plotly-group-within-trace"
     [1] "Running test: plotly-alpha-blending"
     [1] "Running test: plotly-alpha-no-color"
     [1] "Running test: plotly-factor-axis"
     [1] "Running test: plotly-character-axis"
     [1] "Running test: plotly-histogram"
     [1] "Running test: plotly-histogram-vert"
     [1] "Running test: plotly-inherit-FALSE"
     [1] "Running test: plotly-time-series-summary"
     ══ testthat results ═══════════════════════════════════════════════════════════
     OK: 1134 SKIPPED: 27 FAILED: 21
     1. Failure: Translates both dates and datetimes (with dynamic ticks) correctly (@test-ggplot-lines.R#85)
     2. Failure: Translates both dates and datetimes (with dynamic ticks) correctly (@test-ggplot-lines.R#86)
     3. Failure: geom_linerange() without a y aesthetic translates to a path (@test-ggplot-lines.R#111)
     4. Failure: polygons with different hovertext must be different traces (@test-ggplot-polygons.R#25)
     5. Failure: polygons with different hovertext must be different traces (@test-ggplot-polygons.R#26)
     6. Failure: polygons with different hovertext must be different traces (@test-ggplot-polygons.R#31)
     7. Failure: borders become one trace with NA (@test-ggplot-polygons.R#147)
     8. Failure: borders become one trace with NA (@test-ggplot-polygons.R#149)
     9. Failure: geom_polygon(aes(group)) -> 1 trace (@test-ggplot-polygons.R#162)
     1. ...
    
     Error: testthat unit tests failed
     Execution halted
Flavor: r-release-linux-x86_64

Version: 4.7.1
Check: tests
Result: ERROR
     Running 'testthat.R' [92s]
    Running the tests in 'tests/testthat.R' failed.
    Complete output:
     > library("testthat")
     > library("plotly")
     Loading required package: ggplot2
    
     Attaching package: 'plotly'
    
     The following object is masked from 'package:ggplot2':
    
     last_plot
    
     The following object is masked from 'package:stats':
    
     filter
    
     The following object is masked from 'package:graphics':
    
     layout
    
     > library("RSclient")
     >
     > # report any differences in plot (list) hashes if this is a Travis pull request
     > report_diffs <- grepl("^[0-9]+$", Sys.getenv("TRAVIS_PULL_REQUEST"))
     > # build a ggplot2 comparison table?
     > build_table <- Sys.getenv("PLOTLY_TABLE") == "TRUE"
     >
     > # stuff that should be done once (not everytime save_outputs() is called)
     > if (report_diffs || build_table) {
     + message("Spinning up an independent R session with plotly's master branch installed")
     + Rserve::Rserve(args = "--vanilla --RS-enable-remote")
     + conn <- RSconnect()
     + # ensure the seed is the same for randomized tests
     + set.seed(1)
     + RSeval(conn, "set.seed(1)")
     + # we don't make assumptions about ggplot2 versioning,
     + # but it is _strongly_ recommended to use the CRAN version (of ggplot2)
     + RSeval(conn, "devtools::install_github('ropensci/plotly')")
     + RSeval(conn, "library(plotly)")
     + if (report_diffs) {
     + # hash of the version being tested
     + this_hash <- substr(Sys.getenv("TRAVIS_COMMIT"), 1, 7)
     + # hash of version to compare with (master)
     + master_hash <- RSeval(conn, "packageDescription('plotly')$GithubSHA1")
     + master_hash <- substr(master_hash, 1, 7)
     + # plotly-test-table repo hosts the diff pages & keeps track of previous versions
     + table_dir <- normalizePath("../../plotly-test-table", mustWork = T)
     + # Make sure we have appropriate versions of plotlyjs
     + # (see plotly-test-table/template/template/index.html)
     + file.copy(
     + file.path("..", "inst", "htmlwidgets", "lib", "plotlyjs", "plotly-latest.min.js"),
     + file.path(table_dir, "template", "New.min.js"),
     + overwrite = TRUE
     + )
     + download.file(
     + "https://raw.githubusercontent.com/ropensci/plotly/master/inst/htmlwidgets/lib/plotlyjs/plotly-latest.min.js",
     + file.path(table_dir, "template", "Old.min.js"),
     + method = "curl"
     + )
     + # directory for placing test differences
     + this_dir <- file.path(table_dir, this_hash)
     + if (dir.exists(this_dir)) {
     + message("Tests were already run on this commit. Nuking the old results...")
     + unlink(this_dir, recursive = T)
     + }
     + master_dir <- file.path(table_dir, master_hash)
     + # csv file that tracks plot hashes
     + hash_file <- file.path(table_dir, "hashes.csv")
     + if (!file.exists(hash_file)) {
     + file.create(hash_file)
     + cat("commit,test,hash\n", file = hash_file, append = T)
     + }
     + hash_info <- utils::read.csv(hash_file)
     + master_info <- hash_info[hash_info$commit %in% master_hash, ]
     + }
     + }
     >
     > # Some tests make plot.ly HTTP requests and require a valid user account
     > # (see test-plotly-filename.R). For security reasons, these tests should be
     > # skipped on pull requests (the .travis.yml file uses encrypted credentials
     > # & encrypted environment vars cannot be accessed on pull request builds)
     > skip_if_not_master <- function() {
     + is_pr <- grepl("^[0-9]+$", Sys.getenv("TRAVIS_PULL_REQUEST"))
     + is_r_release <- Sys.getenv("TRAVIS_R_VERSION_STRING", "release") == "release"
     + if (!is_pr && is_r_release) return(invisible(TRUE))
     + skip("plot.ly API calls are only tested on the master build on r-release")
     + }
     >
     > # This function is called within testthat/test-*.R files.
     > # It takes a ggplot or plotly object as input, and it returns a figure
     > # object (aka the data behind the plot).
     > save_outputs <- function(gg, name) {
     + print(paste("Running test:", name))
     + p <- plotly_build(gg)$x[c("data", "layout")]
     + has_diff <- if (report_diffs) {
     + # save a hash of the R object
     + plot_hash <- digest::digest(p)
     + info <- paste(this_hash, name, plot_hash, sep = ",")
     + cat(paste(info, "\n"), file = hash_file, append = T)
     + test_info <- master_info[master_info$test %in% name, ]
     + # is the plot hash different from master?
     + !isTRUE(plot_hash == test_info$hash)
     + } else FALSE
     + if (has_diff || build_table) {
     + RSassign(conn, gg)
     + pm <- RSeval(conn, "tryCatch(plotly::plotly_build(gg)$x[c('data', 'layout')], error = function(e) e$message)")
     + if (build_table) {
     + # save pngs of ggplot
     + filename <- paste0(gsub("\\s+", "-", name), ".png")
     + ggFile <- paste("ggplot", filename, sep = "-")
     + res <- tryCatch(ggsave(ggFile, gg),
     + error = function(e) {
     + err <- qplot() +
     + annotate('text', label = paste('Error:', e$message),
     + x = 1, y = 1, color = 'red')
     + ggsave(ggFile, err, width = 3, height = 2, units = 'in')
     + })
     + img <- function(x, f) {
     + tryCatch(plotly_IMAGE(x, out_file = f, width = 300, height = 400),
     + error = function(e) {
     + err <- qplot() +
     + annotate('text', label = paste('Error:', e$message),
     + x = 1, y = 1, color = 'red')
     + # TODO: convert pixels to inches?
     + ggsave(plotlyFile, err, width = 3, height = 2, units = 'in')
     + })
     + }
     + # save _this_ plotly version
     + plotlyFile <- paste("plotly", this_hash, filename, sep = "-")
     + res <- img(p, plotlyFile)
     + # save _master_ plotly version
     + plotlyFile <- paste("plotly", "master", filename, sep = "-")
     + RSassign(conn, plotlyFile, "plotlyFile")
     + RSassign(conn, img, "img")
     + res <- RSeval(conn, "img(p, plotlyFile)")
     + }
     + # it could be that the hash didn't exist, so make sure they're different
     + # before build a diff page
     + if (plot_hash != digest::digest(pm)) {
     + test_dir <- file.path(this_dir, gsub("\\s+", "-", name))
     + if (dir.exists(test_dir)) stop(shQuote(name), " has already been used to save_outputs() in another test.")
     + dir.create(test_dir, recursive = T)
     + # copy over diffing template
     + file.copy(
     + dir(file.path(table_dir, "template", "template"), full.names = TRUE), test_dir
     + )
     + # overwrite the default JSON
     + writeLines(
     + paste("New =", plotly:::to_JSON(p)),
     + file.path(test_dir, "New.json")
     + )
     + writeLines(
     + paste("Old =", plotly:::to_JSON(pm)),
     + file.path(test_dir, "Old.json")
     + )
     + }
     + }
     + p
     + }
     >
     > # use me just like testthat::test_check()
     > test_run <- function(...) {
     + # shut down the other R session on exit
     + if (report_diffs || build_table) {
     + on.exit(RSshutdown(conn))
     + on.exit(RSclose(conn), add = TRUE)
     + }
     + test_check(...)
     + }
     >
     > if (packageVersion("ggplot2") > "2.2.1") {
     + test_run("plotly")
     + }
     [1] "Running test: cookbook-axes-flevels"
     [1] "Running test: cookbook-axes-ylim.hide"
     [1] "Running test: cookbook-axes-scale.hide"
     [1] "Running test: cookbook-axes-coord-ylim"
     [1] "Running test: cookbook-axes-linear-axes"
     [1] "Running test: cookbook-axes-log2-scale"
     [1] "Running test: cookbook-axes-log2-coord"
     [1] "Running test: cookbook-axes-log2-labels"
     [1] "Running test: cookbook-axes-scale_y_log10"
     [1] "Running test: cookbook-axes-scale_y_log10-labels"
     [1] "Running test: cookbook-axes-no-x-title"
     [1] "Running test: cookbook-axes-scale-name"
     [1] "Running test: cookbook-axes-fonts"
     [1] "Running test: cookbook-axes-label-funs"
     [1] "Running test: cookbook-axes-custom-formatter"
     [1] "Running test: cookbook-axes-blank-minor-major"
     [1] "Running test: cookbook-axes-blank-minor"
     [1] "Running test: cookbook-axes-blank-x"
     [1] "Running test: cookbook-axes-blank-y"
     [1] "Running test: cookbook-axes-basic-bar"
     [1] "Running test: cookbook-axes-basic-horizontal-line"
     [1] "Running test: cookbook-axes-dashed-red-line"
     [1] "Running test: cookbook-axes-bar-error-wide"
     [1] "Running test: cookbook-axes-bar-error-narrow"
     [1] "Running test: cookbook-axes-bar-error-diff"
     [1] "Running test: cookbook-axes-bar-dodge-color"
     [1] "Running test: cookbook-axes-bar-dodge-color-error"
     [1] "Running test: cookbook-axes-bar-dodge-color-err4"
     [1] "Running test: cookbook-axes-scatter-basic"
     [1] "Running test: cookbook-axes-scatter-hline"
     [1] "Running test: cookbook-axes-scatter-hline-vline"
     [1] "Running test: cookbook-axes-scatter-facet"
     [1] "Running test: cookbook-axes-scatter-facet-hline"
     [1] "Running test: cookbook-axes-scatter-facet-hline-vline"
     [1] "Running test: scatterplots-hollow"
     [1] "Running test: scatterplots-smooth-lm"
     [1] "Running test: scatterplots-smooth-lm-se-false"
     [1] "Running test: scatterplots-loess"
     [1] "Running test: scatterplots-color"
     [1] "Running test: scatterplots-scale-color-hue"
     [1] "Running test: scatterplots-full-range"
     [1] "Running test: scatterplots-shape"
     [1] "Running test: scatterplots-shape-manual"
     [1] "Running test: scatterplots-overlap"
     [1] "Running test: scatterplots-jitter"
     [1] "Running test: scatterplots-geom_jitter"
     [1] "Running test: cookbook-axes-single-abline"
     [1] "Running test: cookbook-axes-multiple-abline"
     [1] "Running test: area-simple"
     [1] "Running test: area-area-fillcolor"
     [1] "Running test: area-traces_order"
     [1] "Running test: bar-dodge"
     [1] "Running test: bar-stack"
     [1] "Running test: bar-identity"
     [1] "Running test: bar-dates"
     [1] "Running test: bar-nocolor"
     [1] "Running test: bar-color"
     [1] "Running test: bar-black-outline"
     [1] "Running test: bar-aes-fill-guides-color-none"
     [1] "Running test: bar-aes-colour-guides-fill-FALSE"
     [1] "Running test: bar-position-stack"
     [1] "Running test: bar-position-fill"
     [1] "Running test: bar-category-names"
     [1] "Running test: bar-coord-flip"
     [1] "Running test: boxplot"
     [1] "Running test: boxplot-datetime"
     [1] "Running test: boxplot-legends_for_fill"
     [1] "Running test: boxplot-fillcolor"
     [1] "Running test: col"
     [1] "Running test: contour"
     [1] "Running test: date-strings"
     [1] "Running test: date-class-Date"
     [1] "Running test: date-irregular-time-series"
     [1] "Running test: density-simple"
     [1] "Running test: density-fill"
     [1] "Running test: density-color"
     [1] "Running test: density-histogram"
     [1] "Running test: density-traces_order"
     [1] "Running test: density2d"
     [1] "Running test: density2dfill"
     [1] "Running test: errorbar-horizontal"
     [1] "Running test: errorbar"
     [1] "Running test: errorbar-unique-groups"
     [1] "Running test: barley"
     [1] "Running test: 3-panels"
     [1] "Running test: facet_wrap_free"
     [1] "Running test: facet_wrap_free_y"
     [1] "Running test: facet_wrap_free_x"
     [1] "Running test: facet_grid_free"
     [1] "Running test: facet_grid_free_y"
     [1] "Running test: facet_grid_free_x"
     [1] "Running test: facet_wrap_free_mult"
     [1] "Running test: facet_wrap"
     [1] "Running test: facet_wrap-labeller"
     [1] "Running test: facet_grid-labeller"
     [1] "Running test: facet_wrap-free_y"
     [1] "Running test: heatmap"
     [1] "Running test: heatmap-midpoint"
     [1] "Running test: heatmap-discrete"
     [1] "Running test: hex-basic"
     [1] "Running test: hex-bins"
     [1] "Running test: hex-binwidth"
     [1] "Running test: histogram-counts"
     [1] "Running test: histogram-density"
     [1] "Running test: histogram-fill"
     [1] "Running test: histogram-fixed-fill-color"
     [1] "Running test: histogram-density-binwidth"
     [1] "Running test: histogram-fill-factor"
     [1] "Running test: histogram-fill-factor-identity"
     [1] "Running test: histogram-fill-factor-dodge"
     [1] "Running test: histogram-fill-factor-facets"
     [1] "Running test: histogram-vline"
     [1] "Running test: histogram-dates"
     [1] "Running test: histogram-POSIXt-bins"
     [1] "Running test: histogram-Date-bins"
     [1] "Running test: hline"
     [1] "Running test: hline-multiple"
     [1] "Running test: hline-factor"
     [1] "Running test: jitter-basic"
     [1] "Running test: labels-ggtitle"
     [1] "Running test: labels-ylab"
     [1] "Running test: labels-angles"
     [1] "Running test: scatter_legend"
     [1] "Running test: legend-hide"
     [1] "Running test: legend-very-long-legend-items"
     [1] "Running test: legend-one-entry"
     [1] "Running test: legend-hide-legend"
     [1] "Running test: legend-many legend items"
     [1] "Running test: linetype-types"
     [1] "Running test: linetype-colors"
     -- 1. Failure: Translates both dates and datetimes (with dynamic ticks) correctl
     paste("date:", d$date) not equivalent to `dates1`.
     100/100 mismatches
     x[1]: "date: 2002-01-01"
     y[1]: "~date: 2002-01-01"
    
     x[2]: "date: 2002-02-01"
     y[2]: "~date: 2002-02-01"
    
     x[3]: "date: 2002-03-01"
     y[3]: "~date: 2002-03-01"
    
     x[4]: "date: 2002-04-01"
     y[4]: "~date: 2002-04-01"
    
     x[5]: "date: 2002-05-01"
     y[5]: "~date: 2002-05-01"
    
     -- 2. Failure: Translates both dates and datetimes (with dynamic ticks) correctl
     paste("date:", d2$date) not equivalent to `dates2`.
     100/100 mismatches
     x[1]: "date: 2002-01-01 01:00:00"
     y[1]: "~date: 2002-01-01 01:00:00"
    
     x[2]: "date: 2002-02-01 01:00:00"
     y[2]: "~date: 2002-02-01 01:00:00"
    
     x[3]: "date: 2002-03-01 01:00:00"
     y[3]: "~date: 2002-03-01 01:00:00"
    
     x[4]: "date: 2002-04-01 02:00:00"
     y[4]: "~date: 2002-04-01 02:00:00"
    
     x[5]: "date: 2002-05-01 02:00:00"
     y[5]: "~date: 2002-05-01 02:00:00"
    
     -- 3. Failure: geom_linerange() without a y aesthetic translates to a path (@tes
     unlist(l$data[[1]]$text) not equivalent to c(...).
     10/14 mismatches
     x[1]: "~x: 1<br />~ymin: 0"
     y[1]: "x: 1<br />ymin: 0"
    
     x[2]: "~x: 1<br />~ymax: 1"
     y[2]: "x: 1<br />ymax: 1"
    
     x[4]: "~x: 2<br />~ymin: 0"
     y[4]: "x: 2<br />ymin: 0"
    
     x[5]: "~x: 2<br />~ymax: 2"
     y[5]: "x: 2<br />ymax: 2"
    
     x[7]: "~x: 3<br />~ymin: 0"
     y[7]: "x: 3<br />ymin: 0"
    
     [1] "Running test: map-facet"
     [1] "Running test: path-lines-diff-from-paths"
     [1] "Running test: path-colors"
     [1] "Running test: path-colors2"
     [1] "Running test: path-colored-groups-stay-together"
     [1] "Running test: path-line-symbols"
     [1] "Running test: point-size-alpha"
     [1] "Running test: open-shapes"
     [1] "Running test: all-shapes"
     [1] "Running test: point-size-alpha2"
     [1] "Running test: polygon-black"
     -- 4. Failure: polygons with different hovertext must be different traces (@tes
     info$data[[1]]$x not equivalent to c(10, 11, 11, 10, 10).
     5/5 mismatches (average diff: 2)
     [1] 12 - 10 == 2
     [2] 13 - 11 == 2
     [3] 13 - 11 == 2
     [4] 12 - 10 == 2
     [5] 12 - 10 == 2
    
     -- 5. Failure: polygons with different hovertext must be different traces (@tes
     info$data[[2]]$x not equivalent to c(12, 13, 13, 12, 12).
     5/5 mismatches (average diff: 2)
     [1] 10 - 12 == -2
     [2] 11 - 13 == -2
     [3] 11 - 13 == -2
     [4] 10 - 12 == -2
     [5] 10 - 12 == -2
    
     -- 6. Failure: polygons with different hovertext must be different traces (@tes
     sapply(info$data, "[[", "text") not equivalent to c("lab: left", "lab: right").
     2/2 mismatches
     x[1]: "~lab: NA"
     y[1]: "lab: left"
    
     x[2]: "~lab: ~"
     y[2]: "lab: right"
    
     [1] "Running test: polygon-aes-color"
     [1] "Running test: polygon-aes-fill"
     [1] "Running test: polygon-color-aes-fill"
     [1] "Running test: polygon-color-fill-aes-linetype"
     [1] "Running test: polygon-color-fill-aes-size"
     [1] "Running test: polygons-canada-borders"
     -- 7. Failure: borders become one trace with NA (@test-ggplot-polygons.R#147) -
     length(info$data) not equivalent to 1.
     1/1 mismatches
     [1] 2 - 1 == 1
    
     -- 8. Failure: borders become one trace with NA (@test-ggplot-polygons.R#149) -
     nchar(info$data[[1]]$text) not equivalent to 0.
     1/1 mismatches
     [1] 10 - 0 == 10
    
     [1] "Running test: polygon-star-group"
     -- 9. Failure: geom_polygon(aes(group)) -> 1 trace (@test-ggplot-polygons.R#162)
     length(has.data) not equivalent to `n.traces`.
     1/1 mismatches
     [1] 2 - 1 == 1
    
     -- 10. Failure: geom_polygon(aes(group)) -> 1 trace (@test-ggplot-polygons.R#165
     tr$x not equivalent to c(0, -1, 2, -2, 1, 0, NA, 10, 9, 12, 8, 11, 10).
     Lengths differ: 6 is not 13
    
     -- 11. Failure: geom_polygon(aes(group)) -> 1 trace (@test-ggplot-polygons.R#168
     tr$y not equivalent to c(2, 0, 1, 1, 0, 2, NA, 2, 0, 1, 1, 0, 2).
     Lengths differ: 6 is not 13
    
     [1] "Running test: polygon-star-group-color"
     -- 12. Failure: geom_polygon(aes(group), color) -> 1 trace (@test-ggplot-polygon
     length(has.data) not equivalent to `n.traces`.
     1/1 mismatches
     [1] 2 - 1 == 1
    
     -- 13. Failure: geom_polygon(aes(group), color) -> 1 trace (@test-ggplot-polygon
     tr$x not equivalent to c(0, -1, 2, -2, 1, 0, NA, 10, 9, 12, 8, 11, 10).
     Lengths differ: 6 is not 13
    
     -- 14. Failure: geom_polygon(aes(group), color) -> 1 trace (@test-ggplot-polygon
     tr$y not equivalent to c(2, 0, 1, 1, 0, 2, NA, 2, 0, 1, 1, 0, 2).
     Lengths differ: 6 is not 13
    
     [1] "Running test: polygon-star-fill-color"
     [1] "Running test: rect-black"
     [1] "Running test: rect-black4"
     [1] "Running test: rect-color"
     [1] "Running test: rect-fill"
     [1] "Running test: rect-fill-color"
     [1] "Running test: rect-fill-hex-alpha"
     [1] "Running test: ribbon-alpha"
     [1] "Running test: ribbon-group"
     [1] "Running test: ribbon-colour"
     [1] "Running test: ribbon-fill"
     [1] "Running test: segment"
     [1] "Running test: segment-multiple-non-numeric"
     [1] "Running test: sf"
     [1] "Running test: sf-fill-text"
     [1] "Running test: sf-points"
     [1] "Running test: size-is-a-vector"
     [1] "Running test: size-global-scaling"
     [1] "Running test: smooth-basic"
     [1] "Running test: smooth-se-false"
     [1] "Running test: smooth-group"
     [1] "Running test: smooth-colour"
     [1] "Running test: smooth-fill2"
     [1] "Running test: smooth-facet"
     -- 15. Failure: Basic geom_spoke() (@test-ggplot-spoke.R#20) ------------------
     `angle` not equivalent to rep(paste0("angle: ", format(df$angle)), each = 2).
     200/200 mismatches
     x[1]: "~angle: 0.19319880"
     y[1]: "angle: 0.19319880"
    
     x[2]: "~angle: 0.19319880"
     y[2]: "angle: 0.19319880"
    
     x[3]: "~angle: 5.09237551"
     y[3]: "angle: 5.09237551"
    
     x[4]: "~angle: 5.09237551"
     y[4]: "angle: 5.09237551"
    
     x[5]: "~angle: 4.97430947"
     y[5]: "angle: 4.97430947"
    
     [1] "Running test: step-gg.hv"
     [1] "Running test: step-gg.vh"
     [1] "Running test: step-gg.hvh"
     [1] "Running test: step-gg.vhv"
     [1] "Running test: text"
     [1] "Running test: text-colour"
     [1] "Running test: theme-background"
     [1] "Running test: theme-ticks-and-grids"
     [1] "Running test: theme-ticks-default"
     [1] "Running test: theme-zeroline-default"
     [1] "Running test: theme-marker-default"
     [1] "Running test: theme-panel-border-1"
     [1] "Running test: theme-panel-border-2"
     [1] "Running test: ticks-boxes"
     [1] "Running test: ticks-boxes-facet-grid"
     [1] "Running test: ticks-boxes-scales-free"
     [1] "Running test: ticks-boxes-space-free"
     [1] "Running test: ticks-flip"
     [1] "Running test: ticks-flip-grid"
     [1] "Running test: ticks-flip-grid-free"
     [1] "Running test: ticks-limits-hide"
     [1] "Running test: ticks-limits-gap"
     [1] "Running test: ticks-breaks-nochange"
     [1] "Running test: ticks-breaks-more"
     [1] "Running test: ticks-breaks-less"
     [1] "Running test: ticks-scale-labels"
     [1] "Running test: ticks-hide-ticks-lines-labels"
     [1] "Running test: ticks-hide-ticks-labels"
     [1] "Running test: ticks-ycontinuous-ranges"
     [1] "Running test: ticks-ylim-ranges"
     [1] "Running test: ticks-yreverse-ranges"
     [1] "Running test: ticks-yreverse-limits-ranges"
     [1] "Running test: ticks-ylim-reversed-ranges"
     [1] "Running test: ticks-evenly-spaced-ticks"
     [1] "Running test: ticks-uneven"
     [1] "Running test: ticks-line-breaks"
     [1] "Running test: tooltip-datetime"
     -- 16. Failure: datetimes are displayed in tooltip properly (@test-ggplot-toolti
     paste0("time: ", test$time) not identical to sapply(txt, "[[", 1).
     100/100 mismatches
     x[1]: "time: 2016-03-12 16:33:56"
     y[1]: "~time: 2016-03-12 16:33:56"
    
     x[2]: "time: 2016-03-12 16:34:56"
     y[2]: "~time: 2016-03-12 16:34:56"
    
     x[3]: "time: 2016-03-12 16:35:56"
     y[3]: "~time: 2016-03-12 16:35:56"
    
     x[4]: "time: 2016-03-12 16:36:56"
     y[4]: "~time: 2016-03-12 16:36:56"
    
     x[5]: "time: 2016-03-12 16:37:56"
     y[5]: "~time: 2016-03-12 16:37:56"
    
     [1] "Running test: tooltip-date"
     -- 17. Failure: dates are displayed in tooltip properly (@test-ggplot-tooltip.R#
     paste0("time: ", test$time) not identical to sapply(txt, "[[", 1).
     100/100 mismatches
     x[1]: "time: 2016-03-12 00:00:01"
     y[1]: "~time: 2016-03-12 00:00:01"
    
     x[2]: "time: 2016-03-12 00:00:02"
     y[2]: "~time: 2016-03-12 00:00:02"
    
     x[3]: "time: 2016-03-12 00:00:03"
     y[3]: "~time: 2016-03-12 00:00:03"
    
     x[4]: "time: 2016-03-12 00:00:04"
     y[4]: "~time: 2016-03-12 00:00:04"
    
     x[5]: "time: 2016-03-12 00:00:05"
     y[5]: "~time: 2016-03-12 00:00:05"
    
     -- 18. Failure: tooltip argument respects ordering (@test-ggplot-tooltip.R#36)
     all(grepl("^density", sapply(txt, "[[", 1))) isn't true.
    
     -- 19. Error: tooltip argument respects ordering (@test-ggplot-tooltip.R#37) --
     subscript out of bounds
     1: expect_true(all(grepl("^mpg", sapply(txt, "[[", 2)))) at testthat/test-ggplot-tooltip.R:37
     2: quasi_label(enquo(object), label)
     3: eval_bare(get_expr(quo), get_env(quo))
     4: grepl("^mpg", sapply(txt, "[[", 2))
     5: sapply(txt, "[[", 2)
     6: lapply(X = X, FUN = FUN, ...)
    
     [1] "Running test: heatmap-discrete-tooltip"
     [1] "Running test: group-lines-hovertext"
     -- 20. Failure: group domain is included in hovertext (@test-ggplot-tooltip.R#69
     all(grepl(pattern, txt)) isn't true.
    
     -- 21. Failure: tooltip elements are not crossed (@test-ggplot-tooltip.R#91) --
     `y_equal_ten` not equivalent to `sample_2`.
     4 element mismatches
    
     [1] "Running test: hovertext-display"
     [1] "Running test: violin"
     [1] "Running test: violin-aes"
     [1] "Running test: vline"
     [1] "Running test: vline-multiple"
     [1] "Running test: ylim-one-trace"
     [1] "Running test: error-simple"
     [1] "Running test: error-simple-line"
     [1] "Running test: error-simple-line-point"
     [1] "Running test: error-simple-line-point-crazy"
     [1] "Running test: error-rect-alpha"
     [1] "Running test: plotly-color-scatterplot-color-factor"
     [1] "Running test: plotly-color-scatterplot-color-factor-custom"
     [1] "Running test: plotly-color-scatterplot-color-factor-custom2"
     [1] "Running test: plotly-color-bar-color-factor-custom"
     [1] "Running test: plotly-color-scatterplot-color-numeric"
     [1] "Running test: plotly-color-scatterplot-color-numeric-custom"
     [1] "Running test: plotly-color-scatterplot-scatter3d-axes"
     [1] "Running test: plotly-color-color-manual"
     [1] "Running test: plotly-colorbar"
     [1] "Running test: plotly-colorbar-expand"
     [1] "Running test: plotly-colorbar-restrict"
     [1] "Running test: plotly-colorbar-z-expand"
     [1] "Running test: plotly-colorbar-z-restrict"
     [1] "Running test: plotly-NAs"
     [1] "Running test: plotly-NAs-connect"
     [1] "Running test: plotly-NAs-within-group"
     [1] "Running test: plotly-NAs-within-color"
     [1] "Running test: plotly-NAs-within-color2"
     [1] "Running test: plotly-no-NAs-for-irrelevant-group"
     [1] "Running test: plotly-linetype-linetype"
     [1] "Running test: plotly-linetype-linetype2"
     [1] "Running test: plotly-linetype-linetype3"
     [1] "Running test: plotly-linetype-manual"
     [1] "Running test: plotly-linetype-ordering"
     [1] "Running test: plotly-linetype-alphabetical"
     [1] "Running test: plotly-subplot-simple"
     [1] "Running test: plotly-subplot-simple2"
     [1] "Running test: plotly-subplot-group"
     [1] "Running test: plotly-subplot-shareX"
     [1] "Running test: plotly-subplot-shareY"
     [1] "Running test: plotly-subplot-shareBoth"
     [1] "Running test: plotly-subplot-width-height"
     [1] "Running test: plotly-subplot-recursive"
     [1] "Running test: plotly-subplot-plot-list"
     [1] "Running test: plotly-subplot-ggmatrix"
     [1] "Running test: plotly-subplot-geo-cartesian"
     [1] "Running test: plotly-subplot-subplot-legendgroup"
     [1] "Running test: plotly-symbol-scatterplot-symbol"
     [1] "Running test: plotly-symbol-scatterplot-symbol2"
     [1] "Running test: plotly-symbol-pch"
     [1] "Running test: plotly-symbol-logical"
     [1] "Running test: plotly-symbol-symbol-manual"
     [1] "Running test: plotly-symbol-ordering"
     [1] "Running test: plotly-symbol-alphabetical"
     [1] "Running test: plotly-scatterplot"
     [1] "Running test: plotly-bar-inference"
     [1] "Running test: plotly-box-data-array"
     [1] "Running test: plotly-group-within-trace"
     [1] "Running test: plotly-alpha-blending"
     [1] "Running test: plotly-alpha-no-color"
     [1] "Running test: plotly-factor-axis"
     [1] "Running test: plotly-character-axis"
     [1] "Running test: plotly-histogram"
     [1] "Running test: plotly-histogram-vert"
     [1] "Running test: plotly-inherit-FALSE"
     [1] "Running test: plotly-time-series-summary"
     == testthat results ===========================================================
     OK: 1134 SKIPPED: 27 FAILED: 21
     1. Failure: Translates both dates and datetimes (with dynamic ticks) correctly (@test-ggplot-lines.R#85)
     2. Failure: Translates both dates and datetimes (with dynamic ticks) correctly (@test-ggplot-lines.R#86)
     3. Failure: geom_linerange() without a y aesthetic translates to a path (@test-ggplot-lines.R#111)
     4. Failure: polygons with different hovertext must be different traces (@test-ggplot-polygons.R#25)
     5. Failure: polygons with different hovertext must be different traces (@test-ggplot-polygons.R#26)
     6. Failure: polygons with different hovertext must be different traces (@test-ggplot-polygons.R#31)
     7. Failure: borders become one trace with NA (@test-ggplot-polygons.R#147)
     8. Failure: borders become one trace with NA (@test-ggplot-polygons.R#149)
     9. Failure: geom_polygon(aes(group)) -> 1 trace (@test-ggplot-polygons.R#162)
     1. ...
    
     Error: testthat unit tests failed
     Execution halted
Flavor: r-release-windows-ix86+x86_64

Version: 4.7.1
Check: tests
Result: ERROR
     Running 'testthat.R' [98s]
    Running the tests in 'tests/testthat.R' failed.
    Complete output:
     > library("testthat")
     > library("plotly")
     Loading required package: ggplot2
    
     Attaching package: 'plotly'
    
     The following object is masked from 'package:ggplot2':
    
     last_plot
    
     The following object is masked from 'package:stats':
    
     filter
    
     The following object is masked from 'package:graphics':
    
     layout
    
     > library("RSclient")
     >
     > # report any differences in plot (list) hashes if this is a Travis pull request
     > report_diffs <- grepl("^[0-9]+$", Sys.getenv("TRAVIS_PULL_REQUEST"))
     > # build a ggplot2 comparison table?
     > build_table <- Sys.getenv("PLOTLY_TABLE") == "TRUE"
     >
     > # stuff that should be done once (not everytime save_outputs() is called)
     > if (report_diffs || build_table) {
     + message("Spinning up an independent R session with plotly's master branch installed")
     + Rserve::Rserve(args = "--vanilla --RS-enable-remote")
     + conn <- RSconnect()
     + # ensure the seed is the same for randomized tests
     + set.seed(1)
     + RSeval(conn, "set.seed(1)")
     + # we don't make assumptions about ggplot2 versioning,
     + # but it is _strongly_ recommended to use the CRAN version (of ggplot2)
     + RSeval(conn, "devtools::install_github('ropensci/plotly')")
     + RSeval(conn, "library(plotly)")
     + if (report_diffs) {
     + # hash of the version being tested
     + this_hash <- substr(Sys.getenv("TRAVIS_COMMIT"), 1, 7)
     + # hash of version to compare with (master)
     + master_hash <- RSeval(conn, "packageDescription('plotly')$GithubSHA1")
     + master_hash <- substr(master_hash, 1, 7)
     + # plotly-test-table repo hosts the diff pages & keeps track of previous versions
     + table_dir <- normalizePath("../../plotly-test-table", mustWork = T)
     + # Make sure we have appropriate versions of plotlyjs
     + # (see plotly-test-table/template/template/index.html)
     + file.copy(
     + file.path("..", "inst", "htmlwidgets", "lib", "plotlyjs", "plotly-latest.min.js"),
     + file.path(table_dir, "template", "New.min.js"),
     + overwrite = TRUE
     + )
     + download.file(
     + "https://raw.githubusercontent.com/ropensci/plotly/master/inst/htmlwidgets/lib/plotlyjs/plotly-latest.min.js",
     + file.path(table_dir, "template", "Old.min.js"),
     + method = "curl"
     + )
     + # directory for placing test differences
     + this_dir <- file.path(table_dir, this_hash)
     + if (dir.exists(this_dir)) {
     + message("Tests were already run on this commit. Nuking the old results...")
     + unlink(this_dir, recursive = T)
     + }
     + master_dir <- file.path(table_dir, master_hash)
     + # csv file that tracks plot hashes
     + hash_file <- file.path(table_dir, "hashes.csv")
     + if (!file.exists(hash_file)) {
     + file.create(hash_file)
     + cat("commit,test,hash\n", file = hash_file, append = T)
     + }
     + hash_info <- utils::read.csv(hash_file)
     + master_info <- hash_info[hash_info$commit %in% master_hash, ]
     + }
     + }
     >
     > # Some tests make plot.ly HTTP requests and require a valid user account
     > # (see test-plotly-filename.R). For security reasons, these tests should be
     > # skipped on pull requests (the .travis.yml file uses encrypted credentials
     > # & encrypted environment vars cannot be accessed on pull request builds)
     > skip_if_not_master <- function() {
     + is_pr <- grepl("^[0-9]+$", Sys.getenv("TRAVIS_PULL_REQUEST"))
     + is_r_release <- Sys.getenv("TRAVIS_R_VERSION_STRING", "release") == "release"
     + if (!is_pr && is_r_release) return(invisible(TRUE))
     + skip("plot.ly API calls are only tested on the master build on r-release")
     + }
     >
     > # This function is called within testthat/test-*.R files.
     > # It takes a ggplot or plotly object as input, and it returns a figure
     > # object (aka the data behind the plot).
     > save_outputs <- function(gg, name) {
     + print(paste("Running test:", name))
     + p <- plotly_build(gg)$x[c("data", "layout")]
     + has_diff <- if (report_diffs) {
     + # save a hash of the R object
     + plot_hash <- digest::digest(p)
     + info <- paste(this_hash, name, plot_hash, sep = ",")
     + cat(paste(info, "\n"), file = hash_file, append = T)
     + test_info <- master_info[master_info$test %in% name, ]
     + # is the plot hash different from master?
     + !isTRUE(plot_hash == test_info$hash)
     + } else FALSE
     + if (has_diff || build_table) {
     + RSassign(conn, gg)
     + pm <- RSeval(conn, "tryCatch(plotly::plotly_build(gg)$x[c('data', 'layout')], error = function(e) e$message)")
     + if (build_table) {
     + # save pngs of ggplot
     + filename <- paste0(gsub("\\s+", "-", name), ".png")
     + ggFile <- paste("ggplot", filename, sep = "-")
     + res <- tryCatch(ggsave(ggFile, gg),
     + error = function(e) {
     + err <- qplot() +
     + annotate('text', label = paste('Error:', e$message),
     + x = 1, y = 1, color = 'red')
     + ggsave(ggFile, err, width = 3, height = 2, units = 'in')
     + })
     + img <- function(x, f) {
     + tryCatch(plotly_IMAGE(x, out_file = f, width = 300, height = 400),
     + error = function(e) {
     + err <- qplot() +
     + annotate('text', label = paste('Error:', e$message),
     + x = 1, y = 1, color = 'red')
     + # TODO: convert pixels to inches?
     + ggsave(plotlyFile, err, width = 3, height = 2, units = 'in')
     + })
     + }
     + # save _this_ plotly version
     + plotlyFile <- paste("plotly", this_hash, filename, sep = "-")
     + res <- img(p, plotlyFile)
     + # save _master_ plotly version
     + plotlyFile <- paste("plotly", "master", filename, sep = "-")
     + RSassign(conn, plotlyFile, "plotlyFile")
     + RSassign(conn, img, "img")
     + res <- RSeval(conn, "img(p, plotlyFile)")
     + }
     + # it could be that the hash didn't exist, so make sure they're different
     + # before build a diff page
     + if (plot_hash != digest::digest(pm)) {
     + test_dir <- file.path(this_dir, gsub("\\s+", "-", name))
     + if (dir.exists(test_dir)) stop(shQuote(name), " has already been used to save_outputs() in another test.")
     + dir.create(test_dir, recursive = T)
     + # copy over diffing template
     + file.copy(
     + dir(file.path(table_dir, "template", "template"), full.names = TRUE), test_dir
     + )
     + # overwrite the default JSON
     + writeLines(
     + paste("New =", plotly:::to_JSON(p)),
     + file.path(test_dir, "New.json")
     + )
     + writeLines(
     + paste("Old =", plotly:::to_JSON(pm)),
     + file.path(test_dir, "Old.json")
     + )
     + }
     + }
     + p
     + }
     >
     > # use me just like testthat::test_check()
     > test_run <- function(...) {
     + # shut down the other R session on exit
     + if (report_diffs || build_table) {
     + on.exit(RSshutdown(conn))
     + on.exit(RSclose(conn), add = TRUE)
     + }
     + test_check(...)
     + }
     >
     > if (packageVersion("ggplot2") > "2.2.1") {
     + test_run("plotly")
     + }
     [1] "Running test: cookbook-axes-flevels"
     [1] "Running test: cookbook-axes-ylim.hide"
     [1] "Running test: cookbook-axes-scale.hide"
     [1] "Running test: cookbook-axes-coord-ylim"
     [1] "Running test: cookbook-axes-linear-axes"
     [1] "Running test: cookbook-axes-log2-scale"
     [1] "Running test: cookbook-axes-log2-coord"
     [1] "Running test: cookbook-axes-log2-labels"
     [1] "Running test: cookbook-axes-scale_y_log10"
     [1] "Running test: cookbook-axes-scale_y_log10-labels"
     [1] "Running test: cookbook-axes-no-x-title"
     [1] "Running test: cookbook-axes-scale-name"
     [1] "Running test: cookbook-axes-fonts"
     [1] "Running test: cookbook-axes-label-funs"
     [1] "Running test: cookbook-axes-custom-formatter"
     [1] "Running test: cookbook-axes-blank-minor-major"
     [1] "Running test: cookbook-axes-blank-minor"
     [1] "Running test: cookbook-axes-blank-x"
     [1] "Running test: cookbook-axes-blank-y"
     [1] "Running test: cookbook-axes-basic-bar"
     [1] "Running test: cookbook-axes-basic-horizontal-line"
     [1] "Running test: cookbook-axes-dashed-red-line"
     [1] "Running test: cookbook-axes-bar-error-wide"
     [1] "Running test: cookbook-axes-bar-error-narrow"
     [1] "Running test: cookbook-axes-bar-error-diff"
     [1] "Running test: cookbook-axes-bar-dodge-color"
     [1] "Running test: cookbook-axes-bar-dodge-color-error"
     [1] "Running test: cookbook-axes-bar-dodge-color-err4"
     [1] "Running test: cookbook-axes-scatter-basic"
     [1] "Running test: cookbook-axes-scatter-hline"
     [1] "Running test: cookbook-axes-scatter-hline-vline"
     [1] "Running test: cookbook-axes-scatter-facet"
     [1] "Running test: cookbook-axes-scatter-facet-hline"
     [1] "Running test: cookbook-axes-scatter-facet-hline-vline"
     [1] "Running test: scatterplots-hollow"
     [1] "Running test: scatterplots-smooth-lm"
     [1] "Running test: scatterplots-smooth-lm-se-false"
     [1] "Running test: scatterplots-loess"
     [1] "Running test: scatterplots-color"
     [1] "Running test: scatterplots-scale-color-hue"
     [1] "Running test: scatterplots-full-range"
     [1] "Running test: scatterplots-shape"
     [1] "Running test: scatterplots-shape-manual"
     [1] "Running test: scatterplots-overlap"
     [1] "Running test: scatterplots-jitter"
     [1] "Running test: scatterplots-geom_jitter"
     [1] "Running test: cookbook-axes-single-abline"
     [1] "Running test: cookbook-axes-multiple-abline"
     [1] "Running test: area-simple"
     [1] "Running test: area-area-fillcolor"
     [1] "Running test: area-traces_order"
     [1] "Running test: bar-dodge"
     [1] "Running test: bar-stack"
     [1] "Running test: bar-identity"
     [1] "Running test: bar-dates"
     [1] "Running test: bar-nocolor"
     [1] "Running test: bar-color"
     [1] "Running test: bar-black-outline"
     [1] "Running test: bar-aes-fill-guides-color-none"
     [1] "Running test: bar-aes-colour-guides-fill-FALSE"
     [1] "Running test: bar-position-stack"
     [1] "Running test: bar-position-fill"
     [1] "Running test: bar-category-names"
     [1] "Running test: bar-coord-flip"
     [1] "Running test: boxplot"
     [1] "Running test: boxplot-datetime"
     [1] "Running test: boxplot-legends_for_fill"
     [1] "Running test: boxplot-fillcolor"
     [1] "Running test: col"
     [1] "Running test: contour"
     [1] "Running test: date-strings"
     [1] "Running test: date-class-Date"
     [1] "Running test: date-irregular-time-series"
     [1] "Running test: density-simple"
     [1] "Running test: density-fill"
     [1] "Running test: density-color"
     [1] "Running test: density-histogram"
     [1] "Running test: density-traces_order"
     [1] "Running test: density2d"
     [1] "Running test: density2dfill"
     [1] "Running test: errorbar-horizontal"
     [1] "Running test: errorbar"
     [1] "Running test: errorbar-unique-groups"
     [1] "Running test: barley"
     [1] "Running test: 3-panels"
     [1] "Running test: facet_wrap_free"
     [1] "Running test: facet_wrap_free_y"
     [1] "Running test: facet_wrap_free_x"
     [1] "Running test: facet_grid_free"
     [1] "Running test: facet_grid_free_y"
     [1] "Running test: facet_grid_free_x"
     [1] "Running test: facet_wrap_free_mult"
     [1] "Running test: facet_wrap"
     [1] "Running test: facet_wrap-labeller"
     [1] "Running test: facet_grid-labeller"
     [1] "Running test: facet_wrap-free_y"
     [1] "Running test: heatmap"
     [1] "Running test: heatmap-midpoint"
     [1] "Running test: heatmap-discrete"
     [1] "Running test: hex-basic"
     [1] "Running test: hex-bins"
     [1] "Running test: hex-binwidth"
     [1] "Running test: histogram-counts"
     [1] "Running test: histogram-density"
     [1] "Running test: histogram-fill"
     [1] "Running test: histogram-fixed-fill-color"
     [1] "Running test: histogram-density-binwidth"
     [1] "Running test: histogram-fill-factor"
     [1] "Running test: histogram-fill-factor-identity"
     [1] "Running test: histogram-fill-factor-dodge"
     [1] "Running test: histogram-fill-factor-facets"
     [1] "Running test: histogram-vline"
     [1] "Running test: histogram-dates"
     [1] "Running test: histogram-POSIXt-bins"
     [1] "Running test: histogram-Date-bins"
     [1] "Running test: hline"
     [1] "Running test: hline-multiple"
     [1] "Running test: hline-factor"
     [1] "Running test: jitter-basic"
     [1] "Running test: labels-ggtitle"
     [1] "Running test: labels-ylab"
     [1] "Running test: labels-angles"
     [1] "Running test: scatter_legend"
     [1] "Running test: legend-hide"
     [1] "Running test: legend-very-long-legend-items"
     [1] "Running test: legend-one-entry"
     [1] "Running test: legend-hide-legend"
     [1] "Running test: legend-many legend items"
     [1] "Running test: linetype-types"
     [1] "Running test: linetype-colors"
     -- 1. Failure: Translates both dates and datetimes (with dynamic ticks) correctl
     paste("date:", d$date) not equivalent to `dates1`.
     100/100 mismatches
     x[1]: "date: 2002-01-01"
     y[1]: "~date: 2002-01-01"
    
     x[2]: "date: 2002-02-01"
     y[2]: "~date: 2002-02-01"
    
     x[3]: "date: 2002-03-01"
     y[3]: "~date: 2002-03-01"
    
     x[4]: "date: 2002-04-01"
     y[4]: "~date: 2002-04-01"
    
     x[5]: "date: 2002-05-01"
     y[5]: "~date: 2002-05-01"
    
     -- 2. Failure: Translates both dates and datetimes (with dynamic ticks) correctl
     paste("date:", d2$date) not equivalent to `dates2`.
     100/100 mismatches
     x[1]: "date: 2002-01-01 01:00:00"
     y[1]: "~date: 2002-01-01 01:00:00"
    
     x[2]: "date: 2002-02-01 01:00:00"
     y[2]: "~date: 2002-02-01 01:00:00"
    
     x[3]: "date: 2002-03-01 01:00:00"
     y[3]: "~date: 2002-03-01 01:00:00"
    
     x[4]: "date: 2002-04-01 02:00:00"
     y[4]: "~date: 2002-04-01 02:00:00"
    
     x[5]: "date: 2002-05-01 02:00:00"
     y[5]: "~date: 2002-05-01 02:00:00"
    
     -- 3. Failure: geom_linerange() without a y aesthetic translates to a path (@tes
     unlist(l$data[[1]]$text) not equivalent to c(...).
     10/14 mismatches
     x[1]: "~x: 1<br />~ymin: 0"
     y[1]: "x: 1<br />ymin: 0"
    
     x[2]: "~x: 1<br />~ymax: 1"
     y[2]: "x: 1<br />ymax: 1"
    
     x[4]: "~x: 2<br />~ymin: 0"
     y[4]: "x: 2<br />ymin: 0"
    
     x[5]: "~x: 2<br />~ymax: 2"
     y[5]: "x: 2<br />ymax: 2"
    
     x[7]: "~x: 3<br />~ymin: 0"
     y[7]: "x: 3<br />ymin: 0"
    
     [1] "Running test: map-facet"
     [1] "Running test: path-lines-diff-from-paths"
     [1] "Running test: path-colors"
     [1] "Running test: path-colors2"
     [1] "Running test: path-colored-groups-stay-together"
     [1] "Running test: path-line-symbols"
     [1] "Running test: point-size-alpha"
     [1] "Running test: open-shapes"
     [1] "Running test: all-shapes"
     [1] "Running test: point-size-alpha2"
     [1] "Running test: polygon-black"
     -- 4. Failure: polygons with different hovertext must be different traces (@tes
     info$data[[1]]$x not equivalent to c(10, 11, 11, 10, 10).
     5/5 mismatches (average diff: 2)
     [1] 12 - 10 == 2
     [2] 13 - 11 == 2
     [3] 13 - 11 == 2
     [4] 12 - 10 == 2
     [5] 12 - 10 == 2
    
     -- 5. Failure: polygons with different hovertext must be different traces (@tes
     info$data[[2]]$x not equivalent to c(12, 13, 13, 12, 12).
     5/5 mismatches (average diff: 2)
     [1] 10 - 12 == -2
     [2] 11 - 13 == -2
     [3] 11 - 13 == -2
     [4] 10 - 12 == -2
     [5] 10 - 12 == -2
    
     -- 6. Failure: polygons with different hovertext must be different traces (@tes
     sapply(info$data, "[[", "text") not equivalent to c("lab: left", "lab: right").
     2/2 mismatches
     x[1]: "~lab: NA"
     y[1]: "lab: left"
    
     x[2]: "~lab: ~"
     y[2]: "lab: right"
    
     [1] "Running test: polygon-aes-color"
     [1] "Running test: polygon-aes-fill"
     [1] "Running test: polygon-color-aes-fill"
     [1] "Running test: polygon-color-fill-aes-linetype"
     [1] "Running test: polygon-color-fill-aes-size"
     [1] "Running test: polygons-canada-borders"
     -- 7. Failure: borders become one trace with NA (@test-ggplot-polygons.R#147) -
     length(info$data) not equivalent to 1.
     1/1 mismatches
     [1] 2 - 1 == 1
    
     -- 8. Failure: borders become one trace with NA (@test-ggplot-polygons.R#149) -
     nchar(info$data[[1]]$text) not equivalent to 0.
     1/1 mismatches
     [1] 10 - 0 == 10
    
     [1] "Running test: polygon-star-group"
     -- 9. Failure: geom_polygon(aes(group)) -> 1 trace (@test-ggplot-polygons.R#162)
     length(has.data) not equivalent to `n.traces`.
     1/1 mismatches
     [1] 2 - 1 == 1
    
     -- 10. Failure: geom_polygon(aes(group)) -> 1 trace (@test-ggplot-polygons.R#165
     tr$x not equivalent to c(0, -1, 2, -2, 1, 0, NA, 10, 9, 12, 8, 11, 10).
     Lengths differ: 6 is not 13
    
     -- 11. Failure: geom_polygon(aes(group)) -> 1 trace (@test-ggplot-polygons.R#168
     tr$y not equivalent to c(2, 0, 1, 1, 0, 2, NA, 2, 0, 1, 1, 0, 2).
     Lengths differ: 6 is not 13
    
     [1] "Running test: polygon-star-group-color"
     -- 12. Failure: geom_polygon(aes(group), color) -> 1 trace (@test-ggplot-polygon
     length(has.data) not equivalent to `n.traces`.
     1/1 mismatches
     [1] 2 - 1 == 1
    
     -- 13. Failure: geom_polygon(aes(group), color) -> 1 trace (@test-ggplot-polygon
     tr$x not equivalent to c(0, -1, 2, -2, 1, 0, NA, 10, 9, 12, 8, 11, 10).
     Lengths differ: 6 is not 13
    
     -- 14. Failure: geom_polygon(aes(group), color) -> 1 trace (@test-ggplot-polygon
     tr$y not equivalent to c(2, 0, 1, 1, 0, 2, NA, 2, 0, 1, 1, 0, 2).
     Lengths differ: 6 is not 13
    
     [1] "Running test: polygon-star-fill-color"
     [1] "Running test: rect-black"
     [1] "Running test: rect-black4"
     [1] "Running test: rect-color"
     [1] "Running test: rect-fill"
     [1] "Running test: rect-fill-color"
     [1] "Running test: rect-fill-hex-alpha"
     [1] "Running test: ribbon-alpha"
     [1] "Running test: ribbon-group"
     [1] "Running test: ribbon-colour"
     [1] "Running test: ribbon-fill"
     [1] "Running test: segment"
     [1] "Running test: segment-multiple-non-numeric"
     [1] "Running test: sf"
     [1] "Running test: sf-fill-text"
     [1] "Running test: sf-points"
     [1] "Running test: size-is-a-vector"
     [1] "Running test: size-global-scaling"
     [1] "Running test: smooth-basic"
     [1] "Running test: smooth-se-false"
     [1] "Running test: smooth-group"
     [1] "Running test: smooth-colour"
     [1] "Running test: smooth-fill2"
     [1] "Running test: smooth-facet"
     -- 15. Failure: Basic geom_spoke() (@test-ggplot-spoke.R#20) ------------------
     `angle` not equivalent to rep(paste0("angle: ", format(df$angle)), each = 2).
     200/200 mismatches
     x[1]: "~angle: 3.50767423"
     y[1]: "angle: 3.50767423"
    
     x[2]: "~angle: 3.50767423"
     y[2]: "angle: 3.50767423"
    
     x[3]: "~angle: 3.51968099"
     y[3]: "angle: 3.51968099"
    
     x[4]: "~angle: 3.51968099"
     y[4]: "angle: 3.51968099"
    
     x[5]: "~angle: 3.69530098"
     y[5]: "angle: 3.69530098"
    
     [1] "Running test: step-gg.hv"
     [1] "Running test: step-gg.vh"
     [1] "Running test: step-gg.hvh"
     [1] "Running test: step-gg.vhv"
     [1] "Running test: text"
     [1] "Running test: text-colour"
     [1] "Running test: theme-background"
     [1] "Running test: theme-ticks-and-grids"
     [1] "Running test: theme-ticks-default"
     [1] "Running test: theme-zeroline-default"
     [1] "Running test: theme-marker-default"
     [1] "Running test: theme-panel-border-1"
     [1] "Running test: theme-panel-border-2"
     [1] "Running test: ticks-boxes"
     [1] "Running test: ticks-boxes-facet-grid"
     [1] "Running test: ticks-boxes-scales-free"
     [1] "Running test: ticks-boxes-space-free"
     [1] "Running test: ticks-flip"
     [1] "Running test: ticks-flip-grid"
     [1] "Running test: ticks-flip-grid-free"
     [1] "Running test: ticks-limits-hide"
     [1] "Running test: ticks-limits-gap"
     [1] "Running test: ticks-breaks-nochange"
     [1] "Running test: ticks-breaks-more"
     [1] "Running test: ticks-breaks-less"
     [1] "Running test: ticks-scale-labels"
     [1] "Running test: ticks-hide-ticks-lines-labels"
     [1] "Running test: ticks-hide-ticks-labels"
     [1] "Running test: ticks-ycontinuous-ranges"
     [1] "Running test: ticks-ylim-ranges"
     [1] "Running test: ticks-yreverse-ranges"
     [1] "Running test: ticks-yreverse-limits-ranges"
     [1] "Running test: ticks-ylim-reversed-ranges"
     [1] "Running test: ticks-evenly-spaced-ticks"
     [1] "Running test: ticks-uneven"
     [1] "Running test: ticks-line-breaks"
     [1] "Running test: tooltip-datetime"
     -- 16. Failure: datetimes are displayed in tooltip properly (@test-ggplot-toolti
     paste0("time: ", test$time) not identical to sapply(txt, "[[", 1).
     100/100 mismatches
     x[1]: "time: 2016-03-12 16:33:56"
     y[1]: "~time: 2016-03-12 16:33:56"
    
     x[2]: "time: 2016-03-12 16:34:56"
     y[2]: "~time: 2016-03-12 16:34:56"
    
     x[3]: "time: 2016-03-12 16:35:56"
     y[3]: "~time: 2016-03-12 16:35:56"
    
     x[4]: "time: 2016-03-12 16:36:56"
     y[4]: "~time: 2016-03-12 16:36:56"
    
     x[5]: "time: 2016-03-12 16:37:56"
     y[5]: "~time: 2016-03-12 16:37:56"
    
     [1] "Running test: tooltip-date"
     -- 17. Failure: dates are displayed in tooltip properly (@test-ggplot-tooltip.R#
     paste0("time: ", test$time) not identical to sapply(txt, "[[", 1).
     100/100 mismatches
     x[1]: "time: 2016-03-12 00:00:01"
     y[1]: "~time: 2016-03-12 00:00:01"
    
     x[2]: "time: 2016-03-12 00:00:02"
     y[2]: "~time: 2016-03-12 00:00:02"
    
     x[3]: "time: 2016-03-12 00:00:03"
     y[3]: "~time: 2016-03-12 00:00:03"
    
     x[4]: "time: 2016-03-12 00:00:04"
     y[4]: "~time: 2016-03-12 00:00:04"
    
     x[5]: "time: 2016-03-12 00:00:05"
     y[5]: "~time: 2016-03-12 00:00:05"
    
     -- 18. Failure: tooltip argument respects ordering (@test-ggplot-tooltip.R#36)
     all(grepl("^density", sapply(txt, "[[", 1))) isn't true.
    
     -- 19. Error: tooltip argument respects ordering (@test-ggplot-tooltip.R#37) --
     subscript out of bounds
     1: expect_true(all(grepl("^mpg", sapply(txt, "[[", 2)))) at testthat/test-ggplot-tooltip.R:37
     2: quasi_label(enquo(object), label)
     3: eval_bare(get_expr(quo), get_env(quo))
     4: grepl("^mpg", sapply(txt, "[[", 2))
     5: sapply(txt, "[[", 2)
     6: lapply(X = X, FUN = FUN, ...)
    
     [1] "Running test: heatmap-discrete-tooltip"
     [1] "Running test: group-lines-hovertext"
     -- 20. Failure: group domain is included in hovertext (@test-ggplot-tooltip.R#69
     all(grepl(pattern, txt)) isn't true.
    
     -- 21. Failure: tooltip elements are not crossed (@test-ggplot-tooltip.R#91) --
     `y_equal_ten` not equivalent to `sample_2`.
     4 element mismatches
    
     [1] "Running test: hovertext-display"
     [1] "Running test: violin"
     [1] "Running test: violin-aes"
     [1] "Running test: vline"
     [1] "Running test: vline-multiple"
     [1] "Running test: ylim-one-trace"
     [1] "Running test: error-simple"
     [1] "Running test: error-simple-line"
     [1] "Running test: error-simple-line-point"
     [1] "Running test: error-simple-line-point-crazy"
     [1] "Running test: error-rect-alpha"
     [1] "Running test: plotly-color-scatterplot-color-factor"
     [1] "Running test: plotly-color-scatterplot-color-factor-custom"
     [1] "Running test: plotly-color-scatterplot-color-factor-custom2"
     [1] "Running test: plotly-color-bar-color-factor-custom"
     [1] "Running test: plotly-color-scatterplot-color-numeric"
     [1] "Running test: plotly-color-scatterplot-color-numeric-custom"
     [1] "Running test: plotly-color-scatterplot-scatter3d-axes"
     [1] "Running test: plotly-color-color-manual"
     [1] "Running test: plotly-colorbar"
     [1] "Running test: plotly-colorbar-expand"
     [1] "Running test: plotly-colorbar-restrict"
     [1] "Running test: plotly-colorbar-z-expand"
     [1] "Running test: plotly-colorbar-z-restrict"
     [1] "Running test: plotly-NAs"
     [1] "Running test: plotly-NAs-connect"
     [1] "Running test: plotly-NAs-within-group"
     [1] "Running test: plotly-NAs-within-color"
     [1] "Running test: plotly-NAs-within-color2"
     [1] "Running test: plotly-no-NAs-for-irrelevant-group"
     [1] "Running test: plotly-linetype-linetype"
     [1] "Running test: plotly-linetype-linetype2"
     [1] "Running test: plotly-linetype-linetype3"
     [1] "Running test: plotly-linetype-manual"
     [1] "Running test: plotly-linetype-ordering"
     [1] "Running test: plotly-linetype-alphabetical"
     [1] "Running test: plotly-subplot-simple"
     [1] "Running test: plotly-subplot-simple2"
     [1] "Running test: plotly-subplot-group"
     [1] "Running test: plotly-subplot-shareX"
     [1] "Running test: plotly-subplot-shareY"
     [1] "Running test: plotly-subplot-shareBoth"
     [1] "Running test: plotly-subplot-width-height"
     [1] "Running test: plotly-subplot-recursive"
     [1] "Running test: plotly-subplot-plot-list"
     [1] "Running test: plotly-subplot-ggmatrix"
     [1] "Running test: plotly-subplot-geo-cartesian"
     [1] "Running test: plotly-subplot-subplot-legendgroup"
     [1] "Running test: plotly-symbol-scatterplot-symbol"
     [1] "Running test: plotly-symbol-scatterplot-symbol2"
     [1] "Running test: plotly-symbol-pch"
     [1] "Running test: plotly-symbol-logical"
     [1] "Running test: plotly-symbol-symbol-manual"
     [1] "Running test: plotly-symbol-ordering"
     [1] "Running test: plotly-symbol-alphabetical"
     [1] "Running test: plotly-scatterplot"
     [1] "Running test: plotly-bar-inference"
     [1] "Running test: plotly-box-data-array"
     [1] "Running test: plotly-group-within-trace"
     [1] "Running test: plotly-alpha-blending"
     [1] "Running test: plotly-alpha-no-color"
     [1] "Running test: plotly-factor-axis"
     [1] "Running test: plotly-character-axis"
     [1] "Running test: plotly-histogram"
     [1] "Running test: plotly-histogram-vert"
     [1] "Running test: plotly-inherit-FALSE"
     [1] "Running test: plotly-time-series-summary"
     == testthat results ===========================================================
     OK: 1135 SKIPPED: 27 FAILED: 21
     1. Failure: Translates both dates and datetimes (with dynamic ticks) correctly (@test-ggplot-lines.R#85)
     2. Failure: Translates both dates and datetimes (with dynamic ticks) correctly (@test-ggplot-lines.R#86)
     3. Failure: geom_linerange() without a y aesthetic translates to a path (@test-ggplot-lines.R#111)
     4. Failure: polygons with different hovertext must be different traces (@test-ggplot-polygons.R#25)
     5. Failure: polygons with different hovertext must be different traces (@test-ggplot-polygons.R#26)
     6. Failure: polygons with different hovertext must be different traces (@test-ggplot-polygons.R#31)
     7. Failure: borders become one trace with NA (@test-ggplot-polygons.R#147)
     8. Failure: borders become one trace with NA (@test-ggplot-polygons.R#149)
     9. Failure: geom_polygon(aes(group)) -> 1 trace (@test-ggplot-polygons.R#162)
     1. ...
    
     Error: testthat unit tests failed
     Execution halted
Flavor: r-oldrel-windows-ix86+x86_64