Package com.google.singletondetector

Source Code of com.google.singletondetector.SingletonDetectorTest

/*
* Copyright 2007 Google Inc.
*
* 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 com.google.singletondetector;

import com.google.singletondetector.Clazz;
import com.google.singletondetector.Flags;
import com.google.singletondetector.SingletonDetector;
import com.google.singletondetector.classpath.ClasspathRoot;
import com.google.singletondetector.classpath.DirectoryClasspathRoot;
import com.google.singletondetector.p1.FingletonOne;
import com.google.singletondetector.p1.FingletonUserOne;
import com.google.singletondetector.p1.HingletonOne;
import com.google.singletondetector.p1.MingletonOne;
import com.google.singletondetector.p1.NotAFingleton;
import com.google.singletondetector.p2.MingletonUserOne;
import com.google.singletondetector.p2.NotASingletonOne;
import com.google.singletondetector.p2.NotASingletonTwo;
import com.google.singletondetector.p2.SingletonOne;
import com.google.singletondetector.p2.SingletonUserOne;
import com.google.singletondetector.p3.EnumClass;
import com.google.singletondetector.p3.HingletonUserOne;
import com.google.singletondetector.p3.JavaHingleton;
import com.google.singletondetector.p3.NotReallyASingleton;
import com.google.singletondetector.p3.SingletonUserTwo;

import junit.framework.TestCase;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;

public class SingletonDetectorTest extends TestCase {
  // The SingletonDetector which is to be tested
  private SingletonDetector detector;

  // The common prefix for all test classes
  private String path = "com/google/singletondetector/";

  // The common classpath for all test classes
  private ClasspathRoot root;
 
  /**
   * Default constructor, sets classpath root
   */
  public SingletonDetectorTest() throws MalformedURLException {
    URL url = new File("target/test-classes").toURI().toURL();
    root = new DirectoryClasspathRoot(url);
  }

  /*************************************************************************/
  /*                           UTILITY METHODS                             */
  /*************************************************************************/

  private String getAsmStyleClassName(Class clazz) {
    return clazz.getName().replace('.', '/');
  }

  private String read(String resourceName) throws IOException {
    StringBuilder buf = new StringBuilder();
    InputStream is = getClass().getResourceAsStream(resourceName);
    int ch;
    while ((ch = is.read()) != -1) {
      buf.append((char) ch);
    }
    is.close();
    return buf.toString();
  }

  /*************************************************************************/
  /*                           SINGLETON TESTS                             */
  /*************************************************************************/

  public void testRemovePrefix() {
    detector = new SingletonDetector(root, "");
    detector.setPrefix("foo/test/");
    assertEquals("p1/sub1", detector.removePrefix("foo/test/p1/sub1"));
    assertEquals("foo/test2/p1/sub1", detector
        .removePrefix("foo/test2/p1/sub1"));
  }

  public void testIsSingletonOnANonSingleton() {
    detector =
        new SingletonDetector(root, path,
            getAsmStyleClassName(NotASingletonOne.class));
    Clazz cl = detector.getClass(getAsmStyleClassName(NotASingletonOne.class));
    assertFalse(cl.isSingleton());
  }

  public void testIsSingletonOnASingleton() {
    detector =
        new SingletonDetector(root, path,
            getAsmStyleClassName(SingletonOne.class));
    Clazz cl = detector.getClass(getAsmStyleClassName(SingletonOne.class));
    assertTrue(cl.isSingleton());
  }

  public void testIsSingletonOnAHingleton() {
    detector =
        new SingletonDetector(root, path,
            getAsmStyleClassName(HingletonOne.class));
    Clazz cl = detector.getClass(getAsmStyleClassName(HingletonOne.class));
    assertFalse(cl.isSingleton());
  }

  public void testIsSingletonOnNotReallyASingleton() {
    detector =
        new SingletonDetector(root, path,
            getAsmStyleClassName(NotReallyASingleton.class));
    Clazz cl =
        detector.getClass(getAsmStyleClassName(NotReallyASingleton.class));
    assertFalse(cl.isSingleton());
  }

  public void testCheckSingletonUsage() {
    Flags flags = new Flags();
    flags.setIgnoreHingletons(true);
    flags.setIgnoreMingletons(true);
    flags.setIgnoreFingletons(true);
    detector =
        new SingletonDetector(root, path, flags,
            getAsmStyleClassName(SingletonOne.class),
            getAsmStyleClassName(SingletonUserOne.class));

    Clazz singletonOne =
        detector.getClass(getAsmStyleClassName(SingletonOne.class));
    Clazz singletonUserOne =
        detector.getClass(getAsmStyleClassName(SingletonUserOne.class));
    assertFalse(singletonOne.uses(singletonUserOne));
    assertTrue(singletonUserOne.uses(singletonOne));
  }

  public void testStaticUsesOfSingletonsAreDetected() {
    Flags flags = new Flags();
    flags.setIgnoreHingletons(true);
    flags.setIgnoreMingletons(true);
    flags.setIgnoreFingletons(true);
    detector =
        new SingletonDetector(root, path, flags,
            getAsmStyleClassName(SingletonOne.class),
            getAsmStyleClassName(SingletonUserTwo.class));

    Clazz singletonOne =
        detector.getClass(getAsmStyleClassName(SingletonOne.class));
    Clazz singletonUserTwo =
        detector.getClass(getAsmStyleClassName(SingletonUserTwo.class));
    assertTrue(singletonUserTwo.uses(singletonOne));
  }

  /*************************************************************************/
  /*                           HINGLETON TESTS                             */
  /*************************************************************************/

  public void testIsHingletonOnANonHingleton() {
    detector =
        new SingletonDetector(root, path,
            getAsmStyleClassName(NotASingletonOne.class));
    Clazz cl = detector.getClass(getAsmStyleClassName(NotASingletonOne.class));
    assertFalse(cl.isHingleton());
  }

  public void testIsHingletonOnAHingleton() {
    detector =
        new SingletonDetector(root, path,
            getAsmStyleClassName(HingletonOne.class));
    Clazz cl = detector.getClass(getAsmStyleClassName(HingletonOne.class));
    assertTrue(cl.isHingleton());
  }

  public void testIsHingletonOnASingleton() {
    detector =
        new SingletonDetector(root, path,
            getAsmStyleClassName(SingletonOne.class));
    Clazz cl = detector.getClass(getAsmStyleClassName(SingletonOne.class));
    assertFalse(cl.isHingleton());
  }

  public void testIsHingletonOnAJavaHingleton() {
    detector =
        new SingletonDetector(root, path,
            getAsmStyleClassName(JavaHingleton.class));
    Clazz cl = detector.getClass(getAsmStyleClassName(JavaHingleton.class));
    assertFalse(cl.isHingleton());
  }

  public void testCheckHingletonUsage() {
    Flags flags = new Flags();
    flags.setIgnoreSingletons(true);
    flags.setIgnoreMingletons(true);
    flags.setIgnoreFingletons(true);
    detector =
        new SingletonDetector(root, path, flags,
            getAsmStyleClassName(HingletonOne.class),
            getAsmStyleClassName(HingletonUserOne.class));

    Clazz hingletonOne =
        detector.getClass(getAsmStyleClassName(HingletonOne.class));
    Clazz hingletonUserOne =
        detector.getClass(getAsmStyleClassName(HingletonUserOne.class));
    assertFalse(hingletonOne.uses(hingletonUserOne));
    assertTrue(hingletonUserOne.uses(hingletonOne));
  }

  /*************************************************************************/
  /*                           MINGLETON TESTS                             */
  /*************************************************************************/

  public void testIsMingletonOnAMingleton() {
    detector =
        new SingletonDetector(root, path,
            getAsmStyleClassName(MingletonOne.class),
            getAsmStyleClassName(NotASingletonTwo.class));
    Clazz cl = detector.getClass(getAsmStyleClassName(MingletonOne.class));
    assertTrue(cl.isMingleton());
  }

  public void testCheckMingletonUsage() {
    Flags flags = new Flags();
    flags.setIgnoreSingletons(true);
    flags.setIgnoreHingletons(true);
    flags.setIgnoreFingletons(true);
    detector =
        new SingletonDetector(root, path, flags,
            getAsmStyleClassName(MingletonOne.class),
            getAsmStyleClassName(MingletonUserOne.class));

    Clazz mingletonOne =
        detector.getClass(getAsmStyleClassName(MingletonOne.class));
    Clazz mingletonUserOne =
        detector.getClass(getAsmStyleClassName(MingletonUserOne.class));
    assertFalse(mingletonOne.uses(mingletonUserOne));
    assertTrue(mingletonUserOne.uses(mingletonOne));
  }

  /*************************************************************************/
  /*                           FINGLETON TESTS                             */
  /*************************************************************************/

  public void testIsFingletonOnAFingleton() {
    detector =
        new SingletonDetector(root, path,
            getAsmStyleClassName(FingletonOne.class),
            getAsmStyleClassName(NotAFingleton.class));
    Clazz cl = detector.getClass(getAsmStyleClassName(FingletonOne.class));
    assertTrue(cl.isFingleton());
  }

  public void testIsFingletonOnANonFingleton() {
    detector =
        new SingletonDetector(root, path,
            getAsmStyleClassName(FingletonOne.class),
            getAsmStyleClassName(NotAFingleton.class));
    Clazz cl = detector.getClass(getAsmStyleClassName(NotAFingleton.class));
    assertFalse(cl.isFingleton());
  }

  public void testCheckFingletonUsage() {
    Flags flags = new Flags();
    flags.setIgnoreSingletons(true);
    flags.setIgnoreHingletons(true);
    flags.setIgnoreMingletons(true);
    detector =
        new SingletonDetector(root, path, flags,
            getAsmStyleClassName(FingletonOne.class),
            getAsmStyleClassName(FingletonUserOne.class));

    Clazz fingletonOne =
        detector.getClass(getAsmStyleClassName(FingletonOne.class));
    Clazz fingletonUserOne =
        detector.getClass(getAsmStyleClassName(FingletonUserOne.class));
    assertFalse(fingletonOne.uses(fingletonUserOne));
    assertTrue(fingletonUserOne.uses(fingletonOne));
  }

  /*************************************************************************/
  /*                               FLAG TESTS                              */
  /*************************************************************************/

  public void testSingletonFlag() {
    Flags flags = new Flags();
    flags.setIgnoreSingletons(true);
    detector =
        new SingletonDetector(root, path, flags,
            getAsmStyleClassName(SingletonOne.class));
    Clazz cl = detector.getClass(getAsmStyleClassName(SingletonOne.class));
    assertFalse(cl.isSingleton());
  }

  public void testHingletonFlag() {
    Flags flags = new Flags();
    flags.setIgnoreHingletons(true);
    detector =
        new SingletonDetector(root, path, flags,
            getAsmStyleClassName(HingletonOne.class));
    Clazz cl = detector.getClass(getAsmStyleClassName(HingletonOne.class));
    assertFalse(cl.isHingleton());
  }

  public void testMingletonFlag() {
    Flags flags = new Flags();
    flags.setIgnoreMingletons(true);
    detector =
        new SingletonDetector(root, path, flags,
            getAsmStyleClassName(MingletonOne.class));
    Clazz cl = detector.getClass(getAsmStyleClassName(MingletonOne.class));
    assertFalse(cl.isMingleton());
  }

  public void testFingletonFlag() {
    Flags flags = new Flags();
    flags.setIgnoreFingletons(true);
    detector =
        new SingletonDetector(root, path, flags,
            getAsmStyleClassName(FingletonOne.class));
    Clazz cl = detector.getClass(getAsmStyleClassName(FingletonOne.class));
    assertFalse(cl.isFingleton());
  }

  public void testOtherFlag() {
    Flags flags = new Flags();
    flags.setIgnoreOthers(true);
    detector =
        new SingletonDetector(root, path, flags,
            getAsmStyleClassName(SingletonOne.class),
            getAsmStyleClassName(SingletonUserOne.class));
    Clazz cl = detector.getClass(getAsmStyleClassName(SingletonUserOne.class));
    assertFalse(cl.isDrawn());
  }

  /*************************************************************************/
  /*                             OTHER TESTS                               */
  /*************************************************************************/

  public void testEnumClass() {
    detector =
        new SingletonDetector(root, path, getAsmStyleClassName(EnumClass.class));
    Clazz cl = detector.getClass(getAsmStyleClassName(EnumClass.class));
    assertTrue(cl == null);
  }
 
  public void testThreshold() {
    Flags flags = new Flags();
    flags.setThreshold(2);
    detector = new SingletonDetector(root, path, flags,
        getAsmStyleClassName(SingletonOne.class),
        getAsmStyleClassName(SingletonUserOne.class),
        getAsmStyleClassName(SingletonUserTwo.class),
        getAsmStyleClassName(NotASingletonTwo.class),
        getAsmStyleClassName(HingletonOne.class),
        getAsmStyleClassName(HingletonUserOne.class));
    Clazz cl = detector.getClass(getAsmStyleClassName(SingletonOne.class));
    assertTrue(cl.isDrawn());
    cl = detector.getClass(getAsmStyleClassName(SingletonUserOne.class));
    assertTrue(cl.isDrawn());
    cl = detector.getClass(getAsmStyleClassName(HingletonOne.class));
    assertFalse(cl.isDrawn());
  }

  public void testGraphMlOutput() throws IOException {
    detector =
        new SingletonDetector(root, path,
            getAsmStyleClassName(SingletonOne.class),
            getAsmStyleClassName(SingletonUserOne.class),
            getAsmStyleClassName(NotASingletonTwo.class),
            getAsmStyleClassName(HingletonOne.class),
            getAsmStyleClassName(HingletonUserOne.class));

    String graphMlOutput = detector.getGraphMlOutput();
    assertEquals(read("GraphMLOutput.out"), graphMlOutput);
  }
}
TOP

Related Classes of com.google.singletondetector.SingletonDetectorTest

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.