Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/generation_testing.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ on:


concurrency:
group: ${{ github.workflow }}|${{ github.ref_name }}
group: ${{ github.workflow }}|${{ github.ref_name }}-generation
cancel-in-progress: true


Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/nodes_testing.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ on:


concurrency:
group: ${{ github.workflow }}|${{ github.ref_name }}
group: ${{ github.workflow }}|${{ github.ref_name }}-nodes
cancel-in-progress: true


Expand Down
40 changes: 40 additions & 0 deletions .github/workflows/renderers_testing.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
name: GHA

on:
pull_request:
paths-ignore:
- '**.yml'
- '**.md'
workflow_dispatch:


concurrency:
group: ${{ github.workflow }}|${{ github.ref_name }}-renderer
cancel-in-progress: true


jobs:
warning_check:
name: "Rendering Testing"
runs-on: 'ubuntu-22.04'
timeout-minutes: 10 # The overall timeout
permissions:
actions: write
checks: write
contents: write
pull-requests: write
statuses: write

steps:
# checkout your repository
- uses: actions/checkout@v4
with:
lfs: true
# run tests by using the gdUnit4-action with Godot version 4.2.1 and the latest GdUnit4 release
- uses: MikeSchulze/gdUnit4-action@v1.1.6
with:
godot-version: '4.4.1'
paths: |
res://testing/rendering
timeout: 5
publish-report: false
2 changes: 2 additions & 0 deletions addons/gaea/nodes/renderers/tilemap_renderer.gd
Original file line number Diff line number Diff line change
Expand Up @@ -41,4 +41,6 @@ func _on_area_erased(area: AABB) -> void:

func _reset() -> void:
for tile_map_layer in tile_map_layers:
if not is_instance_valid(tile_map_layer):
continue
tile_map_layer.clear()
74 changes: 74 additions & 0 deletions testing/rendering/gridmap_renderer_test.gd
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
extends GdUnitTestSuite


const ITEM_1_TILES_HASH := 836889996
const ITEM_2_TILES_HASH := 286036777
const ITEM_1_TILES_HASH_SMALL := 1666742523
const ITEM_2_TILES_HASH_SMALL := 3765593323


var scene: Node3D
var runner: GdUnitSceneRunner


func before() -> void:
scene = load("uid://bamaii0ujxbp2").instantiate()
runner = scene_runner(scene)


func test_full_area() -> void:
scene.generator.generate()
await scene.generator.generation_finished

var item_1_cells_used: Array[Vector3i] = scene.renderer.grid_maps[0].get_used_cells_by_item(0)
assert_array(item_1_cells_used).is_not_empty()
var item_1_hash: int = item_1_cells_used.hash()
assert_int(item_1_hash)\
.override_failure_message("Layer 0 rendering of [b]GridMapGaeaRenderer[/b] not working as expected.")\
.append_failure_message("Produced hash:%s\n Expected hash:%s" % [item_1_hash, ITEM_1_TILES_HASH])\
.is_equal(ITEM_1_TILES_HASH)

var item_2_cells_used: Array[Vector3i] = scene.renderer.grid_maps[1].get_used_cells_by_item(1)
assert_array(item_2_cells_used).is_not_empty()
var item_2_hash: int = item_2_cells_used.hash()
assert_int(item_2_hash)\
.override_failure_message("Layer 1 rendering of [b]GridMapGaeaRenderer[/b] not working as expected.")\
.append_failure_message("Produced hash:%s\n Expected hash:%s" % [item_2_hash, ITEM_2_TILES_HASH])\
.is_equal(ITEM_2_TILES_HASH)


func test_reset() -> void:
scene.generator.request_reset()
assert_array(scene.renderer.grid_maps[0].get_used_cells())\
.override_failure_message("[b]GridMapGaeaRenderer[/b] wasn't cleared properly.")\
.is_empty()
assert_array(scene.renderer.grid_maps[1].get_used_cells())\
.override_failure_message("[b]GridMapGaeaRenderer[/b] wasn't cleared properly.")\
.is_empty()


func test_small_area() -> void:
var area: AABB = AABB(Vector3.ZERO, Vector3.ONE * 16)
scene.generator.generate_area(area)
await scene.generator.generation_finished

var item_1_cells_used: Array[Vector3i] = scene.renderer.grid_maps[0].get_used_cells_by_item(0)
assert_array(item_1_cells_used).is_not_empty()
var item_1_hash: int = item_1_cells_used.hash()
assert_int(item_1_hash)\
.override_failure_message("Layer 0 rendering of [b]TileMapGaeaRenderer[/b] area not working as expected.")\
.append_failure_message("Produced hash:%s\n Expected hash:%s" % [item_1_hash, ITEM_1_TILES_HASH])\
.is_equal(ITEM_1_TILES_HASH_SMALL)

