// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

var test = require('prova');
var names = require('../../src/naming/util');
var ep = '@6@tcp@127.0.0.1:22@@@@@s@dev.v.io/blessing,v.io/blessing/b2@@';
var rootedEp = '/' + ep;

test('names.join(...)', function(assert) {
  assert.equal(names.join('a', 'b'), 'a/b');
  assert.equal(names.join('a/', 'b/'), 'a/b');
  assert.equal(names.join('', ''), '');
  assert.equal(names.join('', 'b'), 'b');
  assert.equal(names.join('', '/b'), '/b');
  assert.equal(names.join('a', ''), 'a');
  assert.equal(names.join('a/', ''), 'a');
  assert.equal(names.join('/a', 'b'), '/a/b');
  assert.equal(names.join('/a/b', 'c'), '/a/b/c');
  assert.equal(names.join('/a/b', 'c/d'), '/a/b/c/d');
  assert.equal(names.join('/a/b', '/c/d'), '/a/b/c/d');
  assert.equal(names.join('/a/b', '//c/d'), '/a/b/c/d');
  assert.equal(names.join('', '//a/b'), '/a/b');
  assert.equal(names.join(['a', 'b', '//c/']), 'a/b/c');
  assert.equal(names.join('a', 'b', '//c/'), 'a/b/c');
  assert.equal(names.join(), '');
  assert.equal(names.join([]), '');
  assert.equal(names.join('/a//'), '/a');
  assert.equal(names.join(rootedEp, 'a'), rootedEp + '/a');
  assert.equal(names.join(rootedEp + '/', '/a'), rootedEp + '/a');
  assert.end();
});

test('names.stripBasename(name)', function(assert) {
  assert.equal(names.stripBasename('/'), '');
  assert.equal(names.stripBasename('/a'), '');
  assert.equal(names.stripBasename('/a/'), '');
  assert.equal(names.stripBasename('/a/b'), '/a');
  assert.equal(names.stripBasename('/a/b/'), '/a');
  assert.equal(names.stripBasename(''), '');
  assert.equal(names.stripBasename('a'), '');
  assert.equal(names.stripBasename('a/'), '');
  assert.equal(names.stripBasename('a/b'), 'a');
  assert.equal(names.stripBasename('a/b/'), 'a');
  assert.equal(names.stripBasename(rootedEp), '');
  assert.equal(names.stripBasename(rootedEp + '/a'), rootedEp);
  assert.end();
});

test('names.isRooted(name)', function(assert) {
  assert.ok(names.isRooted('/'));
  assert.ok(names.isRooted('/a'));
  assert.ok(names.isRooted('/a/b'));
  assert.ok(names.isRooted(rootedEp + '/'));
  assert.notOk(names.isRooted(''));
  assert.notOk(names.isRooted('a'));
  assert.notOk(names.isRooted('b'));
  assert.ok(names.isRooted('//a'));
  assert.ok(names.isRooted('//' + rootedEp));
  assert.ok(names.isRooted(rootedEp));
  assert.end();
});

test('names.clean(name)', function(assert) {
  assert.equal(names.clean(''), '');
  assert.equal(names.clean('a'), 'a');
  assert.equal(names.clean('/b'), '/b');
  assert.equal(names.clean('a/'), 'a');
  assert.equal(names.clean('/b/'), '/b');
  assert.equal(names.clean('//foo'), '/foo');
  assert.equal(names.clean('//foo///bar/////'), '/foo/bar');
  assert.equal(names.clean(rootedEp), rootedEp);
  assert.equal(names.clean('//' + rootedEp), rootedEp);
  assert.equal(names.clean(rootedEp + '//'), rootedEp);
  assert.end();
});

