/*
* Copyright (c) 2012, the Dart project authors.
*
* Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
* in compliance with the License. You may obtain a copy of the License at
*
* http://www.eclipse.org/legal/epl-v10.html
*
* Unless required by applicable law or agreed to in writing, software distributed under the License
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing permissions and limitations under
* the License.
*/
package com.google.dart.engine.source;
import com.google.dart.engine.sdk.DartSdk;
import com.google.dart.engine.sdk.DirectoryBasedDartSdk;
import com.google.dart.engine.utilities.os.OSUtilities;
import static com.google.dart.engine.utilities.io.FileUtilities2.createFile;
import junit.framework.TestCase;
import java.io.File;
import java.net.URI;
public class FileBasedSourceTest extends TestCase {
public void test_equals_false_differentFiles() {
File file1 = createFile("/does/not/exist1.dart");
File file2 = createFile("/does/not/exist2.dart");
FileBasedSource source1 = new FileBasedSource(file1);
FileBasedSource source2 = new FileBasedSource(file2);
assertFalse(source1.equals(source2));
}
public void test_equals_false_null() {
File file = createFile("/does/not/exist1.dart");
FileBasedSource source1 = new FileBasedSource(file);
assertFalse(source1.equals(null));
}
public void test_equals_true() {
File file1 = createFile("/does/not/exist.dart");
File file2 = createFile("/does/not/exist.dart");
FileBasedSource source1 = new FileBasedSource(file1);
FileBasedSource source2 = new FileBasedSource(file2);
assertTrue(source1.equals(source2));
}
public void test_getEncoding() {
SourceFactory factory = new SourceFactory(new FileUriResolver());
String fullPath = "/does/not/exist.dart";
File file = createFile(fullPath);
FileBasedSource source = new FileBasedSource(file);
assertEquals(source, factory.fromEncoding(source.getEncoding()));
}
public void test_getFullName() {
String fullPath = "/does/not/exist.dart";
File file = createFile(fullPath);
FileBasedSource source = new FileBasedSource(file);
assertEquals(file.getAbsolutePath(), source.getFullName());
}
public void test_getShortName() {
File file = createFile("/does/not/exist.dart");
FileBasedSource source = new FileBasedSource(file);
assertEquals("exist.dart", source.getShortName());
}
public void test_hashCode() {
File file1 = createFile("/does/not/exist.dart");
File file2 = createFile("/does/not/exist.dart");
FileBasedSource source1 = new FileBasedSource(file1);
FileBasedSource source2 = new FileBasedSource(file2);
assertEquals(source1.hashCode(), source2.hashCode());
}
public void test_isInSystemLibrary_contagious() throws Exception {
File sdkDirectory = DirectoryBasedDartSdk.getDefaultSdkDirectory();
assertNotNull(sdkDirectory);
DartSdk sdk = new DirectoryBasedDartSdk(sdkDirectory);
UriResolver resolver = new DartUriResolver(sdk);
SourceFactory factory = new SourceFactory(resolver);
// resolve dart:core
Source result = resolver.resolveAbsolute(new URI("dart:core"));
assertNotNull(result);
assertTrue(result.isInSystemLibrary());
// system libraries reference only other system libraries
Source partSource = factory.resolveUri(result, "num.dart");
assertNotNull(partSource);
assertTrue(partSource.isInSystemLibrary());
}
public void test_isInSystemLibrary_false() {
File file = createFile("/does/not/exist.dart");
FileBasedSource source = new FileBasedSource(file);
assertNotNull(source);
assertEquals(file.getAbsolutePath(), source.getFullName());
assertFalse(source.isInSystemLibrary());
}
public void test_issue14500() throws Exception {
// see https://code.google.com/p/dart/issues/detail?id=14500
FileBasedSource source = new FileBasedSource(createFile("/some/packages/foo:bar.dart"));
assertNotNull(source);
assertFalse(source.exists());
}
public void test_resolveRelative_dart_fileName() throws Exception {
File file = createFile("/a/b/test.dart");
FileBasedSource source = new FileBasedSource(new URI("dart:test"), file);
assertNotNull(source);
URI relative = source.resolveRelativeUri(new URI("lib.dart"));
assertNotNull(relative);
assertEquals("dart:test/lib.dart", relative.toString());
}
public void test_resolveRelative_dart_filePath() throws Exception {
File file = createFile("/a/b/test.dart");
FileBasedSource source = new FileBasedSource(new URI("dart:test"), file);
assertNotNull(source);
URI relative = source.resolveRelativeUri(new URI("c/lib.dart"));
assertNotNull(relative);
assertEquals("dart:test/c/lib.dart", relative.toString());
}
public void test_resolveRelative_dart_filePathWithParent() throws Exception {
File file = createFile("/a/b/test.dart");
FileBasedSource source = new FileBasedSource(new URI("dart:test/b/test.dart"), file);
assertNotNull(source);
URI relative = source.resolveRelativeUri(new URI("../c/lib.dart"));
assertNotNull(relative);
assertEquals("dart:test/c/lib.dart", relative.toString());
}
public void test_resolveRelative_file_fileName() throws Exception {
if (OSUtilities.isWindows()) {
// On Windows, the URI that is produced includes a drive letter, which I believe is not
// consistent across all machines that might run this test.
return;
}
File file = createFile("/a/b/test.dart");
FileBasedSource source = new FileBasedSource(file);
assertNotNull(source);
URI relative = source.resolveRelativeUri(new URI("lib.dart"));
assertNotNull(relative);
assertEquals("file:/a/b/lib.dart", relative.toString());
}
public void test_resolveRelative_file_filePath() throws Exception {
if (OSUtilities.isWindows()) {
// On Windows, the URI that is produced includes a drive letter, which I believe is not
// consistent across all machines that might run this test.
return;
}
File file = createFile("/a/b/test.dart");
FileBasedSource source = new FileBasedSource(file);
assertNotNull(source);
URI relative = source.resolveRelativeUri(new URI("c/lib.dart"));
assertNotNull(relative);
assertEquals("file:/a/b/c/lib.dart", relative.toString());
}
public void test_resolveRelative_file_filePathWithParent() throws Exception {
if (OSUtilities.isWindows()) {
// On Windows, the URI that is produced includes a drive letter, which I believe is not
// consistent across all machines that might run this test.
return;
}
File file = createFile("/a/b/test.dart");
FileBasedSource source = new FileBasedSource(file);
assertNotNull(source);
URI relative = source.resolveRelativeUri(new URI("../c/lib.dart"));
assertNotNull(relative);
assertEquals("file:/a/c/lib.dart", relative.toString());
}
public void test_resolveRelative_package_fileName() throws Exception {
File file = createFile("/a/b/test.dart");
FileBasedSource source = new FileBasedSource(new URI("package:b/test.dart"), file);
assertNotNull(source);
URI relative = source.resolveRelativeUri(new URI("lib.dart"));
assertNotNull(relative);
assertEquals("package:b/lib.dart", relative.toString());
}
public void test_resolveRelative_package_fileNameWithoutPackageName() throws Exception {
File file = createFile("/a/b/test.dart");
FileBasedSource source = new FileBasedSource(new URI("package:test.dart"), file);
assertNotNull(source);
URI relative = source.resolveRelativeUri(new URI("lib.dart"));
assertNotNull(relative);
assertEquals("package:lib.dart", relative.toString());
}
public void test_resolveRelative_package_filePath() throws Exception {
File file = createFile("/a/b/test.dart");
FileBasedSource source = new FileBasedSource(new URI("package:b/test.dart"), file);
assertNotNull(source);
URI relative = source.resolveRelativeUri(new URI("c/lib.dart"));
assertNotNull(relative);
assertEquals("package:b/c/lib.dart", relative.toString());
}
public void test_resolveRelative_package_filePathWithParent() throws Exception {
File file = createFile("/a/b/test.dart");
FileBasedSource source = new FileBasedSource(new URI("package:a/b/test.dart"), file);
assertNotNull(source);
URI relative = source.resolveRelativeUri(new URI("../c/lib.dart"));
assertNotNull(relative);
assertEquals("package:a/c/lib.dart", relative.toString());
}
public void test_system() throws Exception {
File file = createFile("/does/not/exist.dart");
FileBasedSource source = new FileBasedSource(new URI("dart:core"), file);
assertNotNull(source);
assertEquals(file.getAbsolutePath(), source.getFullName());
assertTrue(source.isInSystemLibrary());
}
}