#![deny(warnings)]
// We call all macros in this module with `no_implicit_prelude` to ensure they do not depend on the standard prelude.
#![no_implicit_prelude]
extern crate tracing;
#[cfg(target_arch = "wasm32")]
extern crate wasm_bindgen_test;

use tracing::{
    callsite, debug, debug_span, enabled, error, error_span, event, event_enabled, info, info_span,
    span, span_enabled, trace, trace_span, warn, warn_span, Level,
};

/// A type that implements `Display` and `Debug`, but not `Value`.
#[derive(Debug)]
struct DisplayDebug;

impl ::std::fmt::Display for DisplayDebug {
    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
        ::std::write!(f, "Foo")
    }
}

// Tests that macros work across various invocation syntax.
//
// These are quite repetitive, and _could_ be generated by a macro. However,
// they're compile-time tests, so I want to get line numbers etc out of
// failures, and producing them with a macro would muddy the waters a bit.

#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test]
fn span() {
    span!(target: "foo_events", Level::DEBUG, "foo", bar.baz = ?2, quux = %3, quuux = 4);
    span!(target: "foo_events", Level::DEBUG, "foo", bar.baz = 2, quux = 3);
    span!(target: "foo_events", Level::DEBUG, "foo", bar.baz = 2, quux = 4,);
    span!(target: "foo_events", Level::DEBUG, "foo");
    span!(target: "foo_events", Level::DEBUG, "bar",);
    span!(Level::DEBUG, "foo", bar.baz = 2, quux = 3);
    span!(Level::DEBUG, "foo", bar.baz = 2, quux = 4,);
    span!(Level::DEBUG, "foo", bar.baz = 2, quux = 3);
    span!(Level::DEBUG, "foo", bar.baz = 2, quux = 4,);
    span!(Level::DEBUG, "foo", bar.baz = ?2);
    span!(Level::DEBUG, "foo", bar.baz = %2);
    span!(Level::DEBUG, "foo");
    span!(Level::DEBUG, "bar",);
    span!(
        Level::DEBUG,
        "bar",
        foo = display("foo"),
        quux = debug(::std::option::Option::Some(2))
    );
}

#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test]
fn trace_span() {
    trace_span!(target: "foo_events", "foo", bar.baz = ?2, quux = %3, quuux = 4);
    trace_span!(target: "foo_events", "foo", bar.baz = 2, quux = 3);
    trace_span!(target: "foo_events", "foo", bar.baz = 2, quux = 4,);
    trace_span!(target: "foo_events", "foo");
    trace_span!(target: "foo_events", "bar",);
    trace_span!("foo", bar.baz = 2, quux = 3);
    trace_span!("foo", bar.baz = 2, quux = 4,);
    trace_span!("foo", bar.baz = ?2);
    trace_span!("foo", bar.baz = %2);
    trace_span!("bar");
    trace_span!("bar",);
    trace_span!(
        "bar",
        foo = display("foo"),
        quux = debug(::std::option::Option::Some(2))
    );
}

#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test]
fn debug_span() {
    debug_span!(target: "foo_events", "foo", bar.baz = ?2, quux = %3, quuux = 4);
    debug_span!(target: "foo_events", "foo", bar.baz = 2, quux = 3);
    debug_span!(target: "foo_events", "foo", bar.baz = 2, quux = 4,);
    debug_span!(target: "foo_events", "foo");
    debug_span!(target: "foo_events", "bar",);
    debug_span!("foo", bar.baz = 2, quux = 3);
    debug_span!("foo", bar.baz = 2, quux = 4,);
    debug_span!("foo", bar.baz = ?2);
    debug_span!("foo", bar.baz = %2);
    debug_span!("bar");
    debug_span!("bar",);
    debug_span!(
        "bar",
        foo = display("foo"),
        quux = debug(::std::option::Option::Some(2))
    );
}

#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test]
fn info_span() {
    info_span!(target: "foo_events", "foo", bar.baz = ?2, quux = %3, quuux = 4);
    info_span!(target: "foo_events", "foo", bar.baz = 2, quux = 3);
    info_span!(target: "foo_events", "foo", bar.baz = 2, quux = 4,);
    info_span!(target: "foo_events", "foo");
    info_span!(target: "foo_events", "bar",);
    info_span!("foo", bar.baz = 2, quux = 3);
    info_span!("foo", bar.baz = 2, quux = 4,);
    info_span!("foo", bar.baz = ?2);
    info_span!("foo", bar.baz = %2);
    info_span!("bar");
    info_span!("bar",);
    info_span!(
        "bar",
        foo = display("foo"),
        quux = debug(::std::option::Option::Some(2))
    );
}

#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test]
fn warn_span() {
    warn_span!(target: "foo_events", "foo", bar.baz = ?2, quux = %3, quuux = 4);
    warn_span!(target: "foo_events", "foo", bar.baz = 2, quux = 3);
    warn_span!(target: "foo_events", "foo", bar.baz = 2, quux = 4,);
    warn_span!(target: "foo_events", "foo");
    warn_span!(target: "foo_events", "bar",);
    warn_span!("foo", bar.baz = 2, quux = 3);
    warn_span!("foo", bar.baz = 2, quux = 4,);
    warn_span!("foo", bar.baz = ?2);
    warn_span!("foo", bar.baz = %2);
    warn_span!("bar");
    warn_span!("bar",);
    warn_span!(
        "bar",
        foo = display("foo"),
        quux = debug(::std::option::Option::Some(2))
    );
}

#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test]
fn error_span() {
    error_span!(target: "foo_events", "foo", bar.baz = ?2, quux = %3, quuux = 4);
    error_span!(target: "foo_events", "foo", bar.baz = 2, quux = 3);
    error_span!(target: "foo_events", "foo", bar.baz = 2, quux = 4,);
    error_span!(target: "foo_events", "foo");
    error_span!(target: "foo_events", "bar",);
    error_span!("foo", bar.baz = 2, quux = 3);
    error_span!("foo", bar.baz = 2, quux = 4,);
    error_span!("foo", bar.baz = ?2);
    error_span!("foo", bar.baz = %2);
    error_span!("bar");
    error_span!("bar",);
    error_span!(
        "bar",
        foo = display("foo"),
        quux = debug(::std::option::Option::Some(2))
    );
}

#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test]
fn span_root() {
    span!(target: "foo_events", parent: ::core::option::Option::None, Level::TRACE, "foo", bar.baz = 2, quux = 3);
    span!(target: "foo_events", parent: ::core::option::Option::None, Level::TRACE, "foo", bar.baz = 2, quux = 3);
    span!(target: "foo_events", parent: ::core::option::Option::None, Level::TRACE, "foo", bar.baz = 2, quux = 4,);
    span!(target: "foo_events", parent: ::core::option::Option::None, Level::TRACE, "foo");
    span!(target: "foo_events", parent: ::core::option::Option::None, Level::TRACE, "bar",);
    span!(
        parent: ::core::option::Option::None,
        Level::DEBUG,
        "foo",
        bar.baz = 2,
        quux = 3
    );
    span!(
        parent: ::core::option::Option::None,
        Level::DEBUG,
        "foo",
        bar.baz = 2,
        quux = 4,
    );
    span!(parent: ::core::option::Option::None, Level::DEBUG, "foo");
    span!(parent: ::core::option::Option::None, Level::DEBUG, "bar",);
}

#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test]
fn trace_span_root() {
    trace_span!(target: "foo_events", parent: ::core::option::Option::None, "foo", bar.baz = 2, quux = 3);
    trace_span!(target: "foo_events", parent: ::core::option::Option::None, "foo", bar.baz = 2, quux = 4,);
    trace_span!(target: "foo_events", parent: ::core::option::Option::None, "foo");
    trace_span!(target: "foo_events", parent: ::core::option::Option::None, "bar",);
    trace_span!(
        parent: ::core::option::Option::None,
        "foo",
        bar.baz = 2,
        quux = 3
    );
    trace_span!(
        parent: ::core::option::Option::None,
        "foo",
        bar.baz = 2,
        quux = 4,
    );
    trace_span!(parent: ::core::option::Option::None, "foo");
    trace_span!(parent: ::core::option::Option::None, "bar",);
}

