// Copyright (c) 2017, 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. import 'package:file/file.dart'; import 'package:file/memory.dart'; import 'package:test/test.dart'; void main() { test('Read operations invoke opHandle', () async { List contexts = []; List operations = []; MemoryFileSystem fs = MemoryFileSystem.test( opHandle: (String context, FileSystemOp operation) { if (operation == FileSystemOp.read) { contexts.add(context); operations.add(operation); } }); final File file = fs.file('test')..createSync(); await file.readAsBytes(); file.readAsBytesSync(); await file.readAsString(); file.readAsStringSync(); expect(contexts, ['test', 'test', 'test', 'test']); expect(operations, [ FileSystemOp.read, FileSystemOp.read, FileSystemOp.read, FileSystemOp.read ]); }); test('Write operations invoke opHandle', () async { List contexts = []; List operations = []; MemoryFileSystem fs = MemoryFileSystem.test( opHandle: (String context, FileSystemOp operation) { if (operation == FileSystemOp.write) { contexts.add(context); operations.add(operation); } }); final File file = fs.file('test')..createSync(); await file.writeAsBytes([]); file.writeAsBytesSync([]); await file.writeAsString(''); file.writeAsStringSync(''); expect(contexts, ['test', 'test', 'test', 'test']); expect(operations, [ FileSystemOp.write, FileSystemOp.write, FileSystemOp.write, FileSystemOp.write ]); }); test('Delete operations invoke opHandle', () async { List contexts = []; List operations = []; MemoryFileSystem fs = MemoryFileSystem.test( opHandle: (String context, FileSystemOp operation) { if (operation == FileSystemOp.delete) { contexts.add(context); operations.add(operation); } }); final File file = fs.file('test')..createSync(); final Directory directory = fs.directory('testDir')..createSync(); final Link link = fs.link('testLink')..createSync('foo'); await file.delete(); file.createSync(); file.deleteSync(); await directory.delete(); directory.createSync(); directory.deleteSync(); await link.delete(); link.createSync('foo'); link.deleteSync(); expect(contexts, ['test', 'test', 'testDir', 'testDir', 'testLink', 'testLink']); expect(operations, [ FileSystemOp.delete, FileSystemOp.delete, FileSystemOp.delete, FileSystemOp.delete, FileSystemOp.delete, FileSystemOp.delete, ]); }); test('Create operations invoke opHandle', () async { List contexts = []; List operations = []; MemoryFileSystem fs = MemoryFileSystem.test( opHandle: (String context, FileSystemOp operation) { if (operation == FileSystemOp.create) { contexts.add(context); operations.add(operation); } }); fs.file('testA').createSync(); await fs.file('testB').create(); fs.directory('testDirA').createSync(); await fs.directory('testDirB').create(); fs.link('testLinkA').createSync('foo'); await fs.link('testLinkB').create('foo'); fs.currentDirectory.createTempSync('tmp.bar'); await fs.currentDirectory.createTemp('tmp.bar'); expect(contexts, [ 'testA', 'testB', 'testDirA', 'testDirB', 'testLinkA', 'testLinkB', startsWith('/tmp.bar'), startsWith('/tmp.bar'), ]); expect(operations, [ FileSystemOp.create, FileSystemOp.create, FileSystemOp.create, FileSystemOp.create, FileSystemOp.create, FileSystemOp.create, FileSystemOp.create, FileSystemOp.create, ]); }); test('Open operations invoke opHandle', () async { List contexts = []; List operations = []; MemoryFileSystem fs = MemoryFileSystem.test( opHandle: (String context, FileSystemOp operation) { if (operation == FileSystemOp.open) { contexts.add(context); operations.add(operation); } }); final File file = fs.file('test')..createSync(); await file.open(); file.openSync(); file.openRead(); file.openWrite(); expect(contexts, ['test', 'test', 'test', 'test']); expect(operations, [ FileSystemOp.open, FileSystemOp.open, FileSystemOp.open, FileSystemOp.open, ]); }); test('Copy operations invoke opHandle', () async { List contexts = []; List operations = []; MemoryFileSystem fs = MemoryFileSystem.test( opHandle: (String context, FileSystemOp operation) { if (operation == FileSystemOp.copy) { contexts.add(context); operations.add(operation); } }); final File file = fs.file('test')..createSync(); await file.copy('A'); file.copySync('B'); expect(contexts, ['test', 'test']); expect(operations, [ FileSystemOp.copy, FileSystemOp.copy, ]); }); test('Exists operations invoke opHandle', () async { List contexts = []; List operations = []; MemoryFileSystem fs = MemoryFileSystem.test( opHandle: (String context, FileSystemOp operation) { if (operation == FileSystemOp.exists) { contexts.add(context); operations.add(operation); } }); fs.file('testA').existsSync(); await fs.file('testB').exists(); fs.directory('testDirA').existsSync(); await fs.directory('testDirB').exists(); fs.link('testLinkA').existsSync(); await fs.link('testLinkB').exists(); expect(contexts, [ 'testA', 'testB', 'testDirA', 'testDirB', 'testLinkA', 'testLinkB', ]); expect(operations, [ FileSystemOp.exists, FileSystemOp.exists, FileSystemOp.exists, FileSystemOp.exists, FileSystemOp.exists, FileSystemOp.exists, ]); }); test('FileSystemOp toString', () { expect(FileSystemOp.create.toString(), 'FileSystemOp.create'); expect(FileSystemOp.delete.toString(), 'FileSystemOp.delete'); expect(FileSystemOp.read.toString(), 'FileSystemOp.read'); expect(FileSystemOp.write.toString(), 'FileSystemOp.write'); expect(FileSystemOp.exists.toString(), 'FileSystemOp.exists'); }); }