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

import 'dart:js' as js;

import 'package:flutter_driver/src/extension/_extension_web.dart';
import 'package:flutter_test/flutter_test.dart';

void main() {
  group('test web_extension', () {
    late Future<Map<String, dynamic>> Function(Map<String, String>) call;

    setUp(() {
      call = (Map<String, String> args) async {
        return Future<Map<String, dynamic>>.value(args);
      };
    });

    test('web_extension should register a function', () {
      expect(() => registerWebServiceExtension(call),
          returnsNormally);

      expect(js.context.hasProperty(r'$flutterDriver'), true);
      expect(js.context[r'$flutterDriver'], isNotNull);

      expect(js.context.hasProperty(r'$flutterDriverResult'), true);
      expect(js.context[r'$flutterDriverResult'], isNull);
    });
  });
}
