diff --git a/apps/circuit-compiler/src/app/services/circomPluginClient.ts b/apps/circuit-compiler/src/app/services/circomPluginClient.ts index 8cf855d5ff..e97609fbac 100644 --- a/apps/circuit-compiler/src/app/services/circomPluginClient.ts +++ b/apps/circuit-compiler/src/app/services/circomPluginClient.ts @@ -32,7 +32,7 @@ export class CircomPluginClient extends PluginClient { this.internalEvents.emit('circom_activated') } - async parse(path: string, fileContent?: string): Promise { + async parse(path: string, fileContent?: string): Promise<[CompilerReport[], Record]> { if (!fileContent) { // @ts-ignore fileContent = await this.call('fileManager', 'readFile', path) @@ -45,7 +45,7 @@ export class CircomPluginClient extends PluginClient { try { const result: CompilerReport[] = JSON.parse(parsedOutput.report()) - const mapReportFilePathToId = {} + const mapReportFilePathToId: Record = {} if (result.length === 0) { // @ts-ignore @@ -101,10 +101,8 @@ export class CircomPluginClient extends PluginClient { await this.call('editor', 'clearErrorMarkers', [path]) } } - - - this.internalEvents.emit('circuit_parsing_done', result, mapReportFilePathToId) - return result + + return [result, mapReportFilePathToId] } catch (e) { throw new Error(e) } @@ -112,7 +110,7 @@ export class CircomPluginClient extends PluginClient { async compile(path: string, compilationConfig?: CompilationConfig): Promise { this.internalEvents.emit('circuit_compiling_start') - const parseErrors = await this.parse(path) + const [parseErrors, filePathToId] = await this.parse(path) if (parseErrors && (parseErrors.length > 0)) { if (parseErrors[0].type === 'Error') { @@ -121,6 +119,8 @@ export class CircomPluginClient extends PluginClient { } else if (parseErrors[0].type === 'Warning') { this.internalEvents.emit('circuit_parsing_warning', parseErrors) } + } else { + this.internalEvents.emit('circuit_parsing_done', parseErrors, filePathToId) } if (compilationConfig) { const { prime, version } = compilationConfig @@ -160,7 +160,7 @@ export class CircomPluginClient extends PluginClient { async generateR1cs (path: string, compilationConfig?: CompilationConfig): Promise { this.internalEvents.emit('circuit_generating_r1cs_start') - const parseErrors = await this.parse(path) + const [parseErrors, filePathToId] = await this.parse(path) if (parseErrors && (parseErrors.length > 0)) { if (parseErrors[0].type === 'Error') { @@ -169,6 +169,8 @@ export class CircomPluginClient extends PluginClient { } else if (parseErrors[0].type === 'Warning') { this.internalEvents.emit('circuit_parsing_warning', parseErrors) } + } else { + this.internalEvents.emit('circuit_parsing_done', parseErrors, filePathToId) } if (compilationConfig) { const { prime, version } = compilationConfig diff --git a/apps/remix-ide-e2e/src/tests/circom.test.ts b/apps/remix-ide-e2e/src/tests/circom.test.ts index 60e3cebcec..0cad3052f3 100644 --- a/apps/remix-ide-e2e/src/tests/circom.test.ts +++ b/apps/remix-ide-e2e/src/tests/circom.test.ts @@ -95,25 +95,19 @@ module.exports = { }, 'Should display warnings for compiled circuit without pragma version #group4': function (browser: NightwatchBrowser) { browser - .addFile('circuits/warning.circom', { content: warningCircuit }) - .waitForElementPresent('[data-path="Semaphore - 1/circuits/warning.circom"]') - .waitForElementVisible('[data-path="Semaphore - 1/circuits/warning.circom"]') - .click('[data-id="treeViewLitreeViewItemcircuits/warning.circom"]') + .click('[data-id="treeViewLitreeViewItemcircuits/simple.circom"]') + .waitForElementPresent('[data-path="Semaphore - 1/circuits/simple.circom"]') + .waitForElementVisible('[data-path="Semaphore - 1/circuits/simple.circom"]') + .setEditorValue(warningCircuit) .clickLaunchIcon('circuit-compiler') .frame(0) .waitForElementPresent('button[data-id="compile_circuit_btn"]') .waitForElementVisible('button[data-id="compile_circuit_btn"]') .click('button[data-id="compile_circuit_btn"]') - .frameParent() - .clickLaunchIcon('filePanel') - .waitForElementPresent('[data-id="treeViewLitreeViewItemcircuits/.bin/warning.wasm"]') - .waitForElementVisible('[data-id="treeViewLitreeViewItemcircuits/.bin/warning.wasm"]') - .clickLaunchIcon('circuit-compiler') - .frame(0) .waitForElementPresent('[data-id="circuit_feedback"]') .waitForElementVisible('[data-id="circuit_feedback"]') .assert.hasClass('[data-id="circuit_feedback"]', 'alert-warning') - .waitForElementContainsText('[data-id="circuit_feedback"]', 'File circuits/warning.circom does not include pragma version. Assuming pragma version (2, 1, 5)') + .waitForElementContainsText('[data-id="circuit_feedback"]', 'File circuits/simple.circom does not include pragma version. Assuming pragma version (2, 1, 5)') }, 'Should hide/show warnings for compiled circuit #group4': function (browser: NightwatchBrowser) { browser @@ -121,17 +115,12 @@ module.exports = { .waitForElementNotPresent('[data-id="circuit_feedback"]') .click('[data-id="hide_circuit_warnings_checkbox_input"]') .waitForElementVisible('[data-id="circuit_feedback"]') - .waitForElementContainsText('[data-id="circuit_feedback"]', 'File circuits/warning.circom does not include pragma version. Assuming pragma version (2, 1, 5)') + .waitForElementContainsText('[data-id="circuit_feedback"]', 'File circuits/simple.circom does not include pragma version. Assuming pragma version (2, 1, 5)') }, 'Should display error for invalid circuit #group4': function (browser: NightwatchBrowser) { browser .frameParent() - .clickLaunchIcon('filePanel') - .addFile('circuits/error.circom', { content: errorCircuit }) - .waitForElementPresent('[data-path="Semaphore - 1/circuits/error.circom"]') - .waitForElementVisible('[data-path="Semaphore - 1/circuits/error.circom"]') - .click('[data-id="treeViewLitreeViewItemcircuits/error.circom"]') - .clickLaunchIcon('circuit-compiler') + .setEditorValue(errorCircuit) .frame(0) .waitForElementPresent('button[data-id="compile_circuit_btn"]') .waitForElementVisible('button[data-id="compile_circuit_btn"]') @@ -144,14 +133,12 @@ module.exports = { browser .click('[data-id="auto_compile_circuit_checkbox_input"]') .frameParent() - .setEditorValue(validCircuit, function () { - browser - .frame(0) - .waitForElementNotPresent('[data-id="circuit_feedback"]') - .frameParent() - .clickLaunchIcon('filePanel') - .waitForElementPresent('[data-id="treeViewLitreeViewItemcircuits/.bin/error.wasm"]') - }) + .setEditorValue(validCircuit) + .frame(0) + .waitForElementNotPresent('[data-id="circuit_feedback"]') + .frameParent() + .clickLaunchIcon('filePanel') + .waitForElementPresent('[data-id="treeViewLitreeViewItemcircuits/.bin/simple.wasm"]') } }