[git] GPGME - branch, javascript-binding, updated. gpgme-1.11.1-30-gc92326c

by Maximilian Krambach cvs at cvs.gnupg.org
Wed May 9 19:44:18 CEST 2018


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GnuPG Made Easy".

The branch, javascript-binding has been updated
       via  c92326cc257cf7c8b6c0ddc43ec81573c409bc64 (commit)
       via  5f5bf024a83625b8f8bac4779b1c2236637c23e0 (commit)
       via  e54b110aec3165a32ff9551d0c5227b88aa3dd4f (commit)
       via  e2a8a87bf9cfae5d4e8a5953c2a5303b44feb398 (commit)
       via  46da79e3de99a7b65748994921d6aab73b9974e7 (commit)
       via  26820ba62920acfe2775bce8fc2bc8b3f17b1c10 (commit)
       via  6b267c56fd6e54fb1c254455c04495534260b547 (commit)
      from  cca40627b0afa2efc85ef7f5f1a1060a221ff2a2 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit c92326cc257cf7c8b6c0ddc43ec81573c409bc64
Author: Maximilian Krambach <maximilian.krambach at intevation.de>
Date:   Wed May 9 19:40:57 2018 +0200

    js: more testing of nativeMessaging connection
    
    --
    
    * There were some inconsistencies between utf-8, transfer and browsers'
      utf16, which broke characters that were split between individual
      messages. src/Connection now contains a workaround that reassembles
      javascripts' format from passed base64 strings. This needs someone
      more experienced looking.
    * Added several new tests which were failing during initial debugging
      of this issue
    * reorganized BrowsertestExtension to avoid cluttering.

diff --git a/lang/js/BrowserTestExtension/browsertest.html b/lang/js/BrowserTestExtension/browsertest.html
index d12e03c..c379ef5 100644
--- a/lang/js/BrowserTestExtension/browsertest.html
+++ b/lang/js/BrowserTestExtension/browsertest.html
@@ -12,14 +12,11 @@
     <script src="libs/chai.js"></script>
     <script src="setup_testing.js"></script>
     <script src="libs/gpgmejs.bundle.js"></script>
-
     <script src="tests/inputvalues.js"></script>
-    <script src="libs/gpgmejs_unittests.bundle.js"></script>
 <!-- insert tests here-->
     <script src="tests/startup.js"></script>
     <script src="tests/encryptTest.js"></script>
     <script src="tests/encryptDecryptTest.js"></script>
-
 <!-- run tests -->
     <script src="runbrowsertest.js"></script>
     </body>
diff --git a/lang/js/BrowserTestExtension/index.html b/lang/js/BrowserTestExtension/index.html
new file mode 100644
index 0000000..05d413b
--- /dev/null
+++ b/lang/js/BrowserTestExtension/index.html
@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <meta charset="utf-8">
+        <link href="libs/mocha.css" rel="stylesheet" />
+    </head>
+<body>
+    <h3>gpgmejs - Tests</h3>
+    <p>
+        The unittests rely on a separately packaged version of gpgmejs,
+        with the different classes and functions exposed. These tests and their
+        input values can be found in gpgme/lang/js/test. They do not test the
+        overall functionality, but the individual behaviour of the components.
+        <ul>
+            <li>
+                <a href="unittests.html">
+                    Unittests of the individual functions and classes.
+                </a>
+            </li>
+        </ul>
+    </p>
+    <p>
+        The functionality tests, to be found in
+        gpgme/lang/js/BrowserTestExtension, check the overall functionality of
+        the standard  packaged version of gpgmejs.
+        <ul>
+            <li>
+                <a href="browsertest.html">
+                    Functionality tests using the bundled library.
+                </a>
+            </li>
+            <li>
+                <a href="longTests.html">
+                    Functionality tests with larger/longer running data sets.
+                </a>
+            </li>
+        </ul>
+        </p>
+    </body>
+</html>
diff --git a/lang/js/BrowserTestExtension/browsertest.html b/lang/js/BrowserTestExtension/longTests.html
similarity index 78%
copy from lang/js/BrowserTestExtension/browsertest.html
copy to lang/js/BrowserTestExtension/longTests.html
index d12e03c..8ff969b 100644
--- a/lang/js/BrowserTestExtension/browsertest.html
+++ b/lang/js/BrowserTestExtension/longTests.html
@@ -12,14 +12,10 @@
     <script src="libs/chai.js"></script>
     <script src="setup_testing.js"></script>
     <script src="libs/gpgmejs.bundle.js"></script>
