[package]
edition = "2021"
rust-version = "1.89"
name = "aprender-test-lib"
version = "0.29.0"
build = false
autolib = false
autobins = false
autoexamples = false
autotests = false
autobenches = false
description = "Probar: Rust-native testing framework with pixel coverage, TUI snapshots, and visual regression"
readme = "README.md"
keywords = [
"testing",
"pixel-coverage",
"visual-regression",
"tui",
"snapshot",
]
categories = [
"development-tools::testing",
"wasm",
]
license = "MIT"
repository = "https://github.com/paiml/aprender"
[features]
browser = [
"chromiumoxide",
"tokio",
"futures",
"async-trait",
]
compute-blocks = [
"presentar-terminal",
"presentar-core",
]
default = [
"tui",
"media",
"watch",
]
derive = ["jugar-probar-derive"]
docker = [
"bollard",
"tokio",
"futures",
"async-trait",
]
gpu = ["trueno"]
llm = [
"llm-types",
"dep:reqwest",
"tokio",
"futures",
]
llm-types = []
media = [
"dep:image",
"dep:gif",
"dep:png",
"dep:mp4",
]
proptest = ["dep:proptest"]
runtime = [
"wasmtime",
"async-trait",
]
tui = ["crossterm"]
watch = ["dep:notify"]
[lib]
name = "jugar_probar"
path = "src/lib.rs"
[[example]]
name = "accessibility_demo"
path = "examples/accessibility_demo.rs"
[[example]]
name = "audio_emulation"
path = "examples/audio_emulation.rs"
[[example]]
name = "basic_test"
path = "examples/basic_test.rs"
[[example]]
name = "brick_demo"
path = "examples/brick_demo.rs"
[[example]]
name = "brick_tui_demo"
path = "examples/brick_tui_demo.rs"
[[example]]
name = "comply_demo"
path = "examples/comply_demo.rs"
[[example]]
name = "coverage_demo"
path = "examples/coverage_demo.rs"
required-features = ["media"]
[[example]]
name = "distributed_worker_demo"
path = "examples/distributed_worker_demo.rs"
[[example]]
name = "docker_demo"
path = "examples/docker_demo.rs"
required-features = ["docker"]
[[example]]
name = "element_assertions"
path = "examples/element_assertions.rs"
[[example]]
name = "equation_verify"
path = "examples/equation_verify.rs"
[[example]]
name = "execution_trace"
path = "examples/execution_trace.rs"
[[example]]
name = "gui_coverage"
path = "examples/gui_coverage.rs"
required-features = ["media"]
[[example]]
name = "locator_demo"
path = "examples/locator_demo.rs"
[[example]]
name = "locator_operations"
path = "examples/locator_operations.rs"
[[example]]
name = "mouse_actions"
path = "examples/mouse_actions.rs"
[[example]]
name = "multi_context"
path = "examples/multi_context.rs"
[[example]]
name = "network_intercept"
path = "examples/network_intercept.rs"
[[example]]
name = "page_object"
path = "examples/page_object.rs"
[[example]]
name = "panic_paths_demo"
path = "examples/panic_paths_demo.rs"
[[example]]
name = "performance_profile"
path = "examples/performance_profile.rs"
[[example]]
name = "pixel_coverage_heatmap"
path = "examples/pixel_coverage_heatmap.rs"
required-features = ["media"]
[[example]]
name = "playbook_testing"
path = "examples/playbook_testing.rs"
[[example]]
name = "pmat_bridge_demo"
path = "examples/pmat_bridge_demo.rs"
[[example]]
name = "pong_simulation"
path = "examples/pong_simulation.rs"
required-features = ["media"]
[[example]]
name = "presentar_demo"
path = "examples/presentar_demo.rs"
[[example]]
name = "retry_assertions"
path = "examples/retry_assertions.rs"
[[example]]
name = "semantic_locators"
path = "examples/semantic_locators.rs"
[[example]]
name = "soft_assertions"
path = "examples/soft_assertions.rs"
[[example]]
name = "streaming_ux_demo"
path = "examples/streaming_ux_demo.rs"
[[example]]
name = "visual_regression_demo"
path = "examples/visual_regression_demo.rs"
required-features = ["media"]
[[example]]
name = "wait_mechanisms"
path = "examples/wait_mechanisms.rs"
[[example]]
name = "wasm_capabilities"
path = "examples/wasm_capabilities.rs"
[[example]]
name = "wasm_pixel_gui_demo"
path = "examples/wasm_pixel_gui_demo.rs"
required-features = ["media"]
[[example]]
name = "watch_mode"
path = "examples/watch_mode.rs"
required-features = ["watch"]
[[example]]
name = "web_builders_demo"
path = "examples/web_builders_demo.rs"
[[example]]
name = "web_sys_gen_demo"
path = "examples/web_sys_gen_demo.rs"
[[example]]
name = "web_validation_demo"
path = "examples/web_validation_demo.rs"
[[example]]
name = "websocket_monitor"
path = "examples/websocket_monitor.rs"
[[example]]
name = "worker_brick_demo"
path = "examples/worker_brick_demo.rs"
[[example]]
name = "worker_harness_demo"
path = "examples/worker_harness_demo.rs"
[[example]]
name = "zero_js_demo"
path = "examples/zero_js_demo.rs"
[[bench]]
name = "benchmarks"
path = "benches/benchmarks.rs"
harness = false
[[bench]]
name = "coverage_ops"
path = "benches/coverage_ops.rs"
harness = false
[[bench]]
name = "image_ops"
path = "benches/image_ops.rs"
harness = false
required-features = ["media"]
[[bench]]
name = "locator_ops"
path = "benches/locator_ops.rs"
harness = false
[[bench]]
name = "playbook_ops"
path = "benches/playbook_ops.rs"
harness = false
[dependencies.base64]
version = "0.22"
[dependencies.bincode]
version = "1.3"
[dependencies.bollard]
version = "0.17"
optional = true
[dependencies.crossterm]
version = "0.28"
optional = true
[dependencies.gif]
version = "0.13"
optional = true
[dependencies.image]
version = "0.25"
optional = true
[dependencies.jugar-probar-derive]
version = "=1.0.3"
optional = true
[dependencies.mp4]
version = "0.14"
optional = true
[dependencies.png]
version = "0.17"
optional = true
[dependencies.presentar-core]
version = "0.29.0"
optional = true
package = "aprender-present-core"
[dependencies.presentar-terminal]
version = "0.29.0"
optional = true
package = "aprender-present-terminal"
[dependencies.proc-macro2]
version = "1.0"
features = ["span-locations"]
[dependencies.proptest]
version = "1.6"
optional = true
[dependencies.regex]
version = "1.11"
[dependencies.reqwest]
version = "0.12"
features = [
"json",
"rustls-tls",
]
optional = true
default-features = false
[dependencies.serde]
version = "1.0"
features = ["derive"]
[dependencies.serde_json]
version = "1.0"
[dependencies.serde_yaml_ng]
version = "0.10"
[dependencies.sha2]
version = "0.10"
[dependencies.syn]
version = "2"
features = [
"full",
"visit",
]
[dependencies.thiserror]
version = "2.0"
[dependencies.tracing]
version = "0.1"
[dependencies.trueno]
version = "0.29.0"
optional = true
package = "aprender-compute"
[dependencies.uuid]
version = "1"
features = ["v4"]
[dev-dependencies.async-trait]
version = "0.1"
[dev-dependencies.criterion]
version = "0.5"
features = ["html_reports"]
[dev-dependencies.proptest]
version = "1.6"
[dev-dependencies.tempfile]
version = "3.14"
[dev-dependencies.tokio]
version = "1"
features = ["full"]
[target.'cfg(not(target_arch = "wasm32"))'.dependencies.async-trait]
version = "0.1"
optional = true
[target.'cfg(not(target_arch = "wasm32"))'.dependencies.chromiumoxide]
version = "0.8"
features = ["tokio-runtime"]
optional = true
default-features = false
[target.'cfg(not(target_arch = "wasm32"))'.dependencies.chrono]
version = "0.4"
features = [
"std",
"clock",
]
default-features = false
[target.'cfg(not(target_arch = "wasm32"))'.dependencies.futures]
version = "0.3"
optional = true
[target.'cfg(not(target_arch = "wasm32"))'.dependencies.notify]
version = "7"
optional = true
[target.'cfg(not(target_arch = "wasm32"))'.dependencies.tokio]
version = "1"
features = ["full"]
optional = true
[target.'cfg(not(target_arch = "wasm32"))'.dependencies.tracing-subscriber]
version = "0.3"
features = [
"env-filter",
"fmt",
]
[target.'cfg(not(target_arch = "wasm32"))'.dependencies.wasmtime]
version = "27"
optional = true
[target.'cfg(target_arch = "wasm32")'.dependencies.js-sys]
version = "0.3"
[target.'cfg(target_arch = "wasm32")'.dependencies.wasm-bindgen]
version = "0.2"
[target.'cfg(target_arch = "wasm32")'.dependencies.wasm-bindgen-futures]
version = "0.4"
[target.'cfg(target_arch = "wasm32")'.dependencies.web-sys]
version = "0.3"
features = [
"Window",
"Document",
"Element",
"HtmlCanvasElement",
"CanvasRenderingContext2d",
"Performance",
"Response",
]
[lints.clippy]
approx_constant = "allow"
assertions_on_constants = "allow"
assigning_clones = "allow"
bool_to_int_with_if = "allow"
cast_lossless = "allow"
cast_possible_truncation = "allow"
cast_possible_wrap = "allow"
cast_precision_loss = "allow"
cast_sign_loss = "allow"
checked_conversions = "warn"
clone_on_copy = "allow"
cloned_instead_of_copied = "allow"
cloned_ref_to_slice_refs = "allow"
const_is_empty = "allow"
default_constructed_unit_structs = "allow"
default_trait_access = "allow"
derivable_impls = "allow"
doc_markdown = "allow"
empty_line_after_doc_comments = "allow"
empty_line_after_outer_attr = "allow"
erasing_op = "allow"
excessive_precision = "allow"
explicit_deref_methods = "warn"
explicit_iter_loop = "warn"
field_reassign_with_default = "allow"
float_cmp = "allow"
format_push_string = "allow"
identity_op = "allow"
if_not_else = "allow"
ignore_without_reason = "allow"
implicit_clone = "warn"
inconsistent_struct_constructor = "warn"
index_refutable_slice = "allow"
inefficient_to_string = "allow"
items_after_statements = "allow"
iter_cloned_collect = "allow"
large_stack_arrays = "allow"
len_zero = "allow"
manual_contains = "allow"
manual_div_ceil = "allow"
manual_let_else = "allow"
manual_midpoint = "allow"
manual_ok_or = "warn"
manual_range_contains = "allow"
many_single_char_names = "allow"
map_unwrap_or = "allow"
match_same_arms = "allow"
match_wildcard_for_single_variants = "allow"
missing_const_for_fn = "allow"
missing_errors_doc = "allow"
missing_fields_in_debug = "allow"
missing_panics_doc = "allow"
module_name_repetitions = "allow"
must_use_candidate = "allow"
needless_borrows_for_generic_args = "allow"
needless_pass_by_value = "allow"
needless_range_loop = "allow"
needless_raw_string_hashes = "allow"
no_effect_underscore_binding = "allow"
nonminimal_bool = "allow"
overly_complex_bool_expr = "allow"
print_literal = "allow"
ptr_arg = "allow"
redundant_closure_for_method_calls = "allow"
redundant_guards = "allow"
return_self_not_must_use = "allow"
semicolon_if_nothing_returned = "allow"
similar_names = "allow"
single_char_pattern = "allow"
single_match_else = "allow"
stable_sort_primitive = "allow"
too_many_arguments = "allow"
too_many_lines = "allow"
trivially_copy_pass_by_ref = "allow"
type_complexity = "allow"
uninlined_format_args = "allow"
unnecessary_debug_formatting = "allow"
unnecessary_literal_bound = "allow"
unnecessary_literal_unwrap = "allow"
unnecessary_map_or = "allow"
unnecessary_wraps = "allow"
unnested_or_patterns = "warn"
unreadable_literal = "allow"
unused_self = "allow"
used_underscore_binding = "warn"
useless_vec = "allow"
vec_init_then_push = "allow"
[lints.clippy.all]
level = "warn"
priority = -1
[lints.clippy.pedantic]
level = "warn"
priority = -1
[lints.rust]
missing_debug_implementations = "warn"
missing_docs = "allow"
trivial_casts = "warn"
trivial_numeric_casts = "warn"
unreachable_pub = "warn"
unsafe_code = "deny"
unsafe_op_in_unsafe_fn = "warn"
unused_import_braces = "warn"
unused_lifetimes = "warn"
unused_qualifications = "allow"
[lints.rust.rust_2018_idioms]
level = "warn"
priority = -1
[lints.rust.unexpected_cfgs]
level = "warn"
priority = 0
check-cfg = [
"cfg(kani)",
"cfg(coverage_nightly)",
'cfg(feature, values("explainable-monitor-integration"))',
]