test('names.basename(name)', function(assert) {
  assert.equal(names.basename('/'), '');
  assert.equal(names.basename('/a'), 'a');
  assert.equal(names.basename('/a/'), 'a');
  assert.equal(names.basename('/a/b'), 'b');
  assert.equal(names.basename('/a/b/'), 'b');
  assert.equal(names.basename(''), '');
  assert.equal(names.basename('a'), 'a');
  assert.equal(names.basename('a/'), 'a');
  assert.equal(names.basename('a/b'), 'b');
  assert.equal(names.basename('a/b/'), 'b');
  assert.end();
});

test('names.basename(name)', function(assert) {
  assert.equal(names.basename('/'), '');
  assert.equal(names.basename('/a'), 'a');
  assert.equal(names.basename('/a/'), 'a');
  assert.equal(names.basename('/a/b'), 'b');
  assert.equal(names.basename('/a/b/'), 'b');
  assert.equal(names.basename(''), '');
  assert.equal(names.basename('a'), 'a');
  assert.equal(names.basename('a/'), 'a');
  assert.equal(names.basename('a/b'), 'b');
  assert.equal(names.basename('a/b/'), 'b');
  assert.equal(names.basename(rootedEp), ep);
  assert.equal(names.basename(rootedEp + '/'), ep);
  assert.equal(names.basename(rootedEp + '/b'), 'b');
  assert.end();
});

test('names.splitAddressName(name)', function(assert) {
  var tests = [
    ['', '', ''],
    ['/', '', ''],
    ['//', '', ''],
    ['//abc@@host/foo', 'abc@@host', 'foo'],
    ['a', '', 'a'],
    ['/a', 'a', ''],
    ['/a/', 'a', ''],
    ['a/b', '', 'a/b'],
    ['/a/b', 'a', 'b'],
    ['abc@@/foo', '', 'abc@@/foo'],
    ['/abc@@host/foo', 'abc@@host', 'foo'],
    ['/abc/foo', 'abc', 'foo'],
    ['/abc/foo//x', 'abc', 'foo/x'],
    ['/abc:20/foo', 'abc:20', 'foo'],
    ['/abc//foo/bar', 'abc', 'foo/bar'],
    ['/0abc:20/foo', '0abc:20', 'foo'],
    ['/abc1.2:20/foo', 'abc1.2:20', 'foo'],
    ['/abc:xx/foo', 'abc:xx', 'foo'],
    ['/-abc/foo', '-abc', 'foo'],
    ['/a.-abc/foo', 'a.-abc', 'foo'],
    ['/[01:02::]:444', '[01:02::]:444', ''],
    ['/[01:02::]:444/foo', '[01:02::]:444', 'foo'],
    ['/12.3.4.5:444', '12.3.4.5:444', ''],
    ['/12.3.4.5:444/foo', '12.3.4.5:444', 'foo'],
    ['/12.3.4.5', '12.3.4.5', ''],
    ['/12.3.4.5/foo', '12.3.4.5', 'foo'],
    ['/12.3.4.5//foo', '12.3.4.5', 'foo'],
    ['/12.3.4.5/foo//bar', '12.3.4.5', 'foo/bar'],
    ['/user@domain.com@host:1234/foo/bar', 'user@domain.com@host:1234', 'foo/bar'], // jshint ignore:line
    ['/(dev.v.io/services/mounttabled)@host:1234/foo/bar', '(dev.v.io/services/mounttabled)@host:1234', 'foo/bar'], // jshint ignore:line
    ['/(dev.v.io/services/mounttabled)@host:1234/', '(dev.v.io/services/mounttabled)@host:1234', ''], // jshint ignore:line
    ['/(dev.v.io/services/mounttabled)@host:1234', '(dev.v.io/services/mounttabled)@host:1234', ''], // jshint ignore:line
    // the next two tests have malformed endpoint, doesn't end in a @@
    ['/@6@tcp@127.0.0.1:22@@@@@s@dev.v.io/', '@6@tcp@127.0.0.1:22@@@@@s@dev.v.io', ''], // jshint ignore:line
    ['/@6@tcp@127.0.0.1:22@@@@@s@dev.v.io', '@6@tcp@127.0.0.1:22@@@@@s@dev.v.io', ''],  // jshint ignore:line
    ['/@6@tcp@127.0.0.1:22@@@@@s@dev.v.io/services/mounttabled@@/foo/bar', '@6@tcp@127.0.0.1:22@@@@@s@dev.v.io/services/mounttabled@@', 'foo/bar'],  // jshint ignore:line
    ['/@6@tcp@127.0.0.1:22@@@@@s@dev.v.io/services/mounttabled,staging.v.io/services/nsroot@@/foo/bar', '@6@tcp@127.0.0.1:22@@@@@s@dev.v.io/services/mounttabled,staging.v.io/services/nsroot@@', 'foo/bar'],  // jshint ignore:line
    ['/@@@127.0.0.1:22@@@@/foo/bar', '@@@127.0.0.1:22@@@@', 'foo/bar'], // jshint ignore:line
    ['/@6@tcp@127.0.0.1:22@@@@@s@dev.v.io/services/mounttabled,staging.v.io/services/nsroot@@', '@6@tcp@127.0.0.1:22@@@@@s@dev.v.io/services/mounttabled,staging.v.io/services/nsroot@@', ''],  // jshint ignore:line
    ['/@6@tcp@127.0.0.1:22@@@@@s@dev.v.io/services/mounttabled@@/foo/bar', '@6@tcp@127.0.0.1:22@@@@@s@dev.v.io/services/mounttabled@@', 'foo/bar'],  // jshint ignore:line
    [rootedEp, ep, ''],
    [rootedEp + '/b', ep, 'b'],
    [ep, '', ep],
  ];
  tests.forEach(function(t) {
    assert.deepEqual(names.splitAddressName(t[0]),
      { address: t[1], suffix: t[2] }
    );
  });

  assert.end();
});