#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test]
fn debug_span_root() {
    debug_span!(target: "foo_events", parent: ::core::option::Option::None, "foo", bar.baz = 2, quux = 3);
    debug_span!(target: "foo_events", parent: ::core::option::Option::None, "foo", bar.baz = 2, quux = 4,);
    debug_span!(target: "foo_events", parent: ::core::option::Option::None, "foo");
    debug_span!(target: "foo_events", parent: ::core::option::Option::None, "bar",);
    debug_span!(
        parent: ::core::option::Option::None,
        "foo",
        bar.baz = 2,
        quux = 3
    );
    debug_span!(
        parent: ::core::option::Option::None,
        "foo",
        bar.baz = 2,
        quux = 4,
    );
    debug_span!(parent: ::core::option::Option::None, "foo");
    debug_span!(parent: ::core::option::Option::None, "bar",);
}

#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test]
fn info_span_root() {
    info_span!(target: "foo_events", parent: ::core::option::Option::None, "foo", bar.baz = 2, quux = 3);
    info_span!(target: "foo_events", parent: ::core::option::Option::None, "foo", bar.baz = 2, quux = 4,);
    info_span!(target: "foo_events", parent: ::core::option::Option::None, "foo");
    info_span!(target: "foo_events", parent: ::core::option::Option::None, "bar",);
    info_span!(
        parent: ::core::option::Option::None,
        "foo",
        bar.baz = 2,
        quux = 3
    );
    info_span!(
        parent: ::core::option::Option::None,
        "foo",
        bar.baz = 2,
        quux = 4,
    );
    info_span!(parent: ::core::option::Option::None, "foo");
    info_span!(parent: ::core::option::Option::None, "bar",);
}

#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test]
fn warn_span_root() {
    warn_span!(target: "foo_events", parent: ::core::option::Option::None, "foo", bar.baz = 2, quux = 3);
    warn_span!(target: "foo_events", parent: ::core::option::Option::None, "foo", bar.baz = 2, quux = 4,);
    warn_span!(target: "foo_events", parent: ::core::option::Option::None, "foo");
    warn_span!(target: "foo_events", parent: ::core::option::Option::None, "bar",);
    warn_span!(
        parent: ::core::option::Option::None,
        "foo",
        bar.baz = 2,
        quux = 3
    );
    warn_span!(
        parent: ::core::option::Option::None,
        "foo",
        bar.baz = 2,
        quux = 4,
    );
    warn_span!(parent: ::core::option::Option::None, "foo");
    warn_span!(parent: ::core::option::Option::None, "bar",);
}

#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test]
fn error_span_root() {
    error_span!(target: "foo_events", parent: ::core::option::Option::None, "foo", bar.baz = 2, quux = 3);
    error_span!(target: "foo_events", parent: ::core::option::Option::None, "foo", bar.baz = 2, quux = 4,);
    error_span!(target: "foo_events", parent: ::core::option::Option::None, "foo");
    error_span!(target: "foo_events", parent: ::core::option::Option::None, "bar",);
    error_span!(
        parent: ::core::option::Option::None,
        "foo",
        bar.baz = 2,
        quux = 3
    );
    error_span!(
        parent: ::core::option::Option::None,
        "foo",
        bar.baz = 2,
        quux = 4,
    );
    error_span!(parent: ::core::option::Option::None, "foo");
    error_span!(parent: ::core::option::Option::None, "bar",);
}

#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test]
fn span_with_parent() {
    let p = span!(Level::TRACE, "im_a_parent!");
    span!(target: "foo_events", parent: &p, Level::TRACE, "foo", bar.baz = 2, quux = 3);
    span!(target: "foo_events", parent: &p, Level::TRACE, "foo", bar.baz = 2, quux = 4,);
    span!(target: "foo_events", parent: &p, Level::TRACE, "foo");
    span!(target: "foo_events", parent: &p, Level::TRACE, "bar",);
    span!(parent: &p, Level::DEBUG, "foo", bar.baz = 2, quux = 3);
    span!(parent: &p, Level::DEBUG, "foo", bar.baz = 2, quux = 4,);
    span!(parent: &p, Level::DEBUG, "foo");
    span!(parent: &p, Level::DEBUG, "bar",);
}

#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test]
fn trace_span_with_parent() {
    let p = span!(Level::TRACE, "im_a_parent!");
    trace_span!(target: "foo_events", parent: &p, "foo", bar.baz = 2, quux = 3);
    trace_span!(target: "foo_events", parent: &p, "foo", bar.baz = 2, quux = 4,);
    trace_span!(target: "foo_events", parent: &p, "foo");
    trace_span!(target: "foo_events", parent: &p, "bar",);

    trace_span!(parent: &p, "foo", bar.baz = 2, quux = 3);
    trace_span!(parent: &p, "foo", bar.baz = 2, quux = 4,);

    trace_span!(parent: &p, "foo");
    trace_span!(parent: &p, "bar",);
}

#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test]
fn debug_span_with_parent() {
    let p = span!(Level::TRACE, "im_a_parent!");
    debug_span!(target: "foo_events", parent: &p, "foo", bar.baz = 2, quux = 3);
    debug_span!(target: "foo_events", parent: &p, "foo", bar.baz = 2, quux = 4,);
    debug_span!(target: "foo_events", parent: &p, "foo");
    debug_span!(target: "foo_events", parent: &p, "bar",);

    debug_span!(parent: &p, "foo", bar.baz = 2, quux = 3);
    debug_span!(parent: &p, "foo", bar.baz = 2, quux = 4,);

    debug_span!(parent: &p, "foo");
    debug_span!(parent: &p, "bar",);
}

#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test]
fn info_span_with_parent() {
    let p = span!(Level::TRACE, "im_a_parent!");
    info_span!(target: "foo_events", parent: &p, "foo", bar.baz = 2, quux = 3);
    info_span!(target: "foo_events", parent: &p, "foo", bar.baz = 2, quux = 4,);
    info_span!(target: "foo_events", parent: &p, "foo");
    info_span!(target: "foo_events", parent: &p, "bar",);

    info_span!(parent: &p, "foo", bar.baz = 2, quux = 3);
    info_span!(parent: &p, "foo", bar.baz = 2, quux = 4,);

    info_span!(parent: &p, "foo");
    info_span!(parent: &p, "bar",);
}

#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test]
fn warn_span_with_parent() {
    let p = span!(Level::TRACE, "im_a_parent!");
    warn_span!(target: "foo_events", parent: &p, "foo", bar.baz = 2, quux = 3);
    warn_span!(target: "foo_events", parent: &p, "foo", bar.baz = 2, quux = 4,);
    warn_span!(target: "foo_events", parent: &p, "foo");
    warn_span!(target: "foo_events", parent: &p, "bar",);

    warn_span!(parent: &p, "foo", bar.baz = 2, quux = 3);
    warn_span!(parent: &p, "foo", bar.baz = 2, quux = 4,);

    warn_span!(parent: &p, "foo");
    warn_span!(parent: &p, "bar",);
}

#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test]
fn error_span_with_parent() {
    let p = span!(Level::TRACE, "im_a_parent!");
    error_span!(target: "foo_events", parent: &p, "foo", bar.baz = 2, quux = 3);
    error_span!(target: "foo_events", parent: &p, "foo", bar.baz = 2, quux = 4,);
    error_span!(target: "foo_events", parent: &p, "foo");
    error_span!(target: "foo_events", parent: &p, "bar",);

    error_span!(parent: &p, "foo", bar.baz = 2, quux = 3);
    error_span!(parent: &p, "foo", bar.baz = 2, quux = 4,);

    error_span!(parent: &p, "foo");
    error_span!(parent: &p, "bar",);
}

#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test]
fn span_with_non_rust_symbol() {
    span!(Level::TRACE, "non-rust", "guid:x-request-id" = ?"abcdef", "more {}", 42);
    span!(Level::TRACE, "non-rust", "guid:x-request-id" = %"abcdef", "more {}", 51);
    span!(
        Level::TRACE,
        "non-rust",
        "guid:x-request-id" = "abcdef",
        "more {}",
        60
    );
    span!(Level::TRACE, "non-rust", "guid:x-request-id" = ?"abcdef");
    span!(Level::TRACE, "non-rust", "guid:x-request-id" = %"abcdef");
    span!(Level::TRACE, "non-rust", "guid:x-request-id" = "abcdef");
}

#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test]
fn large_span() {
    span!(
        Level::TRACE,
        "spans with more than 32 fields have been supported since #2508",
        a = 1,
        b = 2,
        c = 3,
        d = 4,
        e = 5,
        f = 6,
        g = 7,
        h = 8,
        i = 9,
        j = 10,
        k = 11,
        l = 12,
        m = 13,
        n = 14,
        o = 15,
        p = 16,
        q = 17,
        r = 18,
        s = 19,
        t = 20,
        u = 21,
        v = 22,
        w = 23,
        x = 24,
        y = 25,
        z = 26,
        aa = 27,
        bb = 28,
        cc = 29,
        dd = 30,
        ee = 31,
        ff = 32,
        gg = 33
    );
}

