/* * Licensed to Elasticsearch under one or more contributor * license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright * ownership. Elasticsearch 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.elasticsearch.common; import org.elasticsearch.test.ESTestCase; import java.util.List; import java.util.Map; import static org.hamcrest.Matchers.instanceOf; import static org.hamcrest.Matchers.is; public class TableTests extends ESTestCase { public void testFailOnStartRowWithoutHeader() { Table table = new Table(); Exception e = expectThrows(IllegalStateException.class, () -> table.startRow()); assertThat(e.getMessage(), is("no headers added...")); } public void testFailOnEndHeadersWithoutStart() { Table table = new Table(); Exception e = expectThrows(IllegalStateException.class, () -> table.endHeaders()); assertThat(e.getMessage(), is("no headers added...")); } public void testFailOnAddCellWithoutHeader() { Table table = new Table(); Exception e = expectThrows(IllegalStateException.class, () -> table.addCell("error")); assertThat(e.getMessage(), is("no block started...")); } public void testFailOnAddCellWithoutRow() { Table table = this.getTableWithHeaders(); Exception e = expectThrows(IllegalStateException.class, () -> table.addCell("error")); assertThat(e.getMessage(), is("no block started...")); } public void testFailOnEndRowWithoutStart() { Table table = this.getTableWithHeaders(); Exception e = expectThrows(IllegalStateException.class, () -> table.endRow()); assertThat(e.getMessage(), is("no row started...")); } public void testFailOnLessCellsThanDeclared() { Table table = this.getTableWithHeaders(); table.startRow(); table.addCell("foo"); Exception e = expectThrows(IllegalStateException.class, () -> table.endRow()); assertThat(e.getMessage(), is("mismatch on number of cells 1 in a row compared to header 2")); } public void testOnLessCellsThanDeclaredUnchecked() { Table table = this.getTableWithHeaders(); table.startRow(); table.addCell("foo"); table.endRow(false); } public void testFailOnMoreCellsThanDeclared() { Table table = this.getTableWithHeaders(); table.startRow(); table.addCell("foo"); table.addCell("bar"); Exception e = expectThrows(IllegalStateException.class, () -> table.addCell("foobar")); assertThat(e.getMessage(), is("can't add more cells to a row than the header")); } public void testSimple() { Table table = this.getTableWithHeaders(); table.startRow(); table.addCell("foo1"); table.addCell("bar1"); table.endRow(); table.startRow(); table.addCell("foo2"); table.addCell("bar2"); table.endRow(); // Check headers List<Table.Cell> headers = table.getHeaders(); assertEquals(2, headers.size()); assertEquals("foo", headers.get(0).value.toString()); assertEquals(2, headers.get(0).attr.size()); assertEquals("f", headers.get(0).attr.get("alias")); assertEquals("foo", headers.get(0).attr.get("desc")); assertEquals("bar", headers.get(1).value.toString()); assertEquals(2, headers.get(1).attr.size()); assertEquals("b", headers.get(1).attr.get("alias")); assertEquals("bar", headers.get(1).attr.get("desc")); // Check rows List<List<Table.Cell>> rows = table.getRows(); assertEquals(2, rows.size()); List<Table.Cell> row = rows.get(0); assertEquals("foo1", row.get(0).value.toString()); assertEquals("bar1", row.get(1).value.toString()); row = rows.get(1); assertEquals("foo2", row.get(0).value.toString()); assertEquals("bar2", row.get(1).value.toString()); // Check getAsMap Map<String, List<Table.Cell>> map = table.getAsMap(); assertEquals(2, map.size()); row = map.get("foo"); assertEquals("foo1", row.get(0).value.toString()); assertEquals("foo2", row.get(1).value.toString()); row = map.get("bar"); assertEquals("bar1", row.get(0).value.toString()); assertEquals("bar2", row.get(1).value.toString()); // Check getHeaderMap Map<String, Table.Cell> headerMap = table.getHeaderMap(); assertEquals(2, headerMap.size()); Table.Cell cell = headerMap.get("foo"); assertEquals("foo", cell.value.toString()); cell = headerMap.get("bar"); assertEquals("bar", cell.value.toString()); // Check findHeaderByName cell = table.findHeaderByName("foo"); assertEquals("foo", cell.value.toString()); cell = table.findHeaderByName("missing"); assertNull(cell); } public void testWithTimestamp() { Table table = new Table(); table.startHeadersWithTimestamp(); table.endHeaders(); List<Table.Cell> headers = table.getHeaders(); assertEquals(2, headers.size()); assertEquals(Table.EPOCH, headers.get(0).value.toString()); assertEquals(Table.TIMESTAMP, headers.get(1).value.toString()); assertEquals(2, headers.get(0).attr.size()); assertEquals("t,time", headers.get(0).attr.get("alias")); assertEquals("seconds since 1970-01-01 00:00:00", headers.get(0).attr.get("desc")); assertEquals(2, headers.get(1).attr.size()); assertEquals("ts,hms,hhmmss", headers.get(1).attr.get("alias")); assertEquals("time in HH:MM:SS", headers.get(1).attr.get("desc")); // check row's timestamp table.startRow(); table.endRow(); List<List<Table.Cell>> rows = table.getRows(); assertEquals(1, rows.size()); assertEquals(2, rows.get(0).size()); assertThat(rows.get(0).get(0).value, instanceOf(Long.class)); } public void testAliasMap() { Table table = new Table(); table.startHeaders(); table.addCell("asdf", "alias:a"); table.addCell("ghij", "alias:g,h"); table.endHeaders(); Map<String, String> aliasMap = table.getAliasMap(); assertEquals(5, aliasMap.size()); assertEquals("asdf", aliasMap.get("a")); assertEquals("ghij", aliasMap.get("g")); assertEquals("ghij", aliasMap.get("h")); } private Table getTableWithHeaders() { Table table = new Table(); table.startHeaders(); table.addCell("foo", "alias:f;desc:foo"); table.addCell("bar", "alias:b;desc:bar"); table.endHeaders(); return table; } }