diff --git a/crates/matrix-sdk-ui/src/timeline/event_handler.rs b/crates/matrix-sdk-ui/src/timeline/event_handler.rs index 585c51a95..fa92e4982 100644 --- a/crates/matrix-sdk-ui/src/timeline/event_handler.rs +++ b/crates/matrix-sdk-ui/src/timeline/event_handler.rs @@ -877,7 +877,7 @@ impl<'a, 'o> TimelineEventHandler<'a, 'o> { trace!("Adding new remote timeline item at the start"); let item = self.meta.new_timeline_item(item); - self.items.insert(0, item); + self.items.push_front(item); } Flow::Remote { @@ -968,9 +968,6 @@ impl<'a, 'o> TimelineEventHandler<'a, 'o> { // pending local echo, or at the start if there is no such item. let insert_idx = latest_event_idx.map_or(0, |idx| idx + 1); - // Keep push semantics, if we're inserting at the end. - let should_push = insert_idx == self.items.len(); - let id = match removed_event_item_id { // If a previous version of the same item (usually a local // echo) was removed and we now need to add it again, reuse @@ -981,8 +978,12 @@ impl<'a, 'o> TimelineEventHandler<'a, 'o> { trace!("Adding new remote timeline item after all non-pending events"); let new_item = TimelineItem::new(item, id); - if should_push { + + // Keep push semantics, if we're inserting at the end or at the front. + if insert_idx == self.items.len() { self.items.push_back(new_item); + } else if insert_idx == 0 { + self.items.push_front(new_item); } else { self.items.insert(insert_idx, new_item); } @@ -1112,10 +1113,19 @@ impl<'a, 'o> TimelineEventHandler<'a, 'o> { match op { Operation::Insert(i, ts) => { assert!(i >= max_i); - self.items.insert( - i + offset, - self.meta.new_timeline_item(VirtualTimelineItem::DayDivider(ts)), - ); + + // Keep push semantics, if we're inserting at the front or the back. + let insert_at = i + offset; + let item = self.meta.new_timeline_item(VirtualTimelineItem::DayDivider(ts)); + + if insert_at == 0 { + self.items.push_front(item); + } else if insert_at == self.items.len() { + self.items.push_back(item); + } else { + self.items.insert(insert_at, item); + } + offset = (offset + 1).min(self.items.len()); max_i = i; } diff --git a/crates/matrix-sdk-ui/src/timeline/tests/basic.rs b/crates/matrix-sdk-ui/src/timeline/tests/basic.rs index d74ece34c..471475a90 100644 --- a/crates/matrix-sdk-ui/src/timeline/tests/basic.rs +++ b/crates/matrix-sdk-ui/src/timeline/tests/basic.rs @@ -65,7 +65,7 @@ async fn test_initial_events() { let item = assert_next_matches!(stream, VectorDiff::PushBack { value } => value); assert_eq!(item.as_event().unwrap().sender(), *ALICE); - let item = assert_next_matches!(stream, VectorDiff::Insert { index: 0 , value } => value); + let item = assert_next_matches!(stream, VectorDiff::PushFront { value } => value); assert_matches!(&item.kind, TimelineItemKind::Virtual(VirtualTimelineItem::DayDivider(_))); let item = assert_next_matches!(stream, VectorDiff::PushBack { value } => value); @@ -184,7 +184,7 @@ async fn test_other_state() { assert_eq!(content.name, "Alice's room"); assert_matches!(prev_content, None); - let day_divider = assert_next_matches!(stream, VectorDiff::Insert { index: 0, value } => value); + let day_divider = assert_next_matches!(stream, VectorDiff::PushFront { value } => value); assert!(day_divider.is_day_divider()); timeline.handle_live_redacted_state_event(&ALICE, RedactedRoomTopicEventContent::new()).await; @@ -313,7 +313,7 @@ async fn test_sanitized() { " ); - let day_divider = assert_next_matches!(stream, VectorDiff::Insert {index: 0, value } => value); + let day_divider = assert_next_matches!(stream, VectorDiff::PushFront { value } => value); assert!(day_divider.is_day_divider()); } @@ -335,7 +335,7 @@ async fn test_reply() { let first_event_id = first_event.event_id().unwrap(); let first_event_sender = *ALICE; - let day_divider = assert_next_matches!(stream, VectorDiff::Insert {index: 0, value } => value); + let day_divider = assert_next_matches!(stream, VectorDiff::PushFront { value } => value); assert!(day_divider.is_day_divider()); let reply_formatted_body = format!("\ @@ -390,7 +390,7 @@ async fn test_thread() { let first_event = item.as_event().unwrap(); let first_event_id = first_event.event_id().unwrap(); - let day_divider = assert_next_matches!(stream, VectorDiff::Insert { index: 0, value } => value); + let day_divider = assert_next_matches!(stream, VectorDiff::PushFront { value } => value); assert!(day_divider.is_day_divider()); let reply = assign!(RoomMessageEventContent::text_plain("I'm replying in a thread"), { diff --git a/crates/matrix-sdk-ui/src/timeline/tests/echo.rs b/crates/matrix-sdk-ui/src/timeline/tests/echo.rs index e54e536fb..6622b7c4f 100644 --- a/crates/matrix-sdk-ui/src/timeline/tests/echo.rs +++ b/crates/matrix-sdk-ui/src/timeline/tests/echo.rs @@ -51,9 +51,7 @@ async fn test_remote_echo_full_trip() { { // The day divider comes in late. - let (index, day_divider) = - assert_next_matches!(stream, VectorDiff::Insert {index, value } => (index, value)); - assert_eq!(index, 0); + let day_divider = assert_next_matches!(stream, VectorDiff::PushFront { value } => value); assert!(day_divider.is_day_divider()); } @@ -134,19 +132,17 @@ async fn test_remote_echo_new_position() { let txn_id_from_event = item.as_event().unwrap(); assert_eq!(txn_id, txn_id_from_event.transaction_id().unwrap()); - let day_divider = assert_next_matches!(stream, VectorDiff::Insert { index: 0, value } => value); + let day_divider = assert_next_matches!(stream, VectorDiff::PushFront { value } => value); assert!(day_divider.is_day_divider()); // … and another event that comes back before the remote echo timeline.handle_live_message_event(&BOB, RoomMessageEventContent::text_plain("test")).await; // … and is inserted before the local echo item - let bob_message = assert_next_matches!(stream, VectorDiff::Insert { index: 0, value } => value); + let bob_message = assert_next_matches!(stream, VectorDiff::PushFront { value } => value); assert!(bob_message.is_remote_event()); - let (day_divider_index, day_divider) = - assert_next_matches!(stream, VectorDiff::Insert {index, value } => (index, value)); - assert_eq!(day_divider_index, 0); + let day_divider = assert_next_matches!(stream, VectorDiff::PushFront { value } => value); assert!(day_divider.is_day_divider()); // When the remote echo comes in… diff --git a/crates/matrix-sdk-ui/src/timeline/tests/edit.rs b/crates/matrix-sdk-ui/src/timeline/tests/edit.rs index ad8f1433b..8c3dfde30 100644 --- a/crates/matrix-sdk-ui/src/timeline/tests/edit.rs +++ b/crates/matrix-sdk-ui/src/timeline/tests/edit.rs @@ -52,7 +52,7 @@ async fn test_live_redacted() { assert_eq!(timeline.inner.items().await.len(), 2); - let day_divider = assert_next_matches!(stream, VectorDiff::Insert { index: 0, value } => value); + let day_divider = assert_next_matches!(stream, VectorDiff::PushFront { value } => value); assert!(day_divider.is_day_divider()); } @@ -78,7 +78,7 @@ async fn test_live_sanitized() { assert_eq!(text.body, "**original** message"); assert_eq!(text.formatted.as_ref().unwrap().body, "original message"); - let day_divider = assert_next_matches!(stream, VectorDiff::Insert { index: 0, value } => value); + let day_divider = assert_next_matches!(stream, VectorDiff::PushFront { value } => value); assert!(day_divider.is_day_divider()); let first_event_id = first_event.event_id().unwrap(); @@ -160,6 +160,6 @@ async fn test_aggregated_sanitized() { assert_eq!(text.body, "!!edited!! **better** message"); assert_eq!(text.formatted.as_ref().unwrap().body, " better message"); - let day_divider = assert_next_matches!(stream, VectorDiff::Insert { index: 0, value } => value); + let day_divider = assert_next_matches!(stream, VectorDiff::PushFront { value } => value); assert!(day_divider.is_day_divider()); } diff --git a/crates/matrix-sdk-ui/src/timeline/tests/encryption.rs b/crates/matrix-sdk-ui/src/timeline/tests/encryption.rs index 12fdda843..1865b7f54 100644 --- a/crates/matrix-sdk-ui/src/timeline/tests/encryption.rs +++ b/crates/matrix-sdk-ui/src/timeline/tests/encryption.rs @@ -112,7 +112,7 @@ async fn test_retry_message_decryption() { ); assert_eq!(session_id, SESSION_ID); - let day_divider = assert_next_matches!(stream, VectorDiff::Insert { index: 0, value } => value); + let day_divider = assert_next_matches!(stream, VectorDiff::PushFront { value } => value); assert!(day_divider.is_day_divider()); { @@ -427,7 +427,7 @@ async fn test_retry_message_decryption_highlighted() { ); assert_eq!(session_id, SESSION_ID); - let day_divider = assert_next_matches!(stream, VectorDiff::Insert { index: 0, value } => value); + let day_divider = assert_next_matches!(stream, VectorDiff::PushFront { value } => value); assert!(day_divider.is_day_divider()); let own_user_id = user_id!("@example:matrix.org"); diff --git a/crates/matrix-sdk-ui/src/timeline/tests/event_filter.rs b/crates/matrix-sdk-ui/src/timeline/tests/event_filter.rs index cd9a0b092..2b105b913 100644 --- a/crates/matrix-sdk-ui/src/timeline/tests/event_filter.rs +++ b/crates/matrix-sdk-ui/src/timeline/tests/event_filter.rs @@ -52,8 +52,7 @@ async fn test_default_filter() { .handle_live_message_event(&ALICE, RoomMessageEventContent::text_plain("The first message")) .await; let item = assert_next_matches!(stream, VectorDiff::PushBack { value } => value); - let _day_divider = - assert_next_matches!(stream, VectorDiff::Insert { index: 0, value } => value); + let _day_divider = assert_next_matches!(stream, VectorDiff::PushFront { value } => value); let first_event_id = item.as_event().unwrap().event_id().unwrap(); let edit = assign!(RoomMessageEventContent::text_plain(" * The _edited_ first message"), { @@ -150,8 +149,7 @@ async fn test_custom_filter() { .handle_live_message_event(&ALICE, RoomMessageEventContent::text_plain("The first message")) .await; let _item = assert_next_matches!(stream, VectorDiff::PushBack { value } => value); - let _day_divider = - assert_next_matches!(stream, VectorDiff::Insert { index: 0, value } => value); + let _day_divider = assert_next_matches!(stream, VectorDiff::PushFront { value } => value); timeline .handle_live_redacted_message_event(&ALICE, RedactedRoomMessageEventContent::new()) diff --git a/crates/matrix-sdk-ui/src/timeline/tests/reactions.rs b/crates/matrix-sdk-ui/src/timeline/tests/reactions.rs index ece104756..ff6405abc 100644 --- a/crates/matrix-sdk-ui/src/timeline/tests/reactions.rs +++ b/crates/matrix-sdk-ui/src/timeline/tests/reactions.rs @@ -289,8 +289,8 @@ async fn send_first_message( let event_id = item.as_event().unwrap().clone().event_id().unwrap().to_owned(); let position = timeline.len().await - 1; - let _day_divider = - assert_next_matches!(*stream, VectorDiff::Insert { index: 0, value } => value); + let day_divider = assert_next_matches!(*stream, VectorDiff::PushFront { value } => value); + assert!(day_divider.is_day_divider()); (event_id, position) } diff --git a/crates/matrix-sdk-ui/src/timeline/tests/read_receipts.rs b/crates/matrix-sdk-ui/src/timeline/tests/read_receipts.rs index a2b53569f..d6db99cea 100644 --- a/crates/matrix-sdk-ui/src/timeline/tests/read_receipts.rs +++ b/crates/matrix-sdk-ui/src/timeline/tests/read_receipts.rs @@ -53,8 +53,7 @@ async fn test_read_receipts_updates_on_live_events() { let event_a = item_a.as_event().unwrap(); assert!(event_a.read_receipts().is_empty()); - let _day_divider = - assert_next_matches!(stream, VectorDiff::Insert { index: 0, value } => value); + let _day_divider = assert_next_matches!(stream, VectorDiff::PushFront { value } => value); // Implicit read receipt of Bob. let item_b = assert_next_matches!(stream, VectorDiff::PushBack { value } => value); @@ -155,8 +154,7 @@ async fn test_read_receipts_updates_on_filtered_events() { let event_a = item_a.as_event().unwrap(); assert!(event_a.read_receipts().is_empty()); - let _day_divider = - assert_next_matches!(stream, VectorDiff::Insert { index: 0, value } => value); + let _day_divider = assert_next_matches!(stream, VectorDiff::PushFront { value } => value); // Implicit read receipt of Bob. let item_a = assert_next_matches!(stream, VectorDiff::Set { index: 1, value } => value); @@ -247,8 +245,7 @@ async fn test_read_receipts_updates_on_filtered_events_with_stored() { let event_a = item_a.as_event().unwrap(); assert!(event_a.read_receipts().is_empty()); - let _day_divider = - assert_next_matches!(stream, VectorDiff::Insert { index: 0, value } => value); + let _day_divider = assert_next_matches!(stream, VectorDiff::PushFront { value } => value); // Stored read receipt of Bob. let item_a = assert_next_matches!(stream, VectorDiff::Set { index: 1, value } => value); @@ -306,11 +303,11 @@ async fn test_read_receipts_updates_on_back_paginated_filtered_events() { .await; // No read receipt for our own user. - let item_a = assert_next_matches!(stream, VectorDiff::Insert { index: 0, value } => value); + let item_a = assert_next_matches!(stream, VectorDiff::PushFront { value } => value); let event_a = item_a.as_event().unwrap(); assert!(event_a.read_receipts().is_empty()); - let day_divider = assert_next_matches!(stream, VectorDiff::Insert { index: 0, value } => value); + let day_divider = assert_next_matches!(stream, VectorDiff::PushFront { value } => value); assert!(day_divider.is_day_divider()); // Add non-filtered event to show read receipts. @@ -324,14 +321,14 @@ async fn test_read_receipts_updates_on_back_paginated_filtered_events() { .await; // Implicit read receipt of Carol. - let item_c = assert_next_matches!(stream, VectorDiff::Insert { index: 0, value } => value); + let item_c = assert_next_matches!(stream, VectorDiff::PushFront { value } => value); let event_c = item_c.as_event().unwrap(); assert_eq!(event_c.read_receipts().len(), 2); assert!(event_c.read_receipts().get(*BOB).is_some()); assert!(event_c.read_receipts().get(*CAROL).is_some()); // Reinsert a new day divider before the first back-paginated event. - let day_divider = assert_next_matches!(stream, VectorDiff::Insert { index: 0, value } => value); + let day_divider = assert_next_matches!(stream, VectorDiff::PushFront { value } => value); assert!(day_divider.is_day_divider()); // Remove the last day divider. @@ -429,8 +426,7 @@ async fn test_read_receipts_updates_on_message_decryption() { assert_eq!(clear_event.read_receipts().len(), 1); assert!(clear_event.read_receipts().get(*CAROL).is_some()); - let _day_divider = - assert_next_matches!(stream, VectorDiff::Insert { index: 0, value } => value); + let _day_divider = assert_next_matches!(stream, VectorDiff::PushFront { value } => value); // The second event is encrypted and only has Bob's receipt. let encrypted_item = assert_next_matches!(stream, VectorDiff::PushBack { value } => value); diff --git a/crates/matrix-sdk-ui/src/timeline/tests/virt.rs b/crates/matrix-sdk-ui/src/timeline/tests/virt.rs index 3101823f0..8c45591da 100644 --- a/crates/matrix-sdk-ui/src/timeline/tests/virt.rs +++ b/crates/matrix-sdk-ui/src/timeline/tests/virt.rs @@ -41,7 +41,7 @@ async fn test_day_divider() { let item = assert_next_matches!(stream, VectorDiff::PushBack { value } => value); item.as_event().unwrap(); - let day_divider = assert_next_matches!(stream, VectorDiff::Insert { index: 0, value } => value); + let day_divider = assert_next_matches!(stream, VectorDiff::PushFront { value } => value); assert_let!(VirtualTimelineItem::DayDivider(ts) = day_divider.as_virtual().unwrap()); let date = Local.timestamp_millis_opt(ts.0.into()).single().unwrap(); assert_eq!(date.year(), 1970); @@ -103,7 +103,7 @@ async fn test_update_read_marker() { let item = assert_next_matches!(stream, VectorDiff::PushBack { value } => value); let first_event_id = item.as_event().unwrap().event_id().unwrap().to_owned(); - let day_divider = assert_next_matches!(stream, VectorDiff::Insert { index: 0, value } => value); + let day_divider = assert_next_matches!(stream, VectorDiff::PushFront { value } => value); assert!(day_divider.is_day_divider()); timeline.inner.set_fully_read_event(first_event_id.clone()).await; diff --git a/crates/matrix-sdk-ui/tests/integration/timeline/echo.rs b/crates/matrix-sdk-ui/tests/integration/timeline/echo.rs index f6e8a7b1f..c157bd2d6 100644 --- a/crates/matrix-sdk-ui/tests/integration/timeline/echo.rs +++ b/crates/matrix-sdk-ui/tests/integration/timeline/echo.rs @@ -79,9 +79,7 @@ async fn test_echo() { assert_matches!(item.send_state(), Some(EventSendState::NotSentYet)); let txn_id = item.transaction_id().unwrap(); - assert_let!( - Some(VectorDiff::Insert { index: 0, value: day_divider }) = timeline_stream.next().await - ); + assert_let!(Some(VectorDiff::PushFront { value: day_divider }) = timeline_stream.next().await); assert!(day_divider.is_day_divider()); assert_let!(TimelineItemContent::Message(msg) = item.content()); @@ -225,7 +223,7 @@ async fn test_dedup_by_event_id_late() { assert_matches!(item.send_state(), Some(EventSendState::NotSentYet)); let day_divider = - assert_next_matches!( timeline_stream, VectorDiff::Insert { index: 0, value } => value); + assert_next_matches!( timeline_stream, VectorDiff::PushFront { value } => value); assert!(day_divider.is_day_divider()); ev_builder.add_joined_room(JoinedRoomBuilder::new(room_id).add_timeline_event( @@ -246,12 +244,12 @@ async fn test_dedup_by_event_id_late() { let _response = client.sync_once(sync_settings.clone()).await.unwrap(); let remote_echo = - assert_next_matches!(timeline_stream, VectorDiff::Insert { index: 0, value } => value); + assert_next_matches!(timeline_stream, VectorDiff::PushFront { value } => value); let item = remote_echo.as_event().unwrap(); assert_eq!(item.event_id(), Some(event_id)); let day_divider = - assert_next_matches!(timeline_stream, VectorDiff::Insert { index: 0, value } => value); + assert_next_matches!(timeline_stream, VectorDiff::PushFront { value } => value); assert!(day_divider.is_day_divider()); // Local echo and its day divider are removed. diff --git a/crates/matrix-sdk-ui/tests/integration/timeline/edit.rs b/crates/matrix-sdk-ui/tests/integration/timeline/edit.rs index c80bd160e..fd5b572d7 100644 --- a/crates/matrix-sdk-ui/tests/integration/timeline/edit.rs +++ b/crates/matrix-sdk-ui/tests/integration/timeline/edit.rs @@ -87,9 +87,7 @@ async fn test_edit() { assert_matches!(msg.in_reply_to(), None); assert!(!msg.is_edited()); - assert_let!( - Some(VectorDiff::Insert { index: 0, value: day_divider }) = timeline_stream.next().await - ); + assert_let!(Some(VectorDiff::PushFront { value: day_divider }) = timeline_stream.next().await); assert!(day_divider.is_day_divider()); ev_builder.add_joined_room( diff --git a/crates/matrix-sdk-ui/tests/integration/timeline/mod.rs b/crates/matrix-sdk-ui/tests/integration/timeline/mod.rs index 26177ccc8..b5ce2c585 100644 --- a/crates/matrix-sdk-ui/tests/integration/timeline/mod.rs +++ b/crates/matrix-sdk-ui/tests/integration/timeline/mod.rs @@ -94,9 +94,7 @@ async fn test_reaction() { assert_eq!(event_item.read_receipts().len(), 1); // The day divider. - assert_let!( - Some(VectorDiff::Insert { index: 0, value: day_divider }) = timeline_stream.next().await - ); + assert_let!(Some(VectorDiff::PushFront { value: day_divider }) = timeline_stream.next().await); assert!(day_divider.is_day_divider()); // The new message is getting the reaction, which implies an implicit read @@ -203,9 +201,7 @@ async fn test_redacted_message() { assert_let!(Some(VectorDiff::PushBack { value: first }) = timeline_stream.next().await); assert_matches!(first.as_event().unwrap().content(), TimelineItemContent::RedactedMessage); - assert_let!( - Some(VectorDiff::Insert { index: 0, value: day_divider }) = timeline_stream.next().await - ); + assert_let!(Some(VectorDiff::PushFront { value: day_divider }) = timeline_stream.next().await); assert!(day_divider.is_day_divider()); // TODO: After adding raw timeline items, check for one here @@ -248,9 +244,7 @@ async fn test_read_marker() { assert_let!(Some(VectorDiff::PushBack { value: message }) = timeline_stream.next().await); assert_matches!(message.as_event().unwrap().content(), TimelineItemContent::Message(_)); - assert_let!( - Some(VectorDiff::Insert { index: 0, value: day_divider }) = timeline_stream.next().await - ); + assert_let!(Some(VectorDiff::PushFront { value: day_divider }) = timeline_stream.next().await); assert!(day_divider.is_day_divider()); ev_builder.add_joined_room( @@ -334,9 +328,7 @@ async fn test_sync_highlighted() { // Own events don't trigger push rules. assert!(!remote_event.is_highlighted()); - assert_let!( - Some(VectorDiff::Insert { index: 0, value: day_divider }) = timeline_stream.next().await - ); + assert_let!(Some(VectorDiff::PushFront { value: day_divider }) = timeline_stream.next().await); assert!(day_divider.is_day_divider()); ev_builder.add_joined_room(JoinedRoomBuilder::new(room_id).add_timeline_event( diff --git a/crates/matrix-sdk-ui/tests/integration/timeline/pagination.rs b/crates/matrix-sdk-ui/tests/integration/timeline/pagination.rs index 65e1f01e1..89d2c015f 100644 --- a/crates/matrix-sdk-ui/tests/integration/timeline/pagination.rs +++ b/crates/matrix-sdk-ui/tests/integration/timeline/pagination.rs @@ -81,7 +81,7 @@ async fn test_back_pagination() { let message = assert_next_matches!( timeline_stream, - VectorDiff::Insert { index: 0, value } => value + VectorDiff::PushFront { value } => value ); assert_let!(TimelineItemContent::Message(msg) = message.as_event().unwrap().content()); assert_let!(MessageType::Text(text) = msg.msgtype()); @@ -89,13 +89,13 @@ async fn test_back_pagination() { let day_divider = assert_next_matches!( timeline_stream, - VectorDiff::Insert { index: 0, value } => value + VectorDiff::PushFront { value } => value ); assert!(day_divider.is_day_divider()); let message = assert_next_matches!( timeline_stream, - VectorDiff::Insert { index: 0, value } => value + VectorDiff::PushFront { value } => value ); assert_let!(TimelineItemContent::Message(msg) = message.as_event().unwrap().content()); assert_let!(MessageType::Text(text) = msg.msgtype()); @@ -104,14 +104,14 @@ async fn test_back_pagination() { // The day divider is replaced. let day_divider = assert_next_matches!( timeline_stream, - VectorDiff::Insert { index: 0, value } => value + VectorDiff::PushFront { value } => value ); assert!(day_divider.is_day_divider()); assert_next_matches!(timeline_stream, VectorDiff::Remove { index: 2 }); let message = assert_next_matches!( timeline_stream, - VectorDiff::Insert { index: 0, value } => value + VectorDiff::PushFront { value } => value ); assert_let!(TimelineItemContent::OtherState(state) = message.as_event().unwrap().content()); assert_eq!(state.state_key(), ""); @@ -208,7 +208,7 @@ async fn test_back_pagination_highlighted() { let first = assert_next_matches!( timeline_stream, - VectorDiff::Insert { index: 0, value } => value + VectorDiff::PushFront { value } => value ); let remote_event = first.as_event().unwrap(); // Own events don't trigger push rules. @@ -216,13 +216,13 @@ async fn test_back_pagination_highlighted() { let day_divider = assert_next_matches!( timeline_stream, - VectorDiff::Insert { index: 0, value } => value + VectorDiff::PushFront { value } => value ); assert!(day_divider.is_day_divider()); let second = assert_next_matches!( timeline_stream, - VectorDiff::Insert { index: 0, value } => value + VectorDiff::PushFront { value } => value ); let remote_event = second.as_event().unwrap(); // `m.room.tombstone` should be highlighted by default. @@ -230,7 +230,7 @@ async fn test_back_pagination_highlighted() { let day_divider = assert_next_matches!( timeline_stream, - VectorDiff::Insert { index: 0, value } => value + VectorDiff::PushFront { value } => value ); assert!(day_divider.is_day_divider()); @@ -589,7 +589,7 @@ async fn test_empty_chunk() { let message = assert_next_matches!( timeline_stream, - VectorDiff::Insert { index: 0, value } => value + VectorDiff::PushFront { value } => value ); assert_let!(TimelineItemContent::Message(msg) = message.as_event().unwrap().content()); assert_let!(MessageType::Text(text) = msg.msgtype()); @@ -597,13 +597,13 @@ async fn test_empty_chunk() { let day_divider = assert_next_matches!( timeline_stream, - VectorDiff::Insert { index: 0, value } => value + VectorDiff::PushFront { value } => value ); assert!(day_divider.is_day_divider()); let message = assert_next_matches!( timeline_stream, - VectorDiff::Insert { index: 0, value } => value + VectorDiff::PushFront { value } => value ); assert_let!(TimelineItemContent::Message(msg) = message.as_event().unwrap().content()); assert_let!(MessageType::Text(text) = msg.msgtype()); @@ -611,14 +611,14 @@ async fn test_empty_chunk() { let day_divider = assert_next_matches!( timeline_stream, - VectorDiff::Insert { index: 0, value } => value + VectorDiff::PushFront { value } => value ); assert!(day_divider.is_day_divider()); assert_next_matches!(timeline_stream, VectorDiff::Remove { index: 2 }); let message = assert_next_matches!( timeline_stream, - VectorDiff::Insert { index: 0, value } => value + VectorDiff::PushFront { value } => value ); assert_let!(TimelineItemContent::OtherState(state) = message.as_event().unwrap().content()); assert_eq!(state.state_key(), ""); @@ -695,7 +695,7 @@ async fn test_until_num_items_with_empty_chunk() { let message = assert_next_matches!( timeline_stream, - VectorDiff::Insert { index:0, value } => value + VectorDiff::PushFront { value } => value ); assert_let!(TimelineItemContent::Message(msg) = message.as_event().unwrap().content()); assert_let!(MessageType::Text(text) = msg.msgtype()); @@ -703,13 +703,13 @@ async fn test_until_num_items_with_empty_chunk() { let day_divider = assert_next_matches!( timeline_stream, - VectorDiff::Insert { index: 0, value } => value + VectorDiff::PushFront { value } => value ); assert!(day_divider.is_day_divider()); let message = assert_next_matches!( timeline_stream, - VectorDiff::Insert { index: 0, value } => value + VectorDiff::PushFront { value } => value ); assert_let!(TimelineItemContent::Message(msg) = message.as_event().unwrap().content()); assert_let!(MessageType::Text(text) = msg.msgtype()); @@ -717,14 +717,14 @@ async fn test_until_num_items_with_empty_chunk() { let day_divider = assert_next_matches!( timeline_stream, - VectorDiff::Insert { index: 0, value } => value + VectorDiff::PushFront { value } => value ); assert!(day_divider.is_day_divider()); assert_next_matches!(timeline_stream, VectorDiff::Remove { index: 2 }); let message = assert_next_matches!( timeline_stream, - VectorDiff::Insert { index: 0, value } => value + VectorDiff::PushFront { value } => value ); assert_let!(TimelineItemContent::OtherState(state) = message.as_event().unwrap().content()); assert_eq!(state.state_key(), ""); @@ -739,14 +739,14 @@ async fn test_until_num_items_with_empty_chunk() { let day_divider = assert_next_matches!( timeline_stream, - VectorDiff::Insert { index: 0, value } => value + VectorDiff::PushFront { value } => value ); assert!(day_divider.is_day_divider()); assert_next_matches!(timeline_stream, VectorDiff::Remove { index: 2 }); let message = assert_next_matches!( timeline_stream, - VectorDiff::Insert { index: 0, value } => value + VectorDiff::PushFront { value } => value ); assert_let!(TimelineItemContent::Message(msg) = message.as_event().unwrap().content()); assert_let!(MessageType::Text(text) = msg.msgtype()); diff --git a/crates/matrix-sdk-ui/tests/integration/timeline/read_receipts.rs b/crates/matrix-sdk-ui/tests/integration/timeline/read_receipts.rs index 9b5f370f5..dd98ba8cc 100644 --- a/crates/matrix-sdk-ui/tests/integration/timeline/read_receipts.rs +++ b/crates/matrix-sdk-ui/tests/integration/timeline/read_receipts.rs @@ -132,9 +132,7 @@ async fn test_read_receipts_updates() { let first_event = first_item.as_event().unwrap(); assert!(first_event.read_receipts().is_empty()); - assert_let!( - Some(VectorDiff::Insert { index: 0, value: day_divider }) = timeline_stream.next().await - ); + assert_let!(Some(VectorDiff::PushFront { value: day_divider }) = timeline_stream.next().await); assert!(day_divider.is_day_divider()); let (own_receipt_event_id, _) = timeline.latest_user_read_receipt(own_user_id).await.unwrap(); @@ -369,9 +367,7 @@ async fn test_read_receipts_updates_on_filtered_events() { let event_a = item_a.as_event().unwrap(); assert!(event_a.read_receipts().is_empty()); - assert_let!( - Some(VectorDiff::Insert { index: 0, value: day_divider }) = timeline_stream.next().await - ); + assert_let!(Some(VectorDiff::PushFront { value: day_divider }) = timeline_stream.next().await); assert!(day_divider.is_day_divider()); let (own_receipt_event_id, _) = timeline.latest_user_read_receipt(own_user_id).await.unwrap(); diff --git a/crates/matrix-sdk-ui/tests/integration/timeline/replies.rs b/crates/matrix-sdk-ui/tests/integration/timeline/replies.rs index 7f24bca71..c657c0459 100644 --- a/crates/matrix-sdk-ui/tests/integration/timeline/replies.rs +++ b/crates/matrix-sdk-ui/tests/integration/timeline/replies.rs @@ -83,9 +83,7 @@ async fn test_in_reply_to_details() { assert_let!(Some(VectorDiff::PushBack { value: first }) = timeline_stream.next().await); assert_matches!(first.as_event().unwrap().content(), TimelineItemContent::Message(_)); - assert_let!( - Some(VectorDiff::Insert { index: 0, value: day_divider }) = timeline_stream.next().await - ); + assert_let!(Some(VectorDiff::PushFront { value: day_divider }) = timeline_stream.next().await); assert!(day_divider.is_day_divider()); assert_let!(Some(VectorDiff::PushBack { value: second }) = timeline_stream.next().await); diff --git a/crates/matrix-sdk-ui/tests/integration/timeline/sliding_sync.rs b/crates/matrix-sdk-ui/tests/integration/timeline/sliding_sync.rs index 6d5c19d81..8ef3bc75d 100644 --- a/crates/matrix-sdk-ui/tests/integration/timeline/sliding_sync.rs +++ b/crates/matrix-sdk-ui/tests/integration/timeline/sliding_sync.rs @@ -120,8 +120,8 @@ macro_rules! assert_timeline_stream { ) }; - // `insert [$nth] --- day divider ---` - ( @_ [ $stream:ident ] [ insert [$index:literal] --- day divider --- ; $( $rest:tt )* ] [ $( $accumulator:tt )* ] ) => { + // `prepend --- day divider ---` + ( @_ [ $stream:ident ] [ prepend --- day divider --- ; $( $rest:tt )* ] [ $( $accumulator:tt )* ] ) => { assert_timeline_stream!( @_ [ $stream ] @@ -131,7 +131,7 @@ macro_rules! assert_timeline_stream { { assert_matches!( $stream.next().now_or_never(), - Some(Some(VectorDiff::Insert { index: $index, value })) => { + Some(Some(VectorDiff::PushFront { value })) => { assert_matches!( &**value, TimelineItemKind::Virtual(VirtualTimelineItem::DayDivider(_)) => {} @@ -341,7 +341,7 @@ async fn test_timeline_basic() -> Result<()> { assert_timeline_stream! { [timeline_stream] append "$x1:bar.org"; - insert[0] --- day divider ---; + prepend --- day divider ---; update[1] "$x1:bar.org"; append "$x2:bar.org"; }; @@ -387,7 +387,7 @@ async fn test_timeline_duplicated_events() -> Result<()> { assert_timeline_stream! { [timeline_stream] append "$x1:bar.org"; - insert[0] --- day divider ---; + prepend --- day divider ---; update[1] "$x1:bar.org"; append "$x2:bar.org"; update[2] "$x2:bar.org"; @@ -465,7 +465,7 @@ async fn test_timeline_read_receipts_are_updated_live() -> Result<()> { assert_timeline_stream! { [timeline_stream] append "$x1:bar.org"; - insert[0] --- day divider ---; + prepend --- day divider ---; update[1] "$x1:bar.org"; append "$x2:bar.org"; }; diff --git a/crates/matrix-sdk-ui/tests/integration/timeline/subscribe.rs b/crates/matrix-sdk-ui/tests/integration/timeline/subscribe.rs index 18f996992..2bf937998 100644 --- a/crates/matrix-sdk-ui/tests/integration/timeline/subscribe.rs +++ b/crates/matrix-sdk-ui/tests/integration/timeline/subscribe.rs @@ -129,9 +129,7 @@ async fn test_event_filter() { assert_matches!(msg.msgtype(), MessageType::Text(_)); assert!(!msg.is_edited()); - assert_let!( - Some(VectorDiff::Insert { index: 0, value: day_divider }) = timeline_stream.next().await - ); + assert_let!(Some(VectorDiff::PushFront { value: day_divider }) = timeline_stream.next().await); assert!(day_divider.is_day_divider()); let second_event_id = event_id!("$Ga6Y2l0gKY"); @@ -260,7 +258,7 @@ async fn test_timeline_is_reset_when_a_user_is_ignored_or_unignored() { assert_next_matches!(timeline_stream, VectorDiff::PushBack { value } => { assert_eq!(value.as_event().unwrap().event_id(), Some(first_event_id)); }); - assert_next_matches!(timeline_stream, VectorDiff::Insert { index: 0, value } => { + assert_next_matches!(timeline_stream, VectorDiff::PushFront { value } => { assert!(value.is_day_divider()); }); assert_next_matches!(timeline_stream, VectorDiff::PushBack { value } => { @@ -326,7 +324,7 @@ async fn test_timeline_is_reset_when_a_user_is_ignored_or_unignored() { assert_next_matches!(timeline_stream, VectorDiff::PushBack { value } => { assert_eq!(value.as_event().unwrap().event_id(), Some(fourth_event_id)); }); - assert_next_matches!(timeline_stream, VectorDiff::Insert { index: 0, value } => { + assert_next_matches!(timeline_stream, VectorDiff::PushFront { value } => { assert!(value.is_day_divider()); }); assert_next_matches!(timeline_stream, VectorDiff::Set { index: 1, value } => { @@ -396,7 +394,7 @@ async fn test_profile_updates() { assert_eq!(event_1_item.event_id(), Some(event_1_id)); assert_matches!(event_1_item.sender_profile(), TimelineDetails::Unavailable); - assert_next_matches!(timeline_stream, VectorDiff::Insert { index: 0, value } => { + assert_next_matches!(timeline_stream, VectorDiff::PushFront { value } => { assert!(value.is_day_divider()); });