blob: 864dc27d3d66bc136c62dd0ebae642e6c4f54d87 [file] [log] [blame]
// Copyright 2018 The Bazel Authors. All rights reserved.
//
// 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.devtools.build.importdeps;
import static com.google.common.truth.Truth.assertThat;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.google.devtools.build.importdeps.ClassInfo.MemberInfo;
import java.nio.file.Paths;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
/** Test for {@link ClassInfo} */
@RunWith(JUnit4.class)
public class ClassInfoTest {
public static final String JAVA_LANG_OBJECT = "java/lang/Object";
private final MemberInfo hashCodeMethod = MemberInfo.create("hashCode", "()I");
private final MemberInfo sizeMethod = MemberInfo.create("clear", "()V");
private final ClassInfo objectClass =
ClassInfo.create(
JAVA_LANG_OBJECT,
Paths.get("a"),
true,
ImmutableList.of(),
ImmutableSet.of(hashCodeMethod));
private final ClassInfo listClass =
ClassInfo.create(
"java/util/List",
Paths.get("a"),
true,
ImmutableList.of(objectClass),
ImmutableSet.of(sizeMethod));
@Test
public void testMemberInfo() {
MemberInfo memberInfo = MemberInfo.create("a", "I");
assertThat(memberInfo.memberName()).isEqualTo("a");
assertThat(memberInfo.descriptor()).isEqualTo("I");
assertThat(memberInfo).isEqualTo(MemberInfo.create("a", "I"));
assertThat(hashCodeMethod).isEqualTo(MemberInfo.create("hashCode", "()I"));
assertThat(sizeMethod).isEqualTo(MemberInfo.create("clear", "()V"));
}
@Test
public void testClassInfoCorrectlySet() {
assertThat(objectClass.internalName()).isEqualTo("java/lang/Object");
assertThat(objectClass.declaredMembers())
.containsExactly(MemberInfo.create("hashCode", "()I"))
.inOrder();
assertThat(objectClass.containsMember(MemberInfo.create("hashCode", "()I"))).isTrue();
assertThat(listClass.internalName()).isEqualTo("java/util/List");
assertThat((Object) listClass.jarPath()).isEqualTo(Paths.get("a"));
assertThat(listClass.directDep()).isTrue();
assertThat(listClass.declaredMembers()).containsExactly(sizeMethod);
assertThat(listClass.containsMember(hashCodeMethod)).isTrue();
}
@Test
public void testContainsMember() {
ClassInfo parent = objectClass;
ClassInfo child = listClass;
assertThat(child.superClasses()).contains(parent);
assertThat(parent.containsMember(MemberInfo.create("hashCode", "()I"))).isTrue();
assertThat(parent.containsMember(MemberInfo.create("size", "()I"))).isFalse();
assertThat(parent.containsMember(MemberInfo.create("clear", "()V"))).isFalse();
assertThat(child.containsMember(MemberInfo.create("hashCode", "()I"))).isTrue();
assertThat(child.containsMember(MemberInfo.create("clear", "()V"))).isTrue();
}
}