diff --git a/src/Microsoft.DocAsCode.Build.ManagedReference/ManagedReferenceDocumentProcessor.cs b/src/Microsoft.DocAsCode.Build.ManagedReference/ManagedReferenceDocumentProcessor.cs index 5e1942d37d7..39314821f0b 100644 --- a/src/Microsoft.DocAsCode.Build.ManagedReference/ManagedReferenceDocumentProcessor.cs +++ b/src/Microsoft.DocAsCode.Build.ManagedReference/ManagedReferenceDocumentProcessor.cs @@ -89,7 +89,7 @@ protected override FileModel LoadArticle(FileAndType file, ImmutableDictionary(file.File); - if (page.Items == null || page.Items.Count == 0) + if (page?.Items == null || page.Items.Count == 0) { return null; } diff --git a/test/Microsoft.DocAsCode.Build.ManagedReference.Tests/ManagedReferenceDocumentProcessorTest.cs b/test/Microsoft.DocAsCode.Build.ManagedReference.Tests/ManagedReferenceDocumentProcessorTest.cs index ccd30a8bb85..6ba04a2fc82 100644 --- a/test/Microsoft.DocAsCode.Build.ManagedReference.Tests/ManagedReferenceDocumentProcessorTest.cs +++ b/test/Microsoft.DocAsCode.Build.ManagedReference.Tests/ManagedReferenceDocumentProcessorTest.cs @@ -358,6 +358,38 @@ public void SystemKeysListShouldBeComplete() } } + [Fact] + public void LoadArticleWithEmptyFileShouldWarnAndReturnNull() + { + var fileWithNoContent = "TestData/mref/FileWithNoContent.yml"; + var file = new FileAndType(Directory.GetCurrentDirectory(), fileWithNoContent, DocumentType.Article); + var processor = new ManagedReferenceDocumentProcessor(); + + var listener = TestLoggerListener.CreateLoggerListenerWithPhaseStartFilter(nameof(LoadArticleWithEmptyFileShouldWarnAndReturnNull), LogLevel.Info); + try + { + Logger.RegisterListener(listener); + + FileModel actualFileModel; + using (new LoggerPhaseScope(nameof(LoadArticleWithEmptyFileShouldWarnAndReturnNull))) + { + actualFileModel = processor.Load(file, null); + } + + var warnings = listener.GetItemsByLogLevel(LogLevel.Warning); + Assert.Single(warnings); + var warning = warnings.Single(); + Assert.Equal("Please add `YamlMime` as the first line of file, e.g.: `### YamlMime:ManagedReference`, otherwise the file will be not treated as ManagedReference source file in near future.", warning.Message); + Assert.Equal(fileWithNoContent, warning.File); + + Assert.Null(actualFileModel); + } + finally + { + Logger.UnregisterListener(listener); + } + } + private void BuildDocument(FileCollection files) { var parameters = new DocumentBuildParameters diff --git a/test/Microsoft.DocAsCode.Build.ManagedReference.Tests/TestData/mref/FileWithNoContent.yml b/test/Microsoft.DocAsCode.Build.ManagedReference.Tests/TestData/mref/FileWithNoContent.yml new file mode 100644 index 00000000000..e69de29bb2d