-
     <script src="tests/inputvalues.js"></script>
-    <script src="libs/gpgmejs_unittests.bundle.js"></script>
 <!-- insert tests here-->
     <script src="tests/startup.js"></script>
-    <script src="tests/encryptTest.js"></script>
-    <script src="tests/encryptDecryptTest.js"></script>
-
+    <script src="tests/longRunningTests.js"></script>
 <!-- run tests -->
     <script src="runbrowsertest.js"></script>
     </body>
diff --git a/lang/js/BrowserTestExtension/popup.js b/lang/js/BrowserTestExtension/popup.js
index 4764df5..12beb1e 100644
--- a/lang/js/BrowserTestExtension/popup.js
+++ b/lang/js/BrowserTestExtension/popup.js
@@ -39,6 +39,6 @@
 
 document.addEventListener('DOMContentLoaded', function() {
     chrome.tabs.create({
-        url: './browsertest.html'
+        url: './index.html'
     });
 });
diff --git a/lang/js/BrowserTestExtension/runbrowsertest.js b/lang/js/BrowserTestExtension/runbrowsertest.js
index 308c716..39bc3fb 100644
--- a/lang/js/BrowserTestExtension/runbrowsertest.js
+++ b/lang/js/BrowserTestExtension/runbrowsertest.js
@@ -19,4 +19,3 @@
  */
 
 mocha.run();
-Gpgmejs_test.unittests();
diff --git a/lang/js/BrowserTestExtension/runbrowsertest.js b/lang/js/BrowserTestExtension/rununittests.js
similarity index 99%
copy from lang/js/BrowserTestExtension/runbrowsertest.js
copy to lang/js/BrowserTestExtension/rununittests.js
index 308c716..f85ed8b 100644
--- a/lang/js/BrowserTestExtension/runbrowsertest.js
+++ b/lang/js/BrowserTestExtension/rununittests.js
@@ -17,6 +17,5 @@
  * License along with this program; if not, see <http://www.gnu.org/licenses/>.
  * SPDX-License-Identifier: LGPL-2.1+
  */
-
-mocha.run();
 Gpgmejs_test.unittests();
