blob: 2dffe4c61f3011a580666e5f6f35c331226f6bd8 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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 org.apache.myfaces.tobago.renderkit.css;
import org.apache.myfaces.tobago.component.Attributes;
import org.apache.myfaces.tobago.layout.Measure;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/**
* Test if every in Java declared CSS class has really an entry in a CSS file.
*/
public class BootstrapClassUnitTest {
@Test
public void testNames() throws NoSuchFieldException {
final String fieldRegex = "[A-Z][A-Z0-9_]*[A-Z0-9]";
final String nameRegex = "[a-z][a-z0-9\\-]*[a-z0-9]";
for (final BootstrapClass value : BootstrapClass.values()) {
final boolean ignoreByTest = BootstrapClass.class.getField(value.name()).isAnnotationPresent(Deprecated.class);
if (!ignoreByTest) {
final String field = value.toString();
final String name = value.getName();
Assertions.assertTrue(field.matches(fieldRegex),
"testing: '" + field + "' matches regexp for consts like FOO_BAR");
Assertions.assertTrue(name.matches(nameRegex), "testing: '" + name + "' matches regexp for CSS like foo-bar");
final StringBuilder calculatedName = new StringBuilder();
for (int i = 0; i < field.length(); i++) {
final char c = field.charAt(i);
if (c == '_') {
calculatedName.append("-");
} else {
calculatedName.append(Character.toLowerCase(c));
}
}
Assertions.assertEquals(calculatedName.toString(), name, field);
}
}
}
/**
* This test checks, if every item of the {@link BootstrapClass} occurs in the tobago.css.
*/
@Test
public void testCompareBootstrapCss() throws IOException, NoSuchFieldException {
final BootstrapClass[] allValues = BootstrapClass.values();
final List<BootstrapClass> toCheck = new ArrayList<>();
for (final BootstrapClass value : allValues) {
final boolean ignoreByTest = BootstrapClass.class.getField(value.name()).isAnnotationPresent(Deprecated.class);
if (!ignoreByTest) {
toCheck.add(value);
}
}
final List<CssItem> missing = CssClassUtils.compareCss(
"target/npm/css/tobago.css",
toCheck.toArray(new BootstrapClass[0]));
Assertions.assertTrue(missing.isEmpty(), "These classes are missing in tobago.css: " + missing);
}
@Test
public void testValueOfMeasureAttributes() {
Assertions.assertEquals(BootstrapClass.COL_1,
BootstrapClass.valueOf(new Measure("1", Measure.Unit.SEG), Attributes.extraSmall));
Assertions.assertEquals(BootstrapClass.COL_12,
BootstrapClass.valueOf(new Measure("12", Measure.Unit.SEG), Attributes.extraSmall));
Assertions.assertEquals(null,
BootstrapClass.valueOf((Measure) null, Attributes.extraSmall));
Assertions.assertEquals(BootstrapClass.COL_MD_5,
BootstrapClass.valueOf(new Measure("5", Measure.Unit.SEG), Attributes.medium));
Assertions.assertEquals(BootstrapClass.COL_LG,
BootstrapClass.valueOf(Measure.valueOf("*"), Attributes.large));
Assertions.assertEquals(BootstrapClass.COL_XL_AUTO,
BootstrapClass.valueOf(Measure.valueOf("auto"), Attributes.extraLarge));
}
}