// Copyright 2013 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:typed_data';

import 'package:flutter_test/flutter_test.dart';
import 'package:google_maps_flutter_platform_interface/google_maps_flutter_platform_interface.dart';

void main() {
  TestWidgetsFlutterBinding.ensureInitialized();

  group('tile tests', () {
    test('toJson returns correct format', () async {
      final Uint8List data = Uint8List.fromList([0, 1]);
      final Tile tile = Tile(100, 200, data);
      final Object json = tile.toJson();
      expect(json, <String, Object>{
        'width': 100,
        'height': 200,
        'data': data,
      });
    });

    test('toJson handles null data', () async {
      const Tile tile = Tile(0, 0, null);
      final Object json = tile.toJson();
      expect(json, <String, Object>{
        'width': 0,
        'height': 0,
      });
    });
  });
}
