From 11bb5e6608d3b622782ed5d97231c730285ad1a1 Mon Sep 17 00:00:00 2001 From: Oleg Agafonov Date: Sat, 23 Mar 2024 19:24:23 +0400 Subject: [PATCH] tests: added string replace freeze test for #11285 --- .../performance/RulesFormatTest.java | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 Mage.Tests/src/test/java/org/mage/test/serverside/performance/RulesFormatTest.java diff --git a/Mage.Tests/src/test/java/org/mage/test/serverside/performance/RulesFormatTest.java b/Mage.Tests/src/test/java/org/mage/test/serverside/performance/RulesFormatTest.java new file mode 100644 index 00000000000..712f42cbc1f --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/serverside/performance/RulesFormatTest.java @@ -0,0 +1,39 @@ +package org.mage.test.serverside.performance; + +import mage.cards.repository.CardScanner; +import org.junit.Ignore; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.List; + +public class RulesFormatTest { + + @Test + @Ignore // debug only, can be slow (10+ secs) + public void test_InfiniteFreezeOnStringReplace_Fast() { + // use case: in some point of time java's string replace code from GainAbilityAttachedEffect can freeze forever + // details: https://github.com/magefree/mage/issues/11285#issuecomment-2011326865 + // status: can't reproduce original bug, maybe regexp freeze related to JRE versions/builds + + CardScanner.scan(); + CardScanner.getAllCards().forEach(card -> { + List possibleObjectNames = new ArrayList<>(); + // any card names + possibleObjectNames.add(card.getName()); + // all names from GainAbilityAttachedEffect + possibleObjectNames.add("creature"); + possibleObjectNames.add("permanent"); + possibleObjectNames.add("land"); + possibleObjectNames.add("planeswalker"); + + card.getAbilities().forEach(ability -> { + possibleObjectNames.forEach(name -> { + // simulate replacement code from GainAbilityAttachedEffect::getText + String sourceName = "This " + name; + ability.getRule(sourceName); + }); + }); + }); + } +}