public override string[] GetAuxPropertyNames(IHostInvokeContext context, BindingFlags bindFlags)
        {
            var type = GetSpecificTypeNoThrow();

            if (type != null)
            {
                return(type.GetScriptableNestedTypes(bindFlags, context.DefaultAccess).Select(testType => testType.GetRootName()).Distinct().ToArray());
            }

            return(ArrayHelpers.GetEmptyArray <string>());
        }
Beispiel #2
0
        public static bool AdvanceEnumerator(object enumerator, out object value)
        {
            var wrapper = (IScriptMarshalWrapper)enumerator;

            if (((IEnumerator)wrapper.Unwrap()).MoveNext())
            {
                value = ((IDynamic)enumerator).GetProperty("Current", ArrayHelpers.GetEmptyArray <object>());
                return(true);
            }

            value = null;
            return(false);
        }
Beispiel #3
0
 public virtual string[] GetAuxPropertyNames(IHostInvokeContext context, BindingFlags bindFlags)
 {
     return(ArrayHelpers.GetEmptyArray <string>());
 }
        private void AssertMemberInternal(string objectName, string memberName, string scriptMemberName)
        {
            var field = GetType().GetField(objectName, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);

            Assert.IsNotNull(field);

            var member = field.FieldType.GetMembers(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic).FirstOrDefault(testMember => testMember.GetShortName() == memberName);

            Assert.IsNotNull(member);

            var target = field.GetValue(this);

            Assert.IsNotNull(target);

            var eventInfo = member as EventInfo;

            if (eventInfo != null)
            {
                var eventSource = engine.Evaluate(objectName + "." + scriptMemberName) as EventSource <EventHandler>;
                Assert.IsNotNull(eventSource);
                // ReSharper disable once PossibleNullReferenceException
                Assert.AreSame(target, eventSource.Source);
                Assert.AreSame(eventInfo, eventSource.EventInfo);
                return;
            }

            field = member as FieldInfo;
            if (field != null)
            {
                Assert.AreEqual(field.GetValue(target), engine.Evaluate(objectName + "." + scriptMemberName));
                return;
            }

            var property = member as PropertyInfo;

            if (property != null)
            {
                Assert.AreEqual(property.GetValue(target, ArrayHelpers.GetEmptyArray <object>()), engine.Evaluate(objectName + "." + scriptMemberName));
                return;
            }

            var method = member as MethodInfo;

            if (method != null)
            {
                switch (method.GetParameters().Length)
                {
                case 0:
                    Assert.AreEqual(method.Invoke(target, ArrayHelpers.GetEmptyArray <object>()), engine.Evaluate(objectName + "." + scriptMemberName + "()"));
                    break;

                case 1:
                    Assert.AreEqual(method.Invoke(target, new object[] { 98765 }), engine.Evaluate(objectName + "." + scriptMemberName + "(98765)"));
                    break;

                default:
                    Assert.Fail("Unsupported method signature");
                    break;
                }

                return;
            }

            Assert.Fail("Unrecognized member");
        }
Beispiel #5
0
 private static HostObject GetNullWrapper(Type type)
 {
     return((HostObject)getNullWrapperGenericMethod.MakeGenericMethod(type).Invoke(null, ArrayHelpers.GetEmptyArray <object>()));
 }
