How to use PlayerInventoryMock class of be.seeseemelk.mockbukkit.inventory package

Best MockBukkit code snippet using be.seeseemelk.mockbukkit.inventory.PlayerInventoryMock

Source:BeeAtlasListCategoryTest.java Github

copy

Full Screen

...16import org.mockito.Spy;17import be.seeseemelk.mockbukkit.MockBukkit;18import be.seeseemelk.mockbukkit.ServerMock;19import be.seeseemelk.mockbukkit.entity.PlayerMock;20import be.seeseemelk.mockbukkit.inventory.PlayerInventoryMock;21import cz.martinbrom.slimybees.SlimyBeesPlugin;22import cz.martinbrom.slimybees.core.BeeLoreService;23import cz.martinbrom.slimybees.core.BeeRegistry;24import cz.martinbrom.slimybees.core.SlimyBeesPlayerProfile;25import cz.martinbrom.slimybees.core.genetics.BeeGeneticService;26import cz.martinbrom.slimybees.core.genetics.alleles.AlleleRegistry;27import cz.martinbrom.slimybees.core.genetics.alleles.AlleleSpecies;28import cz.martinbrom.slimybees.utils.SlimyBeesHeadTexture;29import io.github.thebusybiscuit.slimefun4.api.player.PlayerProfile;30import io.github.thebusybiscuit.slimefun4.core.guide.SlimefunGuideMode;31import io.github.thebusybiscuit.slimefun4.implementation.Slimefun;32import io.github.thebusybiscuit.slimefun4.libraries.dough.items.CustomItemStack;33import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ChestMenu;34import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ClickAction;35import static cz.martinbrom.slimybees.test.TestUtils.assertDisplayName;36import static cz.martinbrom.slimybees.test.TestUtils.awaitProfile;37import static cz.martinbrom.slimybees.test.TestUtils.registerSpecies;38import static org.junit.jupiter.api.Assertions.assertEquals;39import static org.junit.jupiter.api.Assertions.assertNull;40import static org.junit.jupiter.api.Assertions.assertTrue;41import static org.mockito.ArgumentMatchers.anyString;42import static org.mockito.Mockito.mock;43import static org.mockito.Mockito.mockStatic;44import static org.mockito.Mockito.never;45import static org.mockito.Mockito.spy;46import static org.mockito.Mockito.times;47import static org.mockito.Mockito.verify;48import static org.mockito.Mockito.when;49@ParametersAreNonnullByDefault50public class BeeAtlasListCategoryTest {51 public static final ClickAction RIGHT_CLICK = new ClickAction(true, false);52 public static final ClickAction LEFT_CLICK = new ClickAction(false, false);53 private static ServerMock server;54 private static MockedStatic<SlimyBeesPlayerProfile> sbppStaticMock;55 private BeeAtlasListCategory listCategory;56 private PlayerMock p;57 private SlimyBeesPlayerProfile sbProfile;58 private ChestMenu menu;59 private BeeAtlasCategoryFactory factory;60 @Spy61 private BeeLoreService loreService;62 @Mock63 private BeeRegistry beeRegistry;64 @Mock65 private BeeGeneticService geneticService;66 @Mock67 private AlleleRegistry alleleRegistry;68 @Mock69 private BeeAtlasNavigationService navigationService;70 @BeforeAll71 public static void load() {72 server = MockBukkit.mock();73 // load Slimefun and SlimyBees74 MockBukkit.load(Slimefun.class);75 MockBukkit.load(SlimyBeesPlugin.class);76 sbppStaticMock = mockStatic(SlimyBeesPlayerProfile.class);77 }78 @BeforeEach79 public void setUp() {80 MockitoAnnotations.openMocks(this);81 factory = spy(new BeeAtlasCategoryFactory(loreService, beeRegistry, geneticService,82 alleleRegistry, navigationService));83 listCategory = spy(factory.createList(new ItemStack(Material.COBBLESTONE)));84 menu = new ChestMenu("test");85 when(listCategory.createMenu(anyString())).thenReturn(menu);86 p = server.addPlayer();87 sbProfile = mock(SlimyBeesPlayerProfile.class);88 when(SlimyBeesPlayerProfile.get(p)).thenReturn(sbProfile);89 }90 @AfterAll91 public static void unload() {92 MockBukkit.unmock();93 sbppStaticMock.close();94 }95 @Test96 void testShouldAlwaysBeVisibleInMainMenu() throws InterruptedException {97 PlayerProfile profile = awaitProfile(p);98 assertTrue(listCategory.isVisible(p, profile, SlimefunGuideMode.SURVIVAL_MODE));99 assertTrue(listCategory.isVisible(p, profile, SlimefunGuideMode.CHEAT_MODE));100 }101 @Test102 void testSpeciesShownConditions() throws InterruptedException {103 PlayerProfile profile = awaitProfile(p);104 AlleleSpecies discovered = registerSpecies(alleleRegistry, "species:discovered", "DISCOVERED");105 AlleleSpecies displayed = registerSpecies(alleleRegistry, "species:displayed", "DISPLAYED");106 AlleleSpecies both = registerSpecies(alleleRegistry, "species:both", "BOTH");107 AlleleSpecies neither = registerSpecies(alleleRegistry, "species:neither", "NEITHER");108 when(alleleRegistry.getAllSpecies()).thenReturn(Arrays.asList(discovered, displayed, both, neither));109 when(sbProfile.hasDiscovered(discovered)).thenReturn(true);110 when(sbProfile.hasDiscovered(both)).thenReturn(true);111 when(beeRegistry.isAlwaysDisplayed(displayed)).thenReturn(true);112 when(beeRegistry.isAlwaysDisplayed(both)).thenReturn(true);113 listCategory.open(p, profile, SlimefunGuideMode.SURVIVAL_MODE);114 assertDisplayName("Discovered Bee", menu.getItemInSlot(9));115 assertDisplayName("Displayed Bee", menu.getItemInSlot(10));116 assertDisplayName("Both Bee", menu.getItemInSlot(11));117 assertEquals(AbstractBeeAtlasCategory.UNDISCOVERED_SPECIES_ITEM, menu.getItemInSlot(12));118 }119 @Test120 void testClickingUndiscoveredDoesNothing() throws InterruptedException {121 PlayerProfile profile = awaitProfile(p);122 AlleleSpecies species = registerSpecies(alleleRegistry, "species:test", "TEST");123 when(alleleRegistry.getAllSpecies()).thenReturn(Collections.singletonList(species));124 listCategory.open(p, profile, SlimefunGuideMode.SURVIVAL_MODE);125 menu.getMenuClickHandler(9).onClick(p, 9, species.getDroneItemStack(), LEFT_CLICK);126 menu.getMenuClickHandler(9).onClick(p, 9, species.getDroneItemStack(), RIGHT_CLICK);127 verify(navigationService, never()).openDetailPage(profile, species, factory);128 }129 @Test130 void testClickingDiscoveredOpensDetail() throws InterruptedException {131 PlayerProfile profile = awaitProfile(p);132 AlleleSpecies species = registerSpecies(alleleRegistry, "species:test", "TEST");133 when(alleleRegistry.getAllSpecies()).thenReturn(Collections.singletonList(species));134 when(sbProfile.hasDiscovered(species)).thenReturn(true);135 listCategory.open(p, profile, SlimefunGuideMode.SURVIVAL_MODE);136 menu.getMenuClickHandler(9).onClick(p, 9, species.getDroneItemStack(), LEFT_CLICK);137 menu.getMenuClickHandler(9).onClick(p, 9, species.getDroneItemStack(), RIGHT_CLICK);138 verify(navigationService, times(2)).openDetailPage(profile, species, factory);139 }140 @Test141 void testSecretSpeciesNotShown() throws InterruptedException {142 PlayerProfile profile = awaitProfile(p);143 AlleleSpecies normal = registerSpecies(alleleRegistry, "species:normal", "NORMAL");144 AlleleSpecies secret = registerSpecies(alleleRegistry, "species:secret", "SECRET", true);145 AlleleSpecies secretDiscovered = registerSpecies(alleleRegistry, "species:secret_discovered", "SECRET_DISCOVERED", true);146 when(alleleRegistry.getAllSpecies()).thenReturn(Arrays.asList(normal, secret, secretDiscovered));147 when(sbProfile.hasDiscovered(secretDiscovered)).thenReturn(true);148 listCategory.open(p, profile, SlimefunGuideMode.SURVIVAL_MODE);149 assertEquals(AbstractBeeAtlasCategory.UNDISCOVERED_SPECIES_ITEM, menu.getItemInSlot(9));150 assertNull(menu.getItemInSlot(10));151 assertNull(menu.getItemInSlot(11));152 }153 @Test154 void testCheatModeButtons() throws InterruptedException {155 PlayerProfile profile = awaitProfile(p);156 AlleleSpecies species = registerSpecies(alleleRegistry, "species:test", "TEST");157 when(alleleRegistry.getAllSpecies()).thenReturn(Collections.singletonList(species));158 ItemStack princessItem = new CustomItemStack(SlimyBeesHeadTexture.PRINCESS.getAsItemStack(), species.getDisplayName() + " Princess");159 species.setPrincessItemStack(princessItem);160 listCategory.open(p, profile, SlimefunGuideMode.CHEAT_MODE);161 int firstBeeSlot = 9;162 ItemStack button = menu.getItemInSlot(firstBeeSlot);163 assertDisplayName("Test Bee", button);164 BiFunction<ItemStack, String, Boolean> similarConditionFn = (i, s) -> {165 ItemMeta meta = i.getItemMeta();166 if (meta == null) {167 return false;168 }169 return meta.getDisplayName().equals(s);170 };171 PlayerInventoryMock inv = (PlayerInventoryMock) p.getInventory();172 menu.getMenuClickHandler(firstBeeSlot).onClick(p, firstBeeSlot, button, RIGHT_CLICK);173 inv.assertTrueForSome(i -> similarConditionFn.apply(i, "Test Drone"));174 menu.getMenuClickHandler(firstBeeSlot).onClick(p, firstBeeSlot, button, LEFT_CLICK);175 inv.assertTrueForSome(i -> similarConditionFn.apply(i, "Test Princess"));176 }177}...

Full Screen

Full Screen

Source:PlayerInventoryMockTest.java Github

copy

Full Screen

...8import org.junit.Test;9import be.seeseemelk.mockbukkit.MockBukkit;10import be.seeseemelk.mockbukkit.ServerMock;11import be.seeseemelk.mockbukkit.entity.PlayerMock;12public class PlayerInventoryMockTest13{14 private ServerMock server;15 private PlayerInventoryMock inventory;16 @Before17 public void setUp() throws Exception18 {19 server = MockBukkit.mock();20 inventory = new PlayerInventoryMock(null, "Inventory");21 }22 @After23 public void tearDown() throws Exception24 {25 MockBukkit.unload();26 }27 @Test28 public void getSize_Default_41()29 {30 assertEquals(41, inventory.getSize());31 }32 33 @Test34 public void getHolder_HolderSet_GetsHolder()35 {36 PlayerMock player = server.addPlayer();37 PlayerInventoryMock inventory = new PlayerInventoryMock(player, "");38 assertSame(player, inventory.getHolder());39 }40 41 @SuppressWarnings("deprecation")42 @Test43 public void setItemInMainHand_SomeItem_ItemSet()44 {45 ItemStack item = new ItemStack(Material.STONE);46 item.setAmount(25);47 inventory.setItemInMainHand(item);48 assertEquals(item, inventory.getItemInMainHand());49 assertEquals(item, inventory.getItemInHand());50 assertEquals(item, inventory.getContents()[PlayerInventoryMock.SLOT_BAR]);51 }52 53 @SuppressWarnings("deprecation")54 @Test55 public void setItemInHand_SomeItem_ItemSet()56 {57 ItemStack item = new ItemStack(Material.STONE);58 item.setAmount(25);59 inventory.setItemInHand(item);60 assertEquals(item, inventory.getItemInMainHand());61 assertEquals(item, inventory.getItemInHand());62 }63 64 @Test65 public void setHeldItemSlot_SecondSlot_ChangesSlot()66 {67 inventory.setHeldItemSlot(1);68 assertEquals(1, inventory.getHeldItemSlot());69 ItemStack item = new ItemStack(Material.STONE);70 item.setAmount(25);71 inventory.setItemInMainHand(item);72 assertEquals(item, inventory.getItemInMainHand());73 assertEquals(item, inventory.getItem(PlayerInventoryMock.SLOT_BAR + 1));74 }75 76 @Test77 public void setHeldItemSlot_WithinRange_Works()78 {79 for (int i = 0; i <= 8; i++)80 {81 inventory.setHeldItemSlot(i);82 assertEquals(i, inventory.getHeldItemSlot());83 }84 }85 86 @Test(expected = ArrayIndexOutOfBoundsException.class)87 public void setHeldItemSlot_TooLow_Exception()88 {89 inventory.setHeldItemSlot(-1);90 }91 92 @Test(expected = ArrayIndexOutOfBoundsException.class)93 public void setHeldItemSlot_TooHigh_Exception()94 {95 inventory.setHeldItemSlot(9);96 }97 98 @Test99 public void getArmorContents_Default_Length4()100 {101 assertEquals(4, inventory.getArmorContents().length);102 }103 104 @Test105 public void getExtraContents_Default_Length1()106 {107 assertEquals(1, inventory.getExtraContents().length);108 }109 110 @Test111 public void setItem_InInventory_ItemInContents()112 {113 ItemStack item = new ItemStack(Material.STONE);114 inventory.setItem(0, item);115 assertEquals(item, inventory.getContents()[0]);116 }117 118 @Test119 public void setItem_InArmorInventory_ItemInArmorContents()120 {121 ItemStack item = new ItemStack(Material.STONE);122 inventory.setItem(36, item);123 assertEquals(item, inventory.getArmorContents()[0]);124 }125 126 @Test127 public void setItem_InExtraInventory_ItemInExtraContents()128 {129 ItemStack item = new ItemStack(Material.STONE);130 inventory.setItem(40, item);131 assertEquals(item, inventory.getExtraContents()[0]);132 }133 134 @Test135 public void getArmorContents_ContentsChanged_ItemsChanged()136 {137 ItemStack boots = new ItemStack(Material.DIAMOND_BOOTS);138 ItemStack leggings = new ItemStack(Material.DIAMOND_LEGGINGS);139 ItemStack chestplate = new ItemStack(Material.DIAMOND_CHESTPLATE);140 ItemStack helmet = new ItemStack(Material.DIAMOND_HELMET);141 inventory.setItem(PlayerInventoryMock.BOOTS, boots);142 inventory.setItem(PlayerInventoryMock.LEGGINGS, leggings);143 inventory.setItem(PlayerInventoryMock.CHESTPLATE, chestplate);144 inventory.setItem(PlayerInventoryMock.HELMET, helmet);145 ItemStack[] contents = inventory.getArmorContents();146 assertEquals(boots, contents[0]);147 assertEquals(leggings, contents[1]);148 assertEquals(chestplate, contents[2]);149 assertEquals(helmet, contents[3]);150 assertEquals(boots, inventory.getBoots());151 assertEquals(leggings, inventory.getLeggings());152 assertEquals(chestplate, inventory.getChestplate());153 assertEquals(helmet, inventory.getHelmet());154 }155 156 @Test157 public void setBoots_ArmorItem_ArmorItemSet()158 {159 ItemStack boots = new ItemStack(Material.DIAMOND_BOOTS);160 inventory.setBoots(boots);161 assertEquals(boots, inventory.getBoots());162 }163 164 @Test165 public void setLeggings_ArmorItem_ArmorItemSet()166 {167 ItemStack leggings = new ItemStack(Material.DIAMOND_LEGGINGS);168 inventory.setLeggings(leggings);169 assertEquals(leggings, inventory.getLeggings());170 }171 172 @Test173 public void setChestplate_ArmorItem_ArmorItemSet()174 {175 ItemStack chestplate = new ItemStack(Material.DIAMOND_CHESTPLATE);176 inventory.setChestplate(chestplate);177 assertEquals(chestplate, inventory.getChestplate());178 }179 180 @Test181 public void setHelmet_ArmorItem_ArmorItemSet()182 {183 ItemStack helmet = new ItemStack(Material.DIAMOND_HELMET);184 inventory.setHelmet(helmet);185 assertEquals(helmet, inventory.getHelmet());186 }187 188 @Test189 public void setContent_ResultFromGetContent_Works()190 {191 inventory.setContents(inventory.getContents());192 }193 194 @Test195 public void setArmorContents_NewArray_ArmorSet()196 {197 ItemStack boots = new ItemStack(Material.DIAMOND_BOOTS);198 ItemStack leggings = new ItemStack(Material.DIAMOND_LEGGINGS);199 ItemStack chestplate = new ItemStack(Material.DIAMOND_CHESTPLATE);200 ItemStack helmet = new ItemStack(Material.DIAMOND_HELMET);201 ItemStack[] contents = {boots, leggings, chestplate, helmet};202 inventory.setArmorContents(contents);203 assertEquals(boots, inventory.getBoots());204 assertEquals(leggings, inventory.getLeggings());205 assertEquals(chestplate, inventory.getChestplate());206 assertEquals(helmet, inventory.getHelmet());207 }208 209 @Test210 public void setItemInOffHand_NewItem_ItemSet()211 {212 ItemStack item = new ItemStack(Material.STONE);213 inventory.setItemInOffHand(item);214 assertEquals(item, inventory.getItemInOffHand());215 assertEquals(item, inventory.getItem(PlayerInventoryMock.OFF_HAND));216 }217 218 @Test219 public void setExtraContents_NewItem_OffHandSet()220 {221 ItemStack item = new ItemStack(Material.STONE);222 inventory.setExtraContents(new ItemStack[]{item});223 ItemStack[] contents = inventory.getExtraContents();224 assertEquals(item, contents[0]);225 assertEquals(item, inventory.getItemInOffHand());226 }227 228 @Test(expected = NullPointerException.class)229 public void setArmorContents_Null_Exception()...

Full Screen

Full Screen

PlayerInventoryMock

Using AI Code Generation

copy

Full Screen

1import be.seeseemelk.mockbukkit.MockBukkit;2import be.seeseemelk.mockbukkit.ServerMock;3import be.seeseemelk.mockbukkit.inventory.PlayerInventoryMock;4import org.junit.After;5import org.junit.Before;6import org.junit.Test;7import org.bukkit.Material;8import org.bukkit.inventory.ItemStack;9import static org.junit.Assert.assertEquals;10import static org.junit.Assert.assertTrue;11{12 private ServerMock server;13 private PlayerInventoryMock inventory;14 public void setUp()15 {16 server = MockBukkit.mock();17 inventory = new PlayerInventoryMock();18 }19 public void tearDown()20 {21 MockBukkit.unmock();22 }23 public void testSize()24 {25 assertEquals(36, inventory.getSize());26 }27 public void testSetItem()28 {29 ItemStack item = new ItemStack(Material.STONE);30 inventory.setItem(0, item);31 assertEquals(item, inventory.getItem(0));32 }33 public void testGetItem()34 {35 ItemStack item = new ItemStack(Material.STONE);36 inventory.setItem(0, item);37 assertEquals(item, inventory.getItem(0));38 }39 public void testGetItemOutOfBounds()40 {41 assertEquals(null, inventory.getItem(-1));42 assertEquals(null, inventory.getItem(36));43 }44 public void testClear()45 {46 ItemStack item = new ItemStack(Material.STONE);47 inventory.setItem(0, item);48 inventory.clear();49 assertEquals(null, inventory.getItem(0));50 }51 public void testClearOutOfBounds()52 {53 inventory.clear(-1);54 inventory.clear(36);55 }56 public void testClearItem()57 {58 ItemStack item = new ItemStack(Material.STONE);59 inventory.setItem(0, item);60 inventory.clear(0);61 assertEquals(null, inventory.getItem(0));62 }63 public void testContains()64 {65 ItemStack item = new ItemStack(Material.STONE);66 inventory.setItem(0, item);67 assertTrue(inventory.contains(Material.STONE));68 }69 public void testContainsItem()70 {71 ItemStack item = new ItemStack(Material.STONE);72 inventory.setItem(0, item);73 assertTrue(inventory.contains(item));74 }

Full Screen

Full Screen

PlayerInventoryMock

Using AI Code Generation

copy

Full Screen

1import org.junit.jupiter.api.Test;2import org.junit.jupiter.api.extension.ExtendWith;3import be.seeseemelk.mockbukkit.MockBukkit;4import be.seeseemelk.mockbukkit.ServerMock;5import be.seeseemelk.mockbukkit.entity.PlayerMock;6import be.seeseemelk.mockbukkit.inventory.PlayerInventoryMock;7@ExtendWith(MockBukkit.class)8{9 public void testPlayerInventoryMock()10 {11 ServerMock server = MockBukkit.mock();12 PlayerMock player = server.addPlayer();13 PlayerInventoryMock inventory = player.getInventory();14 inventory.addItem(new ItemStack(Material.DIAMOND, 64));

Full Screen

Full Screen

PlayerInventoryMock

Using AI Code Generation

copy

Full Screen

1import org.bukkit.entity.Player;2import org.bukkit.inventory.ItemStack;3import org.junit.Before;4import org.junit.Test;5import org.junit.runner.RunWith;6import org.mockito.Mock;7import org.mockito.junit.MockitoJUnitRunner;8import be.seeseemelk.mockbukkit.MockBukkit;9import be.seeseemelk.mockbukkit.entity.PlayerMock;10import be.seeseemelk.mockbukkit.inventory.PlayerInventoryMock;11@RunWith(MockitoJUnitRunner.class)12public class PlayerInventoryMockTest {13 private PlayerMock playerMock;14 public void setUp() {15 MockBukkit.mock();16 }17 public void testInventory() {18 PlayerInventoryMock inventory = playerMock.getInventory();19 ItemStack item = new ItemStack(Material.DIAMOND);20 inventory.addItem(item);21 }22}23JVM name : Java HotSpot(TM) 64-Bit Server VM

Full Screen

Full Screen

PlayerInventoryMock

Using AI Code Generation

copy

Full Screen

1package be.seeseemelk.mockbukkit.inventory;2import static org.junit.Assert.*;3import org.bukkit.Material;4import org.bukkit.inventory.ItemStack;5import org.junit.Before;6import org.junit.Test;7{8 private PlayerInventoryMock inventory;9 public void setUp() throws Exception10 {11 inventory = new PlayerInventoryMock();12 }13 public void testGetContents()14 {15 ItemStack[] contents = inventory.getContents();16 assertNotNull(contents);17 assertEquals(36, contents.length);18 }19 public void testGetArmorContents()20 {21 ItemStack[] contents = inventory.getArmorContents();22 assertNotNull(contents);23 assertEquals(4, contents.length);24 }25 public void testSetArmorContents()26 {27 {28 new ItemStack(Material.DIAMOND_CHESTPLATE),29 new ItemStack(Material.DIAMOND_LEGGINGS),30 new ItemStack(Material.DIAMOND_BOOTS),31 new ItemStack(Material.DIAMOND_HELMET)32 };33 inventory.setArmorContents(contents);34 assertArrayEquals(contents, inventory.getArmorContents());35 }36 public void testGetItemInHand()37 {38 inventory.setItemInMainHand(new ItemStack(Material.DIAMOND_SWORD));39 assertEquals(Material.DIAMOND_SWORD, inventory.getItemInHand().getType());40 }41 public void testSetItemInHand()42 {43 inventory.setItemInMainHand(new ItemStack(Material.DIAMOND_SWORD));44 assertEquals(Material.DIAMOND_SWORD, inventory.getItemInHand().getType());45 }46 public void testGetItemInMainHand()47 {48 inventory.setItemInMainHand(new ItemStack(Material.DIAMOND_SWORD));49 assertEquals(Material.DIAMOND_SWORD, inventory.getItemInMainHand().getType());50 }51 public void testSetItemInMainHand()52 {53 inventory.setItemInMainHand(new ItemStack(Material.DIAMOND_SWORD));54 assertEquals(Material.DIAMOND_SWORD, inventory.getItemInMainHand().getType());55 }56 public void testGetItemInOffHand()57 {58 inventory.setItemInOffHand(new ItemStack(Material.DIAMOND_SWORD));

Full Screen

Full Screen

Automation Testing Tutorials

Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful