#![allow(unexpected_cfgs)]
#![allow(deprecated)]
use loro::{ExportMode, LoroDoc, LoroError, ToJson};
use serde_json::json;
use tracing::debug_span;
#[ctor::ctor]
fn init() {
dev_utils::setup_test_log();
}
#[test]
fn conflict_moves() -> Result<(), LoroError> {
let doc1 = LoroDoc::new();
doc1.set_peer_id(1)?;
let list1 = doc1.get_movable_list("list");
list1.insert(0, 1)?;
list1.insert(1, 2)?;
list1.insert(2, 3)?;
assert_eq!(
doc1.get_deep_value().to_json_value(),
json!({
"list": [1, 2, 3]
})
);
let doc2 = LoroDoc::new();
let updates = doc1.export(ExportMode::all_updates()).unwrap();
doc2.import(&updates)?;
doc2.set_peer_id(2)?;
let list2 = doc2.get_movable_list("list");
list1.mov(0, 2)?;
list1.log_internal_state();
list2.mov(0, 1)?;
list2.log_internal_state();
debug_span!("doc1 import").in_scope(|| {
let updates = doc2.export(ExportMode::all_updates()).unwrap();
doc1.import(&updates).unwrap();
});
debug_span!("doc2 import").in_scope(|| {
let updates = doc1.export(ExportMode::all_updates()).unwrap();
doc2.import(&updates).unwrap();
});
list1.log_internal_state();
list2.log_internal_state();
assert_eq!(doc1.get_deep_value(), doc2.get_deep_value());
assert_eq!(
doc1.get_deep_value().to_json_value(),
json!({
"list": [2, 1, 3]
})
);
Ok(())
}