TestBase.cs 21.0 KB
Newer Older
1
// Copyright (c) Microsoft.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
P
Pilchie 已提交
2
using System;
T
Tomas Matousek 已提交
3
using System.Diagnostics;
P
Pilchie 已提交
4
using System.IO;
T
Tomas Matousek 已提交
5
using System.Xml.Linq;
P
Pilchie 已提交
6
using Microsoft.CodeAnalysis;
T
Tomas Matousek 已提交
7
using Microsoft.CodeAnalysis.CSharp;
P
Pilchie 已提交
8
using Microsoft.CodeAnalysis.Test.Utilities;
T
Tomas Matousek 已提交
9 10
using Microsoft.CodeAnalysis.Text;
using Microsoft.CodeAnalysis.VisualBasic;
P
Pilchie 已提交
11 12 13 14 15 16 17 18

namespace Roslyn.Test.Utilities
{
    /// <summary>
    /// Base class for all unit test classes.
    /// </summary>
    public abstract class TestBase : IDisposable
    {
B
beep boop 已提交
19
        private TempRoot _temp;
P
Pilchie 已提交
20

21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
        protected TestBase()
        {
        }

        public static string GetUniqueName()
        {
            return Guid.NewGuid().ToString("D");
        }

        public TempRoot Temp
        {
            get
            {
                if (_temp == null)
                {
                    _temp = new TempRoot();
                }

                return _temp;
            }
        }

        public virtual void Dispose()
        {
            if (_temp != null)
            {
                _temp.Dispose();
            }
        }

        #region Metadata References

T
Tomas Matousek 已提交
53 54 55 56 57 58 59 60 61
        private static MetadataReference[] s_lazyDefaultVbReferences;
        private static MetadataReference[] s_lazyLatestVbReferences;

        public static MetadataReference[] DefaultVbReferences => s_lazyDefaultVbReferences ?? 
            (s_lazyDefaultVbReferences = new[] { MscorlibRef, SystemRef, SystemCoreRef, MsvbRef });

        public static MetadataReference[] LatestVbReferences = s_lazyLatestVbReferences ??
            (s_lazyLatestVbReferences = new[] { MscorlibRef_v4_0_30316_17626, SystemRef_v4_0_30319_17929, SystemCoreRef_v4_0_30319_17929, MsvbRef_v4_0_30319_17929 });

B
beep boop 已提交
62 63
        private static MetadataReference[] s_winRtRefs;
        private static MetadataReference[] s_portableRefsMinimal;
P
Pilchie 已提交
64 65 66 67 68 69 70 71 72

        /// <summary>
        /// The array of 7 metadataimagereferences that are required to compile
        /// against windows.winmd (including windows.winmd itself).
        /// </summary>
        public static MetadataReference[] WinRtRefs
        {
            get
            {
B
beep boop 已提交
73
                if (s_winRtRefs == null)
P
Pilchie 已提交
74
                {
75
                    var winmd = AssemblyMetadata.CreateFromImage(TestResources.WinRt.Windows).GetReference(display: "Windows");
B
beep boop 已提交
76

P
Pilchie 已提交
77
                    var windowsruntime =
78
                        AssemblyMetadata.CreateFromImage(TestResources.NetFX.v4_0_30319_17929.System_Runtime_WindowsRuntime).GetReference(display: "System.Runtime.WindowsRuntime.dll");
B
beep boop 已提交
79

P
Pilchie 已提交
80
                    var runtime =
81
                        AssemblyMetadata.CreateFromImage(TestResources.NetFX.v4_0_30319_17929.System_Runtime).GetReference(display: "System.Runtime.dll");
P
Pilchie 已提交
82 83

                    var objectModel =
84
                        AssemblyMetadata.CreateFromImage(TestResources.NetFX.v4_0_30319_17929.System_ObjectModel).GetReference(display: "System.ObjectModel.dll");
P
Pilchie 已提交
85 86


87
                    var uixaml = AssemblyMetadata.CreateFromImage(TestResources.NetFX.v4_0_30319_17929.System_Runtime_WindowsRuntime_UI_Xaml).
88
                        GetReference(display: "System.Runtime.WindowsRuntime.UI.Xaml.dll");
P
Pilchie 已提交
89 90


91
                    var interop = AssemblyMetadata.CreateFromImage(TestResources.NetFX.v4_0_30319_17929.System_Runtime_InteropServices_WindowsRuntime).
92
                        GetReference(display: "System.Runtime.InteropServices.WindowsRuntime.dll");
P
Pilchie 已提交
93 94

                    //Not mentioned in the adapter doc but pointed to from System.Runtime, so we'll put it here.
95
                    var system = AssemblyMetadata.CreateFromImage(TestResources.NetFX.v4_0_30319.System).GetReference(display: "System.dll");
P
Pilchie 已提交
96

97
                    var mscor = AssemblyMetadata.CreateFromImage(TestResources.NetFX.v4_0_30316_17626.mscorlib).GetReference(display: "mscorlib");
P
Pilchie 已提交
98

B
beep boop 已提交
99
                    s_winRtRefs = new MetadataReference[] { winmd, windowsruntime, runtime, objectModel, uixaml, interop, system, mscor };
P
Pilchie 已提交
100 101
                }

B
beep boop 已提交
102
                return s_winRtRefs;
P
Pilchie 已提交
103 104 105 106 107 108 109 110 111 112
            }
        }

