blob: dc497c4738fbe43679dab4c53c0e9d7c1261682f [file] [log] [blame]
// Copyright (c) 2018, the R8 project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8;
import static org.junit.Assert.assertEquals;
import com.android.tools.r8.D8CommandParser.OrderedClassFileResourceProvider;
import com.android.tools.r8.origin.Origin;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import java.io.InputStream;
import java.util.Map;
import java.util.Set;
import org.junit.Test;
public class OrderedClassFileResourceProviderTest extends TestBase {
class SimpleClassFileResourceProvider implements ClassFileResourceProvider {
private final Set<String> descriptors;
private final ProgramResource fixedProgramResource;
SimpleClassFileResourceProvider(int id, Set<String> descriptors) {
this.descriptors = descriptors;
this.fixedProgramResource = new SimpleProgramResource(id);
}
@Override
public Set<String> getClassDescriptors() {
return descriptors;
}
@Override
public ProgramResource getProgramResource(String descriptor) {
return fixedProgramResource;
}
}
class SimpleProgramResource implements ProgramResource {
private final Origin origin;
SimpleProgramResource(int id) {
origin = new SimpleOrigin(id);
}
@Override
public Kind getKind() {
return null;
}
@Override
public InputStream getByteStream() throws ResourceException {
return null;
}
@Override
public Set<String> getClassDescriptors() {
return null;
}
@Override
public Origin getOrigin() {
return origin;
}
}
public class SimpleOrigin extends Origin {
private final int id;
private SimpleOrigin(int index) {
super(root());
this.id = index;
}
int getId() {
return id;
}
@Override
public String part() {
return "Test";
}
}
@Test
public void test() {
OrderedClassFileResourceProvider.Builder builder = OrderedClassFileResourceProvider.builder();
builder.addClassFileResourceProvider(new SimpleClassFileResourceProvider(1, ImmutableSet.of(
"L/a/a/a", "L/a/a/b", "L/a/a/c"
)));
builder.addClassFileResourceProvider(new SimpleClassFileResourceProvider(2, ImmutableSet.of(
"L/a/a/b", "L/a/a/c", "L/a/a/d"
)));
ClassFileResourceProvider provider = builder.build();
assertEquals(
ImmutableSet.of("L/a/a/a", "L/a/a/b", "L/a/a/c", "L/a/a/d"),
provider.getClassDescriptors());
Map<String, Integer> expectations = ImmutableMap.of(
"L/a/a/a", 1,
"L/a/a/b", 1,
"L/a/a/c", 1,
"L/a/a/d", 2
);
expectations.forEach((descriptor, id) ->
assertEquals(
(int) id,
((SimpleOrigin) provider.getProgramResource(descriptor).getOrigin()).getId()));
}
}