rustdoc-json: Add tests for fn qualifiers and ABI

This commit is contained in:
Nixon Enraght-Moony 2022-02-18 23:32:37 +00:00
parent aa601574a5
commit fd5adefce1
10 changed files with 184 additions and 78 deletions

View File

@ -0,0 +1,25 @@
// ignore-tidy-linelength
#![feature(abi_vectorcall)]
#![feature(c_unwind)]
// @is abi.json "$.index[*][?(@.name=='AbiRust')].inner.type.inner.header.abi" \"Rust\"
pub type AbiRust = fn();
// @is - "$.index[*][?(@.name=='AbiC')].inner.type.inner.header.abi" '{"C": {"unwind": false}}'
pub type AbiC = extern "C" fn();
// @is - "$.index[*][?(@.name=='AbiSystem')].inner.type.inner.header.abi" '{"System": {"unwind": false}}'
pub type AbiSystem = extern "system" fn();
// @is - "$.index[*][?(@.name=='AbiCUnwind')].inner.type.inner.header.abi" '{"C": {"unwind": true}}'
pub type AbiCUnwind = extern "C-unwind" fn();
// @is - "$.index[*][?(@.name=='AbiSystemUnwind')].inner.type.inner.header.abi" '{"System": {"unwind": true}}'
pub type AbiSystemUnwind = extern "system-unwind" fn();
// @is - "$.index[*][?(@.name=='AbiVecorcall')].inner.type.inner.header.abi.Other" '"\"vectorcall\""'
pub type AbiVecorcall = extern "vectorcall" fn();
// @is - "$.index[*][?(@.name=='AbiVecorcallUnwind')].inner.type.inner.header.abi.Other" '"\"vectorcall-unwind\""'
pub type AbiVecorcallUnwind = extern "vectorcall-unwind" fn();

View File

@ -1,5 +0,0 @@
// @has header.json "$.index[*][?(@.name=='FnPointer')].inner.type.inner.header" "[]"
pub type FnPointer = fn();
// @has - "$.index[*][?(@.name=='UnsafePointer')].inner.type.inner.header" '["unsafe"]'
pub type UnsafePointer = unsafe fn();

View File

@ -0,0 +1,9 @@
// @is qualifiers.json "$.index[*][?(@.name=='FnPointer')].inner.type.inner.header.unsafe" false
// @is - "$.index[*][?(@.name=='FnPointer')].inner.type.inner.header.const" false
// @is - "$.index[*][?(@.name=='FnPointer')].inner.type.inner.header.async" false
pub type FnPointer = fn();
// @is - "$.index[*][?(@.name=='UnsafePointer')].inner.type.inner.header.unsafe" true
// @is - "$.index[*][?(@.name=='UnsafePointer')].inner.type.inner.header.const" false
// @is - "$.index[*][?(@.name=='UnsafePointer')].inner.type.inner.header.async" false
pub type UnsafePointer = unsafe fn();

View File

@ -0,0 +1,25 @@
// ignore-tidy-linelength
#![feature(abi_vectorcall)]
#![feature(c_unwind)]
// @is abi.json "$.index[*][?(@.name=='abi_rust')].inner.header.abi" \"Rust\"
pub fn abi_rust() {}
// @is - "$.index[*][?(@.name=='abi_c')].inner.header.abi" '{"C": {"unwind": false}}'
pub extern "C" fn abi_c() {}
// @is - "$.index[*][?(@.name=='abi_system')].inner.header.abi" '{"System": {"unwind": false}}'
pub extern "system" fn abi_system() {}
// @is - "$.index[*][?(@.name=='abi_c_unwind')].inner.header.abi" '{"C": {"unwind": true}}'
pub extern "C-unwind" fn abi_c_unwind() {}
// @is - "$.index[*][?(@.name=='abi_system_unwind')].inner.header.abi" '{"System": {"unwind": true}}'
pub extern "system-unwind" fn abi_system_unwind() {}
// @is - "$.index[*][?(@.name=='abi_vectorcall')].inner.header.abi.Other" '"\"vectorcall\""'
pub extern "vectorcall" fn abi_vectorcall() {}
// @is - "$.index[*][?(@.name=='abi_vectorcall_unwind')].inner.header.abi.Other" '"\"vectorcall-unwind\""'
pub extern "vectorcall-unwind" fn abi_vectorcall_unwind() {}

View File

@ -1,22 +0,0 @@
// edition:2018
// @has header.json "$.index[*][?(@.name=='nothing_fn')].inner.header" "[]"
pub fn nothing_fn() {}
// @has - "$.index[*][?(@.name=='const_fn')].inner.header" '["const"]'
pub const fn const_fn() {}
// @has - "$.index[*][?(@.name=='async_fn')].inner.header" '["async"]'
pub async fn async_fn() {}
// @count - "$.index[*][?(@.name=='async_unsafe_fn')].inner.header[*]" 2
// @has - "$.index[*][?(@.name=='async_unsafe_fn')].inner.header[*]" '"async"'
// @has - "$.index[*][?(@.name=='async_unsafe_fn')].inner.header[*]" '"unsafe"'
pub async unsafe fn async_unsafe_fn() {}
// @count - "$.index[*][?(@.name=='const_unsafe_fn')].inner.header[*]" 2
// @has - "$.index[*][?(@.name=='const_unsafe_fn')].inner.header[*]" '"const"'
// @has - "$.index[*][?(@.name=='const_unsafe_fn')].inner.header[*]" '"unsafe"'
pub const unsafe fn const_unsafe_fn() {}
// It's impossible for a function to be both const and async, so no test for that

