diff --git a/apps/circuit-compiler/src/app/components/feedback.tsx b/apps/circuit-compiler/src/app/components/feedback.tsx index 3d7a6b94f1..b4c9367699 100644 --- a/apps/circuit-compiler/src/app/components/feedback.tsx +++ b/apps/circuit-compiler/src/app/components/feedback.tsx @@ -21,7 +21,7 @@ export function CompilerFeedback ({ feedback, filePathToId, hideWarnings, openEr
-
+
{ feedback }
@@ -39,12 +39,12 @@ export function CompilerFeedback ({ feedback, filePathToId, hideWarnings, openEr Array.isArray(feedback) && feedback.map((response, index) => (
handleOpenError(response)}> -
+
-
+
diff --git a/apps/circuit-compiler/src/app/components/options.tsx b/apps/circuit-compiler/src/app/components/options.tsx index 6275caba6d..adf083ae2f 100644 --- a/apps/circuit-compiler/src/app/components/options.tsx +++ b/apps/circuit-compiler/src/app/components/options.tsx @@ -14,7 +14,7 @@ export function CompileOptions ({autoCompile, hideWarnings, setCircuitAutoCompil checked={autoCompile} id="autoCompileCircuit" /> -
@@ -27,7 +27,7 @@ export function CompileOptions ({autoCompile, hideWarnings, setCircuitAutoCompil title="Hide warnings" checked={hideWarnings} /> -
diff --git a/apps/remix-ide-e2e/src/tests/circom.test.ts b/apps/remix-ide-e2e/src/tests/circom.test.ts index fcbed671c2..2e91aaee0a 100644 --- a/apps/remix-ide-e2e/src/tests/circom.test.ts +++ b/apps/remix-ide-e2e/src/tests/circom.test.ts @@ -8,7 +8,7 @@ module.exports = { init(browser, done) }, - 'Should create semaphore workspace template #group1 #group2 #group3': function (browser: NightwatchBrowser) { + 'Should create semaphore workspace template #group1 #group2 #group3 #group4': function (browser: NightwatchBrowser) { browser .clickLaunchIcon('filePanel') .click('*[data-id="workspacesMenuDropdown"]') @@ -92,5 +92,93 @@ module.exports = { }) .waitForElementPresent('[data-id="treeViewLitreeViewItemcircuits/.bin/simple.wasm"]') .waitForElementVisible('[data-id="treeViewLitreeViewItemcircuits/.bin/simple.wasm"]') + }, + '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"]') + .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"]') + .waitForElementPresent('[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)') + }, + 'Should hide/show warnings for compiled circuit #group4': function (browser: NightwatchBrowser) { + browser + .click('[data-id="hide_circuit_warnings_checkbox_input"]') + .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)') + }, + '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') + .frame(0) + .waitForElementPresent('button[data-id="compile_circuit_btn"]') + .waitForElementVisible('button[data-id="compile_circuit_btn"]') + .click('button[data-id="compile_circuit_btn"]') + .waitForElementPresent('[data-id="circuit_feedback"]') + .assert.hasClass('[data-id="circuit_feedback"]', 'alert-danger') + .waitForElementContainsText('[data-id="circuit_feedback"]', 'No main specified in the project structure') + }, + 'Should auto compile circuit #group4': function (browser: NightwatchBrowser) { + 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"]') + }) } } + +const warningCircuit = ` +template Multiplier2() { + signal input a; + signal input b; + signal output c; + c <== a*b; +} + +component main = Multiplier2(); +` + +const errorCircuit = ` +pragma circom 2.0.0; + +template Multiplier2() { + signal input a; + signal input b; + signal output c; + c <== a*b; + } +` + +const validCircuit = ` +pragma circom 2.0.0; + +template Multiplier2() { + signal input a; + signal input b; + signal output c; + c <== a*b; + } + + component main = Multiplier2(); +`