/* * Copyright 2003-2016 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package jetbrains.mps.classloading; import jetbrains.mps.module.ReloadableModule; import jetbrains.mps.module.ReloadableModuleBase; import org.jetbrains.annotations.NotNull; import org.jetbrains.mps.openapi.module.SModule; import org.jetbrains.mps.openapi.module.SRepositoryListener; import org.jetbrains.mps.openapi.module.SRepositoryListenerBase; import org.junit.After; import org.junit.Before; import static org.junit.Assert.assertTrue; public class ModulesReloadTestStress extends ModulesReloadTest { final static SRepositoryListener CRAZY_LISTENER = new SRepositoryListenerBase() { private final ClassLoaderManager myManager = ClassLoaderManager.getInstance(); private final ModulesWatcher myModulesWatcher = myManager.getModulesWatcher(); @Override public void moduleAdded(@NotNull SModule module) { checkModuleWatched(module); myManager.reloadModule(module); } @Override public void beforeModuleRemoved(@NotNull SModule module) { checkModuleWatched(module); myManager.reloadModule(module); } private void checkModuleWatched(SModule module) { if (module instanceof ReloadableModule) { ReloadableModuleBase reloadableModuleBase = (ReloadableModuleBase) module; reloadableModuleBase.getClassLoader(); // to initiate a refresh session in CLManager assertTrue("The module " + module + " is not watched by class loading", myModulesWatcher.isModuleWatched(reloadableModuleBase)); } } }; @Before public void attachCrazyListener() { getTestRepository().addRepositoryListener(CRAZY_LISTENER); } @After public void detachCrazyListener() { getTestRepository().removeRepositoryListener(CRAZY_LISTENER); } }