View File

@ -0,0 +1,33 @@
// edition:2018
// @is qualifiers.json "$.index[*][?(@.name=='nothing_fn')].inner.header.async" false
// @is - "$.index[*][?(@.name=='nothing_fn')].inner.header.const" false
// @is - "$.index[*][?(@.name=='nothing_fn')].inner.header.unsafe" false
pub fn nothing_fn() {}
// @is - "$.index[*][?(@.name=='unsafe_fn')].inner.header.async" false
// @is - "$.index[*][?(@.name=='unsafe_fn')].inner.header.const" false
// @is - "$.index[*][?(@.name=='unsafe_fn')].inner.header.unsafe" true
pub unsafe fn unsafe_fn() {}
// @is - "$.index[*][?(@.name=='const_fn')].inner.header.async" false
// @is - "$.index[*][?(@.name=='const_fn')].inner.header.const" true
// @is - "$.index[*][?(@.name=='const_fn')].inner.header.unsafe" false
pub const fn const_fn() {}
// @is - "$.index[*][?(@.name=='async_fn')].inner.header.async" true
// @is - "$.index[*][?(@.name=='async_fn')].inner.header.const" false
// @is - "$.index[*][?(@.name=='async_fn')].inner.header.unsafe" false
pub async fn async_fn() {}
// @is - "$.index[*][?(@.name=='async_unsafe_fn')].inner.header.async" true
// @is - "$.index[*][?(@.name=='async_unsafe_fn')].inner.header.const" false
// @is - "$.index[*][?(@.name=='async_unsafe_fn')].inner.header.unsafe" true
pub async unsafe fn async_unsafe_fn() {}
// @is - "$.index[*][?(@.name=='const_unsafe_fn')].inner.header.async" false
// @is - "$.index[*][?(@.name=='const_unsafe_fn')].inner.header.const" true
// @is - "$.index[*][?(@.name=='const_unsafe_fn')].inner.header.unsafe" true
pub const unsafe fn const_unsafe_fn() {}
// It's impossible for a function to be both const and async, so no test for that

View File

@ -1,25 +0,0 @@
// @has method_abi.json "$.index[*][?(@.name=='Foo')]"
pub struct Foo;
impl Foo {
// @has - "$.index[*][?(@.name=='abi_rust')].inner.abi" '"\"Rust\""'
pub fn abi_rust() {}
// @has - "$.index[*][?(@.name=='abi_c')].inner.abi" '"\"C\""'
pub extern "C" fn abi_c() {}
// @has - "$.index[*][?(@.name=='abi_system')].inner.abi" '"\"system\""'
pub extern "system" fn abi_system() {}
}
// @has method_abi.json "$.index[*][?(@.name=='Bar')]"
pub trait Bar {
// @has - "$.index[*][?(@.name=='trait_abi_rust')].inner.abi" '"\"Rust\""'
fn trait_abi_rust();
// @has - "$.index[*][?(@.name=='trait_abi_c')].inner.abi" '"\"C\""'
extern "C" fn trait_abi_c();
// @has - "$.index[*][?(@.name=='trait_abi_system')].inner.abi" '"\"system\""'
extern "system" fn trait_abi_system();
}

View File

