| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357 | pub mod helper;use crate::helper::{TestOp::*, *};use flowy_ot::core::Interval;#[test]fn delta_insert_text() {    let ops = vec![        Insert(0, "123", 0),        Insert(0, "456", 3),        AssertOpsJson(0, r#"[{"insert":"123456"}]"#),    ];    OpTester::new().run_script(ops);}#[test]fn delta_insert_text_at_head() {    let ops = vec![        Insert(0, "123", 0),        Insert(0, "456", 0),        AssertOpsJson(0, r#"[{"insert":"456123"}]"#),    ];    OpTester::new().run_script(ops);}#[test]fn delta_insert_text_at_middle() {    let ops = vec![        Insert(0, "123", 0),        Insert(0, "456", 1),        AssertOpsJson(0, r#"[{"insert":"145623"}]"#),    ];    OpTester::new().run_script(ops);}#[test]fn delta_insert_text_with_attr() {    let ops = vec![        Insert(0, "145", 0),        Insert(0, "23", 1),        Bold(0, Interval::new(0, 2), true),        AssertOpsJson(            0,            r#"[{"insert":"12","attributes":{"bold":"true"}},{"insert":"345"}]"#,        ),        Insert(0, "abc", 1),        AssertOpsJson(            0,            r#"[{"insert":"1abc2","attributes":{"bold":"true"}},{"insert":"345"}]"#,        ),    ];    OpTester::new().run_script(ops);}#[test]fn delta_add_bold_and_invert_all() {    let ops = vec![        Insert(0, "123", 0),        Bold(0, Interval::new(0, 3), true),        AssertOpsJson(0, r#"[{"insert":"123","attributes":{"bold":"true"}}]"#),        Bold(0, Interval::new(0, 3), false),        AssertOpsJson(0, r#"[{"insert":"123"}]"#),    ];    OpTester::new().run_script(ops);}#[test]fn delta_add_bold_and_invert_partial_suffix() {    let ops = vec![        Insert(0, "1234", 0),        Bold(0, Interval::new(0, 4), true),        AssertOpsJson(0, r#"[{"insert":"1234","attributes":{"bold":"true"}}]"#),        Bold(0, Interval::new(2, 4), false),        AssertOpsJson(            0,            r#"[{"insert":"12","attributes":{"bold":"true"}},{"insert":"34"}]"#,        ),    ];    OpTester::new().run_script(ops);}#[test]fn delta_add_bold_and_invert_partial_suffix2() {    let ops = vec![        Insert(0, "1234", 0),        Bold(0, Interval::new(0, 4), true),        AssertOpsJson(0, r#"[{"insert":"1234","attributes":{"bold":"true"}}]"#),        Bold(0, Interval::new(2, 4), false),        AssertOpsJson(            0,            r#"[{"insert":"12","attributes":{"bold":"true"}},{"insert":"34"}]"#,        ),        Bold(0, Interval::new(2, 4), true),        AssertOpsJson(0, r#"[{"insert":"1234","attributes":{"bold":"true"}}]"#),    ];    OpTester::new().run_script(ops);}#[test]fn delta_add_bold_and_invert_partial_prefix() {    let ops = vec![        Insert(0, "1234", 0),        Bold(0, Interval::new(0, 4), true),        AssertOpsJson(0, r#"[{"insert":"1234","attributes":{"bold":"true"}}]"#),        Bold(0, Interval::new(0, 2), false),        AssertOpsJson(            0,            r#"[{"insert":"12"},{"insert":"34","attributes":{"bold":"true"}}]"#,        ),    ];    OpTester::new().run_script(ops);}#[test]fn delta_add_bold_consecutive() {    let ops = vec![        Insert(0, "1234", 0),        Bold(0, Interval::new(0, 1), true),        AssertOpsJson(            0,            r#"[{"insert":"1","attributes":{"bold":"true"}},{"insert":"234"}]"#,        ),        Bold(0, Interval::new(1, 2), true),        AssertOpsJson(            0,            r#"[{"insert":"12","attributes":{"bold":"true"}},{"insert":"34"}]"#,        ),    ];    OpTester::new().run_script(ops);}#[test]#[should_panic]fn delta_add_bold_empty_str() {    let ops = vec![Bold(0, Interval::new(0, 4), true)];    OpTester::new().run_script(ops);}#[test]fn delta_add_bold_italic() {    let ops = vec![        Insert(0, "1234", 0),        Bold(0, Interval::new(0, 4), true),        Italic(0, Interval::new(0, 4), true),        AssertOpsJson(            0,            r#"[{"insert":"1234","attributes":{"italic":"true","bold":"true"}}]"#,        ),        Insert(0, "5678", 4),        AssertOpsJson(            0,            r#"[{"insert":"12345678","attributes":{"italic":"true","bold":"true"}}]"#,        ),        Italic(0, Interval::new(4, 6), false),        AssertOpsJson(            0,            r#"[{"insert":"1234","attributes":{"bold":"true","italic":"true"}},{"insert":"56","attributes":{"bold":"true"}},{"insert":"78","attributes":{"bold":"true","italic":"true"}}]"#,        ),    ];    OpTester::new().run_script(ops);}#[test]fn delta_add_bold_italic2() {    let ops = vec![        Insert(0, "123456", 0),        Bold(0, Interval::new(0, 6), true),        AssertOpsJson(0, r#"[{"insert":"123456","attributes":{"bold":"true"}}]"#),        Italic(0, Interval::new(0, 2), true),        AssertOpsJson(            0,            r#"[{"insert":"12","attributes":{"italic":"true","bold":"true"}},{"insert":"3456","attributes":{"bold":"true"}}]"#,        ),        Italic(0, Interval::new(4, 6), true),        AssertOpsJson(            0,            r#"[{"insert":"12","attributes":{"italic":"true","bold":"true"}},{"insert":"34","attributes":{"bold":"true"}},{"insert":"56","attributes":{"italic":"true","bold":"true"}}]"#,        ),    ];    OpTester::new().run_script(ops);}#[test]fn delta_add_bold_italic3() {    let ops = vec![        Insert(0, "123456789", 0),        Bold(0, Interval::new(0, 5), true),        Italic(0, Interval::new(0, 2), true),        AssertOpsJson(            0,            r#"[{"insert":"12","attributes":{"bold":"true","italic":"true"}},{"insert":"345","attributes":{"bold":"true"}},{"insert":"6789"}]"#,        ),        Italic(0, Interval::new(2, 4), true),        AssertOpsJson(            0,            r#"[{"insert":"1234","attributes":{"bold":"true","italic":"true"}},{"insert":"5","attributes":{"bold":"true"}},{"insert":"6789"}]"#,        ),        Bold(0, Interval::new(7, 9), true),        AssertOpsJson(            0,            r#"[{"insert":"1234","attributes":{"bold":"true","italic":"true"}},{"insert":"5","attributes":{"bold":"true"}},{"insert":"67"},{"insert":"89","attributes":{"bold":"true"}}]"#,        ),    ];    OpTester::new().run_script(ops);}#[test]fn delta_add_bold_italic_delete() {    let ops = vec![        Insert(0, "123456789", 0),        Bold(0, Interval::new(0, 5), true),        Italic(0, Interval::new(0, 2), true),        // AssertOpsJson(        //     0,        //     r#"[{"insert":"12","attributes":{"italic":"true","bold":"true"}},{"insert":"345","        // attributes":{"bold":"true"}},{"insert":"6789"}]"#, ),        Italic(0, Interval::new(2, 4), true),        AssertOpsJson(            0,            r#"[{"insert":"1234","attributes":{"bold":"true","italic":"true"}},{"insert":"5","attributes":{"bold":"true"}},{"insert":"6789"}]"#,        ),    ];    // Bold(0, Interval::new(7, 9), true),    // AssertOpsJson(    //     0,    //     r#"[{"insert":"1234","attributes":{"bold":"true","italic":"true"}},{"    // insert":"5","attributes":{"bold":"true"}},{"insert":"67"},{"insert":"89","    // attributes":{"bold":"true"}}]"#, ),    // Delete(0, Interval::new(0, 5)),    // AssertOpsJson(    //     0,    //     r#"[{"insert":"67"},{"insert":"89","attributes":{"bold":"true"}}]"#,    // ),    OpTester::new().run_script(ops);}#[test]fn delta_merge_inserted_text_with_same_attribute() {    let ops = vec![        InsertBold(0, "123", Interval::new(0, 3)),        AssertOpsJson(0, r#"[{"insert":"123","attributes":{"bold":"true"}}]"#),        InsertBold(0, "456", Interval::new(3, 6)),        AssertOpsJson(0, r#"[{"insert":"123456","attributes":{"bold":"true"}}]"#),    ];    OpTester::new().run_script(ops);}#[test]fn delta_compose_attr_delta_with_attr_delta_test() {    let ops = vec![        InsertBold(0, "123456", Interval::new(0, 6)),        AssertOpsJson(0, r#"[{"insert":"123456","attributes":{"bold":"true"}}]"#),        InsertBold(1, "7", Interval::new(0, 1)),        AssertOpsJson(1, r#"[{"insert":"7","attributes":{"bold":"true"}}]"#),        Transform(0, 1),        AssertOpsJson(0, r#"[{"insert":"1234567","attributes":{"bold":"true"}}]"#),        AssertOpsJson(1, r#"[{"insert":"1234567","attributes":{"bold":"true"}}]"#),    ];    OpTester::new().run_script(ops);}#[test]fn delta_compose_attr_delta_with_attr_delta_test2() {    let ops = vec![        Insert(0, "123456", 0),        Bold(0, Interval::new(0, 6), true),        Italic(0, Interval::new(0, 2), true),        Italic(0, Interval::new(4, 6), true),        AssertOpsJson(            0,            r#"[{"insert":"12","attributes":{"bold":"true","italic":"true"}},{"insert":"34","attributes":{"bold":"true"}},{"insert":"56","attributes":{"italic":"true","bold":"true"}}]"#,        ),        InsertBold(1, "7", Interval::new(0, 1)),        AssertOpsJson(1, r#"[{"insert":"7","attributes":{"bold":"true"}}]"#),        Transform(0, 1),        AssertOpsJson(            0,            r#"[{"insert":"12","attributes":{"italic":"true","bold":"true"}},{"insert":"34","attributes":{"bold":"true"}},{"insert":"56","attributes":{"italic":"true","bold":"true"}},{"insert":"7","attributes":{"bold":"true"}}]"#,        ),        AssertOpsJson(            1,            r#"[{"insert":"12","attributes":{"italic":"true","bold":"true"}},{"insert":"34","attributes":{"bold":"true"}},{"insert":"56","attributes":{"italic":"true","bold":"true"}},{"insert":"7","attributes":{"bold":"true"}}]"#,        ),    ];    OpTester::new().run_script(ops);}#[test]fn delta_compose_attr_delta_with_no_attr_delta_test() {    let expected = r#"[{"insert":"1234567","attributes":{"bold":"true"}}]"#;    let ops = vec![        InsertBold(0, "123456", Interval::new(0, 6)),        AssertOpsJson(0, r#"[{"insert":"123456","attributes":{"bold":"true"}}]"#),        Insert(1, "7", 0),        AssertOpsJson(1, r#"[{"insert":"7"}]"#),        Transform(0, 1),        AssertOpsJson(0, expected),        AssertOpsJson(1, expected),    ];    OpTester::new().run_script(ops);}#[test]fn delta_delete_heading() {    let ops = vec![        InsertBold(0, "123456", Interval::new(0, 6)),        AssertOpsJson(0, r#"[{"insert":"123456","attributes":{"bold":"true"}}]"#),        Delete(0, Interval::new(0, 2)),        AssertOpsJson(0, r#"[{"insert":"3456","attributes":{"bold":"true"}}]"#),    ];    OpTester::new().run_script(ops);}#[test]fn delta_delete_trailing() {    let ops = vec![        InsertBold(0, "123456", Interval::new(0, 6)),        AssertOpsJson(0, r#"[{"insert":"123456","attributes":{"bold":"true"}}]"#),        Delete(0, Interval::new(5, 6)),        AssertOpsJson(0, r#"[{"insert":"12345","attributes":{"bold":"true"}}]"#),    ];    OpTester::new().run_script(ops);}#[test]fn delta_delete_middle() {    let ops = vec![        InsertBold(0, "123456", Interval::new(0, 6)),        AssertOpsJson(0, r#"[{"insert":"123456","attributes":{"bold":"true"}}]"#),        Delete(0, Interval::new(0, 2)),        AssertOpsJson(0, r#"[{"insert":"3456","attributes":{"bold":"true"}}]"#),        Delete(0, Interval::new(2, 4)),        AssertOpsJson(0, r#"[{"insert":"34","attributes":{"bold":"true"}}]"#),    ];    OpTester::new().run_script(ops);}#[test]fn delta_delete_all() {    let ops = vec![        InsertBold(0, "123456", Interval::new(0, 6)),        AssertOpsJson(0, r#"[{"insert":"123456","attributes":{"bold":"true"}}]"#),        Delete(0, Interval::new(0, 6)),        AssertOpsJson(0, r#"[]"#),    ];    OpTester::new().run_script(ops);}
 |