        /// <summary>
        /// The array of minimal references for portable library (mscorlib.dll and System.Runtime.dll)
        /// </summary>
        public static MetadataReference[] PortableRefsMinimal
        {
            get
            {
B
beep boop 已提交
113
                if (s_portableRefsMinimal == null)
P
Pilchie 已提交
114
                {
115
                    s_portableRefsMinimal = new MetadataReference[] { MscorlibPP7Ref, SystemRuntimePP7Ref };
P
Pilchie 已提交
116 117
                }

B
beep boop 已提交
118
                return s_portableRefsMinimal;
P
Pilchie 已提交
119 120 121 122 123 124 125
            }
        }


        /// <summary>
        /// Reference to an assembly that defines Expression Trees.
        /// </summary>
T
Tomas Matousek 已提交
126
        public static MetadataReference ExpressionAssemblyRef => SystemCoreRef;
P
Pilchie 已提交
127 128 129 130

        /// <summary>
        /// Reference to an assembly that defines LINQ operators.
        /// </summary>
T
Tomas Matousek 已提交
131
        public static MetadataReference LinqAssemblyRef => SystemCoreRef;
P
Pilchie 已提交
132 133 134 135

        /// <summary>
        /// Reference to an assembly that defines ExtensionAttribute.
        /// </summary>
T
Tomas Matousek 已提交
136
        public static MetadataReference ExtensionAssemblyRef => SystemCoreRef;
P
Pilchie 已提交
137

B
beep boop 已提交
138
        private static MetadataReference s_systemCoreRef_v4_0_30319_17929;
P
Pilchie 已提交
139 140 141 142
        public static MetadataReference SystemCoreRef_v4_0_30319_17929
        {
            get
            {
B
beep boop 已提交
143
                if (s_systemCoreRef_v4_0_30319_17929 == null)
P
Pilchie 已提交
144
                {
145
                    s_systemCoreRef_v4_0_30319_17929 = AssemblyMetadata.CreateFromImage(TestResources.NetFX.v4_0_30319_17929.System_Core).GetReference(display: "System.Core.v4_0_30319_17929.dll");
P
Pilchie 已提交
146 147
                }

B
beep boop 已提交
148
                return s_systemCoreRef_v4_0_30319_17929;
P
Pilchie 已提交
149 150 151
            }
        }

B
beep boop 已提交
152
        private static MetadataReference s_systemCoreRef;
P
Pilchie 已提交
153 154 155 156
        public static MetadataReference SystemCoreRef
        {
            get
            {
B
beep boop 已提交
157
                if (s_systemCoreRef == null)
P
Pilchie 已提交
158
                {
159
                    s_systemCoreRef = AssemblyMetadata.CreateFromImage(TestResources.NetFX.v4_0_30319.System_Core).GetReference(display: "System.Core.v4_0_30319.dll");
P
Pilchie 已提交
160 161
                }

B
beep boop 已提交
162
                return s_systemCoreRef;
P
Pilchie 已提交
163 164 165
            }
        }

B
beep boop 已提交
166
        private static MetadataReference s_systemWindowsFormsRef;
P
Pilchie 已提交
167 168 169 170
        public static MetadataReference SystemWindowsFormsRef
        {
            get
            {
B
beep boop 已提交
171
                if (s_systemWindowsFormsRef == null)
P
Pilchie 已提交
172
                {
173
                    s_systemWindowsFormsRef = AssemblyMetadata.CreateFromImage(TestResources.NetFX.v4_0_30319.System_Windows_Forms).GetReference(display: "System.Windows.Forms.v4_0_30319.dll");
P
Pilchie 已提交
174 175
                }

B
beep boop 已提交
176
                return s_systemWindowsFormsRef;
P
Pilchie 已提交
177 178 179
            }
        }

B
beep boop 已提交
180
        private static MetadataReference s_systemDrawingRef;
P
Pilchie 已提交
181 182 183 184
        public static MetadataReference SystemDrawingRef
        {
            get
            {
B
beep boop 已提交
185
                if (s_systemDrawingRef == null)
P
Pilchie 已提交
186
                {
187
                    s_systemDrawingRef = AssemblyMetadata.CreateFromImage(TestResources.NetFX.v4_0_30319.System_Drawing).GetReference(display: "System.Drawing.v4_0_30319.dll");
P
Pilchie 已提交
188 189
                }

B
beep boop 已提交
190
                return s_systemDrawingRef;
P
Pilchie 已提交
191 192 193
            }
        }

B
beep boop 已提交
194
        private static MetadataReference s_systemDataRef;
P
Pilchie 已提交
195 196 197 198
        public static MetadataReference SystemDataRef
        {
            get
            {
B
beep boop 已提交
199
                if (s_systemDataRef == null)
P
Pilchie 已提交
200
                {
201
                    s_systemDataRef = AssemblyMetadata.CreateFromImage(TestResources.NetFX.v4_0_30319.System_Data).GetReference(display: "System.Data.v4_0_30319.dll");
P
Pilchie 已提交
202 203
                }

B
beep boop 已提交
204
                return s_systemDataRef;
P
Pilchie 已提交
205 206 207
            }
        }

B
beep boop 已提交
208
        private static MetadataReference s_mscorlibRef;
P
Pilchie 已提交
209 210 211 212
        public static MetadataReference MscorlibRef
        {
            get
            {
B
beep boop 已提交
213
                if (s_mscorlibRef == null)
P
Pilchie 已提交
214
                {
215
                    s_mscorlibRef = AssemblyMetadata.CreateFromImage(TestResources.NetFX.v4_0_30319.mscorlib).GetReference(display: "mscorlib.v4_0_30319.dll");
P
Pilchie 已提交
216 217
                }

B
beep boop 已提交
218
                return s_mscorlibRef;
P
Pilchie 已提交
219 220 221
            }
        }

B
beep boop 已提交
222
        private static MetadataReference s_mscorlibRefPortable;
P
Pilchie 已提交
223 224 225 226
        public static MetadataReference MscorlibRefPortable
        {
            get
            {
B
beep boop 已提交
227
                if (s_mscorlibRefPortable == null)
P
Pilchie 已提交
228
                {
229
                    s_mscorlibRefPortable = AssemblyMetadata.CreateFromImage(TestResources.NetFX.v4_0_30319.mscorlib_portable).GetReference(display: "mscorlib.v4_0_30319.portable.dll");
P
Pilchie 已提交
230 231
                }

B
beep boop 已提交
232
                return s_mscorlibRefPortable;
P
Pilchie 已提交
233 234 235
            }
        }

B
beep boop 已提交
236
        private static MetadataReference s_aacorlibRef;
P
Pilchie 已提交
237 238 239 240
        public static MetadataReference AacorlibRef
        {
            get
            {
B
beep boop 已提交
241
                if (s_aacorlibRef == null)
P
Pilchie 已提交
242
                {
243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258
                    var source = TestResources.NetFX.aacorlib_v15_0_3928.aacorlib_v15_0_3928_cs;
                    var syntaxTree = Microsoft.CodeAnalysis.CSharp.SyntaxFactory.ParseSyntaxTree(source);

                    var compilationOptions = new Microsoft.CodeAnalysis.CSharp.CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary);

                    var compilation = Microsoft.CodeAnalysis.CSharp.CSharpCompilation.Create("aacorlib.v15.0.3928.dll", new[] { syntaxTree }, null, compilationOptions);

                    Stream dllStream = new MemoryStream();
                    var emitResult = compilation.Emit(dllStream);
                    if (!emitResult.Success)
                    {
                        emitResult.Diagnostics.Verify();
                    }
                    dllStream.Seek(0, SeekOrigin.Begin);

                    s_aacorlibRef = AssemblyMetadata.CreateFromStream(dllStream).GetReference(display: "mscorlib.v4_0_30319.dll");
P
Pilchie 已提交
259 260
                }

B
beep boop 已提交
261
                return s_aacorlibRef;
P
Pilchie 已提交
262 263 264
            }
        }

B
beep boop 已提交
265
        private static MetadataReference s_mscorlibRef_v4_0_30316_17626;
P
Pilchie 已提交
266 267 268 269
        public static MetadataReference MscorlibRef_v4_0_30316_17626
        {
            get
            {
B
beep boop 已提交
270
                if (s_mscorlibRef_v4_0_30316_17626 == null)
P
Pilchie 已提交
271
                {
272
                    s_mscorlibRef_v4_0_30316_17626 = AssemblyMetadata.CreateFromImage(TestResources.NetFX.v4_0_30316_17626.mscorlib).GetReference(display: "mscorlib.v4_0_30319_17626.dll", filePath: @"Z:\FxReferenceAssembliesUri");
P
Pilchie 已提交
273 274
                }

B
beep boop 已提交
275
                return s_mscorlibRef_v4_0_30316_17626;
P
Pilchie 已提交
276 277 278
            }
        }

B
beep boop 已提交
279
        private static MetadataReference s_mscorlibRef_v20;
P
Pilchie 已提交
280 281 282 283
        public static MetadataReference MscorlibRef_v20
        {
            get
            {
B
beep boop 已提交
284
                if (s_mscorlibRef_v20 == null)
P
Pilchie 已提交
285
                {
286
                    s_mscorlibRef_v20 = AssemblyMetadata.CreateFromImage(TestResources.NetFX.v2_0_50727.mscorlib).GetReference(display: "mscorlib.v2.0.50727.dll");
P
Pilchie 已提交
287 288
                }

B
beep boop 已提交
289
                return s_mscorlibRef_v20;
P
Pilchie 已提交
290 291 292 293 294 295
            }
        }

