// Copyright 2016 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.lib.analysis; import static com.google.common.truth.Truth.assertThat; import com.google.devtools.build.lib.packages.AspectClass; import com.google.devtools.build.lib.packages.AspectDefinition; import com.google.devtools.build.lib.packages.AspectDescriptor; import com.google.devtools.build.lib.packages.AspectParameters; import com.google.devtools.build.lib.packages.NativeAspectClass; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; /** * Test for AspectDescriptor. */ @RunWith(JUnit4.class) public class AspectDescriptorTest { @Test public void serializeDescriptorNoArguments() { assertDescription("foobar", "foobar"); } @Test public void serializeDescriptorArgument() { assertDescription("foobar[x=\"1\"]", "foobar", "x", "1"); } @Test public void serializeDescriptorArgumentEscaped() { assertDescription("foobar[x=\"\\\"1\\\"\"]", "foobar", "x", "\"1\""); } @Test public void serializeDescriptorTwoArguments() { assertDescription("foobar[x=\"1\",y=\"2\"]", "foobar", "x", "1", "y", "2"); } @Test public void serializeDescriptorTwoArgumentsMulti() { assertDescription("foobar[x=\"1\",y=\"2\",y=\"3\"]", "foobar", "x", "1", "y", "2", "y", "3"); } private static void assertDescription( String description, String aspectClassName, String... params) { assertThat(aspectDescriptor(aspectClass(aspectClassName), params).getDescription()) .isEqualTo(description); } private static AspectDescriptor aspectDescriptor( AspectClass aspectClass, String... parameters) { assertThat(parameters.length % 2).isEqualTo(0); AspectParameters.Builder params = new AspectParameters.Builder(); for (int i = 0; i < parameters.length; i += 2) { params.addAttribute(parameters[i], parameters[i + 1]); } return new AspectDescriptor(aspectClass, params.build()); } private static AspectClass aspectClass(final String name) { return new NativeAspectClass() { @Override public String getName() { return name; } @Override public AspectDefinition getDefinition(AspectParameters aspectParameters) { throw new UnsupportedOperationException(); } }; } }