/
githubmirror
/
roslyn
Обзор
Документация
Войти
/
githubmirror
/
roslyn
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/Compilers/VisualBasic/Test/Semantic/Semantics/MissingRuntimeHelpers.vb
369 строк
10 KB
Tomáš Matoušek
Refactoring of extension methods in source packages (#78620) - take 2 (#78894)
26 июн 2025, 18:42
Не верифицирован
26 июн 2025, 18:42
05fc006
Код
Авторство
О чём код?
' Licensed to the .NET Foundation under one or more agreements. ' The .NET Foundation licenses this file to you under the MIT license. ' See the LICENSE file in the project root for more information. Namespace Microsoft.CodeAnalysis.VisualBasic.UnitTests.Semantics Public Class MissingRuntimeHelpers Inherits BasicTestBase <Fact> Public Sub SpecialMembers() Dim compilationDef = <compilation name="SpecialMembers"> <file name="a.vb"> Class Program Sub Main() Dim Ob As Object = Nothing Dim St As String = Nothing Dim [Do] as Double = 0 Dim Da as Date = Nothing Dim De as Decimal = Nothing Dim ChArray As Char() = Nothing Test([Do] ^ [Do]) Test(Da > Da) Test(De > De) Test(De + De) Test(St + St) Test(-De) Test(CType(ChArray, String)) Test(CDec([Do])) Test(CInt(De)) Test(CInt([Do])) End Sub Sub Test(x As Object) End Sub End Class Namespace System Public Class [Object] End Class Public Class [String] End Class Public Class Array End Class Public Structure Void End Structure Public Structure [Double] End Structure Public Structure Int32 End Structure Public Structure [Boolean] End Structure Public Structure DateTime End Structure Public Structure [Decimal] End Structure Public Structure [Char] End Structure Public Class ValueType End Class End Namespace </file> </compilation> Dim compilation = CompilationUtils.CreateEmptyCompilationWithReferences(compilationDef, New MetadataReference() {}) AssertTheseEmitDiagnostics(compilation, <expected> BC35000: Requested operation is not available because the runtime library function 'System.DateTime.New' is not defined. Dim Da as Date = Nothing ~~~~~~~ BC35000: Requested operation is not available because the runtime library function 'System.Decimal.New' is not defined. Dim De as Decimal = Nothing ~~~~~~~ BC35000: Requested operation is not available because the runtime library function 'System.Math.Pow' is not defined. Test([Do] ^ [Do]) ~~~~~~~~~~~ BC35000: Requested operation is not available because the runtime library function 'System.DateTime.Compare' is not defined. Test(Da > Da) ~~~~~~~ BC35000: Requested operation is not available because the runtime library function 'System.Decimal.Compare' is not defined. Test(De > De) ~~~~~~~ BC35000: Requested operation is not available because the runtime library function 'System.Decimal.Add' is not defined. Test(De + De) ~~~~~~~ BC35000: Requested operation is not available because the runtime library function 'System.String.Concat' is not defined. Test(St + St) ~~~~~~~ BC35000: Requested operation is not available because the runtime library function 'System.Decimal.Negate' is not defined. Test(-De) ~~~ BC35000: Requested operation is not available because the runtime library function 'System.String.New' is not defined. Test(CType(ChArray, String)) ~~~~~~~~~~~~~~~~~~~~~~ BC35000: Requested operation is not available because the runtime library function 'System.Decimal.New' is not defined. Test(CDec([Do])) ~~~~~~~~~~ BC35000: Requested operation is not available because the runtime library function 'System.Convert.ToInt32' is not defined. Test(CInt(De)) ~~~~~~~~ BC35000: Requested operation is not available because the runtime library function 'System.Math.Round' is not defined. Test(CInt([Do])) ~~~~~~~~~~ </expected>) End Sub <Fact> Public Sub WellKnownMembers() Dim compilationDef = <compilation name="WellKnownMembers"> <file name="a.vb"> Class Program Sub Main() Dim Ob As Object = Nothing Dim St as String = Nothing Dim [Do] as Double = 0 Dim Bo As Boolean = false Test(St > St) Test(Ob AndAlso Ob) Test(Ob + Ob) Test(St Like St) Test(Ob > Ob) Test(Not Ob) Test(CType(Ob, Char())) Test(CLng(Ob)) Test(CStr([Do])) Test(CInt(St)) Test(CDec(Bo)) End Sub Sub Test(x As Object) End Sub End Class </file> </compilation> Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(compilationDef) AssertTheseEmitDiagnostics(compilation, <expected> BC35000: Requested operation is not available because the runtime library function 'Microsoft.VisualBasic.CompilerServices.Operators.CompareString' is not defined. Test(St > St) ~~~~~~~ BC35000: Requested operation is not available because the runtime library function 'Microsoft.VisualBasic.CompilerServices.Conversions.ToBoolean' is not defined. Test(Ob AndAlso Ob) ~~~~~~~~~~~~~ BC35000: Requested operation is not available because the runtime library function 'Microsoft.VisualBasic.CompilerServices.Operators.AddObject' is not defined. Test(Ob + Ob) ~~~~~~~ BC35000: Requested operation is not available because the runtime library function 'Microsoft.VisualBasic.CompilerServices.LikeOperator.LikeString' is not defined. Test(St Like St) ~~~~~~~~~~ BC35000: Requested operation is not available because the runtime library function 'Microsoft.VisualBasic.CompilerServices.Operators.CompareObjectGreater' is not defined. Test(Ob > Ob) ~~~~~~~ BC35000: Requested operation is not available because the runtime library function 'Microsoft.VisualBasic.CompilerServices.Operators.NotObject' is not defined. Test(Not Ob) ~~~~~~ BC35000: Requested operation is not available because the runtime library function 'Microsoft.VisualBasic.CompilerServices.Conversions.ToCharArrayRankOne' is not defined. Test(CType(Ob, Char())) ~~~~~~~~~~~~~~~~~ BC35000: Requested operation is not available because the runtime library function 'Microsoft.VisualBasic.CompilerServices.Conversions.ToLong' is not defined. Test(CLng(Ob)) ~~~~~~~~ BC35000: Requested operation is not available because the runtime library function 'Microsoft.VisualBasic.CompilerServices.Conversions.ToString' is not defined. Test(CStr([Do])) ~~~~~~~~~~ BC35000: Requested operation is not available because the runtime library function 'Microsoft.VisualBasic.CompilerServices.Conversions.ToInteger' is not defined. Test(CInt(St)) ~~~~~~~~ BC35000: Requested operation is not available because the runtime library function 'Microsoft.VisualBasic.CompilerServices.Conversions.ToDecimal' is not defined. Test(CDec(Bo)) ~~~~~~~~ </expected>) End Sub <Fact> Public Sub MissingCompareExchange() Dim compilationDef = <compilation name="SpecialMembers"> <file name="a.vb"> Delegate Sub E1() Class Program public event e as E1 public shared Sub Main() dim v as new Program AddHandler v.e, AddressOf Main End Sub End Class Namespace System Public Class [Object] End Class Public Class [String] End Class Public Class Array End Class Public Structure Void End Structure Public Structure [Double] End Structure Public Structure Int32 End Structure Public Structure [Boolean] End Structure Public Structure DateTime End Structure Public Structure [Decimal] End Structure Public Structure [Char] End Structure Public Structure IntPtr End Structure Public Class ValueType End Class Public Class [Delegate] End Class Public Class MulticastDelegate End Class End Namespace </file> </compilation> Dim compilation = CompilationUtils.CreateEmptyCompilationWithReferences(compilationDef, New MetadataReference() {}) CompilationUtils.AssertTheseDeclarationDiagnostics(compilation, <expected> BC30002: Type 'System.AsyncCallback' is not defined. Delegate Sub E1() ~~~~~~~~~~~~~~~~~ BC30002: Type 'System.IAsyncResult' is not defined. Delegate Sub E1() ~~~~~~~~~~~~~~~~~ </expected>) CompilationUtils.AssertTheseCompileDiagnostics(compilation, <expected> BC30002: Type 'System.AsyncCallback' is not defined. Delegate Sub E1() ~~~~~~~~~~~~~~~~~ BC30002: Type 'System.IAsyncResult' is not defined. Delegate Sub E1() ~~~~~~~~~~~~~~~~~ BC35000: Requested operation is not available because the runtime library function 'System.Delegate.Combine' is not defined. public event e as E1 ~~~~~~~~~~~~~~~~~~~~ BC35000: Requested operation is not available because the runtime library function 'System.Delegate.Remove' is not defined. public event e as E1 ~~~~~~~~~~~~~~~~~~~~ </expected>) End Sub <Fact> Public Sub MalformedSystemArray() Dim compilationDef = <compilation name="SpecialMembers"> <file name="a.vb"> Class Program public shared Sub Main() dim x() as integer = nothing for each e in x next End Sub End Class Namespace System Public Class [Object] End Class Public Class [String] End Class Public Class Array Public Readonly Property Length as integer Get return 0 end get end property End Class Public Structure Void End Structure Public Structure [Double] End Structure Public Structure Int32 End Structure Public Structure [Boolean] End Structure Public Structure DateTime End Structure Public Structure [Decimal] End Structure Public Structure [Char] End Structure Public Structure IntPtr End Structure Public Class ValueType End Class End Namespace </file> </compilation> Dim compilation = CompilationUtils.CreateEmptyCompilationWithReferences(compilationDef, New MetadataReference() {}) CompilationUtils.AssertTheseCompileDiagnostics(compilation, <expected> BC32023: Expression is of type 'Integer()', which is not a collection type. for each e in x ~ </expected>) CompilationUtils.AssertTheseDiagnostics(compilation, <expected> BC32023: Expression is of type 'Integer()', which is not a collection type. for each e in x ~ </expected>) End Sub End Class End Namespace