OLD | NEW |
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 library memory_file_system; | 5 library memory_file_system; |
6 | 6 |
7 import 'dart:async'; | 7 import 'dart:async'; |
8 import 'dart:collection'; | 8 import 'dart:collection'; |
9 import 'dart:core' hide Resource; | 9 import 'dart:core' hide Resource; |
10 | 10 |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
101 newFolder(posix.dirname(path)); | 101 newFolder(posix.dirname(path)); |
102 _MemoryDummyLink link = new _MemoryDummyLink(this, path); | 102 _MemoryDummyLink link = new _MemoryDummyLink(this, path); |
103 _pathToResource[path] = link; | 103 _pathToResource[path] = link; |
104 _pathToTimestamp[path] = nextStamp++; | 104 _pathToTimestamp[path] = nextStamp++; |
105 _notifyWatchers(path, ChangeType.ADD); | 105 _notifyWatchers(path, ChangeType.ADD); |
106 return link; | 106 return link; |
107 } | 107 } |
108 | 108 |
109 File newFile(String path, String content, [int stamp]) { | 109 File newFile(String path, String content, [int stamp]) { |
110 path = posix.normalize(path); | 110 path = posix.normalize(path); |
111 newFolder(posix.dirname(path)); | 111 _MemoryResource resource = _pathToResource[path]; |
| 112 _MemoryResource folder = _pathToResource[posix.dirname(path)]; |
| 113 if (folder == null) { |
| 114 newFolder(posix.dirname(path)); |
| 115 } else if (folder is! Folder) { |
| 116 throw new ArgumentError('Cannot create file ($path) as child of file'); |
| 117 } |
112 _MemoryFile file = new _MemoryFile(this, path); | 118 _MemoryFile file = new _MemoryFile(this, path); |
113 _pathToResource[path] = file; | 119 _pathToResource[path] = file; |
114 _pathToContent[path] = content; | 120 _pathToContent[path] = content; |
115 _pathToTimestamp[path] = stamp != null ? stamp : nextStamp++; | 121 _pathToTimestamp[path] = stamp != null ? stamp : nextStamp++; |
116 _notifyWatchers(path, ChangeType.ADD); | 122 _notifyWatchers(path, ChangeType.ADD); |
117 return file; | 123 return file; |
118 } | 124 } |
119 | 125 |
120 Folder newFolder(String path) { | 126 Folder newFolder(String path) { |
121 path = posix.normalize(path); | 127 path = posix.normalize(path); |
122 if (!path.startsWith('/')) { | 128 if (!path.startsWith('/')) { |
123 throw new ArgumentError("Path must start with '/'"); | 129 throw new ArgumentError("Path must start with '/'"); |
124 } | 130 } |
125 _MemoryResource resource = _pathToResource[path]; | 131 _MemoryResource resource = _pathToResource[path]; |
126 if (resource == null) { | 132 if (resource == null) { |
127 String parentPath = posix.dirname(path); | 133 String parentPath = posix.dirname(path); |
128 if (parentPath != path) { | 134 if (parentPath != path) { |
129 newFolder(parentPath); | 135 newFolder(parentPath); |
130 } | 136 } |
131 _MemoryFolder folder = new _MemoryFolder(this, path); | 137 _MemoryFolder folder = new _MemoryFolder(this, path); |
132 _pathToResource[path] = folder; | 138 _pathToResource[path] = folder; |
133 _pathToTimestamp[path] = nextStamp++; | 139 _pathToTimestamp[path] = nextStamp++; |
| 140 _notifyWatchers(path, ChangeType.ADD); |
134 return folder; | 141 return folder; |
135 } else if (resource is _MemoryFolder) { | 142 } else if (resource is _MemoryFolder) { |
| 143 _notifyWatchers(path, ChangeType.ADD); |
136 return resource; | 144 return resource; |
137 } else { | 145 } else { |
138 String message = | 146 String message = |
139 'Folder expected at ' "'$path'" 'but ${resource.runtimeType} found'; | 147 'Folder expected at ' "'$path'" 'but ${resource.runtimeType} found'; |
140 throw new ArgumentError(message); | 148 throw new ArgumentError(message); |
141 } | 149 } |
142 } | 150 } |
143 | 151 |
144 File updateFile(String path, String content, [int stamp]) { | 152 File updateFile(String path, String content, [int stamp]) { |
145 path = posix.normalize(path); | 153 path = posix.normalize(path); |
(...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
472 bool operator ==(other) { | 480 bool operator ==(other) { |
473 if (runtimeType != other.runtimeType) { | 481 if (runtimeType != other.runtimeType) { |
474 return false; | 482 return false; |
475 } | 483 } |
476 return path == other.path; | 484 return path == other.path; |
477 } | 485 } |
478 | 486 |
479 @override | 487 @override |
480 String toString() => path; | 488 String toString() => path; |
481 } | 489 } |
OLD | NEW |