@ -0,0 +1,55 @@
// ignore-tidy-linelength
#![feature(abi_vectorcall)]
#![feature(c_unwind)]
#![feature(no_core)]
#![no_core]
// @has abi.json "$.index[*][?(@.name=='Foo')]"
pub struct Foo;
impl Foo {
// @is - "$.index[*][?(@.name=='abi_rust')].inner.header.abi" \"Rust\"
pub fn abi_rust() {}
// @is - "$.index[*][?(@.name=='abi_c')].inner.header.abi" '{"C": {"unwind": false}}'
pub extern "C" fn abi_c() {}
// @is - "$.index[*][?(@.name=='abi_system')].inner.header.abi" '{"System": {"unwind": false}}'
pub extern "system" fn abi_system() {}
// @is - "$.index[*][?(@.name=='abi_c_unwind')].inner.header.abi" '{"C": {"unwind": true}}'
pub extern "C-unwind" fn abi_c_unwind() {}
// @is - "$.index[*][?(@.name=='abi_system_unwind')].inner.header.abi" '{"System": {"unwind": true}}'
pub extern "system-unwind" fn abi_system_unwind() {}
// @is - "$.index[*][?(@.name=='abi_vectorcall')].inner.header.abi.Other" '"\"vectorcall\""'
pub extern "vectorcall" fn abi_vectorcall() {}
// @is - "$.index[*][?(@.name=='abi_vectorcall_unwind')].inner.header.abi.Other" '"\"vectorcall-unwind\""'
pub extern "vectorcall-unwind" fn abi_vectorcall_unwind() {}
}
pub trait Bar {
// @is - "$.index[*][?(@.name=='trait_abi_rust')].inner.header.abi" \"Rust\"
fn trait_abi_rust() {}
// @is - "$.index[*][?(@.name=='trait_abi_c')].inner.header.abi" '{"C": {"unwind": false}}'
extern "C" fn trait_abi_c() {}
// @is - "$.index[*][?(@.name=='trait_abi_system')].inner.header.abi" '{"System": {"unwind": false}}'
extern "system" fn trait_abi_system() {}
// @is - "$.index[*][?(@.name=='trait_abi_c_unwind')].inner.header.abi" '{"C": {"unwind": true}}'
extern "C-unwind" fn trait_abi_c_unwind() {}
// @is - "$.index[*][?(@.name=='trait_abi_system_unwind')].inner.header.abi" '{"System": {"unwind": true}}'
extern "system-unwind" fn trait_abi_system_unwind() {}
// @is - "$.index[*][?(@.name=='trait_abi_vectorcall')].inner.header.abi.Other" '"\"vectorcall\""'
extern "vectorcall" fn trait_abi_vectorcall() {}
// @is - "$.index[*][?(@.name=='trait_abi_vectorcall_unwind')].inner.header.abi.Other" '"\"vectorcall-unwind\""'
extern "vectorcall-unwind" fn trait_abi_vectorcall_unwind() {}
}

View File

@ -1,26 +0,0 @@
// edition:2018
pub struct Foo;
impl Foo {
// @has header.json "$.index[*][?(@.name=='nothing_meth')].inner.header" "[]"
pub fn nothing_meth() {}
// @has - "$.index[*][?(@.name=='const_meth')].inner.header" '["const"]'
pub const fn const_meth() {}
// @has - "$.index[*][?(@.name=='async_meth')].inner.header" '["async"]'
pub async fn async_meth() {}
// @count - "$.index[*][?(@.name=='async_unsafe_meth')].inner.header[*]" 2
// @has - "$.index[*][?(@.name=='async_unsafe_meth')].inner.header[*]" '"async"'
// @has - "$.index[*][?(@.name=='async_unsafe_meth')].inner.header[*]" '"unsafe"'
pub async unsafe fn async_unsafe_meth() {}
// @count - "$.index[*][?(@.name=='const_unsafe_meth')].inner.header[*]" 2
// @has - "$.index[*][?(@.name=='const_unsafe_meth')].inner.header[*]" '"const"'
// @has - "$.index[*][?(@.name=='const_unsafe_meth')].inner.header[*]" '"unsafe"'
pub const unsafe fn const_unsafe_meth() {}
// It's impossible for a method to be both const and async, so no test for that
}

View File

@ -0,0 +1,37 @@
// edition:2018
pub struct Foo;
impl Foo {
// @is qualifiers.json "$.index[*][?(@.name=='const_meth')].inner.header.async" false
// @is - "$.index[*][?(@.name=='const_meth')].inner.header.const" true
// @is - "$.index[*][?(@.name=='const_meth')].inner.header.unsafe" false
pub const fn const_meth() {}
// @is - "$.index[*][?(@.name=='nothing_meth')].inner.header.async" false
// @is - "$.index[*][?(@.name=='nothing_meth')].inner.header.const" false
// @is - "$.index[*][?(@.name=='nothing_meth')].inner.header.unsafe" false
pub fn nothing_meth() {}
// @is - "$.index[*][?(@.name=='unsafe_meth')].inner.header.async" false
// @is - "$.index[*][?(@.name=='unsafe_meth')].inner.header.const" false
// @is - "$.index[*][?(@.name=='unsafe_meth')].inner.header.unsafe" true
pub unsafe fn unsafe_meth() {}
// @is - "$.index[*][?(@.name=='async_meth')].inner.header.async" true
// @is - "$.index[*][?(@.name=='async_meth')].inner.header.const" false
// @is - "$.index[*][?(@.name=='async_meth')].inner.header.unsafe" false
pub async fn async_meth() {}
// @is - "$.index[*][?(@.name=='async_unsafe_meth')].inner.header.async" true
// @is - "$.index[*][?(@.name=='async_unsafe_meth')].inner.header.const" false
// @is - "$.index[*][?(@.name=='async_unsafe_meth')].inner.header.unsafe" true
pub async unsafe fn async_unsafe_meth() {}
// @is - "$.index[*][?(@.name=='const_unsafe_meth')].inner.header.async" false
// @is - "$.index[*][?(@.name=='const_unsafe_meth')].inner.header.const" true
// @is - "$.index[*][?(@.name=='const_unsafe_meth')].inner.header.unsafe" true
pub const unsafe fn const_unsafe_meth() {}
// It's impossible for a method to be both const and async, so no test for that
}