1 // Licensed to the .NET Foundation under one or more agreements.
2 // The .NET Foundation licenses this file to you under the MIT license.
3 // See the LICENSE file in the project root for more information.
4 
5 using System.Collections.Generic;
6 using Xunit;
7 
8 namespace System.Linq.Expressions.Tests
9 {
10     public static class SymbolDocumentInfoTests
11     {
TestData()12         public static IEnumerable<object[]> TestData()
13         {
14             Guid documentType = new Guid(0x5a869d0b, 0x6611, 0x11d3, 0xbd, 0x2a, 0, 0, 0xf8, 8, 0x49, 0xbd);
15             yield return new object[] { "", Guid.Empty, Guid.Empty, documentType };
16             yield return new object[] { " \t \r ", Guid.Empty, Guid.NewGuid(), documentType };
17             yield return new object[] { "abc", Guid.NewGuid(), Guid.NewGuid(), documentType };
18             yield return new object[] { "\uD800\uDC00", Guid.NewGuid(), Guid.NewGuid(), Guid.Empty };
19         }
20 
21         [Theory]
22         [MemberData(nameof(TestData))]
SymbolDocument(string fileName, Guid language, Guid languageVendor, Guid documentType)23         public static void SymbolDocument(string fileName, Guid language, Guid languageVendor, Guid documentType)
24         {
25             if (documentType == new Guid(0x5a869d0b, 0x6611, 0x11d3, 0xbd, 0x2a, 0, 0, 0xf8, 8, 0x49, 0xbd))
26             {
27                 if (languageVendor == Guid.Empty)
28                 {
29                     if (language == Guid.Empty)
30                     {
31                         // SymbolDocument(string)
32                         SymbolDocumentInfo symbolDocument1 = Expression.SymbolDocument(fileName);
33                         VerifySymbolDocumentInfo(symbolDocument1, fileName, language, languageVendor, documentType);
34                     }
35                     // SymbolDocument(string, Guid)
36                     SymbolDocumentInfo symbolDocument2 = Expression.SymbolDocument(fileName, language);
37                     VerifySymbolDocumentInfo(symbolDocument2, fileName, language, languageVendor, documentType);
38                 }
39                 // SymbolDocument(string, Guid)
40                 SymbolDocumentInfo symbolDocument3 = Expression.SymbolDocument(fileName, language, languageVendor);
41                 VerifySymbolDocumentInfo(symbolDocument3, fileName, language, languageVendor, documentType);
42             }
43             // SymbolDocument(string, Guid, Guid)
44             SymbolDocumentInfo symbolDocument4 = Expression.SymbolDocument(fileName, language, languageVendor, documentType);
45             VerifySymbolDocumentInfo(symbolDocument4, fileName, language, languageVendor, documentType);
46         }
47 
48         [Fact]
SymbolDocument_NullFileName_ThrowsArgumentNullException()49         public static void SymbolDocument_NullFileName_ThrowsArgumentNullException()
50         {
51             AssertExtensions.Throws<ArgumentNullException>("fileName", () => Expression.SymbolDocument(null));
52             AssertExtensions.Throws<ArgumentNullException>("fileName", () => Expression.SymbolDocument(null, Guid.Empty));
53             AssertExtensions.Throws<ArgumentNullException>("fileName", () => Expression.SymbolDocument(null, Guid.Empty, Guid.Empty));
54             AssertExtensions.Throws<ArgumentNullException>("fileName", () => Expression.SymbolDocument(null, Guid.Empty, Guid.Empty, Guid.Empty));
55         }
56 
VerifySymbolDocumentInfo(SymbolDocumentInfo document, string fileName, Guid language, Guid languageVendor, Guid documentType)57         private static void VerifySymbolDocumentInfo(SymbolDocumentInfo document, string fileName, Guid language, Guid languageVendor, Guid documentType)
58         {
59             Assert.Equal(fileName, document.FileName);
60             Assert.Equal(language, document.Language);
61             Assert.Equal(languageVendor, document.LanguageVendor);
62             Assert.Equal(documentType, document.DocumentType);
63         }
64     }
65 }
66