TOBAGO-2002 GridLayout: behavior of 'auto' is the same as '*'

* a hidden '1fr' is added to grid layout column if there is an 'auto'
  value without a 'fr' value
* test added
* getter for stream of measureList added
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/GridLayoutRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/GridLayoutRenderer.java
index ecfa366..f0fc7b0 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/GridLayoutRenderer.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/GridLayoutRenderer.java
@@ -25,6 +25,7 @@
 import org.apache.myfaces.tobago.internal.component.AbstractUIGridLayout;
 import org.apache.myfaces.tobago.internal.component.AbstractUIStyle;
 import org.apache.myfaces.tobago.internal.util.JsonUtils;
+import org.apache.myfaces.tobago.layout.Measure;
 import org.apache.myfaces.tobago.layout.MeasureList;
 import org.apache.myfaces.tobago.renderkit.RendererBase;
 import org.apache.myfaces.tobago.renderkit.css.TobagoClass;
@@ -62,6 +63,17 @@
         facesContext, Tags.style.componentType(), RendererTypes.Style.name());
     style.setTransient(true);
 
+    /*
+     * If the column attribute contains and 'auto' value but not an 'fr' value,
+     * the behavior of the 'auto' value is the same as a 'fr' value.
+     * So if there is only an 'auto' value we add a hidden 'fr' value.
+     * https://issues.apache.org/jira/browse/TOBAGO-2002
+     */
+    if (columns.stream().anyMatch(measure -> Measure.Unit.AUTO.equals(measure.getUnit()))
+        && columns.stream().noneMatch(measure -> Measure.Unit.FR.equals(measure.getUnit()))) {
+      columns.add(new Measure(1, Measure.Unit.FR));
+    }
+
     style.setGridTemplateColumns(columns.serialize());
     style.setGridTemplateRows(rows.serialize());
     gridLayout.getChildren().add(style);
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/layout/MeasureList.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/layout/MeasureList.java
index fa1b0ae..468c1bb 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/layout/MeasureList.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/layout/MeasureList.java
@@ -24,6 +24,7 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.StringTokenizer;
+import java.util.stream.Stream;
 
 public class MeasureList implements Iterable<Measure>, Serializable {
 
@@ -37,6 +38,10 @@
     return list.iterator();
   }
 
+  public Stream<Measure> stream() {
+    return list.stream();
+  }
+
   public static MeasureList parse(final String string) {
     final MeasureList measureList = new MeasureList();
     final StringTokenizer tokenizer = new StringTokenizer(string, "; ");
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/4600-gridLayout/100-auto-column/Auto-Column.test.js b/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/4600-gridLayout/100-auto-column/Auto-Column.test.js
new file mode 100644
index 0000000..ef5f04f
--- /dev/null
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/4600-gridLayout/100-auto-column/Auto-Column.test.js
@@ -0,0 +1,28 @@
+/*
+ * 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.
+ */
+
+import {testFrameQuerySelectorFn} from "/script/tobago-test.js";
+
+QUnit.test("test width of grid layout and 'auto' button", function (assert) {
+  assert.expect(2);
+
+  let gridLayoutFn = testFrameQuerySelectorFn("#page\\:mainForm\\:grid");
+  let buttonAutoFn = testFrameQuerySelectorFn("#page\\:mainForm\\:buttonAuto");
+
+  assert.equal(gridLayoutFn().offsetWidth, 358);
+  assert.equal(buttonAutoFn().offsetWidth, 58);
+});
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/4600-gridLayout/100-auto-column/Auto-Column.xhtml b/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/4600-gridLayout/100-auto-column/Auto-Column.xhtml
new file mode 100644
index 0000000..a8d154e
--- /dev/null
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/4600-gridLayout/100-auto-column/Auto-Column.xhtml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+ * 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.
+-->
+
+<ui:composition template="/main.xhtml"
+                xmlns="http://www.w3.org/1999/xhtml"
+                xmlns:tc="http://myfaces.apache.org/tobago/component"
+                xmlns:ui="http://java.sun.com/jsf/facelets">
+  <tc:box label="'auto' value">
+    <tc:style width="400px"/>
+    <p>Grid Layout - column with 'auto' but without '*'</p>
+    <tc:gridLayout id="grid" columns="100px auto">
+      <tc:button id="button100Px" label="100px"/>
+      <tc:button id="buttonAuto" label="auto"/>
+    </tc:gridLayout>
+  </tc:box>
+</ui:composition>