Quellcode durchsuchen

refactor: try to use fast-check for some tests in CopyToClipboard

rugk vor 2 Monaten
Ursprung
Commit
2cc60fa42b
3 geänderte Dateien mit 89 neuen und 44 gelöschten Zeilen
  1. 58 2
      js/package-lock.json
  2. 1 0
      js/package.json
  3. 30 42
      js/test/CopyToClipboard.js

+ 58 - 2
js/package-lock.json

@@ -1,16 +1,17 @@
 {
   "name": "privatebin",
-  "version": "2.0.3",
+  "version": "2.0.4",
   "lockfileVersion": 2,
   "requires": true,
   "packages": {
     "": {
       "name": "privatebin",
-      "version": "2.0.3",
+      "version": "2.0.4",
       "license": "zlib-acknowledgement",
       "devDependencies": {
         "@peculiar/webcrypto": "^1.5.0",
         "eslint": "^9.37.0",
+        "fast-check": "^4.7.0",
         "jsdom": "^26.0.0",
         "jsdom-global": "^3.0.2",
         "jsverify": "^0.8.3",
@@ -1759,6 +1760,29 @@
         "node": ">=0.10.0"
       }
     },
+    "node_modules/fast-check": {
+      "version": "4.7.0",
+      "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-4.7.0.tgz",
+      "integrity": "sha512-NsZRtqvSSoCP0HbNjUD+r1JH8zqZalyp6gLY9e7OYs7NK9b6AHOs2baBFeBG7bVNsuoukh89x2Yg3rPsul8ziQ==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "individual",
+          "url": "https://github.com/sponsors/dubzzz"
+        },
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/fast-check"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "pure-rand": "^8.0.0"
+      },
+      "engines": {
+        "node": ">=12.17.0"
+      }
+    },
     "node_modules/fast-deep-equal": {
       "version": "3.1.3",
       "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@@ -3511,6 +3535,23 @@
         "node": ">=6"
       }
     },
+    "node_modules/pure-rand": {
+      "version": "8.4.0",
+      "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-8.4.0.tgz",
+      "integrity": "sha512-IoM8YF/jY0hiugFo/wOWqfmarlE6J0wc6fDK1PhftMk7MGhVZl88sZimmqBBFomLOCSmcCCpsfj7wXASCpvK9A==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "individual",
+          "url": "https://github.com/sponsors/dubzzz"
+        },
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/fast-check"
+        }
+      ],
+      "license": "MIT"
+    },
     "node_modules/pvtsutils": {
       "version": "1.3.6",
       "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.6.tgz",
@@ -5670,6 +5711,15 @@
       "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
       "dev": true
     },
+    "fast-check": {
+      "version": "4.7.0",
+      "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-4.7.0.tgz",
+      "integrity": "sha512-NsZRtqvSSoCP0HbNjUD+r1JH8zqZalyp6gLY9e7OYs7NK9b6AHOs2baBFeBG7bVNsuoukh89x2Yg3rPsul8ziQ==",
+      "dev": true,
+      "requires": {
+        "pure-rand": "^8.0.0"
+      }
+    },
     "fast-deep-equal": {
       "version": "3.1.3",
       "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@@ -6896,6 +6946,12 @@
       "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
       "dev": true
     },