        /// <summary>
        /// Reference to an mscorlib silverlight assembly in which the System.Array does not contain the special member LongLength.
        /// </summary>
B
beep boop 已提交
296
        private static MetadataReference s_mscorlibRef_silverlight;
P
Pilchie 已提交
297 298 299 300
        public static MetadataReference MscorlibRefSilverlight
        {
            get
            {
B
beep boop 已提交
301
                if (s_mscorlibRef_silverlight == null)
P
Pilchie 已提交
302
                {
303
                    s_mscorlibRef_silverlight = AssemblyMetadata.CreateFromImage(TestResources.NetFX.silverlight_v5_0_5_0.mscorlib_v5_0_5_0_silverlight).GetReference(display: "mscorlib.v5.0.5.0_silverlight.dll");
P
Pilchie 已提交
304 305
                }

B
beep boop 已提交
306
                return s_mscorlibRef_silverlight;
P
Pilchie 已提交
307 308 309
            }
        }

B
beep boop 已提交
310
        private static MetadataReference s_minCorlibRef;
P
Pilchie 已提交
311 312 313 314
        public static MetadataReference MinCorlibRef
        {
            get
            {
B
beep boop 已提交
315
                if (s_minCorlibRef == null)
P
Pilchie 已提交
316
                {
B
beep boop 已提交
317
                    s_minCorlibRef = AssemblyMetadata.CreateFromImage(TestResources.NetFX.Minimal.mincorlib).GetReference(display: "minCorLib.dll");
P
Pilchie 已提交
318 319
                }

B
beep boop 已提交
320
                return s_minCorlibRef;
P
Pilchie 已提交
321 322 323
            }
        }

B
beep boop 已提交
324
        private static MetadataReference s_msvbRef;
P
Pilchie 已提交
325 326 327 328
        public static MetadataReference MsvbRef
        {
            get
            {
B
beep boop 已提交
329
                if (s_msvbRef == null)
P
Pilchie 已提交
330
                {
331
                    s_msvbRef = AssemblyMetadata.CreateFromImage(TestResources.NetFX.v4_0_30319.Microsoft_VisualBasic).GetReference(display: "Microsoft.VisualBasic.v4_0_30319.dll");
P
Pilchie 已提交
332 333
                }

B
beep boop 已提交
334
                return s_msvbRef;
P
Pilchie 已提交
335 336 337
            }
        }

B
beep boop 已提交
338
        private static MetadataReference s_msvbRef_v4_0_30319_17929;
P
Pilchie 已提交
339 340 341 342
        public static MetadataReference MsvbRef_v4_0_30319_17929
        {
            get
            {
B
beep boop 已提交
343
                if (s_msvbRef_v4_0_30319_17929 == null)
P
Pilchie 已提交
344
                {
345
                    s_msvbRef_v4_0_30319_17929 = AssemblyMetadata.CreateFromImage(TestResources.NetFX.v4_0_30319_17929.Microsoft_VisualBasic).GetReference(display: "Microsoft.VisualBasic.v4_0_30319_17929.dll");
P
Pilchie 已提交
346 347
                }

B
beep boop 已提交
348
                return s_msvbRef_v4_0_30319_17929;
P
Pilchie 已提交
349 350 351
            }
        }

B
beep boop 已提交
352
        private static MetadataReference s_csharpRef;
P
Pilchie 已提交
353 354 355 356
        public static MetadataReference CSharpRef
        {
            get
            {
B
beep boop 已提交
357
                if (s_csharpRef == null)
P
Pilchie 已提交
358
                {
359
                    s_csharpRef = AssemblyMetadata.CreateFromImage(TestResources.NetFX.v4_0_30319.Microsoft_CSharp).GetReference(display: "Microsoft.CSharp.v4.0.30319.dll");
P
Pilchie 已提交
360 361
                }

B
beep boop 已提交
362
                return s_csharpRef;
P
Pilchie 已提交
363 364 365 366
            }
        }


B
beep boop 已提交
367
        private static MetadataReference s_systemRef;
P
Pilchie 已提交
368 369 370 371
        public static MetadataReference SystemRef
        {
            get
            {
B
beep boop 已提交
372
                if (s_systemRef == null)
P
Pilchie 已提交
373
                {
374
                    s_systemRef = AssemblyMetadata.CreateFromImage(TestResources.NetFX.v4_0_30319.System).GetReference(display: "System.v4_0_30319.dll");
P
Pilchie 已提交
375 376
                }

B
beep boop 已提交
377
                return s_systemRef;
P
Pilchie 已提交
378 379 380
            }
        }

B
beep boop 已提交
381
        private static MetadataReference s_systemRef_v4_0_30319_17929;
P
Pilchie 已提交
382 383 384 385
        public static MetadataReference SystemRef_v4_0_30319_17929
        {
            get
            {
B
beep boop 已提交
386
                if (s_systemRef_v4_0_30319_17929 == null)
P
Pilchie 已提交
387
                {
388
                    s_systemRef_v4_0_30319_17929 = AssemblyMetadata.CreateFromImage(TestResources.NetFX.v4_0_30319_17929.System).GetReference(display: "System.v4_0_30319_17929.dll");
P
Pilchie 已提交
389 390
                }

B
beep boop 已提交
391
                return s_systemRef_v4_0_30319_17929;
P
Pilchie 已提交
392 393 394
            }
        }

B
beep boop 已提交
395
        private static MetadataReference s_systemRef_v20;
P
Pilchie 已提交
396 397 398 399
        public static MetadataReference SystemRef_v20
        {
            get
            {
B
beep boop 已提交
400
                if (s_systemRef_v20 == null)
P
Pilchie 已提交
401
                {
402
                    s_systemRef_v20 = AssemblyMetadata.CreateFromImage(TestResources.NetFX.v2_0_50727.System).GetReference(display: "System.v2_0_50727.dll");
P
Pilchie 已提交
403 404
                }

B
beep boop 已提交
405
                return s_systemRef_v20;
P
Pilchie 已提交
406 407 408
            }
        }

B
beep boop 已提交
409
        private static MetadataReference s_systemXmlRef;
P
Pilchie 已提交
410 411 412 413
        public static MetadataReference SystemXmlRef
        {
            get
            {
B
beep boop 已提交
414
                if (s_systemXmlRef == null)
P
Pilchie 已提交
415
                {
416
                    s_systemXmlRef = AssemblyMetadata.CreateFromImage(TestResources.NetFX.v4_0_30319.System_Xml).GetReference(display: "System.Xml.v4_0_30319.dll");
P
Pilchie 已提交
417 418
                }

B
beep boop 已提交
419
                return s_systemXmlRef;
P
Pilchie 已提交
420 421 422
            }
        }

B
beep boop 已提交
423
        private static MetadataReference s_systemXmlLinqRef;
P
Pilchie 已提交
424 425 426 427
        public static MetadataReference SystemXmlLinqRef
        {
            get
            {
B
beep boop 已提交
428
                if (s_systemXmlLinqRef == null)
P
Pilchie 已提交
429
                {
430
                    s_systemXmlLinqRef = AssemblyMetadata.CreateFromImage(TestResources.NetFX.v4_0_30319.System_Xml_Linq).GetReference(display: "System.Xml.Linq.v4_0_30319.dll");
P
Pilchie 已提交
431 432
                }

B
beep boop 已提交
433
                return s_systemXmlLinqRef;
P
Pilchie 已提交
434 435 436
            }
        }

437 438 439 440 441 442 443
        private static MetadataReference s_mscorlibFacadeRef;
        public static MetadataReference MscorlibFacadeRef
        {
            get
            {
                if (s_mscorlibFacadeRef == null)
                {
444
                    s_mscorlibFacadeRef = AssemblyMetadata.CreateFromImage(TestResources.NetFX.ReferenceAssemblies_V45.mscorlib).GetReference(display: "mscorlib.dll");
445 446 447 448 449 450 451 452 453 454 455 456 457
                }

                return s_mscorlibFacadeRef;
            }
        }

