github.com/insionng/yougam@v0.0.0-20170714101924-2bc18d833463/public/libs/sockjs-client-1.1.0/tests/lib/echo-tests.js (about)

     1  'use strict';
     2  var expect = require('expect.js')
     3    , iframeUtils = require('../../lib/utils/iframe')
     4    , testUtils = require('./test-utils')
     5    , debug = require('debug')('sockjs-client:tests:echo')
     6    ;
     7  
     8  function echoFactory(transport, messages, url) {
     9    return function (done) {
    10      var test = this.runnable();
    11      var title = test.fullTitle();
    12      debug('start', title);
    13      this.timeout(20000);
    14      var msgs = messages.slice(0);
    15  
    16      var sjs = testUtils.newSockJs(url, transport);
    17      sjs.onopen = function () {
    18        sjs.send(msgs[0]);
    19      };
    20      sjs.onmessage = function (e) {
    21        if (test.timedOut || test.duration) {
    22          return;
    23        }
    24        // TODO don't like having to force the element toString here
    25        try {
    26          expect(e.data).to.eql('' + msgs[0]);
    27        } catch (err) {
    28          done(err);
    29          sjs.close();
    30          return;
    31        }
    32  
    33        msgs.shift();
    34        if (typeof msgs[0] === 'undefined') {
    35          sjs.close();
    36        } else {
    37          sjs.send(msgs[0]);
    38        }
    39      };
    40      sjs.onclose = function (e) {
    41        if (test.timedOut || test.duration) {
    42          return;
    43        }
    44  
    45        try {
    46          expect(e.code).to.equal(1000);
    47          expect(msgs).to.have.length(0);
    48        } catch (err) {
    49          done(err);
    50          return;
    51        }
    52  
    53        done();
    54        debug('end', title);
    55      };
    56    };
    57  }
    58  
    59  module.exports.echoBasic = function echoBasic(url, transport) {
    60    var messages = ['data'];
    61    it('echo basic', echoFactory(transport, messages, url + '/echo'));
    62  };
    63  
    64  module.exports.echoQueryString = function echoBasic(url, transport) {
    65    var messages = ['data'];
    66    it('echo querystring', echoFactory(transport, messages, url + '/echo?testqs=1'));
    67  };
    68  
    69  module.exports.echoRich = function echoRich(url, transport) {
    70    var messages = [
    71      [1, 2, 3, 'data'], null, false, 'data', 1, 12.0, {
    72        a: 1,
    73        b: 2
    74      }
    75    ];
    76    it('echo rich', echoFactory(transport, messages, url + '/echo'));
    77  };
    78  
    79  /* eslint-disable quotes */
    80  module.exports.echoUnicode = function echoUnicode(url, transport) {
    81    var messages = ["Τη γλώσσα μου έδωσαν ελληνική το σπίτι φτωχικό στις αμμουδιές του ", "ღმერთსი შემვედრე, ნუთუ კვლა დამხსნას სოფლისა შრომასა, ცეცხლს, წყალს", "⠊⠀⠉⠁⠝⠀⠑⠁⠞⠀⠛⠇⠁⠎⠎⠀⠁⠝⠙⠀⠊⠞⠀⠙⠕⠑⠎⠝⠞⠀⠓⠥⠗⠞⠀⠍⠑", "Би шил идэй чадна, надад хортой биш", "을", "나는 유리를 먹을 수 있어요. 그래도 아프지 않아요", "ฉันกินกระจกได้ แต่มันไม่ทำให้ฉันเจ็บฉันกินกระจกได้ แต่มันไม่ทำให้ฉันเจ็บ", "Ég get etið gler án þess að meiða mig.", "Mogę jeść szkło, i mi nie szkodzi.", "\ufffd\u10102\u2f877", "Начало музыкальной карьеры\nБритни пела в церковном хоре местной баптистской церкви. В возрасте 8-ми лет Спирс прошла аудирование для участия в шоу «Новый Клуб Микки-Мауса» на канале «Дисней». И хотя продюсеры решили, что Спирс слишком молода для участия в шоу, они представили её агенту в Нью-Йорке. Следующие 3 года Бритни училась в актёрской школе Professional Performing Arts School в Нью-Йорке и участвовала в нескольких постановках, в том числе «Ruthless!» 1991 года. В 1992 году Спирс участвовала в конкурсе Star Search, но проиграла во втором туре.\nВ 1993 году Спирс вернулась на канал «Дисней» и в течение 2-х лет участвовала в шоу «Новый Клуб Микки-Мауса». Другие будущие знаменитости, начинавшие с этого шоу — Кристина Агилера, участники 'N Sync Джастин Тимберлейк и Джейси Шазе, звезда сериала «Счастье» Кери Расселл и актёр фильма «Дневник памяти» Райан Гослинг.\nВ 1994 году шоу закрыли, Бритни вернулась домой в Луизиану, где поступила в среднюю школу. Некоторое время она пела в девичьей группе Innosense, но вскоре, решив начать сольную карьеру, записала демодиск, который попал в руки продюсерам из Jive Records, и те заключили с ней контракт.\nДалее последовал тур по стране, выступления в супермаркетах и работа на разогреве у групп 'N Sync и Backstreet Boys.\n[править]1999—2000: Ранний коммерческий успех\nВ октябре 1998 года вышел дебютный сингл Бритни Спирс «…Baby One More Time» . Песня имела огромный успех, в первые же недели возглавила международные чарты, мировые продажи сингла составили 9 миллионов копий, что сделало диск дважды платиновым. Альбом с одноимённым названием вышел в январе 1999 года. Альбом стартовал на первом месте рейтинга Billboard 200, пятьдесят одну неделю продержался в верхней десятке и шестьдесят недель в двадцати лучших. Альбом стал 15-кратным платиновым и на сегодняшний день является самым успешным альбомом Бритни Спирс.\nВ 1999 году Бритни снялась для апрельского номера журнала Rolling Stone. Откровенные фотографии спровоцировали слухи о том, что 17-летняя звезда сделала операцию по увеличению груди, что сама Спирс отрицала. Успех альбома и противоречивый образ Спирс, созданный массмедиа, сделали её главной звездой 1999 года.\nВслед за успешным дебютом последовал второй альбом певицы «Oops!... I Did It Again», также стартовавший на 1-м месте в США. Продажи за первую неделю составили 1 319 193 копии, что являлось абсолютным рекордом, который затем побил американский рэпер Эминем. Летом 2000 года Спирс отправилась в свой первый мировой тур, «Oops!… I Did It Again World Tour». В 2000 году Спирс получила две награды Billboards Music Awards и была номинирована на «Грэмми» в двух категориях — «Лучший поп-альбом» и «Лучшее живое выступление».\n[править]2001—2003: Вершина карьеры\n\n\nИсполняя «Me Against the Music»\nУспех Спирс сделал её заметной фигурой и в музыкальной индустрии, и в поп-культуре. В начале 2001 года она привлекла внимание «Пепси», эта компания предложила ей многомиллионный контракт, включавший телевизионную рекламу и участие в промо-акциях.\nВ ноябре 2001 года вышел третий альбом Спирс — Britney. Альбом дебютировал на первом месте в США с продажами в 745 744 пластинок за первую неделю, что сделало Бритни первой в истории исполнительницей, чьи первые три альбома стартовали на вершине рейтинга. Сразу же после выхода альбома Спирс отправилась в тур Dream Within a Dream Tour, по окончании которого объявила, что хочет взять 6-месячный перерыв в карьере.\nВ этом же году Спирс рассталась с солистом 'N Sync Джастином Тимберлейком, с которым встречалась 4 года.\nБритни вернулась на сцену в августе 2003 года.\nВ ноябре 2003 года вышел четвёртый студийный альбом Спирс In The Zone. Бритни участвовала в написании восьми из тринадцати композиций, а также выступила в качестве продюсера альбома. In The Zone дебютировал на первом месте в США, что сделало Бритни первой в истории исполнительницей, чьи первые четыре альбома стартовали на вершине рейтинга. Самый успешный сингл с альбома — Toxic — принёс Бритни первую для неё награду Грэмми в категории «Лучшая танцевальная композиция».\n[править]2007—2008: Возвращение к музыке\nВ начале 2007 года после двухлетнего перерыва Спирс приступила к записи нового сольного альбома, продюсерами которого выступили Nate «Danja» Hills, Шон Гарретт и Джонатан Ротэм.\nВ мае 2007 года Спирс в составе коллектива «The M and M’s» дала 6 концертов в рамках тура «House of Blues» в Лос-Анджелесе, Сан-Диего, Анахайме, Лас-Вегасе, Орландо и Майами. Каждый концерт длился около 15 минут и включал 5 старых хитов певицы.[4]\n30 августа 2007 года на волнах нью-йоркской радиостанции Z100 состоялась премьера песни «Gimme More», первого сингла с нового альбома Спирс.[5] Сингл вышел на iTunes 24 сентября и на CD 29 октября 2007.\n9 сентября 2007 года Спирс исполнила «Gimme More» на церемонии вручения наград MTV Video Music Awards. Выступление оказалось неудачным; Спирс выглядела непрофессионально — не всегда попадала в фонограмму и в танце отставала от группы хореографической поддержки.[6]\nНесмотря на это, в начале октября 2007 года сингл «Gimme More» достиг 3-го места в чарте Billboard Hot 100, став таким образом одним из самых успешных синглов Спирс.[7]"];
    82    it('unicode', echoFactory(transport, messages, url + '/echo'));
    83  };
    84  
    85  module.exports.echoSpecialChars = function echoSpecialChars(url, transport) {
    86    var messages = [" ", "\u0000", "\xff", "\xff\x00", "\x00\xff", " \r ", " \n ", " \r\n ", "\r\n", "", "message\t", "\tmessage", "message ", " message", "message\r", "\rmessage", "message\n", "\nmessage", "message\xff", "\xffmessage", "A", "b", "c", "d", "e", "\ufffd", "\ufffd\u0000", "message\ufffd", "\ufffdmessage"];
    87    it('special chars', echoFactory(transport, messages, url + '/echo'));
    88  };
    89  /* eslint-enable quotes */
    90  
    91  module.exports.echoLargeMessage = function echoLargeMessage(url, transport) {
    92    var messages = [new Array(Math.pow(2, 1)).join('x'), new Array(Math.pow(2, 2)).join('x'), new Array(Math.pow(2, 4)).join('x'), new Array(Math.pow(2, 8)).join('x'), new Array(Math.pow(2, 13)).join('x'), new Array(Math.pow(2, 13)).join('x')];
    93    it('large message (ping-pong)', echoFactory(transport, messages, url + '/echo'));
    94  };
    95  
    96  module.exports.echoUtfEncodingSimple = function echoUtfEncodingSimple(url, transport) {
    97    var chars = [];
    98    for (var i = 0; i <= 256; i++) {
    99      chars.push(String.fromCharCode(i));
   100    }
   101    it('echo utf encoding 0x00-0xFF', echoFactory(transport, [chars.join('')], url + '/echo'));
   102  };
   103  
   104  var escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u2000-\u20ff\ufeff\ufff0-\uffff\x00-\x1f\ufffe\uffff\u0300-\u0333\u033d-\u0346\u034a-\u034c\u0350-\u0352\u0357-\u0358\u035c-\u0362\u0374\u037e\u0387\u0591-\u05af\u05c4\u0610-\u0617\u0653-\u0654\u0657-\u065b\u065d-\u065e\u06df-\u06e2\u06eb-\u06ec\u0730\u0732-\u0733\u0735-\u0736\u073a\u073d\u073f-\u0741\u0743\u0745\u0747\u07eb-\u07f1\u0951\u0958-\u095f\u09dc-\u09dd\u09df\u0a33\u0a36\u0a59-\u0a5b\u0a5e\u0b5c-\u0b5d\u0e38-\u0e39\u0f43\u0f4d\u0f52\u0f57\u0f5c\u0f69\u0f72-\u0f76\u0f78\u0f80-\u0f83\u0f93\u0f9d\u0fa2\u0fa7\u0fac\u0fb9\u1939-\u193a\u1a17\u1b6b\u1cda-\u1cdb\u1dc0-\u1dcf\u1dfc\u1dfe\u1f71\u1f73\u1f75\u1f77\u1f79\u1f7b\u1f7d\u1fbb\u1fbe\u1fc9\u1fcb\u1fd3\u1fdb\u1fe3\u1feb\u1fee-\u1fef\u1ff9\u1ffb\u1ffd\u2000-\u2001\u20d0-\u20d1\u20d4-\u20d7\u20e7-\u20e9\u2126\u212a-\u212b\u2329-\u232a\u2adc\u302b-\u302c\uaab2-\uaab3\uf900-\ufa0d\ufa10\ufa12\ufa15-\ufa1e\ufa20\ufa22\ufa25-\ufa26\ufa2a-\ufa2d\ufa30-\ufa6d\ufa70-\ufad9\ufb1d\ufb1f\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40-\ufb41\ufb43-\ufb44\ufb46-\ufb4e]/g;
   105  module.exports.echoUtfEncoding = function echoUtfEncoding(url, transport) {
   106    var chars = [], message = [];
   107    for (var i = 0; i <= 65536; i++) {
   108      chars.push(String.fromCharCode(i));
   109    }
   110    escapable.lastIndex = 0;
   111    chars.join('').replace(escapable, function (a) {
   112      message.push(a);
   113      return '';
   114    });
   115    it('echo utf encoding killer message', echoFactory(transport, [message.join('')], url + '/echo'));
   116  };
   117  
   118  module.exports.echoFromChild = function echoFromChild(url, transport) {
   119    if (!iframeUtils.iframeEnabled) {
   120      it('echo from child [unsupported]');
   121      return;
   122    }
   123  
   124    it('echo from child', function (done) {
   125      this.timeout(10000);
   126  
   127      var test = this.runnable();
   128      var title = test.fullTitle();
   129      debug('start', title);
   130      var hook = testUtils.createIframe('/sockjs-in-parent.html');
   131      var sjs = testUtils.newSockJs(url + '/echo', transport);
   132      var code = 'hook.sjs.send("a"); hook.onsend();';
   133      var hookReady, sockJsReady, timeout, i = 0;
   134  
   135      hook.open = function() {
   136        debug('hook open');
   137        hook.iobj.loaded();
   138        i++;
   139        hookReady = true;
   140        hook.sjs = sjs;
   141        if (sockJsReady) {
   142          hook.callback(code);
   143        }
   144      };
   145      hook.onsend = function () {
   146        debug('hook onsend');
   147        timeout = setTimeout(function() {
   148          done(new Error('echo timeout'));
   149          sjs.close();
   150          debug('end', title);
   151        }, 1000);
   152      };
   153  
   154      sjs.onopen = function() {
   155        debug('hook sjs open');
   156        hook.iobj.loaded();
   157        i++;
   158        sockJsReady = true;
   159        if (hookReady) {
   160          hook.callback(code);
   161        }
   162      };
   163      sjs.onmessage = function(e) {
   164        debug('hook sjs message, e.data');
   165        clearTimeout(timeout);
   166        try {
   167          expect(e.data).to.equal('a');
   168          expect(i).to.equal(2);
   169        } catch (err) {
   170          done(err);
   171        } finally {
   172          hook.iobj.cleanup();
   173          hook.del();
   174          sjs.close();
   175        }
   176      };
   177      sjs.onclose = function(e) {
   178        if (test.timedOut || test.duration) {
   179          return;
   180        }
   181  
   182        try {
   183          expect(e.code).to.equal(1000);
   184        } catch (err) {
   185          done(e);
   186          return;
   187        }
   188        debug('hook sjs close');
   189        done();
   190        debug('end', title);
   191      };
   192    });
   193  };