Skip to content

Commit

Permalink
tests: recycler ID function tests
Browse files Browse the repository at this point in the history
  • Loading branch information
joshtynjala committed Mar 10, 2025
1 parent 43416b2 commit 013015c
Show file tree
Hide file tree
Showing 8 changed files with 244 additions and 5 deletions.
6 changes: 3 additions & 3 deletions test/src/TestMain.hx
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,11 @@ class TestMain extends Sprite {
super();

var runner = new Runner();
#if !flash
// these tests often timeout on CI when running in Flash/AIR
// #if !flash
// // these tests often timeout on CI when running in Flash/AIR
runner.addCase(new feathers.controls.AssetLoaderTest());
runner.addCase(new feathers.utils.LongPressTest());
#end
// #end
runner.addCase(new feathers.controls.AlertTest());
runner.addCase(new feathers.controls.BasicButtonMeasurementTest());
runner.addCase(new feathers.controls.BasicButtonTest());
Expand Down
25 changes: 25 additions & 0 deletions test/src/feathers/controls/ButtonBarTest.hx
Original file line number Diff line number Diff line change
Expand Up @@ -395,6 +395,31 @@ class ButtonBarTest extends Test {
TriggerEvent.dispatchFromTouchEvent(button, new TouchEvent(TouchEvent.TOUCH_TAP));
Assert.equals(1, dispatchedTriggerCount);
}

private function testRecyclerIDFunction():Void {
var collection = new ArrayCollection([{text: "One"}, {text: "Two"}, {text: "Three"}]);
this._buttonBar.dataProvider = collection;
this._buttonBar.setButtonRecycler("alternate", DisplayObjectRecycler.withClass(Button));
this._buttonBar.setButtonRecycler("alternate2", DisplayObjectRecycler.withClass(Button));
this._buttonBar.buttonRecyclerIDFunction = (state) -> {
if (state.index == 1) {
return "alternate";
} else if (state.index == 2) {
return "alternate2";
}
return null;
};
this._buttonBar.validateNow();
var state0 = this._buttonBar.itemToItemState(collection.get(0));
Assert.notNull(state0);
Assert.isNull(state0.recyclerID);
var state1 = this._buttonBar.itemToItemState(collection.get(1));
Assert.notNull(state1);
Assert.equals("alternate", state1.recyclerID);
var state2 = this._buttonBar.itemToItemState(collection.get(2));
Assert.notNull(state2);
Assert.equals("alternate2", state2.recyclerID);
}
}

