TestBase.cs 21.2 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

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

B
beep boop 已提交
338
                return s_msvbRef;
P
Pilchie 已提交
339 340 341
            }
        }

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

B
beep boop 已提交
352
                return s_msvbRef_v4_0_30319_17929;
P
Pilchie 已提交
353 354 355
            }
        }

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

B
beep boop 已提交
366
                return s_csharpRef;
P
Pilchie 已提交
367 368 369 370
            }
        }


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

B
beep boop 已提交
381
                return s_systemRef;
P
Pilchie 已提交
382 383 384
            }
        }

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

B
beep boop 已提交
395
                return s_systemRef_v4_0_30319_17929;
P
Pilchie 已提交
396 397 398
            }
        }

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

B
beep boop 已提交
409
                return s_systemRef_v20;
P
Pilchie 已提交
410 411 412
            }
        }

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

B
beep boop 已提交
423
                return s_systemXmlRef;
P
Pilchie 已提交
424 425 426
            }
        }

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

B
beep boop 已提交
437
                return s_systemXmlLinqRef;
P
Pilchie 已提交
438 439 440
            }
        }

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

                return s_mscorlibFacadeRef;
            }
        }

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

                return s_systemRuntimeFacadeRef;
            }
        }

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

                return s_systemThreadingFacadeRef;
            }
        }

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

                return s_systemThreadingTasksFacadeRef;
            }
        }

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

                return s_mscorlibPP7Ref;
            }
        }

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

521
                return s_systemRuntimePP7Ref;
P
Pilchie 已提交
522 523 524
            }
        }

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

B
beep boop 已提交
535
                return s_FSharpTestLibraryRef;
P
Pilchie 已提交
536 537 538
            }
        }

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

P
Pilchie 已提交
541
        #endregion
T
Tomas Matousek 已提交
542 543 544 545

        #region Diagnostics

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

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

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

T
Tomas Matousek 已提交
590 591 592
            return inputString;
        }

593
        #endregion
P
Pilchie 已提交
594 595
    }
}