blob: 254c0f9cfd313b738d57aa85887b0bb70076dafe [file] [log] [blame]
/*
* Copyright 2008 Google Inc.
*
* Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
*
* 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.gwt.dev.resource.impl;
import com.google.gwt.core.ext.TreeLogger;
import com.google.gwt.dev.resource.Resource;
import junit.framework.Assert;
import java.util.HashMap;
import java.util.IdentityHashMap;
import java.util.Map;
public class MockClassPathEntry extends ClassPathEntry {
final String pathRoot;
private final Map<String, MockAbstractResource> resourceMap = new HashMap<String, MockAbstractResource>();
/**
* By default, MockClassPathEntry has an all-inclusive path prefix. Tests may
* change it by calling {@link #setPathPrefixes(PathPrefixSet)}.
*/
public MockClassPathEntry(String pathRoot) {
this.pathRoot = pathRoot;
}
public void addResource(String resourcePath) {
Resource old = resourceMap.get(resourcePath);
Assert.assertNull(
"resource already exists; use updateResource() to replace", old);
resourceMap.put(resourcePath, createMockResource(resourcePath));
}
@Override
public Map<AbstractResource, PathPrefix> findApplicableResources(
TreeLogger logger, PathPrefixSet pathPrefixes) {
// Only include resources that have the prefix and pass its filter.
Map<AbstractResource, PathPrefix> results = new IdentityHashMap<AbstractResource, PathPrefix>();
for (Map.Entry<String, MockAbstractResource> entry : resourceMap.entrySet()) {
String path = entry.getKey();
PathPrefix prefix = null;
if ((prefix = pathPrefixes.includesResource(path)) != null) {
results.put(entry.getValue(), prefix);
}
}
return results;
}
@Override
public String getLocation() {
return pathRoot;
}
public void removeResource(String resourcePath) {
Resource old = resourceMap.get(resourcePath);
Assert.assertNotNull(
"resource does not already exists; use addResource() to add it first",
old);
resourceMap.remove(resourcePath);
}
public void updateResource(String resourcePath) {
MockAbstractResource old = resourceMap.get(resourcePath);
Assert.assertNotNull(
"resource does not already exists; use addResource() if you were trying to add",
old);
old.setStale(true);
resourceMap.put(resourcePath, createMockResource(resourcePath));
}
private MockAbstractResource createMockResource(final String path) {
return new MockAbstractResource(this, path);
}
}