public void ExportedRulesMustExist(MemberInfo member, ExportPropertyXamlRuleDefinitionAttribute attribute) { Assert.NotNull(attribute); var assembly = Assembly.Load(attribute.XamlResourceAssemblyName); using Stream stream = assembly.GetManifestResourceStream(attribute.XamlResourceStreamName); Assert.True(stream != null, $"The rule '{attribute.XamlResourceStreamName}' indicated by '{GetTypeQualifiedName(member)}' does not exist in assembly '{attribute.XamlResourceAssemblyName}'."); }
public void BrowseObjectsMustBeInBrowseObjectContext(MemberInfo member, ExportPropertyXamlRuleDefinitionAttribute attribute) { if (!member.Name.Contains("BrowseObject")) { return; } foreach (string context in attribute.Context.Split(';')) { if (context == PropertyPageContexts.BrowseObject) { return; } } Assert.True(false, $"'{GetTypeQualifiedName(member)}' must live in the PropertyPageContexts.BrowseObject context."); }
public void ExportedRulesMustExist(MemberInfo member, ExportPropertyXamlRuleDefinitionAttribute attribute) { Assert.NotNull(attribute); // HERE BE DRAGONS // Note the following are *not* equivalent: // Assembly.Load(assemblyNameString) // Assembly.Load(new AssemblyName(assemblyNameString)) // The first will accept certain malformed assembly names that the second does not, // and will successfully load the assembly where the second throws an exception. // CPS uses the second form when loading assemblies to extract embedded XAML, and // so we must do the same in this test. var assemblyName = new AssemblyName(attribute.XamlResourceAssemblyName); var assembly = Assembly.Load(assemblyName); using Stream stream = assembly.GetManifestResourceStream(attribute.XamlResourceStreamName); Assert.True(stream != null, $"The rule '{attribute.XamlResourceStreamName}' indicated by '{GetTypeQualifiedName(member)}' does not exist in assembly '{attribute.XamlResourceAssemblyName}'."); }