private class CustomRendererWithInterfaces extends Button implements IDataRenderer implements ILayoutIndexObject {
Expand Down
44 changes: 43 additions & 1 deletion test/src/feathers/controls/GridViewTest.hx
Original file line number Diff line number Diff line change
Expand Up @@ -1001,7 +1001,7 @@ class GridViewTest extends Test {
Assert.equals(item2, this._gridView.selectedItems[0]);
}

public function testDefaultTextUpdateForAdditionalRecyclers():Void {
public function testDefaultTextUpdateForColumnRecyclers():Void {
this._gridView.dataProvider = new ArrayCollection([{text: "One"}]);
var column1 = new GridViewColumn("1", item -> item.text);
column1.cellRendererRecycler = DisplayObjectRecycler.withClass(ItemRenderer);
Expand All @@ -1012,6 +1012,20 @@ class GridViewTest extends Test {
Assert.equals("One", itemRenderer.text);
}

public function testDefaultTextUpdateForAdditionalColumnRecyclers():Void {
this._gridView.dataProvider = new ArrayCollection([{text: "One"}]);
var column1 = new GridViewColumn("1", item -> item.text);
column1.setCellRendererRecycler("other", DisplayObjectRecycler.withClass(ItemRenderer));
column1.cellRendererRecyclerIDFunction = (state) -> {
return "other";
};
this._gridView.columns = new ArrayCollection([column1]);
this._gridView.validateNow();
var itemRenderer = cast(this._gridView.itemAndColumnToCellRenderer(this._gridView.dataProvider.get(0), column1), ItemRenderer);
Assert.notNull(itemRenderer);
Assert.equals("One", itemRenderer.text);
}

// ensures that the new index of the existing column doesn't result in a range error
// and that columns are displayed in the correct order
public function testInsertExtraColumnAtBeginning():Void {
Expand Down Expand Up @@ -1168,6 +1182,34 @@ class GridViewTest extends Test {
TriggerEvent.dispatchFromTouchEvent(cellRenderer, new TouchEvent(TouchEvent.TOUCH_TAP));
Assert.equals(1, dispatchedTriggerCount);
}

private function testColumnRecyclerIDFunction():Void {
var collection = new ArrayCollection([{text: "One"}, {text: "Two"}, {text: "Three"}]);
this._gridView.dataProvider = collection;
var column0 = new GridViewColumn("A", item -> item.text);
column0.setCellRendererRecycler("alternate", DisplayObjectRecycler.withClass(ItemRenderer));
column0.setCellRendererRecycler("alternate2", DisplayObjectRecycler.withClass(ItemRenderer));
column0.cellRendererRecyclerIDFunction = (state) -> {
if (state.rowIndex == 1) {
return "alternate";
} else if (state.rowIndex == 2) {
return "alternate2";
}
return null;
};
var columns = new ArrayCollection([column0,]);
this._gridView.columns = columns;
this._gridView.validateNow();
var state0 = this._gridView.itemAndColumnToCellState(collection.get(0), column0);
Assert.notNull(state0);
Assert.isNull(state0.recyclerID);
var state1 = this._gridView.itemAndColumnToCellState(collection.get(1), column0);
Assert.notNull(state1);
Assert.equals("alternate", state1.recyclerID);
var state2 = this._gridView.itemAndColumnToCellState(collection.get(2), column0);
Assert.notNull(state2);
Assert.equals("alternate2", state2.recyclerID);
}
}

private class CustomRendererWithInterfaces extends LayoutGroup implements IToggle implements IDataRenderer implements ILayoutIndexObject
Expand Down
55 changes: 55 additions & 0 deletions test/src/feathers/controls/GroupListViewTest.hx
Original file line number Diff line number Diff line change
Expand Up @@ -784,6 +784,61 @@ class GroupListViewTest extends Test {
TriggerEvent.dispatchFromTouchEvent(itemRenderer, new TouchEvent(TouchEvent.TOUCH_TAP));
Assert.equals(1, dispatchedTriggerCount);
}

private function testItemRecyclerIDFunction():Void {
var collection = new ArrayHierarchicalCollection([{text: "A", children: [{text: "One"}, {text: "Two"}, {text: "Three"}]}],
(item:Dynamic) -> item.children);
this._listView.dataProvider = collection;
this._listView.setItemRendererRecycler("alternate", DisplayObjectRecycler.withClass(ItemRenderer));
this._listView.setItemRendererRecycler("alternate2", DisplayObjectRecycler.withClass(ItemRenderer));
this._listView.itemRendererRecyclerIDFunction = (state) -> {
if (state.location[0] == 0 && state.location[1] == 1) {
return "alternate";
} else if (state.location[0] == 0 && state.location[1] == 2) {
return "alternate2";
}
return null;
};
this._listView.validateNow();
var state0 = this._listView.itemToItemState(collection.get([0, 0]));
Assert.notNull(state0);
Assert.isNull(state0.recyclerID);
var state1 = this._listView.itemToItemState(collection.get([0, 1]));
Assert.notNull(state1);
Assert.equals("alternate", state1.recyclerID);
var state2 = this._listView.itemToItemState(collection.get([0, 2]));
Assert.notNull(state2);
Assert.equals("alternate2", state2.recyclerID);
}

private function testHeaderRecyclerIDFunction():Void {
var collection = new ArrayHierarchicalCollection([
{text: "A", children: [{text: "One"}, {text: "Two"}, {text: "Three"}]},
{text: "B"},
{text: "C"}
], (item:Dynamic) -> item.children);
this._listView.dataProvider = collection;
this._listView.setHeaderRendererRecycler("alternate", DisplayObjectRecycler.withClass(ItemRenderer));
this._listView.setHeaderRendererRecycler("alternate2", DisplayObjectRecycler.withClass(ItemRenderer));
this._listView.headerRendererRecyclerIDFunction = (state) -> {
if (state.location[0] == 1) {
return "alternate";
} else if (state.location[0] == 2) {
return "alternate2";
}
return null;
};
this._listView.validateNow();
var state0 = this._listView.itemToItemState(collection.get([0]));
Assert.notNull(state0);
Assert.isNull(state0.recyclerID);
var state1 = this._listView.itemToItemState(collection.get([1]));
Assert.notNull(state1);
Assert.equals("alternate", state1.recyclerID);
var state2 = this._listView.itemToItemState(collection.get([2]));
Assert.notNull(state2);
Assert.equals("alternate2", state2.recyclerID);
}
}

private class CustomRendererWithInterfaces extends LayoutGroup implements IToggle implements IDataRenderer implements ILayoutIndexObject
Expand Down
25 changes: 25 additions & 0 deletions test/src/feathers/controls/ListViewTest.hx
Original file line number Diff line number Diff line change
Expand Up @@ -903,6 +903,31 @@ class ListViewTest extends Test {
TriggerEvent.dispatchFromTouchEvent(itemRenderer, new TouchEvent(TouchEvent.TOUCH_TAP));
Assert.equals(1, dispatchedTriggerCount);
}

private function testRecyclerIDFunction():Void {
var collection = new ArrayCollection([{text: "One"}, {text: "Two"}, {text: "Three"}]);
this._listView.dataProvider = collection;
this._listView.setItemRendererRecycler("alternate", DisplayObjectRecycler.withClass(ItemRenderer));
this._listView.setItemRendererRecycler("alternate2", DisplayObjectRecycler.withClass(ItemRenderer));
this._listView.itemRendererRecyclerIDFunction = (state) -> {
if (state.index == 1) {
return "alternate";
} else if (state.index == 2) {
return "alternate2";
}
return null;
};
this._listView.validateNow();
var state0 = this._listView.itemToItemState(collection.get(0));
Assert.notNull(state0);
Assert.isNull(state0.recyclerID);
var state1 = this._listView.itemToItemState(collection.get(1));
Assert.notNull(state1);
Assert.equals("alternate", state1.recyclerID);
var state2 = this._listView.itemToItemState(collection.get(2));
Assert.notNull(state2);
Assert.equals("alternate2", state2.recyclerID);
}
}

private class CustomRendererWithInterfaces extends LayoutGroup implements IToggle implements IDataRenderer implements ILayoutIndexObject
Expand Down
25 changes: 25 additions & 0 deletions test/src/feathers/controls/TabBarTest.hx
Original file line number Diff line number Diff line change
Expand Up @@ -772,6 +772,31 @@ class TabBarTest extends Test {
TriggerEvent.dispatchFromTouchEvent(tab, new TouchEvent(TouchEvent.TOUCH_TAP));
Assert.equals(1, dispatchedTriggerCount);
}

private function testRecyclerIDFunction():Void {
var collection = new ArrayCollection([{text: "One"}, {text: "Two"}, {text: "Three"}]);
this._tabBar.dataProvider = collection;
this._tabBar.setTabRecycler("alternate", DisplayObjectRecycler.withClass(ToggleButton));
this._tabBar.setTabRecycler("alternate2", DisplayObjectRecycler.withClass(ToggleButton));
this._tabBar.tabRecyclerIDFunction = (state) -> {
if (state.index == 1) {
return "alternate";
} else if (state.index == 2) {
return "alternate2";
}
return null;
};
this._tabBar.validateNow();
var state0 = this._tabBar.itemToItemState(collection.get(0));
Assert.notNull(state0);
Assert.isNull(state0.recyclerID);
var state1 = this._tabBar.itemToItemState(collection.get(1));
Assert.notNull(state1);
Assert.equals("alternate", state1.recyclerID);
var state2 = this._tabBar.itemToItemState(collection.get(2));
Assert.notNull(state2);
Assert.equals("alternate2", state2.recyclerID);
}
}

