From cd4bf15cc8e2df6ad0ac5c3cd6ed18f2e91d514f Mon Sep 17 00:00:00 2001 From: sanex Date: Sun, 6 Feb 2022 10:56:36 +0300 Subject: [PATCH] Fixed zero threshold case for string array storage analyze --- .../StringArrayStorageAnalyzer.ts | 1 + .../StringArrayStorageAnalyzer.spec.ts | 52 +++++++++++-------- 2 files changed, 30 insertions(+), 23 deletions(-) diff --git a/src/analyzers/string-array-storage-analyzer/StringArrayStorageAnalyzer.ts b/src/analyzers/string-array-storage-analyzer/StringArrayStorageAnalyzer.ts index b714759a..f10acb78 100644 --- a/src/analyzers/string-array-storage-analyzer/StringArrayStorageAnalyzer.ts +++ b/src/analyzers/string-array-storage-analyzer/StringArrayStorageAnalyzer.ts @@ -138,6 +138,7 @@ export class StringArrayStorageAnalyzer implements IStringArrayStorageAnalyzer { } return literalNode.value.length >= StringArrayStorageAnalyzer.minimumLengthForStringArray + && !!this.options.stringArrayThreshold && this.randomGenerator.getMathRandom() <= this.options.stringArrayThreshold; } } diff --git a/test/unit-tests/analyzers/string-array-storage-analyzer/StringArrayStorageAnalyzer.spec.ts b/test/unit-tests/analyzers/string-array-storage-analyzer/StringArrayStorageAnalyzer.spec.ts index 9cf16efb..4196b4bb 100644 --- a/test/unit-tests/analyzers/string-array-storage-analyzer/StringArrayStorageAnalyzer.spec.ts +++ b/test/unit-tests/analyzers/string-array-storage-analyzer/StringArrayStorageAnalyzer.spec.ts @@ -388,38 +388,44 @@ describe('StringArrayStorageAnalyzer', () => { }); describe('Analyzes of the AST tree with string array threshold', () => { - describe('Threshold value: 0', () => { + describe('Threshold value: 0', function () { + this.timeout(30000); + const samplesCount: number = 10000; + const literalNode1: ESTree.Literal = NodeFactory.literalNode('foo'); const literalNode2: ESTree.Literal = NodeFactory.literalNode('bar'); - const expectedStringArrayStorageItemData1: undefined = undefined; - const expectedStringArrayStorageItemData2: undefined = undefined; - - let stringArrayStorageItemData1: IStringArrayStorageItemData | undefined; - let stringArrayStorageItemData2: IStringArrayStorageItemData | undefined; + let isStringArrayStorageItemDataEmpty: boolean = false; before(() => { - stringArrayStorageAnalyzer = getStringArrayStorageAnalyzer({ - stringArray: true, - stringArrayThreshold: 0 - }); + for (let i = 0; i < samplesCount; i++) { + stringArrayStorageAnalyzer = getStringArrayStorageAnalyzer({ + stringArray: true, + stringArrayThreshold: 0 + }); - const astTree: ESTree.Program = NodeFactory.programNode([ - NodeFactory.expressionStatementNode(literalNode1), - NodeFactory.expressionStatementNode(literalNode2) - ]); + const astTree: ESTree.Program = NodeFactory.programNode([ + NodeFactory.expressionStatementNode(literalNode1), + NodeFactory.expressionStatementNode(literalNode2) + ]); - stringArrayStorageAnalyzer.analyze(astTree); - stringArrayStorageItemData1 = stringArrayStorageAnalyzer.getItemDataForLiteralNode(literalNode1); - stringArrayStorageItemData2 = stringArrayStorageAnalyzer.getItemDataForLiteralNode(literalNode2); + stringArrayStorageAnalyzer.analyze(astTree); + + const stringArrayStorageItemData1: IStringArrayStorageItemData | undefined = + stringArrayStorageAnalyzer.getItemDataForLiteralNode(literalNode1); + const stringArrayStorageItemData2: IStringArrayStorageItemData | undefined = + stringArrayStorageAnalyzer.getItemDataForLiteralNode(literalNode2); + + isStringArrayStorageItemDataEmpty = !stringArrayStorageItemData1 && !stringArrayStorageItemData2; + + if (!isStringArrayStorageItemDataEmpty) { + break; + } + } }); - it('Variant #1: should return correct string array storage item data for literal node #1', () => { - assert.deepEqual(stringArrayStorageItemData1, expectedStringArrayStorageItemData1); - }); - - it('Variant #2: should return correct string array storage item data for literal node #2', () => { - assert.deepEqual(stringArrayStorageItemData2, expectedStringArrayStorageItemData2); + it('Variant #1: should return empty string array storage item data for literal nodes', () => { + assert.equal(isStringArrayStorageItemDataEmpty, true); }); });