        private static MetadataReference s_systemRuntimeFacadeRef;
        public static MetadataReference SystemRuntimeFacadeRef
        {
            get
            {
                if (s_systemRuntimeFacadeRef == null)
                {
458
                    s_systemRuntimeFacadeRef = AssemblyMetadata.CreateFromImage(TestResources.NetFX.ReferenceAssemblies_V45_Facades.System_Runtime).GetReference(display: "System.Runtime.dll");
459 460 461 462 463 464
                }

                return s_systemRuntimeFacadeRef;
            }
        }

465 466 467 468 469 470 471
        private static MetadataReference s_systemThreadingFacadeRef;
        public static MetadataReference SystemThreadingFacadeRef
        {
            get
            {
                if (s_systemThreadingFacadeRef == null)
                {
472
                    s_systemThreadingFacadeRef = AssemblyMetadata.CreateFromImage(TestResources.NetFX.ReferenceAssemblies_V45_Facades.System_Threading).GetReference(display: "System.Threading.dll");
473 474 475 476 477 478 479 480 481 482 483 484 485
                }

                return s_systemThreadingFacadeRef;
            }
        }

        private static MetadataReference s_systemThreadingTasksFacadeRef;
        public static MetadataReference SystemThreadingTaskFacadeRef
        {
            get
            {
                if (s_systemThreadingTasksFacadeRef == null)
                {
486
                    s_systemThreadingTasksFacadeRef = AssemblyMetadata.CreateFromImage(TestResources.NetFX.ReferenceAssemblies_V45_Facades.System_Threading_Tasks).GetReference(display: "System.Threading.Tasks.dll");
487 488 489 490 491 492
                }

                return s_systemThreadingTasksFacadeRef;
            }
        }

493 494 495 496 497 498 499
        private static MetadataReference s_mscorlibPP7Ref;
        public static MetadataReference MscorlibPP7Ref
        {
            get
            {
                if (s_mscorlibPP7Ref == null)
                {
500
                    s_mscorlibPP7Ref = AssemblyMetadata.CreateFromImage(TestResources.NetFX.ReferenceAssemblies_PortableProfile7.mscorlib).GetReference(display: "mscorlib.dll");
501 502 503 504 505 506 507 508
                }

                return s_mscorlibPP7Ref;
            }
        }