private class CustomRendererWithInterfaces extends ToggleButton implements IDataRenderer implements ILayoutIndexObject {
Expand Down
44 changes: 43 additions & 1 deletion test/src/feathers/controls/TreeGridViewTest.hx
Original file line number Diff line number Diff line change
Expand Up @@ -851,7 +851,7 @@ import utest.Test;
Assert.isFalse(this._treeGridView.isBranchOpen(branch));
}

public function testDefaultTextUpdateForAdditionalRecyclers():Void {
public function testDefaultTextUpdateForColumnRecyclers():Void {
this._treeGridView.dataProvider = new ArrayHierarchicalCollection([{text: "One"}]);
var column1 = new TreeGridViewColumn("1", item -> item.text);
column1.cellRendererRecycler = DisplayObjectRecycler.withClass(HierarchicalItemRenderer);
Expand All @@ -862,6 +862,20 @@ import utest.Test;
Assert.equals("One", itemRenderer.text);
}

public function testDefaultTextUpdateForAdditionalColumnRecyclers():Void {
this._treeGridView.dataProvider = new ArrayHierarchicalCollection([{text: "One"}]);
var column1 = new TreeGridViewColumn("1", item -> item.text);
column1.setCellRendererRecycler("other", DisplayObjectRecycler.withClass(HierarchicalItemRenderer));
column1.cellRendererRecyclerIDFunction = (state) -> {
return "other";
};
this._treeGridView.columns = new ArrayCollection([column1]);
this._treeGridView.validateNow();
var itemRenderer = cast(this._treeGridView.itemAndColumnToCellRenderer(this._treeGridView.dataProvider.get([0]), column1), HierarchicalItemRenderer);
Assert.notNull(itemRenderer);
Assert.equals("One", itemRenderer.text);
}

// ensures that the new index of the existing column doesn't result in a range error
// and that columns are displayed in the correct order
public function testInsertExtraColumnAtBeginning():Void {
Expand Down Expand Up @@ -935,6 +949,34 @@ import utest.Test;
TriggerEvent.dispatchFromTouchEvent(itemRenderer, new TouchEvent(TouchEvent.TOUCH_TAP));
Assert.equals(1, dispatchedTriggerCount);
}

private function testColumnRecyclerIDFunction():Void {
var collection = new ArrayHierarchicalCollection([{text: "One"}, {text: "Two"}, {text: "Three"}]);
this._treeGridView.dataProvider = collection;
var column0 = new TreeGridViewColumn("A", item -> item.text);
column0.setCellRendererRecycler("alternate", DisplayObjectRecycler.withClass(HierarchicalItemRenderer));
column0.setCellRendererRecycler("alternate2", DisplayObjectRecycler.withClass(HierarchicalItemRenderer));
column0.cellRendererRecyclerIDFunction = (state) -> {
if (state.rowLocation[0] == 1) {
return "alternate";
} else if (state.rowLocation[0] == 2) {
return "alternate2";
}
return null;
};
var columns = new ArrayCollection([column0,]);
this._treeGridView.columns = columns;
this._treeGridView.validateNow();
var state0 = this._treeGridView.itemAndColumnToCellState(collection.get([0]), column0);
Assert.notNull(state0);
Assert.isNull(state0.recyclerID);
var state1 = this._treeGridView.itemAndColumnToCellState(collection.get([1]), column0);
Assert.notNull(state1);
Assert.equals("alternate", state1.recyclerID);
var state2 = this._treeGridView.itemAndColumnToCellState(collection.get([2]), column0);
Assert.notNull(state2);
Assert.equals("alternate2", state2.recyclerID);
}
}