+mocha.run();
diff --git a/lang/js/BrowserTestExtension/tests/encryptDecryptTest.js b/lang/js/BrowserTestExtension/tests/encryptDecryptTest.js
index e28dd66..a66e153 100644
--- a/lang/js/BrowserTestExtension/tests/encryptDecryptTest.js
+++ b/lang/js/BrowserTestExtension/tests/encryptDecryptTest.js
@@ -19,7 +19,7 @@
  */
 
 describe('Encryption and Decryption', function () {
-    it('Successful encrypt and decrypt', function (done) {
+    it('Successful encrypt and decrypt simple string', function (done) {
         let prm = Gpgmejs.init();
         prm.then(function (context) {
             context.encrypt(
@@ -39,54 +39,6 @@ describe('Encryption and Decryption', function () {
                 });
         });
     });
-
-    /**
-     * Fails with random data! Some bytes (up to 100) of the original are missing in
-     * the result
-*/
-/**
-    for (let j = 0; j < 10; j++){
-    it('Successful encrypt and decrypt specific sets: ',
-            function (done) {
-                let prm = Gpgmejs.init();
-                let data = bigBoringString(5); //see ./inputvalues.js
-                expect(Object.prototype.toString.call(data)).to.equal("[object String]");
-                prm.then(function (context) {
-                    context.encrypt(data,
-                        inputvalues.encrypt.good.fingerprint).then(
-                        function (answer) {
-                            expect(answer).to.not.be.empty;
-                            expect(answer.data).to.be.a("string");
-                            expect(answer.data).to.include(
-                                'BEGIN PGP MESSAGE');
-                            expect(answer.data).to.include(
-                                'END PGP MESSAGE');
-                            context.decrypt(answer.data).then(
-                                function (result) {
-                                    if (data.length !== result.data.length) {
-
-                                        for (let k = 0; k < data.length; k++) {
-                                            if (data[k] !== result.data[k]) {
-                                                console.log(k);
-                                                console.log(data[k - 2] + data[k - 1] + data[k] + data[k + 1]);
-                                                console.log(result.data[k - 2] + result.data[k - 1] + result.data[k] + result.data[k + 1]);
-                                                break;
-                                            }
-                                        }
-                                    }
-                                    expect(result).to.not.be.empty;
-                                    expect(result.data).to.be.a('string');
-                                    expect(result.data).to.equal(data);
-                                    context.connection.disconnect();
-                                    done();
-
-                                });
-                        });
-                });
-            }).timeout(5000);
-        }
-
-
     it('Roundtrip does not destroy trailing whitespace',
         function (done) {
             let prm = Gpgmejs.init();
@@ -112,88 +64,22 @@ describe('Encryption and Decryption', function () {
                             });
                     });
             });
-        }).timeout(3000);
-
-    it('Test with simple non-ascii input',
-        function (done) {
-            let prm = Gpgmejs.init();
-            prm.then(function (context) {
-                let data = '';
-                for (let i=0; i < 1024 * 1024 * 0.1; i++){
-                    data += inputvalues.encrypt.good.data_nonascii;
-                }
-                context.encrypt(data,
-                    inputvalues.encrypt.good.fingerprint).then(
-                    function (answer) {
-                        expect(answer).to.not.be.empty;
-                        expect(answer.data).to.be.a("string");
-                        expect(answer.data).to.include(
-                            'BEGIN PGP MESSAGE');
-                        expect(answer.data).to.include(
-                            'END PGP MESSAGE');
-                        console.log(answer);
-                        context.decrypt(answer.data).then(
-                            function (result) {
-                                expect(result).to.not.be.empty;
-                                expect(result.data).to.be.a('string');
-                                if (data.length !== result.data.length) {
-
-                                    for (let k = 0; k < data.length; k++) {
-                                        if (data[k] !== result.data[k]) {
-                                            console.log(k);
-                                            console.log(data[k - 2] + data[k - 1] + data[k] + data[k + 1]);
-                                            console.log(result.data[k - 2] + result.data[k - 1] + result.data[k] + result.data[k + 1]);
-                                            break;
-                                        }
-                                    }
-                                }
-                                console.log(data.length - result.data.length);
-                                expect(result.data).to.equal(data);
-                                context.connection.disconnect();
-                                done();
+        }).timeout(5000);
 
-                            });
-                    });
-            });
-        }).timeout(3000);
-*/
-/**
-    for (let i=0; i< 100; i++) {
-        it('Successful encrypt random data '+ (i+1) + '/100', function (done) {
-            let prm = Gpgmejs.init();
-            let data = bigString(0.2); // << set source data here
+    for (let j = 0; j < inputvalues.encrypt.good.data_nonascii_32.length; j++){
+        it('Roundtrip with >1MB non-ascii input meeting default chunksize (' + (j + 1) + '/' + inputvalues.encrypt.good.data_nonascii_32.length + ')',
+            function (done) {
+                let input = inputvalues.encrypt.good.data_nonascii_32[j];
+                expect(input).to.have.length(32);
+                let prm = Gpgmejs.init();
                 prm.then(function (context) {
+                    let data = '';
+                    for (let i=0; i < 34 * 1024; i++){
+                        data += input;
+                    }
                     context.encrypt(data,
                         inputvalues.encrypt.good.fingerprint).then(
-                            function (answer){
-                                expect(answer).to.not.be.empty;
-                                expect(answer.data).to.be.a("string");
-                                expect(answer.data).to.include(
-                                    'BEGIN PGP MESSAGE');
-                                expect(answer.data).to.include(
-                                    'END PGP MESSAGE');
-                                context.decrypt(answer.data).then(
-                                    function(result){
-                                        expect(result).to.not.be.empty;
-                                        expect(result.data).to.be.a('string');
-                                        expect(result.data).to.equal(data);
-                                        context.connection.disconnect();
-                                        done();
-                                });
-                        });
-                });
-        }).timeout(5000);
-    };
-*/
-
-/** still fails
-    it('Successful encrypt 0.8 MB Uint8Array', function (done) {
-        let prm = Gpgmejs.init();
-        let data = bigUint8(0.8);
-        prm.then(function (context) {
-                context.encrypt(data,
-                    inputvalues.encrypt.good.fingerprint).then(
-                        function (answer){
+                        function (answer) {
                             expect(answer).to.not.be.empty;
                             expect(answer.data).to.be.a("string");
                             expect(answer.data).to.include(
@@ -201,38 +87,39 @@ describe('Encryption and Decryption', function () {
                             expect(answer.data).to.include(
                                 'END PGP MESSAGE');
                             context.decrypt(answer.data).then(
-                                function(result){
+                                function (result) {
                                     expect(result).to.not.be.empty;
                                     expect(result.data).to.be.a('string');
                                     expect(result.data).to.equal(data);
-                                    done();
-                            });
-                    });
-            });
-    }).timeout(5000);
-*/
-
-    it('Decrypt simple non-ascii',
-        function (done) {
-            let prm = Gpgmejs.init();
-            prm.then(function (context) {
-                data = encryptedData;
-                context.decrypt(data).then(
-                    function (result) {
-                        expect(result).to.not.be.empty;
-                        expect(result.data).to.be.a('string');
-                        expect(result.data).to.equal(inputvalues.encrypt.good.data_nonascii);
-                        context.encrypt(inputvalues.encrypt.good.data_nonascii, inputvalues.encrypt.good.fingerprint).then(
-                            function(result){
-                                context.decrypt(result.data).then(function(answer){
-                                    expect(answer.data).to.equal(inputvalues.encrypt.good.data_nonascii);
                                     context.connection.disconnect();
                                     done();
                                 });
+                        });
+                });
+        }).timeout(5000);
+    };
+
+    it('Encrypt-decrypt simple non-ascii', function (done) {
+        //FAILS TODO: Check newline at the end
+        let prm = Gpgmejs.init();
+        prm.then(function (context) {
+            data = encryptedData;
+            context.decrypt(data).then(
+                function (result) {
+                    expect(result).to.not.be.empty;
+                    expect(result.data).to.be.a('string');
+                    expect(result.data).to.equal(inputvalues.encrypt.good.data_nonascii);
+                    context.encrypt(inputvalues.encrypt.good.data_nonascii, inputvalues.encrypt.good.fingerprint).then(
+                        function(result){
+                            context.decrypt(result.data).then(function(answer){
+                                expect(answer.data).to.equal('¡Äußerste µ€ før ñoquis at hóme! Добрый день');
+                                context.connection.disconnect();
+                                done();
                             });
                         });
+                    });
 
-            });
-    }).timeout(8000);
+        });
+    }).timeout(6000);
 
-});
\ No newline at end of file
+});
diff --git a/lang/js/BrowserTestExtension/tests/encryptTest.js b/lang/js/BrowserTestExtension/tests/encryptTest.js
index 2e95151..5ef68a3 100644
--- a/lang/js/BrowserTestExtension/tests/encryptTest.js
+++ b/lang/js/BrowserTestExtension/tests/encryptTest.js
@@ -49,7 +49,7 @@ describe('Encryption', function () {
                     done();
                 });
         });
