| // 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 byte[] getBytes() 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())); | 
 |   } | 
 | } |