~didrocks/+junk/face-detection-15.04

« back to all changes in this revision

Viewing changes to facedetection/www/bower_components/iron-location/test/initialization-tests.html

  • Committer: Didier Roche
  • Date: 2016-05-10 23:09:11 UTC
  • Revision ID: didier.roche@canonical.com-20160510230911-c7xr490zrj3yrzxd
New version

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
<!--
 
2
@license
 
3
Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
 
4
This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
 
5
The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
 
6
The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
 
7
Code distributed by Google as part of the polymer project is also
 
8
subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
 
9
-->
 
10
 
 
11
<!DOCTYPE html>
 
12
<html>
 
13
  <head>
 
14
    <meta charset="utf-8">
 
15
    <title></title>
 
16
    <script src="../../webcomponentsjs/webcomponents.js"></script>
 
17
    <script src="../../web-component-tester/browser.js"></script>
 
18
    <script src="../../test-fixture/test-fixture-mocha.js"></script>
 
19
 
 
20
    <link rel="import" href="../../polymer/polymer.html">
 
21
    <link rel="import" href="../../promise-polyfill/promise-polyfill.html">
 
22
    <link rel="import" href="../../test-fixture/test-fixture.html">
 
23
    <link rel="import" href="../iron-location.html">
 
24
  </head>
 
25
 
 
26
  <body>
 
27
    <script>
 
28
      'use strict';
 
29
 
 
30
      function getIframe() {
 
31
        return new Promise(function(resolve, reject) {
 
32
          var iframe = document.createElement('iframe');
 
33
          var result = getMessageMatching(iframe, function(message) {
 
34
            return message.type === 'ready';
 
35
          });
 
36
          iframe.src = './initialization-iframe.html';
 
37
          document.body.appendChild(iframe);
 
38
          iframe.addEventListener('error', reject);
 
39
          result.then(function() {resolve(iframe)}, reject);
 
40
        });
 
41
      }
 
42
 
 
43
      function onMessage(iframe, callback) {
 
44
        var f = function(event) {
 
45
          if (event.source === iframe.contentWindow) {
 
46
            callback(event.data);
 
47
          }
 
48
        };
 
49
        window.addEventListener('message', f, false);
 
50
        return function() {
 
51
          window.removeEventListener('message', f);
 
52
        }
 
53
      }
 
54
 
 
55
      function getMessageMatching(iframe, predicate) {
 
56
        var revoke = function() {};
 
57
        var result = new Promise(function(resolve, reject) {
 
58
          revoke = onMessage(iframe, function(message) {
 
59
            if (predicate(message)) {
 
60
              resolve(message);
 
61
            }
 
62
          });
 
63
        });
 
64
        result.then(revoke, revoke);
 
65
        return result;
 
66
      }
 
67
 
 
68
      function getUrl(iframe) {
 
69
        var result = getMessageMatching(iframe, function(message) {
 
70
          return message.type === 'urlQueryResponse';
 
71
        })
 
72
        var revoke = function() {};
 
73
        var result = new Promise(function(resolve, reject) {
 
74
          revoke = onMessage(iframe, resolve);
 
75
        });
 
76
        result.then(revoke, revoke);
 
77
        iframe.contentWindow.postMessage({type: 'urlQuery'}, '*');
 
78
        return result;
 
79
      }
 
80
 
 
81
      function timePasses(ms) {
 
82
        return new Promise(function(resolve) {
 
83
          window.setTimeout(function() {
 
84
            resolve();
 
85
          }, ms);
 
86
        });
 
87
      }
 
88
 
 
89
      suite('<iron-location>\'s initialization', function() {
 
90
        var iframe;
 
91
        var error;
 
92
        setup(function() {
 
93
          return getIframe().then(function(i) {
 
94
            iframe = i;
 
95
            function isError(m) {return m.type === 'error'}
 
96
            getMessageMatching(iframe, isError).then(function(m) {
 
97
              error = m.error;
 
98
            });
 
99
          });
 
100
        });
 
101
        teardown(function() {
 
102
          if (iframe) {
 
103
            document.body.removeChild(iframe);
 
104
          }
 
105
          var e = error;
 
106
          iframe = null;
 
107
          error = null;
 
108
          if (e) {
 
109
            throw new Error('Error message from contained iframe: ' + e);
 
110
          }
 
111
        });
 
112
        var cases = [
 
113
          'default-before', 'attached-before', 'ready-before',
 
114
          'default-after', 'attached-after', 'ready-after',
 
115
          'default-below', 'attached-below', 'ready-below',
 
116
          'default-above', 'attached-above', 'ready-above',
 
117
          'default-container', 'attached-container', 'ready-container'
 
118
        ];
 
119
        cases.forEach(function(caseName) {
 
120
          test('the url takes priority in ' + caseName + ' initialization', function() {
 
121
            return getUrl(iframe).then(function(url) {
 
122
              expect(url.search).to.be.eq('');
 
123
              iframe.contentWindow.postMessage({type: 'appendBody', tagName: caseName}, '*');
 
124
              return timePasses(10).then(function() {return getUrl(iframe)});
 
125
            }).then(function(url) {
 
126
              expect(url.search).to.be.eq('');
 
127
            });
 
128
          });
 
129
        });
 
130
        var expectedFailureCases = ['timeout-before', 'timeout-after', 'timeout-below', 'timeout-above', 'timeout-container'];
 
131
        expectedFailureCases.forEach(function(caseName) {
 
132
          test('the url does not take priority in ' + caseName + ' initialization', function() {
 
133
            return getUrl(iframe).then(function(url) {
 
134
              expect(url.search).to.be.eq('');
 
135
              iframe.contentWindow.postMessage({type: 'appendBody', tagName: caseName}, '*');
 
136
              return timePasses(60).then(function() {return getUrl(iframe)});
 
137
            }).then(function(url) {
 
138
              expect(url.search).to.be.eq('?on-timeout');
 
139
            });
 
140
          });
 
141
        });
 
142
      });
 
143
    </script>
 
144
  </body>
 
145
</html>