private class CustomRendererWithInterfaces extends LayoutGroup implements IToggle implements IOpenCloseToggle implements IDataRenderer
Expand Down
25 changes: 25 additions & 0 deletions test/src/feathers/controls/TreeViewTest.hx
Original file line number Diff line number Diff line change
Expand Up @@ -832,6 +832,31 @@ import utest.Test;
TriggerEvent.dispatchFromTouchEvent(itemRenderer, new TouchEvent(TouchEvent.TOUCH_TAP));
Assert.equals(1, dispatchedTriggerCount);
}

private function testRecyclerIDFunction():Void {
var collection = new ArrayHierarchicalCollection([{text: "One"}, {text: "Two"}, {text: "Three"}]);
this._treeView.dataProvider = collection;
this._treeView.setItemRendererRecycler("alternate", DisplayObjectRecycler.withClass(HierarchicalItemRenderer));
this._treeView.setItemRendererRecycler("alternate2", DisplayObjectRecycler.withClass(HierarchicalItemRenderer));
this._treeView.itemRendererRecyclerIDFunction = (state) -> {
if (state.location[0] == 1) {
return "alternate";
} else if (state.location[0] == 2) {
return "alternate2";
}
return null;
};
this._treeView.validateNow();
var state0 = this._treeView.itemToItemState(collection.get([0]));
Assert.notNull(state0);
Assert.isNull(state0.recyclerID);
var state1 = this._treeView.itemToItemState(collection.get([1]));
Assert.notNull(state1);
Assert.equals("alternate", state1.recyclerID);
var state2 = this._treeView.itemToItemState(collection.get([2]));
Assert.notNull(state2);
Assert.equals("alternate2", state2.recyclerID);
}
}

private class CustomRendererWithInterfaces extends LayoutGroup implements IToggle implements IOpenCloseToggle implements IDataRenderer
Expand Down

0 comments on commit 013015c

Please sign in to comment.