Package jetbrains.communicator.core.impl

Source Code of jetbrains.communicator.core.impl.BaseTestCase

/*
* Copyright 2000-2006 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.communicator.core.impl;

import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.DataContext;
import com.intellij.openapi.actionSystem.Presentation;
import com.intellij.testFramework.LightPlatformTestCase;
import jetbrains.communicator.LightTestCase;
import jetbrains.communicator.core.*;
import jetbrains.communicator.core.impl.transport.CodePointerEventProvider;
import jetbrains.communicator.core.impl.transport.GetProjectsDataProvider;
import jetbrains.communicator.core.impl.transport.GetVFileContentsProvider;
import jetbrains.communicator.core.transport.TextMessageEventProvider;
import jetbrains.communicator.core.transport.XmlResponseProvider;
import jetbrains.communicator.core.users.User;
import jetbrains.communicator.core.users.UserModel;
import jetbrains.communicator.ide.IDEFacade;
import jetbrains.communicator.ide.OwnMessageEvent;
import jetbrains.communicator.p2p.BecomeAvailableXmlMessage;
import jetbrains.communicator.util.StringUtil;
import org.apache.log4j.Logger;
import org.jetbrains.annotations.NonNls;
import org.picocontainer.Disposable;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
* @author Kir
*/
public abstract class BaseTestCase extends LightTestCase {
  @NonNls
  protected static Logger LOG;

  protected static final DataContext NULL_DATA_CONTEXT = new DataContext() {
    @Override
    public Object getData(String dataId) {
      return null;
    }
  };
  private IDEtalkListener myListener;
  protected final List<IDEtalkEvent> myEvents = new ArrayList<IDEtalkEvent>();
  protected IDEtalkOptions myOptions;

  protected BaseTestCase() {
    super();
  }

  public BaseTestCase(String s) {
    super(s);
  }

  @Override
  protected void setUp() throws Exception {
    super.setUp();

    StringUtil.setMyUsername("user_" + getName());
    disposeOnTearDown(new Disposable(){
      @Override
      public void dispose() {
        StringUtil.setMyUsername(null);
      }
    });

    TestFactory.init();
    myOptions = Pico.getOptions();

    LightPlatformTestCase.initApplication();
  }

  @Override
  protected void tearDown() throws Exception {
    if (myListener != null) {
      getBroadcaster().removeListener(myListener);
    }

    super.tearDown();

    EventBroadcasterImpl broadcasterImpl = getBroadcasterImpl();
    try {
      if (broadcasterImpl != null) {
        assertEquals("Non-removed listeners found:" +
            Arrays.asList(broadcasterImpl.getListeners()), 0, broadcasterImpl.getListeners().length);
      }
    }
    finally{
      if (broadcasterImpl != null) {
        broadcasterImpl.clearListeners();
      }
      Pico.disposeInstance();
      TestFactory.deleteFiles();
    }
  }


  protected void registerResponseProviders(UserModel userModel, IDEFacade ideFacade) {
    final XmlResponseProvider[] providers = {
        new GetVFileContentsProvider(ideFacade, userModel),
        new GetProjectsDataProvider(ideFacade, userModel),
        new CodePointerEventProvider(getBroadcaster()),
        new TextMessageEventProvider(getBroadcaster()),
        new BecomeAvailableXmlMessage()
    };
    for (XmlResponseProvider provider : providers) {
      Pico.getInstance().registerComponentInstance(provider);
    }
    disposeOnTearDown(new Disposable(){
      @Override
      public void dispose() {
        for (XmlResponseProvider provider : providers) {
          Pico.getInstance().unregisterComponentByInstance(provider);
        }
      }
    });
  }

  public void markLastListenerForCleanup() {
    IDEtalkListener[] listeners = getBroadcasterImpl().getListeners();
    final IDEtalkListener toRemove = listeners[listeners.length - 1];
    disposeOnTearDown(new Disposable() {
      @Override
      public void dispose() {
        getBroadcaster().removeListener(toRemove);
      }
    });
  }

  private EventBroadcasterImpl getBroadcasterImpl() {
    return (EventBroadcasterImpl) getBroadcaster();
  }

  @Override
  public void runBare() throws Throwable {
    try {
      Pico.initInTests();
      LOG = Logger.getLogger(getClass());

      LOG.info("+++++++++++++++++++++++> " + getName());
      setUp();
      assertNotNull(Pico.getEventBroadcaster());
      runTest();
      verify();
    }
    catch(Throwable e) {
      e.printStackTrace();
      throw e;
    }
    finally{
      tearDown();
      LOG.info("-----------------------> " + getName());
    }
  }

  public EventBroadcaster getBroadcaster() {
    return Pico.getEventBroadcaster();
  }

  protected void addEventListener() {
    if (myListener == null) {
      myListener = createListener();
      getBroadcaster().addListener(myListener);
    }
  }

  protected IDEtalkAdapter createListener() {
    return new IDEtalkAdapter() {
      @Override
      public void afterChange(IDEtalkEvent event) {
        myEvents.add(event);
      }
    };
  }

  protected IDEtalkEvent checkEvent(boolean requireOneEvent) {
    if (requireOneEvent) {
      assertEquals(myEvents.toString(), 1, myEvents.size());
    }
    return myEvents.remove(0);
  }

  protected void verifySendMessageLocalEvent(User user, String message) {
    assertEquals(1, myEvents.size());
    assertTrue(myEvents.get(0) instanceof OwnMessageEvent);
    assertEquals(message, ((OwnMessageEvent) myEvents.get(0)).getMessage());
    assertEquals(user, ((OwnMessageEvent) myEvents.get(0)).getTargetUser());
  }

  protected static AnActionEvent createActionEvent(Presentation presentation) throws IllegalAccessException, InvocationTargetException, InstantiationException {
    return createActionEvent(presentation, NULL_DATA_CONTEXT);
  }

  protected static AnActionEvent createActionEvent(Presentation presentation, DataContext dataContext) throws IllegalAccessException, InvocationTargetException, InstantiationException {
    Constructor constructor = AnActionEvent.class.getConstructors()[0];
    if (constructor.getParameterTypes().length == 5) {
      return (AnActionEvent) constructor.newInstance(null,
                                                     dataContext,
                                                     "place",
                                                     presentation,
                                                     new Integer(0));
    }
    else {
      return (AnActionEvent) constructor.newInstance(null,
                                                     dataContext,
                                                     "place",
                                                     presentation,
                                                     null,
                                                     new Integer(0));
    }
  }
}
TOP

Related Classes of jetbrains.communicator.core.impl.BaseTestCase

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.