#![feature(staged_api)]
#![feature(rustc_attrs)]
#![feature(rustdoc_internals)]

#![stable(feature = "core", since = "1.6.0")]

//@ has stability/index.html
//@ has - '//ul[@class="item-table"]/li[1]//a' AaStable
//@ has - '//ul[@class="item-table"]/li[2]//a' ZzStable
//@ has - '//ul[@class="item-table"]/li[3]//a' Unstable

#[stable(feature = "rust2", since = "2.2.2")]
pub struct AaStable;

#[unstable(feature = "test", issue = "none")]
pub struct Unstable {
    //@ has stability/struct.Unstable.html \
    //      '//span[@class="item-info"]//div[@class="stab unstable"]' \
    //      'This is a nightly-only experimental API'
    //@ count stability/struct.Unstable.html '//span[@class="stab unstable"]' 0
    pub foo: u32,
    pub bar: u32,
}

#[stable(feature = "rust2", since = "2.2.2")]
pub struct ZzStable;

#[unstable(feature = "unstable", issue = "none")]
pub mod unstable {
    //@ !hasraw stability/unstable/struct.StableInUnstable.html \
    //      '//div[@class="main-heading"]//span[@class="since"]'
    //@ has - '//div[@class="stab unstable"]' 'experimental'
    #[stable(feature = "rust1", since = "1.0.0")]
    pub struct StableInUnstable;

    #[stable(feature = "rust1", since = "1.0.0")]
    pub mod stable_in_unstable {
        //@ !hasraw stability/unstable/stable_in_unstable/struct.Inner.html \
        //      '//div[@class="main-heading"]//span[@class="since"]'
        //@ has - '//div[@class="stab unstable"]' 'experimental'
        #[stable(feature = "rust1", since = "1.0.0")]
        pub struct Inner;
    }

    //@ has stability/struct.AaStable.html \
    //      '//*[@id="method.foo"]//span[@class="since"]' '2.2.2'
    impl super::AaStable {
        #[stable(feature = "rust2", since = "2.2.2")]
        pub fn foo() {}
    }

    //@ has stability/unstable/struct.StableInUnstable.html \
    //      '//*[@id="method.foo"]//span[@class="since"]' '1.0.0'
    impl StableInUnstable {
        #[stable(feature = "rust1", since = "1.0.0")]
        pub fn foo() {}
    }
}

#[unstable(feature = "unstable", issue = "none")]
#[doc(hidden)]
pub mod unstable_stripped {
    //@ has stability/struct.AaStable.html \
    //      '//*[@id="method.foo"]//span[@class="since"]' '2.2.2'
    impl super::AaStable {
        #[stable(feature = "rust2", since = "2.2.2")]
        pub fn foo() {}
    }
}

#[stable(feature = "rust2", since = "2.2.2")]
pub mod stable_later {
    //@ has stability/stable_later/struct.StableInLater.html \
    //      '//div[@class="main-heading"]//span[@class="since"]' '2.2.2'
    #[stable(feature = "rust1", since = "1.0.0")]
    pub struct StableInLater;

    #[stable(feature = "rust1", since = "1.0.0")]
    pub mod stable_in_later {
        //@ has stability/stable_later/stable_in_later/struct.Inner.html \
        //      '//div[@class="main-heading"]//span[@class="since"]' '2.2.2'
        #[stable(feature = "rust1", since = "1.0.0")]
        pub struct Inner;
    }
}

#[stable(feature = "rust1", since = "1.0.0")]
#[rustc_allowed_through_unstable_modules]
pub mod stable_earlier1 {
    //@ has stability/stable_earlier1/struct.StableInUnstable.html \
    //      '//div[@class="main-heading"]//span[@class="since"]' '1.0.0'
    //@ has - '//*[@id="method.foo"]//span[@class="since"]' '1.0.0'
    #[doc(inline)]
    #[stable(feature = "rust1", since = "1.0.0")]
    pub use crate::unstable::StableInUnstable;

    //@ has stability/stable_earlier1/stable_in_unstable/struct.Inner.html \
    //      '//div[@class="main-heading"]//span[@class="since"]' '1.0.0'
    #[doc(inline)]
    #[stable(feature = "rust1", since = "1.0.0")]
    pub use crate::unstable::stable_in_unstable;

    //@ has stability/stable_earlier1/struct.StableInLater.html \
    //      '//div[@class="main-heading"]//span[@class="since"]' '1.0.0'
    #[doc(inline)]
    #[stable(feature = "rust1", since = "1.0.0")]
    pub use crate::stable_later::StableInLater;

    //@ has stability/stable_earlier1/stable_in_later/struct.Inner.html \
    //      '//div[@class="main-heading"]//span[@class="since"]' '1.0.0'
    #[doc(inline)]
    #[stable(feature = "rust1", since = "1.0.0")]
    pub use crate::stable_later::stable_in_later;
}

/// These will inherit the crate stability.
#[stable(feature = "rust1", since = "1.0.0")]
pub mod stable_earlier2 {
    //@ has stability/stable_earlier2/struct.StableInUnstable.html \
    //      '//div[@class="main-heading"]//span[@class="since"]' '1.6.0'
    //@ has - '//*[@id="method.foo"]//span[@class="since"]' '1.0.0'
    #[doc(inline)]
    #[stable(feature = "rust1", since = "1.0.0")]
    pub use crate::unstable::StableInUnstable;

    //@ has stability/stable_earlier2/stable_in_unstable/struct.Inner.html \
    //      '//div[@class="main-heading"]//span[@class="since"]' '1.6.0'
    #[doc(inline)]
    #[stable(feature = "rust1", since = "1.0.0")]
    pub use crate::unstable::stable_in_unstable;

    //@ has stability/stable_earlier2/struct.StableInLater.html \
    //      '//div[@class="main-heading"]//span[@class="since"]' '1.6.0'
    #[doc(inline)]
    #[stable(feature = "rust1", since = "1.0.0")]
    pub use crate::stable_later::StableInLater;

    //@ has stability/stable_earlier2/stable_in_later/struct.Inner.html \
    //      '//div[@class="main-heading"]//span[@class="since"]' '1.6.0'
    #[doc(inline)]
    #[stable(feature = "rust1", since = "1.0.0")]
    pub use crate::stable_later::stable_in_later;
}

//@ !hasraw stability/trait.UnstableTraitWithStableMethod.html \
//      '//div[@class="main-heading"]//span[@class="since"]'
//@ has - '//*[@id="tymethod.foo"]//span[@class="since"]' '1.0.0'
//@ has - '//*[@id="method.bar"]//span[@class="since"]' '1.0.0'
#[unstable(feature = "unstable", issue = "none")]
pub trait UnstableTraitWithStableMethod {
    #[stable(feature = "rust1", since = "1.0.0")]
    fn foo();
    #[stable(feature = "rust1", since = "1.0.0")]
    fn bar() {}
}

//@ has stability/primitive.i32.html \
//      '//div[@class="main-heading"]//span[@class="since"]' '1.0.0'
#[rustc_doc_primitive = "i32"]
//
/// `i32` is always stable in 1.0, even if you look at it from core.
#[stable(feature = "rust1", since = "1.0.0")]
mod prim_i32 {}

//@ has stability/keyword.if.html \
//      '//div[@class="main-heading"]//span[@class="since"]' '1.0.0'
#[doc(keyword = "if")]
//
/// We currently don't document stability for keywords, but let's test it anyway.
#[stable(feature = "rust1", since = "1.0.0")]
mod if_keyword {}
