summaryrefslogtreecommitdiffstats
path: root/vendor/icu_provider_macros/src/tests.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:18:21 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:18:21 +0000
commit4e8199b572f2035b7749cba276ece3a26630d23e (patch)
treef09feeed6a0fe39d027b1908aa63ea6b35e4b631 /vendor/icu_provider_macros/src/tests.rs
parentAdding upstream version 1.66.0+dfsg1. (diff)
downloadrustc-4e8199b572f2035b7749cba276ece3a26630d23e.tar.xz
rustc-4e8199b572f2035b7749cba276ece3a26630d23e.zip
Adding upstream version 1.67.1+dfsg1.upstream/1.67.1+dfsg1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'vendor/icu_provider_macros/src/tests.rs')
-rw-r--r--vendor/icu_provider_macros/src/tests.rs210
1 files changed, 210 insertions, 0 deletions
diff --git a/vendor/icu_provider_macros/src/tests.rs b/vendor/icu_provider_macros/src/tests.rs
new file mode 100644
index 000000000..51411852b
--- /dev/null
+++ b/vendor/icu_provider_macros/src/tests.rs
@@ -0,0 +1,210 @@
+// This file is part of ICU4X. For terms of use, please see the file
+// called LICENSE at the top level of the ICU4X source tree
+// (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ).
+
+use crate::data_struct_impl;
+use proc_macro2::TokenStream as TokenStream2;
+use quote::quote;
+use syn::{DeriveInput, NestedMeta};
+
+fn check(attr: Vec<TokenStream2>, item: TokenStream2, expected: TokenStream2) {
+ let actual = data_struct_impl(
+ attr.into_iter()
+ .map(syn::parse2)
+ .collect::<syn::parse::Result<Vec<NestedMeta>>>()
+ .unwrap(),
+ syn::parse2::<DeriveInput>(item).unwrap(),
+ );
+ assert_eq!(expected.to_string(), actual.to_string());
+}
+
+#[test]
+fn test_basic() {
+ // #[data_struct]
+ check(
+ vec![],
+ quote!(
+ pub struct FooV1;
+ ),
+ quote!(
+ #[derive(yoke::Yokeable, zerofrom::ZeroFrom)]
+ pub struct FooV1;
+ ),
+ );
+}
+
+#[test]
+fn test_data_marker() {
+ // #[data_struct(FooV1Marker)]
+ check(
+ vec![quote!(FooV1Marker)],
+ quote!(
+ pub struct FooV1;
+ ),
+ quote!(
+ #[doc = "Marker type for [`FooV1`]"]
+ pub struct FooV1Marker;
+ impl icu_provider::DataMarker for FooV1Marker {
+ type Yokeable = FooV1;
+ }
+ #[derive(yoke::Yokeable, zerofrom::ZeroFrom)]
+ pub struct FooV1;
+ ),
+ );
+}
+
+#[test]
+fn test_keyed_data_marker() {
+ // #[data_struct(BarV1Marker = "demo/bar@1")]
+ check(
+ vec![quote!(BarV1Marker = "demo/bar@1")],
+ quote!(
+ pub struct FooV1;
+ ),
+ quote!(
+ #[doc = "Marker type for [`FooV1`]: \"demo/bar@1\"\n\n- Fallback priority: language (default)\n- Extension keyword: none (default)"]
+ pub struct BarV1Marker;
+ impl icu_provider::DataMarker for BarV1Marker {
+ type Yokeable = FooV1;
+ }
+ impl icu_provider::KeyedDataMarker for BarV1Marker {
+ const KEY: icu_provider::DataKey = icu_provider::data_key!(
+ "demo/bar@1",
+ icu_provider::DataKeyMetadata::construct_internal(
+ icu_provider::FallbackPriority::const_default(),
+ None,
+ None
+ ));
+ }
+ #[derive(yoke::Yokeable, zerofrom::ZeroFrom)]
+ pub struct FooV1;
+ ),
+ );
+}
+
+#[test]
+fn test_multi_named_keyed_data_marker() {
+ // #[data_struct(FooV1Marker, BarV1Marker = "demo/bar@1", BazV1Marker = "demo/baz@1")]
+ check(
+ vec![
+ quote!(FooV1Marker),
+ quote!(BarV1Marker = "demo/bar@1"),
+ quote!(BazV1Marker = "demo/baz@1"),
+ ],
+ quote!(
+ pub struct FooV1<'data>;
+ ),
+ quote!(
+ #[doc = "Marker type for [`FooV1`]"]
+ pub struct FooV1Marker;
+ impl icu_provider::DataMarker for FooV1Marker {
+ type Yokeable = FooV1<'static>;
+ }
+ #[doc = "Marker type for [`FooV1`]: \"demo/bar@1\"\n\n- Fallback priority: language (default)\n- Extension keyword: none (default)"]
+ pub struct BarV1Marker;
+ impl icu_provider::DataMarker for BarV1Marker {
+ type Yokeable = FooV1<'static>;
+ }
+ impl icu_provider::KeyedDataMarker for BarV1Marker {
+ const KEY: icu_provider::DataKey = icu_provider::data_key!(
+ "demo/bar@1",
+ icu_provider::DataKeyMetadata::construct_internal(
+ icu_provider::FallbackPriority::const_default(),
+ None,
+ None
+ ));
+ }
+ #[doc = "Marker type for [`FooV1`]: \"demo/baz@1\"\n\n- Fallback priority: language (default)\n- Extension keyword: none (default)"]
+ pub struct BazV1Marker;
+ impl icu_provider::DataMarker for BazV1Marker {
+ type Yokeable = FooV1<'static>;
+ }
+ impl icu_provider::KeyedDataMarker for BazV1Marker {
+ const KEY: icu_provider::DataKey = icu_provider::data_key!(
+ "demo/baz@1",
+ icu_provider::DataKeyMetadata::construct_internal(
+ icu_provider::FallbackPriority::const_default(),
+ None,
+ None
+ ));
+ }
+ #[derive(yoke::Yokeable, zerofrom::ZeroFrom)]
+ pub struct FooV1<'data>;
+ ),
+ );
+}
+
+#[test]
+fn test_databake() {
+ check(
+ vec![quote!(BarV1Marker = "demo/bar@1")],
+ quote!(
+ #[databake(path = test::path)]
+ pub struct FooV1;
+ ),
+ quote!(
+ #[doc = "Marker type for [`FooV1`]: \"demo/bar@1\"\n\n- Fallback priority: language (default)\n- Extension keyword: none (default)"]
+ #[derive(Default, databake::Bake)]
+ #[databake(path = test::path)]
+ pub struct BarV1Marker;
+ impl icu_provider::DataMarker for BarV1Marker {
+ type Yokeable = FooV1;
+ }
+ impl icu_provider::KeyedDataMarker for BarV1Marker {
+ const KEY: icu_provider::DataKey = icu_provider::data_key!(
+ "demo/bar@1",
+ icu_provider::DataKeyMetadata::construct_internal(
+ icu_provider::FallbackPriority::const_default(),
+ None,
+ None
+ ));
+ }
+ #[derive(yoke::Yokeable, zerofrom::ZeroFrom)]
+ #[databake(path = test::path)]
+ pub struct FooV1;
+ ),
+ );
+}
+
+#[test]
+fn test_attributes() {
+ // #[data_struct(FooV1Marker, marker(BarV1Marker, "demo/bar@1", fallback_by = "region", extension_kw = "ca"))]
+ check(
+ vec![
+ quote!(FooV1Marker),
+ quote!(marker(
+ BarV1Marker,
+ "demo/bar@1",
+ fallback_by = "region",
+ extension_key = "ca",
+ fallback_supplement = "collation"
+ )),
+ ],
+ quote!(
+ pub struct FooV1<'data>;
+ ),
+ quote!(
+ #[doc = "Marker type for [`FooV1`]"]
+ pub struct FooV1Marker;
+ impl icu_provider::DataMarker for FooV1Marker {
+ type Yokeable = FooV1<'static>;
+ }
+ #[doc = "Marker type for [`FooV1`]: \"demo/bar@1\"\n\n- Fallback priority: region\n- Extension keyword: ca"]
+ pub struct BarV1Marker;
+ impl icu_provider::DataMarker for BarV1Marker {
+ type Yokeable = FooV1<'static>;
+ }
+ impl icu_provider::KeyedDataMarker for BarV1Marker {
+ const KEY: icu_provider::DataKey = icu_provider::data_key!(
+ "demo/bar@1",
+ icu_provider::DataKeyMetadata::construct_internal(
+ icu_provider::FallbackPriority::Region,
+ Some(icu_provider::_internal::extensions_unicode_key!("ca")),
+ Some(icu_provider::FallbackSupplement::Collation)
+ ));
+ }
+ #[derive(yoke::Yokeable, zerofrom::ZeroFrom)]
+ pub struct FooV1<'data>;
+ ),
+ );
+}