1use super::*;
2use crate::test_both_dbs;
3use language::proto;
4use text::Buffer;
5
6test_both_dbs!(test_buffers, test_buffers_postgres, test_buffers_sqlite);
7
8async fn test_buffers(db: &Arc<Database>) {
9 let buffer_id = db.create_buffer().await.unwrap();
10
11 let mut buffer = Buffer::new(0, 0, "".to_string());
12 let mut operations = Vec::new();
13 operations.push(buffer.edit([(0..0, "hello world")]));
14 operations.push(buffer.edit([(5..5, ", cruel")]));
15 operations.push(buffer.edit([(0..5, "goodbye")]));
16 operations.push(buffer.undo().unwrap().1);
17 assert_eq!(buffer.text(), "hello, cruel world");
18
19 let operations = operations
20 .into_iter()
21 .map(|op| proto::serialize_operation(&language::Operation::Buffer(op)))
22 .collect::<Vec<_>>();
23
24 db.update_buffer(buffer_id, &operations).await.unwrap();
25
26 let buffer_data = db.get_buffer(buffer_id).await.unwrap();
27
28 let mut buffer_2 = Buffer::new(0, 0, buffer_data.base_text);
29 buffer_2
30 .apply_ops(buffer_data.operations.into_iter().map(|operation| {
31 let operation = proto::deserialize_operation(operation).unwrap();
32 if let language::Operation::Buffer(operation) = operation {
33 operation
34 } else {
35 unreachable!()
36 }
37 }))
38 .unwrap();
39
40 assert_eq!(buffer_2.text(), "hello, cruel world");
41}