static bool param_compose_test(ot_op* op1, ot_op* op2, ot_op* expected, char** msg) { ot_op* actual = ot_compose(op1, op2); ot_free_op(op1); ot_free_op(op2); if (actual == NULL) { if (expected == NULL) { return true; } else { FAIL("Operations couldn't be composed.", msg); } } bool equal = ot_equal(expected, actual); char* expected_enc = ot_encode(expected); char* actual_enc = ot_encode(actual); ASSERT_CONDITION(equal, expected_enc, actual_enc, "Composed operation wasn't correct.", msg); ot_free_op(expected); ot_free_op(actual); free(expected_enc); free(actual_enc); return true; }
static bool server_receive_fires_event_when_xform_error_occurs(char** msg) { ot_op* initial_op = ot_new_op(); ot_insert(initial_op, "abc"); ot_doc* doc = ot_new_doc(); ot_doc_append(doc, &initial_op); ot_server* server = ot_new_server(send, event); ot_server_open(server, doc); ot_op* invalid_op = ot_new_op(); ot_skip(invalid_op, 1); char* invalid_op_enc = ot_encode(invalid_op); ot_server_receive(server, invalid_op_enc); ot_op* dec = ot_new_op(); ot_err err = ot_decode(dec, sent_msg); ASSERT_INT_EQUAL(OT_ERR_XFORM_FAILED, err, "Sent error was incorrect.", msg); ot_free_op(dec); ot_free_op(invalid_op); ot_free_server(server); free(invalid_op_enc); return true; }
static bool server_receive_fires_event_when_parent_cannot_be_found(char** msg) { ot_op* initial_op = ot_new_op(); ot_insert(initial_op, "abc"); ot_doc* doc = ot_new_doc(); ot_doc_append(doc, &initial_op); ot_server* server = ot_new_server(send, event); ot_server_open(server, doc); const int NONEMPTY_HASH = 0xFF; ot_op* invalid_op = ot_new_op(); ot_insert(invalid_op, "abc"); memset(invalid_op->parent, NONEMPTY_HASH, 20); char* invalid_op_enc = ot_encode(invalid_op); ot_server_receive(server, invalid_op_enc); ot_op* dec = ot_new_op(); ot_err err = ot_decode(dec, sent_msg); ASSERT_INT_EQUAL(OT_ERR_XFORM_FAILED, err, "Sent error was incorrect.", msg); ot_free_op(dec); ot_free_op(invalid_op); ot_free_server(server); free(invalid_op_enc); return true; }
static bool server_receive_when_empty_doc_is_opened(char** msg) { ot_server* server = ot_new_server(send, event); ot_doc* doc = ot_new_doc(); ot_server_open(server, doc); ot_op* op = ot_new_op(); ot_insert(op, "abc"); char* op_enc = ot_encode(op); ot_server_receive(server, op_enc); ot_op* dec = ot_new_op(); ot_err err = ot_decode(dec, sent_msg); ASSERT_INT_EQUAL(OT_ERR_NONE, err, "Unexpected sent error.", msg); ASSERT_OP_EQUAL(op, server->doc->composed, "Document state was incorrect.", msg); ot_free_op(dec); ot_free_op(op); ot_free_server(server); free(op_enc); return true; }