+    "pure-rand": {
+      "version": "8.4.0",
+      "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-8.4.0.tgz",
+      "integrity": "sha512-IoM8YF/jY0hiugFo/wOWqfmarlE6J0wc6fDK1PhftMk7MGhVZl88sZimmqBBFomLOCSmcCCpsfj7wXASCpvK9A==",
+      "dev": true
+    },
     "pvtsutils": {
       "version": "1.3.6",
       "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.6.tgz",

+ 1 - 0
js/package.json

@@ -9,6 +9,7 @@
   "devDependencies": {
     "@peculiar/webcrypto": "^1.5.0",
     "eslint": "^9.37.0",
+    "fast-check": "^4.7.0",
     "jsdom": "^26.0.0",
     "jsdom-global": "^3.0.2",
     "jsverify": "^0.8.3",

+ 30 - 42
js/test/CopyToClipboard.js

@@ -1,15 +1,17 @@
 'use strict';
 const common = require('../common');
+const fc = require('fast-check');
 
 describe('CopyToClipboard', function () {
-    this.timeout(30000);
+    afterEach(() => {
+        globalThis.cleanup();
+    });
 
     describe('Copy document to clipboard', function () {
         jsc.property('Copy with button click',
             common.jscFormats(),
             'nestring',
             async function (format, text) {
-                var clean = globalThis.cleanup();
                 common.enableClipboard();
 
                 document.body.innerHTML = (
@@ -32,8 +34,6 @@ describe('CopyToClipboard', function () {
 
                 const savedToClipboardText = await navigator.clipboard.readText();
 
-                clean();
-
                 return text === savedToClipboardText;
             }
         );
@@ -46,7 +46,6 @@ describe('CopyToClipboard', function () {
             common.jscFormats(),
             'nestring',
             async function (format, text) {
-                var clean = globalThis.cleanup();
                 common.enableClipboard();
 
                 document.body.innerHTML = (
@@ -69,8 +68,6 @@ describe('CopyToClipboard', function () {
 
                 const copiedTextWithoutSelectedText = await navigator.clipboard.readText();
 
-                clean();
-
                 return copiedTextWithoutSelectedText === text;
             }
         );
@@ -99,52 +96,46 @@ describe('CopyToClipboard', function () {
     });
 
 
-    jsc.property('Copy link to clipboard',
-        'nestring',
-        async function (text) {
-            var clean = globalThis.cleanup();
-            common.enableClipboard();
-
-            document.body.innerHTML = '<button id="copyLink"></button>';
-
-            PrivateBin.CopyToClipboard.init();
-            PrivateBin.CopyToClipboard.setUrl(text);
+    it('Copy link to clipboard', async function () {
+        await fc.assert(fc.asyncProperty(fc.string(),
+            async function (text) {
+                common.enableClipboard();
 
-            document.getElementById('copyLink').click();
+                document.body.innerHTML = '<button id="copyLink"></button>';
 
-            const copiedText = await navigator.clipboard.readText();
+                PrivateBin.Alert.init();
+                PrivateBin.CopyToClipboard.init();
+                PrivateBin.CopyToClipboard.setUrl(text);
 
-            clean();
+                document.getElementById('copyLink').click();
 
-            return text === copiedText;
-        }
-    );
+                const copiedText = await navigator.clipboard.readText();
 
+                return text === copiedText;
+            })
+        );
+    });
 
     describe('Keyboard shortcut hint', function () {
-        jsc.property('Show hint',
-            'nestring',
-            function (text) {
-                var clean = globalThis.cleanup();
+        it('shows hint', () => {
+            fc.assert(fc.property(fc.string(),
+                function (text) {
+                    document.body.innerHTML = '<small id="copyShortcutHintText"></small>';
 
-                document.body.innerHTML = '<small id="copyShortcutHintText"></small>';
+                    PrivateBin.CopyToClipboard.init();
+                    PrivateBin.CopyToClipboard.showKeyboardShortcutHint();
 
-                PrivateBin.CopyToClipboard.init();
-                PrivateBin.CopyToClipboard.showKeyboardShortcutHint();
-
-                const keyboardShortcutHint = document.getElementById('copyShortcutHintText').textContent;
+                    const keyboardShortcutHint = document.getElementById('copyShortcutHintText').textContent;
 
-                clean();
-
-                return keyboardShortcutHint.length > 0;
-            }
-        );
+                    return keyboardShortcutHint.length > 0;
+                }
+            ));
+        });
+    });
 
         jsc.property('Hide hint',
             'nestring',
             function (text) {
-                var clean = globalThis.cleanup();
-
                 document.body.innerHTML = '<small id="copyShortcutHintText">' + text + '</small>';
 
                 PrivateBin.CopyToClipboard.init();
@@ -152,10 +143,7 @@ describe('CopyToClipboard', function () {
 
                 const keyboardShortcutHint = document.getElementById('copyShortcutHintText').textContent;
 
-                clean();
-
                 return keyboardShortcutHint.length === 0;
             }
         );
-    });
 });