/// <summary> /// Uses the specified assembly to locate a documentation file alongside the assembly by /// changing the extension to ".xml". If the file is found, it will be read and all /// found members will contain extended reflection information in the <see cref="Member.Info"/> /// property. /// </summary> /// <param name="assembly">The assembly to read the documentation from.</param> /// <param name="documentationFilename">Path to the documentation file.</param> /// <returns>All documented members found in the given file, together with the reflection metadata /// association from the assembly.</returns> /// <exception cref="System.IO.FileNotFoundException">Could not find documentation file to load.</exception> public static AssemblyMembers Read(Assembly assembly, string documentationFilename) { var fileName = documentationFilename; if (string.IsNullOrEmpty(fileName)) { fileName = Path.ChangeExtension(assembly.Location, ".xml"); } if (!File.Exists(fileName)) { throw new FileNotFoundException("Could not find documentation file to load. Expected: " + fileName, fileName); } var doc = XDocument.Load(fileName, LoadOptions.SetBaseUri | LoadOptions.SetLineInfo); var map = new MemberIdMap(); map.Add(assembly); return(new AssemblyMembers(assembly, map, doc, doc.Root.Element("members").Elements("member") .Where(element => element.Attribute("name") != null) //.OrderBy(e => e.Attribute("name").Value) .Select(element => CreateMember(element.Attribute("name").Value, element, ReadContent(element))) .Select(member => ReplaceExtensionMethods(member, map)) .Select(member => ReplaceTypes(member, map)) .Select(member => SetInfo(member, map)))); }
public void when_mapping_generic_method_on_non_generic_type_then_matches_xml_format() { var expected = "M:Demo.Sample.Do``1(System.Func{``0})"; var map = new MemberIdMap(); map.Add(typeof(Sample)); var actual = map.FindId(typeof(Sample).GetMethods().Single(m => m.IsGenericMethod)); Assert.Equal(expected, actual); }
public void when_documenting_generic_method_then_sets_info() { var map = new MemberIdMap(); map.Add(assembly); var typeId = map.FindId(typeof(Sample).GetMethods().Single(m => m.IsGenericMethod)); var member = DocReader.Read(assembly).Elements.OfType<Method>().Where(c => c.Id == typeId).FirstOrDefault(); Assert.NotNull(member); Assert.NotNull(member.Info); }
public void when_mapping_generic_method_on_generic_type_then_matches_xml_format() { var expected = "M:Demo.SampleGeneric`2.Do``1(System.Func{`0,`1,``0})"; var map = new MemberIdMap(); map.Add(typeof(SampleGeneric <,>)); var actual = map.FindId(typeof(SampleGeneric <,>).GetMethods().Single(m => m.IsGenericMethod)); Assert.Equal(expected, actual); }
public void when_mapping_generic_type_then_matches_xml_format() { var expected = "T:Demo.SampleGeneric`2"; var map = new MemberIdMap(); map.Add(typeof(SampleGeneric <,>)); var actual = map.FindId(typeof(SampleGeneric <,>)); Assert.Equal(expected, actual); }
public void when_mapping_type_then_can_retrieve_from_ids_or_members() { var map = new MemberIdMap(); map.Add(typeof(Sample)); var id = map.FindId(typeof(Sample)); Assert.Contains(id, map.Ids); Assert.Contains(typeof(Sample), map.Members); }
public void when_documenting_generic_method_on_generic_type_then_sets_info() { var map = new MemberIdMap(); map.Add(typeof(SampleGeneric <,>)); var typeId = map.FindId(typeof(SampleGeneric <,>).GetMethods()[0]); var member = DocReader.Read(assembly).Elements.OfType <Method>().Where(c => c.Id == typeId).FirstOrDefault(); Assert.NotNull(member); Assert.NotNull(member.Info); }
public void when_reading_provider_then_reads_remarks() { var map = new MemberIdMap(); map.Add(assembly); var id = map.FindId(typeof(Provider)); Assert.NotNull(id); var member = DocReader.Read(typeof(Provider).Assembly).Elements.OfType <Member>().FirstOrDefault(x => x.Id == id); Assert.NotNull(member); var element = member.Elements.OfType <Remarks>().FirstOrDefault(); Assert.NotNull(element); var children = element.Elements.ToList(); Assert.Equal(3, children.Count); Assert.IsType <Text>(children[0]); Assert.IsType <Example>(children[1]); Assert.IsType <List>(children[2]); Assert.Equal("Remarks.", ((Text)children[0]).Content); Assert.Equal("Example with code:", ((Example)children[1]).Elements.OfType <Text>().First().Content); Assert.Equal(@"var code = new Code(); var length = code.Length + 1;", ((Example)children[1]).Elements.OfType <Code>().First().Content); Assert.Equal("inline code", ((Example)children[1]).Elements.OfType <Para>().First().Elements.OfType <C>().First().Content); Assert.Equal("Term", ((List)children[2]) .Elements.OfType <ListHeader>().First() .Elements.OfType <Term>().First().Elements.OfType <Text>().First().Content); Assert.Equal("Description", ((List)children[2]) .Elements.OfType <ListHeader>().First() .Elements.OfType <Description>().First().Elements.OfType <Text>().First().Content); Assert.NotNull(((List)children[2]).Header.Term); Assert.NotNull(((List)children[2]).Header.Description); Assert.Equal("ItemTerm", ((List)children[2]) .Elements.OfType <Item>().First() .Elements.OfType <Term>().First().Elements.OfType <Text>().First().Content); Assert.NotNull(((List)children[2]).Items.First().Term); Assert.NotNull(((List)children[2]).Items.First().Description); Assert.Equal("ItemDescription", ((List)children[2]) .Elements.OfType <Item>().First() .Elements.OfType <Description>().First().Elements.OfType <Text>().First().Content); }
public void when_parsing_empty_code_then_removes_empty_text() { var map = new MemberIdMap(); map.Add(typeof(IProvider)); var typeId = map.FindId(typeof(IProvider)); var member = DocReader.Read(assembly).Elements.OfType <Interface>().Where(c => c.Id == typeId).Single(); var element = member.Elements.OfType <Remarks>().Single().Elements.OfType <Code>().Single(); Assert.Equal(0, element.Content.Length); }
public void when_parsing_property_then_reads_value_tag() { var map = new MemberIdMap(); map.Add(typeof(Sample)); var typeId = map.FindId(typeof(Sample).GetProperties()[0]); var member = DocReader.Read(assembly).Elements.OfType <Property>().Where(c => c.Id == typeId).Single(); var element = member.Elements.OfType <Value>().Single(); Assert.Equal("The id of this sample.", element.ToText()); }
public void when_parsing_empty_summary_then_removes_empty_text() { var map = new MemberIdMap(); map.Add(typeof(Provider)); var typeId = map.FindId(typeof(Provider)); var member = DocReader.Read(assembly).Elements.OfType <Class>().Where(c => c.Id == typeId).Single(); var element = member.Elements.OfType <Summary>().Single(); Assert.Empty(element.ToText()); }
public void when_parsing_unknown_element_then_reads_inner_content() { var map = new MemberIdMap(); map.Add(typeof(IProvider)); var typeId = map.FindId(typeof(IProvider)); var member = DocReader.Read(assembly).Elements.OfType <TypeDeclaration>().Where(c => c.Id == typeId).Single(); var element = member.Elements.OfType <Summary>().Single(); Assert.True(element.Elements.OfType <UnknownElement>().Any()); Assert.True(element.Elements.OfType <UnknownElement>().Single().Elements.OfType <Text>().Any()); }
public void when_rendering_see_then_renders_cref() { var map = new MemberIdMap(); map.Add(typeof(SampleExtensions)); var id = map.FindId(typeof(SampleExtensions)); var member = DocReader.Read(typeof(SampleExtensions).Assembly).Elements.OfType <Class>().Single(x => x.Id == id); var actual = member.Elements.OfType <Summary>().First().ToText(); var expected = "Extension class for Demo.Sample."; Assert.Equal(expected, actual); }
public void when_documenting_generic_type_then_can_match_with_mapper() { var map = new MemberIdMap(); map.Add(assembly); var typeId = map.FindId(typeof(SampleGeneric<,>)); var member = DocReader.Read(assembly).Elements.OfType<Class>().Where(c => c.Id == typeId).FirstOrDefault(); Assert.NotNull(member); Assert.NotNull(member.Info); Assert.Same(typeof(SampleGeneric<,>), member.Info); Assert.True(member.Kind.HasFlag(MemberKinds.Class)); Assert.True(member.Kind.HasFlag(MemberKinds.Type)); }
public void when_reading_from_assembly_then_provides_event_info() { var map = new MemberIdMap(); map.Add(assembly); var providerId = map.FindId(typeof(Provider)); var member = DocReader.Read(assembly).Elements.OfType <Event>().FirstOrDefault(); Assert.NotNull(member); Assert.NotNull(member.Info); Assert.Same(typeof(Provider).GetEvents()[0], member.Info); Assert.True(member.Kind.HasFlag(MemberKinds.Event)); }
public void when_reading_from_assembly_then_provides_nested_type_info() { var map = new MemberIdMap(); map.Add(assembly); var providerId = map.FindId(typeof(Sample.NestedType)); var member = DocReader.Read(assembly).Elements.OfType <TypeDeclaration>().Where(c => c.Id == providerId).FirstOrDefault(); Assert.NotNull(member); Assert.NotNull(member.Info); Assert.Same(typeof(Sample.NestedType), member.Info); Assert.True(member.Kind.HasFlag(MemberKinds.Type)); }
public void when_rendering_paramref_then_renders_param_name() { var map = new MemberIdMap(); map.Add(typeof(Sample)); var id = map.FindId(typeof(Sample).GetMethod("GetValue")); var member = DocReader.Read(typeof(SampleStruct).Assembly).Elements.OfType <Method>().Single(x => x.Id == id); var actual = member.Elements.OfType <Summary>().First().ToText(); var expected = "Gets the value for the given id."; Assert.Equal(expected, actual); }
public void when_rendering_c_then_renders_text() { var map = new MemberIdMap(); map.Add(typeof(SampleStruct)); var id = map.FindId(typeof(SampleStruct)); var member = DocReader.Read(typeof(SampleStruct).Assembly).Elements.OfType <Struct>().Single(x => x.Id == id); var actual = member.Elements.OfType <Summary>().First().ToText(); var expected = "Sample struct."; Assert.Equal(expected, actual); }
public void when_rendering_typeparamref_then_renders_type_param_name() { var map = new MemberIdMap(); map.Add(typeof(SampleGeneric <,>)); var id = map.FindId(typeof(SampleGeneric <,>)); var member = DocReader.Read(typeof(Sample).Assembly).Elements.OfType <Class>().Single(x => x.Id == id); var actual = member.Elements.OfType <Summary>().First().ToText(); var expected = "Sample with generic type T."; Assert.Equal(expected, actual); }
public void when_reading_from_assembly_then_provides_struct_info() { var map = new MemberIdMap(); map.Add(assembly); var typeId = map.FindId(typeof(SampleStruct)); var member = DocReader.Read(assembly).Elements.OfType <Struct>().Where(c => c.Id == typeId).FirstOrDefault(); Assert.NotNull(member); Assert.NotNull(member.Info); Assert.Same(typeof(SampleStruct), member.Info); Assert.True(member.Kind.HasFlag(MemberKinds.Struct)); Assert.True(member.Kind.HasFlag(MemberKinds.Type)); }
public void when_documenting_generic_type_then_can_match_with_mapper() { var map = new MemberIdMap(); map.Add(assembly); var typeId = map.FindId(typeof(SampleGeneric <,>)); var member = DocReader.Read(assembly).Elements.OfType <Class>().Where(c => c.Id == typeId).FirstOrDefault(); Assert.NotNull(member); Assert.NotNull(member.Info); Assert.Same(typeof(SampleGeneric <,>), member.Info); Assert.True(member.Kind.HasFlag(MemberKinds.Class)); Assert.True(member.Kind.HasFlag(MemberKinds.Type)); }
public void when_rendering_code_then_renders_text() { var map = new MemberIdMap(); map.Add(typeof(SampleStruct)); var id = map.FindId(typeof(SampleStruct)); var member = DocReader.Read(typeof(SampleStruct).Assembly).Elements.OfType<Struct>().Single(x => x.Id == id); var actual = member.Elements.OfType<Remarks>().First().ToText(); var expected = @"Code: var code = new Code(); var new = code.New(); cool!"; Assert.Equal(expected, actual); }
public void when_rendering_paragraph_then_renders_wrapping_new_lines() { var map = new MemberIdMap(); map.Add(typeof(ProviderType)); var id = map.FindId(typeof(ProviderType)); var member = DocReader.Read(typeof(ProviderType).Assembly).Elements.OfType <Enum>().Single(x => x.Id == id); var actual = member.Elements.OfType <Summary>().First().ToText(); var expected = @"The type of provider. With a paragraph Or two. And then some."; Assert.Equal(expected, actual); }
public void when_rendering_code_then_renders_text() { var map = new MemberIdMap(); map.Add(typeof(SampleStruct)); var id = map.FindId(typeof(SampleStruct)); var member = DocReader.Read(typeof(SampleStruct).Assembly).Elements.OfType <Struct>().Single(x => x.Id == id); var actual = member.Elements.OfType <Remarks>().First().ToText(); var expected = @"Code: var code = new Code(); var new = code.New(); cool!"; Assert.Equal(expected, actual); }
public void when_documenting_method_then_parses_type_param_and_ref() { var map = new MemberIdMap(); map.Add(typeof(SampleGeneric <,>)); var typeId = map.FindId(typeof(SampleGeneric <,>).GetMethods()[0]); var member = DocReader.Read(assembly).Elements.OfType <Method>().Where(c => c.Id == typeId).Single(); var paramRef = member.Elements.OfType <Summary>().Single().Elements.OfType <ParamRef>().FirstOrDefault(); Assert.NotNull(paramRef); Assert.Equal("func", paramRef.Name); var param = member.Elements.OfType <Param>().FirstOrDefault(); Assert.NotNull(param); Assert.Equal("func", param.Name); }
public void when_reading_provider_then_reads_exception() { var map = new MemberIdMap(); map.Add(assembly); var providerId = map.FindId(typeof(Provider)); Assert.NotNull(providerId); var member = DocReader.Read(typeof(Provider).Assembly).Elements.OfType <Member>().FirstOrDefault(x => x.Id == providerId); Assert.NotNull(member); var element = member.Elements.OfType <Exception>().FirstOrDefault(); Assert.NotNull(element); Assert.Equal(providerId, element.Cref); }
public void when_adding_assembly_then_adds_all_ids_from_used_types() { var map = new MemberIdMap(); map.Add(typeof(Sample).Assembly); Assert.NotNull(map.FindId(typeof(Provider))); Assert.NotNull(map.FindId(typeof(Provider).GetConstructors()[0])); Assert.NotNull(map.FindId(typeof(SampleExtensions))); Assert.NotNull(map.FindId(Reflect.GetMethod(() => SampleExtensions.Do(null)))); Assert.NotNull(map.FindId(typeof(Sample))); Assert.NotNull(map.FindId(typeof(Sample).GetConstructors()[0])); Assert.NotNull(map.FindId(Reflect<Sample>.GetMethod(x => x.GetValue(0)))); Assert.NotNull(map.FindId(Reflect<Sample>.GetProperty(x => x.Id))); Assert.NotNull(map.FindId(typeof(Sample.NestedType))); Assert.NotNull(map.FindId(typeof(Sample.NestedType).GetConstructors()[0])); Assert.NotNull(map.FindId(Reflect<Sample.NestedType>.GetProperty(x => x.NestedTypeProperty))); Assert.NotNull(map.FindId(typeof(Sample).GetNestedTypes(BindingFlags.NonPublic).Single())); }
public void when_adding_assembly_then_adds_all_ids_from_used_types() { var map = new MemberIdMap(); map.Add(typeof(Sample).Assembly); Assert.NotNull(map.FindId(typeof(Provider))); Assert.NotNull(map.FindId(typeof(Provider).GetConstructors()[0])); Assert.NotNull(map.FindId(typeof(SampleExtensions))); Assert.NotNull(map.FindId(Reflect.GetMethod(() => SampleExtensions.Do(null)))); Assert.NotNull(map.FindId(typeof(Sample))); Assert.NotNull(map.FindId(typeof(Sample).GetConstructors()[0])); Assert.NotNull(map.FindId(Reflect <Sample> .GetMethod(x => x.GetValue(0)))); Assert.NotNull(map.FindId(Reflect <Sample> .GetProperty(x => x.Id))); Assert.NotNull(map.FindId(typeof(Sample.NestedType))); Assert.NotNull(map.FindId(typeof(Sample.NestedType).GetConstructors()[0])); Assert.NotNull(map.FindId(Reflect <Sample.NestedType> .GetProperty(x => x.NestedTypeProperty))); Assert.NotNull(map.FindId(typeof(Sample).GetNestedTypes(BindingFlags.NonPublic).Single())); }
public void when_reading_provider_type_then_reads_summary() { var map = new MemberIdMap(); map.Add(assembly); var id = map.FindId(typeof(ProviderType)); Assert.NotNull(id); var member = DocReader.Read(typeof(ProviderType).Assembly).Elements.OfType <Member>().FirstOrDefault(x => x.Id == id); Assert.NotNull(member); var element = member.Elements.OfType <Summary>().FirstOrDefault(); Assert.NotNull(element); Assert.Equal(4, element.Elements.Count()); Assert.True(element.Elements.OfType <Text>().Any()); Assert.Equal("The type of provider.", element.Elements.OfType <Text>().First().Content); Assert.Equal("And then some.", element.Elements.OfType <Text>().Last().Content); }
public void when_rendering_paramref_then_renders_param_name() { var map = new MemberIdMap(); map.Add(typeof(Sample)); var id = map.FindId(typeof(Sample).GetMethod("GetValue")); var member = DocReader.Read(typeof(SampleStruct).Assembly).Elements.OfType<Method>().Single(x => x.Id == id); var actual = member.Elements.OfType<Summary>().First().ToText(); var expected = "Gets the value for the given id."; Assert.Equal(expected, actual); }
public void when_parsing_unknown_element_then_reads_inner_content() { var map = new MemberIdMap(); map.Add(typeof(IProvider)); var typeId = map.FindId(typeof(IProvider)); var member = DocReader.Read(assembly).Elements.OfType<TypeDeclaration>().Where(c => c.Id == typeId).Single(); var element = member.Elements.OfType<Summary>().Single(); Assert.True(element.Elements.OfType<UnknownElement>().Any()); Assert.True(element.Elements.OfType<UnknownElement>().Single().Elements.OfType<Text>().Any()); }
public void when_rendering_typeparamref_then_renders_type_param_name() { var map = new MemberIdMap(); map.Add(typeof(SampleGeneric<,>)); var id = map.FindId(typeof(SampleGeneric<,>)); var member = DocReader.Read(typeof(Sample).Assembly).Elements.OfType<Class>().Single(x => x.Id == id); var actual = member.Elements.OfType<Summary>().First().ToText(); var expected = "Sample with generic type T."; Assert.Equal(expected, actual); }
public void when_rendering_see_then_renders_cref() { var map = new MemberIdMap(); map.Add(typeof(SampleExtensions)); var id = map.FindId(typeof(SampleExtensions)); var member = DocReader.Read(typeof(SampleExtensions).Assembly).Elements.OfType<Class>().Single(x => x.Id == id); var actual = member.Elements.OfType<Summary>().First().ToText(); var expected = "Extension class for Demo.Sample."; Assert.Equal(expected, actual); }
public void when_rendering_paragram_then_renders_wrapping_new_lines() { var map = new MemberIdMap(); map.Add(typeof(ProviderType)); var id = map.FindId(typeof(ProviderType)); var member = DocReader.Read(typeof(ProviderType).Assembly).Elements.OfType<Enum>().Single(x => x.Id == id); var actual = member.Elements.OfType<Summary>().First().ToText(); var expected = @"The type of provider. With a paragraph Or two. And then some."; Assert.Equal(expected, actual); }
public void when_rendering_c_then_renders_text() { var map = new MemberIdMap(); map.Add(typeof(SampleStruct)); var id = map.FindId(typeof(SampleStruct)); var member = DocReader.Read(typeof(SampleStruct).Assembly).Elements.OfType<Struct>().Single(x => x.Id == id); var actual = member.Elements.OfType<Summary>().First().ToText(); var expected = "Sample struct."; Assert.Equal(expected, actual); }
public void when_documenting_generic_type_then_parses_type_param_and_ref() { var map = new MemberIdMap(); map.Add(assembly); var typeId = map.FindId(typeof(SampleGeneric<,>)); var member = DocReader.Read(assembly).Elements.OfType<Class>().Where(c => c.Id == typeId).Single(); var paramRef = member.Elements.OfType<Summary>().Single().Elements.OfType<TypeParamRef>().FirstOrDefault(); Assert.NotNull(paramRef); Assert.Equal("T", paramRef.Name); var param = member.Elements.OfType<TypeParam>().FirstOrDefault(); Assert.NotNull(param); Assert.Equal("T", param.Name); }
public void when_reading_from_assembly_then_provides_struct_info() { var map = new MemberIdMap(); map.Add(assembly); var typeId = map.FindId(typeof(SampleStruct)); var member = DocReader.Read(assembly).Elements.OfType<Struct>().Where(c => c.Id == typeId).FirstOrDefault(); Assert.NotNull(member); Assert.NotNull(member.Info); Assert.Same(typeof(SampleStruct), member.Info); Assert.True(member.Kind.HasFlag(MemberKinds.Struct)); Assert.True(member.Kind.HasFlag(MemberKinds.Type)); }
public void when_mapping_generic_type_then_matches_xml_format() { var expected = "T:Demo.SampleGeneric`2"; var map = new MemberIdMap(); map.Add(typeof(SampleGeneric<,>)); var actual = map.FindId(typeof(SampleGeneric<,>)); Assert.Equal(expected, actual); }
public void when_parsing_empty_summary_then_removes_empty_text() { var map = new MemberIdMap(); map.Add(typeof(Provider)); var typeId = map.FindId(typeof(Provider)); var member = DocReader.Read(assembly).Elements.OfType<Class>().Where(c => c.Id == typeId).Single(); var element = member.Elements.OfType<Summary>().Single(); Assert.Empty(element.ToText()); }
public void when_reading_provider_type_then_reads_summary() { var map = new MemberIdMap(); map.Add(assembly); var id = map.FindId(typeof(ProviderType)); Assert.NotNull(id); var member = DocReader.Read(typeof(ProviderType).Assembly).Elements.OfType<Member>().FirstOrDefault(x => x.Id == id); Assert.NotNull(member); var element = member.Elements.OfType<Summary>().FirstOrDefault(); Assert.NotNull(element); Assert.Equal(4, element.Elements.Count()); Assert.True(element.Elements.OfType<Text>().Any()); Assert.Equal("The type of provider.", element.Elements.OfType<Text>().First().Content); Assert.Equal("And then some.", element.Elements.OfType<Text>().Last().Content); }
public void when_reading_provider_then_reads_seealso() { var map = new MemberIdMap(); map.Add(assembly); var providerId = map.FindId(typeof(Provider)); Assert.NotNull(providerId); var member = DocReader.Read(typeof(Provider).Assembly).Elements.OfType<Member>().FirstOrDefault(x => x.Id == providerId); Assert.NotNull(member); var element = member.Elements.OfType<SeeAlso>().FirstOrDefault(); Assert.NotNull(element); Assert.Equal(providerId, element.Cref); }
public void when_reading_provider_then_reads_remarks() { var map = new MemberIdMap(); map.Add(assembly); var id = map.FindId(typeof(Provider)); Assert.NotNull(id); var member = DocReader.Read(typeof(Provider).Assembly).Elements.OfType<Member>().FirstOrDefault(x => x.Id == id); Assert.NotNull(member); var element = member.Elements.OfType<Remarks>().FirstOrDefault(); Assert.NotNull(element); var children = element.Elements.ToList(); Assert.Equal(3, children.Count); Assert.IsType<Text>(children[0]); Assert.IsType<Example>(children[1]); Assert.IsType<List>(children[2]); Assert.Equal("Remarks.", ((Text)children[0]).Content); Assert.Equal("Example with code:", ((Example)children[1]).Elements.OfType<Text>().First().Content); Assert.Equal(@"var code = new Code(); var length = code.Length + 1;", ((Example)children[1]).Elements.OfType<Code>().First().Content); Assert.Equal("inline code", ((Example)children[1]).Elements.OfType<Para>().First().Elements.OfType<C>().First().Content); Assert.Equal("Term", ((List)children[2]) .Elements.OfType<ListHeader>().First() .Elements.OfType<Term>().First().Elements.OfType<Text>().First().Content); Assert.Equal("Description", ((List)children[2]) .Elements.OfType<ListHeader>().First() .Elements.OfType<Description>().First().Elements.OfType<Text>().First().Content); Assert.NotNull(((List)children[2]).Header.Term); Assert.NotNull(((List)children[2]).Header.Description); Assert.Equal("ItemTerm", ((List)children[2]) .Elements.OfType<Item>().First() .Elements.OfType<Term>().First().Elements.OfType<Text>().First().Content); Assert.NotNull(((List)children[2]).Items.First().Term); Assert.NotNull(((List)children[2]).Items.First().Description); Assert.Equal("ItemDescription", ((List)children[2]) .Elements.OfType<Item>().First() .Elements.OfType<Description>().First().Elements.OfType<Text>().First().Content); }
public void when_parsing_property_then_reads_value_tag() { var map = new MemberIdMap(); map.Add(typeof(Sample)); var typeId = map.FindId(typeof(Sample).GetProperties()[0]); var member = DocReader.Read(assembly).Elements.OfType<Property>().Where(c => c.Id == typeId).Single(); var element = member.Elements.OfType<Value>().Single(); Assert.Equal("The id of this sample.", element.ToText()); }
public void when_reading_from_assembly_then_provides_event_info() { var map = new MemberIdMap(); map.Add(assembly); var providerId = map.FindId(typeof(Provider)); var member = DocReader.Read(assembly).Elements.OfType<Event>().FirstOrDefault(); Assert.NotNull(member); Assert.NotNull(member.Info); Assert.Same(typeof(Provider).GetEvents()[0], member.Info); Assert.True(member.Kind.HasFlag(MemberKinds.Event)); }
public void when_mapping_type_then_can_retrieve_from_ids_or_members() { var map = new MemberIdMap(); map.Add(typeof(Sample)); var id = map.FindId(typeof(Sample)); Assert.True(map.Ids.Contains(id)); Assert.True(map.Members.Contains(typeof(Sample))); }
public void when_reading_from_assembly_then_provides_nested_type_info() { var map = new MemberIdMap(); map.Add(assembly); var providerId = map.FindId(typeof(Sample.NestedType)); var member = DocReader.Read(assembly).Elements.OfType<TypeDeclaration>().Where(c => c.Id == providerId).FirstOrDefault(); Assert.NotNull(member); Assert.NotNull(member.Info); Assert.Same(typeof(Sample.NestedType), member.Info); Assert.True(member.Kind.HasFlag(MemberKinds.Type)); }
public void when_parsing_empty_code_then_removes_empty_text() { var map = new MemberIdMap(); map.Add(typeof(IProvider)); var typeId = map.FindId(typeof(IProvider)); var member = DocReader.Read(assembly).Elements.OfType<Interface>().Where(c => c.Id == typeId).Single(); var element = member.Elements.OfType<Remarks>().Single().Elements.OfType<Code>().Single(); Assert.Equal(0, element.Content.Length); }
/// <summary> /// Uses the specified assembly to locate a documentation file alongside the assembly by /// changing the extension to ".xml". If the file is found, it will be read and all /// found members will contain extended reflection information in the <see cref="Member.Info"/> /// property. /// </summary> /// <param name="assembly">The assembly to read the documentation from.</param> /// <param name="documentationFilename">Path to the documentation file.</param> /// <returns>All documented members found in the given file, together with the reflection metadata /// association from the assembly.</returns> /// <exception cref="System.IO.FileNotFoundException">Could not find documentation file to load.</exception> public static AssemblyMembers Read(Assembly assembly, string documentationFilename) { var fileName = documentationFilename; if (string.IsNullOrEmpty(fileName)) fileName = Path.ChangeExtension(assembly.Location, ".xml"); if (!File.Exists(fileName)) throw new FileNotFoundException("Could not find documentation file to load. Expected: " + fileName, fileName); var doc = XDocument.Load(fileName, LoadOptions.SetBaseUri | LoadOptions.SetLineInfo); var map = new MemberIdMap(); map.Add(assembly); return new AssemblyMembers(assembly, map, doc, doc.Root.Element("members").Elements("member") .Where(element => element.Attribute("name") != null) //.OrderBy(e => e.Attribute("name").Value) .Select(element => CreateMember(element.Attribute("name").Value, element, ReadContent(element))) .Select(member => ReplaceExtensionMethods(member, map)) .Select(member => ReplaceTypes(member, map)) .Select(member => SetInfo(member, map))); }