| import test, { ExecutionContext } from "ava"; | 
|   | 
| import { Helpers } from "@mathcoach-ide-api"; | 
| import { MathCoach } from "@mathcoach-ide-api"; | 
|   | 
|   | 
| test("Helpers.contextFileToExerciseFile works as expected", t => { | 
|     t.deepEqual( | 
|         Helpers.contextFileToExerciseFile({ owner: "demo", part: "vfs", path: "/a/b/aufgabe.tool.json" }), | 
|         { owner: "demo", part: "vfs", path: "/a/b/aufgabe.groovy" } as MathCoach.File | 
|     ); | 
|     t.deepEqual( | 
|         Helpers.contextFileToExerciseFile({ owner: "demo", part: "vfs", path: "/a/b/aufgabe.json" }), | 
|         { owner: "demo", part: "vfs", path: "/a/b/aufgabe.groovy" } as MathCoach.File | 
|     ); | 
|     t.deepEqual( | 
|         Helpers.contextFileToExerciseFile({ owner: "demo", part: "vfs", path: "/aufgabe.tool.json" }), | 
|         { owner: "demo", part: "vfs", path: "/aufgabe.groovy" } as MathCoach.File | 
|     ); | 
|     t.deepEqual( | 
|         Helpers.contextFileToExerciseFile({ owner: "demo", part: "vfs", path: "/aufgabe.json" }), | 
|         { owner: "demo", part: "vfs", path: "/aufgabe.groovy" } as MathCoach.File | 
|     ); | 
| }) | 
|   | 
| test("Helpers.contextFileToExerciseFile check params", t => { | 
|     const expected = { message: "no valid file reference given, expected object like {owner:'demo', part:'vfs'|'www', path: '/...'}" } | 
|     t.throws(() => Helpers.contextFileToExerciseFile(null as any), expected); | 
|     t.throws(() => Helpers.contextFileToExerciseFile("null" as any), expected); | 
|     t.throws(() => Helpers.contextFileToExerciseFile({ owner: 1, part: 2, path: 3 } as any), expected); | 
|     t.throws(() => Helpers.contextFileToExerciseFile({ owner: "", part: "vfs", path: "/aufgabe.tool.json" } as any), expected); | 
|     t.throws(() => Helpers.contextFileToExerciseFile({ owner: "demo", part: "xxx", path: "/aufgabe.tool.json" } as any), expected); | 
|     t.throws(() => Helpers.contextFileToExerciseFile({ owner: "demo", part: "vfs", path: "notAbsolute.tool.json" } as any), expected); | 
| }) | 
|   | 
| test("Helpers.isFile", t => { | 
|     t.true(Helpers.isFile({ owner: "demo1", part: "vfs", path: "/aufgabe.json" })) | 
|     t.true(Helpers.isFile({ owner: "demo2", part: "www", path: "/b/aufgabe.json" })) | 
|     t.true(Helpers.isFile({ owner: "demo3", part: "vfs", path: "/" })) | 
|   | 
|     t.false(Helpers.isFile(undefined)) | 
|     t.false(Helpers.isFile({})) | 
|     t.false(Helpers.isFile("test")) | 
|   | 
|     t.false(Helpers.isFile({ owner: "demo", part: "xxx", path: "/aufgabe.json" })) // bad part | 
|     t.false(Helpers.isFile({ owner: "demo", part: 42, path: "/aufgabe.json" })) // bad part | 
|     t.false(Helpers.isFile({ owner: "demo", path: "/aufgabe.json" })) // bad part | 
|   | 
|   | 
|     t.false(Helpers.isFile({ owner: "demo", part: "www", path: "noAbsolutePath.json" })) // bad path | 
|     t.false(Helpers.isFile({ owner: "demo", part: "www", path: "" })) // bad path | 
|     t.false(Helpers.isFile({ owner: "demo", part: "www", path: 42 })) // bad path | 
|     t.false(Helpers.isFile({ owner: "demo", part: "www" })) // bad path | 
|   | 
|     t.false(Helpers.isFile({ owner: undefined, part: "vfs", path: "/" })) // bad owner | 
|     t.false(Helpers.isFile({ owner: 42, part: "vfs", path: "/" })) // bad owner | 
|     t.false(Helpers.isFile({ part: "vfs", path: "/" })) // bad owner | 
| }) | 
|   | 
|   | 
| test("Helpers.createStorageBasedApi() MC.isReady", async t => { | 
|     const MC = Helpers.createStorageBasedApi(); | 
|     t.true(await MC.isReady()); | 
| }) | 
|   | 
| test("Helpers.createStorageBasedApi() MC.ide.getContextFile", async t => { | 
|     const MC = Helpers.createStorageBasedApi(); | 
|     const contextFile = await MC.ide.getContextFile() | 
|     t.true(Helpers.isFile(contextFile)); | 
|     t.is(contextFile.owner, "jdoe"); | 
|     t.is(contextFile.part, "vfs"); | 
|     t.is(contextFile.path, "/file.dummy.json"); | 
| }) | 
|   | 
| test("Helpers.createStorageBasedApi() MC.ide.getUserName", async t => { | 
|     const MC = Helpers.createStorageBasedApi(); | 
|     t.is(await MC.ide.getUserName(), "jdoe"); | 
| }) | 
|   | 
| async function expectThrows(t: ExecutionContext, callback: () => Promise<any>) { | 
|     try { | 
|         await callback(); | 
|         t.fail() | 
|     } catch (error) { | 
|         t.pass() | 
|     } | 
| } | 
|   | 
| test("Helpers.createStorageBasedApi() MC.ide.fs readFile+writeFile", async t => { | 
|     const MC = Helpers.createStorageBasedApi(); // expect InMemory Storage | 
|     const contextFile = await MC.ide.getContextFile(); | 
|     const exerciseFile = Helpers.contextFileToExerciseFile(contextFile); | 
|   | 
|     t.is(await MC.ide.fs.readFile(contextFile), ""); | 
|     t.is(await MC.ide.fs.readFile(exerciseFile), ""); | 
|   | 
|     await MC.ide.fs.writeFile(contextFile, "123"); | 
|     await MC.ide.fs.writeFile(exerciseFile, "456"); | 
|   | 
|     t.is(await MC.ide.fs.readFile(contextFile), "123"); | 
|     t.is(await MC.ide.fs.readFile(exerciseFile), "456"); | 
|   | 
|     expectThrows(t, () => MC.ide.fs.writeFile({} as any, "")); | 
|     expectThrows(t, () => MC.ide.fs.writeFile(exerciseFile, 42 as any)); | 
|     expectThrows(t, () => MC.ide.fs.writeFile(null as any, null as any)); | 
| }) | 
|   | 
| test("Helpers.createStorageBasedApi() MC.ide.navigator", async t => { | 
|     const MC = Helpers.createStorageBasedApi(); | 
|     const contextFile = await MC.ide.getContextFile(); | 
|     const exerciseFile = Helpers.contextFileToExerciseFile(contextFile); | 
|   | 
|     MC.ide.navigator.navigateTo("www.google.de"); | 
|     MC.ide.navigator.navigateToExercise(exerciseFile); | 
|     MC.ide.navigator.navigateTo("www.google.de", true); | 
|     MC.ide.navigator.navigateToExercise(exerciseFile, true); | 
|     MC.ide.navigator.navigateTo("www.google.de", false); | 
|     MC.ide.navigator.navigateToExercise(exerciseFile, false); | 
|   | 
|     expectThrows(t, () => MC.ide.navigator.navigateTo(null as any)); | 
|     expectThrows(t, () => MC.ide.navigator.navigateTo(42 as any)); | 
|     expectThrows(t, () => MC.ide.navigator.navigateTo("www.google.de", 42 as any)); | 
|   | 
|     t.pass(); | 
| }) |