From 14bac66bd8b923fb939331e4a1eff17019737a8e Mon Sep 17 00:00:00 2001 From: Neil Brown Date: Tue, 21 Jan 2025 11:52:26 +0000 Subject: [PATCH 1/3] Added a passing test for inserting a basic class frame. --- tests/cypress/e2e/basics.cy.ts | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/tests/cypress/e2e/basics.cy.ts b/tests/cypress/e2e/basics.cy.ts index 32fc9804..ea9f81ae 100644 --- a/tests/cypress/e2e/basics.cy.ts +++ b/tests/cypress/e2e/basics.cy.ts @@ -282,6 +282,21 @@ describe("Adding frames", () => { }); }); +describe("Classes", () => { + it("Lets you add a class frame", () => { + checkCodeEquals(defaultImports.concat(defaultMyCode)); + cy.get("body").type("{uparrow}cFoo"); + cy.get("body").type("{rightarrow}{downarrow} foo()"); + checkCodeEquals(defaultImports.concat([ + {h: /class\s+Foo\s*:/, b: [ + {h: /def\s+__init__\s*\((self,?)?\s*\)\s*:/, b: [ + "foo()", + ]}, + ]}, + ]).concat(defaultMyCode)); + }); +}); + // Test that selecting and deleting frames using keyboard works properly: describe("Deleting frames", () => { it("Lets you delete a frame with delete", () => { From e3ce965a511b71884ef2e5e85b0c12534175fe0b Mon Sep 17 00:00:00 2001 From: Neil Brown Date: Tue, 21 Jan 2025 12:41:29 +0000 Subject: [PATCH 2/3] Added a test for inserting attributes in class frames, and got it passing. --- src/types/types.ts | 2 +- tests/cypress/e2e/basics.cy.ts | 39 ++++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/src/types/types.ts b/src/types/types.ts index 7620c042..f6c0ce6b 100644 --- a/src/types/types.ts +++ b/src/types/types.ts @@ -629,7 +629,7 @@ export function generateAllFrameDefinitionTypes(regenerateExistingFrames?: boole ], colour: "#baded3", forbiddenChildrenTypes: Object.values(ImportFrameTypesIdentifiers) - .concat(Object.values(StandardFrameTypesIdentifiers).filter((f) => f != CommentFrameTypesIdentifier.comment)) + .concat(Object.values(StandardFrameTypesIdentifiers).filter((f) => f != CommentFrameTypesIdentifier.comment & f != StandardFrameTypesIdentifiers.varassign)) .concat([DefIdentifiers.classdef]), defaultChildrenTypes: [{...EmptyFrameObject, frameType: FuncDefDefinition, labelSlotsDict: {0: {slotStructures:{fields:[{code:"__init__"}], operators: []}}, 1: {slotStructures:{fields:[{code:""}], operators: []}}}}], diff --git a/tests/cypress/e2e/basics.cy.ts b/tests/cypress/e2e/basics.cy.ts index ea9f81ae..15d15845 100644 --- a/tests/cypress/e2e/basics.cy.ts +++ b/tests/cypress/e2e/basics.cy.ts @@ -295,6 +295,45 @@ describe("Classes", () => { ]}, ]).concat(defaultMyCode)); }); + it("Lets you add a class frame with a parent class", () => { + checkCodeEquals(defaultImports.concat(defaultMyCode)); + cy.get("body").type("{uparrow}cFoo(Bar"); + cy.get("body").type("{rightarrow}{rightarrow}{downarrow} foo()"); + checkCodeEquals(defaultImports.concat([ + {h: /class\s+Foo\(Bar\)\s*:/, b: [ + {h: /def\s+__init__\s*\((self,?)?\s*\)\s*:/, b: [ + "foo()", + ]}, + ]}, + ]).concat(defaultMyCode)); + }); + + it("Lets you add a class frame with class attributes and methods", () => { + checkCodeEquals(defaultImports.concat(defaultMyCode)); + // Class header: + cy.get("body").type("{uparrow}cFoo"); + // Constructor body: + cy.get("body").type("{rightarrow}{downarrow} foo()"); + // Attribute: + cy.get("body").type("{rightarrow}{downarrow}=myattr=5"); + // Methods: + cy.get("body").type("{rightarrow}ffoo{downarrow}r6"); + cy.get("body").type("{rightarrow}{downarrow}fbar(x,y{downarrow}r7"); + checkCodeEquals(defaultImports.concat([ + {h: /class\s+Foo\s*:/, b: [ + {h: /def\s+__init__\s*\((self,?)?\s*\)\s*:/, b: [ + "foo()", + ]}, + /myattr\s*[⇐=]\s*5/, + {h: /def\s+foo\s*\((self,?)?\s*\)\s*:/, b: [ + /return\s+6/, + ]}, + {h: /def\s+bar\s*\((self,)?\s*x,y\s*\)\s*:/, b: [ + /return\s+7/, + ]}, + ]}, + ]).concat(defaultMyCode)); + }); }); // Test that selecting and deleting frames using keyboard works properly: From 02c4852d36d1b55b56472ef2038fb16e97ce8a93 Mon Sep 17 00:00:00 2001 From: Neil Brown Date: Tue, 21 Jan 2025 13:22:23 +0000 Subject: [PATCH 3/3] Fixed a typo in an expression. --- src/types/types.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/types/types.ts b/src/types/types.ts index f6c0ce6b..8b7745f7 100644 --- a/src/types/types.ts +++ b/src/types/types.ts @@ -629,7 +629,7 @@ export function generateAllFrameDefinitionTypes(regenerateExistingFrames?: boole ], colour: "#baded3", forbiddenChildrenTypes: Object.values(ImportFrameTypesIdentifiers) - .concat(Object.values(StandardFrameTypesIdentifiers).filter((f) => f != CommentFrameTypesIdentifier.comment & f != StandardFrameTypesIdentifiers.varassign)) + .concat(Object.values(StandardFrameTypesIdentifiers).filter((f) => f != CommentFrameTypesIdentifier.comment && f != StandardFrameTypesIdentifiers.varassign)) .concat([DefIdentifiers.classdef]), defaultChildrenTypes: [{...EmptyFrameObject, frameType: FuncDefDefinition, labelSlotsDict: {0: {slotStructures:{fields:[{code:"__init__"}], operators: []}}, 1: {slotStructures:{fields:[{code:""}], operators: []}}}}],