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

library io_internet_address_apptests;

import 'dart:async';
import 'dart:io';

import 'package:apptest/apptest.dart';
import 'package:mojo/application.dart';
import 'package:mojo/bindings.dart';
import 'package:mojo/core.dart';

tests(Application application, String url) {
  group('InternetAddress Apptests', () {
    test('Parse IPv4', () async {
      var localhost = new InternetAddress('127.0.0.1');
      expect(localhost, equals(InternetAddress.LOOPBACK_IP_V4));
    });
    test('Parse IPv6', () async {
      var localhost = new InternetAddress('0:0:0:0:0:0:0:1');
      expect(localhost, equals(InternetAddress.LOOPBACK_IP_V6));
    });
    test('Reverse', () async {
      var result = await InternetAddress.LOOPBACK_IP_V4.reverse();
      expect(result.host, equals('localhost'));
    });
    test('Lookup IPv4', () async {
      var result =
          await InternetAddress.lookup('localhost',
                                       type:InternetAddressType.IP_V4);
      expect(result.length, greaterThan(0));
      expect(result[0], equals(InternetAddress.LOOPBACK_IP_V4));
    });
    test('Lookup ANY', () async {
      var result =
          await InternetAddress.lookup('localhost',
                                       type:InternetAddressType.ANY);
      expect(result.length, greaterThan(0));
    });
    test('Lookup failure', () async {
      var result;
      var exceptionCaught = false;
      try {
        result = await InternetAddress.lookup('local.7778888');
        // Not hit.
        expect(true, isFalse);
      } on OSError catch(e) {
        exceptionCaught = true;
        expect(e.errorCode, isNot(equals(0)));
      }
      expect(exceptionCaught, isTrue);
    });
  });
}
