Skip to content

Commit

Permalink
Merge pull request #377 from neilccbrown/oop
Browse files Browse the repository at this point in the history
Added support for class (static) variables in classes
  • Loading branch information
PwtKCL authored Jan 21, 2025
2 parents c4d47fb + 02c4852 commit a324b0a
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 1 deletion.
2 changes: 1 addition & 1 deletion src/types/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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: []}}}}],

Expand Down
54 changes: 54 additions & 0 deletions tests/cypress/e2e/basics.cy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -282,6 +282,60 @@ 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));
});
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:
describe("Deleting frames", () => {
it("Lets you delete a frame with delete", () => {
Expand Down

0 comments on commit a324b0a

Please sign in to comment.