/// <summary>
        /// Retrieve a value from the store. If the value is not present and there is a default value provider, then the
        /// default value from there will be returned, else if there is no provider then null will be returned.
        /// </summary>
        /// <param name="saveKey">The key to retrieve the value for.</param>
        /// <returns>The stored value.</returns>
        public object GetValue(string saveKey)
        {
            object saveValue;

            savedData.TryGetValue(saveKey, out saveValue);
            if (saveValue == null && defaultValueProvider != null)
            {
                return(defaultValueProvider.GetDefaultValue(saveKey));
            }
            return(saveValue);
        }
        public void GivenDefaultProviderWithKeyAndValueAbsent_WhenGetValue_ThenDefaultReturned()
        {
            DefaultValueProvider provider = Substitute.For <DefaultValueProvider>();

            store = new SerialSaveStore(persister, provider);
            string key0 = "key0";

            persister.ReadData().Returns(new Dictionary <string, object>());
            store.Load();
            string expectedDefault = "someMagicDefault";

            provider.GetDefaultValue(key0).Returns(expectedDefault);

            object actual = store.GetValue(key0);

            Assert.That(actual, Is.EqualTo(expectedDefault));
        }
        public void GivenDefaultProviderWithTypedSaveKeyAndValueAbsent_WhenGetValueTyped_ThenDefaultReturned()
        {
            DefaultValueProvider provider = Substitute.For <DefaultValueProvider>();

            store = new SerialSaveStore(persister, provider);
            SaveKey <int> key0 = new SaveKey <int>("key0");

            persister.ReadData().Returns(new Dictionary <string, object>());
            store.Load();
            int expectedDefault = 5005;

            provider.GetDefaultValue(key0.Name).Returns(expectedDefault);

            int actual = store.GetValue <int>(key0);

            Assert.That(actual, Is.EqualTo(expectedDefault));
        }