TestBase.cs 21.9 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.
2

P
Pilchie 已提交
3
using System;
T
Tomas Matousek 已提交
4
using System.Diagnostics;
P
Pilchie 已提交
5
using System.IO;
T
Tomas Matousek 已提交
6
using System.Xml.Linq;
P
Pilchie 已提交
7
using Microsoft.CodeAnalysis;
T
Tomas Matousek 已提交
8
using Microsoft.CodeAnalysis.CSharp;
P
Pilchie 已提交
9
using Microsoft.CodeAnalysis.Test.Utilities;
T
Tomas Matousek 已提交
10 11
using Microsoft.CodeAnalysis.Text;
using Microsoft.CodeAnalysis.VisualBasic;
P
Pilchie 已提交
12 13 14 15 16 17 18 19

namespace Roslyn.Test.Utilities
{
    /// <summary>
    /// Base class for all unit test classes.
    /// </summary>
    public abstract class TestBase : IDisposable
    {
B
beep boop 已提交
20
        private TempRoot _temp;
P
Pilchie 已提交
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 53
        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 已提交
54 55 56
        private static MetadataReference[] s_lazyDefaultVbReferences;
        private static MetadataReference[] s_lazyLatestVbReferences;

57
        public static MetadataReference[] DefaultVbReferences => s_lazyDefaultVbReferences ??
T
Tomas Matousek 已提交
58 59 60
            (s_lazyDefaultVbReferences = new[] { MscorlibRef, SystemRef, SystemCoreRef, MsvbRef });

        public static MetadataReference[] LatestVbReferences = s_lazyLatestVbReferences ??
61
            (s_lazyLatestVbReferences = new[] { MscorlibRef_v45, SystemRef_v4_0_30319_17929, SystemCoreRef_v45, MsvbRef_v4_0_30319_17929 });
T
Tomas Matousek 已提交
62

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

        /// <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 已提交
74
                if (s_winRtRefs == null)
P
Pilchie 已提交
75
                {
76
                    var winmd = AssemblyMetadata.CreateFromImage(TestResources.WinRt.Windows).GetReference(display: "Windows");
B
beep boop 已提交
77

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

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

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


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


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

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

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

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

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

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

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

        /// <summary>
        /// Reference to an assembly that defines Expression Trees.
        /// </summary>
126
        public static MetadataReference ExpressionAssemblyRef => SystemCoreRef_v46;
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

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

148
                return s_systemCoreRef;
P
Pilchie 已提交
149 150 151
            }
        }

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

162 163 164 165 166 167 168 169 170 171 172 173 174 175 176
                return s_systemCoreRef_v45;
            }
        }

        private static MetadataReference s_systemCoreRef_v46;
        public static MetadataReference SystemCoreRef_v46
        {
            get
            {
                if (s_systemCoreRef_v46 == null)
                {
                    s_systemCoreRef_v46 = AssemblyMetadata.CreateFromImage(TestResources.NetFX.v4_6_1038_0.System_Core).GetReference(display: "System.Core.v4_6_1038_0.dll");
                }

                return s_systemCoreRef_v46;
P
Pilchie 已提交
177 178 179
            }
        }

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

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

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

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

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

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

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

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

B
beep boop 已提交
236
        private static MetadataReference s_mscorlibRefPortable;
P
Pilchie 已提交
237 238 239 240
        public static MetadataReference MscorlibRefPortable
        {
            get
            {
B
beep boop 已提交
241
                if (s_mscorlibRefPortable == null)
P
Pilchie 已提交
242
                {
243
                    s_mscorlibRefPortable = AssemblyMetadata.CreateFromImage(TestResources.NetFX.v4_0_30319.mscorlib_portable).GetReference(display: "mscorlib.v4_0_30319.portable.dll");
P
Pilchie 已提交
244 245
                }

B
beep boop 已提交
246
                return s_mscorlibRefPortable;
P
Pilchie 已提交
247 248 249
            }
        }

B
beep boop 已提交
250
        private static MetadataReference s_aacorlibRef;
