blob: 5e57523b763bad656f1e6ae29d0958e3a425fe6a [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.javac.testing.impl;
import com.google.gwt.dev.resource.Resource;
import com.google.gwt.dev.resource.ResourceOracle;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
/**
* A simple {@link ResourceOracle} for testing.
*/
public class MockResourceOracle implements ResourceOracle {
private Map<String, Resource> exportedMap = Collections.emptyMap();
private Set<Resource> exportedValues = Collections.emptySet();
public MockResourceOracle(Resource... resources) {
add(resources);
}
public void add(Resource... resources) {
Map<String, Resource> newMap = new HashMap<String, Resource>(exportedMap);
for (Resource resource : resources) {
String path = resource.getPath();
if (newMap.containsKey(path)) {
throw new IllegalArgumentException(String.format(
"Encountered two resources with the same path [%s]", path));
}
newMap.put(path, resource);
}
export(newMap);
}
public void addOrReplace(Resource... resources) {
Map<String, Resource> newMap = new HashMap<String, Resource>(exportedMap);
for (Resource resource : resources) {
newMap.put(resource.getPath(), resource);
}
export(newMap);
}
public void clear() {
}
public Set<String> getPathNames() {
return exportedMap.keySet();
}
public Map<String, Resource> getResourceMap() {
return exportedMap;
}
public Set<Resource> getResources() {
return exportedValues;
}
public void remove(String... paths) {
Map<String, Resource> newMap = new HashMap<String, Resource>(exportedMap);
for (String path : paths) {
Resource oldValue = newMap.remove(path);
if (oldValue == null) {
throw new IllegalArgumentException(String.format(
"Attempted to remove non-existing resource with path [%s]", path));
}
}
export(newMap);
}
public void replace(Resource... resources) {
Map<String, Resource> newMap = new HashMap<String, Resource>(exportedMap);
for (Resource resource : resources) {
String path = resource.getPath();
if (!newMap.containsKey(path)) {
throw new IllegalArgumentException(String.format(
"Attempted to replace non-existing resource with path [%s]", path));
}
newMap.put(path, resource);
}
export(newMap);
}
private void export(Map<String, Resource> newMap) {
exportedMap = Collections.unmodifiableMap(newMap);
// Make a new hash set for constant lookup.
exportedValues = Collections.unmodifiableSet(new HashSet<Resource>(
exportedMap.values()));
}
}