// Copyright (c) 2019, 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.

@Tags(['daily'])
@TestOn('vm')
@Timeout(Duration(minutes: 2))

import 'package:dwds/src/utilities/objects.dart';
import 'package:test/test.dart';
import 'package:webkit_inspection_protocol/webkit_inspection_protocol.dart';

void main() {
  group('Property', () {
    final exampleMap = {'objectId': '1234', 'value': 'abcd'};

    test('from a map', () {
      // Verify that we behave the same whether created from a Map
      // or from a RemoteObject.
      final property = Property({'name': 'prop', 'value': exampleMap});
      expect(property.rawValue, exampleMap);
      final value = property.value!;
      expect(value.objectId, '1234');
      expect(value.value, 'abcd');
      expect(property.name, 'prop');
    });
    test('from a RemoteObject', () {
      final remoteObject = RemoteObject({'objectId': '1234', 'value': 'abcd'});
      final property = Property({'name': 'prop', 'value': remoteObject});
      expect(property.rawValue, remoteObject);
      final value = property.value!;
      expect(value.objectId, '1234');
      expect(value.value, 'abcd');
      expect(property.name, 'prop');
    });

    test('stripping the "Symbol(" from a private field', () {
      final property =
          Property({'name': 'Symbol(_privateThing)', 'value': exampleMap});
      expect(property.name, '_privateThing');
    });
  });
}
