From a4ae2f76264b5968641a544e6a294f13ffa61553 Mon Sep 17 00:00:00 2001 From: Colin Alworth Date: Mon, 30 Sep 2024 19:43:33 -0500 Subject: [PATCH 1/3] Add a test to confirm expected behavior --- .../api/subscription/ViewportTestGwt.java | 77 +++++++++++++------ 1 file changed, 55 insertions(+), 22 deletions(-) diff --git a/web/client-api/src/test/java/io/deephaven/web/client/api/subscription/ViewportTestGwt.java b/web/client-api/src/test/java/io/deephaven/web/client/api/subscription/ViewportTestGwt.java index 2d9648c7b08..dbeb1c9d5bd 100644 --- a/web/client-api/src/test/java/io/deephaven/web/client/api/subscription/ViewportTestGwt.java +++ b/web/client-api/src/test/java/io/deephaven/web/client/api/subscription/ViewportTestGwt.java @@ -10,12 +10,15 @@ import elemental2.promise.Promise; import io.deephaven.web.client.api.AbstractAsyncGwtTestCase; import io.deephaven.web.client.api.Column; +import io.deephaven.web.client.api.DateWrapper; +import io.deephaven.web.client.api.Format; import io.deephaven.web.client.api.HasEventHandling; import io.deephaven.web.client.api.JsTable; import io.deephaven.web.client.api.TableData; import io.deephaven.web.client.api.filter.FilterCondition; import io.deephaven.web.client.api.filter.FilterValue; import io.deephaven.web.shared.fu.RemoverFn; +import jsinterop.base.Any; import jsinterop.base.Js; import java.util.Objects; @@ -23,15 +26,7 @@ import static elemental2.dom.DomGlobal.console; /** - * Assumes two tables, ticking every 2 seconds: - * - * growingForward = db.timeTable("00:00:01").update("I=i", "J=i*i", "K=0") growingBackward = - * growingForward.sortDescending("Timestamp") blinkOne = db.timeTable("00:00:01").update("I=i", - * "J=1").lastBy("J").where("I%2 != 0") - * - * And another static one: - * - * staticTable = emptyTable(100).update("I=i") + * Verifies behavior of viewport subscriptions. */ public class ViewportTestGwt extends AbstractAsyncGwtTestCase { @@ -40,9 +35,11 @@ public class ViewportTestGwt extends AbstractAsyncGwtTestCase { .script("staticTable", "empty_table(100).update(\"I=i\")") .script("from datetime import datetime, timedelta") .script("growingForward", - "time_table(period=\"PT00:00:01\", start_time=datetime.now() - timedelta(minutes=1)).update([\"I=i\", \"J=i*i\", \"K=0\"])") + "time_table(period=\"PT00:00:01\", start_time=datetime.now() - timedelta(minutes=1))" + + ".update([\"I=i\", \"J=i*i\", \"K=0\"])") .script("growingBackward", - "growingForward.sort_descending(\"Timestamp\").format_columns(['I=I>2 ? GREEN : RED'])") + "growingForward.sort_descending(\"Timestamp\")" + + ".format_columns(['I=I>2 ? GREEN : RED', 'I = Decimal(`0.00%`)', 'Timestamp = Date(`yyyy_MM_dd`)'])") .script("blinkOne", "time_table(\"PT00:00:01\").update([\"I=i\", \"J=1\"]).last_by(by=\"J\").where(\"I%2 != 0\")"); @@ -174,20 +171,55 @@ public void testViewportSubsetOfColumns() { .then(table("growingBackward")) .then(table -> { delayTestFinish(8000); - table.setViewport(0, 0, Js.uncheckedCast(new Column[] {table.findColumn("I")})); + table.setViewport(0, 0, Js.uncheckedCast(table.findColumns(new String[] { "I", "Timestamp" }))); return assertUpdateReceived(table, viewport -> { - assertEquals(1, viewport.getColumns().length); - assertEquals(0, indexOf(viewport.getColumns(), table.findColumn("I"))); + assertEquals(2, viewport.getColumns().length); + assertEquals(1, indexOf(viewport.getColumns(), table.findColumn("I"))); + assertEquals(0, indexOf(viewport.getColumns(), table.findColumn("Timestamp"))); assertEquals(1, viewport.getRows().length); TableData.Row row1 = viewport.getRows().getAt(0); - assertNotNull(viewport.getData(0, table.findColumn("I"))); - assertNotNull(row1.get(table.findColumn("I"))); - assertNotNull(table.findColumn("I").get(row1)); - assertNotNull(row1.getFormat(table.findColumn("I"))); - assertNotNull(table.findColumn("I").getFormat(row1)); - assertNotNull(viewport.getFormat(0, table.findColumn("I"))); + { + Any d1 = viewport.getData(0, table.findColumn("I")); + Any d2 = row1.get(table.findColumn("I")); + Any d3 = table.findColumn("I").get(row1); + assertNotNull(d1); + assertEquals("number", Js.typeof(d1)); + assertEquals(d1, d2); + assertEquals(d2, d3); + Format f1 = row1.getFormat(table.findColumn("I")); + Format f2 = table.findColumn("I").getFormat(row1); + Format f3 = viewport.getFormat(0, table.findColumn("I")); + assertNotNull(f1); + assertEquals(f1, f2); + assertEquals(f2, f3); + + assertNotNull(f1.getBackgroundColor()); + assertNotNull(f1.getColor()); + assertEquals("0.00%", f1.getFormatString()); + } + + { + Any d1 = viewport.getData(0, table.findColumn("Timestamp")); + Any d2 = row1.get(table.findColumn("Timestamp")); + Any d3 = table.findColumn("Timestamp").get(row1); + assertNotNull(d1); + assertTrue(d1 instanceof DateWrapper); + assertEquals(d1, d2); + assertEquals(d2, d3); + Format f1 = row1.getFormat(table.findColumn("Timestamp")); + Format f2 = table.findColumn("Timestamp").getFormat(row1); + Format f3 = viewport.getFormat(0, table.findColumn("Timestamp")); + assertNotNull(f1); + assertEquals(f1, f2); + assertEquals(f2, f3); + + assertNull(f1.getBackgroundColor()); + assertNull(f1.getColor()); + assertEquals("yyyy_MM_dd", f1.getFormatString()); + } + assertThrowsException(() -> row1.get(table.findColumn("J"))); assertThrowsException(() -> row1.get(table.findColumn("K"))); @@ -196,8 +228,9 @@ public void testViewportSubsetOfColumns() { .then(table -> { // don't change viewport, test the same thing again, make sure deltas behave too return assertUpdateReceived(table, viewport -> { - assertEquals(1, viewport.getColumns().length); - assertEquals(0, indexOf(viewport.getColumns(), table.findColumn("I"))); + assertEquals(2, viewport.getColumns().length); + assertEquals(1, indexOf(viewport.getColumns(), table.findColumn("I"))); + assertEquals(0, indexOf(viewport.getColumns(), table.findColumn("Timestamp"))); assertEquals(1, viewport.getRows().length); assertNotNull(viewport.getRows().getAt(0).get(table.findColumn("I"))); From 63bde9b8d74b4b0156cf9f3c2513724c2a234b43 Mon Sep 17 00:00:00 2001 From: Colin Alworth Date: Mon, 30 Sep 2024 19:47:11 -0500 Subject: [PATCH 2/3] Fix backwards ternary --- .../deephaven/web/client/api/barrage/def/ColumnDefinition.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/client-api/src/main/java/io/deephaven/web/client/api/barrage/def/ColumnDefinition.java b/web/client-api/src/main/java/io/deephaven/web/client/api/barrage/def/ColumnDefinition.java index 377c09d840d..049d1db1eaf 100644 --- a/web/client-api/src/main/java/io/deephaven/web/client/api/barrage/def/ColumnDefinition.java +++ b/web/client-api/src/main/java/io/deephaven/web/client/api/barrage/def/ColumnDefinition.java @@ -137,7 +137,7 @@ public Column makeJsColumn(int index, Map style == null ? null : style.getColumnIndex(), style == null ? null : style.getColumnIndex(), isPartitionColumn(), - format == null || format.isFormatColumn() ? null : format.getColumnIndex(), + format == null ? null : format.getColumnIndex(), getDescription(), isInputTableKeyColumn()); } From 2694d99e82c1e1f1bf40b94f2dede5eecb60962a Mon Sep 17 00:00:00 2001 From: Colin Alworth Date: Tue, 1 Oct 2024 10:46:19 -0500 Subject: [PATCH 3/3] Spotless --- .../deephaven/web/client/api/subscription/ViewportTestGwt.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/client-api/src/test/java/io/deephaven/web/client/api/subscription/ViewportTestGwt.java b/web/client-api/src/test/java/io/deephaven/web/client/api/subscription/ViewportTestGwt.java index dbeb1c9d5bd..3d77eba0a76 100644 --- a/web/client-api/src/test/java/io/deephaven/web/client/api/subscription/ViewportTestGwt.java +++ b/web/client-api/src/test/java/io/deephaven/web/client/api/subscription/ViewportTestGwt.java @@ -171,7 +171,7 @@ public void testViewportSubsetOfColumns() { .then(table("growingBackward")) .then(table -> { delayTestFinish(8000); - table.setViewport(0, 0, Js.uncheckedCast(table.findColumns(new String[] { "I", "Timestamp" }))); + table.setViewport(0, 0, Js.uncheckedCast(table.findColumns(new String[] {"I", "Timestamp"}))); return assertUpdateReceived(table, viewport -> { assertEquals(2, viewport.getColumns().length);