Prune commentary and stale Rust port notes
This commit is contained in:
1 parent
5428cd75c9
commit
25370731d0
193 files changed
+693
-16219
No files matched your search
@@ -1,13 +1,3 @@
|
||||
//! Layer 1 of docs/RUST.md's "Three test layers" for a gesture the
|
||||
//! *platform* takes away, over the real transcript screen and the real
|
||||
//! bench fixture.
|
||||
//!
|
||||
//! Both halves of Iris's 2026-09-08 report about the transcript moving on
|
||||
//! its own live here. A cancel is not a release, so nothing may follow it
|
||||
//! -- and every widget that was tracking the press has to hear about it,
|
||||
//! or the next press anywhere on screen is measured from the origin the
|
||||
//! abandoned one left behind.
|
||||
|
||||
use ai_app::ui::fixture::{PHONE_FRAME_MS, PHONE_SCALE, phone_size};
|
||||
use iris::harness::{Harness, TouchAction, TouchScript};
|
||||
use iris::prelude::*;
|
||||
@@ -24,12 +14,6 @@ fn script(name: &str, text: &str) -> TouchScript {
|
||||
TouchScript::parse(text).unwrap_or_else(|e| panic!("{name}: {e}"))
|
||||
}
|
||||
|
||||
/// Where the content actually is, in window pixels: the top of whichever
|
||||
/// row is under the middle of the viewport, tracked by key. The anchor's
|
||||
/// own `idx/off` display is not that -- the list rehomes its anchor to a
|
||||
/// different row without the content moving at all -- so a test asserting
|
||||
/// "nothing moved" reads a row's own extent, the way `catch_a_fling.rs`
|
||||
/// does.
|
||||
fn tracked_row(h: &mut Harness, screen: &ai_app::ui::TranscriptScreen) -> (RowKey, f32) {
|
||||
let middle = phone_size().y / 2.0;
|
||||
let list = (screen.list)(&mut h.rsc);
|
||||
@@ -45,11 +29,6 @@ fn row_top(h: &mut Harness, screen: &ai_app::ui::TranscriptScreen, key: RowKey)
|
||||
.0
|
||||
}
|
||||
|
||||
/// The system's own swipe up from the bottom edge to leave the app is
|
||||
/// delivered to the app as moves and then `ACTION_CANCEL`. Read as a
|
||||
/// release it hands the list that swipe's velocity, and the transcript
|
||||
/// flings while nobody is looking -- "leaving and reopening the app also
|
||||
/// randomly moved the vertical scroll".
|
||||
#[test]
|
||||
fn a_cancelled_flick_does_not_fling() {
|
||||
let (mut h, screen) = opened();
|
||||
@@ -65,9 +44,6 @@ fn a_cancelled_flick_does_not_fling() {
|
||||
"a gesture the platform took away must not fling"
|
||||
);
|
||||
|
||||
// ...and it must not be moving on its own over the following second
|
||||
// either, which is what a fling started some other way would look
|
||||
// like.
|
||||
let (key, settled) = tracked_row(&mut h, &screen);
|
||||
let end = flick.end_ms() + 1_000;
|
||||
let mut t = flick.end_ms();
|
||||
@@ -82,24 +58,15 @@ fn a_cancelled_flick_does_not_fling() {
|
||||
);
|
||||
}
|
||||
|
||||
/// The other half, and the one that made a *later* touch snap: a cancel
|
||||
/// has to reach every widget that was handed a frame of the press, so the
|
||||
/// gesture it was driving forgets its origin. Without it the arbiter is
|
||||
/// still open with the abandoned press's touch-down as its origin, and
|
||||
/// the next press is measured from there -- a jump the size of the
|
||||
/// distance between two unrelated touches.
|
||||
#[test]
|
||||
fn a_press_ended_by_a_cancel_leaves_no_origin_for_the_next_one() {
|
||||
let (mut h, screen) = opened();
|
||||
|
||||
// Press near the top of the transcript and let the platform take it.
|
||||
h.touch(TouchAction::Down, Vec2::new(540.0, 700.0), 0);
|
||||
h.touch(TouchAction::Cancel, Vec2::new(540.0, 700.0), 8);
|
||||
|
||||
let (key, before) = tracked_row(&mut h, &screen);
|
||||
|
||||
// A plain tap, a long way down the screen from where that press
|
||||
// started. It must move nothing at all.
|
||||
h.touch(TouchAction::Down, Vec2::new(540.0, 1900.0), 200);
|
||||
h.touch(TouchAction::Up, Vec2::new(540.0, 1900.0), 250);
|
||||
|
||||
@@ -116,20 +83,6 @@ fn a_press_ended_by_a_cancel_leaves_no_origin_for_the_next_one() {
|
||||
);
|
||||
}
|
||||
|
||||
/// The report itself: "if I scroll in a horizontal area and then tap in a
|
||||
/// vertical area, it seems to snap."
|
||||
///
|
||||
/// A markdown fence pans sideways through its own `ScrollArea`, which takes
|
||||
/// pointer capture the moment it commits. Everything else that was handed
|
||||
/// a frame of that press is told so with `CursorSense::Cancel` -- and the
|
||||
/// widget the press actually landed on is the fence's own text block,
|
||||
/// which drives `ai_app::ui::Selection`'s shared `DragGesture`. A
|
||||
/// block that does not register `Cancel` never hears it, so the gesture
|
||||
/// stays open with the fence's touch-down as its origin and the next
|
||||
/// press anywhere is measured from there.
|
||||
///
|
||||
/// The fence is pushed here rather than hunted for in the fixture, so the
|
||||
/// test knows exactly which row it is pressing and where.
|
||||
#[test]
|
||||
fn panning_a_code_fence_then_tapping_elsewhere_moves_nothing() {
|
||||
use ai_app::client::transcript_fold::{TranscriptItem, TranscriptRow};
|
||||
@@ -142,10 +95,6 @@ fn panning_a_code_fence_then_tapping_elsewhere_moves_nothing() {
|
||||
.to_string(),
|
||||
settled: true,
|
||||
});
|
||||
// A plain paragraph under it, because the tap has to land on
|
||||
// ordinary text: a tap that happens to hit a tool group's header
|
||||
// toggles it, and a row changing height moves the list for a reason
|
||||
// that has nothing to do with this.
|
||||
let para = TranscriptRow::Single(TranscriptItem::AssistantMsg {
|
||||
seq: 9_000_001,
|
||||
text: "A plain paragraph with nothing to tap in it, only words, so that a \
|
||||
@@ -159,8 +108,6 @@ fn panning_a_code_fence_then_tapping_elsewhere_moves_nothing() {
|
||||
h.frame(100);
|
||||
h.frame(108);
|
||||
|
||||
// Press in the middle of the fence's own row, so the gesture starts on
|
||||
// the text block inside the scroll area rather than in a gap.
|
||||
let key = ai_app::ui::row::row_key(&fence.key());
|
||||
let (top, bottom) = (screen.list)(&mut h.rsc)
|
||||
.extent(key)
|
||||
@@ -171,7 +118,6 @@ fn panning_a_code_fence_then_tapping_elsewhere_moves_nothing() {
|
||||
"the fence row has to be on screen to be pressed: {top}..{bottom}"
|
||||
);
|
||||
|
||||
// Sideways, well past `DRAG_SLOP`, so the fence commits and captures.
|
||||
h.touch(TouchAction::Down, Vec2::new(800.0, y), 200);
|
||||
for (i, x) in [760.0, 700.0, 620.0, 540.0].into_iter().enumerate() {
|
||||
h.touch(TouchAction::Move, Vec2::new(x, y), 208 + 8 * i as u64);
|
||||
@@ -180,8 +126,6 @@ fn panning_a_code_fence_then_tapping_elsewhere_moves_nothing() {
|
||||
|
||||
let (tracked, before) = tracked_row(&mut h, &screen);
|
||||
|
||||
// A tap on the paragraph, a long way down the screen from where that
|
||||
// pan started.
|
||||
let para_key = ai_app::ui::row::row_key(¶.key());
|
||||
let (ptop, pbottom) = (screen.list)(&mut h.rsc)
|
||||
.extent(para_key)
|
||||
|
||||
Reference in new issue
Block a user