test('names.blessingNamesFromAddress(addr)', function(assert) {
  var tests = [
    // Valid v6 endpoints
    ['@6@tcp@127.0.0.1:22@@@s@dev.v.io/services/mounttabled@@',
      ['dev.v.io/services/mounttabled']],
    ['@6@tcp@127.0.0.1:22@@@s@dev.v.io/services/mounttabled,foo/bar,batman@dccomics.com/car@@',  // jshint ignore:line
      ['dev.v.io/services/mounttabled', 'foo/bar', 'batman@dccomics.com/car']],
    // Host:port endpoints
    ['ns.dev.v.io:8101', []],
    ['(dev.v.io/service/mounttabled)@ns.dev.v.io:8101',
      ['dev.v.io/service/mounttabled']],
    // Invalid strings:
    // invalid endpoints since they do not end in @@.
    ['@6@tcp@127.0.0.1:22@@@@@s@dev.v.io/', []],
    ['@6@tcp@127.0.0.1:22@@@@@s@dev.v.io', []],
    // malformed version number
    ['@4c@tcp@127.0.0.1:22@@@@s@foo@@', []],
    ['@-4@tcp@127.0.0.1:22@@@@s@foo@@', []],
  ];
  tests.forEach(function(t) {
    assert.deepEqual(names.blessingNamesFromAddress(t[0]), t[1]);
  });
  assert.end();
});

test('names.[encode/decode]AsNameElement(name)', function(assert) {
  var tests = [
    ['', ''],
    ['/', '%2F'],
    ['%', '%25'],
    ['/The % rain in /% Spain', '%2FThe %25 rain in %2F%25 Spain'],
    ['/%/%', '%2F%25%2F%25'],
    ['ᚸӲ읔קAل', 'ᚸӲ읔קAل'],
    ['ᚸ/Ӳ%읔/ק%A+ل', 'ᚸ%2FӲ%25읔%2Fק%25A+ل'],
  ];

  tests.forEach(function(t) {
    assert.equal(names.encodeAsNameElement(t[0]), t[1], t[0] + ' encoding');
    assert.equal(names.decodeFromNameElement(t[1]), t[0], t[1] + ' decoding');
  });
  assert.end();
});
