TestBase.cs 21.4 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 ??
V
vsadov 已提交
61
            (s_lazyLatestVbReferences = new[] { MscorlibRef_v4_0_30316_17626, SystemRef_v4_0_30319_17929, SystemCoreRef_v4_0_30319_17929, 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
            }
        }

V
vsadov 已提交
152 153
        private static MetadataReference s_systemCoreRef_v4_0_30319_17929;
        public static MetadataReference SystemCoreRef_v4_0_30319_17929
P
Pilchie 已提交
154 155 156
        {
            get
            {
V
vsadov 已提交
157
                if (s_systemCoreRef_v4_0_30319_17929 == null)
P
Pilchie 已提交
158
                {
V
vsadov 已提交
159
                    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 已提交
160 161
                }

V
vsadov 已提交
162
                return s_systemCoreRef_v4_0_30319_17929;
163 164 165 166 167 168 169 170 171 172 173 174 175 176
            }
        }

        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
        public static MetadataReference MscorlibRef_v4_0_30316_17626 => TestReferences.NetFx.v4_0_30316_17626.mscorlib;
294 295 296 297 298 299 300 301 302 303 304 305

        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 已提交
306 307 308 309 310 311
            }
        }

        /// <summary>
        /// Reference to an mscorlib silverlight assembly in which the System.Array does not contain the special member LongLength.
        /// </summary>
B
beep boop 已提交
312
        private static MetadataReference s_mscorlibRef_silverlight;
P
Pilchie 已提交
313 314 315 316
        public static MetadataReference MscorlibRefSilverlight
        {
            get
            {
B
beep boop 已提交
317
                if (s_mscorlibRef_silverlight == null)
P
Pilchie 已提交
318
                {
319
                    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 已提交
320 321
                }

B
beep boop 已提交
322
                return s_mscorlibRef_silverlight;
P
Pilchie 已提交
323 324 325
            }
        }

326
        public static MetadataReference MinCorlibRef => TestReferences.NetFx.Minimal.mincorlib;
P
Pilchie 已提交
327

328 329
        public static MetadataReference MinAsyncCorlibRef => TestReferences.NetFx.Minimal.minasynccorlib;

330 331
        public static MetadataReference ValueTupleRef => TestReferences.NetFx.ValueTuple.tuplelib;

B
beep boop 已提交
332
        private static MetadataReference s_msvbRef;
P
Pilchie 已提交
333 334 335 336
        public static MetadataReference MsvbRef
        {
            get
            {
B
beep boop 已提交
337
                if (s_msvbRef == null)
P
Pilchie 已提交
338
                {
339
                    s_msvbRef = AssemblyMetadata.CreateFromImage(TestResources.NetFX.v4_0_30319.Microsoft_VisualBasic).GetReference(display: "Microsoft.VisualBasic.v4_0_30319.dll");
P
Pilchie 已提交
340 341
                }

B
beep boop 已提交
342
                return s_msvbRef;
P
Pilchie 已提交
343 344 345
            }
        }

B
beep boop 已提交
346
        private static MetadataReference s_msvbRef_v4_0_30319_17929;
P
Pilchie 已提交
347 348 349 350
        public static MetadataReference MsvbRef_v4_0_30319_17929
        {
            get
            {
B
beep boop 已提交
351
                if (s_msvbRef_v4_0_30319_17929 == null)
P
Pilchie 已提交
352
                {
353
                    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 已提交
354 355
                }

B
beep boop 已提交
356
                return s_msvbRef_v4_0_30319_17929;
P
Pilchie 已提交
357 358 359
            }
        }

B
beep boop 已提交
360
        private static MetadataReference s_csharpRef;
P
Pilchie 已提交
361 362 363 364
        public static MetadataReference CSharpRef
        {
            get
            {
B
beep boop 已提交
365
                if (s_csharpRef == null)
P
Pilchie 已提交
366
                {
367
                    s_csharpRef = AssemblyMetadata.CreateFromImage(TestResources.NetFX.v4_0_30319.Microsoft_CSharp).GetReference(display: "Microsoft.CSharp.v4.0.30319.dll");
P
Pilchie 已提交
368 369
                }

B
beep boop 已提交
370
                return s_csharpRef;
P
Pilchie 已提交
371 372 373 374
            }
        }