#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test]
fn event() {
    event!(Level::DEBUG, foo = ?3, bar.baz = %2, quux = false);
    event!(Level::DEBUG, foo = 3, bar.baz = 2, quux = false);
    event!(Level::DEBUG, foo = 3, bar.baz = 3,);
    event!(Level::DEBUG, "foo");
    event!(Level::DEBUG, "foo: {}", 3);
    event!(Level::INFO, foo = ?3, bar.baz = %2, quux = false, "hello world {:?}", 42);
    event!(
        Level::INFO,
        foo = 3,
        bar.baz = 2,
        quux = false,
        "hello world {:?}",
        42
    );
    event!(Level::INFO, foo = 3, bar.baz = 3, "hello world {:?}", 42,);
    event!(Level::DEBUG, { foo = 3, bar.baz = 80 }, "quux");
    event!(Level::DEBUG, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
    event!(Level::DEBUG, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
    event!(Level::DEBUG, { foo = ?2, bar.baz = %78 }, "quux");
    event!(target: "foo_events", Level::DEBUG, foo = 3, bar.baz = 2, quux = false);
    event!(target: "foo_events", Level::DEBUG, foo = 3, bar.baz = 3,);
    event!(target: "foo_events", Level::DEBUG, "foo");
    event!(target: "foo_events", Level::DEBUG, "foo: {}", 3);
    event!(target: "foo_events", Level::DEBUG, { foo = 3, bar.baz = 80 }, "quux");
    event!(target: "foo_events", Level::DEBUG, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
    event!(target: "foo_events", Level::DEBUG, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
    event!(target: "foo_events", Level::DEBUG, { foo = 2, bar.baz = 78, }, "quux");
    let foo = 1;
    event!(Level::DEBUG, ?foo);
    event!(Level::DEBUG, %foo);
    event!(Level::DEBUG, foo);
    event!(
        Level::DEBUG,
        foo = display("foo"),
        quux = debug(::std::option::Option::Some(2))
    );
}

#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test]
fn enabled() {
    enabled!(Level::DEBUG, foo, bar.baz, quux,);
    enabled!(Level::DEBUG, message);
    enabled!(Level::INFO, foo, bar.baz, quux, message,);
    enabled!(Level::INFO, foo, bar., message,);
    enabled!(Level::DEBUG, foo);

    enabled!(Level::DEBUG);
    enabled!(target: "rando", Level::DEBUG);
    enabled!(target: "rando", Level::DEBUG, field);
}

#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test]
fn span_enabled() {
    span_enabled!(Level::DEBUG, foo, bar.baz, quux,);
    span_enabled!(Level::DEBUG, message);
    span_enabled!(Level::INFO, foo, bar.baz, quux, message,);
    span_enabled!(Level::INFO, foo, bar., message,);
    span_enabled!(Level::DEBUG, foo);

    span_enabled!(Level::DEBUG);
    span_enabled!(target: "rando", Level::DEBUG);
    span_enabled!(target: "rando", Level::DEBUG, field);
}

#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test]
fn event_enabled() {
    event_enabled!(Level::DEBUG, foo, bar.baz, quux,);
    event_enabled!(Level::DEBUG, message);
    event_enabled!(Level::INFO, foo, bar.baz, quux, message,);
    event_enabled!(Level::INFO, foo, bar., message,);
    event_enabled!(Level::DEBUG, foo);

    event_enabled!(Level::DEBUG);
    event_enabled!(target: "rando", Level::DEBUG);
    event_enabled!(target: "rando", Level::DEBUG, field);
}

#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test]
fn locals_with_message() {
    let data = (42, "forty-two");
    let private_data = "private";
    let error = "a bad error";
    event!(Level::ERROR, %error, "Received error");
    event!(
        target: "app_events",
        Level::WARN,
        private_data,
        ?data,
        "App warning: {}",
        error
    );
}

#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test]
fn locals_no_message() {
    let data = (42, "forty-two");
    let private_data = "private";
    let error = "a bad error";
    event!(
        name: "foo",
        target: "app_events",
        Level::WARN,
        private_data,
        ?data,
    );
    event!(
        name: "foo",
        parent: ::core::option::Option::None,
        Level::WARN,
        private_data,
        ?data,
    );
    event!(
        target: "app_events",
        Level::WARN,
        private_data,
        ?data,
    );
    event!(
        target: "app_events",
        Level::WARN,
        private_data,
        ?data,
        error,
    );
    event!(
        target: "app_events",
        Level::WARN,
        private_data,
        ?data,
        error
    );
    event!(Level::WARN, private_data, ?data, error,);
}

#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test]
fn trace() {
    trace!(foo = ?3, bar.baz = %2, quux = false);
    trace!(foo = 3, bar.baz = 2, quux = false);
    trace!(foo = 3, bar.baz = 3,);
    trace!("foo" = 3, bar.baz = 3,);
    trace!(foo = 3, "bar.baz" = 3,);
    trace!("foo");
    trace!("foo: {}", 3);
    trace!(foo = ?3, bar.baz = %2, quux = false, "hello world {:?}", 42);
    trace!(foo = 3, bar.baz = 2, quux = false, "hello world {:?}", 42);
    trace!(foo = 3, bar.baz = 3, "hello world {:?}", 42,);
    trace!({ foo = 3, bar.baz = 80 }, "quux");
    trace!({ "foo" = 3, "bar.baz" = 80 }, "quux");
    trace!({ foo = 2, bar.baz = 79 }, "quux {:?}", true);
    trace!({ foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
    trace!({ foo = 2, bar.baz = 78 }, "quux");
    trace!({ foo = ?2, bar.baz = %78 }, "quux");
    trace!(name: "foo", foo = 3, bar.baz = 2, quux = false);
    trace!(name: "foo", target: "foo_events", foo = 3, bar.baz = 2, quux = false);
    trace!(name: "foo", parent: ::core::option::Option::None, foo = 3, bar.baz = 2, quux = false);
    trace!(target: "foo_events", foo = 3, bar.baz = 2, quux = false);
    trace!(target: "foo_events", foo = 3, bar.baz = 3,);
    trace!(target: "foo_events", "foo");
    trace!(target: "foo_events", "foo: {}", 3);
    trace!(target: "foo_events", { foo = 3, bar.baz = 80 }, "quux");
    trace!(target: "foo_events", { foo = 2, bar.baz = 79 }, "quux {:?}", true);
    trace!(target: "foo_events", { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
    trace!(target: "foo_events", { foo = 2, bar.baz = 78, }, "quux");
    let foo = 1;
    trace!(?foo);
    trace!(%foo);
    trace!(foo);
    trace!("foo" = ?foo);
    trace!("foo" = %foo);
    trace!("foo" = foo);
    trace!(name: "foo", ?foo);
    trace!(name: "foo", %foo);
    trace!(name: "foo", foo);
    trace!(name: "foo", ?foo, true, "message");
    trace!(name: "foo", %foo, true, "message");
    trace!(name: "foo", foo, true, "message");
    trace!(target: "foo_events", ?foo);
    trace!(target: "foo_events", %foo);
    trace!(target: "foo_events", foo);
    trace!(target: "foo_events", ?foo, true, "message");
    trace!(target: "foo_events", %foo, true, "message");
    trace!(target: "foo_events", foo, true, "message");
    trace!(name: "foo", target: "foo_events", ?foo);
    trace!(name: "foo", target: "foo_events", %foo);
    trace!(name: "foo", target: "foo_events", foo);
    let foo = DisplayDebug;
    trace!(?foo);
    trace!(%foo);
    trace!(name: "foo", ?foo);
    trace!(name: "foo", %foo);
    trace!(name: "foo", ?foo, true, "message");
    trace!(name: "foo", %foo, true, "message");
    trace!(target: "foo_events", ?foo);
    trace!(target: "foo_events", %foo);
    trace!(target: "foo_events", ?foo, true, "message");
    trace!(target: "foo_events", %foo, true, "message");
    trace!(name: "foo", target: "foo_events", ?foo, true, "message");
    trace!(name: "foo", target: "foo_events", %foo, true, "message");
    trace!(foo = display("foo"), quux = debug(foo));
}

#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test]
fn debug() {
    debug!(foo = ?3, bar.baz = %2, quux = false);
    debug!(foo = 3, bar.baz = 2, quux = false);
    debug!(foo = 3, bar.baz = 3,);
    debug!("foo" = 3, bar.baz = 3,);
    debug!(foo = 3, "bar.baz" = 3,);
    debug!("foo");
    debug!("foo: {}", 3);
    debug!(foo = ?3, bar.baz = %2, quux = false, "hello world {:?}", 42);
    debug!(foo = 3, bar.baz = 2, quux = false, "hello world {:?}", 42);
    debug!(foo = 3, bar.baz = 3, "hello world {:?}", 42,);
    debug!({ foo = 3, bar.baz = 80 }, "quux");
    debug!({ "foo" = 3, "bar.baz" = 80 }, "quux");
    debug!({ foo = 2, bar.baz = 79 }, "quux {:?}", true);
    debug!({ foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
    debug!({ foo = 2, bar.baz = 78 }, "quux");
    debug!({ foo = ?2, bar.baz = %78 }, "quux");
    debug!(name: "foo", foo = 3, bar.baz = 2, quux = false);
    debug!(name: "foo", target: "foo_events", foo = 3, bar.baz = 2, quux = false);
    debug!(name: "foo", parent: ::core::option::Option::None, foo = 3, bar.baz = 2, quux = false);
    debug!(target: "foo_events", foo = 3, bar.baz = 2, quux = false);
    debug!(target: "foo_events", foo = 3, bar.baz = 3,);
    debug!(target: "foo_events", "foo");
    debug!(target: "foo_events", "foo: {}", 3);
    debug!(target: "foo_events", { foo = 3, bar.baz = 80 }, "quux");
    debug!(target: "foo_events", { foo = 2, bar.baz = 79 }, "quux {:?}", true);
    debug!(target: "foo_events", { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
    debug!(target: "foo_events", { foo = 2, bar.baz = 78, }, "quux");
    let foo = 1;
    debug!(?foo);
    debug!(%foo);
    debug!(foo);
    debug!("foo" = ?foo);
    debug!("foo" = %foo);
    debug!("foo" = foo);
    debug!(name: "foo", ?foo);
    debug!(name: "foo", %foo);
    debug!(name: "foo", foo);
    debug!(name: "foo", ?foo, true, "message");
    debug!(name: "foo", %foo, true, "message");
    debug!(name: "foo", foo, true, "message");
    debug!(target: "foo_events", ?foo);
    debug!(target: "foo_events", %foo);
    debug!(target: "foo_events", foo);
    debug!(target: "foo_events", ?foo, true, "message");
    debug!(target: "foo_events", %foo, true, "message");
    debug!(target: "foo_events", foo, true, "message");
    debug!(name: "foo", target: "foo_events", ?foo);
    debug!(name: "foo", target: "foo_events", %foo);
    debug!(name: "foo", target: "foo_events", foo);
    let foo = DisplayDebug;
    debug!(?foo);
    debug!(%foo);
    debug!(name: "foo", ?foo);
    debug!(name: "foo", %foo);
    debug!(name: "foo", ?foo, true, "message");
    debug!(name: "foo", %foo, true, "message");
    debug!(target: "foo_events", ?foo);
    debug!(target: "foo_events", %foo);
    debug!(target: "foo_events", ?foo, true, "message");
    debug!(target: "foo_events", %foo, true, "message");
    debug!(name: "foo", target: "foo_events", ?foo, true, "message");
    debug!(name: "foo", target: "foo_events", %foo, true, "message");
    debug!(foo = display("foo"), quux = debug(foo));
}

#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test]
fn info() {
    info!(foo = ?3, bar.baz = %2, quux = false);
    info!(foo = 3, bar.baz = 2, quux = false);
    info!(foo = 3, bar.baz = 3,);
    info!("foo" = 3, bar.baz = 3,);
    info!(foo = 3, "bar.baz" = 3,);
    info!("foo");
    info!("foo: {}", 3);
    info!(foo = ?3, bar.baz = %2, quux = false, "hello world {:?}", 42);
    info!(foo = 3, bar.baz = 2, quux = false, "hello world {:?}", 42);
    info!(foo = 3, bar.baz = 3, "hello world {:?}", 42,);
    info!({ foo = 3, bar.baz = 80 }, "quux");
    info!({ "foo" = 3, "bar.baz" = 80 }, "quux");
    info!({ foo = 2, bar.baz = 79 }, "quux {:?}", true);
    info!({ foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
    info!({ foo = 2, bar.baz = 78 }, "quux");
    info!({ foo = ?2, bar.baz = %78 }, "quux");
    info!(name: "foo", foo = 3, bar.baz = 2, quux = false);
    info!(name: "foo", target: "foo_events", foo = 3, bar.baz = 2, quux = false);
    info!(name: "foo", parent: ::core::option::Option::None, foo = 3, bar.baz = 2, quux = false);
    info!(target: "foo_events", foo = 3, bar.baz = 2, quux = false);
    info!(target: "foo_events", foo = 3, bar.baz = 3,);
    info!(target: "foo_events", "foo");
    info!(target: "foo_events", "foo: {}", 3);
    info!(target: "foo_events", { foo = 3, bar.baz = 80 }, "quux");
    info!(target: "foo_events", { foo = 2, bar.baz = 79 }, "quux {:?}", true);
    info!(target: "foo_events", { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
    info!(target: "foo_events", { foo = 2, bar.baz = 78, }, "quux");
    let foo = 1;
    info!(?foo);
    info!(%foo);
    info!(foo);
    info!("foo" = ?foo);
    info!("foo" = %foo);
    info!("foo" = foo);
    info!(name: "foo", ?foo);
    info!(name: "foo", %foo);
    info!(name: "foo", foo);
    info!(name: "foo", ?foo, true, "message");
    info!(name: "foo", %foo, true, "message");
    info!(name: "foo", foo, true, "message");
    info!(target: "foo_events", ?foo);
    info!(target: "foo_events", %foo);
    info!(target: "foo_events", foo);
    info!(target: "foo_events", ?foo, true, "message");
    info!(target: "foo_events", %foo, true, "message");
    info!(target: "foo_events", foo, true, "message");
    info!(name: "foo", target: "foo_events", ?foo);
    info!(name: "foo", target: "foo_events", %foo);
    info!(name: "foo", target: "foo_events", foo);
    let foo = DisplayDebug;
    info!(?foo);
    info!(%foo);
    info!(name: "foo", ?foo);
    info!(name: "foo", %foo);
    info!(name: "foo", ?foo, true, "message");
    info!(name: "foo", %foo, true, "message");
    info!(target: "foo_events", ?foo);
    info!(target: "foo_events", %foo);
    info!(target: "foo_events", ?foo, true, "message");
    info!(target: "foo_events", %foo, true, "message");
    info!(name: "foo", target: "foo_events", ?foo, true, "message");
    info!(name: "foo", target: "foo_events", %foo, true, "message");
    info!(foo = display("foo"), quux = debug(foo));
}

#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test]
fn warn() {
    warn!(foo = ?3, bar.baz = %2, quux = false);
    warn!(foo = 3, bar.baz = 2, quux = false);
    warn!(foo = 3, bar.baz = 3,);
    warn!("foo" = 3, bar.baz = 3,);
    warn!(foo = 3, "bar.baz" = 3,);
    warn!("foo");
    warn!("foo: {}", 3);
    warn!(foo = ?3, bar.baz = %2, quux = false, "hello world {:?}", 42);
    warn!(foo = 3, bar.baz = 2, quux = false, "hello world {:?}", 42);
    warn!(foo = 3, bar.baz = 3, "hello world {:?}", 42,);
    warn!({ foo = 3, bar.baz = 80 }, "quux");
    warn!({ "foo" = 3, "bar.baz" = 80 }, "quux");
    warn!({ foo = 2, bar.baz = 79 }, "quux {:?}", true);
    warn!({ foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
    warn!({ foo = 2, bar.baz = 78 }, "quux");
    warn!({ foo = ?2, bar.baz = %78 }, "quux");
    warn!(name: "foo", foo = 3, bar.baz = 2, quux = false);
    warn!(name: "foo", target: "foo_events", foo = 3, bar.baz = 2, quux = false);
    warn!(name: "foo", parent: ::core::option::Option::None, foo = 3, bar.baz = 2, quux = false);
    warn!(target: "foo_events", foo = 3, bar.baz = 2, quux = false);
    warn!(target: "foo_events", foo = 3, bar.baz = 3,);
    warn!(target: "foo_events", "foo");
    warn!(target: "foo_events", "foo: {}", 3);
    warn!(target: "foo_events", { foo = 3, bar.baz = 80 }, "quux");
    warn!(target: "foo_events", { foo = 2, bar.baz = 79 }, "quux {:?}", true);
    warn!(target: "foo_events", { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
    warn!(target: "foo_events", { foo = 2, bar.baz = 78, }, "quux");
    let foo = 1;
    warn!(?foo);
    warn!(%foo);
    warn!(foo);
    warn!("foo" = ?foo);
    warn!("foo" = %foo);
    warn!("foo" = foo);
    warn!(name: "foo", ?foo);
    warn!(name: "foo", %foo);
    warn!(name: "foo", foo);
    warn!(name: "foo", ?foo, true, "message");
    warn!(name: "foo", %foo, true, "message");
    warn!(name: "foo", foo, true, "message");
    warn!(target: "foo_events", ?foo);
    warn!(target: "foo_events", %foo);
    warn!(target: "foo_events", foo);
    warn!(target: "foo_events", ?foo, true, "message");
    warn!(target: "foo_events", %foo, true, "message");
    warn!(target: "foo_events", foo, true, "message");
    warn!(name: "foo", target: "foo_events", ?foo);
    warn!(name: "foo", target: "foo_events", %foo);
    warn!(name: "foo", target: "foo_events", foo);
    let foo = DisplayDebug;
    warn!(?foo);
    warn!(%foo);
    warn!(name: "foo", ?foo);
    warn!(name: "foo", %foo);
    warn!(name: "foo", ?foo, true, "message");
    warn!(name: "foo", %foo, true, "message");
    warn!(target: "foo_events", ?foo);
    warn!(target: "foo_events", %foo);
    warn!(target: "foo_events", ?foo, true, "message");
    warn!(target: "foo_events", %foo, true, "message");
    warn!(name: "foo", target: "foo_events", ?foo, true, "message");
    warn!(name: "foo", target: "foo_events", %foo, true, "message");
    warn!(foo = display("foo"), quux = debug(foo));
}

#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test]
fn error() {
    error!(foo = ?3, bar.baz = %2, quux = false);
    error!(foo = 3, bar.baz = 2, quux = false);
    error!(foo = 3, bar.baz = 3,);
    error!("foo" = 3, bar.baz = 3,);
    error!(foo = 3, "bar.baz" = 3,);
    error!("foo");
    error!("foo: {}", 3);
    error!(foo = ?3, bar.baz = %2, quux = false, "hello world {:?}", 42);
    error!(foo = 3, bar.baz = 2, quux = false, "hello world {:?}", 42);
    error!(foo = 3, bar.baz = 3, "hello world {:?}", 42,);
    error!({ foo = 3, bar.baz = 80 }, "quux");
    error!({ "foo" = 3, "bar.baz" = 80 }, "quux");
    error!({ foo = 2, bar.baz = 79 }, "quux {:?}", true);
    error!({ foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
    error!({ foo = 2, bar.baz = 78 }, "quux");
    error!({ foo = ?2, bar.baz = %78 }, "quux");
    error!(name: "foo", foo = 3, bar.baz = 2, quux = false);
    error!(name: "foo", target: "foo_events", foo = 3, bar.baz = 2, quux = false);
    error!(name: "foo", parent: ::core::option::Option::None, foo = 3, bar.baz = 2, quux = false);
    error!(target: "foo_events", foo = 3, bar.baz = 2, quux = false);
    error!(target: "foo_events", foo = 3, bar.baz = 3,);
    error!(target: "foo_events", "foo");
    error!(target: "foo_events", "foo: {}", 3);
    error!(target: "foo_events", { foo = 3, bar.baz = 80 }, "quux");
    error!(target: "foo_events", { foo = 2, bar.baz = 79 }, "quux {:?}", true);
    error!(target: "foo_events", { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
    error!(target: "foo_events", { foo = 2, bar.baz = 78, }, "quux");
    let foo = 1;
    error!(?foo);
    error!(%foo);
    error!(foo);
    error!("foo" = ?foo);
    error!("foo" = %foo);
    error!("foo" = foo);
    error!(name: "foo", ?foo);
    error!(name: "foo", %foo);
    error!(name: "foo", foo);
    error!(name: "foo", ?foo, true, "message");
    error!(name: "foo", %foo, true, "message");
    error!(name: "foo", foo, true, "message");
    error!(target: "foo_events", ?foo);
    error!(target: "foo_events", %foo);
    error!(target: "foo_events", foo);
    error!(target: "foo_events", ?foo, true, "message");
    error!(target: "foo_events", %foo, true, "message");
    error!(target: "foo_events", foo, true, "message");
    error!(name: "foo", target: "foo_events", ?foo);
    error!(name: "foo", target: "foo_events", %foo);
    error!(name: "foo", target: "foo_events", foo);
    let foo = DisplayDebug;
    error!(?foo);
    error!(%foo);
    error!(name: "foo", ?foo);
    error!(name: "foo", %foo);
    error!(name: "foo", ?foo, true, "message");
    error!(name: "foo", %foo, true, "message");
    error!(target: "foo_events", ?foo);
    error!(target: "foo_events", %foo);
    error!(target: "foo_events", ?foo, true, "message");
    error!(target: "foo_events", %foo, true, "message");
    error!(name: "foo", target: "foo_events", ?foo, true, "message");
    error!(name: "foo", target: "foo_events", %foo, true, "message");
    error!(foo = display("foo"), quux = debug(foo));
}

#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test]
fn event_root() {
    event!(parent: ::core::option::Option::None, Level::DEBUG, foo = ?3, bar.baz = %2, quux = false);
    event!(
        parent: ::core::option::Option::None,
        Level::DEBUG,
        foo = 3,
        bar.baz = 2,
        quux = false
    );
    event!(
        parent: ::core::option::Option::None,
        Level::DEBUG,
        foo = 3,
        bar.baz = 3,
    );
    event!(parent: ::core::option::Option::None, Level::DEBUG, "foo");
    event!(
        parent: ::core::option::Option::None,
        Level::DEBUG,
        "foo: {}",
        3
    );
    event!(parent: ::core::option::Option::None, Level::DEBUG, { foo = 3, bar.baz = 80 }, "quux");
    event!(parent: ::core::option::Option::None, Level::DEBUG, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
    event!(parent: ::core::option::Option::None, Level::DEBUG, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
    event!(parent: ::core::option::Option::None, Level::DEBUG, { foo = ?2, bar.baz = %78 }, "quux");
    event!(target: "foo_events", parent: ::core::option::Option::None, Level::DEBUG, foo = 3, bar.baz = 2, quux = false);
    event!(target: "foo_events", parent: ::core::option::Option::None, Level::DEBUG, foo = 3, bar.baz = 3,);
    event!(target: "foo_events", parent: ::core::option::Option::None, Level::DEBUG, "foo");
    event!(target: "foo_events", parent: ::core::option::Option::None, Level::DEBUG, "foo: {}", 3);
    event!(target: "foo_events", parent: ::core::option::Option::None, Level::DEBUG, { foo = 3, bar.baz = 80 }, "quux");
    event!(target: "foo_events", parent: ::core::option::Option::None, Level::DEBUG, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
    event!(target: "foo_events", parent: ::core::option::Option::None, Level::DEBUG, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
    event!(target: "foo_events", parent: ::core::option::Option::None, Level::DEBUG, { foo = 2, bar.baz = 78, }, "quux");
    event!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, Level::DEBUG, foo = 3, bar.baz = 2, quux = false);
    event!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, Level::DEBUG, foo = 3, bar.baz = 3,);
    event!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, Level::DEBUG, "foo");
    event!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, Level::DEBUG, "foo: {}", 3);
    event!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, Level::DEBUG, { foo = 3, bar.baz = 80 }, "quux");
    event!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, Level::DEBUG, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
    event!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, Level::DEBUG, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
    event!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, Level::DEBUG, { foo = 2, bar.baz = 78, }, "quux");
}

#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test]
fn trace_root() {
    trace!(parent: ::core::option::Option::None, foo = ?3, bar.baz = %2, quux = false);
    trace!(
        parent: ::core::option::Option::None,
        foo = 3,
        bar.baz = 2,
        quux = false
    );
    trace!(parent: ::core::option::Option::None, foo = 3, bar.baz = 3,);
    trace!(parent: ::core::option::Option::None, "foo");
    trace!(parent: ::core::option::Option::None, "foo: {}", 3);
    trace!(parent: ::core::option::Option::None, { foo = 3, bar.baz = 80 }, "quux");
    trace!(parent: ::core::option::Option::None, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
    trace!(parent: ::core::option::Option::None, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
    trace!(parent: ::core::option::Option::None, { foo = 2, bar.baz = 78 }, "quux");
    trace!(parent: ::core::option::Option::None, { foo = ?2, bar.baz = %78 }, "quux");
    trace!(target: "foo_events", parent: ::core::option::Option::None, foo = 3, bar.baz = 2, quux = false);
    trace!(target: "foo_events", parent: ::core::option::Option::None, foo = 3, bar.baz = 3,);
    trace!(target: "foo_events", parent: ::core::option::Option::None, "foo");
    trace!(target: "foo_events", parent: ::core::option::Option::None, "foo: {}", 3);
    trace!(target: "foo_events", parent: ::core::option::Option::None, { foo = 3, bar.baz = 80 }, "quux");
    trace!(target: "foo_events", parent: ::core::option::Option::None, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
    trace!(target: "foo_events", parent: ::core::option::Option::None, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
    trace!(target: "foo_events", parent: ::core::option::Option::None, { foo = 2, bar.baz = 78, }, "quux");
    trace!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, foo = 3, bar.baz = 2, quux = false);
    trace!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, foo = 3, bar.baz = 3,);
    trace!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, "foo");
    trace!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, "foo: {}", 3);
    trace!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, { foo = 3, bar.baz = 80 }, "quux");
    trace!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
    trace!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
    trace!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, { foo = 2, bar.baz = 78, }, "quux");
}

#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test]
fn debug_root() {
    debug!(parent: ::core::option::Option::None, foo = ?3, bar.baz = %2, quux = false);
    debug!(
        parent: ::core::option::Option::None,
        foo = 3,
        bar.baz = 2,
        quux = false
    );
    debug!(parent: ::core::option::Option::None, foo = 3, bar.baz = 3,);
    debug!(parent: ::core::option::Option::None, "foo");
    debug!(parent: ::core::option::Option::None, "foo: {}", 3);
    debug!(parent: ::core::option::Option::None, { foo = 3, bar.baz = 80 }, "quux");
    debug!(parent: ::core::option::Option::None, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
    debug!(parent: ::core::option::Option::None, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
    debug!(parent: ::core::option::Option::None, { foo = 2, bar.baz = 78 }, "quux");
    debug!(parent: ::core::option::Option::None, { foo = ?2, bar.baz = %78 }, "quux");
    debug!(target: "foo_events", parent: ::core::option::Option::None, foo = 3, bar.baz = 2, quux = false);
    debug!(target: "foo_events", parent: ::core::option::Option::None, foo = 3, bar.baz = 3,);
    debug!(target: "foo_events", parent: ::core::option::Option::None, "foo");
    debug!(target: "foo_events", parent: ::core::option::Option::None, "foo: {}", 3);
    debug!(target: "foo_events", parent: ::core::option::Option::None, { foo = 3, bar.baz = 80 }, "quux");
    debug!(target: "foo_events", parent: ::core::option::Option::None, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
    debug!(target: "foo_events", parent: ::core::option::Option::None, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
    debug!(target: "foo_events", parent: ::core::option::Option::None, { foo = 2, bar.baz = 78, }, "quux");
    debug!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, foo = 3, bar.baz = 2, quux = false);
    debug!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, foo = 3, bar.baz = 3,);
    debug!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, "foo");
    debug!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, "foo: {}", 3);
    debug!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, { foo = 3, bar.baz = 80 }, "quux");
    debug!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
    debug!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
    debug!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, { foo = 2, bar.baz = 78, }, "quux");
}

#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test]
fn info_root() {
    info!(parent: ::core::option::Option::None, foo = ?3, bar.baz = %2, quux = false);
    info!(
        parent: ::core::option::Option::None,
        foo = 3,
        bar.baz = 2,
        quux = false
    );
    info!(parent: ::core::option::Option::None, foo = 3, bar.baz = 3,);
    info!(parent: ::core::option::Option::None, "foo");
    info!(parent: ::core::option::Option::None, "foo: {}", 3);
    info!(parent: ::core::option::Option::None, { foo = 3, bar.baz = 80 }, "quux");
    info!(parent: ::core::option::Option::None, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
    info!(parent: ::core::option::Option::None, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
    info!(parent: ::core::option::Option::None, { foo = 2, bar.baz = 78 }, "quux");
    info!(parent: ::core::option::Option::None, { foo = ?2, bar.baz = %78 }, "quux");
    info!(target: "foo_events", parent: ::core::option::Option::None, foo = 3, bar.baz = 2, quux = false);
    info!(target: "foo_events", parent: ::core::option::Option::None, foo = 3, bar.baz = 3,);
    info!(target: "foo_events", parent: ::core::option::Option::None, "foo");
    info!(target: "foo_events", parent: ::core::option::Option::None, "foo: {}", 3);
    info!(target: "foo_events", parent: ::core::option::Option::None, { foo = 3, bar.baz = 80 }, "quux");
    info!(target: "foo_events", parent: ::core::option::Option::None, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
    info!(target: "foo_events", parent: ::core::option::Option::None, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
    info!(target: "foo_events", parent: ::core::option::Option::None, { foo = 2, bar.baz = 78, }, "quux");
    info!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, foo = 3, bar.baz = 2, quux = false);
    info!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, foo = 3, bar.baz = 3,);
    info!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, "foo");
    info!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, "foo: {}", 3);
    info!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, { foo = 3, bar.baz = 80 }, "quux");
    info!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
    info!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
    info!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, { foo = 2, bar.baz = 78, }, "quux");
}

#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test]
fn warn_root() {
    warn!(parent: ::core::option::Option::None, foo = ?3, bar.baz = %2, quux = false);
    warn!(
        parent: ::core::option::Option::None,
        foo = 3,
        bar.baz = 2,
        quux = false
    );
    warn!(parent: ::core::option::Option::None, foo = 3, bar.baz = 3,);
    warn!(parent: ::core::option::Option::None, "foo");
    warn!(parent: ::core::option::Option::None, "foo: {}", 3);
    warn!(parent: ::core::option::Option::None, { foo = 3, bar.baz = 80 }, "quux");
    warn!(parent: ::core::option::Option::None, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
    warn!(parent: ::core::option::Option::None, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
    warn!(parent: ::core::option::Option::None, { foo = 2, bar.baz = 78 }, "quux");
    warn!(parent: ::core::option::Option::None, { foo = ?2, bar.baz = %78 }, "quux");
    warn!(target: "foo_events", parent: ::core::option::Option::None, foo = 3, bar.baz = 2, quux = false);
    warn!(target: "foo_events", parent: ::core::option::Option::None, foo = 3, bar.baz = 3,);
    warn!(target: "foo_events", parent: ::core::option::Option::None, "foo");
    warn!(target: "foo_events", parent: ::core::option::Option::None, "foo: {}", 3);
    warn!(target: "foo_events", parent: ::core::option::Option::None, { foo = 3, bar.baz = 80 }, "quux");
    warn!(target: "foo_events", parent: ::core::option::Option::None, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
    warn!(target: "foo_events", parent: ::core::option::Option::None, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
    warn!(target: "foo_events", parent: ::core::option::Option::None, { foo = 2, bar.baz = 78, }, "quux");
    warn!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, foo = 3, bar.baz = 2, quux = false);
    warn!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, foo = 3, bar.baz = 3,);
    warn!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, "foo");
    warn!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, "foo: {}", 3);
    warn!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, { foo = 3, bar.baz = 80 }, "quux");
    warn!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
    warn!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
    warn!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, { foo = 2, bar.baz = 78, }, "quux");
}

#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test]
fn error_root() {
    error!(parent: ::core::option::Option::None, foo = ?3, bar.baz = %2, quux = false);
    error!(
        parent: ::core::option::Option::None,
        foo = 3,
        bar.baz = 2,
        quux = false
    );
    error!(parent: ::core::option::Option::None, foo = 3, bar.baz = 3,);
    error!(parent: ::core::option::Option::None, "foo");
    error!(parent: ::core::option::Option::None, "foo: {}", 3);
    error!(parent: ::core::option::Option::None, { foo = 3, bar.baz = 80 }, "quux");
    error!(parent: ::core::option::Option::None, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
    error!(parent: ::core::option::Option::None, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
    error!(parent: ::core::option::Option::None, { foo = 2, bar.baz = 78 }, "quux");
    error!(parent: ::core::option::Option::None, { foo = ?2, bar.baz = %78 }, "quux");
    error!(target: "foo_events", parent: ::core::option::Option::None, foo = 3, bar.baz = 2, quux = false);
    error!(target: "foo_events", parent: ::core::option::Option::None, foo = 3, bar.baz = 3,);
    error!(target: "foo_events", parent: ::core::option::Option::None, "foo");
    error!(target: "foo_events", parent: ::core::option::Option::None, "foo: {}", 3);
    error!(target: "foo_events", parent: ::core::option::Option::None, { foo = 3, bar.baz = 80 }, "quux");
    error!(target: "foo_events", parent: ::core::option::Option::None, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
    error!(target: "foo_events", parent: ::core::option::Option::None, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
    error!(target: "foo_events", parent: ::core::option::Option::None, { foo = 2, bar.baz = 78, }, "quux");
    error!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, foo = 3, bar.baz = 2, quux = false);
    error!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, foo = 3, bar.baz = 3,);
    error!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, "foo");
    error!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, "foo: {}", 3);
    error!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, { foo = 3, bar.baz = 80 }, "quux");
    error!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
    error!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
    error!(name: "foo", target: "foo_events", parent: ::core::option::Option::None, { foo = 2, bar.baz = 78, }, "quux");
}

#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test]
fn event_with_parent() {
    let p = span!(Level::TRACE, "im_a_parent!");
    event!(parent: &p, Level::DEBUG, foo = ?3, bar.baz = %2, quux = false);
    event!(parent: &p, Level::DEBUG, foo = 3, bar.baz = 2, quux = false);
    event!(parent: &p, Level::DEBUG, foo = 3, bar.baz = 3,);
    event!(parent: &p, Level::DEBUG, "foo");
    event!(parent: &p, Level::DEBUG, "foo: {}", 3);
    event!(parent: &p, Level::DEBUG, { foo = 3, bar.baz = 80 }, "quux");
    event!(parent: &p, Level::DEBUG, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
    event!(parent: &p, Level::DEBUG, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
    event!(parent: &p, Level::DEBUG, { foo = ?2, bar.baz = %78 }, "quux");
    event!(target: "foo_events", parent: &p, Level::DEBUG, foo = 3, bar.baz = 2, quux = false);
    event!(target: "foo_events", parent: &p, Level::DEBUG, foo = 3, bar.baz = 3,);
    event!(target: "foo_events", parent: &p, Level::DEBUG, "foo");
    event!(target: "foo_events", parent: &p, Level::DEBUG, "foo: {}", 3);
    event!(target: "foo_events", parent: &p, Level::DEBUG, { foo = 3, bar.baz = 80 }, "quux");
    event!(target: "foo_events", parent: &p, Level::DEBUG, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
    event!(target: "foo_events", parent: &p, Level::DEBUG, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
    event!(target: "foo_events", parent: &p, Level::DEBUG, { foo = 2, bar.baz = 78, }, "quux");
    event!(name: "foo", target: "foo_events", parent: &p, Level::DEBUG, foo = 3, bar.baz = 2, quux = false);
    event!(name: "foo", target: "foo_events", parent: &p, Level::DEBUG, foo = 3, bar.baz = 3,);
    event!(name: "foo", target: "foo_events", parent: &p, Level::DEBUG, "foo");
    event!(name: "foo", target: "foo_events", parent: &p, Level::DEBUG, "foo: {}", 3);
    event!(name: "foo", target: "foo_events", parent: &p, Level::DEBUG, { foo = 3, bar.baz = 80 }, "quux");
    event!(name: "foo", target: "foo_events", parent: &p, Level::DEBUG, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
    event!(name: "foo", target: "foo_events", parent: &p, Level::DEBUG, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
    event!(name: "foo", target: "foo_events", parent: &p, Level::DEBUG, { foo = 2, bar.baz = 78, }, "quux");
}

#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test]
fn trace_with_parent() {
    let p = span!(Level::TRACE, "im_a_parent!");
    trace!(parent: &p, foo = ?3, bar.baz = %2, quux = false);
    trace!(parent: &p, foo = 3, bar.baz = 2, quux = false);
    trace!(parent: &p, foo = 3, bar.baz = 3,);
    trace!(parent: &p, "foo");
    trace!(parent: &p, "foo: {}", 3);
    trace!(parent: &p, { foo = 3, bar.baz = 80 }, "quux");
    trace!(parent: &p, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
    trace!(parent: &p, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
    trace!(parent: &p, { foo = 2, bar.baz = 78 }, "quux");
    trace!(parent: &p, { foo = ?2, bar.baz = %78 }, "quux");
    trace!(target: "foo_events", parent: &p, foo = 3, bar.baz = 2, quux = false);
    trace!(target: "foo_events", parent: &p, foo = 3, bar.baz = 3,);
    trace!(target: "foo_events", parent: &p, "foo");
    trace!(target: "foo_events", parent: &p, "foo: {}", 3);
    trace!(target: "foo_events", parent: &p, { foo = 3, bar.baz = 80 }, "quux");
    trace!(target: "foo_events", parent: &p, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
    trace!(target: "foo_events", parent: &p, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
    trace!(target: "foo_events", parent: &p, { foo = 2, bar.baz = 78, }, "quux");
    trace!(name: "foo", target: "foo_events", parent: &p, foo = 3, bar.baz = 2, quux = false);
    trace!(name: "foo", target: "foo_events", parent: &p, foo = 3, bar.baz = 3,);
    trace!(name: "foo", target: "foo_events", parent: &p, "foo");
    trace!(name: "foo", target: "foo_events", parent: &p, "foo: {}", 3);
    trace!(name: "foo", target: "foo_events", parent: &p, { foo = 3, bar.baz = 80 }, "quux");
    trace!(name: "foo", target: "foo_events", parent: &p, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
    trace!(name: "foo", target: "foo_events", parent: &p, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
    trace!(name: "foo", target: "foo_events", parent: &p, { foo = 2, bar.baz = 78, }, "quux");
}

#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test]
fn debug_with_parent() {
    let p = span!(Level::TRACE, "im_a_parent!");
    debug!(parent: &p, foo = ?3, bar.baz = %2, quux = false);
    debug!(parent: &p, foo = 3, bar.baz = 2, quux = false);
    debug!(parent: &p, foo = 3, bar.baz = 3,);
    debug!(parent: &p, "foo");
    debug!(parent: &p, "foo: {}", 3);
    debug!(parent: &p, { foo = 3, bar.baz = 80 }, "quux");
    debug!(parent: &p, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
    debug!(parent: &p, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
    debug!(parent: &p, { foo = 2, bar.baz = 78 }, "quux");
    debug!(parent: &p, { foo = ?2, bar.baz = %78 }, "quux");
    debug!(target: "foo_events", parent: &p, foo = 3, bar.baz = 2, quux = false);
    debug!(target: "foo_events", parent: &p, foo = 3, bar.baz = 3,);
    debug!(target: "foo_events", parent: &p, "foo");
    debug!(target: "foo_events", parent: &p, "foo: {}", 3);
    debug!(target: "foo_events", parent: &p, { foo = 3, bar.baz = 80 }, "quux");
    debug!(target: "foo_events", parent: &p, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
    debug!(target: "foo_events", parent: &p, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
    debug!(target: "foo_events", parent: &p, { foo = 2, bar.baz = 78, }, "quux");
    debug!(name: "foo", target: "foo_events", parent: &p, foo = 3, bar.baz = 2, quux = false);
    debug!(name: "foo", target: "foo_events", parent: &p, foo = 3, bar.baz = 3,);
    debug!(name: "foo", target: "foo_events", parent: &p, "foo");
    debug!(name: "foo", target: "foo_events", parent: &p, "foo: {}", 3);
    debug!(name: "foo", target: "foo_events", parent: &p, { foo = 3, bar.baz = 80 }, "quux");
    debug!(name: "foo", target: "foo_events", parent: &p, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
    debug!(name: "foo", target: "foo_events", parent: &p, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
    debug!(name: "foo", target: "foo_events", parent: &p, { foo = 2, bar.baz = 78, }, "quux");
}

#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test]
fn info_with_parent() {
    let p = span!(Level::TRACE, "im_a_parent!");
    info!(parent: &p, foo = ?3, bar.baz = %2, quux = false);
    info!(parent: &p, foo = 3, bar.baz = 2, quux = false);
    info!(parent: &p, foo = 3, bar.baz = 3,);
    info!(parent: &p, "foo");
    info!(parent: &p, "foo: {}", 3);
    info!(parent: &p, { foo = 3, bar.baz = 80 }, "quux");
    info!(parent: &p, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
    info!(parent: &p, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
    info!(parent: &p, { foo = 2, bar.baz = 78 }, "quux");
    info!(parent: &p, { foo = ?2, bar.baz = %78 }, "quux");
    info!(target: "foo_events", parent: &p, foo = 3, bar.baz = 2, quux = false);
    info!(target: "foo_events", parent: &p, foo = 3, bar.baz = 3,);
    info!(target: "foo_events", parent: &p, "foo");
    info!(target: "foo_events", parent: &p, "foo: {}", 3);
    info!(target: "foo_events", parent: &p, { foo = 3, bar.baz = 80 }, "quux");
    info!(target: "foo_events", parent: &p, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
    info!(target: "foo_events", parent: &p, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
    info!(target: "foo_events", parent: &p, { foo = 2, bar.baz = 78, }, "quux");
    info!(name: "foo", target: "foo_events", parent: &p, foo = 3, bar.baz = 2, quux = false);
    info!(name: "foo", target: "foo_events", parent: &p, foo = 3, bar.baz = 3,);
    info!(name: "foo", target: "foo_events", parent: &p, "foo");
    info!(name: "foo", target: "foo_events", parent: &p, "foo: {}", 3);
    info!(name: "foo", target: "foo_events", parent: &p, { foo = 3, bar.baz = 80 }, "quux");
    info!(name: "foo", target: "foo_events", parent: &p, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
    info!(name: "foo", target: "foo_events", parent: &p, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
    info!(name: "foo", target: "foo_events", parent: &p, { foo = 2, bar.baz = 78, }, "quux");
}

#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test]
fn warn_with_parent() {
    let p = span!(Level::TRACE, "im_a_parent!");
    warn!(parent: &p, foo = ?3, bar.baz = %2, quux = false);
    warn!(parent: &p, foo = 3, bar.baz = 2, quux = false);
    warn!(parent: &p, foo = 3, bar.baz = 3,);
    warn!(parent: &p, "foo");
    warn!(parent: &p, "foo: {}", 3);
    warn!(parent: &p, { foo = 3, bar.baz = 80 }, "quux");
    warn!(parent: &p, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
    warn!(parent: &p, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
    warn!(parent: &p, { foo = 2, bar.baz = 78 }, "quux");
    warn!(parent: &p, { foo = ?2, bar.baz = %78 }, "quux");
    warn!(target: "foo_events", parent: &p, foo = 3, bar.baz = 2, quux = false);
    warn!(target: "foo_events", parent: &p, foo = 3, bar.baz = 3,);
    warn!(target: "foo_events", parent: &p, "foo");
    warn!(target: "foo_events", parent: &p, "foo: {}", 3);
    warn!(target: "foo_events", parent: &p, { foo = 3, bar.baz = 80 }, "quux");
    warn!(target: "foo_events", parent: &p, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
    warn!(target: "foo_events", parent: &p, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
    warn!(target: "foo_events", parent: &p, { foo = 2, bar.baz = 78, }, "quux");
    warn!(name: "foo", target: "foo_events", parent: &p, foo = 3, bar.baz = 2, quux = false);
    warn!(name: "foo", target: "foo_events", parent: &p, foo = 3, bar.baz = 3,);
    warn!(name: "foo", target: "foo_events", parent: &p, "foo");
    warn!(name: "foo", target: "foo_events", parent: &p, "foo: {}", 3);
    warn!(name: "foo", target: "foo_events", parent: &p, { foo = 3, bar.baz = 80 }, "quux");
    warn!(name: "foo", target: "foo_events", parent: &p, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
    warn!(name: "foo", target: "foo_events", parent: &p, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
    warn!(name: "foo", target: "foo_events", parent: &p, { foo = 2, bar.baz = 78, }, "quux");
}

#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test]
fn error_with_parent() {
    let p = span!(Level::TRACE, "im_a_parent!");
    error!(parent: &p, foo = ?3, bar.baz = %2, quux = false);
    error!(parent: &p, foo = 3, bar.baz = 2, quux = false);
    error!(parent: &p, foo = 3, bar.baz = 3,);
    error!(parent: &p, "foo");
    error!(parent: &p, "foo: {}", 3);
    error!(parent: &p, { foo = 3, bar.baz = 80 }, "quux");
    error!(parent: &p, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
    error!(parent: &p, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
    error!(parent: &p, { foo = 2, bar.baz = 78 }, "quux");
    error!(parent: &p, { foo = ?2, bar.baz = %78 }, "quux");
    error!(target: "foo_events", parent: &p, foo = 3, bar.baz = 2, quux = false);
    error!(target: "foo_events", parent: &p, foo = 3, bar.baz = 3,);
    error!(target: "foo_events", parent: &p, "foo");
    error!(target: "foo_events", parent: &p, "foo: {}", 3);
    error!(target: "foo_events", parent: &p, { foo = 3, bar.baz = 80 }, "quux");
    error!(target: "foo_events", parent: &p, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
    error!(target: "foo_events", parent: &p, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
    error!(target: "foo_events", parent: &p, { foo = 2, bar.baz = 78, }, "quux");
    error!(name: "foo", target: "foo_events", parent: &p, foo = 3, bar.baz = 2, quux = false);
    error!(name: "foo", target: "foo_events", parent: &p, foo = 3, bar.baz = 3,);
    error!(name: "foo", target: "foo_events", parent: &p, "foo");
    error!(name: "foo", target: "foo_events", parent: &p, "foo: {}", 3);
    error!(name: "foo", target: "foo_events", parent: &p, { foo = 3, bar.baz = 80 }, "quux");
    error!(name: "foo", target: "foo_events", parent: &p, { foo = 2, bar.baz = 79 }, "quux {:?}", true);
    error!(name: "foo", target: "foo_events", parent: &p, { foo = 2, bar.baz = 79 }, "quux {:?}, {quux}", true, quux = false);
    error!(name: "foo", target: "foo_events", parent: &p, { foo = 2, bar.baz = 78, }, "quux");
}

#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test]
fn field_shorthand_only() {
    #[derive(Debug)]
    struct Position {
        x: f32,
        y: f32,
    }
    let pos = Position {
        x: 3.234,
        y: -1.223,
    };

    trace!(?pos.x, ?pos.y);
    debug!(?pos.x, ?pos.y);
    info!(?pos.x, ?pos.y);
    warn!(?pos.x, ?pos.y);
    error!(?pos.x, ?pos.y);
    event!(Level::TRACE, ?pos.x, ?pos.y);
}

#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test]
fn borrow_val_events() {
    // Reproduces https://github.com/tokio-rs/tracing/issues/954
    let mut foo = (::std::string::String::new(), ::std::string::String::new());
    let zero = &mut foo.0;
    trace!(one = ?foo.1);
    debug!(one = ?foo.1);
    info!(one = ?foo.1);
    warn!(one = ?foo.1);
    error!(one = ?foo.1);
    zero.push_str("hello world");
}

#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test]
fn borrow_val_spans() {
    // Reproduces https://github.com/tokio-rs/tracing/issues/954
    let mut foo = (::std::string::String::new(), ::std::string::String::new());
    let zero = &mut foo.0;
    let _span = trace_span!("span", one = ?foo.1);
    let _span = debug_span!("span", one = ?foo.1);
    let _span = info_span!("span", one = ?foo.1);
    let _span = warn_span!("span", one = ?foo.1);
    let _span = error_span!("span", one = ?foo.1);
    zero.push_str("hello world");
}

#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test]
fn callsite_macro_api() {
    // This test should catch any inadvertent breaking changes
    // caused by changes to the macro.
    let _callsite = callsite! {
        name: "test callsite",
        kind: tracing::metadata::Kind::EVENT,
        target: "test target",
        level: tracing::Level::TRACE,
        fields: foo, bar,
    };
    let _callsite = callsite! {
        name: "test callsite",
        kind: tracing::metadata::Kind::SPAN,
        level: tracing::Level::TRACE,
        fields: foo,
    };
    let _callsite = callsite! {
        name: "test callsite",
        kind: tracing::metadata::Kind::SPAN,
        fields: foo,
    };
}

#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[test]
fn format_args_already_defined() {
    // Reproduces: https://github.com/tokio-rs/tracing/issues/2721
    #[allow(unused)]
    macro_rules! format_args {
        ($i:expr) => {};
    }
    event!(Level::DEBUG, "foo: {}", 3);
    trace!("foo: {}", 3);
    debug!("foo: {}", 3);
    info!("foo: {}", 3);
    warn!("foo: {}", 3);
    error!("foo: {}", 3);
}
