|
1 | 1 | import { Papyros } from "../../../src/frontend/state/Papyros"; |
2 | 2 | import { expect, it, describe } from "vitest"; |
3 | 3 | import { ProgrammingLanguage } from "../../../src/ProgrammingLanguage"; |
4 | | -import { waitForFiles, waitForPapyrosReady, waitForInputReady, waitForOutput } from "../../helpers"; |
| 4 | +import { waitForFiles, waitForPapyrosReady, waitForInputReady, waitForOutput, waitForAwaitingInput } from "../../helpers"; |
5 | 5 | import { isValidFileName } from "../../../src/util/Util"; |
6 | 6 |
|
7 | 7 | describe("isValidFileName", () => { |
@@ -117,6 +117,47 @@ raise ValueError("intentional error") |
117 | 117 | expect(papyros.io.files[0].content).toBe("before crash"); |
118 | 118 | }); |
119 | 119 |
|
| 120 | + it("files from previous run persist while awaiting input in next run", async () => { |
| 121 | + const papyros = new Papyros(); |
| 122 | + await papyros.launch(); |
| 123 | + papyros.runner.programmingLanguage = ProgrammingLanguage.Python; |
| 124 | + papyros.runner.code = `open("persist.txt", "w").write("hello")`; |
| 125 | + await waitForInputReady(); |
| 126 | + await papyros.runner.start(); |
| 127 | + await waitForFiles(papyros, 1); |
| 128 | + expect(papyros.io.files.length).toBe(1); |
| 129 | + expect(papyros.io.files[0].name).toBe("persist.txt"); |
| 130 | + |
| 131 | + papyros.runner.code = `x = input("name?")`; |
| 132 | + await waitForPapyrosReady(papyros); |
| 133 | + void papyros.runner.start(); |
| 134 | + await waitForAwaitingInput(papyros); |
| 135 | + expect(papyros.io.files.length).toBe(1); |
| 136 | + expect(papyros.io.files[0].name).toBe("persist.txt"); |
| 137 | + |
| 138 | + papyros.io.provideInput("test"); |
| 139 | + await waitForPapyrosReady(papyros); |
| 140 | + expect(papyros.io.files.length).toBe(1); |
| 141 | + expect(papyros.io.files[0].name).toBe("persist.txt"); |
| 142 | + }); |
| 143 | + |
| 144 | + it("files from previous run are cleared when next run deletes them", async () => { |
| 145 | + const papyros = new Papyros(); |
| 146 | + await papyros.launch(); |
| 147 | + papyros.runner.programmingLanguage = ProgrammingLanguage.Python; |
| 148 | + papyros.runner.code = `open("temp.txt", "w").write("hello")`; |
| 149 | + await waitForInputReady(); |
| 150 | + await papyros.runner.start(); |
| 151 | + await waitForFiles(papyros, 1); |
| 152 | + expect(papyros.io.files.length).toBe(1); |
| 153 | + expect(papyros.io.files[0].name).toBe("temp.txt"); |
| 154 | + |
| 155 | + papyros.runner.code = `import os; os.remove("temp.txt")`; |
| 156 | + await papyros.runner.start(); |
| 157 | + await waitForPapyrosReady(papyros); |
| 158 | + expect(papyros.io.files.length).toBe(0); |
| 159 | + }); |
| 160 | + |
120 | 161 | it("updateFileContent updates the in-memory content of an existing file", async () => { |
121 | 162 | const papyros = new Papyros(); |
122 | 163 | await papyros.launch(); |
|
0 commit comments