// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

// @dart = 2.9

import 'dart:html';

import 'package:expect/minitest.dart';

main() {
  group('supported', () {
    test('supported', () {
      expect(RtcPeerConnection.supported, isTrue);
    });
  });

  group('functionality', () {
    // More thorough testing of this API requires the user to
    // explicitly click "allow this site to access my camera and/or microphone."
    // or particularly allow that site to always have those permission on each
    // computer the test is run. For more through tests, see
    // interactive_test.dart.
    if (RtcPeerConnection.supported) {
      test('peer connection', () {
        var pc = new RtcPeerConnection({
          'iceServers': [
            {'url': 'stun:216.93.246.18:3478'}
          ]
        });
        expect(pc is RtcPeerConnection, isTrue);
        pc.onIceCandidate.listen((candidate) {});
      });

      test('ice candidate', () {
        var candidate =
            new RtcIceCandidate({'sdpMLineIndex': 1, 'candidate': 'hello'});
        expect(candidate is RtcIceCandidate, isTrue);
      });

      test('session description', () {
        var description =
            new RtcSessionDescription({'sdp': 'foo', 'type': 'offer'});
        expect(description is RtcSessionDescription, isTrue);
      });
    }
  });
}
