| /* |
| * Copyright (c) 2012 Google Inc. |
| * |
| * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse |
| * Public License v1.0 which accompanies this distribution, and is available at |
| * |
| * http://www.eclipse.org/legal/epl-v10.html |
| */ |
| package com.google.eclipse.protobuf.resource; |
| |
| import static org.hamcrest.core.IsEqual.equalTo; |
| import static org.junit.Assert.assertNull; |
| import static org.junit.Assert.assertThat; |
| |
| import static com.google.eclipse.protobuf.junit.core.UnitTestModule.unitTestModule; |
| import static com.google.eclipse.protobuf.junit.core.XtextRule.overrideRuntimeModuleWith; |
| |
| import org.eclipse.core.runtime.IPath; |
| import org.eclipse.core.runtime.Path; |
| import org.eclipse.emf.common.util.URI; |
| import org.eclipse.xtext.resource.IResourceDescription; |
| import org.eclipse.xtext.resource.IResourceDescriptions; |
| import org.eclipse.xtext.resource.XtextResource; |
| import org.eclipse.xtext.resource.impl.ResourceSetBasedResourceDescriptions; |
| import org.junit.Rule; |
| import org.junit.Test; |
| |
| import com.google.eclipse.protobuf.junit.core.XtextRule; |
| import com.google.inject.Inject; |
| |
| /** |
| * Tests for <code>{@link IndexLookup#resourceIn(IPath)}</code>. |
| * |
| * @author alruiz@google.com (Alex Ruiz) |
| */ |
| public class IndexLookup_resourceIn_Test { |
| @Rule public XtextRule xtext = overrideRuntimeModuleWith(unitTestModule()); |
| |
| @Inject private IndexLookup lookup; |
| |
| // syntax = "proto2"; |
| // package com.google.proto; |
| // |
| // message Person {} |
| @Test public void should_find_resource_if_URIs_are_exact_match() { |
| XtextResource resource = xtext.resource(); |
| addToXtextIndex(resource); |
| URI resourceUri = resource.getURI(); |
| IPath path = Path.fromOSString(resourceUri.path()); |
| IResourceDescription description = lookup.resourceIn(path); |
| assertThat(description.getURI(), equalTo(resourceUri)); |
| } |
| |
| // syntax = "proto2"; |
| // package com.google.proto; |
| // |
| // message Person {} |
| @Test public void should_find_resource_matching_segments_if_URIs_are_not_exact_match() { |
| XtextResource resource = xtext.resource(); |
| addToXtextIndex(resource); |
| URI resourceUri = resource.getURI(); |
| String[] segments = resourceUri.segments(); |
| int segmentCount = segments.length; |
| String path = segments[segmentCount - 2] + "/" + segments[segmentCount - 1]; // last two segments. |
| IResourceDescription description = lookup.resourceIn(Path.fromOSString(path)); |
| assertThat(description.getURI(), equalTo(resourceUri)); |
| } |
| |
| // syntax = "proto2"; |
| // package com.google.proto; |
| // |
| // message Person {} |
| @Test public void should_return_null_if_matching_URI_was_not_found() { |
| XtextResource resource = xtext.resource(); |
| addToXtextIndex(resource); |
| IResourceDescription description = lookup.resourceIn(Path.fromOSString("some/crazy/path")); |
| assertNull(description); |
| } |
| |
| private void addToXtextIndex(XtextResource resource) { |
| IResourceDescriptions xtextIndex = lookup.getXtextIndex(); |
| if (xtextIndex instanceof ResourceSetBasedResourceDescriptions) { |
| ((ResourceSetBasedResourceDescriptions) xtextIndex).setContext(resource); |
| } |
| } |
| } |