public void TestApplyOperation()
        {
            IAVFieldOperation op1 = new AVIncrementOperation(7);
              IAVFieldOperation op2 = new AVSetOperation("legendia");
              IAVFieldOperation op3 = new AVSetOperation("vesperia");
              var operations = new Dictionary<string, IAVFieldOperation>() {
            { "exist", op1 },
            { "missing", op2 },
            { "change", op3 }
              };

              IObjectState state = new MutableObjectState {
            ServerData = new Dictionary<string, object>() {
              { "exist", 2 },
              { "change", "teletubies" }
            }
              };

              Assert.AreEqual(2, state["exist"]);
              Assert.AreEqual("teletubies", state["change"]);

              state = state.MutatedClone(mutableClone => {
            mutableClone.Apply(operations);
              });

              Assert.AreEqual(3, state.Count());
              Assert.AreEqual(9, state["exist"]);
              Assert.AreEqual("legendia", state["missing"]);
              Assert.AreEqual("vesperia", state["change"]);
        }
 public void TestEncodeParseFieldOperation()
 {
     var incOps = new AVIncrementOperation(1);
       IDictionary<string, object> value = ParseEncoderTestClass.Instance.Encode(incOps) as IDictionary<string, object>;
       Assert.AreEqual("Increment", value["__op"]);
       Assert.AreEqual(1, value["amount"]);
       // Other operations are tested in FieldOperationTests
 }