buffer_tests.rs

 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}