| /* |
| * 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)); |
| } |
| } |