1#![allow(clippy::missing_const_for_fn)]
2#![allow(clippy::match_same_arms)]
3#![allow(clippy::unwrap_used)]
4#![allow(clippy::disallowed_methods)]
5#![allow(clippy::too_many_lines)]
6#![allow(clippy::struct_excessive_bools)]
7#![allow(clippy::needless_pass_by_value)]
8#![allow(clippy::doc_markdown)]
9#![allow(clippy::cast_possible_wrap)]
10#![allow(clippy::cast_sign_loss)]
11#![allow(clippy::cast_precision_loss)]
12#![allow(clippy::should_implement_trait)]
13#![allow(clippy::similar_names)]
14#![allow(clippy::derive_partial_eq_without_eq)]
15#![allow(clippy::map_unwrap_or)]
16#![allow(clippy::module_name_repetitions)]
17#![allow(clippy::manual_let_else)]
18#![allow(clippy::if_not_else)]
19#![allow(clippy::uninlined_format_args)]
20#![allow(clippy::type_complexity)]
21#![allow(clippy::many_single_char_names)]
22#![allow(clippy::fn_params_excessive_bools)]
23#![allow(clippy::too_many_arguments)]
24#![allow(clippy::manual_assert)]
25#![allow(clippy::suboptimal_flops)]
26#![allow(clippy::float_cmp)]
27#![allow(clippy::clone_on_copy)]
28#![allow(clippy::cloned_instead_of_copied)]
29#![allow(clippy::single_match)]
30#![allow(clippy::unnecessary_wraps)]
31#![allow(clippy::missing_const_for_fn)]
32#![allow(clippy::struct_field_names)]
33#![allow(clippy::unused_self)]
34#![allow(clippy::trivially_copy_pass_by_ref)]
35#![allow(clippy::match_like_matches_macro)]
36#![allow(clippy::let_and_return)]
37#![allow(clippy::explicit_iter_loop)]
38#![allow(clippy::ptr_arg)]
39#![allow(clippy::use_self)]
40#![allow(clippy::cast_lossless)]
41#![allow(clippy::items_after_statements)]
42#![allow(clippy::default_trait_access)]
43#![allow(clippy::redundant_closure_for_method_calls)]
44#![allow(clippy::iter_without_into_iter)]
45#![allow(clippy::if_then_some_else_none)]
46#![allow(clippy::semicolon_if_nothing_returned)]
47#![allow(clippy::option_if_let_else)]
48#![allow(clippy::case_sensitive_file_extension_comparisons)]
49#![allow(clippy::format_push_string)]
50#![allow(clippy::same_item_push)]
51#![allow(clippy::naive_bytecount)]
52#![allow(clippy::unnecessary_to_owned)]
53#![allow(clippy::must_use_candidate)]
54#![allow(clippy::return_self_not_must_use)]
55#![allow(clippy::missing_panics_doc)]
56#![allow(clippy::missing_errors_doc)]
57#![allow(clippy::collapsible_if)]
58#![allow(clippy::test_attr_in_doctest)]
59#![allow(clippy::manual_div_ceil)]
60#![allow(clippy::new_without_default)]
61#![allow(clippy::comparison_to_empty)]
62#![allow(clippy::get_first)]
63#![allow(clippy::unreadable_literal)]
64#![allow(clippy::duplicated_attributes)]
65mod a11y;
89pub mod bdd;
90pub mod build;
91pub mod fixture;
92pub mod grade;
93mod harness;
94mod selector;
95mod snapshot;
96
97pub use a11y::{
98 aria_from_widget, A11yChecker, A11yConfig, A11yReport, A11yViolation, AriaAttributes,
99 AriaChecked, AriaLive, AutocompleteValue, FormA11yChecker, FormA11yReport, FormA11yRule,
100 FormAccessibility, FormFieldA11y, FormFieldGroup, FormViolation, Impact, InputType,
101 MIN_FOCUS_INDICATOR_AREA, MIN_TOUCH_TARGET_SIZE,
102};
103pub use bdd::{describe, describe_and_assert, expect, Expectation, TestContext};
104pub use build::{
105 BuildInfo, BuildMode, BundleAnalysis, BundleAnalyzer, BundleError, SizeRecord, SizeTracker,
106 WasmSection,
107};
108pub use fixture::{
109 Fixture, FixtureBuilder, FixtureContext, FixtureError, FixtureManifest, TestData,
110};
111pub use grade::{
112 AccessibilityGates, AppQualityScore, Criterion, DataGates, DocumentationGates,
113 EvaluationBuilder, GateCheckResult, GateViolation, Grade, PerformanceGates, QualityGates,
114 QualityScoreBuilder, ReportCard, ScoreBreakdown, ViolationSeverity,
115};
116pub use harness::Harness;
117pub use selector::{Selector, SelectorParser};
118pub use snapshot::{ComparisonResult, Image, Snapshot};
119
120pub use presentar_test_macros::{assert_snapshot, describe_suite, fixture, presentar_test};