public void RoundTripValuesArePreserved() { string savedState = string.Empty; // Save the state string when SaveProgramState(s) called this.provider .When(x => x.SaveProgramState(Arg.Any <string>())) .Do(x => savedState = (string)x.Args()[0]); // Set state information and dispose the state object to save. var state = new ProgramState(this.provider); state.Set("Age", 55); state.Set("Address", new { Street = street, City = city, Garbage = false }); state.Set(nameof(BowAndSkewMapDatum), new { FeetCounter = 5 }); state.Set(nameof(PatternRepeatMapDatum), new { FeetCounter = 4 }); state.Save(); this.provider .Received(1); // Be sure that the state can be reconstituted this.provider = Substitute.For <IProgramStateProvider>(); this.provider.GetProgramState().Returns(savedState); var state2 = new ProgramState(this.provider); Assert.Equal(55, state2.Get <int>("Age")); var address = state2.GetSubState("Address"); Assert.Equal(street, address.Get <string>("Street")); Assert.Equal(city, address.Get <string>("City")); Assert.False(address.Get <bool>("Garbage")); Assert.Equal(5, state2.Get <BowAndSkewMapDatum>(nameof(BowAndSkewMapDatum)).FeetCounter); Assert.Equal(4, state2.Get <PatternRepeatMapDatum>(nameof(PatternRepeatMapDatum)).FeetCounter); }
public ProgramState(IProgramStateProvider provider) { this.provider = provider; try { string text = provider.GetProgramState() ?? "{}"; this.root = JObject.Parse(text); } catch (Exception) { this.root = new JObject(); } }
public ProgramStateTests() { this.provider = Substitute.For <IProgramStateProvider>(); this.provider.GetProgramState().Returns("{}"); }