| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- #![allow(dead_code)]
- use std::collections::HashMap;
- use indoc::indoc;
- use pretty_assertions::assert_eq;
- use tsify::Tsify;
- #[test]
- fn test_unit() {
- #[derive(Tsify)]
- struct Unit;
- if cfg!(feature = "js") {
- assert_eq!(Unit::DECL, "export type Unit = undefined;");
- } else {
- assert_eq!(Unit::DECL, "export type Unit = null;");
- };
- }
- #[test]
- fn test_named_fields() {
- #[derive(Tsify)]
- struct A {
- a: (usize, u64),
- b: HashMap<String, i128>,
- }
- let expected = if cfg!(feature = "js") {
- indoc! {"
- export interface A {
- a: [number, number];
- b: Map<string, bigint>;
- }"
- }
- } else {
- indoc! {"
- export interface A {
- a: [number, number];
- b: Record<string, number>;
- }"
- }
- };
- assert_eq!(A::DECL, expected);
- }
- #[test]
- fn test_newtype_struct() {
- #[derive(Tsify)]
- struct Newtype(i32);
- assert_eq!(Newtype::DECL, "export type Newtype = number;");
- }
- #[test]
- fn test_tuple_struct() {
- #[derive(Tsify)]
- struct Tuple(i32, String);
- #[derive(Tsify)]
- struct EmptyTuple();
- assert_eq!(Tuple::DECL, "export type Tuple = [number, string];");
- assert_eq!(EmptyTuple::DECL, "export type EmptyTuple = [];");
- }
- #[test]
- fn test_nested_struct() {
- #[derive(Tsify)]
- struct A {
- x: f64,
- }
- #[derive(Tsify)]
- struct B {
- a: A,
- }
- assert_eq!(
- B::DECL,
- indoc! {"
- export interface B {
- a: A;
- }"
- }
- );
- }
- #[test]
- fn test_struct_with_borrowed_fields() {
- use std::borrow::Cow;
- #[derive(Tsify)]
- struct Borrow<'a> {
- raw: &'a str,
- cow: Cow<'a, str>,
- }
- assert_eq!(
- Borrow::DECL,
- indoc! {"
- export interface Borrow {
- raw: string;
- cow: string;
- }"
- }
- );
- }
- #[test]
- fn test_tagged_struct() {
- #[derive(Tsify)]
- #[serde(tag = "type")]
- struct TaggedStruct {
- x: i32,
- y: i32,
- }
- assert_eq!(
- TaggedStruct::DECL,
- indoc! {r#"
- export interface TaggedStruct {
- type: "TaggedStruct";
- x: number;
- y: number;
- }"#
- }
- );
- }
|