def test_change_one_of_multiple_values():
    new_contents = evolve_cell_source(THREE_CELL_CONTENTS, 0, ["x = 4; x"])

    opcodes = opcode_merge_cell_contents(THREE_CELL_CONTENTS, new_contents)

    assert len(opcodes) == 2
    assert opcodes[0].op_code == OpCodes.REPLACE
    assert opcodes[1].op_code == OpCodes.EQUAL
def test_insert_a_new_cell_and_update_another():
    modified_source = ["y = 3; y"]
    inserted_cell = JupyterCell(cell_type="code", index=2, source=["print('hello world')"], output=None)

    new_contents = evolve_cell_source(_insert_notebook_cell(THREE_CELL_CONTENTS, inserted_cell), 1, modified_source)

    opcodes = opcode_merge_cell_contents(THREE_CELL_CONTENTS, new_contents)
    assert [x.op_code for x in opcodes] == [
        OpCodes.EQUAL,
        OpCodes.REPLACE,
        OpCodes.EQUAL,
    ]

    assert opcodes[1].current == (1, 2)
    assert opcodes[1].updated == (1, 3)
def test_change_one_value():
    new_contents = evolve_cell_source(SIMPLE_CONTENTS, 0, ["x = 2; x"])
    opcodes = opcode_merge_cell_contents(SIMPLE_CONTENTS, new_contents)

    assert len(opcodes) == 1
    assert opcodes[0].op_code == OpCodes.REPLACE