P
Pilchie 已提交
251 252 253 254
        public static MetadataReference AacorlibRef
        {
            get
            {
B
beep boop 已提交
255
                if (s_aacorlibRef == null)
P
Pilchie 已提交
256
                {
257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272
                    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 已提交
273 274
                }

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

279 280
        private static MetadataReference s_mscorlibRef_v20;
        public static MetadataReference MscorlibRef_v20
P
Pilchie 已提交
281 282 283
        {
            get
            {
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
                }

289
                return s_mscorlibRef_v20;
P
Pilchie 已提交
290 291 292
            }
        }

293 294
        private static MetadataReference s_mscorlibRef_v45;
        public static MetadataReference MscorlibRef_v45
P
Pilchie 已提交
295 296 297
        {
            get
            {
298
                if (s_mscorlibRef_v45 == null)
P
Pilchie 已提交
299
                {
300
                    s_mscorlibRef_v45 = AssemblyMetadata.CreateFromImage(TestResources.NetFX.v4_0_30316_17626.mscorlib).GetReference(display: "mscorlib.v4_0_30319_17626.dll", filePath: @"Z:\FxReferenceAssembliesUri");
P
Pilchie 已提交
301 302
                }

303 304 305 306 307 308 309 310 311 312 313 314 315 316 317
                return s_mscorlibRef_v45;
            }
        }

        private static MetadataReference s_mscorlibRef_v46;
        public static MetadataReference MscorlibRef_v46
        {
            get
            {
                if (s_mscorlibRef_v46 == null)
                {
                    s_mscorlibRef_v46 = AssemblyMetadata.CreateFromImage(TestResources.NetFX.v4_6_1038_0.mscorlib).GetReference(display: "mscorlib.v4_6_1038_0.dll", filePath: @"Z:\FxReferenceAssembliesUri");
                }

                return s_mscorlibRef_v46;
P
Pilchie 已提交
318 319 320 321 322 323
            }
        }

        /// <summary>
        /// Reference to an mscorlib silverlight assembly in which the System.Array does not contain the special member LongLength.
        /// </summary>
B
beep boop 已提交
324
        private static MetadataReference s_mscorlibRef_silverlight;
P
Pilchie 已提交
325 326 327 328
        public static MetadataReference MscorlibRefSilverlight
        {
            get
            {
B
beep boop 已提交
329
                if (s_mscorlibRef_silverlight == null)
P
Pilchie 已提交
330
                {
331
                    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 已提交
332 333
                }

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

B
beep boop 已提交
338
        private static MetadataReference s_minCorlibRef;
P
Pilchie 已提交
339 340 341 342
        public static MetadataReference MinCorlibRef
        {
            get
            {
B
beep boop 已提交
343
                if (s_minCorlibRef == null)
P
Pilchie 已提交
344
                {
B
beep boop 已提交
345
                    s_minCorlibRef = AssemblyMetadata.CreateFromImage(TestResources.NetFX.Minimal.mincorlib).GetReference(display: "minCorLib.dll");
P
Pilchie 已提交
346 347
                }

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

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

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

B
beep boop 已提交
366
        private static MetadataReference s_msvbRef_v4_0_30319_17929;
P
Pilchie 已提交
367 368 369 370
        public static MetadataReference MsvbRef_v4_0_30319_17929
        {
            get
            {
B
beep boop 已提交
371
                if (s_msvbRef_v4_0_30319_17929 == null)
P
Pilchie 已提交
372
                {
373
                    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 已提交
374 375
                }

B
beep boop 已提交
376
                return s_msvbRef_v4_0_30319_17929;
P
Pilchie 已提交
377 378 379
            }
        }

B
beep boop 已提交
380
        private static MetadataReference s_csharpRef;
P
Pilchie 已提交
381 382 383 384
        public static MetadataReference CSharpRef
        {
            get
            {
B
beep boop 已提交
385
                if (s_csharpRef == null)
P
Pilchie 已提交
386
                {
387
                    s_csharpRef = AssemblyMetadata.CreateFromImage(TestResources.NetFX.v4_0_30319.Microsoft_CSharp).GetReference(display: "Microsoft.CSharp.v4.0.30319.dll");
P
Pilchie 已提交
388 389
                }

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


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

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

B
beep boop 已提交
409
        private static MetadataReference s_systemRef_v4_0_30319_17929;
P
Pilchie 已提交
410 411 412 413
        public static MetadataReference SystemRef_v4_0_30319_17929
        {
            get
            {
B
beep boop 已提交
414
                if (s_systemRef_v4_0_30319_17929 == null)
P
Pilchie 已提交
415
                {
416
                    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 已提交
417 418
                }

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

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

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

B
beep boop 已提交
437
        private static MetadataReference s_systemXmlRef;
P
Pilchie 已提交
438 439 440 441
        public static MetadataReference SystemXmlRef
        {
            get
            {
B
beep boop 已提交
442
                if (s_systemXmlRef == null)
P
Pilchie 已提交
443
                {
444
                    s_systemXmlRef = AssemblyMetadata.CreateFromImage(TestResources.NetFX.v4_0_30319.System_Xml).GetReference(display: "System.Xml.v4_0_30319.dll");
P
Pilchie 已提交
445 446
                }

B
beep boop 已提交
447
                return s_systemXmlRef;
P
Pilchie 已提交
448 449 450
            }
        }

B
beep boop 已提交
451
        private static MetadataReference s_systemXmlLinqRef;
P
Pilchie 已提交
452 453 454 455
        public static MetadataReference SystemXmlLinqRef
        {
            get
            {
B
beep boop 已提交
456
                if (s_systemXmlLinqRef == null)
P
Pilchie 已提交
457
                {
458
                    s_systemXmlLinqRef = AssemblyMetadata.CreateFromImage(TestResources.NetFX.v4_0_30319.System_Xml_Linq).GetReference(display: "System.Xml.Linq.v4_0_30319.dll");
P
Pilchie 已提交
459 460
                }

B
beep boop 已提交
461
                return s_systemXmlLinqRef;
P
Pilchie 已提交
462 463 464
            }
        }

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

                return s_mscorlibFacadeRef;
            }
        }

        private static MetadataReference s_systemRuntimeFacadeRef;
        public static MetadataReference SystemRuntimeFacadeRef
        {
            get
            {
                if (s_systemRuntimeFacadeRef == null)
                {
486
                    s_systemRuntimeFacadeRef = AssemblyMetadata.CreateFromImage(TestResources.NetFX.ReferenceAssemblies_V45_Facades.System_Runtime).GetReference(display: "System.Runtime.dll");
487 488 489 490 491 492
                }

                return s_systemRuntimeFacadeRef;
            }
        }

493 494 495 496 497 498 499
        private static MetadataReference s_systemThreadingFacadeRef;
        public static MetadataReference SystemThreadingFacadeRef
        {
            get
            {
                if (s_systemThreadingFacadeRef == null)
                {
500
                    s_systemThreadingFacadeRef = AssemblyMetadata.CreateFromImage(TestResources.NetFX.ReferenceAssemblies_V45_Facades.System_Threading).GetReference(display: "System.Threading.dll");
501 502 503 504 505 506 507 508 509 510 511 512 513
                }

                return s_systemThreadingFacadeRef;
            }
        }

        private static MetadataReference s_systemThreadingTasksFacadeRef;
        public static MetadataReference SystemThreadingTaskFacadeRef
        {
            get
            {
                if (s_systemThreadingTasksFacadeRef == null)
                {
514
                    s_systemThreadingTasksFacadeRef = AssemblyMetadata.CreateFromImage(TestResources.NetFX.ReferenceAssemblies_V45_Facades.System_Threading_Tasks).GetReference(display: "System.Threading.Tasks.dll");
515 516 517 518 519 520
                }

                return s_systemThreadingTasksFacadeRef;
            }
        }

521 522 523 524 525 526 527
        private static MetadataReference s_mscorlibPP7Ref;
        public static MetadataReference MscorlibPP7Ref
        {
            get
            {
                if (s_mscorlibPP7Ref == null)
                {
528
                    s_mscorlibPP7Ref = AssemblyMetadata.CreateFromImage(TestResources.NetFX.ReferenceAssemblies_PortableProfile7.mscorlib).GetReference(display: "mscorlib.dll");
529 530 531 532 533 534 535 536
                }

                return s_mscorlibPP7Ref;
            }
        }

        private static MetadataReference s_systemRuntimePP7Ref;
        public static MetadataReference SystemRuntimePP7Ref
P
Pilchie 已提交
537 538 539
        {
            get
            {
540
                if (s_systemRuntimePP7Ref == null)
P
Pilchie 已提交
541
                {
542
                    s_systemRuntimePP7Ref = AssemblyMetadata.CreateFromImage(TestResources.NetFX.ReferenceAssemblies_PortableProfile7.System_Runtime).GetReference(display: "System.Runtime.dll");
P
Pilchie 已提交
543 544
                }

545
                return s_systemRuntimePP7Ref;
P
Pilchie 已提交
546 547 548
            }
        }

B
beep boop 已提交
549
        private static MetadataReference s_FSharpTestLibraryRef;
P
Pilchie 已提交
550 551 552 553
        public static MetadataReference FSharpTestLibraryRef
        {
            get
            {
B
beep boop 已提交
554
                if (s_FSharpTestLibraryRef == null)
P
Pilchie 已提交
555
                {
556
                    s_FSharpTestLibraryRef = AssemblyMetadata.CreateFromImage(TestResources.General.FSharpTestLibrary).GetReference(display: "FSharpTestLibrary.dll");
P
Pilchie 已提交
557 558
                }

B
beep boop 已提交
559
                return s_FSharpTestLibraryRef;
P
Pilchie 已提交
560 561 562
            }
        }

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

P
Pilchie 已提交
565
        #endregion
T
Tomas Matousek 已提交
566 567 568 569

        #region Diagnostics

        internal static DiagnosticDescription Diagnostic(
570 571
            object code,
            string squiggledText = null,
T
Tomas Matousek 已提交
572
            object[] arguments = null,
573
            LinePosition? startLocation = null,
T
Tomas Matousek 已提交
574 575 576
            Func<SyntaxNode, bool> syntaxNodePredicate = null,
            bool argumentOrderDoesNotMatter = false)
        {
577
            Debug.Assert(code is ErrorCode || code is ERRID || code is int || code is string);
T
Tomas Matousek 已提交
578 579

            return new DiagnosticDescription(
580
                code as string ?? (object)(int)code,
T
Tomas Matousek 已提交
581 582
                false,
                squiggledText,
583 584 585 586
                arguments,
                startLocation,
                syntaxNodePredicate,
                argumentOrderDoesNotMatter,
T
Tomas Matousek 已提交
587 588 589 590 591 592 593 594 595 596 597 598 599
                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,
600 601
                NormalizeDiagnosticString(squiggledText.Value),
                arguments,
T
Tomas Matousek 已提交
602 603 604 605 606 607 608 609 610 611 612
                startLocation,
                syntaxNodePredicate,
                argumentOrderDoesNotMatter);
        }

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

T
Tomas Matousek 已提交
614 615 616
            return inputString;
        }

617
        #endregion
P
Pilchie 已提交
618 619
    }
}