        private static MetadataReference s_systemRuntimePP7Ref;
        public static MetadataReference SystemRuntimePP7Ref
P
Pilchie 已提交
509 510 511
        {
            get
            {
512
                if (s_systemRuntimePP7Ref == null)
P
Pilchie 已提交
513
                {
514
                    s_systemRuntimePP7Ref = AssemblyMetadata.CreateFromImage(TestResources.NetFX.ReferenceAssemblies_PortableProfile7.System_Runtime).GetReference(display: "System.Runtime.dll");
P
Pilchie 已提交
515 516
                }

517
                return s_systemRuntimePP7Ref;
P
Pilchie 已提交
518 519 520
            }
        }

B
beep boop 已提交
521
        private static MetadataReference s_FSharpTestLibraryRef;
P
Pilchie 已提交
522 523 524 525
        public static MetadataReference FSharpTestLibraryRef
        {
            get
            {
B
beep boop 已提交
526
                if (s_FSharpTestLibraryRef == null)
P
Pilchie 已提交
527
                {
528
                    s_FSharpTestLibraryRef = AssemblyMetadata.CreateFromImage(TestResources.General.FSharpTestLibrary).GetReference(display: "FSharpTestLibrary.dll");
P
Pilchie 已提交
529 530
                }

B
beep boop 已提交
531
                return s_FSharpTestLibraryRef;
P
Pilchie 已提交
532 533 534
            }
        }

535
        public static MetadataReference InvalidRef = new TestMetadataReference(fullPath: @"R:\Invalid.dll");
536

P
Pilchie 已提交
537
        #endregion
T
Tomas Matousek 已提交
538 539 540 541 542 543 544 545 546 547 548

