wasm-bindgen/tests/all/js_globals/Date.rs
Alex Crichton efa4a2b8fa
Speed up Travis by running Webpack in fewer tests (#381)
* Reorganize Travis configuration

* Add a `JOB` env var descriptor to all matrix entries. Not used anywhere but is
  useful when viewing the whole build on Travis's web interface.
* Reorganize where builds are located, moving slow builds first and fast ones
  last.
* Change checking the CLI builds from `cargo build` to `cargo check`
* Use YAML references to reduce some duplication

* Print some more timing statistics for each test

* Extract `Project` helper in tests to a module

This'll help make it a bit more extensible over time. At the same time the
methods are also slightly reorganized to read more clearly from top to bottom.

* Migrate all tests away from Webpack

Wepback can take a significant amount of time to execute and when it's
multiplied by hundreds of tests that adds up really quickly! After investigating
Node's `--experimental-modules` option it looks like it's suitable for our use
so this switches all tests to using JS files (moving away from TypeScript as
well) with `--experimental-modules` with Node.

Tests will be selectively re-enabled with webpack and node.js specific output
(that doesn't require `--experimental-modules`), coming in later commits.

* Restore the node test for node.js output

Ensures it's workable as-is

* Only generate typescript with webpack

* Only read wasm files for webpack

* Skip package.json/node_modules for now

* Only generate webpack config if needed

* Start a dedicated test module for typescript

Will hopefully verify the generated Typescript compiles OK.

* Remove unneeded `node` method

* Fixup some rebase conflicts

* Don't run asmjs example on travis

* Fixup generator tests

* Attempt to fix windows

* Comment windows fix

* More test fixes

* More exclusions

* More test fixes

* Relax eslint regex

Catch mjs modules as well

* Fix eslint

* Speed up travis on examples slightly
2018-07-04 22:37:09 -05:00

487 lines
12 KiB
Rust

#![allow(non_snake_case)]
use super::project;
#[test]
fn get_day() {
project()
.file(
"src/lib.rs",
r#"
#![feature(proc_macro, wasm_custom_section)]
extern crate wasm_bindgen;
use wasm_bindgen::prelude::*;
use wasm_bindgen::js::{Date, Number};
#[wasm_bindgen]
pub fn get_day(this: &Date) -> Number {
this.get_day()
}
"#,
)
.file(
"test.js",
r#"
import * as assert from "assert";
import * as wasm from "./out";
export function test() {
let date = new Date('August 19, 1975 23:15:30');
assert.equal(wasm.get_day(date), 2);
}
"#,
)
.test()
}
#[test]
fn get_full_year() {
project()
.file(
"src/lib.rs",
r#"
#![feature(proc_macro, wasm_custom_section)]
extern crate wasm_bindgen;
use wasm_bindgen::prelude::*;
use wasm_bindgen::js::{Date, Number};
#[wasm_bindgen]
pub fn get_full_year(this: &Date) -> Number {
this.get_full_year()
}
"#,
)
.file(
"test.js",
r#"
import * as assert from "assert";
import * as wasm from "./out";
export function test() {
let date = new Date('July 20, 1969 00:20:18');
let abbrDate = new Date('Thu, 06 Sep 12 00:00:00');
assert.equal(wasm.get_full_year(date), 1969);
assert.equal(wasm.get_full_year(abbrDate), 2012);
}
"#,
)
.test()
}
#[test]
fn new() {
project()
.file(
"src/lib.rs",
r#"
#![feature(proc_macro, wasm_custom_section)]
extern crate wasm_bindgen;
use wasm_bindgen::prelude::*;
use wasm_bindgen::js::Date;
#[wasm_bindgen]
pub fn new_date() -> Date {
Date::new()
}
"#,
)
.file(
"test.js",
r#"
import * as assert from "assert";
import * as wasm from "./out";
export function test() {
assert.equal(typeof wasm.new_date(), "object");
}
"#,
)
.test()
}
#[test]
fn now() {
project()
.file("src/lib.rs", r#"
#![feature(proc_macro, wasm_custom_section)]
extern crate wasm_bindgen;
use wasm_bindgen::prelude::*;
use wasm_bindgen::js::Date;
#[wasm_bindgen]
pub fn now() -> f64 {
Date::now()
}
"#)
.file("test.js", r#"
import * as assert from "assert";
import * as wasm from "./out";
export function test() {
assert.equal(typeof wasm.now(), "number");
}
"#)
.test()
}
#[test]
fn to_date_string() {
project()
.file(
"src/lib.rs",
r#"
#![feature(proc_macro, wasm_custom_section)]
extern crate wasm_bindgen;
use wasm_bindgen::prelude::*;
use wasm_bindgen::js::{Date, JsString};
#[wasm_bindgen]
pub fn to_date_string(this: &Date) -> JsString {
this.to_date_string()
}
"#,
)
.file(
"test.js",
r#"
import * as assert from "assert";
import * as wasm from "./out";
export function test() {
let date = new Date(1993, 6, 28, 14, 39, 7);
assert.equal(wasm.to_date_string(date), 'Wed Jul 28 1993');
}
"#,
)
.test()
}
#[test]
fn to_iso_string() {
project()
.file(
"src/lib.rs",
r#"
#![feature(proc_macro, wasm_custom_section)]
extern crate wasm_bindgen;
use wasm_bindgen::prelude::*;
use wasm_bindgen::js::{Date, JsString};
#[wasm_bindgen]
pub fn to_iso_string(this: &Date) -> JsString {
this.to_iso_string()
}
"#,
)
.file(
"test.js",
r#"
import * as assert from "assert";
import * as wasm from "./out";
export function test() {
let date = new Date('05 October 2011 14:48 UTC');
assert.equal(wasm.to_iso_string(date), '2011-10-05T14:48:00.000Z');
}
"#,
)
.test()
}
#[test]
fn to_json() {
project()
.file(
"src/lib.rs",
r#"
#![feature(proc_macro, wasm_custom_section)]
extern crate wasm_bindgen;
use wasm_bindgen::prelude::*;
use wasm_bindgen::js::{Date, JsString};
#[wasm_bindgen]
pub fn to_json(this: &Date) -> JsString {
this.to_json()
}
"#,
)
.file(
"test.js",
r#"
import * as assert from "assert";
import * as wasm from "./out";
export function test() {
let date = new Date('August 19, 1975 23:15:30 UTC');
assert.equal(wasm.to_json(date), '1975-08-19T23:15:30.000Z');
}
"#,
)
.test()
}
#[test]
fn to_locale_date_string() {
project()
.file("src/lib.rs", r#"
#![feature(proc_macro, wasm_custom_section)]
extern crate wasm_bindgen;
use JsValue;
use wasm_bindgen::prelude::*;
use wasm_bindgen::js::{Date, JsString};
#[wasm_bindgen]
pub fn to_locale_date_string(this: &Date, locale: JsString, options: JsValue) -> JsString {
this.to_locale_date_string(locale, options)
}
"#)
.file("test.js", r#"
import * as assert from "assert";
import * as wasm from "./out";
export function test() {
let date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));
let options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' };
let output = wasm.to_locale_date_string(date, 'de-DE', options)
assert.equal(typeof output, 'string');
assert.ok(output.length > 0);
}
"#)
.test()
}
#[test]
fn to_locale_string() {
project()
.file("src/lib.rs", r#"
#![feature(proc_macro, wasm_custom_section)]
extern crate wasm_bindgen;
use JsValue;
use wasm_bindgen::prelude::*;
use wasm_bindgen::js::{Date, JsString};
#[wasm_bindgen]
pub fn to_locale_string(this: &Date, locale: JsString, options: JsValue) -> JsString {
this.to_locale_string(locale, options)
}
"#)
.file("test.js", r#"
import * as assert from "assert";
import * as wasm from "./out";
export function test() {
let date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));
let output = wasm.to_locale_string(date, 'en-GB', { timeZone: 'UTC' });
assert.equal(typeof output, 'string');
assert.ok(output.length > 0);
}
"#)
.test()
}
#[test]
fn to_locale_time_string() {
project()
.file(
"src/lib.rs",
r#"
#![feature(proc_macro, wasm_custom_section)]
extern crate wasm_bindgen;
use wasm_bindgen::prelude::*;
use wasm_bindgen::js::{Date, JsString};
#[wasm_bindgen]
pub fn to_locale_time_string(this: &Date, locale: JsString) -> JsString {
this.to_locale_time_string(locale)
}
"#,
)
.file(
"test.js",
r#"
import * as assert from "assert";
import * as wasm from "./out";
export function test() {
let date = new Date('August 19, 1975 23:15:30');
assert.equal(wasm.to_locale_time_string(date, 'en-US'), "11:15:30 PM");
}
"#,
)
.test()
}
#[test]
fn to_string() {
project()
.file(
"src/lib.rs",
r#"
#![feature(proc_macro, wasm_custom_section)]
extern crate wasm_bindgen;
use wasm_bindgen::prelude::*;
use wasm_bindgen::js::{Date, JsString};
#[wasm_bindgen]
pub fn to_string(this: &Date) -> JsString {
this.to_string()
}
"#,
)
.file(
"test.js",
r#"
import * as assert from "assert";
import * as wasm from "./out";
export function test() {
let date = new Date('August 19, 1975 23:15:30');
assert.equal(wasm.to_string(date).substring(0, 15), "Tue Aug 19 1975");
}
"#,
)
.test()
}
#[test]
fn to_time_string() {
project()
.file(
"src/lib.rs",
r#"
#![feature(proc_macro, wasm_custom_section)]
extern crate wasm_bindgen;
use wasm_bindgen::prelude::*;
use wasm_bindgen::js::{Date, JsString};
#[wasm_bindgen]
pub fn to_time_string(this: &Date) -> JsString {
this.to_time_string()
}
"#,
)
.file(
"test.js",
r#"
import * as assert from "assert";
import * as wasm from "./out";
export function test() {
let date = new Date('August 19, 1975 23:15:30');
assert.equal(wasm.to_time_string(date).substring(0, 8), "23:15:30");
}
"#,
)
.test()
}
#[test]
fn to_utc_string() {
project()
.file(
"src/lib.rs",
r#"
#![feature(proc_macro, wasm_custom_section)]
extern crate wasm_bindgen;
use wasm_bindgen::prelude::*;
use wasm_bindgen::js::{Date, JsString};
#[wasm_bindgen]
pub fn to_utc_string(this: &Date) -> JsString {
this.to_utc_string()
}
"#,
)
.file(
"test.js",
r#"
import * as assert from "assert";
import * as wasm from "./out";
export function test() {
let date = new Date('14 Jun 2017 00:00:00 PDT');
assert.equal(wasm.to_utc_string(date), "Wed, 14 Jun 2017 07:00:00 GMT");
}
"#,
)
.test()
}
#[test]
fn utc() {
project()
.file("src/lib.rs", r#"
#![feature(proc_macro, wasm_custom_section)]
extern crate wasm_bindgen;
use wasm_bindgen::prelude::*;
use wasm_bindgen::js::Date;
#[wasm_bindgen]
pub fn utc() -> f64 {
Date::utc(2018f64, 6f64)
}
"#)
.file("test.js", r#"
import * as assert from "assert";
import * as wasm from "./out";
export function test() {
assert.equal(wasm.utc(), 1530403200000);
}
"#)
.test()
}
#[test]
fn value_of() {
project()
.file(
"src/lib.rs",
r#"
#![feature(proc_macro, wasm_custom_section)]
extern crate wasm_bindgen;
use wasm_bindgen::prelude::*;
use wasm_bindgen::js::Date;
#[wasm_bindgen]
pub fn js_value_of(this: &Date) -> Date {
this.value_of()
}
"#,
)
.file(
"test.js",
r#"
import * as assert from "assert";
import * as wasm from "./out";
export function test() {
let date = new Date(Date.UTC(96, 1, 2, 3, 4, 5));
assert.equal(wasm.js_value_of(date), 823230245000);
}
"#,
)
.test()
}