示例#1
0
        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(MiscHelpers.GetEmptyArray <string>());
        }
示例#2
0
        public override string[] GetAuxPropertyNames(BindingFlags bindFlags)
        {
            var type = GetSpecificTypeNoThrow();

            if (type != null)
            {
                return(type.GetNestedTypes(bindFlags).Select(testType => testType.GetRootName()).Distinct().ToArray());
            }

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

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

            value = null;
            return(false);
        }
示例#4
0
        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, MiscHelpers.GetEmptyArray <object>()), engine.Evaluate(objectName + "." + scriptMemberName));
                return;
            }

            var method = member as MethodInfo;

            if (method != null)
            {
                Assert.AreEqual(method.Invoke(target, new object[] { 98765 }), engine.Evaluate(objectName + "." + scriptMemberName + "(98765)"));
                return;
            }

            Assert.Fail("Unrecognized member");
        }
示例#5
0
 public override object GetProperty(int index)
 {
     VerifyNotDisposed();
     return(GetProperty(index.ToString(CultureInfo.InvariantCulture), MiscHelpers.GetEmptyArray <object>()));
 }
示例#6
0
 public virtual string[] GetAuxPropertyNames(IHostInvokeContext context, BindingFlags bindFlags)
 {
     return(MiscHelpers.GetEmptyArray <string>());
 }
示例#7
0
        public override object GetProperty(string name)
        {
            VerifyNotDisposed();

            var result = engine.MarshalToHost(engine.ScriptInvoke(() =>
            {
                try
                {
                    return(target.InvokeMember(name, BindingFlags.GetProperty, null, target, MiscHelpers.GetEmptyArray <object>(), null, CultureInfo.InvariantCulture, null));
                }
                catch (Exception)
                {
                    if (target.GetMethod(name, BindingFlags.GetProperty) != null)
                    {
                        // Property retrieval failed, but a method with the given name exists;
                        // create a tear-off method. This currently applies only to VBScript.

                        return(new ScriptMethod(this, name));
                    }

                    return(Nonexistent.Value);
                }
            }), false);

            var resultScriptItem = result as WindowsScriptItem;

            if ((resultScriptItem != null) && (resultScriptItem.engine == engine))
            {
                resultScriptItem.holder = this;
            }

            return(result);
        }
 public override bool TryGetMember(GetMemberBinder binder, out object result)
 {
     return(TryWrappedBindAndInvoke(binder, MiscHelpers.GetEmptyArray <object>(), out result));
 }
示例#9
0
 public MethodInfo[] GetMethods(BindingFlags bindFlags)
 {
     return(MiscHelpers.GetEmptyArray <MethodInfo>());
 }
示例#10
0
 public virtual string[] GetAuxPropertyNames(BindingFlags bindFlags)
 {
     return(MiscHelpers.GetEmptyArray <string>());
 }
示例#11
0
 public static object GetEnumeratorForHostObject(object obj)
 {
     return(((IDynamic)obj).InvokeMethod(SpecialMemberNames.NewEnum, MiscHelpers.GetEmptyArray <object>()));
 }
示例#12
0
 public static object GetHostObjectProperty(object obj, string name, out bool isCacheable)
 {
     return(((IDynamic)obj).GetProperty(name, MiscHelpers.GetEmptyArray <object>(), out isCacheable));
 }
示例#13
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, MiscHelpers.GetEmptyArray <object>()));
        }
示例#14
0
        public void BugFix_VBCallToParameterlessVBScriptSub()
        {
            var options = new CompilerParameters {
                GenerateInMemory = true
            };

            options.ReferencedAssemblies.Add("ClearScript.dll");
            var results = new VBCodeProvider().CompileAssemblyFromSource(options, new[] { @"
                Module TestModule
                    Sub TestMethod
                        Using engine As New Microsoft.ClearScript.Windows.VBScriptEngine
                            engine.Execute(""sub main : end sub"")
                            engine.Script.main()
                        End Using
                    End Sub
                End Module
            " });

            results.CompiledAssembly.GetType("TestModule").InvokeMember("TestMethod", BindingFlags.InvokeMethod, null, null, MiscHelpers.GetEmptyArray <object>());
        }
示例#15
0
 public PropertyInfo[] GetProperties(BindingFlags bindFlags)
 {
     return(MiscHelpers.GetEmptyArray <PropertyInfo>());
 }
示例#16
0
 public ExtensionMethodSummary()
 {
     Types       = MiscHelpers.GetEmptyArray <Type>();
     Methods     = MiscHelpers.GetEmptyArray <MethodInfo>();
     MethodNames = MiscHelpers.GetEmptyArray <string>();
 }
 public override ParameterInfo[] GetIndexParameters()
 {
     return(MiscHelpers.GetEmptyArray <ParameterInfo>());
 }
示例#18
0
 private static HostObject GetNullWrapper(Type type)
 {
     return((HostObject)getNullWrapperGenericMethod.MakeGenericMethod(type).Invoke(null, MiscHelpers.GetEmptyArray <object>()));
 }
 public override object[] GetCustomAttributes(Type attributeType, bool inherit)
 {
     return(MiscHelpers.GetEmptyArray <object>());
 }