Spec cleanup (#20)

* Let Jasmine handle promises

* Wrap regItemPattern tests in common describe block

* DRY regItemPattern tests

* Don't use done for sync tests

* Get fresh test subject beforeEach test
diff --git a/spec/browser.spec.js b/spec/browser.spec.js
index 79f68ea..44d91f8 100644
--- a/spec/browser.spec.js
+++ b/spec/browser.spec.js
@@ -17,9 +17,6 @@
 
 var rewire = require('rewire');
 
-var browser = rewire('../src/browser');
-var regItemPattern = browser.__get__('regItemPattern');
-
 function expectPromise (obj) {
     // 3 slightly different ways of verifying a promise
     expect(typeof obj.then).toBe('function');
@@ -28,70 +25,59 @@
 }
 
 describe('browser', function () {
+    let browser;
+    beforeEach(() => {
+        browser = rewire('../src/browser');
+        browser.__set__('open', jasmine.createSpy('mockOpen'));
+    });
 
     it('exists and has expected properties', function () {
         expect(browser).toBeDefined();
         expect(typeof browser).toBe('function');
     });
 
-    it('should return a promise', function (done) {
-        var mockOpen = jasmine.createSpy('mockOpen');
-        var origOpen = browser.__get__('open'); // so we can be nice and restore it later
-
-        browser.__set__('open', mockOpen);
-
+    it('should return a promise', function () {
         var result = browser();
         expect(result).toBeDefined();
         expectPromise(result);
 
-        result.then(function (res) {
-            browser.__set__('open', origOpen);
-            done();
-        })
-            .catch(function (err) {
-                browser.__set__('open', origOpen);
-                done(err);
-            });
+        return result;
     });
 
-    it('should call open() when target is `default`', function (done) {
-        var mockOpen = jasmine.createSpy('mockOpen');
-        var origOpen = browser.__get__('open'); // so we can be nice and restore it later
-
-        browser.__set__('open', mockOpen);
-
+    it('should call open() when target is `default`', function () {
         var mockUrl = 'this is the freakin url';
 
         var result = browser({ target: 'default', url: mockUrl });
         expect(result).toBeDefined();
         expectPromise(result);
 
-        result.then(function (res) {
-            expect(mockOpen).toHaveBeenCalledWith(mockUrl);
-            browser.__set__('open', origOpen);
-            done();
-        })
-            .catch(function (err) {
-                browser.__set__('open', origOpen);
-                done(err);
-            });
+        return result.then(() => {
+            expect(browser.__get__('open')).toHaveBeenCalledWith(mockUrl);
+        });
     });
 
-    it('should recognize browser from registry with key "Default" on English Windows 10', function (done) {
-        var result = regItemPattern.exec('HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\chrome.EXE (Default)    REG_SZ    C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe');
-        expect(result[2]).toBe('C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe');
-        done();
-    });
+    describe('regItemPattern', () => {
+        let regItemPattern;
+        beforeEach(() => {
+            regItemPattern = browser.__get__('regItemPattern');
+        });
 
-    it('should recognize browser from registry with key "Standard" on non-English Windows 10', function (done) {
-        var result = regItemPattern.exec('HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\chrome.EXE (Standard)    REG_SZ    C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe');
-        expect(result[2]).toBe('C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe');
-        done();
-    });
+        const regPath = 'HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\chrome.EXE';
+        const appPath = 'C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe';
+        function expectPatternToExtractPathFrom (input) {
+            expect(regItemPattern.exec(input)[2]).toBe(appPath);
+        }
 
-    it('should recognize browser with non-Latin registry key on Russian Windows 10', function (done) {
-        var result = regItemPattern.exec('HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\chrome.EXE (�� 㬮�砭��)    REG_SZ    C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe');
-        expect(result[2]).toBe('C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe');
-        done();
+        it('should recognize browser from registry with key "Default" on English Windows 10', function () {
+            expectPatternToExtractPathFrom(`${regPath} (Default)    REG_SZ    ${appPath}`);
+        });
+
+        it('should recognize browser from registry with key "Standard" on non-English Windows 10', function () {
+            expectPatternToExtractPathFrom(`${regPath} (Standard)    REG_SZ    ${appPath}`);
+        });
+
+        it('should recognize browser with non-Latin registry key on Russian Windows 10', function () {
+            expectPatternToExtractPathFrom(`${regPath} (�� 㬮�砭��)    REG_SZ    ${appPath}`);
+        });
     });
 });
diff --git a/spec/server.spec.js b/spec/server.spec.js
index d36d512..3010c2a 100644
--- a/spec/server.spec.js
+++ b/spec/server.spec.js
@@ -31,10 +31,10 @@
         expect(typeof server).toBe('function');
     });
 
-    it('should return a promise', function (done) {
+    it('should return a promise', function () {
         var result = server({ port: 8008, noServerInfo: 1 });
         expect(result).toBeDefined();
         expectPromise(result);
-        result.then(done, done);
+        return result;
     });
 });