private static void VerifyInvalidVariantCombination <T, TDefault>( Func <Type, TDefault, IVariantConfigurationCollection, Variant <T> > variantFactory , TDefault defaultValue, IVariantConfigurationCollection expectedConfiguration) { var defaultValueType = typeof(TDefault); var derivedClassType = typeof(DerivedClass); // ReSharper disable once ImplicitlyCapturedClosure Assert.Throws <ArgumentException>(() => variantFactory(derivedClassType, defaultValue, expectedConfiguration) ).VerifyException(x => { var data = x.Data; var keys = new[] { variantTypeArgumentName, configuration, ProtectedValue, VariantTypeFullName }; Assert.Equal(keys.Length, data.Count); Assert.All(keys, key => Assert.True(data.Contains(key))); Assert.NotNull(data[configuration]); Assert.Same(expectedConfiguration, Assert.IsAssignableFrom <VariantConfigurationCollection>(data[configuration])); Assert.Equal(derivedClassType, Assert.IsAssignableFrom <Type>(data[variantTypeArgumentName])); var protectedValueData = data[ProtectedValue]; var variantTypeFullNameData = data[VariantTypeFullName]; if (defaultValue == null) { Assert.All(new[] { protectedValueData, variantTypeFullNameData }, Assert.Null); return; } Assert.IsAssignableFrom <TDefault>(protectedValueData); Assert.Equal(defaultValueType, Assert.IsAssignableFrom <Type>(variantTypeFullNameData)); }); }
private static void VerifyMisconfiguredVariant <T, TDefault>( Func <IVariantConfigurationCollection, Variant <T> > variantFactory , TDefault defaultValue, IVariantConfigurationCollection expectedConfiguration) { var defaultValueType = defaultValue.GetType(); // ReSharper disable once ImplicitlyCapturedClosure Assert.Throws <ArgumentException>(() => variantFactory(expectedConfiguration) ).VerifyException(x => { var data = x.Data; var keys = new[] { variantTypeArgumentName, configuration, ProtectedValue, VariantTypeFullName }; Assert.Equal(keys.Length, data.Count); Assert.All(keys, key => Assert.True(data.Contains(key))); Assert.NotNull(data[configuration]); Assert.Same(expectedConfiguration, Assert.IsAssignableFrom <VariantConfigurationCollection>(data[configuration])); Assert.Equal(defaultValue, Assert.IsAssignableFrom <TDefault>(data[ProtectedValue])); Assert.Equal(defaultValueType, Assert.IsAssignableFrom <Type>(data[variantTypeArgumentName])); Assert.Equal(defaultValueType, Assert.IsAssignableFrom <Type>(data[VariantTypeFullName])); }); }
protected override void VerifyConfigurationCorrect(IVariantConfigurationCollection configuration) => Assert.Collection(InternalConfiguration , VerifyConfiguration <bool> , VerifyConfiguration <long> , VerifyConfiguration <ulong> , VerifyConfiguration <float> , VerifyConfiguration <double> , VerifyConfiguration <string> , VerifyConfiguration <IBytesEnumerable> , VerifyConfiguration <IdentifierPath> );
protected abstract void VerifyConfigurationCorrect(IVariantConfigurationCollection configuration);
protected override void VerifyConfigurationCorrect(IVariantConfigurationCollection configuration) => Assert.Collection(InternalConfiguration , VerifyConfiguration <ProtoType> , VerifyConfiguration <ElementTypeIdentifierPath> );