Skip to content

Commit 536ac4b

Browse files
added memory to world (#202)
* added memory to world * made getValue as any
1 parent 58b69ff commit 536ac4b

File tree

11 files changed

+334
-289
lines changed

11 files changed

+334
-289
lines changed

.github/workflows/npm-publish.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ name: Node.js Package
66
on:
77
release:
88
types: [created]
9+
tags:
10+
- '1*'
911

1012
jobs:
1113
publish-npm:

.github/workflows/pull-request.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ on:
44
pull_request:
55
branches:
66
- main
7+
- v1
8+
- v2
79

810
jobs:
911
unix:

CHANGELOG.MD

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how
99
:x: - deprecation
1010
:pencil: - chore
1111

12+
## 2.1.0
13+
- :rocket: added memory to world
14+
- :rocket: updated `world.getValue` and `world.setValue` to use bound memory
15+
1216
## 2.0.2
1317
- :beetle: fixed d.ts for new _MemoryValue_ and _Validation_ types
1418

index.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ export interface IQavajsWorld extends IWorld {
6363
* Get value from memory
6464
* @param {any} expression - expression to parse
6565
*/
66-
getValue(expression: any): Promise<any>;
66+
getValue(expression: any): any;
6767

6868
/**
6969
* Save value to memory

package-lock.json

Lines changed: 279 additions & 247 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@qavajs/core",
3-
"version": "2.0.2",
3+
"version": "2.1.0",
44
"description": "qavajs framework core",
55
"scripts": {
66
"build": "tsc",
@@ -26,22 +26,22 @@
2626
"node": ">=18"
2727
},
2828
"dependencies": {
29-
"@qavajs/memory": "^1.9.0",
29+
"@qavajs/memory": "^1.10.0",
3030
"@qavajs/validation": "^0.10.0",
31-
"@swc/core": "^1.7.36",
31+
"@swc/core": "^1.7.40",
3232
"chalk": "^5.3.0",
3333
"yargs": "^17.7.2"
3434
},
3535
"devDependencies": {
3636
"@cucumber/cucumber": "^11.0.1",
37-
"@types/node": "^22.7.6",
37+
"@types/node": "^22.8.1",
3838
"@types/yargs": "^17.0.33",
39-
"@vitest/coverage-v8": "^2.1.3",
40-
"@vitest/ui": "^2.1.3",
41-
"@types/chai": "^4.3.19",
39+
"@vitest/coverage-v8": "^2.1.4",
40+
"@vitest/ui": "^2.1.4",
41+
"@types/chai": "^4.3.20",
4242
"chai": "^4.5.0",
4343
"ts-node": "^10.9.2",
4444
"typescript": "^5.6.3",
45-
"vitest": "^2.1.3"
45+
"vitest": "^2.1.4"
4646
}
4747
}

src/IQavajsWorld.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { DataTable, IWorld } from '@cucumber/cucumber';
2+
import { Memory } from '@qavajs/memory';
23

34
export interface Validation {
45
(AR: any, ER: any): void;
@@ -7,9 +8,10 @@ export interface Validation {
78
}
89

910
export interface IQavajsWorld extends IWorld {
10-
getValue(expression: string): Promise<any>;
11+
getValue(expression: string): any;
1112
setValue(key: string, value: any): void;
1213
executeStep(step: string, extraParam?: DataTable | string): Promise<void>;
1314
validation(type: string): Validation;
15+
memory: Memory;
1416
config: any;
1517
}

src/load.ts

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -30,32 +30,32 @@ export async function executeStep(this: any, text: string, extraParam?: DataTabl
3030
}
3131
}
3232

33-
function setValue(key: string, value: any): void {
34-
memory.setValue(key, value);
33+
function setValue(this: IQavajsWorld, key: string, value: any): void {
34+
this.memory.setValue(key, value);
3535
}
3636

37-
async function getValue(expression: string): Promise<any> {
38-
return memory.getValue(expression);
37+
function getValue(this: IQavajsWorld, expression: string): any {
38+
return this.memory.getValue(expression);
3939
}
4040

4141
export class MemoryValue {
42-
constructor(public expression: string) {}
42+
constructor(public world: IQavajsWorld, public expression: string) {}
4343

4444
/**
4545
* Return resolved value
4646
* @example
4747
* url.value()
48-
* @return Promise<any>
48+
* @return any
4949
*/
50-
value() { return memory.getValue(this.expression) }
50+
value() { return this.world.getValue(this.expression) }
5151

5252
/**
5353
* Set value to memory with provided key
5454
* @param value any - value to set
5555
* @example
5656
* url.set('https://qavajs.github.io/')
5757
*/
58-
set(value: any): void { memory.setValue(this.expression, value); }
58+
set(value: any): void { this.world.setValue(this.expression, value); }
5959
}
6060

6161
function transformString(fn: (value: string) => any) {
@@ -68,7 +68,12 @@ function transformString(fn: (value: string) => any) {
6868
defineParameterType({
6969
name: 'value',
7070
regexp: /"([^"\\]*(\\.[^"\\]*)*)"|'([^'\\]*(\\.[^'\\]*)*)'/,
71-
transformer: transformString(expression => new MemoryValue(expression)),
71+
transformer: function(this: IQavajsWorld, s1, s2) {
72+
const world = this;
73+
return transformString(expression => {
74+
return new MemoryValue(world, expression);
75+
})(s1, s2)
76+
}
7277
});
7378

7479
defineParameterType({
@@ -96,6 +101,7 @@ Before({name: 'qavajs init'}, async function (this: IQavajsWorld, scenario) {
96101
memory.setLogger(this);
97102
}
98103
memory.register(Object.assign({}, ...memoryInstances, memoryValues));
104+
this.memory = memory;
99105
this.executeStep = executeStep;
100106
this.getValue = getValue;
101107
this.setValue = setValue;

test-e2e/cjs/step_definitions/custom.js

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
const { When, DataTable } = require('@cucumber/cucumber');
22
const { Override } = require('../../../utils');
33
const { expect } = require('chai');
4-
const memory = require('@qavajs/memory');
54

65
When('I do test', async function() {});
76
Override('I do test', async function() {
@@ -19,8 +18,8 @@ When('I verify that config loaded', async function() {
1918
});
2019

2120
When('I verify that memory loaded', async function() {
22-
expect(memory.getValue('$customValue')).to.equal('cjs');
23-
expect(memory.getValue('$additionalValue')).to.equal(12);
21+
expect(this.memory.getValue('$customValue')).to.equal('cjs');
22+
expect(this.memory.getValue('$additionalValue')).to.equal(12);
2423
});
2524

2625
When('I verify that memory is connected to qavajs world', async function() {
@@ -51,16 +50,16 @@ When('I execute composite step', async function () {
5150
await this.executeStep('Nested step "42"');
5251
const customDataTable = new DataTable([['1', '2', '3']])
5352
await this.executeStep('Data table step:', customDataTable);
54-
expect(memory.getValue('$nestedValue')).to.equal('42');
55-
expect(memory.getValue('$dataTable')).to.deep.equal({ rawTable: [['1', '2', '3']]});
53+
expect(this.memory.getValue('$nestedValue')).to.equal('42');
54+
expect(this.memory.getValue('$dataTable')).to.deep.equal({ rawTable: [['1', '2', '3']]});
5655
});
5756

5857
When('Nested step {string}', async function(val) {
59-
memory.setValue('nestedValue', val);
58+
this.memory.setValue('nestedValue', val);
6059
});
6160

6261
When('Data table step:', function (dataTable) {
63-
memory.setValue('dataTable', dataTable);
62+
this.memory.setValue('dataTable', dataTable);
6463
});
6564

6665
When('Read memory {value} from cucumber type', async function(memoryValue) {
@@ -69,7 +68,7 @@ When('Read memory {value} from cucumber type', async function(memoryValue) {
6968

7069
When('write {string} to {value} value', async function(value, key) {
7170
key.set(value);
72-
expect(memory.getValue('$'+key.expression)).to.equal(value);
71+
expect(this.memory.getValue('$'+key.expression)).to.equal(value);
7372
});
7473

7574
When('I expect {string} {validation} {string}', async function(value1, validate, value2) {

test-e2e/esm/step_definitions/custom.js

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import {DataTable, When} from '@cucumber/cucumber';
22
import { expect } from 'chai';
3-
import memory from '@qavajs/memory';
43
import {Override} from '../../../utils.js';
54
import moduleESM from '../../modules/module.mjs';
65
import moduleCJS from '../../modules/module.cjs';
@@ -22,8 +21,8 @@ When('I verify that config loaded', async function() {
2221
});
2322

2423
When('I verify that memory loaded', async function() {
25-
expect(memory.getValue('$customValue')).to.equal('esm');
26-
expect(memory.getValue('$additionalValue')).to.equal(12);
24+
expect(this.memory.getValue('$customValue')).to.equal('esm');
25+
expect(this.memory.getValue('$additionalValue')).to.equal(12);
2726
});
2827

2928
When('I verify that process env loaded', async function() {
@@ -47,16 +46,16 @@ When('I execute composite step', async function () {
4746
await this.executeStep('Nested step "42"');
4847
const customDataTable = new DataTable([['1', '2', '3']])
4948
await this.executeStep('Data table step:', customDataTable);
50-
expect(memory.getValue('$nestedValue')).to.equal('42');
51-
expect(memory.getValue('$dataTable')).to.deep.equal({ rawTable: [['1', '2', '3']]});
49+
expect(this.memory.getValue('$nestedValue')).to.equal('42');
50+
expect(this.memory.getValue('$dataTable')).to.deep.equal({ rawTable: [['1', '2', '3']]});
5251
});
5352

5453
When('Nested step {string}', async function(val) {
55-
memory.setValue('nestedValue', val);
54+
this.memory.setValue('nestedValue', val);
5655
});
5756

5857
When('Data table step:', function (dataTable) {
59-
memory.setValue('dataTable', dataTable);
58+
this.memory.setValue('dataTable', dataTable);
6059
});
6160

6261
When('Read memory {value} from cucumber type', async function(memoryValue) {
@@ -65,7 +64,7 @@ When('Read memory {value} from cucumber type', async function(memoryValue) {
6564

6665
When('write {string} to {value} value', async function(value, key) {
6766
key.set(value);
68-
expect(memory.getValue('$'+key.expression)).to.equal(value);
67+
expect(this.memory.getValue('$'+key.expression)).to.equal(value);
6968
});
7069

7170
When('I expect {string} {validation} {string}', async function(value1, validate, value2) {

0 commit comments

Comments
 (0)