B
beep boop 已提交
375
        private static MetadataReference s_systemRef;
P
Pilchie 已提交
376 377 378 379
        public static MetadataReference SystemRef
        {
            get
            {
B
beep boop 已提交
380
                if (s_systemRef == null)
P
Pilchie 已提交
381
                {
382
                    s_systemRef = AssemblyMetadata.CreateFromImage(TestResources.NetFX.v4_0_30319.System).GetReference(display: "System.v4_0_30319.dll");
P
Pilchie 已提交
383 384
                }

B
beep boop 已提交
385
                return s_systemRef;
P
Pilchie 已提交
386 387 388
            }
        }

B
beep boop 已提交
389
        private static MetadataReference s_systemRef_v4_0_30319_17929;
P
Pilchie 已提交
390 391 392 393
        public static MetadataReference SystemRef_v4_0_30319_17929
        {
            get
            {
B
beep boop 已提交
394
                if (s_systemRef_v4_0_30319_17929 == null)
P
Pilchie 已提交
395
                {
396
                    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 已提交
397 398
                }

B
beep boop 已提交
399
                return s_systemRef_v4_0_30319_17929;
P
Pilchie 已提交
400 401 402
            }
        }

B
beep boop 已提交
403
        private static MetadataReference s_systemRef_v20;
P
Pilchie 已提交
404 405 406 407
        public static MetadataReference SystemRef_v20
        {
            get
            {
B
beep boop 已提交
408
                if (s_systemRef_v20 == null)
P
Pilchie 已提交
409
                {
410
                    s_systemRef_v20 = AssemblyMetadata.CreateFromImage(TestResources.NetFX.v2_0_50727.System).GetReference(display: "System.v2_0_50727.dll");
P
Pilchie 已提交
411 412
                }

B
beep boop 已提交
413
                return s_systemRef_v20;
P
Pilchie 已提交
414 415 416
            }
        }

B
beep boop 已提交
417
        private static MetadataReference s_systemXmlRef;
P
Pilchie 已提交
418 419 420 421
        public static MetadataReference SystemXmlRef
        {
            get
            {
B
beep boop 已提交
422
                if (s_systemXmlRef == null)
P
Pilchie 已提交
423
                {
424
                    s_systemXmlRef = AssemblyMetadata.CreateFromImage(TestResources.NetFX.v4_0_30319.System_Xml).GetReference(display: "System.Xml.v4_0_30319.dll");
P
Pilchie 已提交
425 426
                }

B
beep boop 已提交
427
                return s_systemXmlRef;
P
Pilchie 已提交
428 429 430
            }
        }

B
beep boop 已提交
431
        private static MetadataReference s_systemXmlLinqRef;
P
Pilchie 已提交
432 433 434 435
        public static MetadataReference SystemXmlLinqRef
        {
            get
            {
B
beep boop 已提交
436
                if (s_systemXmlLinqRef == null)
P
Pilchie 已提交
437
                {
438
                    s_systemXmlLinqRef = AssemblyMetadata.CreateFromImage(TestResources.NetFX.v4_0_30319.System_Xml_Linq).GetReference(display: "System.Xml.Linq.v4_0_30319.dll");
P
Pilchie 已提交
439 440
                }

B
beep boop 已提交
441
                return s_systemXmlLinqRef;
P
Pilchie 已提交
442 443 444
            }
        }

445 446 447 448 449 450 451
        private static MetadataReference s_mscorlibFacadeRef;
        public static MetadataReference MscorlibFacadeRef
        {
            get
            {
                if (s_mscorlibFacadeRef == null)
                {
452
                    s_mscorlibFacadeRef = AssemblyMetadata.CreateFromImage(TestResources.NetFX.ReferenceAssemblies_V45.mscorlib).GetReference(display: "mscorlib.dll");
453 454 455 456 457 458 459 460 461 462 463 464 465
                }

                return s_mscorlibFacadeRef;
            }
        }

        private static MetadataReference s_systemRuntimeFacadeRef;
        public static MetadataReference SystemRuntimeFacadeRef
        {
            get
            {
                if (s_systemRuntimeFacadeRef == null)
                {
466
                    s_systemRuntimeFacadeRef = AssemblyMetadata.CreateFromImage(TestResources.NetFX.ReferenceAssemblies_V45_Facades.System_Runtime).GetReference(display: "System.Runtime.dll");
467 468 469 470 471 472
                }

                return s_systemRuntimeFacadeRef;
            }
        }

