Untitled

 avatar
unknown
plain_text
10 days ago
7.2 kB
5
Indexable
import 'cypress-real-events/support';

const programGTurtleState =
  '{"commands":[{"penState":{"imagePath":"app/img/turtles/turtle0.png","isPenDown":true,"isErasingOn":false,"isVisible":true,"penColor":"rgb(0,0,0)","fillColor":"rgb(0,0,0)","penWidth":1,"direction":0,"position":{"x":0,"y":0},"turtleWidth":51.6,"turtleHeight":59.6},"x":0,"y":0,"endX":0,"endY":-100}],"backgroundColor":"white","turtleState":{"imagePath":"app/img/turtles/turtle0.png","isPenDown":true,"isErasingOn":false,"isVisible":true,"penColor":"rgb(0,0,0)","fillColor":"rgb(0,0,0)","penWidth":1,"direction":0,"position":{"x":0,"y":-100},"turtleWidth":51.6,"turtleHeight":59.6}}';

const programGTurtle = `from gturtle import *
makeTurtle()

fd(100)
print(getY())`;

const programGTurtleOutput = ['-100'];

const programLog = `print(100)
print("text")`;

const programLogOutput = ['100', 'text'];

const programPrompt = `a = input("Enter test value")
print(a)
print(input())`;

const programPromptOutput = ['18', '18'];

const programNumpy = `import numpy as np
print(np.zeros(3))`;

const programNumpyOutput = ['[0. 0. 0.]'];

const programIntegrated = `from gturtle import *
makeTurtle()

fd(100)
print(getY())

a = input("Wert eingeben")
print(a)

import numpy as np
print(np.zeros(3))

repeat a:
fd(25)
rt(20)`;

const programIntegratedOutput = ['-100', '18', '[0. 0. 0.]'];

const _progrmIntegratedState =
  '{"commands":[{"penState":{"imagePath":"app/img/turtles/turtle0.png","isPenDown":true,"isErasingOn":false,"isVisible":true,"penColor":"rgb(0,0,0)","fillColor":"rgb(0,0,0)","penWidth":1,"direction":0,"position":{"x":0,"y":0},"turtleWidth":51.6,"turtleHeight":59.6},"x":0,"y":0,"endX":0,"endY":-100}],"backgroundColor":"white","turtleState":{"imagePath":"app/img/turtles/turtle0.png","isPenDown":true,"isErasingOn":false,"isVisible":true,"penColor":"rgb(0,0,0)","fillColor":"rgb(0,0,0)","penWidth":1,"direction":0,"position":{"x":0,"y":-100},"turtleWidth":51.6,"turtleHeight":59.6}}';

const programSpeedSlider = `from gturtle import *
makeTurtle()

repeat 360:
fd(1)
rt(1)`;

describe('Using the mega stage for writing python code.', () => {
  beforeEach(() => {
    cy.visit('/#/mega');

    // clear the editor content
    cy.get('.ace_editor')
      .should('be.visible')
      .click()
      .focused()
      .then(() => {
        const isMac = Cypress.platform === 'darwin';
        const modifier = isMac ? 'Meta' : 'Control';

        cy.realPress([modifier, 'A']); // select all
        cy.realPress('Backspace'); // delete
      });
    cy.enterPromptValue('18');
  });

  it('GTurtle & Output', () => {
    // type test program
    cy.get('[test-id="megaEditor"]').eq(0).should('exist').type(programGTurtle);

    // start program execution
    cy.get('[test-id="megaStartBtn"]').click();

    // await execution
    cy.awaitExecutionTermination();

    // check log
    cy.get('[class="log-container"]')
      .invoke('text')
      .then((text) => {
        // Create a regular expression pattern to match the expected values in order
        const pattern = programGTurtleOutput.join('.*');

        // Assert that the text contains the expected values in the right order using regex
        expect(text).to.match(new RegExp(pattern));
      });

    // check canvas by state
    cy.verifyCanvasOnCanvasStateBasis(programGTurtleState);
  });

  it('Log', () => {
    // type test program
    cy.get('[test-id="megaEditor"]').eq(0).should('exist').type(programLog);

    // start program execution
    cy.get('[test-id="megaStartBtn"]').click();

    // await execution
    cy.awaitExecutionTermination();

    // check log
    cy.get('[class="log-container"]')
      .invoke('text')
      .then((text) => {
        // Create a regular expression pattern to match the expected values in order
        const pattern = programLogOutput.join('.*');

        // Assert that the text contains the expected values in the right order using regex
        expect(text).to.match(new RegExp(pattern));
      });
  });

  it('Prompt & Log', () => {
    // type test program
    cy.get('[test-id="megaEditor"]').eq(0).should('exist').type(programPrompt);

    // start program execution
    cy.get('[test-id="megaStartBtn"]').click();

    //await dialog to appear to enter prompt value
    cy.get('mat-dialog-content input', {timeout: 5000}).type('18');
    cy.get('[test-id="confirmBtn"]').click();
    cy.wait(2000);
    cy.get('mat-dialog-content input', {timeout: 5000}).type('18');
    cy.get('[test-id="confirmBtn"]').click();

    // await execution
    cy.awaitExecutionTermination();

    // check log
    cy.get('[class="log-container"]')
      .invoke('text')
      .then((text) => {
        // Create a regular expression pattern to match the expected values in order
        const pattern = programPromptOutput.join('.*');

        // Assert that the text contains the expected values in the right order using regex
        expect(text).to.match(new RegExp(pattern));
      });
  });

  it('Numpy', () => {
    // type test program
    cy.get('[test-id="megaEditor"]').eq(0).should('exist').type(programNumpy);

    // start program execution
    cy.get('[test-id="megaStartBtn"]').click();

    // await execution
    cy.awaitExecutionTermination();

    // check log
    cy.get('[class="log-container"]')
      .invoke('text')
      .then((text) => {
        // Create a regular expression pattern to match the expected values in order
        const pattern = programNumpyOutput.join('.*');

        // Assert that the text contains the expected values in the right order using regex
        expect(text).to.match(new RegExp(pattern));
      });
  });

  it('Speed Slider', () => {
    //speed up program execution
    cy.setMaxSpeedViaSlider();

    // type test program
    cy.get('[test-id="megaEditor"]')
      .eq(0)
      .should('exist')
      .type(programSpeedSlider);

    // start program execution
    cy.get('[test-id="megaStartBtn"]').click();

    // await execution
    cy.awaitExecutionTermination();

    // check canvas by amount of draw commands
    cy.window().then((w) => {
      const canvasState = JSON.stringify(w['getCanvasState']());
      const commandsCount = canvasState.split('position').length - 1;
      expect(commandsCount).to.equal(361);
    });
  });

  it('Integrated Test', () => {
    //speed up program execution
    cy.setMaxSpeedViaSlider();

    // type test program
    cy.get('[test-id="megaEditor"]')
      .eq(0)
      .should('exist')
      .type(programIntegrated);

    // start program execution
    cy.get('[test-id="megaStartBtn"]').click();

    //await dialog to appear to enter prompt value
    cy.get('mat-dialog-content input', {timeout: 5000}).type('18');
    cy.get('[test-id="confirmBtn"]').click();

    // await execution
    cy.awaitExecutionTermination();

    // check log
    cy.get('[class="log-container"]')
      .invoke('text')
      .then((text) => {
        // Create a regular expression pattern to match the expected values in order
        const pattern = programIntegratedOutput.join('.*');

        // Assert that the text contains the expected values in the right order using regex
        expect(text).to.match(new RegExp(pattern));
      });
  });
});
Editor is loading...
Leave a Comment