        #region Diagnostics

        internal static DiagnosticDescription Diagnostic(
            object code, 
            string squiggledText = null, 
            object[] arguments = null,
            LinePosition? startLocation = null, 
            Func<SyntaxNode, bool> syntaxNodePredicate = null,
            bool argumentOrderDoesNotMatter = false)
        {
549
            Debug.Assert(code is ErrorCode || code is ERRID || code is int || code is string);
T
Tomas Matousek 已提交
550 551

            return new DiagnosticDescription(
552
                code as string ?? (object)(int)code,
T
Tomas Matousek 已提交
553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588
                false,
                squiggledText,
                arguments, 
                startLocation, 
                syntaxNodePredicate, 
                argumentOrderDoesNotMatter, 
                code.GetType());
        }

        internal static DiagnosticDescription Diagnostic(
           object code,
           XCData squiggledText,
           object[] arguments = null,
           LinePosition? startLocation = null,
           Func<SyntaxNode, bool> syntaxNodePredicate = null,
           bool argumentOrderDoesNotMatter = false)
        {
            return Diagnostic(
                code,
                NormalizeDiagnosticString(squiggledText.Value), 
                arguments, 
                startLocation,
                syntaxNodePredicate,
                argumentOrderDoesNotMatter);
        }

        protected static string NormalizeDiagnosticString(string inputString)
        {
            if (!inputString.Contains("\r\n") && inputString.Contains("\n"))
            {
                return inputString.Replace("\n", "\r\n");
            }
            
            return inputString;
        }

589
#endregion
P
Pilchie 已提交
590 591
    }
}