diff options
Diffstat (limited to 'tests/rustdoc-js-std')
46 files changed, 2499 insertions, 0 deletions
diff --git a/tests/rustdoc-js-std/alias-1.js b/tests/rustdoc-js-std/alias-1.js new file mode 100644 index 00000000000..b27b3da2179 --- /dev/null +++ b/tests/rustdoc-js-std/alias-1.js @@ -0,0 +1,6 @@ +const EXPECTED = { + 'query': '&', + 'others': [ + { 'path': 'std', 'name': 'reference' }, + ], +}; diff --git a/tests/rustdoc-js-std/alias-2.js b/tests/rustdoc-js-std/alias-2.js new file mode 100644 index 00000000000..5735b573bcb --- /dev/null +++ b/tests/rustdoc-js-std/alias-2.js @@ -0,0 +1,9 @@ +const EXPECTED = { + 'query': '+', + 'others': [ + { 'path': 'std::ops', 'name': 'AddAssign' }, + { 'path': 'std::ops', 'name': 'Add' }, + { 'path': 'core::ops', 'name': 'AddAssign' }, + { 'path': 'core::ops', 'name': 'Add' }, + ], +}; diff --git a/tests/rustdoc-js-std/alias-3.js b/tests/rustdoc-js-std/alias-3.js new file mode 100644 index 00000000000..ed3776b3c2a --- /dev/null +++ b/tests/rustdoc-js-std/alias-3.js @@ -0,0 +1,6 @@ +const EXPECTED = { + 'query': '!', + 'others': [ + { 'path': 'std', 'name': 'never' }, + ], +}; diff --git a/tests/rustdoc-js-std/alias-4.js b/tests/rustdoc-js-std/alias-4.js new file mode 100644 index 00000000000..35840a472c1 --- /dev/null +++ b/tests/rustdoc-js-std/alias-4.js @@ -0,0 +1,6 @@ +const EXPECTED = { + 'query': '<', + 'others': [ + { 'name': 'Ord' }, + ], +}; diff --git a/tests/rustdoc-js-std/alias.js b/tests/rustdoc-js-std/alias.js new file mode 100644 index 00000000000..bf707fa03dc --- /dev/null +++ b/tests/rustdoc-js-std/alias.js @@ -0,0 +1,10 @@ +// ignore-order + +const EXPECTED = { + 'query': '[', + 'others': [ + { 'path': 'std', 'name': 'slice' }, + { 'path': 'std::ops', 'name': 'IndexMut' }, + { 'path': 'std::ops', 'name': 'Index' }, + ], +}; diff --git a/tests/rustdoc-js-std/asrawfd.js b/tests/rustdoc-js-std/asrawfd.js new file mode 100644 index 00000000000..5b3cfeabbcd --- /dev/null +++ b/tests/rustdoc-js-std/asrawfd.js @@ -0,0 +1,13 @@ +// ignore-order + +const EXPECTED = { + 'query': 'RawFd::as_raw_fd', + 'others': [ + // Reproduction test for https://github.com/rust-lang/rust/issues/78724 + // Validate that type alias methods get the correct path. + { 'path': 'std::os::fd::AsRawFd', 'name': 'as_raw_fd' }, + { 'path': 'std::os::fd::AsRawFd', 'name': 'as_raw_fd' }, + { 'path': 'std::os::linux::process::PidFd', 'name': 'as_raw_fd' }, + { 'path': 'std::os::fd::RawFd', 'name': 'as_raw_fd' }, + ], +}; diff --git a/tests/rustdoc-js-std/basic.js b/tests/rustdoc-js-std/basic.js new file mode 100644 index 00000000000..baff24b0af6 --- /dev/null +++ b/tests/rustdoc-js-std/basic.js @@ -0,0 +1,14 @@ +const EXPECTED = { + 'query': 'String', + 'others': [ + { 'path': 'std::string', 'name': 'String' }, + { 'path': 'std::ffi', 'name': 'CString' }, + { 'path': 'std::ffi', 'name': 'OsString' }, + ], + 'in_args': [ + { 'path': 'std::str', 'name': 'eq' }, + ], + 'returned': [ + { 'path': 'std::string::String', 'name': 'add' }, + ], +}; diff --git a/tests/rustdoc-js-std/bufread-fill-buf.js b/tests/rustdoc-js-std/bufread-fill-buf.js new file mode 100644 index 00000000000..3828cf76026 --- /dev/null +++ b/tests/rustdoc-js-std/bufread-fill-buf.js @@ -0,0 +1,13 @@ +// ignore-order + +const EXPECTED = [ + { + 'query': 'bufread -> result<u8>', + 'others': [ + { 'path': 'std::io::Split', 'name': 'next' }, + { 'path': 'std::boxed::Box', 'name': 'fill_buf' }, + { 'path': 'std::io::Chain', 'name': 'fill_buf' }, + { 'path': 'std::io::Take', 'name': 'fill_buf' }, + ], + }, +]; diff --git a/tests/rustdoc-js-std/deduplication.js b/tests/rustdoc-js-std/deduplication.js new file mode 100644 index 00000000000..51279dd5ed4 --- /dev/null +++ b/tests/rustdoc-js-std/deduplication.js @@ -0,0 +1,10 @@ +// ignore-order + +const EXPECTED = { + 'query': 'is_nan', + 'others': [ + { 'path': 'std::f32', 'name': 'is_nan' }, + { 'path': 'std::f64', 'name': 'is_nan' }, + { 'path': 'std::option::Option', 'name': 'is_none' }, + ], +}; diff --git a/tests/rustdoc-js-std/enum-option.js b/tests/rustdoc-js-std/enum-option.js new file mode 100644 index 00000000000..216dafe3b12 --- /dev/null +++ b/tests/rustdoc-js-std/enum-option.js @@ -0,0 +1,6 @@ +const EXPECTED = { + 'query': 'enum:Option', + 'others': [ + { 'path': 'std::option', 'name': 'Option' }, + ], +}; diff --git a/tests/rustdoc-js-std/filter-crate.js b/tests/rustdoc-js-std/filter-crate.js new file mode 100644 index 00000000000..95f2969d299 --- /dev/null +++ b/tests/rustdoc-js-std/filter-crate.js @@ -0,0 +1,9 @@ +// exact-check + +const FILTER_CRATE = 'core'; + +const EXPECTED = { + 'query': 'hashmap', + 'others': [ + ], +}; diff --git a/tests/rustdoc-js-std/fn-forget.js b/tests/rustdoc-js-std/fn-forget.js new file mode 100644 index 00000000000..addecf4e44f --- /dev/null +++ b/tests/rustdoc-js-std/fn-forget.js @@ -0,0 +1,7 @@ +const EXPECTED = { + 'query': 'fn:forget', + 'others': [ + { 'path': 'std::mem', 'name': 'forget' }, + { 'path': 'std::fmt', 'name': 'format' }, + ], +}; diff --git a/tests/rustdoc-js-std/from_u.js b/tests/rustdoc-js-std/from_u.js new file mode 100644 index 00000000000..7c9375ba529 --- /dev/null +++ b/tests/rustdoc-js-std/from_u.js @@ -0,0 +1,8 @@ +const EXPECTED = { + 'query': 'from_u', + 'others': [ + { 'path': 'std::char', 'name': 'from_u32' }, + { 'path': 'std::str', 'name': 'from_utf8' }, + { 'path': 'std::string::String', 'name': 'from_utf8' }, + ], +}; diff --git a/tests/rustdoc-js-std/full-path-function.js b/tests/rustdoc-js-std/full-path-function.js new file mode 100644 index 00000000000..ac157b3aadf --- /dev/null +++ b/tests/rustdoc-js-std/full-path-function.js @@ -0,0 +1,7 @@ +const EXPECTED = { + 'query': 'vec::vec -> usize', + 'others': [ + { 'path': 'std::vec::Vec', 'name': 'len' }, + { 'path': 'std::vec::Vec', 'name': 'capacity' }, + ], +}; diff --git a/tests/rustdoc-js-std/keyword.js b/tests/rustdoc-js-std/keyword.js new file mode 100644 index 00000000000..b85ba34138b --- /dev/null +++ b/tests/rustdoc-js-std/keyword.js @@ -0,0 +1,9 @@ +// ignore-order + +const EXPECTED = { + 'query': 'fn', + 'others': [ + { 'path': 'std', 'name': 'fn', ty: 15 }, // 15 is for primitive types + { 'path': 'std', 'name': 'fn', ty: 21 }, // 21 is for keywords + ], +}; diff --git a/tests/rustdoc-js-std/macro-check.js b/tests/rustdoc-js-std/macro-check.js new file mode 100644 index 00000000000..c22b1753fd7 --- /dev/null +++ b/tests/rustdoc-js-std/macro-check.js @@ -0,0 +1,9 @@ +// ignore-order + +const EXPECTED = { + 'query': 'panic', + 'others': [ + { 'path': 'std', 'name': 'panic', ty: 14 }, // 15 is for macros + { 'path': 'std', 'name': 'panic', ty: 0 }, // 0 is for modules + ], +}; diff --git a/tests/rustdoc-js-std/macro-print.js b/tests/rustdoc-js-std/macro-print.js new file mode 100644 index 00000000000..2ef1c89e49b --- /dev/null +++ b/tests/rustdoc-js-std/macro-print.js @@ -0,0 +1,9 @@ +const EXPECTED = { + 'query': 'macro:print', + 'others': [ + { 'path': 'std', 'name': 'print' }, + { 'path': 'std', 'name': 'println' }, + { 'path': 'std', 'name': 'eprint' }, + { 'path': 'std', 'name': 'eprintln' }, + ], +}; diff --git a/tests/rustdoc-js-std/never.js b/tests/rustdoc-js-std/never.js new file mode 100644 index 00000000000..27d415b5e48 --- /dev/null +++ b/tests/rustdoc-js-std/never.js @@ -0,0 +1,14 @@ +const EXPECTED = [ + { + 'query': '!', + 'others': [ + { 'path': 'std', 'name': 'never' }, + ], + }, + { + 'query': '!::clone', + 'others': [ + { 'path': 'std::never', 'name': 'clone' }, + ], + }, +]; diff --git a/tests/rustdoc-js-std/option-type-signatures.js b/tests/rustdoc-js-std/option-type-signatures.js new file mode 100644 index 00000000000..e154fa707ab --- /dev/null +++ b/tests/rustdoc-js-std/option-type-signatures.js @@ -0,0 +1,84 @@ +// ignore-order + +const FILTER_CRATE = "std"; + +const EXPECTED = [ + { + 'query': 'option, fnonce -> option', + 'others': [ + { 'path': 'std::option::Option', 'name': 'map' }, + ], + }, + { + 'query': 'option -> default', + 'others': [ + { 'path': 'std::option::Option', 'name': 'unwrap_or_default' }, + { 'path': 'std::option::Option', 'name': 'get_or_insert_default' }, + ], + }, + { + 'query': 'option -> []', + 'others': [ + { 'path': 'std::option::Option', 'name': 'as_slice' }, + { 'path': 'std::option::Option', 'name': 'as_mut_slice' }, + ], + }, + { + 'query': 'option<t>, option<t> -> option<t>', + 'others': [ + { 'path': 'std::option::Option', 'name': 'or' }, + { 'path': 'std::option::Option', 'name': 'xor' }, + ], + }, + { + 'query': 'option<t>, option<u> -> option<u>', + 'others': [ + { 'path': 'std::option::Option', 'name': 'and' }, + { 'path': 'std::option::Option', 'name': 'zip' }, + ], + }, + { + 'query': 'option<t>, option<u> -> option<t>', + 'others': [ + { 'path': 'std::option::Option', 'name': 'and' }, + { 'path': 'std::option::Option', 'name': 'zip' }, + ], + }, + { + 'query': 'option<t>, option<u> -> option<t, u>', + 'others': [ + { 'path': 'std::option::Option', 'name': 'zip' }, + ], + }, + { + 'query': 'option<t>, e -> result<t, e>', + 'others': [ + { 'path': 'std::option::Option', 'name': 'ok_or' }, + { 'path': 'std::result::Result', 'name': 'transpose' }, + ], + }, + { + 'query': 'result<option<t>, e> -> option<result<t, e>>', + 'others': [ + { 'path': 'std::result::Result', 'name': 'transpose' }, + ], + }, + { + 'query': 'option<t>, option<t> -> bool', + 'others': [ + { 'path': 'std::option::Option', 'name': 'eq' }, + ], + }, + { + 'query': 'option<option<t>> -> option<t>', + 'others': [ + { 'path': 'std::option::Option', 'name': 'flatten' }, + ], + }, + { + 'query': 'option<t>', + 'returned': [ + { 'path': 'std::result::Result', 'name': 'ok' }, + ], + }, +]; diff --git a/tests/rustdoc-js-std/osstring-to-string.js b/tests/rustdoc-js-std/osstring-to-string.js new file mode 100644 index 00000000000..17bb602a502 --- /dev/null +++ b/tests/rustdoc-js-std/osstring-to-string.js @@ -0,0 +1,9 @@ +// exact-match + +// https://github.com/rust-lang/rust/issues/60485#issuecomment-663900624 +const EXPECTED = { + 'query': 'OsString -> String', + 'others': [ + { 'path': 'std::ffi::OsString', 'name': 'into_string' }, + ] +}; diff --git a/tests/rustdoc-js-std/parser-errors.js b/tests/rustdoc-js-std/parser-errors.js new file mode 100644 index 00000000000..b32bfea5439 --- /dev/null +++ b/tests/rustdoc-js-std/parser-errors.js @@ -0,0 +1,547 @@ +const PARSED = [ + { + query: '<P>', + elems: [], + foundElems: 0, + original: "<P>", + returned: [], + userQuery: "<p>", + error: "Found generics without a path", + }, + { + query: '-> <P>', + elems: [], + foundElems: 0, + original: "-> <P>", + returned: [], + userQuery: "-> <p>", + error: "Found generics without a path", + }, + { + query: 'a<"P">', + elems: [], + foundElems: 0, + original: "a<\"P\">", + returned: [], + userQuery: "a<\"p\">", + error: "Unexpected `\"` in generics", + }, + { + query: '"P" "P"', + elems: [], + foundElems: 0, + original: "\"P\" \"P\"", + returned: [], + userQuery: "\"p\" \"p\"", + error: "Cannot have more than one element if you use quotes", + }, + { + query: '"P","P"', + elems: [], + foundElems: 0, + original: "\"P\",\"P\"", + returned: [], + userQuery: "\"p\",\"p\"", + error: "Cannot have more than one literal search element", + }, + { + query: "P,\"P\"", + elems: [], + foundElems: 0, + original: "P,\"P\"", + returned: [], + userQuery: "p,\"p\"", + error: "Cannot use literal search when there is more than one element", + }, + { + query: '"p" p', + elems: [], + foundElems: 0, + original: "\"p\" p", + returned: [], + userQuery: "\"p\" p", + error: "Cannot have more than one element if you use quotes", + }, + { + query: '"p",p', + elems: [], + foundElems: 0, + original: "\"p\",p", + returned: [], + userQuery: "\"p\",p", + error: "Cannot have more than one element if you use quotes", + }, + { + query: '"const": p', + elems: [], + foundElems: 0, + original: "\"const\": p", + returned: [], + userQuery: "\"const\": p", + error: "Cannot use quotes on type filter", + }, + { + query: "a<:a>", + elems: [], + foundElems: 0, + original: "a<:a>", + returned: [], + userQuery: "a<:a>", + error: "Expected type filter before `:`", + }, + { + query: "a<::a>", + elems: [], + foundElems: 0, + original: "a<::a>", + returned: [], + userQuery: "a<::a>", + error: "Unexpected `::`: paths cannot start with `::`", + }, + { + query: "((a))", + elems: [], + foundElems: 0, + original: "((a))", + returned: [], + userQuery: "((a))", + error: "Unexpected `(`", + }, + { + query: "(p -> p", + elems: [], + foundElems: 0, + original: "(p -> p", + returned: [], + userQuery: "(p -> p", + error: "Unexpected `(`", + }, + { + query: "::a::b", + elems: [], + foundElems: 0, + original: "::a::b", + returned: [], + userQuery: "::a::b", + error: "Paths cannot start with `::`", + }, + { + query: " ::a::b", + elems: [], + foundElems: 0, + original: "::a::b", + returned: [], + userQuery: "::a::b", + error: "Paths cannot start with `::`", + }, + { + query: "a::::b", + elems: [], + foundElems: 0, + original: "a::::b", + returned: [], + userQuery: "a::::b", + error: "Unexpected `::::`", + }, + { + query: "a::b::", + elems: [], + foundElems: 0, + original: "a::b::", + returned: [], + userQuery: "a::b::", + error: "Paths cannot end with `::`", + }, + { + query: ":a", + elems: [], + foundElems: 0, + original: ":a", + returned: [], + userQuery: ":a", + error: "Expected type filter before `:`", + }, + { + query: "a,b:", + elems: [], + foundElems: 0, + original: "a,b:", + returned: [], + userQuery: "a,b:", + error: "Unexpected `:` (expected path after type filter `b:`)", + }, + { + query: "a (b:", + elems: [], + foundElems: 0, + original: "a (b:", + returned: [], + userQuery: "a (b:", + error: "Unexpected `(`", + }, + { + query: "_:", + elems: [], + foundElems: 0, + original: "_:", + returned: [], + userQuery: "_:", + error: "Unexpected `:` (expected path after type filter `_:`)", + }, + { + query: "_:a", + elems: [], + foundElems: 0, + original: "_:a", + returned: [], + userQuery: "_:a", + error: "Unknown type filter `_`", + }, + { + query: "a-bb", + elems: [], + foundElems: 0, + original: "a-bb", + returned: [], + userQuery: "a-bb", + error: "Unexpected `-` (did you mean `->`?)", + }, + { + query: "a>bb", + elems: [], + foundElems: 0, + original: "a>bb", + returned: [], + userQuery: "a>bb", + error: "Unexpected `>` (did you mean `->`?)", + }, + { + query: "ab'", + elems: [], + foundElems: 0, + original: "ab'", + returned: [], + userQuery: "ab'", + error: "Unexpected `'`", + }, + { + query: "a->", + elems: [], + foundElems: 0, + original: "a->", + returned: [], + userQuery: "a->", + error: "Expected at least one item after `->`", + }, + { + query: '"p" <a>', + elems: [], + foundElems: 0, + original: '"p" <a>', + returned: [], + userQuery: '"p" <a>', + error: "Cannot have more than one element if you use quotes", + }, + { + query: '"p",<a>', + elems: [], + foundElems: 0, + original: '"p",<a>', + returned: [], + userQuery: '"p",<a>', + error: "Found generics without a path", + }, + { + query: '"p" a<a>', + elems: [], + foundElems: 0, + original: '"p" a<a>', + returned: [], + userQuery: '"p" a<a>', + error: "Cannot have more than one element if you use quotes", + }, + { + query: '"p",a<a>', + elems: [], + foundElems: 0, + original: '"p",a<a>', + returned: [], + userQuery: '"p",a<a>', + error: "Cannot have more than one element if you use quotes", + }, + { + query: "a,<", + elems: [], + foundElems: 0, + original: 'a,<', + returned: [], + userQuery: 'a,<', + error: 'Found generics without a path', + }, + { + query: "aaaaa<>b", + elems: [], + foundElems: 0, + original: 'aaaaa<>b', + returned: [], + userQuery: 'aaaaa<>b', + error: 'Expected `,`, `:` or `->` after `>`, found `b`', + }, + { + query: "fn:aaaaa<>b", + elems: [], + foundElems: 0, + original: 'fn:aaaaa<>b', + returned: [], + userQuery: 'fn:aaaaa<>b', + error: 'Expected `,`, `:` or `->` after `>`, found `b`', + }, + { + query: "->a<>b", + elems: [], + foundElems: 0, + original: '->a<>b', + returned: [], + userQuery: '->a<>b', + error: 'Expected `,` after `>`, found `b`', + }, + { + query: "a<->", + elems: [], + foundElems: 0, + original: 'a<->', + returned: [], + userQuery: 'a<->', + error: 'Unexpected `-` after `<`', + }, + { + query: "a:: a", + elems: [], + foundElems: 0, + original: 'a:: a', + returned: [], + userQuery: 'a:: a', + error: 'Unexpected `:: `', + }, + { + query: "a ::a", + elems: [], + foundElems: 0, + original: 'a ::a', + returned: [], + userQuery: 'a ::a', + error: 'Unexpected ` ::`', + }, + { + query: "a<a>:", + elems: [], + foundElems: 0, + original: "a<a>:", + returned: [], + userQuery: "a<a>:", + error: 'Unexpected `<` in type filter (before `:`)', + }, + { + query: "a<>:", + elems: [], + foundElems: 0, + original: "a<>:", + returned: [], + userQuery: "a<>:", + error: 'Unexpected `<` in type filter (before `:`)', + }, + { + query: "a,:", + elems: [], + foundElems: 0, + original: "a,:", + returned: [], + userQuery: "a,:", + error: 'Unexpected `,` in type filter (before `:`)', + }, + { + query: " a<> :", + elems: [], + foundElems: 0, + original: "a<> :", + returned: [], + userQuery: "a<> :", + error: 'Unexpected `<` in type filter (before `:`)', + }, + { + query: "mod : :", + elems: [], + foundElems: 0, + original: "mod : :", + returned: [], + userQuery: "mod : :", + error: 'Unexpected `:` (expected path after type filter `mod:`)', + }, + { + query: "mod: :", + elems: [], + foundElems: 0, + original: "mod: :", + returned: [], + userQuery: "mod: :", + error: 'Unexpected `:` (expected path after type filter `mod:`)', + }, + { + query: "a!a", + elems: [], + foundElems: 0, + original: "a!a", + returned: [], + userQuery: "a!a", + error: 'Unexpected `!`: it can only be at the end of an ident', + }, + { + query: "a!!", + elems: [], + foundElems: 0, + original: "a!!", + returned: [], + userQuery: "a!!", + error: 'Cannot have more than one `!` in an ident', + }, + { + query: "mod:a!", + elems: [], + foundElems: 0, + original: "mod:a!", + returned: [], + userQuery: "mod:a!", + error: 'Invalid search type: macro `!` and `mod` both specified', + }, + { + query: "mod:!", + elems: [], + foundElems: 0, + original: "mod:!", + returned: [], + userQuery: "mod:!", + error: 'Invalid search type: primitive never type `!` and `mod` both specified', + }, + { + query: "a!::a", + elems: [], + foundElems: 0, + original: "a!::a", + returned: [], + userQuery: "a!::a", + error: 'Cannot have associated items in macros', + }, + { + query: "a<", + elems: [], + foundElems: 0, + original: "a<", + returned: [], + userQuery: "a<", + error: "Unclosed `<`", + }, + { + query: "p<x> , y", + elems: [ + { + name: "p", + fullPath: ["p"], + pathWithoutLast: [], + pathLast: "p", + generics: [ + { + name: "x", + fullPath: ["x"], + pathWithoutLast: [], + pathLast: "x", + generics: [], + typeFilter: -1, + }, + ], + typeFilter: -1, + }, + { + name: "y", + fullPath: ["y"], + pathWithoutLast: [], + pathLast: "y", + generics: [], + typeFilter: -1, + }, + ], + foundElems: 2, + original: "p<x> , y", + returned: [], + userQuery: "p<x> , y", + error: null, + }, + { + query: "p<x , y>", + elems: [ + { + name: "p", + fullPath: ["p"], + pathWithoutLast: [], + pathLast: "p", + generics: [ + { + name: "x", + fullPath: ["x"], + pathWithoutLast: [], + pathLast: "x", + generics: [], + typeFilter: -1, + }, + { + name: "y", + fullPath: ["y"], + pathWithoutLast: [], + pathLast: "y", + generics: [], + typeFilter: -1, + }, + ], + typeFilter: -1, + }, + ], + foundElems: 1, + original: "p<x , y>", + returned: [], + userQuery: "p<x , y>", + error: null, + }, + { + query: "p ,x , y", + elems: [ + { + name: "p", + fullPath: ["p"], + pathWithoutLast: [], + pathLast: "p", + generics: [], + typeFilter: -1, + }, + { + name: "x", + fullPath: ["x"], + pathWithoutLast: [], + pathLast: "x", + generics: [], + typeFilter: -1, + }, + { + name: "y", + fullPath: ["y"], + pathWithoutLast: [], + pathLast: "y", + generics: [], + typeFilter: -1, + }, + ], + foundElems: 3, + original: "p ,x , y", + returned: [], + userQuery: "p ,x , y", + error: null, + }, +]; diff --git a/tests/rustdoc-js-std/parser-filter.js b/tests/rustdoc-js-std/parser-filter.js new file mode 100644 index 00000000000..3b9cc5b1bf0 --- /dev/null +++ b/tests/rustdoc-js-std/parser-filter.js @@ -0,0 +1,165 @@ +const PARSED = [ + { + query: 'fn:foo', + elems: [{ + name: "foo", + fullPath: ["foo"], + pathWithoutLast: [], + pathLast: "foo", + generics: [], + typeFilter: 5, + }], + foundElems: 1, + original: "fn:foo", + returned: [], + userQuery: "fn:foo", + error: null, + }, + { + query: 'enum : foo', + elems: [{ + name: "foo", + fullPath: ["foo"], + pathWithoutLast: [], + pathLast: "foo", + generics: [], + typeFilter: 4, + }], + foundElems: 1, + original: "enum : foo", + returned: [], + userQuery: "enum : foo", + error: null, + }, + { + query: 'macro<f>:foo', + elems: [], + foundElems: 0, + original: "macro<f>:foo", + returned: [], + userQuery: "macro<f>:foo", + error: "Unexpected `<` in type filter (before `:`)", + }, + { + query: 'macro!', + elems: [{ + name: "macro", + fullPath: ["macro"], + pathWithoutLast: [], + pathLast: "macro", + generics: [], + typeFilter: 14, + }], + foundElems: 1, + original: "macro!", + returned: [], + userQuery: "macro!", + error: null, + }, + { + query: 'macro:mac!', + elems: [{ + name: "mac", + fullPath: ["mac"], + pathWithoutLast: [], + pathLast: "mac", + generics: [], + typeFilter: 14, + }], + foundElems: 1, + original: "macro:mac!", + returned: [], + userQuery: "macro:mac!", + error: null, + }, + { + query: 'a::mac!', + elems: [{ + name: "a::mac", + fullPath: ["a", "mac"], + pathWithoutLast: ["a"], + pathLast: "mac", + generics: [], + typeFilter: 14, + }], + foundElems: 1, + original: "a::mac!", + returned: [], + userQuery: "a::mac!", + error: null, + }, + { + query: '-> fn:foo', + elems: [], + foundElems: 1, + original: "-> fn:foo", + returned: [{ + name: "foo", + fullPath: ["foo"], + pathWithoutLast: [], + pathLast: "foo", + generics: [], + typeFilter: 5, + }], + userQuery: "-> fn:foo", + error: null, + }, + { + query: '-> fn:foo<fn:bar>', + elems: [], + foundElems: 1, + original: "-> fn:foo<fn:bar>", + returned: [{ + name: "foo", + fullPath: ["foo"], + pathWithoutLast: [], + pathLast: "foo", + generics: [ + { + name: "bar", + fullPath: ["bar"], + pathWithoutLast: [], + pathLast: "bar", + generics: [], + typeFilter: 5, + } + ], + typeFilter: 5, + }], + userQuery: "-> fn:foo<fn:bar>", + error: null, + }, + { + query: '-> fn:foo<fn:bar, enum : baz::fuzz>', + elems: [], + foundElems: 1, + original: "-> fn:foo<fn:bar, enum : baz::fuzz>", + returned: [{ + name: "foo", + fullPath: ["foo"], + pathWithoutLast: [], + pathLast: "foo", + generics: [ + { + name: "bar", + fullPath: ["bar"], + pathWithoutLast: [], + pathLast: "bar", + generics: [], + typeFilter: 5, + }, + { + name: "baz::fuzz", + fullPath: ["baz", "fuzz"], + pathWithoutLast: ["baz"], + pathLast: "fuzz", + generics: [], + typeFilter: 4, + }, + ], + typeFilter: 5, + }], + userQuery: "-> fn:foo<fn:bar, enum : baz::fuzz>", + error: null, + }, +]; diff --git a/tests/rustdoc-js-std/parser-generics.js b/tests/rustdoc-js-std/parser-generics.js new file mode 100644 index 00000000000..726ee56c2c1 --- /dev/null +++ b/tests/rustdoc-js-std/parser-generics.js @@ -0,0 +1,179 @@ +const PARSED = [ + { + query: 'A<B<C<D>, E>', + elems: [], + foundElems: 0, + original: 'A<B<C<D>, E>', + returned: [], + userQuery: 'a<b<c<d>, e>', + error: 'Unclosed `<`', + }, + { + query: 'p<>,u8', + elems: [ + { + name: "p", + fullPath: ["p"], + pathWithoutLast: [], + pathLast: "p", + generics: [], + typeFilter: -1, + }, + { + name: "u8", + fullPath: ["u8"], + pathWithoutLast: [], + pathLast: "u8", + generics: [], + typeFilter: -1, + }, + ], + foundElems: 2, + original: "p<>,u8", + returned: [], + userQuery: "p<>,u8", + error: null, + }, + { + query: '"p"<a>', + elems: [ + { + name: "p", + fullPath: ["p"], + pathWithoutLast: [], + pathLast: "p", + generics: [ + { + name: "a", + fullPath: ["a"], + pathWithoutLast: [], + pathLast: "a", + generics: [], + }, + ], + typeFilter: -1, + }, + ], + foundElems: 1, + original: '"p"<a>', + returned: [], + userQuery: '"p"<a>', + error: null, + }, + { + query: 'p<u<x>>', + elems: [ + { + name: "p", + fullPath: ["p"], + pathWithoutLast: [], + pathLast: "p", + generics: [ + { + name: "u", + fullPath: ["u"], + pathWithoutLast: [], + pathLast: "u", + generics: [ + { + name: "x", + fullPath: ["x"], + pathWithoutLast: [], + pathLast: "x", + generics: [], + }, + ], + }, + ], + typeFilter: -1, + }, + ], + foundElems: 1, + original: 'p<u<x>>', + returned: [], + userQuery: 'p<u<x>>', + error: null, + }, + { + query: 'p<u<x>, r>', + elems: [ + { + name: "p", + fullPath: ["p"], + pathWithoutLast: [], + pathLast: "p", + generics: [ + { + name: "u", + fullPath: ["u"], + pathWithoutLast: [], + pathLast: "u", + generics: [ + { + name: "x", + fullPath: ["x"], + pathWithoutLast: [], + pathLast: "x", + generics: [], + }, + ], + }, + { + name: "r", + fullPath: ["r"], + pathWithoutLast: [], + pathLast: "r", + generics: [], + }, + ], + typeFilter: -1, + }, + ], + foundElems: 1, + original: 'p<u<x>, r>', + returned: [], + userQuery: 'p<u<x>, r>', + error: null, + }, + { + query: 'p<u<x, r>>', + elems: [ + { + name: "p", + fullPath: ["p"], + pathWithoutLast: [], + pathLast: "p", + generics: [ + { + name: "u", + fullPath: ["u"], + pathWithoutLast: [], + pathLast: "u", + generics: [ + { + name: "x", + fullPath: ["x"], + pathWithoutLast: [], + pathLast: "x", + generics: [], + }, + { + name: "r", + fullPath: ["r"], + pathWithoutLast: [], + pathLast: "r", + generics: [], + }, + ], + }, + ], + typeFilter: -1, + }, + ], + foundElems: 1, + original: 'p<u<x, r>>', + returned: [], + userQuery: 'p<u<x, r>>', + error: null, + }, +]; diff --git a/tests/rustdoc-js-std/parser-ident.js b/tests/rustdoc-js-std/parser-ident.js new file mode 100644 index 00000000000..f65a7ce6692 --- /dev/null +++ b/tests/rustdoc-js-std/parser-ident.js @@ -0,0 +1,154 @@ +const PARSED = [ + { + query: "R<!>", + elems: [{ + name: "r", + fullPath: ["r"], + pathWithoutLast: [], + pathLast: "r", + generics: [ + { + name: "never", + fullPath: ["never"], + pathWithoutLast: [], + pathLast: "never", + generics: [], + typeFilter: 15, + }, + ], + typeFilter: -1, + }], + foundElems: 1, + original: "R<!>", + returned: [], + userQuery: "r<!>", + error: null, + }, + { + query: "!", + elems: [{ + name: "never", + fullPath: ["never"], + pathWithoutLast: [], + pathLast: "never", + generics: [], + typeFilter: 15, + }], + foundElems: 1, + original: "!", + returned: [], + userQuery: "!", + error: null, + }, + { + query: "a!", + elems: [{ + name: "a", + fullPath: ["a"], + pathWithoutLast: [], + pathLast: "a", + generics: [], + typeFilter: 14, + }], + foundElems: 1, + original: "a!", + returned: [], + userQuery: "a!", + error: null, + }, + { + query: "a!::b", + elems: [], + foundElems: 0, + original: "a!::b", + returned: [], + userQuery: "a!::b", + error: "Cannot have associated items in macros", + }, + { + query: "!<T>", + elems: [], + foundElems: 0, + original: "!<T>", + returned: [], + userQuery: "!<t>", + error: "Never type `!` does not accept generic parameters", + }, + { + query: "!::b", + elems: [{ + name: "!::b", + fullPath: ["never", "b"], + pathWithoutLast: ["never"], + pathLast: "b", + generics: [], + typeFilter: -1, + }], + foundElems: 1, + original: "!::b", + returned: [], + userQuery: "!::b", + error: null, + }, + { + query: "b::!", + elems: [], + foundElems: 0, + original: "b::!", + returned: [], + userQuery: "b::!", + error: "Never type `!` is not associated item", + }, + { + query: "!::!", + elems: [], + foundElems: 0, + original: "!::!", + returned: [], + userQuery: "!::!", + error: "Never type `!` is not associated item", + }, + { + query: "b::!::c", + elems: [], + foundElems: 0, + original: "b::!::c", + returned: [], + userQuery: "b::!::c", + error: "Never type `!` is not associated item", + }, + { + query: "!::b<T>", + elems: [{ + name: "!::b", + fullPath: ["never", "b"], + pathWithoutLast: ["never"], + pathLast: "b", + generics: [ + { + name: "t", + fullPath: ["t"], + pathWithoutLast: [], + pathLast: "t", + generics: [], + typeFilter: -1, + } + ], + typeFilter: -1, + }], + foundElems: 1, + original: "!::b<T>", + returned: [], + userQuery: "!::b<t>", + error: null, + }, + { + query: "a!::b!", + elems: [], + foundElems: 0, + original: "a!::b!", + returned: [], + userQuery: "a!::b!", + error: "Cannot have associated items in macros", + }, +]; diff --git a/tests/rustdoc-js-std/parser-literal.js b/tests/rustdoc-js-std/parser-literal.js new file mode 100644 index 00000000000..87c06224dbf --- /dev/null +++ b/tests/rustdoc-js-std/parser-literal.js @@ -0,0 +1,26 @@ +const PARSED = [ + { + query: 'R<P>', + elems: [{ + name: "r", + fullPath: ["r"], + pathWithoutLast: [], + pathLast: "r", + generics: [ + { + name: "p", + fullPath: ["p"], + pathWithoutLast: [], + pathLast: "p", + generics: [], + }, + ], + typeFilter: -1, + }], + foundElems: 1, + original: "R<P>", + returned: [], + userQuery: "r<p>", + error: null, + } +]; diff --git a/tests/rustdoc-js-std/parser-paths.js b/tests/rustdoc-js-std/parser-paths.js new file mode 100644 index 00000000000..8d4dedf3f46 --- /dev/null +++ b/tests/rustdoc-js-std/parser-paths.js @@ -0,0 +1,94 @@ +const PARSED = [ + { + query: 'A::B', + elems: [{ + name: "a::b", + fullPath: ["a", "b"], + pathWithoutLast: ["a"], + pathLast: "b", + generics: [], + typeFilter: -1, + }], + foundElems: 1, + original: "A::B", + returned: [], + userQuery: "a::b", + error: null, + }, + { + query: 'A::B,C', + elems: [ + { + name: "a::b", + fullPath: ["a", "b"], + pathWithoutLast: ["a"], + pathLast: "b", + generics: [], + typeFilter: -1, + }, + { + name: "c", + fullPath: ["c"], + pathWithoutLast: [], + pathLast: "c", + generics: [], + typeFilter: -1, + }, + ], + foundElems: 2, + original: 'A::B,C', + returned: [], + userQuery: 'a::b,c', + error: null, + }, + { + query: 'A::B<f>,C', + elems: [ + { + name: "a::b", + fullPath: ["a", "b"], + pathWithoutLast: ["a"], + pathLast: "b", + generics: [ + { + name: "f", + fullPath: ["f"], + pathWithoutLast: [], + pathLast: "f", + generics: [], + }, + ], + typeFilter: -1, + }, + { + name: "c", + fullPath: ["c"], + pathWithoutLast: [], + pathLast: "c", + generics: [], + typeFilter: -1, + }, + ], + foundElems: 2, + original: 'A::B<f>,C', + returned: [], + userQuery: 'a::b<f>,c', + error: null, + }, + { + query: 'mod::a', + elems: [{ + name: "mod::a", + fullPath: ["mod", "a"], + pathWithoutLast: ["mod"], + pathLast: "a", + generics: [], + typeFilter: -1, + }], + foundElems: 1, + original: "mod::a", + returned: [], + userQuery: "mod::a", + error: null, + }, +]; diff --git a/tests/rustdoc-js-std/parser-quote.js b/tests/rustdoc-js-std/parser-quote.js new file mode 100644 index 00000000000..731673cf463 --- /dev/null +++ b/tests/rustdoc-js-std/parser-quote.js @@ -0,0 +1,79 @@ +const PARSED = [ + { + query: '-> "p"', + elems: [], + foundElems: 1, + original: '-> "p"', + returned: [{ + name: "p", + fullPath: ["p"], + pathWithoutLast: [], + pathLast: "p", + generics: [], + typeFilter: -1, + }], + userQuery: '-> "p"', + error: null, + }, + { + query: '"p",', + elems: [{ + name: "p", + fullPath: ["p"], + pathWithoutLast: [], + pathLast: "p", + generics: [], + typeFilter: -1, + }], + foundElems: 1, + original: '"p",', + returned: [], + userQuery: '"p",', + error: null, + }, + { + query: '"p" -> a', + elems: [], + foundElems: 0, + original: '"p" -> a', + returned: [], + userQuery: '"p" -> a', + error: "Cannot have more than one element if you use quotes", + }, + { + query: '"a" -> "p"', + elems: [], + foundElems: 0, + original: '"a" -> "p"', + returned: [], + userQuery: '"a" -> "p"', + error: "Cannot have more than one literal search element", + }, + { + query: '->"-"', + elems: [], + foundElems: 0, + original: '->"-"', + returned: [], + userQuery: '->"-"', + error: 'Unexpected `-` in a string element', + }, + { + query: '"a', + elems: [], + foundElems: 0, + original: '"a', + returned: [], + userQuery: '"a', + error: 'Unclosed `"`', + }, + { + query: '""', + elems: [], + foundElems: 0, + original: '""', + returned: [], + userQuery: '""', + error: 'Cannot have empty string element', + }, +]; diff --git a/tests/rustdoc-js-std/parser-returned.js b/tests/rustdoc-js-std/parser-returned.js new file mode 100644 index 00000000000..6ea86609115 --- /dev/null +++ b/tests/rustdoc-js-std/parser-returned.js @@ -0,0 +1,97 @@ +const PARSED = [ + { + query: "-> F<P>", + elems: [], + foundElems: 1, + original: "-> F<P>", + returned: [{ + name: "f", + fullPath: ["f"], + pathWithoutLast: [], + pathLast: "f", + generics: [ + { + name: "p", + fullPath: ["p"], + pathWithoutLast: [], + pathLast: "p", + generics: [], + }, + ], + typeFilter: -1, + }], + userQuery: "-> f<p>", + error: null, + }, + { + query: "-> P", + elems: [], + foundElems: 1, + original: "-> P", + returned: [{ + name: "p", + fullPath: ["p"], + pathWithoutLast: [], + pathLast: "p", + generics: [], + typeFilter: -1, + }], + userQuery: "-> p", + error: null, + }, + { + query: "->,a", + elems: [], + foundElems: 1, + original: "->,a", + returned: [{ + name: "a", + fullPath: ["a"], + pathWithoutLast: [], + pathLast: "a", + generics: [], + typeFilter: -1, + }], + userQuery: "->,a", + error: null, + }, + { + query: "aaaaa->a", + elems: [{ + name: "aaaaa", + fullPath: ["aaaaa"], + pathWithoutLast: [], + pathLast: "aaaaa", + generics: [], + typeFilter: -1, + }], + foundElems: 2, + original: "aaaaa->a", + returned: [{ + name: "a", + fullPath: ["a"], + pathWithoutLast: [], + pathLast: "a", + generics: [], + typeFilter: -1, + }], + userQuery: "aaaaa->a", + error: null, + }, + { + query: "-> !", + elems: [], + foundElems: 1, + original: "-> !", + returned: [{ + name: "never", + fullPath: ["never"], + pathWithoutLast: [], + pathLast: "never", + generics: [], + typeFilter: 15, + }], + userQuery: "-> !", + error: null, + }, +]; diff --git a/tests/rustdoc-js-std/parser-separators.js b/tests/rustdoc-js-std/parser-separators.js new file mode 100644 index 00000000000..00c489b51a6 --- /dev/null +++ b/tests/rustdoc-js-std/parser-separators.js @@ -0,0 +1,195 @@ +// ignore-tidy-tab + +const PARSED = [ + { + query: 'aaaaaa b', + elems: [ + { + name: 'aaaaaa\tb', + fullPath: ['aaaaaa', 'b'], + pathWithoutLast: ['aaaaaa'], + pathLast: 'b', + generics: [], + typeFilter: -1, + }, + ], + foundElems: 1, + original: "aaaaaa b", + returned: [], + userQuery: "aaaaaa b", + error: null, + }, + { + query: "aaaaaa, b", + elems: [ + { + name: 'aaaaaa', + fullPath: ['aaaaaa'], + pathWithoutLast: [], + pathLast: 'aaaaaa', + generics: [], + typeFilter: -1, + }, + { + name: 'b', + fullPath: ['b'], + pathWithoutLast: [], + pathLast: 'b', + generics: [], + typeFilter: -1, + }, + ], + foundElems: 2, + original: "aaaaaa, b", + returned: [], + userQuery: "aaaaaa, b", + error: null, + }, + { + query: 'a b', + elems: [ + { + name: 'a b', + fullPath: ['a', 'b'], + pathWithoutLast: ['a'], + pathLast: 'b', + generics: [], + typeFilter: -1, + }, + ], + foundElems: 1, + original: "a b", + returned: [], + userQuery: "a b", + error: null, + }, + { + query: 'a,b', + elems: [ + { + name: 'a', + fullPath: ['a'], + pathWithoutLast: [], + pathLast: 'a', + generics: [], + typeFilter: -1, + }, + { + name: 'b', + fullPath: ['b'], + pathWithoutLast: [], + pathLast: 'b', + generics: [], + typeFilter: -1, + }, + ], + foundElems: 2, + original: "a,b", + returned: [], + userQuery: "a,b", + error: null, + }, + { + query: 'a\tb', + elems: [ + { + name: 'a\tb', + fullPath: ['a', 'b'], + pathWithoutLast: ['a'], + pathLast: 'b', + generics: [], + typeFilter: -1, + }, + ], + foundElems: 1, + original: "a\tb", + returned: [], + userQuery: "a\tb", + error: null, + }, + { + query: 'a<b c>', + elems: [ + { + name: 'a', + fullPath: ['a'], + pathWithoutLast: [], + pathLast: 'a', + generics: [ + { + name: 'b c', + fullPath: ['b', 'c'], + pathWithoutLast: ['b'], + pathLast: 'c', + generics: [], + }, + ], + typeFilter: -1, + }, + ], + foundElems: 1, + original: "a<b c>", + returned: [], + userQuery: "a<b c>", + error: null, + }, + { + query: 'a<b,c>', + elems: [ + { + name: 'a', + fullPath: ['a'], + pathWithoutLast: [], + pathLast: 'a', + generics: [ + { + name: 'b', + fullPath: ['b'], + pathWithoutLast: [], + pathLast: 'b', + generics: [], + }, + { + name: 'c', + fullPath: ['c'], + pathWithoutLast: [], + pathLast: 'c', + generics: [], + }, + ], + typeFilter: -1, + }, + ], + foundElems: 1, + original: "a<b,c>", + returned: [], + userQuery: "a<b,c>", + error: null, + }, + { + query: 'a<b\tc>', + elems: [ + { + name: 'a', + fullPath: ['a'], + pathWithoutLast: [], + pathLast: 'a', + generics: [ + { + name: 'b\tc', + fullPath: ['b', 'c'], + pathWithoutLast: ['b'], + pathLast: 'c', + generics: [], + }, + ], + typeFilter: -1, + }, + ], + foundElems: 1, + original: "a<b\tc>", + returned: [], + userQuery: "a<b\tc>", + error: null, + }, +]; diff --git a/tests/rustdoc-js-std/parser-slice-array.js b/tests/rustdoc-js-std/parser-slice-array.js new file mode 100644 index 00000000000..c22b7870dbf --- /dev/null +++ b/tests/rustdoc-js-std/parser-slice-array.js @@ -0,0 +1,305 @@ +const PARSED = [ + { + query: '[[[D, []]]', + elems: [], + foundElems: 0, + original: '[[[D, []]]', + returned: [], + userQuery: '[[[d, []]]', + error: 'Unclosed `[`', + }, + { + query: '[[[D, []]]]', + elems: [ + { + name: "[]", + fullPath: ["[]"], + pathWithoutLast: [], + pathLast: "[]", + generics: [ + { + name: "[]", + fullPath: ["[]"], + pathWithoutLast: [], + pathLast: "[]", + generics: [ + { + name: "[]", + fullPath: ["[]"], + pathWithoutLast: [], + pathLast: "[]", + generics: [ + { + name: "d", + fullPath: ["d"], + pathWithoutLast: [], + pathLast: "d", + generics: [], + typeFilter: -1, + }, + { + name: "[]", + fullPath: ["[]"], + pathWithoutLast: [], + pathLast: "[]", + generics: [], + typeFilter: 15, + }, + ], + typeFilter: 15, + }, + ], + typeFilter: 15, + }, + ], + typeFilter: 15, + }, + ], + foundElems: 1, + original: '[[[D, []]]]', + returned: [], + userQuery: '[[[d, []]]]', + error: null, + }, + { + query: '[],u8', + elems: [ + { + name: "[]", + fullPath: ["[]"], + pathWithoutLast: [], + pathLast: "[]", + generics: [], + typeFilter: 15, + }, + { + name: "u8", + fullPath: ["u8"], + pathWithoutLast: [], + pathLast: "u8", + generics: [], + typeFilter: -1, + }, + ], + foundElems: 2, + original: "[],u8", + returned: [], + userQuery: "[],u8", + error: null, + }, + { + query: '[u8]', + elems: [ + { + name: "[]", + fullPath: ["[]"], + pathWithoutLast: [], + pathLast: "[]", + generics: [ + { + name: "u8", + fullPath: ["u8"], + pathWithoutLast: [], + pathLast: "u8", + generics: [], + typeFilter: -1, + }, + ], + typeFilter: 15, + }, + ], + foundElems: 1, + original: "[u8]", + returned: [], + userQuery: "[u8]", + error: null, + }, + { + query: '[u8,u8]', + elems: [ + { + name: "[]", + fullPath: ["[]"], + pathWithoutLast: [], + pathLast: "[]", + generics: [ + { + name: "u8", + fullPath: ["u8"], + pathWithoutLast: [], + pathLast: "u8", + generics: [], + typeFilter: -1, + }, + { + name: "u8", + fullPath: ["u8"], + pathWithoutLast: [], + pathLast: "u8", + generics: [], + typeFilter: -1, + }, + ], + typeFilter: 15, + }, + ], + foundElems: 1, + original: "[u8,u8]", + returned: [], + userQuery: "[u8,u8]", + error: null, + }, + { + query: '[u8<u8>]', + elems: [ + { + name: "[]", + fullPath: ["[]"], + pathWithoutLast: [], + pathLast: "[]", + generics: [ + { + name: "u8", + fullPath: ["u8"], + pathWithoutLast: [], + pathLast: "u8", + generics: [ + { + name: "u8", + fullPath: ["u8"], + pathWithoutLast: [], + pathLast: "u8", + generics: [], + typeFilter: -1, + }, + ], + typeFilter: -1, + }, + ], + typeFilter: 15, + }, + ], + foundElems: 1, + original: "[u8<u8>]", + returned: [], + userQuery: "[u8<u8>]", + error: null, + }, + { + query: '[]', + elems: [ + { + name: "[]", + fullPath: ["[]"], + pathWithoutLast: [], + pathLast: "[]", + generics: [], + typeFilter: 15, + }, + ], + foundElems: 1, + original: "[]", + returned: [], + userQuery: "[]", + error: null, + }, + { + query: '[>', + elems: [], + foundElems: 0, + original: "[>", + returned: [], + userQuery: "[>", + error: "Unexpected `>` after `[`", + }, + { + query: '[<', + elems: [], + foundElems: 0, + original: "[<", + returned: [], + userQuery: "[<", + error: "Found generics without a path", + }, + { + query: '[a>', + elems: [], + foundElems: 0, + original: "[a>", + returned: [], + userQuery: "[a>", + error: "Unexpected `>` after `[`", + }, + { + query: '[a<', + elems: [], + foundElems: 0, + original: "[a<", + returned: [], + userQuery: "[a<", + error: "Unclosed `<`", + }, + { + query: '[a', + elems: [], + foundElems: 0, + original: "[a", + returned: [], + userQuery: "[a", + error: "Unclosed `[`", + }, + { + query: '[', + elems: [], + foundElems: 0, + original: "[", + returned: [], + userQuery: "[", + error: "Unclosed `[`", + }, + { + query: ']', + elems: [], + foundElems: 0, + original: "]", + returned: [], + userQuery: "]", + error: "Unexpected `]`", + }, + { + query: 'primitive:[u8]', + elems: [ + { + name: "[]", + fullPath: ["[]"], + pathWithoutLast: [], + pathLast: "[]", + generics: [ + { + name: "u8", + fullPath: ["u8"], + pathWithoutLast: [], + pathLast: "u8", + generics: [], + typeFilter: -1, + }, + ], + typeFilter: 15, + }, + ], + foundElems: 1, + original: "primitive:[u8]", + returned: [], + userQuery: "primitive:[u8]", + error: null, + }, + { + query: 'macro:[u8]', + elems: [], + foundElems: 0, + original: "macro:[u8]", + returned: [], + userQuery: "macro:[u8]", + error: "Invalid search type: primitive `[]` and `macro` both specified", + }, +]; diff --git a/tests/rustdoc-js-std/parser-weird-queries.js b/tests/rustdoc-js-std/parser-weird-queries.js new file mode 100644 index 00000000000..720ef66c165 --- /dev/null +++ b/tests/rustdoc-js-std/parser-weird-queries.js @@ -0,0 +1,100 @@ +// This test is mostly to check that the parser still kinda outputs something +// (and doesn't enter an infinite loop!) even though the query is completely +// invalid. + +const PARSED = [ + { + query: 'a b', + elems: [ + { + name: "a b", + fullPath: ["a", "b"], + pathWithoutLast: ["a"], + pathLast: "b", + generics: [], + }, + ], + foundElems: 1, + original: "a b", + returned: [], + userQuery: "a b", + error: null, + }, + { + query: 'a b', + elems: [ + { + name: "a b", + fullPath: ["a", "b"], + pathWithoutLast: ["a"], + pathLast: "b", + generics: [], + }, + ], + foundElems: 1, + original: "a b", + returned: [], + userQuery: "a b", + error: null, + }, + { + query: 'a,b(c)', + elems: [], + foundElems: 0, + original: "a,b(c)", + returned: [], + userQuery: "a,b(c)", + error: "Unexpected `(`", + }, + { + query: 'aaa,a', + elems: [ + { + name: "aaa", + fullPath: ["aaa"], + pathWithoutLast: [], + pathLast: "aaa", + generics: [], + }, + { + name: "a", + fullPath: ["a"], + pathWithoutLast: [], + pathLast: "a", + generics: [], + }, + ], + foundElems: 2, + original: "aaa,a", + returned: [], + userQuery: "aaa,a", + error: null, + }, + { + query: ',,,,', + elems: [], + foundElems: 0, + original: ",,,,", + returned: [], + userQuery: ",,,,", + error: null, + }, + { + query: 'mod :', + elems: [], + foundElems: 0, + original: 'mod :', + returned: [], + userQuery: 'mod :', + error: "Unexpected `:` (expected path after type filter `mod:`)", + }, + { + query: 'mod\t:', + elems: [], + foundElems: 0, + original: 'mod\t:', + returned: [], + userQuery: 'mod\t:', + error: "Unexpected `:` (expected path after type filter `mod:`)", + }, +]; diff --git a/tests/rustdoc-js-std/path-ordering.js b/tests/rustdoc-js-std/path-ordering.js new file mode 100644 index 00000000000..c3d61d238cc --- /dev/null +++ b/tests/rustdoc-js-std/path-ordering.js @@ -0,0 +1,11 @@ +const EXPECTED = { + query: 'hashset::insert', + others: [ + // ensure hashset::insert comes first + { 'path': 'std::collections::hash_set::HashSet', 'name': 'insert' }, + { 'path': 'std::collections::hash_set::HashSet', 'name': 'get_or_insert' }, + { 'path': 'std::collections::hash_set::HashSet', 'name': 'get_or_insert_with' }, + { 'path': 'std::collections::hash_set::HashSet', 'name': 'get_or_insert_owned' }, + { 'path': 'std::collections::hash_map::HashMap', 'name': 'insert' }, + ], +}; diff --git a/tests/rustdoc-js-std/primitive.js b/tests/rustdoc-js-std/primitive.js new file mode 100644 index 00000000000..737e429bf55 --- /dev/null +++ b/tests/rustdoc-js-std/primitive.js @@ -0,0 +1,72 @@ +const EXPECTED = [ + { + 'query': 'i8', + 'others': [ + { + 'path': 'std', + 'name': 'i8', + 'href': '../std/primitive.i8.html', + }, + ] + }, + { + 'query': 'u32', + 'others': [ + { + 'path': 'std', + 'name': 'u32', + 'href': '../std/primitive.u32.html', + }, + ] + }, + { + 'query': 'str', + 'others': [ + { + 'path': 'std', + 'name': 'str', + 'href': '../std/primitive.str.html', + }, + ] + }, + { + 'query': 'char', + 'others': [ + { + 'path': 'std', + 'name': 'char', + 'href': '../std/primitive.char.html', + }, + ] + }, + { + 'query': 'unit', + 'others': [ + { + 'path': 'std', + 'name': 'unit', + 'href': '../std/primitive.unit.html', + }, + ] + }, + { + 'query': 'tuple', + 'others': [ + { + 'path': 'std', + 'name': 'tuple', + 'href': '../std/primitive.tuple.html', + }, + ] + }, + { + 'query': 'fn', + 'others': [ + { + 'path': 'std', + 'name': 'fn', + 'href': '../std/primitive.fn.html', + }, + ] + }, +]; diff --git a/tests/rustdoc-js-std/println-typo.js b/tests/rustdoc-js-std/println-typo.js new file mode 100644 index 00000000000..a4dd90a44d5 --- /dev/null +++ b/tests/rustdoc-js-std/println-typo.js @@ -0,0 +1,12 @@ +// exact-check + +const FILTER_CRATE = 'std'; + +const EXPECTED = { + 'query': 'prinltn', + 'others': [ + { 'path': 'std', 'name': 'println' }, + { 'path': 'std', 'name': 'print' }, + { 'path': 'std', 'name': 'eprintln' }, + ], +}; diff --git a/tests/rustdoc-js-std/quoted.js b/tests/rustdoc-js-std/quoted.js new file mode 100644 index 00000000000..8a927501925 --- /dev/null +++ b/tests/rustdoc-js-std/quoted.js @@ -0,0 +1,21 @@ +// ignore-order + +const FILTER_CRATE = 'std'; + +const EXPECTED = { + 'query': '"error"', + 'others': [ + { 'path': 'std', 'name': 'error' }, + { 'path': 'std::fmt', 'name': 'Error' }, + { 'path': 'std::io', 'name': 'Error' }, + ], + 'in_args': [ + { 'path': 'std::fmt::Error', 'name': 'eq' }, + { 'path': 'std::fmt::Error', 'name': 'cmp' }, + { 'path': 'std::fmt::Error', 'name': 'partial_cmp' }, + + ], + 'returned': [ + { 'path': 'std::fmt::LowerExp', 'name': 'fmt' }, + ], +}; diff --git a/tests/rustdoc-js-std/reference-shrink.js b/tests/rustdoc-js-std/reference-shrink.js new file mode 100644 index 00000000000..b602bbdca18 --- /dev/null +++ b/tests/rustdoc-js-std/reference-shrink.js @@ -0,0 +1,7 @@ +// exact-check + +const EXPECTED = { + 'query': 'reference::shrink', + // avoid including the method that's not going to be in the HTML + 'others': [], +}; diff --git a/tests/rustdoc-js-std/regex.js b/tests/rustdoc-js-std/regex.js new file mode 100644 index 00000000000..7dc38939a17 --- /dev/null +++ b/tests/rustdoc-js-std/regex.js @@ -0,0 +1,9 @@ +// exact-check + +// https://github.com/rust-lang/rust/issues/103357 +const EXPECTED = { + 'query': 'regex', + 'others': [], + 'in_args': [], + 'returned': [], +}; diff --git a/tests/rustdoc-js-std/return-specific-literal.js b/tests/rustdoc-js-std/return-specific-literal.js new file mode 100644 index 00000000000..86ed3aceb4e --- /dev/null +++ b/tests/rustdoc-js-std/return-specific-literal.js @@ -0,0 +1,9 @@ +const EXPECTED = { + 'query': 'struct:"string"', + 'in_args': [ + { 'path': 'std::string::String', 'name': 'ne' }, + ], + 'returned': [ + { 'path': 'std::string::String', 'name': 'add' }, + ], +}; diff --git a/tests/rustdoc-js-std/return-specific.js b/tests/rustdoc-js-std/return-specific.js new file mode 100644 index 00000000000..be54a1c9772 --- /dev/null +++ b/tests/rustdoc-js-std/return-specific.js @@ -0,0 +1,9 @@ +const EXPECTED = { + 'query': 'struct:string', + 'in_args': [ + { 'path': 'std::string::String', 'name': 'ne' }, + ], + 'returned': [ + { 'path': 'std::string::String', 'name': 'add' }, + ], +}; diff --git a/tests/rustdoc-js-std/should-fail.js b/tests/rustdoc-js-std/should-fail.js new file mode 100644 index 00000000000..94f82efd9b4 --- /dev/null +++ b/tests/rustdoc-js-std/should-fail.js @@ -0,0 +1,8 @@ +// should-fail + +const EXPECTED = { + 'query': 'fn', + 'others': [ + { 'path': 'std', 'name': 'fn', ty: 14 }, + ], +}; diff --git a/tests/rustdoc-js-std/simd-type-signatures.js b/tests/rustdoc-js-std/simd-type-signatures.js new file mode 100644 index 00000000000..5c7cf372bce --- /dev/null +++ b/tests/rustdoc-js-std/simd-type-signatures.js @@ -0,0 +1,70 @@ +// exact-check +// ignore-order +// ignore-tidy-linelength + +// This test case verifies that the href points at the correct impl + +const FILTER_CRATE = "std"; + +const EXPECTED = [ + { + 'query': 'simd<i16>, simd<i16> -> simd<i16>', + 'others': [ + { + 'path': 'std::simd::prelude::Simd', + 'name': 'simd_max', + 'href': '../std/simd/prelude/struct.Simd.html#impl-SimdOrd-for-Simd%3Ci16,+LANES%3E/method.simd_max' + }, + { + 'path': 'std::simd::prelude::Simd', + 'name': 'simd_min', + 'href': '../std/simd/prelude/struct.Simd.html#impl-SimdOrd-for-Simd%3Ci16,+LANES%3E/method.simd_min' + }, + { + 'path': 'std::simd::prelude::Simd', + 'name': 'simd_clamp', + 'href': '../std/simd/prelude/struct.Simd.html#impl-SimdOrd-for-Simd%3Ci16,+LANES%3E/method.simd_clamp' + }, + { + 'path': 'std::simd::prelude::Simd', + 'name': 'saturating_add', + 'href': '../std/simd/prelude/struct.Simd.html#impl-SimdInt-for-Simd%3Ci16,+LANES%3E/method.saturating_add' + }, + { + 'path': 'std::simd::prelude::Simd', + 'name': 'saturating_sub', + 'href': '../std/simd/prelude/struct.Simd.html#impl-SimdInt-for-Simd%3Ci16,+LANES%3E/method.saturating_sub' + }, + ], + }, + { + 'query': 'simd<i8>, simd<i8> -> simd<i8>', + 'others': [ + { + 'path': 'std::simd::prelude::Simd', + 'name': 'simd_max', + 'href': '../std/simd/prelude/struct.Simd.html#impl-SimdOrd-for-Simd%3Ci8,+LANES%3E/method.simd_max' + }, + { + 'path': 'std::simd::prelude::Simd', + 'name': 'simd_min', + 'href': '../std/simd/prelude/struct.Simd.html#impl-SimdOrd-for-Simd%3Ci8,+LANES%3E/method.simd_min' + }, + { + 'path': 'std::simd::prelude::Simd', + 'name': 'simd_clamp', + 'href': '../std/simd/prelude/struct.Simd.html#impl-SimdOrd-for-Simd%3Ci8,+LANES%3E/method.simd_clamp' + }, + { + 'path': 'std::simd::prelude::Simd', + 'name': 'saturating_add', + 'href': '../std/simd/prelude/struct.Simd.html#impl-SimdInt-for-Simd%3Ci8,+LANES%3E/method.saturating_add' + }, + { + 'path': 'std::simd::prelude::Simd', + 'name': 'saturating_sub', + 'href': '../std/simd/prelude/struct.Simd.html#impl-SimdInt-for-Simd%3Ci8,+LANES%3E/method.saturating_sub' + }, + ], + }, +]; diff --git a/tests/rustdoc-js-std/string-from_ut.js b/tests/rustdoc-js-std/string-from_ut.js new file mode 100644 index 00000000000..1fff6ee28bb --- /dev/null +++ b/tests/rustdoc-js-std/string-from_ut.js @@ -0,0 +1,10 @@ +const EXPECTED = { + 'query': 'String::from_ut', + 'others': [ + { 'path': 'std::string::String', 'name': 'from_utf8' }, + { 'path': 'std::string::String', 'name': 'from_utf8' }, + { 'path': 'std::string::String', 'name': 'from_utf8_lossy' }, + { 'path': 'std::string::String', 'name': 'from_utf16_lossy' }, + { 'path': 'std::string::String', 'name': 'from_utf8_unchecked' }, + ], +}; diff --git a/tests/rustdoc-js-std/struct-vec.js b/tests/rustdoc-js-std/struct-vec.js new file mode 100644 index 00000000000..dd72aaa1ab8 --- /dev/null +++ b/tests/rustdoc-js-std/struct-vec.js @@ -0,0 +1,7 @@ +const EXPECTED = { + 'query': 'struct:VecD', + 'others': [ + { 'path': 'std::collections', 'name': 'VecDeque' }, + { 'path': 'std::vec', 'name': 'Vec' }, + ], +}; diff --git a/tests/rustdoc-js-std/typed-query.js b/tests/rustdoc-js-std/typed-query.js new file mode 100644 index 00000000000..8e84645889a --- /dev/null +++ b/tests/rustdoc-js-std/typed-query.js @@ -0,0 +1,13 @@ +// exact-check + +const FILTER_CRATE = 'std'; + +const EXPECTED = { + 'query': 'macro:print', + 'others': [ + { 'path': 'std', 'name': 'print' }, + { 'path': 'std', 'name': 'println' }, + { 'path': 'std', 'name': 'eprint' }, + { 'path': 'std', 'name': 'eprintln' }, + ], +}; diff --git a/tests/rustdoc-js-std/vec-new.js b/tests/rustdoc-js-std/vec-new.js new file mode 100644 index 00000000000..9823a417a5d --- /dev/null +++ b/tests/rustdoc-js-std/vec-new.js @@ -0,0 +1,20 @@ +const EXPECTED = [ + { + 'query': 'Vec::new', + 'others': [ + { 'path': 'std::vec::Vec', 'name': 'new' }, + { 'path': 'alloc::vec::Vec', 'name': 'new' }, + { 'path': 'std::vec::Vec', 'name': 'new_in' }, + { 'path': 'alloc::vec::Vec', 'name': 'new_in' }, + ], + }, + { + 'query': 'Vec new', + 'others': [ + { 'path': 'std::vec::Vec', 'name': 'new' }, + { 'path': 'alloc::vec::Vec', 'name': 'new' }, + { 'path': 'std::vec::Vec', 'name': 'new_in' }, + { 'path': 'alloc::vec::Vec', 'name': 'new_in' }, + ], + }, +]; diff --git a/tests/rustdoc-js-std/vec-type-signatures.js b/tests/rustdoc-js-std/vec-type-signatures.js new file mode 100644 index 00000000000..18cf9d6efd0 --- /dev/null +++ b/tests/rustdoc-js-std/vec-type-signatures.js @@ -0,0 +1,22 @@ +// ignore-order + +const FILTER_CRATE = "std"; + +const EXPECTED = [ + { + 'query': 'vec::intoiter<T> -> [T]', + 'others': [ + { 'path': 'std::vec::IntoIter', 'name': 'as_slice' }, + { 'path': 'std::vec::IntoIter', 'name': 'as_mut_slice' }, + { 'path': 'std::vec::IntoIter', 'name': 'next_chunk' }, + ], + }, + { + 'query': 'vec::intoiter<T> -> []', + 'others': [ + { 'path': 'std::vec::IntoIter', 'name': 'as_slice' }, + { 'path': 'std::vec::IntoIter', 'name': 'as_mut_slice' }, + { 'path': 'std::vec::IntoIter', 'name': 'next_chunk' }, + ], + }, +]; |