Beispiel #6
0
        public static object InvokeVBTestFunction(string code, string extraDefinitions = null)
        {
            var references = new[]
            {
                MetadataReference.CreateFromFile(Assembly.Load("NetStandard").Location),
                MetadataReference.CreateFromFile(typeof(object).Assembly.Location),
                MetadataReference.CreateFromFile(typeof(Enumerable).Assembly.Location),
                MetadataReference.CreateFromFile(typeof(Assert).Assembly.Location),
                MetadataReference.CreateFromFile(typeof(ScriptEngine).Assembly.Location),
                MetadataReference.CreateFromFile(typeof(V8ScriptEngine).Assembly.Location),
                MetadataReference.CreateFromFile(typeof(WindowsScriptEngine).Assembly.Location),
                MetadataReference.CreateFromFile(typeof(ClearScriptTest).Assembly.Location),
                MetadataReference.CreateFromFile(Assembly.Load("System.Runtime").Location),
                MetadataReference.CreateFromFile(Assembly.Load("Microsoft.VisualBasic.Core").Location)
            };

            var syntaxTree = VisualBasicSyntaxTree.ParseText(MiscHelpers.FormatInvariant(@"
                Imports System
                Imports System.Linq
                Imports System.Runtime.InteropServices
                Imports Microsoft.ClearScript
                Imports Microsoft.ClearScript.Test
                Imports Microsoft.ClearScript.V8
                Imports Microsoft.ClearScript.Windows
                Imports Microsoft.VisualStudio.TestTools.UnitTesting
                {1}
                Module TestModule
                    Function TestFunction
                        {0}
                    End Function
                End Module
            ", code, extraDefinitions ?? string.Empty));

            var compilation = VisualBasicCompilation.Create(
                "VBTest_" + Guid.NewGuid().ToString(),
                new[] { syntaxTree },
                references,
                new VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary)
                );

            using (var stream = new MemoryStream())
            {
                var result = compilation.Emit(stream);
                if (!result.Success)
                {
                    var messageBuilder = new StringBuilder("Errors encountered during Visual Basic compilation:\n");
                    foreach (var diagnostic in result.Diagnostics)
                    {
                        messageBuilder.Append(diagnostic);
                        messageBuilder.Append('\n');
                    }

                    throw new OperationCanceledException(messageBuilder.ToString());
                }

                stream.Seek(0, SeekOrigin.Begin);
                return(AssemblyLoadContext.Default.LoadFromStream(stream).GetType("TestModule").InvokeMember("TestFunction", BindingFlags.InvokeMethod, null, null, ArrayHelpers.GetEmptyArray <object>()));
            }
        }
Beispiel #7
0
 public ExtensionMethodSummary()
 {
     Types       = ArrayHelpers.GetEmptyArray <Type>();
     Methods     = ArrayHelpers.GetEmptyArray <MethodInfo>();
     MethodNames = ArrayHelpers.GetEmptyArray <string>();
 }
Beispiel #8
0
        public static object InvokeVBTestFunction(string code, string extraDefinitions = null)
        {
            var options = new CompilerParameters {
                GenerateInMemory = true
            };

            options.ReferencedAssemblies.Add("ClearScript.dll");
            options.ReferencedAssemblies.Add("ClearScriptTest.dll");
            options.ReferencedAssemblies.Add(typeof(Enumerable).Assembly.Location);
            options.ReferencedAssemblies.Add(typeof(Assert).Assembly.Location);
            var results = new VBCodeProvider().CompileAssemblyFromSource(options, MiscHelpers.FormatInvariant(@"
                Imports System
                Imports System.Linq
                Imports System.Runtime.InteropServices
                Imports Microsoft.ClearScript
                Imports Microsoft.ClearScript.Test
                Imports Microsoft.ClearScript.V8
                Imports Microsoft.ClearScript.Windows
                Imports Microsoft.VisualStudio.TestTools.UnitTesting
                {1}
                Module TestModule
                    Function TestFunction
                        {0}
                    End Function
                End Module
            ", code, extraDefinitions ?? string.Empty));

            if (results.Errors.HasErrors)
            {
                var messageBuilder = new StringBuilder("Errors encountered during Visual Basic compilation:\n");
                foreach (var error in results.Errors)
                {
                    messageBuilder.Append(error);
                    messageBuilder.Append('\n');
                }

                throw new OperationCanceledException(messageBuilder.ToString());
            }

            return(results.CompiledAssembly.GetType("TestModule").InvokeMember("TestFunction", BindingFlags.InvokeMethod, null, null, ArrayHelpers.GetEmptyArray <object>()));
        }
Beispiel #9
0
 public PropertyInfo[] GetProperties(BindingFlags bindFlags)
 {
     return(ArrayHelpers.GetEmptyArray <PropertyInfo>());
 }
Beispiel #10
0
 public MethodInfo[] GetMethods(BindingFlags bindFlags)
 {
     return(ArrayHelpers.GetEmptyArray <MethodInfo>());
 }
Beispiel #11
0
 public override bool TryGetMember(GetMemberBinder binder, out object result)
 {
     return(TryWrappedBindAndInvoke(binder, ArrayHelpers.GetEmptyArray <object>(), out result));
 }
Beispiel #12
0
 public static object GetHostObjectProperty(object obj, string name, out bool isCacheable)
 {
     return(((IDynamic)obj).GetProperty(name, ArrayHelpers.GetEmptyArray <object>(), out isCacheable));
 }
Beispiel #13
0
 public static object GetHostObjectProperty(object obj, string name)
 {
     return(((IDynamic)obj).GetProperty(name, ArrayHelpers.GetEmptyArray <object>()));
 }
Beispiel #14
0
 public static object GetEnumeratorForHostObject(object obj)
 {
     return(((IDynamic)obj).InvokeMethod(SpecialMemberNames.NewEnum, ArrayHelpers.GetEmptyArray <object>()));
 }
 public override object GetProperty(int index)
 {
     VerifyNotDisposed();
     return(GetProperty(index.ToString(CultureInfo.InvariantCulture), ArrayHelpers.GetEmptyArray <object>()));
 }