Browse Source

Fixed zero threshold case for string array storage analyze

sanex 3 years ago
parent
commit
cd4bf15cc8

+ 1 - 0
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;
     }
 }

+ 31 - 25
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
-                    });
-
-                    const astTree: ESTree.Program = NodeFactory.programNode([
-                        NodeFactory.expressionStatementNode(literalNode1),
-                        NodeFactory.expressionStatementNode(literalNode2)
-                    ]);
-
-                    stringArrayStorageAnalyzer.analyze(astTree);
-                    stringArrayStorageItemData1 = stringArrayStorageAnalyzer.getItemDataForLiteralNode(literalNode1);
-                    stringArrayStorageItemData2 = stringArrayStorageAnalyzer.getItemDataForLiteralNode(literalNode2);
+                    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)
+                        ]);
+
+                        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);
                 });
             });