473 474 475 476 477 478 479
        private static MetadataReference s_systemThreadingFacadeRef;
        public static MetadataReference SystemThreadingFacadeRef
        {
            get
            {
                if (s_systemThreadingFacadeRef == null)
                {
480
                    s_systemThreadingFacadeRef = AssemblyMetadata.CreateFromImage(TestResources.NetFX.ReferenceAssemblies_V45_Facades.System_Threading).GetReference(display: "System.Threading.dll");
481 482 483 484 485 486 487 488 489 490 491 492 493
                }

                return s_systemThreadingFacadeRef;
            }
        }

        private static MetadataReference s_systemThreadingTasksFacadeRef;
        public static MetadataReference SystemThreadingTaskFacadeRef
        {
            get
            {
                if (s_systemThreadingTasksFacadeRef == null)
                {
494
                    s_systemThreadingTasksFacadeRef = AssemblyMetadata.CreateFromImage(TestResources.NetFX.ReferenceAssemblies_V45_Facades.System_Threading_Tasks).GetReference(display: "System.Threading.Tasks.dll");
495 496 497 498 499 500
                }

                return s_systemThreadingTasksFacadeRef;
            }
        }

501 502 503 504 505 506 507
        private static MetadataReference s_mscorlibPP7Ref;
        public static MetadataReference MscorlibPP7Ref
        {
            get
            {
                if (s_mscorlibPP7Ref == null)
                {
508
                    s_mscorlibPP7Ref = AssemblyMetadata.CreateFromImage(TestResources.NetFX.ReferenceAssemblies_PortableProfile7.mscorlib).GetReference(display: "mscorlib.dll");
509 510 511 512 513 514 515 516
                }

                return s_mscorlibPP7Ref;
            }
        }

        private static MetadataReference s_systemRuntimePP7Ref;
        public static MetadataReference SystemRuntimePP7Ref
P
Pilchie 已提交
517 518 519
        {
            get
            {
520
                if (s_systemRuntimePP7Ref == null)
P
Pilchie 已提交
521
                {
522
                    s_systemRuntimePP7Ref = AssemblyMetadata.CreateFromImage(TestResources.NetFX.ReferenceAssemblies_PortableProfile7.System_Runtime).GetReference(display: "System.Runtime.dll");
P
Pilchie 已提交
523 524
                }

525
                return s_systemRuntimePP7Ref;
P
Pilchie 已提交
526 527 528
            }
        }

B
beep boop 已提交
529
        private static MetadataReference s_FSharpTestLibraryRef;
P
Pilchie 已提交
530 531 532 533
        public static MetadataReference FSharpTestLibraryRef
        {
            get
            {
B
beep boop 已提交
534
                if (s_FSharpTestLibraryRef == null)
P
Pilchie 已提交
535
                {
536
                    s_FSharpTestLibraryRef = AssemblyMetadata.CreateFromImage(TestResources.General.FSharpTestLibrary).GetReference(display: "FSharpTestLibrary.dll");
P
Pilchie 已提交
537 538
                }

B
beep boop 已提交
539
                return s_FSharpTestLibraryRef;
P
Pilchie 已提交
540 541 542
            }
        }

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

P
Pilchie 已提交
545
        #endregion
T
Tomas Matousek 已提交
546 547 548 549

        #region Diagnostics

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

            return new DiagnosticDescription(
560
                code as string ?? (object)(int)code,
T
Tomas Matousek 已提交
561 562
                false,
                squiggledText,
563 564 565 566
                arguments,
                startLocation,
                syntaxNodePredicate,
                argumentOrderDoesNotMatter,
T
Tomas Matousek 已提交
567 568 569 570 571 572 573 574 575 576 577 578 579
                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,
580 581
                NormalizeDiagnosticString(squiggledText.Value),
                arguments,
T
Tomas Matousek 已提交
582 583 584 585 586 587 588 589 590 591 592
                startLocation,
                syntaxNodePredicate,
                argumentOrderDoesNotMatter);
        }

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

T
Tomas Matousek 已提交
594 595 596
            return inputString;
        }

597
        #endregion
P
Pilchie 已提交
598 599
    }
}