void Awake() { IFileSystem fileSystem; _mConsole = new MiniConsole(scrollRect, text, 100); _rt = ScriptEngine.CreateRuntime(); var asyncManager = new DefaultAsyncManager(); var pathResolver = new PathResolver(); pathResolver.AddSearchPath("node_modules"); if (fileLoader == FileLoader.Resources) { fileSystem = new ResourcesFileSystem(_mConsole); pathResolver.AddSearchPath("dist"); // 这里的路径相对于 Unity Resources 空间 } else if (fileLoader == FileLoader.HMR) { Debug.LogWarningFormat("功能未完成"); fileSystem = new HttpFileSystem(_mConsole, baseUrl); } else { // 演示了一般文件系统的访问, 实际项目中典型的情况需要自行实现基于 AssetBundle(或 7z/zip) 的文件访问层 fileSystem = new DefaultFileSystem(_mConsole); pathResolver.AddSearchPath("Scripts/out"); // pathResolver.AddSearchPath("../Scripts/out"); // _rt.AddSearchPath("Assets/Examples/Scripts/dist"); } _rt.withStacktrace = stacktrace; if (sourceMap) { _rt.EnableSourceMap(); } _rt.AddModuleResolvers(); _rt.extraBinding = (runtime, register) => { FSWatcher.Bind(register); QuickJS.Extra.WebSocket.Bind(register); QuickJS.Extra.XMLHttpRequest.Bind(register); if (!runtime.isWorker) { var uri = new Uri(baseUrl); QuickJS.Extra.DOMCompatibleLayer.Bind(register, uri); QuickJS.Extra.NodeCompatibleLayer.Bind(register); } }; _rt.Initialize(new ScriptRuntimeArgs { fileSystem = fileSystem, pathResolver = pathResolver, asyncManager = asyncManager, logger = _mConsole, byteBufferAllocator = new ByteBufferPooledAllocator(), binder = ReflectionBinder.GetBinder(useReflectBind), }); _rt.EvalMain(entryFileName); }
public void Bind_SimpleForm() { var binder = new ReflectionBinder(); var request = new DictionaryRequest { ["JobKey"] = "test" }; Form1 form = (Form1)binder.Bind(typeof(Form1), request); Assert.That(form, Is.Not.Null); Assert.That(form.JobKey, Is.EqualTo("test")); }
public void Bind_NestedArray_ShouldBeCaseInsensitive() { var binder = new ReflectionBinder(); var request = new DictionaryRequest { ["ITEMS[0].key"] = "key1" }; Form2 form = (Form2)binder.Bind(typeof(Form2), request); Assert.That(form, Is.Not.Null); Assert.That(form.Items, Is.Not.Null); Assert.That(form.Items.Length, Is.EqualTo(1)); Assert.That(form.Items[0].Key, Is.EqualTo("key1")); }
public void Bind_NestedArrayWrongKey_ShouldIgnore() { var binder = new ReflectionBinder(); var request = new DictionaryRequest { ["Items[0]"] = "key1", ["Items[0].Key"] = "key2" }; Form2 form = (Form2)binder.Bind(typeof(Form2), request); Assert.That(form, Is.Not.Null); Assert.That(form.Items, Is.Not.Null); Assert.That(form.Items.Length, Is.EqualTo(1)); Assert.That(form.Items[0].Key, Is.EqualTo("key2")); }
public void Bind_NestedArray() { var binder = new ReflectionBinder(); var request = new DictionaryRequest { ["Items[0].Key"] = "key1", ["Items[0].Value"] = "value1", ["Items[1].Key"] = "key2", ["Items[1].Value"] = "value2" }; Form2 form = (Form2)binder.Bind(typeof(Form2), request); Assert.That(form, Is.Not.Null); Assert.That(form.Items, Is.Not.Null); Assert.That(form.Items.Length, Is.EqualTo(2)); Assert.That(form.Items[0].Key, Is.EqualTo("key1")); Assert.That(form.Items[0].Value, Is.EqualTo("value1")); Assert.That(form.Items[1].Key, Is.EqualTo("key2")); Assert.That(form.Items[1].Value, Is.EqualTo("value2")); }