// 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 'package:file/file.dart';
import 'package:file/memory.dart';
import 'package:flutter_plugin_tools/src/common/file_utils.dart';
import 'package:test/test.dart';

void main() {
  group('childFileWithSubcomponents', () {
    test('works on Posix', () async {
      final FileSystem fileSystem = MemoryFileSystem();

      final Directory base = fileSystem.directory('/').childDirectory('base');
      final File file =
          childFileWithSubcomponents(base, <String>['foo', 'bar', 'baz.txt']);

      expect(file.absolute.path, '/base/foo/bar/baz.txt');
    });

    test('works on Windows', () async {
      final FileSystem fileSystem =
          MemoryFileSystem(style: FileSystemStyle.windows);

      final Directory base =
          fileSystem.directory(r'C:\').childDirectory('base');
      final File file =
          childFileWithSubcomponents(base, <String>['foo', 'bar', 'baz.txt']);

      expect(file.absolute.path, r'C:\base\foo\bar\baz.txt');
    });
  });

  group('childDirectoryWithSubcomponents', () {
    test('works on Posix', () async {
      final FileSystem fileSystem = MemoryFileSystem();

      final Directory base = fileSystem.directory('/').childDirectory('base');
      final Directory dir =
          childDirectoryWithSubcomponents(base, <String>['foo', 'bar', 'baz']);

      expect(dir.absolute.path, '/base/foo/bar/baz');
    });

    test('works on Windows', () async {
      final FileSystem fileSystem =
          MemoryFileSystem(style: FileSystemStyle.windows);

      final Directory base =
          fileSystem.directory(r'C:\').childDirectory('base');
      final Directory dir =
          childDirectoryWithSubcomponents(base, <String>['foo', 'bar', 'baz']);

      expect(dir.absolute.path, r'C:\base\foo\bar\baz');
    });
  });
}