-    }).timeout(5000);
+    }).timeout(10000);
 
 /**
     it('Successful encrypt 20 MB', function (done) {
diff --git a/lang/js/BrowserTestExtension/tests/inputvalues.js b/lang/js/BrowserTestExtension/tests/inputvalues.js
index bc8c97b..e23b778 100644
--- a/lang/js/BrowserTestExtension/tests/inputvalues.js
+++ b/lang/js/BrowserTestExtension/tests/inputvalues.js
@@ -23,7 +23,23 @@ var inputvalues = {
         good:{
             data : 'Hello World.',
             fingerprint : 'D41735B91236FDB882048C5A2301635EEFF0CB05',
-            data_nonascii: '¡Äußerste µ€ før ñoquis at hóme! Добрый день\n'
+            data_nonascii: '¡Äußerste µ€ før ñoquis at hóme! Добрый день',
+            data_nonascii_32: [
+                'K€K€K€K€K€K€K€K€K€K€K€K€K€K€K€K€',
+                'µ€µ€µ€µ€µ€µ€µ€µ€µ€µ€µ€µ€µ€µ€µ€µ€', //fails result has 3 chars more
+                '€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€', //fails 3 chars
+                '²³²³²³²³²³²³²³²³²³²³²³²³²³²³²³²³',
+                'µ€µ€µ€µ€µ€µ€µ€µ€µ€µ€µ€A€µ€µ€µ€µ€', //fails 2 chars
+                'µ€µ€µ€µ€µ€µ€µ€µ€µ€µ€µ€µAµ€µ€µ€µ€', //is okay if 2 chunksizes.
+                'üüüüüüüüüüüüüüüüüüüüüüüüüüüüüüüü',
+                'µAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA€',
+                'µAAAAµAAAAAAAAAAAAAAAAAAAAAAAAA€',
+                'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAµ€',
+                'µAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA°',
+                '€AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA€',
+                'µ||||||||||||||||||||||||||||||€',
+                'æſæſ³¼„¬“³³¬“¬½”æſæſ³¼„¬“³³¬“¬½”'
+            ]
         },
         bad: {
             fingerprint: 'CDC3A2B2860625CCBFC5AAAAAC6D1B604967FC4A'
@@ -56,7 +72,7 @@ function bigUint8(megabytes){
 function bigBoringString(megabytes){
     let maxlength = 1024 * 1024 * megabytes;
     let string = '';
-    let chars = ' ä0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
+    let chars = ' 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
     for (let i= 0; i < maxlength; i++){
         string = string + chars[Math.floor(Math.random() * chars.length)];
     }
@@ -101,4 +117,101 @@ var encryptedData =
     'isGL7jOlDCBKwep67ted0cTRPLWkk3NSuLIlvD5xs6L4z3rPu92gXYgbZoMMdP0N\n' +
     'kSAQYOHplfA7YJWkrlRm\n' +
     '=zap6\n' +
-    '-----END PGP MESSAGE-----\n';
\ No newline at end of file
+    '-----END PGP MESSAGE-----\n';
+var encryptedBroken = '-----BEGIN PGP MESSAGE-----\n' +
+'\n' +
+'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\n' +
+'E14StpggdK8=\n' +
+'=enm3\n' +
+'-----END PGP MESSAGE-----\n';
\ No newline at end of file
diff --git a/lang/js/BrowserTestExtension/tests/longRunningTests.js b/lang/js/BrowserTestExtension/tests/longRunningTests.js
new file mode 100644
index 0000000..0f32ca9
--- /dev/null
+++ b/lang/js/BrowserTestExtension/tests/longRunningTests.js
@@ -0,0 +1,53 @@
+describe('Long running Encryption/Decryption', function () {
+    for (let i=0; i< 100; i++) {
+        it('Successful encrypt/decrypt completely random data ' + (i+1) + '/100', function (done) {
+            let prm = Gpgmejs.init();
+            let data = bigString(2);
+                prm.then(function (context) {
+                    context.encrypt(data,
+                        inputvalues.encrypt.good.fingerprint).then(
+                            function (answer){
+                                expect(answer).to.not.be.empty;
+                                expect(answer.data).to.be.a("string");
+                                expect(answer.data).to.include(
+                                    'BEGIN PGP MESSAGE');
+                                expect(answer.data).to.include(
+                                    'END PGP MESSAGE');
+                                context.decrypt(answer.data).then(
+                                    function(result){
+                                        expect(result).to.not.be.empty;
+                                        expect(result.data).to.be.a('string');
+                                        expect(result.data).to.equal(data);
+                                        context.connection.disconnect();
+                                        done();
+                                });
+                        });
+                });
+        }).timeout(5000);
+    };
+
+    it('Successful encrypt 1 MB Uint8Array', function (done) {
+        let prm = Gpgmejs.init();
+        let data = bigUint8(1);
+        prm.then(function (context) {
+                context.encrypt(data,
+                    inputvalues.encrypt.good.fingerprint).then(
+                        function (answer){
+                            expect(answer).to.not.be.empty;
+                            expect(answer.data).to.be.a("string");
+                            expect(answer.data).to.include(
+                                'BEGIN PGP MESSAGE');
+                            expect(answer.data).to.include(
+                                'END PGP MESSAGE');
+                            context.decrypt(answer.data).then(
+                                function(result){
+                                    expect(result).to.not.be.empty;
+                                    expect(result.data).to.be.a('string');
+                                    expect(result.data).to.equal(data);
+                                    done();
+                            });
+                    });
+            });
+    }).timeout(5000);
+
+});
diff --git a/lang/js/BrowserTestExtension/unittests.html b/lang/js/BrowserTestExtension/unittests.html
new file mode 100644
index 0000000..6f7da3f
--- /dev/null
+++ b/lang/js/BrowserTestExtension/unittests.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <meta charset="utf-8">
+        <link href="libs/mocha.css" rel="stylesheet" />
+
+    </head>
+<body>
+    <h3>Unit tests</h3>
+    <div id="mocha"></div>
+    <script src="libs/mocha.js"></script>
+    <script src="libs/chai.js"></script>
+    <script src="setup_testing.js"></script>
+    <script src="libs/gpgmejs_unittests.bundle.js"></script>
+    <script src="rununittests.js"></script>
+    </body>
+</html>
diff --git a/lang/js/src/Connection.js b/lang/js/src/Connection.js
index 2c8792d..64621f6 100644
--- a/lang/js/src/Connection.js
+++ b/lang/js/src/Connection.js
@@ -181,7 +181,8 @@ class Answer{
                         if (!this._response.hasOwnProperty(key)){
                             this._response[key] = '';
                         }
-                        this._response[key] = this._response[key].concat(msg[key]);
+                        // console.log(msg[key]);
+                        this._response[key] += msg[key];
                     }
                     //params should not change through the message
                     else if (poa.params.indexOf(key) >= 0){
@@ -214,6 +215,22 @@ class Answer{
      * TODO: does not care yet if completed.
      */
     get message(){
+        let keys = Object.keys(this._response);
+        let poa = permittedOperations[this.operation].answer;
+        for (let i=0; i < keys.length; i++) {
+            if (poa.data.indexOf(keys[i]) >= 0){
+                if (this._response.base64 == true){
+                    let respatob =  atob(this._response[keys[i]]);
+
+                    let result = decodeURIComponent(
+                        respatob.split('').map(function(c) {
+                            return '%' +
+                            ('00' + c.charCodeAt(0).toString(16)).slice(-2);
+                        }).join(''));
+                    this._response[keys[i]] = result;
+                }
+            }
+        }
         return this._response;
     }
 }

