grounditems: manually match item thresholds

The regex used was explosive and wouldn't complete with large inputs
that can appear when the user has a mildly corrupted config
This commit is contained in:
Max Weber
2020-03-26 11:06:59 -06:00
parent 18a9a60b7d
commit 1f09833022
3 changed files with 89 additions and 13 deletions

View File

@@ -0,0 +1,49 @@
/*
* Copyright (c) 2020 Abex
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package net.runelite.client.plugins.grounditems;
import joptsimple.internal.Strings;
import org.junit.Assert;
import static net.runelite.client.plugins.grounditems.ItemThreshold.Inequality.*;
import org.junit.Test;
public class ItemThresholdTest
{
@Test
public void test()
{
Assert.assertEquals(ItemThreshold.fromConfigEntry("Dharok's platebody 100"), new ItemThreshold("Dharok's platebody 100", 0, MORE_THAN));
Assert.assertEquals(ItemThreshold.fromConfigEntry("Dharok's platebody 100<100"), new ItemThreshold("Dharok's platebody 100", 100, LESS_THAN));
Assert.assertEquals(ItemThreshold.fromConfigEntry("Dharok's platebody > 100"), new ItemThreshold("Dharok's platebody", 100, MORE_THAN));
Assert.assertEquals(ItemThreshold.fromConfigEntry("Dharok's platebody < 10 0"), new ItemThreshold("Dharok's platebody", 0, MORE_THAN));
}
@Test(timeout = 100)
public void testExplosive()
{
String name = "archer" + Strings.repeat('e', 50000) + "s ring";
Assert.assertEquals(ItemThreshold.fromConfigEntry(name + " < 387"), new ItemThreshold(name, 387, LESS_THAN));
}
}

View File

@@ -25,6 +25,7 @@
package net.runelite.client.plugins.grounditems;
import java.util.Arrays;
import joptsimple.internal.Strings;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
@@ -53,4 +54,13 @@ public class WildcardMatchLoaderTest
assertFalse(loader.load(new NamedQuantity("Abyssal dagger", 1)));
assertTrue(loader.load(new NamedQuantity("Rune Longsword", 2)));
}
@Test(timeout = 1000)
public void testExplosive()
{
String name = "archer" + Strings.repeat('e', 50000) + "s ring";
WildcardMatchLoader loader = new WildcardMatchLoader(Arrays.asList(name + "* < 100"));
assertTrue(loader.load(new NamedQuantity(name, 50)));
assertFalse(loader.load(new NamedQuantity(name, 150)));
}
}