blob: 8531cd32434afb9547f9671894ea32939896bcc7 [file] [log] [blame]
// Copyright 2009 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.testing.junit.runner.util;
import java.util.EnumMap;
import java.util.Map;
/** TestIntegration represents an external link that is integrated with the test results. */
public class TestIntegration {
private final String contactEmail;
private final String componentId;
private final String name;
private final String url;
private final String iconUrl;
private final String iconName;
private final String description;
private final String foregroundColor;
private final String backgroundColor;
public TestIntegration(
String contactEmail,
String componentId,
String name,
String url,
String iconUrl,
String iconName,
String description,
String foregroundColor,
String backgroundColor) {
this.contactEmail = contactEmail;
this.componentId = componentId;
this.name = name;
this.url = url;
this.iconUrl = iconUrl;
this.iconName = iconName;
this.description = description;
this.foregroundColor = foregroundColor;
this.backgroundColor = backgroundColor;
}
/** Represents each available field for TestIntegration. */
public enum ExternalLinkAttribute {
NAME,
URL,
CONTACT_EMAIL,
COMPONENT_ID,
DESCRIPTION,
ICON_NAME,
ICON_URL,
BACKGROUND_COLOR,
FOREGROUND_COLOR;
/** Gets the string representation of the current enum. */
public String getXmlAttributeName() {
return name().toLowerCase();
}
}
// Group or user name responsible for this external integration.
String contactEmail() {
return contactEmail;
}
// Component id (numeric) for this external integration.
String componentId() {
return componentId;
}
// Display name of this external integration.
String name() {
return name;
}
// URL that will display more data about this test result or integration.
String url() {
return url;
}
// Optional: URL or name of the icon to be displayed.
String iconUrl() {
return iconUrl;
}
String iconName() {
return iconName;
}
// Optional: Textual description that shows up as tooltip.
String description() {
return description;
}
// Optional: Foreground color.
String foregroundColor() {
return foregroundColor;
}
// Optional: Background color.
String backgroundColor() {
return backgroundColor;
}
public static Builder builder() {
return new Builder()
.setIconName("")
.setIconUrl("")
.setDescription("")
.setForegroundColor("")
.setBackgroundColor("");
}
/** Builder is the builder class for TestIntegration */
public static class Builder {
private String contactEmail;
private String componentId;
private String name;
private String url;
private String iconUrl;
private String iconName;
private String description;
private String foregroundColor;
private String backgroundColor;
private Builder() {
}
/**
* Sets the Contact Email value. The contact email is used for users to identify how to contact
* the TestIntegration owner. This is optional.
* @param email Email of the team responsible for this TestIntegration.
* @return Builder
*/
public Builder setContactEmail(String email) {
this.contactEmail = email;
return this;
}
/**
* Sets the component ID value, used to identify the tool that this TestIntegration belongs to.
* This is optional.
* @param id ID of the component.
* @return Builder
*/
public Builder setComponentId(String id) {
this.componentId = id;
return this;
}
/**
* Sets the name for the tool for this TestIntegration.
* @param name Name of this TestIntegration.
* @return Builder
*/
public Builder setName(String name) {
this.name = name;
return this;
}
/**
* Sets the URL of this TestIntegration. It should be a FQDN, with optional url
* encoded parameters.
* @param url The location of the TestIntegration.
* @return Builder
*/
public Builder setUrl(String url) {
this.url = url;
return this;
}
/**
* Sets the url of the icon. The icon should look good even if scaled down to 16x16.
* This is optional; if not set, it will instead use the value passed to
* {@link #setIconName(String)}.
* @param iconUrl Location of the icon.
* @return Builder
*/
public Builder setIconUrl(String iconUrl) {
this.iconUrl = iconUrl;
return this;
}
/**
* Sets the name of the icon. This is optional; if not set it will instead use the value passed
* to {@link #setIconUrl(String)}.
*
* @param iconName name of the icon.
* @return Builder
*/
public Builder setIconName(String iconName) {
this.iconName = iconName;
return this;
}
/**
* Sets the description. The description is used to describe the TestIntegration object's
* purpose. This is optional; if it isn't set, it will have a default value of {@code ""}.
* @param description The description for this TestIntegration.
* @return Builder
*/
public Builder setDescription(String description) {
this.description = description;
return this;
}
/**
* Sets the foreground color of the TestIntegration link. This is optional; if it isn't set,
* the link created will use the default foreground color per the tool's CSS.
* @param foregroundColor The foreground color of the link, e.g. {@code "#000000"}.
* @return Builder
*/
public Builder setForegroundColor(String foregroundColor) {
this.foregroundColor = foregroundColor;
return this;
}
/**
* Sets the background color of the TestIntegration link. This is optional; if it isn't set,
* the link created will use the default background color per the tool's CSS.
* @param backgroundColor The background color of the link, e.g. {@code "#ffffff"}.
* @return Builder
*/
public Builder setBackgroundColor(String backgroundColor) {
this.backgroundColor = backgroundColor;
return this;
}
/**
* Builds a TestIntegration object.
* @return Builder
*/
public TestIntegration build() {
return new TestIntegration(contactEmail, componentId, name, url, iconUrl, iconName,
description, foregroundColor, backgroundColor);
}
}
/*
* getAttributeValueMap returns all of this TestIntegration's values in a Map.
*/
public Map<ExternalLinkAttribute, String> getAttributeValueMap() {
Map<ExternalLinkAttribute, String> map = new EnumMap<>(ExternalLinkAttribute.class);
map.put(ExternalLinkAttribute.NAME, name());
map.put(ExternalLinkAttribute.URL, url());
map.put(ExternalLinkAttribute.CONTACT_EMAIL, contactEmail());
map.put(ExternalLinkAttribute.COMPONENT_ID, componentId());
map.put(ExternalLinkAttribute.DESCRIPTION, description());
map.put(ExternalLinkAttribute.ICON_NAME, iconName());
map.put(ExternalLinkAttribute.ICON_URL, iconUrl());
map.put(ExternalLinkAttribute.BACKGROUND_COLOR, backgroundColor());
map.put(ExternalLinkAttribute.FOREGROUND_COLOR, foregroundColor());
return map;
}
}