commit 5f5bf024a83625b8f8bac4779b1c2236637c23e0
Merge: cca4062 e54b110
Author: Maximilian Krambach <maximilian.krambach at intevation.de>
Date:   Wed May 9 16:55:50 2018 +0200

    Merge branch 'master' into javascript-binding


-----------------------------------------------------------------------

Summary of changes:
 lang/js/BrowserTestExtension/browsertest.html      |   3 -
 lang/js/BrowserTestExtension/index.html            |  40 +++++
 .../{browsertest.html => longTests.html}           |   6 +-
 lang/js/BrowserTestExtension/popup.js              |   2 +-
 lang/js/BrowserTestExtension/runbrowsertest.js     |   1 -
 .../{runbrowsertest.js => rununittests.js}         |   3 +-
 .../tests/encryptDecryptTest.js                    | 191 +++++----------------
 lang/js/BrowserTestExtension/tests/encryptTest.js  |   2 +-
 lang/js/BrowserTestExtension/tests/inputvalues.js  | 119 ++++++++++++-
 .../BrowserTestExtension/tests/longRunningTests.js |  53 ++++++
 lang/js/BrowserTestExtension/unittests.html        |  17 ++
 lang/js/src/Connection.js                          |  19 +-
 lang/python/tests/t-callbacks.py                   |   2 +-
 lang/qt/Makefile.am                                |   8 +-
 lang/qt/src/qgpgmenewcryptoconfig.cpp              |   6 +-
 src/engine-gpgsm.c                                 |  11 +-
 src/gpgme-json.c                                   |  22 ++-
 17 files changed, 322 insertions(+), 183 deletions(-)
 create mode 100644 lang/js/BrowserTestExtension/index.html
 copy lang/js/BrowserTestExtension/{browsertest.html => longTests.html} (78%)
 copy lang/js/BrowserTestExtension/{runbrowsertest.js => rununittests.js} (99%)
 create mode 100644 lang/js/BrowserTestExtension/tests/longRunningTests.js
 create mode 100644 lang/js/BrowserTestExtension/unittests.html


hooks/post-receive
-- 
GnuPG Made Easy
http://git.gnupg.org




More information about the Gnupg-commits mailing list