ソースを参照

basic test and build

Jairo 6 年 前
コミット
09ef66a31e
13 ファイル変更432 行追加213 行削除
  1. 2 0
      .gitignore
  2. 14 10
      Gruntfile.js
  3. 32 44
      dist/peer.js
  4. 0 0
      dist/peer.min.js
  5. 8 3
      package.json
  6. 0 12
      test/adapter.js
  7. 28 0
      test/basic_test.js
  8. 15 0
      test/codecept.json
  9. 51 0
      test/public/index.html
  10. 0 0
      test/public/peer.min.js
  11. 282 0
      test/steps.d.ts
  12. 0 22
      test/test.html
  13. 0 122
      test/util.js

+ 2 - 0
.gitignore

@@ -14,3 +14,5 @@ demo
 bower.json
 node_modules
 npm-debug.log
+
+test/output

+ 14 - 10
Gruntfile.js

@@ -1,4 +1,4 @@
-module.exports = function(grunt) {
+module.exports = function (grunt) {
   grunt.initConfig({
     pkg: grunt.file.readJSON('package.json'),
 
@@ -17,20 +17,23 @@ module.exports = function(grunt) {
       }
     },
 
+    copy: {
+      dev: {
+        files: [
+          {
+            src: 'dist/peer.min.js',
+            dest: 'test/public/peer.min.js'
+          }
+        ]
+      }
+    },
+
     concat: {
       dev: {
-        options: {
-          banner: '/*! <%= pkg.name %> build:<%= pkg.version %>, development. '+
-            'Copyright(c) 2013 Michelle Bu <michelle@michellebu.com> */'
-        },
         src: 'dist/peer.js',
         dest: 'dist/peer.js',
       },
       prod: {
-        options: {
-          banner: '/*! <%= pkg.name %> build:<%= pkg.version %>, production. '+
-            'Copyright(c) 2013 Michelle Bu <michelle@michellebu.com> */'
-        },
         src: 'dist/peer.min.js',
         dest: 'dist/peer.min.js',
       }
@@ -40,6 +43,7 @@ module.exports = function(grunt) {
   grunt.loadNpmTasks('grunt-browserify');
   grunt.loadNpmTasks('grunt-contrib-uglify');
   grunt.loadNpmTasks('grunt-contrib-concat');
+  grunt.loadNpmTasks('grunt-contrib-copy');
 
-  grunt.registerTask('default', ['browserify', 'uglify', 'concat']);
+  grunt.registerTask('default', ['browserify', 'uglify', 'concat', 'copy']);
 }

+ 32 - 44
dist/peer.js

@@ -1,4 +1,4 @@
-/*! peerjs build:0.3.16, development. Copyright(c) 2013 Michelle Bu <michelle@michellebu.com> */(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
+(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
 require('webrtc-adapter');
 
 module.exports.RTCSessionDescription = window.RTCSessionDescription ||
@@ -575,15 +575,10 @@ Negotiator._setupListeners = function(connection, pc, pc_id) {
 
   // MEDIACONNECTION.
   util.log("Listening for remote stream");
-  pc.onaddstream = function(evt) {
+  pc.ontrack = function(evt) {
     util.log("Received remote stream");
-    var stream = evt.stream;
+    var stream = evt.streams[0];
     var connection = provider.getConnection(peerId, connectionId);
-    // 10/10/2014: looks like in Chrome 38, onaddstream is triggered after
-    // setting the remote description. Our connection object in these cases
-    // is actually a DATA connection, so addStream fails.
-    // TODO: This is hopefully just a temporary fix. We should try to
-    // understand why this is happening.
     if (connection.type === "media") {
       connection.addStream(stream);
     }
@@ -1520,7 +1515,7 @@ Socket.prototype.close = function() {
 module.exports = Socket;
 
 },{"./util":8,"eventemitter3":9}],8:[function(require,module,exports){
-var defaultConfig = { iceServers: [{ url: "stun:stun.l.google.com:19302" }] };
+var defaultConfig = {'iceServers': [{ 'urls': 'stun:stun.l.google.com:19302' }]};
 var dataCount = 1;
 
 var BinaryPack = require("js-binarypack");
@@ -4222,6 +4217,19 @@ module.exports = function(window, edgeVersion) {
           }
         }
 
+        // If the offer contained RTX but the answer did not,
+        // remove RTX from sendEncodingParameters.
+        var commonCapabilities = getCommonCapabilities(
+          transceiver.localCapabilities,
+          transceiver.remoteCapabilities);
+
+        var hasRtx = commonCapabilities.codecs.filter(function(c) {
+          return c.name.toLowerCase() === 'rtx';
+        }).length;
+        if (!hasRtx && transceiver.sendEncodingParameters[0].rtx) {
+          delete transceiver.sendEncodingParameters[0].rtx;
+        }
+
         pc._transceive(transceiver,
             direction === 'sendrecv' || direction === 'recvonly',
             direction === 'sendrecv' || direction === 'sendonly');
@@ -4637,6 +4645,8 @@ module.exports = function(window, edgeVersion) {
         return t.mid;
       }).join(' ') + '\r\n';
     }
+    sdp += 'a=ice-options:trickle\r\n';
+
     var mediaSectionsInOffer = SDPUtils.getMediaSections(
         pc._remoteDescription.sdp).length;
     pc.transceivers.forEach(function(transceiver, sdpMLineIndex) {
@@ -4987,6 +4997,7 @@ SDPUtils.parseCandidate = function(line) {
     protocol: parts[2].toLowerCase(),
     priority: parseInt(parts[3], 10),
     ip: parts[4],
+    address: parts[4], // address is an alias for ip.
     port: parseInt(parts[5], 10),
     // skip parts[6] == 'typ'
     type: parts[7]
@@ -5022,7 +5033,7 @@ SDPUtils.writeCandidate = function(candidate) {
   sdp.push(candidate.component);
   sdp.push(candidate.protocol.toUpperCase());
   sdp.push(candidate.priority);
-  sdp.push(candidate.ip);
+  sdp.push(candidate.address || candidate.ip);
   sdp.push(candidate.port);
 
   var type = candidate.type;
@@ -5386,7 +5397,7 @@ SDPUtils.parseRtpEncodingParameters = function(mediaSection) {
       if (hasRed) {
         encParam = JSON.parse(JSON.stringify(encParam));
         encParam.fec = {
-          ssrc: secondarySsrc,
+          ssrc: primarySsrc,
           mechanism: hasUlpfec ? 'red+ulpfec' : 'red'
         };
         encodingParameters.push(encParam);
@@ -5484,7 +5495,8 @@ SDPUtils.generateSessionId = function() {
 // sessId argument is optional - if not supplied it will
 // be generated randomly
 // sessVersion is optional and defaults to 2
-SDPUtils.writeSessionBoilerplate = function(sessId, sessVer) {
+// sessUser is optional and defaults to 'thisisadapterortc'
+SDPUtils.writeSessionBoilerplate = function(sessId, sessVer, sessUser) {
   var sessionId;
   var version = sessVer !== undefined ? sessVer : 2;
   if (sessId) {
@@ -5492,9 +5504,10 @@ SDPUtils.writeSessionBoilerplate = function(sessId, sessVer) {
   } else {
     sessionId = SDPUtils.generateSessionId();
   }
+  var user = sessUser || 'thisisadapterortc';
   // FIXME: sess-id should be an NTP timestamp.
   return 'v=0\r\n' +
-      'o=thisisadapterortc ' + sessionId + ' ' + version +
+      'o=' + user + ' ' + sessionId + ' ' + version +
         ' IN IP4 127.0.0.1\r\n' +
       's=-\r\n' +
       't=0 0\r\n';
@@ -5925,10 +5938,14 @@ module.exports = {
         }
         return origSetRemoteDescription.apply(pc, arguments);
       };
-    } else if (!('RTCRtpTransceiver' in window)) {
+    } else {
+      // even if RTCRtpTransceiver is in window, it is only used and
+      // emitted in unified-plan. Unfortunately this means we need
+      // to unconditionally wrap the event.
       utils.wrapPeerConnectionEvent(window, 'track', function(e) {
         if (!e.transceiver) {
-          e.transceiver = {receiver: e.receiver};
+          Object.defineProperty(e, 'transceiver',
+            {value: {receiver: e.receiver}});
         }
         return e;
       });
@@ -6540,35 +6557,6 @@ module.exports = {
           }
         });
       }
-    } else {
-      // migrate from non-spec RTCIceServer.url to RTCIceServer.urls
-      var OrigPeerConnection = window.RTCPeerConnection;
-      window.RTCPeerConnection = function(pcConfig, pcConstraints) {
-        if (pcConfig && pcConfig.iceServers) {
-          var newIceServers = [];
-          for (var i = 0; i < pcConfig.iceServers.length; i++) {
-            var server = pcConfig.iceServers[i];
-            if (!server.hasOwnProperty('urls') &&
-                server.hasOwnProperty('url')) {
-              utils.deprecated('RTCIceServer.url', 'RTCIceServer.urls');
-              server = JSON.parse(JSON.stringify(server));
-              server.urls = server.url;
-              newIceServers.push(server);
-            } else {
-              newIceServers.push(pcConfig.iceServers[i]);
-            }
-          }
-          pcConfig.iceServers = newIceServers;
-        }
-        return new OrigPeerConnection(pcConfig, pcConstraints);
-      };
-      window.RTCPeerConnection.prototype = OrigPeerConnection.prototype;
-      // wrap static methods. Currently just generateCertificate.
-      Object.defineProperty(window.RTCPeerConnection, 'generateCertificate', {
-        get: function() {
-          return OrigPeerConnection.generateCertificate;
-        }
-      });
     }
 
     var origGetStats = window.RTCPeerConnection.prototype.getStats;

ファイルの差分が大きいため隠しています
+ 0 - 0
dist/peer.min.js


+ 8 - 3
package.json

@@ -1,6 +1,6 @@
 {
   "name": "peerjs",
-  "version": "0.3.16",
+  "version": "0.3.17",
   "description": "PeerJS client",
   "main": "./lib/peer.js",
   "repository": {
@@ -11,21 +11,26 @@
   "license": "MIT",
   "scripts": {
     "prepublish": "./node_modules/.bin/grunt",
-    "postinstall": "opencollective-postinstall"
+    "postinstall": "opencollective-postinstall",
+    "test": "cd test && codeceptjs run"
   },
   "devDependencies": {
+    "codeceptjs": "^1.4.2",
     "expect.js": "*",
     "grunt": "^0.4.5",
     "grunt-browserify": "^3.0.1",
     "grunt-cli": "^0.1.13",
     "grunt-contrib-concat": "^0.5.0",
+    "grunt-contrib-copy": "^1.0.0",
     "grunt-contrib-uglify": "^0.5.1",
     "mocha": "*"
   },
   "dependencies": {
     "eventemitter3": "^0.1.5",
+    "express": "^4.16.3",
     "js-binarypack": "0.0.9",
     "opencollective": "^1.0.3",
+    "opencollective-postinstall": "^2.0.0",
     "reliable": "git+https://github.com/michelle/reliable.git",
     "webrtc-adapter": "^6.3.2"
   },
@@ -33,4 +38,4 @@
     "type": "opencollective",
     "url": "https://opencollective.com/peer"
   }
-}
+}

+ 0 - 12
test/adapter.js

@@ -1,12 +0,0 @@
-describe('adapter', function() {
-
-  it('sets RTCPeerConnection', function() {
-    expect(RTCPeerConnection).to.be.a('function');
-  });
-
-  it('sets RTCSessionDescription', function() {
-    expect(RTCSessionDescription).to.be.a('function');
-  });
-
-
-});

+ 28 - 0
test/basic_test.js

@@ -0,0 +1,28 @@
+/// <reference path="./steps.d.ts" />
+const express = require("express");
+
+BeforeSuite((I) => {
+    const app = express()
+    app.use(express.static('public'))
+    app.listen(3456)
+});
+
+Feature('Connection');
+
+Scenario('Data Channel ping pong', async (I) => {
+    I.amOnPage("http://localhost:3456")
+    I.wait(2)
+    I.openNewTab();
+    I.amOnPage("http://localhost:3456")
+    I.wait(2)
+    const id2 = await I.grabTextFrom("#id")
+    I.switchToPreviousTab(1)
+    I.wait(1)
+    I.executeScript(`connect("${id2}")`)
+    I.wait(2)
+    I.see("pong")
+});
+
+AfterSuite((I) => {
+    process.exit(0)
+})

+ 15 - 0
test/codecept.json

@@ -0,0 +1,15 @@
+{
+  "tests": "./*_test.js",
+  "timeout": 10000,
+  "output": "./output",
+  "helpers": {
+    "WebDriverIO": {
+      "url": "http://localhost",
+      "browser": "chrome"
+    }
+  },
+  "include": {},
+  "bootstrap": false,
+  "mocha": {},
+  "name": "test"
+}

+ 51 - 0
test/public/index.html

@@ -0,0 +1,51 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <meta http-equiv="X-UA-Compatible" content="ie=edge">
+    <title>PeerJS Test</title>
+    <script src="peer.min.js"></script>
+</head>
+
+<body>
+    <div id="id" style="margin: 50px;border: 1px solid red"></div>
+    <div id="data" style="margin: 50px;border: 1px solid green"></div>
+    <div id="log" style="margin: 50px;border: 1px solid blue"></div>
+    <script>
+        var peer = new Peer();
+        // on open will be launch when you successfully connect to PeerServer
+        peer.on('open', function (id) {
+            log("got id " + id)
+            document.querySelector("#id").innerHTML = id
+        });
+        peer.on('connection', function (conn) {
+            log("got new connection")
+            conn.on('data', function (data) {
+                log("got data " + data)
+                document.querySelector("#data").innerHTML = data;
+                log("answering pong")
+                conn.send("pong")
+            });
+        });
+
+        function connect(id) {
+            log("connecting peer " + id)
+            var conn = peer.connect(id);
+            conn.on('open', function () {
+                log("connected to peer " + id)
+                conn.send("ping")
+            });
+            conn.on("data", function (data) {
+                document.querySelector("#data").innerHTML = data;
+            });
+        }
+
+        function log(text) {
+            document.querySelector("#log").innerHTML += text + "<br/>";
+        }
+    </script>
+</body>
+
+</html>

ファイルの差分が大きいため隠しています
+ 0 - 0
test/public/peer.min.js


+ 282 - 0
test/steps.d.ts

@@ -0,0 +1,282 @@
+
+type ICodeceptCallback = (i: CodeceptJS.I) => void;
+
+declare class FeatureConfig {
+  retry(times:number): FeatureConfig
+  timeout(seconds:number): FeatureConfig
+  config(config:object): FeatureConfig
+  config(helperName:string, config:object): FeatureConfig
+}
+
+declare class ScenarioConfig {
+  throws(err:any) : ScenarioConfig;
+  fails() : ScenarioConfig;
+  retry(times:number): ScenarioConfig
+  timeout(timeout:number): ScenarioConfig
+  inject(inject:object): ScenarioConfig
+  config(config:object): ScenarioConfig
+  config(helperName:string, config:object): ScenarioConfig
+}
+
+interface ILocator {
+  xpath?: string;
+  css?: string;
+  name?: string;
+  value?: string;
+  frame?: string;
+  android?: string;
+  ios?: string;
+}
+
+declare class Helper {
+  /** Abstract method to provide required config options */
+  static _config(): any;
+  /** Abstract method to validate config */
+  _validateConfig<T>(config: T): T;
+  /** Sets config for current test */
+  _setConfig(opts: any): void;
+  /** Hook executed before all tests */
+  _init(): void
+  /** Hook executed before each test. */
+  _before(): void
+  /** Hook executed after each test */
+  _after(): void
+  /**
+   * Hook provides a test details
+   * Executed in the very beginning of a test
+   */
+  _test(test): void
+  /** Hook executed after each passed test */
+  _passed(test: () => void): void
+  /** Hook executed after each failed test */
+  _failed(test: () => void): void
+  /** Hook executed before each step */
+  _beforeStep(step: () => void): void
+  /** Hook executed after each step */
+  _afterStep(step: () => void): void
+  /** Hook executed before each suite */
+  _beforeSuite(suite: () => void): void
+  /** Hook executed after each suite */
+  _afterSuite(suite: () => void): void
+  /** Hook executed after all tests are executed */
+  _finishTest(suite: () => void): void
+  /**Access another configured helper: this.helpers['AnotherHelper'] */
+  get helpers(): any
+  /** Print debug message to console (outputs only in debug mode) */
+  debug(msg: string): void
+
+  debugSection(section: string, msg: string): void
+}
+
+declare class Locator implements ILocator {
+  xpath?: string;
+  css?: string;
+  name?: string;
+  value?: string;
+  frame?: string;
+  android?: string;
+  ios?: string;
+
+  or(locator:string): Locator;
+  find(locator:string): Locator;
+  withChild(locator:string): Locator;
+  find(locator:string): Locator;
+  at(position:number): Locator;
+  first(): Locator;
+  last(): Locator;
+  inside(locator:string): Locator;
+  before(locator:string): Locator;
+  after(locator:string): Locator;
+  withText(locator:string): Locator;
+  withAttr(locator:object): Locator;
+  as(locator:string): Locator;
+}
+
+declare function actor(customSteps?: {}): CodeceptJS.I;
+declare function Feature(title: string, opts?: {}): FeatureConfig;
+declare const Scenario: {
+	(title: string, callback: ICodeceptCallback): ScenarioConfig;
+	(title: string, opts: {}, callback: ICodeceptCallback): ScenarioConfig;
+	only(title: string, callback: ICodeceptCallback): ScenarioConfig;
+	only(title: string, opts: {}, callback: ICodeceptCallback): ScenarioConfig;
+}
+declare function xScenario(title: string, callback: ICodeceptCallback): ScenarioConfig;
+declare function xScenario(title: string, opts: {}, callback: ICodeceptCallback): ScenarioConfig;
+declare function Data(data: any): any;
+declare function xData(data: any): any;
+declare function Before(callback: ICodeceptCallback): void;
+declare function BeforeSuite(callback: ICodeceptCallback): void;
+declare function After(callback: ICodeceptCallback): void;
+declare function AfterSuite(callback: ICodeceptCallback): void;
+
+declare function locate(selector: string): Locator;
+declare function locate(selector: ILocator): Locator;
+declare function within(selector: string, callback: Function): Promise<any>;
+declare function within(selector: ILocator, callback: Function): Promise<any>;
+declare function session(selector: string, callback: Function): Promise<any>;
+declare function session(selector: ILocator, callback: Function): Promise<any>;
+declare function session(selector: string, config: any, callback: Function): Promise<any>;
+declare function session(selector: ILocator, config: any, callback: Function): Promise<any>;
+declare function pause(): void;
+
+declare const codeceptjs: any;
+
+declare namespace CodeceptJS {
+  export interface I {
+    defineTimeout(timeouts: string) : void,
+    amOnPage(url: string) : void,
+    click(locator: ILocator, context?: ILocator) : void,
+    click(locator: string, context?: ILocator) : void,
+    click(locator: ILocator, context?: string) : void,
+    click(locator: string, context?: string) : void,
+    doubleClick(locator: ILocator, context?: ILocator) : void,
+    doubleClick(locator: string, context?: ILocator) : void,
+    doubleClick(locator: ILocator, context?: string) : void,
+    doubleClick(locator: string, context?: string) : void,
+    rightClick(locator: ILocator) : void,
+    rightClick(locator: string) : void,
+    fillField(field: ILocator, value: string) : void,
+    fillField(field: string, value: string) : void,
+    appendField(field: ILocator, value: string) : void,
+    appendField(field: string, value: string) : void,
+    clearField(field: ILocator) : void,
+    clearField(field: string) : void,
+    selectOption(select: ILocator, option: string) : void,
+    selectOption(select: string, option: string) : void,
+    attachFile(locator: ILocator, pathToFile: string) : void,
+    attachFile(locator: string, pathToFile: string) : void,
+    checkOption(field: ILocator, context?: ILocator) : void,
+    checkOption(field: string, context?: ILocator) : void,
+    checkOption(field: ILocator, context?: string) : void,
+    checkOption(field: string, context?: string) : void,
+    uncheckOption(field: ILocator, context?: ILocator) : void,
+    uncheckOption(field: string, context?: ILocator) : void,
+    uncheckOption(field: ILocator, context?: string) : void,
+    uncheckOption(field: string, context?: string) : void,
+    grabTextFrom(locator: ILocator) : Promise<string>,
+    grabTextFrom(locator: string) : Promise<string>,
+    grabHTMLFrom(locator: ILocator) : Promise<string>,
+    grabHTMLFrom(locator: string) : Promise<string>,
+    grabValueFrom(locator: ILocator) : Promise<string>,
+    grabValueFrom(locator: string) : Promise<string>,
+    grabCssPropertyFrom(locator: ILocator, cssProperty: string) : Promise<string>,
+    grabCssPropertyFrom(locator: string, cssProperty: string) : Promise<string>,
+    grabAttributeFrom(locator: ILocator, attr: string) : Promise<string>,
+    grabAttributeFrom(locator: string, attr: string) : Promise<string>,
+    seeInTitle(text: string) : void,
+    seeTitleEquals(text: string) : void,
+    dontSeeInTitle(text: string) : void,
+    grabTitle() : Promise<string>,
+    see(text: string, context?: ILocator) : void,
+    see(text: string, context?: string) : void,
+    seeTextEquals(text: string, context?: ILocator) : void,
+    seeTextEquals(text: string, context?: string) : void,
+    dontSee(text: string, context?: ILocator) : void,
+    dontSee(text: string, context?: string) : void,
+    seeInField(field: ILocator, value: string) : void,
+    seeInField(field: string, value: string) : void,
+    dontSeeInField(field: ILocator, value: string) : void,
+    dontSeeInField(field: string, value: string) : void,
+    seeCheckboxIsChecked(field: ILocator) : void,
+    seeCheckboxIsChecked(field: string) : void,
+    dontSeeCheckboxIsChecked(field: ILocator) : void,
+    dontSeeCheckboxIsChecked(field: string) : void,
+    seeElement(locator: ILocator) : void,
+    seeElement(locator: string) : void,
+    dontSeeElement(locator: ILocator) : void,
+    dontSeeElement(locator: string) : void,
+    seeElementInDOM(locator: ILocator) : void,
+    seeElementInDOM(locator: string) : void,
+    dontSeeElementInDOM(locator: ILocator) : void,
+    dontSeeElementInDOM(locator: string) : void,
+    seeInSource(text: string) : void,
+    grabSource() : Promise<string>,
+    grabBrowserLogs() : Promise<string>,
+    grabCurrentUrl() : Promise<string>,
+    grabBrowserUrl() : Promise<string>,
+    dontSeeInSource(text: string) : void,
+    seeNumberOfElements(selector: string, num: number) : void,
+    seeNumberOfVisibleElements(locator: ILocator, num: number) : void,
+    seeNumberOfVisibleElements(locator: string, num: number) : void,
+    seeCssPropertiesOnElements(locator: ILocator, cssProperties: string) : void,
+    seeCssPropertiesOnElements(locator: string, cssProperties: string) : void,
+    seeAttributesOnElements(locator: ILocator, attributes: string) : void,
+    seeAttributesOnElements(locator: string, attributes: string) : void,
+    grabNumberOfVisibleElements(locator: ILocator) : Promise<string>,
+    grabNumberOfVisibleElements(locator: string) : Promise<string>,
+    seeInCurrentUrl(url: string) : void,
+    dontSeeInCurrentUrl(url: string) : void,
+    seeCurrentUrlEquals(url: string) : void,
+    dontSeeCurrentUrlEquals(url: string) : void,
+    executeScript(fn: Function) : void,
+    executeAsyncScript(fn: Function) : void,
+    scrollTo(locator: ILocator, offsetX?: number, offsetY?: number) : void,
+    scrollTo(locator: string, offsetX?: number, offsetY?: number) : void,
+    moveCursorTo(locator: ILocator, offsetX?: number, offsetY?: number) : void,
+    moveCursorTo(locator: string, offsetX?: number, offsetY?: number) : void,
+    saveScreenshot(fileName: string, fullPage?: string) : void,
+    setCookie(cookie: string) : void,
+    clearCookie(cookie: string) : void,
+    seeCookie(name: string) : void,
+    dontSeeCookie(name: string) : void,
+    grabCookie(name: string) : Promise<string>,
+    acceptPopup() : void,
+    cancelPopup() : void,
+    seeInPopup(text: string) : void,
+    grabPopupText() : Promise<string>,
+    pressKey(key: string) : void,
+    resizeWindow(width: number, height: number) : void,
+    dragAndDrop(srcElement: string, destElement: string) : void,
+    closeOtherTabs() : void,
+    wait(sec: number) : void,
+    waitForEnabled(locator: ILocator, sec?: number) : void,
+    waitForEnabled(locator: string, sec?: number) : void,
+    waitForElement(locator: ILocator, sec?: number) : void,
+    waitForElement(locator: string, sec?: number) : void,
+    waitUntilExists(locator: ILocator, sec?: number) : void,
+    waitUntilExists(locator: string, sec?: number) : void,
+    waitInUrl(urlPart: string, sec?: number) : void,
+    waitUrlEquals(urlPart: string, sec?: number) : void,
+    waitForText(text: string, sec?: number, aContext?: string) : void,
+    waitForValue(field: ILocator, value: string, sec?: number) : void,
+    waitForValue(field: string, value: string, sec?: number) : void,
+    waitForVisible(locator: ILocator, sec?: number) : void,
+    waitForVisible(locator: string, sec?: number) : void,
+    waitNumberOfVisibleElements(locator: ILocator, num: number, sec?: number) : void,
+    waitNumberOfVisibleElements(locator: string, num: number, sec?: number) : void,
+    waitForInvisible(locator: ILocator, sec?: number) : void,
+    waitForInvisible(locator: string, sec?: number) : void,
+    waitToHide(locator: ILocator, sec?: number) : void,
+    waitToHide(locator: string, sec?: number) : void,
+    waitForStalenessOf(locator: ILocator, sec?: number) : void,
+    waitForStalenessOf(locator: string, sec?: number) : void,
+    waitForDetached(locator: ILocator, sec?: number) : void,
+    waitForDetached(locator: string, sec?: number) : void,
+    waitForFunction(fn: Function, argsOrSec?: string, sec?: number) : void,
+    waitUntil(fn: Function, sec?: number, timeoutMsg?: string) : void,
+    switchTo(locator: ILocator) : void,
+    switchTo(locator: string) : void,
+    switchToNextTab(num?: number, sec?: number) : void,
+    switchToPreviousTab(num?: number, sec?: number) : void,
+    closeCurrentTab() : void,
+    openNewTab() : void,
+    grabNumberOfOpenTabs() : Promise<string>,
+    refreshPage() : void,
+    scrollPageToTop() : void,
+    scrollPageToBottom() : void,
+    grabPageScrollPosition() : Promise<string>,
+    runOnIOS(caps: string, fn: Function) : void,
+    runOnAndroid(caps: string, fn: Function) : void,
+    runInWeb(fn: Function) : void,
+    debug(msg: string) : void,
+    debugSection(section: string, msg: string) : void,
+    say(msg: string) : void,
+    retryStep(opts: string) : void,
+
+  }
+
+}
+
+declare module "codeceptjs" {
+    export = CodeceptJS;
+}

+ 0 - 22
test/test.html

@@ -1,22 +0,0 @@
-<html>
-<head>
-  <meta charset="utf-8">
-  <title>Mocha Tests</title>
-  <link rel="stylesheet" href="../node_modules/mocha/mocha.css" />
-</head>
-<body>
-  <div id="mocha"></div>
-  <script src="../dist/peer.js"></script>
-
-  <script src="../node_modules/expect.js/index.js"></script>
-  <script src="../node_modules/mocha/mocha.js"></script>
-  <script>mocha.setup('bdd')</script>
-
-  <script src="util.js"></script>
-  <script src="adapter.js"></script>
-
-  <script>
-    mocha.run();
-  </script>
-</body>
-</html>

+ 0 - 122
test/util.js

@@ -1,122 +0,0 @@
-describe('util', function() {
-
-  var testRandom = function(fn) {
-    var i = 0
-      , generated = {};
-    while(i < 25) {
-      var p = fn();
-      if (generated[p]) throw new Error('not so random')
-      generated[p] = 1;
-      i++;
-    }
-  }
-
-  describe('.inherits', function() {
-    it('should make functions inherit properly', function() {
-      function ctor() {}
-      function superCtor() {}
-      superCtor.prototype.test = function() { return 5; }
-      util.inherits(ctor, superCtor);
-      expect(new ctor()).to.be.a(superCtor);
-      expect(new ctor().test()).to.be.equal(5);
-    });
-  });
-
-  /*
-   *  extend overwrites keys if already exists
-   *  leaves existing keys alone otherwise
-   */
-  describe('.extend', function() {
-    it('should copy the properties of b to a', function() {
-      var a = {a: 1, b: 2, c: 3, d: 4}
-        , b = {d: 2};
-      util.extend(b, a);
-      expect(b).to.eql(a);
-      expect(b.d).to.be.equal(4);
-      b = {z: 2};
-      util.extend(b, a);
-      expect(b.z).to.be.equal(2);
-    });
-  });
-
-  describe('.pack', function() {
-    it('should be BinaryPack\'s `pack` function', function() {
-      expect(util.pack).to.be.equal(BinaryPack.pack);
-    });
-  });
-
-  describe('.unpack', function() {
-    it('should be BinaryPack\'s `unpack` function', function() {
-      expect(util.unpack).to.be.equal(BinaryPack.unpack);
-    });
-  });
-
-  // FF no like
-  describe('.log', function() {
-    it('should log with the PeerJS prefix', function(done) {
-      var consolelog = console.log;
-      // default is false
-      expect(util.debug).to.be.equal(false);
-      util.debug = true;
-      console.log = function() {
-        var arg = Array.prototype.slice.call(arguments);
-        expect(arg.join(' ')).to.be.equal('PeerJS:  hi');
-        done();
-      }
-      util.log('hi');
-      // reset
-      console.log = consolelog;
-      util.debug = false;
-    });
-  });
-
-  describe('.setZeroTimeout', function() {
-    it('should call the function after a 0s timeout', function(done) {
-      var isdone = false;
-      util.setZeroTimeout(function() {
-        if (isdone) {
-          done();
-        }
-      });
-      isdone = true;
-    });
-  });
-
-  describe('.blobToArrayBuffer', function() {
-    it('should convert a blob to an arraybuffer', function(done) {
-      var blob = new Blob(['hi']);
-      util.blobToArrayBuffer(blob, function(result) {
-        expect(result.byteLength).to.be.equal(2);
-        expect(result.slice).to.be.a('function');
-        expect(result instanceof ArrayBuffer).to.be.equal(true);
-        done();
-      });
-    });
-  });
-
-  describe('blobToBinaryString', function() {
-    it('should convert a blob to a binary string', function(done) {
-      var blob = new Blob(['hi']);
-      util.blobToBinaryString(blob, function(result) {
-        expect(result).to.equal('hi');
-        done();
-      });
-    });
-  });
-
-  describe('.binaryStringToArrayBuffer', function() {
-    it('should convert a binary string to an arraybuffer', function() {
-      var ba = util.binaryStringToArrayBuffer('\0\0');
-      expect(ba.byteLength).to.be.equal(2);
-      expect(ba.slice).to.be.a('function');
-      expect(ba instanceof ArrayBuffer).to.be.equal(true);
-    });
-  });
-
-  describe('.randomToken', function() {
-    it('should return a random string', function() {
-      testRandom(util.randomToken);
-    });
-  });
-
-});

この差分においてかなりの量のファイルが変更されているため、一部のファイルを表示していません