Skip to main content

Driver

Struct Driver 

Source
pub struct Driver<D: Document> {
    pub runtime: Runtime<D>,
    /* private fields */
}
Expand description

Drives a Runtime headless. See the module docs.

Fields§

§runtime: Runtime<D>

Implementations§

Source§

impl<D: Document> Driver<D>

Source

pub fn new(runtime: Runtime<D>) -> Self

A 1280×800 point screen at time 0, with grey screenshots.

Source

pub fn with_renderer(runtime: Runtime<D>, renderer: Renderer) -> Self

Driver::new rendering screenshots with renderer (e.g. Renderer::wgpu: real pixels, or grey when there is no GPU).

Source

pub fn renderer(&self) -> &Renderer

What screenshots are rendered with.

Source

pub fn into_runtime(self) -> Runtime<D>

Stop driving; the runtime is handed back (e.g. to Runtime::abandon it).

Source

pub fn ctx(&self) -> &Context

Source

pub fn set_screen(&mut self, width: f32, height: f32)

Source

pub fn pixels_per_point(&mut self, ppp: f32)

Draw as on a display with ppp pixels per point (2 on a Retina display), from the next frame on. Values that are not finite or not positive are ignored; others are clamped to 0.25–8.

Source

pub fn time(&self) -> f64

Virtual seconds since the start.

Source

pub fn frames(&self) -> u64

Frames run so far.

Source

pub fn is_closed(&self) -> bool

The app closed its window.

Source

pub fn push_event(&mut self, e: Event)

Queue raw input for the next frame (it also wakes the loop).

Source

pub fn set_screenshots(&mut self, deliver: bool)

Whether screenshots are delivered (on by default). Off, the loop behaves like a window that is covered or on a locked screen: capture requests are dropped.

Source

pub fn set_hidden(&mut self, hidden: bool)

Minimize the window (or show it again). Hidden, a frame runs Runtime::logic with no egui pass, the way eframe treats a minimized or covered window, then the runtime’s Runtime::hidden_pass for pending debugger work; other input waits for the next shown frame. A raise from the app (Focus, Minimized(false), Visible(true)) shows it again.

Source

pub fn is_hidden(&self) -> bool

Whether the window is hidden (Driver::set_hidden).

Source

pub fn request_close(&mut self)

Ask to close the window, as the window’s close button does.

Source

pub fn native_menu_pick(&mut self, id: &str)

Pick id in the OS menu bar, as the native menu (feature native-menu) reports a click or a key equivalent. It runs in the next frame’s Runtime::logic under the same rules: ignored while a dialog is open, or while a text field has the keyboard and the command’s shortcut belongs to the field.

Source

pub fn drop_files( &mut self, paths: impl IntoIterator<Item = impl Into<PathBuf>>, )

Drop files on the window in the next frame, as the OS reports a drag and drop.

Source

pub fn forward_launch(&mut self, forwarded: Forwarded)

A second launch of the app forwards its arguments, as with App::single_instance. The next frame opens its first file.

Source

pub fn frame(&mut self) -> FullOutput

Run one frame now, whether or not one was asked for.

Source

pub fn record(&mut self, f: impl FnOnce(&mut Self)) -> MotionRecorder

Run f while recording motion for the motion gate: values animated through ashlar_ui::motion and, each frame, the automation elements’ rects and the frames asked for. Check the result with MotionRecorder::check.

ⓘ
let rec = d.record(|d| drop(d.run_ui("click overlays.open\nwait 1")));
let report = rec.check(&MotionRules::default());
assert!(report.is_clean(), "{report}");
Source

pub fn advance(&mut self, secs: f64) -> u64

Let secs of virtual time pass, running every frame that is asked for (at most one per 1/120 s, like a display would). Returns the frames run.

Source

pub fn settle(&mut self, max: u64) -> u64

Run frames until none is asked for (at most max); returns how many ran. Timers further than horizon seconds away do not count as pending.

Source

pub fn replay(&mut self, path: impl AsRef<Path>) -> Result<usize>

Play a recording made with ASHLAR_RECORD or Runtime::record_to into this driver (normally a fresh one for the same app): each recorded frame runs at its time, with its screen, input events and control requests (their replies are dropped). Returns the number of frames run. See crate::record.

Source

pub fn request(&mut self, method: &str, params: Value) -> Reply

Send a control request (as the control port would) and run frames until it is answered: one frame for the request, then only the frames something asks for, on the virtual clock (a request that needs frames nobody asks for is reported, not papered over by polling).

Source

pub fn call(&mut self, method: &str, params: Value) -> Result<Value, String>

Driver::request expecting success.

Source

pub fn run_ui(&mut self, script: &str) -> Result<Report, ScriptError>

Run a .ui script (the ashlar-debug batch language) on this app, in process: no port, no thread. sleep N and wait N let virtual time pass, so a script gives the same steps on every run.

Source

pub fn scene(&mut self, name: &str) -> Result<(), String>

Apply the app’s scene name (crate::App::scene) through the ui.scene control method, then run the frames it asks for.

Source

pub fn assert_snapshot(&mut self, name: &str) -> Result<SnapshotOutcome, String>

Compare a screenshot of the whole window with the golden snapshot name in tests/snapshots (see ashlar_debug::snapshot): exact by default; on a mismatch it writes <name>-new.png and <name>-diff.png and returns the reason. ASHLAR_UPDATE_SNAPSHOTS=1 records the baseline instead. A baseline from another adapter, or a run with no GPU renderer, is skipped with a printed note.

Source

pub fn check_snapshot( &mut self, name: &str, snapshots: &Snapshots, target: Option<Value>, ) -> Result<SnapshotOutcome, String>

Driver::assert_snapshot with explicit settings, of target (a control-protocol target, e.g. json!({"id": "list"})) or the whole window.

Trait Implementations§

Source§

impl<D: Document> Transport for Driver<D>

Available on non-WebAssembly only.
Source§

fn call(&mut self, method: &str, params: Value) -> Result<Value, ControlError>

Call one method and return its result, or the app’s error.
Source§

fn pause(&mut self, ms: u64)

Let ms milliseconds pass (sleep, wait <ms>). The default waits on the wall clock.
Source§

fn set_timeout(&mut self, _timeout: Duration)

Longest wait for one reply, where that means something (a socket).
Source§

fn port(&self) -> Option<u16>

The TCP port, when there is one.

Auto Trait Implementations§

§

impl<D> !RefUnwindSafe for Driver<D>

§

impl<D> !Send for Driver<D>

§

impl<D> !Sync for Driver<D>

§

impl<D> !UnwindSafe for Driver<D>

§

impl<D> Forget for Driver<D>

§

impl<D> Freeze for Driver<D>
where Runtime<D>: Freeze,

§

impl<D> Move for Driver<D>

§

impl<D> Unpin for Driver<D>
where Runtime<D>: Unpin,

§

impl<D> UnsafeUnpin for Driver<D>
where Runtime<D>: UnsafeUnpin,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
Source§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
Source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
Source§

impl<T> Downcast<T> for T

Source§

fn downcast(&self) -> &T

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T, S> SimdFrom<T, S> for T
where S: Simd,

Source§

fn simd_from(_simd: S, value: T) -> T

Source§

impl<F, T, S> SimdInto<T, S> for F
where T: SimdFrom<F, S>, S: Simd,

Source§

fn simd_into(self, simd: S) -> T

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> Upcast<T> for T

Source§

fn upcast(&self) -> Option<&T>

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more