public void Transpile_LoliStackLoliRoundTrip_SameScript() { var script = "#CodeLabel\r\nif(a < b) {\r\nBLOCK:ConstantString\r\n => VAR @outputVar\r\nENDBLOCK\r\nJUMP #CodeLabel\r\n}\r\n"; var stack = Loli2StackTranspiler.Transpile(script); var newScript = Stack2LoliTranspiler.Transpile(stack); Assert.Equal(script, newScript); }
/// <summary> /// Packs the <paramref name="config"/> and returns the bytes of the resulting archive. /// </summary> public static async Task <byte[]> Pack(Config config) { using var packageStream = new MemoryStream(); using (var archive = new ZipArchive(packageStream, ZipArchiveMode.Create, false)) { await CreateZipEntryFromString(archive, "readme.md", config.Readme); await CreateZipEntryFromString(archive, "metadata.json", JsonConvert.SerializeObject(config.Metadata, jsonSettings)); await CreateZipEntryFromString(archive, "settings.json", JsonConvert.SerializeObject(config.Settings, jsonSettings)); switch (config.Mode) { case ConfigMode.Stack: config.LoliCodeScript = Stack2LoliTranspiler.Transpile(config.Stack); await CreateZipEntryFromString(archive, "script.loli", config.LoliCodeScript); break; case ConfigMode.LoliCode: await CreateZipEntryFromString(archive, "script.loli", config.LoliCodeScript); break; case ConfigMode.CSharp: await CreateZipEntryFromString(archive, "script.cs", config.CSharpScript); break; case ConfigMode.DLL: await CreateZipEntryFromBytes(archive, "build.dll", config.DLLBytes); break; case ConfigMode.Legacy: await CreateZipEntryFromString(archive, "script.legacy", config.LoliScript); break; default: throw new NotSupportedException(); } } config.UpdateHashes(); return(packageStream.ToArray()); }