blob: 2beae8b16604ae9695c755106005d8bd55f373ad [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 java.io.IOException;
import java.net.URISyntaxException;
import java.util.Set;
public class ClassPathEntryTest extends AbstractResourceOrientedTestBase {
public void testAllCpe1FilesFound() throws URISyntaxException, IOException {
testAllCpe1FilesFound(getClassPathEntry1AsJar());
testAllCpe1FilesFound(getClassPathEntry1AsDirectory());
testAllCpe1FilesFound(getClassPathEntry1AsZip());
}
public void testAllCpe2FilesFound() throws URISyntaxException, IOException {
testAllCpe2FilesFound(getClassPathEntry2AsJar());
testAllCpe2FilesFound(getClassPathEntry2AsDirectory());
testAllCpe2FilesFound(getClassPathEntry2AsZip());
}
public void testPathPrefixSetChanges() throws IOException, URISyntaxException {
ClassPathEntry cpe1jar = getClassPathEntry1AsJar();
ClassPathEntry cpe1dir = getClassPathEntry1AsDirectory();
ClassPathEntry cpe1zip = getClassPathEntry1AsZip();
ClassPathEntry cpe2jar = getClassPathEntry2AsJar();
ClassPathEntry cpe2dir = getClassPathEntry2AsDirectory();
ClassPathEntry cpe2zip = getClassPathEntry2AsZip();
testPathPrefixSetChanges(cpe1jar, cpe2jar);
testPathPrefixSetChanges(cpe1dir, cpe2jar);
testPathPrefixSetChanges(cpe1zip, cpe2jar);
testPathPrefixSetChanges(cpe1dir, cpe2dir);
testPathPrefixSetChanges(cpe1jar, cpe2dir);
testPathPrefixSetChanges(cpe1zip, cpe2dir);
testPathPrefixSetChanges(cpe1dir, cpe2zip);
testPathPrefixSetChanges(cpe1jar, cpe2zip);
testPathPrefixSetChanges(cpe1zip, cpe2zip);
}
public void testUseOfPrefixesWithFiltering() throws IOException,
URISyntaxException {
ClassPathEntry cpe1jar = getClassPathEntry1AsJar();
ClassPathEntry cpe1dir = getClassPathEntry1AsDirectory();
ClassPathEntry cpe1zip = getClassPathEntry1AsZip();
ClassPathEntry cpe2jar = getClassPathEntry2AsJar();
ClassPathEntry cpe2dir = getClassPathEntry2AsDirectory();
ClassPathEntry cpe2zip = getClassPathEntry2AsZip();
testUseOfPrefixesWithFiltering(cpe1dir, cpe2jar);
testUseOfPrefixesWithFiltering(cpe1jar, cpe2jar);
testUseOfPrefixesWithFiltering(cpe1dir, cpe2jar);
testUseOfPrefixesWithFiltering(cpe1zip, cpe2jar);
testUseOfPrefixesWithFiltering(cpe1dir, cpe2dir);
testUseOfPrefixesWithFiltering(cpe1jar, cpe2dir);
testUseOfPrefixesWithFiltering(cpe1zip, cpe2dir);
testUseOfPrefixesWithFiltering(cpe1dir, cpe2zip);
testUseOfPrefixesWithFiltering(cpe1jar, cpe2zip);
testUseOfPrefixesWithFiltering(cpe1zip, cpe2zip);
}
public void testUseOfPrefixesWithoutFiltering() throws URISyntaxException,
IOException {
ClassPathEntry cpe1jar = getClassPathEntry1AsJar();
ClassPathEntry cpe1dir = getClassPathEntry1AsDirectory();
ClassPathEntry cpe1zip = getClassPathEntry1AsZip();
ClassPathEntry cpe2jar = getClassPathEntry2AsJar();
ClassPathEntry cpe2dir = getClassPathEntry2AsDirectory();
ClassPathEntry cpe2zip = getClassPathEntry2AsZip();
testUseOfPrefixesWithoutFiltering(cpe1dir, cpe2jar);
testUseOfPrefixesWithoutFiltering(cpe1jar, cpe2jar);
testUseOfPrefixesWithoutFiltering(cpe1dir, cpe2jar);
testUseOfPrefixesWithoutFiltering(cpe1zip, cpe2jar);
testUseOfPrefixesWithoutFiltering(cpe1dir, cpe2dir);
testUseOfPrefixesWithoutFiltering(cpe1jar, cpe2dir);
testUseOfPrefixesWithoutFiltering(cpe1zip, cpe2dir);
testUseOfPrefixesWithoutFiltering(cpe1dir, cpe2zip);
testUseOfPrefixesWithoutFiltering(cpe1jar, cpe2zip);
testUseOfPrefixesWithoutFiltering(cpe1zip, cpe2zip);
}
public void testUseOfPrefixesWithoutFiltering(ClassPathEntry cpe1,
ClassPathEntry cpe2) {
TreeLogger logger = createTestTreeLogger();
PathPrefixSet pps = new PathPrefixSet();
pps.add(new PathPrefix("com/google/gwt/user/client/", null));
pps.add(new PathPrefix("com/google/gwt/i18n/client/", null));
{
// Examine cpe1.
Set<AbstractResource> r = cpe1.findApplicableResources(logger, pps).keySet();
assertEquals(3, r.size());
assertPathIncluded(r, "com/google/gwt/user/client/Command.java");
assertPathIncluded(r, "com/google/gwt/user/client/Timer.java");
assertPathIncluded(r, "com/google/gwt/user/client/ui/Widget.java");
}
{
// Examine cpe2.
Set<AbstractResource> r = cpe2.findApplicableResources(logger, pps).keySet();
assertEquals(1, r.size());
assertPathIncluded(r, "com/google/gwt/i18n/client/Messages.java");
}
}
// NOTE: if this test fails, ensure that the source root containing this very
// source file is *FIRST* on the classpath
private void testAllCpe1FilesFound(ClassPathEntry cpe1) {
TreeLogger logger = createTestTreeLogger();
PathPrefixSet pps = new PathPrefixSet();
pps.add(new PathPrefix("", null));
Set<AbstractResource> r = cpe1.findApplicableResources(logger, pps).keySet();
assertEquals(9, r.size());
assertPathIncluded(r, "com/google/gwt/user/User.gwt.xml");
assertPathIncluded(r, "com/google/gwt/user/client/Command.java");
assertPathIncluded(r, "com/google/gwt/user/client/Timer.java");
assertPathIncluded(r, "com/google/gwt/user/client/ui/Widget.java");
assertPathIncluded(r, "org/example/bar/client/BarClient1.txt");
assertPathIncluded(r, "org/example/bar/client/BarClient2.txt");
assertPathIncluded(r, "org/example/bar/client/etc/BarEtc.txt");
assertPathIncluded(r, "org/example/foo/client/FooClient.java");
assertPathIncluded(r, "org/example/foo/server/FooServer.java");
}
// NOTE: if this test fails, ensure that the source root containing this very
// source file is on the classpath
private void testAllCpe2FilesFound(ClassPathEntry cpe2) {
TreeLogger logger = createTestTreeLogger();
PathPrefixSet pps = new PathPrefixSet();
pps.add(new PathPrefix("", null));
Set<AbstractResource> r = cpe2.findApplicableResources(logger, pps).keySet();
assertEquals(6, r.size());
assertPathIncluded(r, "com/google/gwt/i18n/I18N.gwt.xml");
assertPathIncluded(r, "com/google/gwt/i18n/client/Messages.java");
assertPathIncluded(r,
"com/google/gwt/i18n/rebind/LocalizableGenerator.java");
assertPathIncluded(r, "org/example/bar/client/BarClient2.txt");
assertPathIncluded(r, "org/example/bar/client/BarClient3.txt");
assertPathIncluded(r, "org/example/foo/client/BarClient1.txt");
}
private void testPathPrefixSetChanges(ClassPathEntry cpe1, ClassPathEntry cpe2) {
TreeLogger logger = createTestTreeLogger();
{
// Filter is not set yet.
PathPrefixSet pps = new PathPrefixSet();
pps.add(new PathPrefix("com/google/gwt/user/", null));
pps.add(new PathPrefix("com/google/gwt/i18n/", null));
// Examine cpe1 in the absence of the filter.
Set<AbstractResource> r1 = cpe1.findApplicableResources(logger, pps).keySet();
assertEquals(4, r1.size());
assertPathIncluded(r1, "com/google/gwt/user/User.gwt.xml");
assertPathIncluded(r1, "com/google/gwt/user/client/Command.java");
assertPathIncluded(r1, "com/google/gwt/user/client/Timer.java");
assertPathIncluded(r1, "com/google/gwt/user/client/ui/Widget.java");
// Examine cpe2 in the absence of the filter.
Set<AbstractResource> r2 = cpe2.findApplicableResources(logger, pps).keySet();
assertEquals(3, r2.size());
assertPathIncluded(r2, "com/google/gwt/i18n/I18N.gwt.xml");
assertPathIncluded(r2, "com/google/gwt/i18n/client/Messages.java");
assertPathIncluded(r2,
"com/google/gwt/i18n/rebind/LocalizableGenerator.java");
}
{
// Create a pps with a filter.
ResourceFilter excludeXmlFiles = new ResourceFilter() {
public boolean allows(String path) {
return !path.endsWith(".xml");
}
};
PathPrefixSet pps = new PathPrefixSet();
pps.add(new PathPrefix("com/google/gwt/user/", excludeXmlFiles));
pps.add(new PathPrefix("com/google/gwt/i18n/", excludeXmlFiles));
// Examine cpe1 in the presence of the filter.
Set<AbstractResource> r1 = cpe1.findApplicableResources(logger, pps).keySet();
assertEquals(3, r1.size());
assertPathNotIncluded(r1, "com/google/gwt/user/User.gwt.xml");
assertPathIncluded(r1, "com/google/gwt/user/client/Command.java");
assertPathIncluded(r1, "com/google/gwt/user/client/Timer.java");
assertPathIncluded(r1, "com/google/gwt/user/client/ui/Widget.java");
// Examine cpe2 in the presence of the filter.
Set<AbstractResource> r2 = cpe2.findApplicableResources(logger, pps).keySet();
assertEquals(2, r2.size());
assertPathNotIncluded(r1, "com/google/gwt/user/User.gwt.xml");
assertPathIncluded(r2, "com/google/gwt/i18n/client/Messages.java");
assertPathIncluded(r2,
"com/google/gwt/i18n/rebind/LocalizableGenerator.java");
}
{
/*
* Change the prefix path set to the zero-lenth prefix (which allows
* everything), but specify a filter that disallows everything.
*/
PathPrefixSet pps = new PathPrefixSet();
pps.add(new PathPrefix("", new ResourceFilter() {
public boolean allows(String path) {
// Exclude everything.
return false;
}
}));
// Examine cpe1 in the presence of the filter.
Set<AbstractResource> r1 = cpe1.findApplicableResources(logger, pps).keySet();
assertEquals(0, r1.size());
// Examine cpe2 in the presence of the filter.
Set<AbstractResource> r2 = cpe2.findApplicableResources(logger, pps).keySet();
assertEquals(0, r2.size());
}
}
private void testUseOfPrefixesWithFiltering(ClassPathEntry cpe1,
ClassPathEntry cpe2) {
TreeLogger logger = createTestTreeLogger();
PathPrefixSet pps = new PathPrefixSet();
ResourceFilter excludeXmlFiles = new ResourceFilter() {
public boolean allows(String path) {
return !path.endsWith(".xml");
}
};
// The prefix is intentionally starting at the module-level, not 'client'.
pps.add(new PathPrefix("com/google/gwt/user/", excludeXmlFiles));
pps.add(new PathPrefix("com/google/gwt/i18n/", excludeXmlFiles));
{
// Examine cpe1.
Set<AbstractResource> r = cpe1.findApplicableResources(logger, pps).keySet();
assertEquals(3, r.size());
// User.gwt.xml would be included but for the filter.
assertPathIncluded(r, "com/google/gwt/user/client/Command.java");
assertPathIncluded(r, "com/google/gwt/user/client/Timer.java");
assertPathIncluded(r, "com/google/gwt/user/client/ui/Widget.java");
}
{
// Examine cpe2.
Set<AbstractResource> r = cpe2.findApplicableResources(logger, pps).keySet();
assertEquals(2, r.size());
// I18N.gwt.xml would be included but for the filter.
assertPathIncluded(r, "com/google/gwt/i18n/client/Messages.java");
assertPathIncluded(r,
"com/google/gwt/i18n/rebind/LocalizableGenerator.java");
}
}
}