var item_2_cells_used: Array[Vector3i] = scene.renderer.grid_maps[1].get_used_cells_by_item(1)
assert_array(item_2_cells_used).is_not_empty()
var item_2_hash: int = item_2_cells_used.hash()
assert_int(item_2_hash)\
.override_failure_message("Layer 1 rendering of [b]TileMapGaeaRenderer[/b] area not working as expected.")\
.append_failure_message("Produced hash:%s\n Expected hash:%s" % [item_2_hash, ITEM_2_TILES_HASH])\
.is_equal(ITEM_2_TILES_HASH_SMALL)

func test_null_layer() -> void:
scene.renderer.grid_maps[1] = null
assert_error(scene.generator.generate)\
.is_success()
1 change: 1 addition & 0 deletions testing/rendering/gridmap_renderer_test.gd.uid
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
uid://degq61scyh6nr
198 changes: 198 additions & 0 deletions testing/rendering/gridmap_test_scene.tscn

Large diffs are not rendered by default.

5 changes: 5 additions & 0 deletions testing/rendering/renderer_test_scene.gd
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
extends Node


@onready var generator: GaeaGenerator = $GaeaGenerator
@onready var renderer: GaeaRenderer = $Renderer
1 change: 1 addition & 0 deletions testing/rendering/renderer_test_scene.gd.uid
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
uid://cpvk61ewx6ejo
74 changes: 74 additions & 0 deletions testing/rendering/tilemap_renderer_test.gd
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
extends GdUnitTestSuite


const GRASS_TILES_HASH := 1593514366
const SAND_TILES_HASH := 1550241141
const GRASS_TILES_HASH_SMALL := 2384678874
const SAND_TILES_HASH_SMALL := 1850823263


var scene: Node2D
var runner: GdUnitSceneRunner


func before() -> void:
scene = load("uid://xfcy8wwh3sd7").instantiate()
runner = scene_runner(scene)


func test_full_area() -> void:
scene.generator.generate()
await scene.generator.generation_finished

var grass_hash: int = scene.renderer.tile_map_layers[0].get_used_cells_by_id(0, Vector2i(0, 0)).hash()
assert_int(grass_hash)\
.override_failure_message("Layer 0 rendering of [b]TileMapGaeaRenderer[/b] not working as expected.")\
.append_failure_message("Produced hash:%s\n Expected hash:%s" % [grass_hash, GRASS_TILES_HASH])\
.is_equal(GRASS_TILES_HASH)

var sand_hash: int = scene.renderer.tile_map_layers[1].get_used_cells_by_id(0, Vector2i(1, 0)).hash()
assert_int(sand_hash)\
.override_failure_message("Layer 1 rendering of [b]TileMapGaeaRenderer[/b] not working as expected.")\
.append_failure_message("Produced hash:%s\n Expected hash:%s" % [sand_hash, SAND_TILES_HASH])\
.is_equal(SAND_TILES_HASH)


func test_reset() -> void:
scene.generator.request_reset()
assert_array(scene.renderer.tile_map_layers[0].get_used_cells())\
.override_failure_message("[b]TileMapGaeaRenderer[/b] wasn't cleared properly.")\
.is_empty()
assert_array(scene.renderer.tile_map_layers[1].get_used_cells())\
.override_failure_message("[b]TileMapGaeaRenderer[/b] wasn't cleared properly.")\
.is_empty()


func test_small_area() -> void:
var area: AABB = AABB(Vector3.ZERO, Vector3.ONE * 16)
scene.generator.generate_area(area)
await scene.generator.generation_finished

var grass_hash: int = scene.renderer.tile_map_layers[0].get_used_cells_by_id(0, Vector2i(0, 0)).hash()
assert_int(grass_hash)\
.override_failure_message("Layer 0 rendering of [b]TileMapGaeaRenderer[/b] area not working as expected.")\
.append_failure_message("Produced hash:%s\n Expected hash:%s" % [grass_hash, GRASS_TILES_HASH_SMALL])\
.is_equal(GRASS_TILES_HASH_SMALL)

var sand_hash: int = scene.renderer.tile_map_layers[1].get_used_cells_by_id(0, Vector2i(1, 0)).hash()
assert_int(sand_hash)\
.override_failure_message("Layer 1 rendering of [b]TileMapGaeaRenderer[/b] area not working as expected.")\
.append_failure_message("Produced hash:%s\n Expected hash:%s" % [sand_hash, SAND_TILES_HASH_SMALL])\
.is_equal(SAND_TILES_HASH_SMALL)

assert_vector(scene.renderer.tile_map_layers[0].get_used_rect().size)\
.override_failure_message("Rendered [b]TileMapGaeaRenderer[/b] area was bigger than expected.")\
.is_less_equal(Vector2i(area.size.x, area.size.y))
assert_vector(scene.renderer.tile_map_layers[1].get_used_rect().size)\
.override_failure_message("Rendered [b]TileMapGaeaRenderer[/b] area was bigger than expected.")\
.is_less_equal(Vector2i(area.size.x, area.size.y))


func test_null_layer() -> void:
scene.renderer.tile_map_layers[1] = null
assert_error(scene.generator.generate)\
.is_success()
1 change: 1 addition & 0 deletions testing/rendering/tilemap_renderer_test.gd.uid
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
uid://bxqdgoeaojlb1
Loading
Loading