Package com.sandwich.koan

Source Code of com.sandwich.koan.TestUtilsTest$ContractEnforcementBase

package com.sandwich.koan;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;

import java.io.ByteArrayOutputStream;
import java.io.PrintStream;

import org.easymock.EasyMock;
import org.junit.Test;

import com.sandwich.koan.TestUtils.ArgRunner;
import com.sandwich.koan.TestUtils.TwoObjectAssertion;

public class TestUtilsTest {

  @Test
  public void testEqualsContractEnforcement_integerIdentity_happyPath() throws Exception {
    Integer one = 1;
    TestUtils.assertEqualsContractEnforcement(one, one, one);
  }
 
  @Test
  public void testEqualsContractEnforcement_integerObject_happyPath() throws Exception {
    TestUtils.assertEqualsContractEnforcement(new Integer(1), new Integer(1), new Integer(1));
  }
 
  @Test(expected=AssertionError.class)
  public void testEqualsContractEnforcement_integer_exceptionPath0() throws Exception {
    TestUtils.assertEqualsContractEnforcement(new Integer(2), new Integer(1), new Integer(1));
  }
 
  @Test(expected=AssertionError.class)
  public void testEqualsContractEnforcement_integer_exceptionPath1() throws Exception {
    TestUtils.assertEqualsContractEnforcement(new Integer(1), new Integer(2), new Integer(1));
  }
 
  @Test(expected=AssertionError.class)
  public void testEqualsContractEnforcement_integer_exceptionPath() throws Exception {
    TestUtils.assertEqualsContractEnforcement(new Integer(1), new Integer(1), new Integer(2));
  }
 
  @Test
  public void testHashCodeContractEnforcement_integerIdentity_happyPath() throws Exception {
    Integer one = 1;
    TestUtils.assertHashCodeContractEnforcement(one, one, one);
  }
 
  @Test
  public void testHashCodeContractEnforcement_integerObject_happyPath() throws Exception {
    TestUtils.assertHashCodeContractEnforcement(new Integer(1), new Integer(1), new Integer(1));
  }
 
  @Test(expected=AssertionError.class)
  public void testHashCodeContractEnforcement_integer_exceptionPath0() throws Exception {
    TestUtils.assertHashCodeContractEnforcement(new Integer(2), new Integer(1), new Integer(1));
  }
 
  @Test(expected=AssertionError.class)
  public void testHashCodeContractEnforcement_integer_exceptionPath1() throws Exception {
    TestUtils.assertHashCodeContractEnforcement(new Integer(1), new Integer(2), new Integer(1));
  }
 
  @Test(expected=AssertionError.class)
  public void testHashCodeContractEnforcement_integer_exceptionPath() throws Exception {
    TestUtils.assertHashCodeContractEnforcement(new Integer(1), new Integer(1), new Integer(2));
  }
 
  @Test
  public void testHashCodeContractEnforcement_testObj_happyPath() throws Exception {
    TestUtils.assertHashCodeContractEnforcement(new ContractEnforcementBase(),
                          new ContractEnforcementBase(),
                          new ContractEnforcementBase());
  }
 
  @Test(expected=AssertionError.class)
  public void testHashCodeContractEnforcement_testObj_exceptionPath0() throws Exception {
    TestUtils.assertHashCodeContractEnforcement(new ContractEnforcementSubclass(),
                          new ContractEnforcementBase(),
                          new ContractEnforcementBase());
  }
 
  @Test(expected=AssertionError.class)
  public void testHashCodeContractEnforcement_testObj_exceptionPath1() throws Exception {
    TestUtils.assertHashCodeContractEnforcement(new ContractEnforcementBase(),
                          new ContractEnforcementSubclass(),
                          new ContractEnforcementBase());
  }
 
  @Test(expected=AssertionError.class)
  public void testHashCodeContractEnforcement_testObj_exceptionPath2() throws Exception {
    TestUtils.assertHashCodeContractEnforcement(new ContractEnforcementBase(),
                          new ContractEnforcementBase(),
                          new ContractEnforcementSubclass());
  }
 
  @Test
  public void testEqualsContractEnforcement_testObj_happyPath() throws Exception {
    TestUtils.assertEqualsContractEnforcement(new ContractEnforcementBase(),
                          new ContractEnforcementBase(),
                          new ContractEnforcementBase());
  }
 
  @Test(expected=AssertionError.class)
  public void testEqualsContractEnforcement_testObj_exceptionPath0() throws Exception {
    TestUtils.assertEqualsContractEnforcement(new ContractEnforcementSubclass(),
                          new ContractEnforcementBase(),
                          new ContractEnforcementBase());
  }
 
  @Test(expected=AssertionError.class)
  public void testEqualsContractEnforcement_testObj_exceptionPath1() throws Exception {
    TestUtils.assertEqualsContractEnforcement(new ContractEnforcementBase(),
                          new ContractEnforcementSubclass(),
                          new ContractEnforcementBase());
  }
 
  @Test(expected=AssertionError.class)
  public void testEqualsContractEnforcement_testObj_exceptionPath2() throws Exception {
    TestUtils.assertEqualsContractEnforcement(new ContractEnforcementBase(),
                          new ContractEnforcementBase(),
                          new ContractEnforcementSubclass());
  }
 
  static class ContractEnforcementBase {
    int i = 1;
    @Override
    public boolean equals(Object o){
      return o instanceof ContractEnforcementBase && i == ((ContractEnforcementBase)o).i;
    }
    @Override
    public int hashCode(){
      return 1;
    }
  }
 
  static class ContractEnforcementSubclass extends ContractEnforcementBase {
    int j = 2;
    @Override
    public boolean equals(Object o){
      return o instanceof ContractEnforcementSubclass
        && i == ((ContractEnforcementSubclass)o).i
        && j == ((ContractEnforcementSubclass)o).j;
    }
    @Override
    public int hashCode(){
      return 2;
    }
  }
 
  @Test(expected=AssertionError.class, timeout=1000)
  public void testEqualsConcurrency_concurrentAccessFails() throws Exception {
    final PrintStream temp = System.err;
    try {
      ByteArrayOutputStream sysErr = new ByteArrayOutputStream();
      System.setErr(new PrintStream(sysErr));
      TestUtils.doSimultaneouslyAndRepetitively(new TwoObjectAssertion() {
        public void assertOn(String msg, Object o0, Object o1) {
          assertEquals(msg, o0, o1);
        }
      }, IllegalMonitorStateException.class,
      new Runnable() {
        public void run() {
          waste(10);
        }
      }, new Runnable() {
        public void run() {
          waste(11);
        }
      }, new Runnable() {
        public void run() {
          waste(3);
        }
      });
      String errors = sysErr.toString();
      assertTrue(errors.contains("Thread-1\" java.lang.IllegalMonitorStateException"));
      assertTrue(errors.contains("Thread-2\" java.lang.IllegalMonitorStateException"));
      assertTrue(errors.contains("Thread-3\" java.lang.IllegalMonitorStateException"));
      assertFalse(errors.contains("Thread-4"));
    } finally {
      System.setErr(new PrintStream(temp));
    }
  }
 
  @Test(expected=java.lang.AssertionError.class, timeout=500)
  public void testEqualsConcurrency_concurrentAccessFails_assertIllegalMonitorStateException() throws Exception {
    TestUtils.doSimultaneouslyAndRepetitively(new TwoObjectAssertion() {
      public void assertOn(String msg, Object o0, Object o1) {
        assertEquals(msg, o0, o1);
      }
    },
    IllegalMonitorStateException.class,
    new Runnable() {
      public void run() {
        waste(10);
      }
    },
    new Runnable() {
      public void run() {
        waste(11);
      }
    },
    new Runnable() {
      public void run() {
        waste(3);
      }
    });
  }
 
  @Test
  public void testEqualsConcurrency() throws Exception {
    TestUtils.doSimultaneouslyAndRepetitively(new TwoObjectAssertion() {
      public void assertOn(String msg, Object o0, Object o1) {
        assertEquals(msg, o0, o1);
      }
    }, new Runnable(){
      public void run() {
        wasteSynchronized(10);
      }
    }, new Runnable(){
      public void run() {
        wasteSynchronized(11);
      }
    }, new Runnable(){
      public void run() {
        wasteSynchronized(3);
      }
    });
  }
 
  @Test
  public void testEqualsConcurrency_II() throws Exception {
    TestUtils.doSimultaneouslyAndRepetitively(new TwoObjectAssertion() {
      public void assertOn(String msg, Object o0, Object o1) {
        assertEquals(msg, o0, o1);
      }
    }, new Runnable(){
      public void run() {
        wasteSynchronized(10);
      }
    }, new Runnable(){
      public void run() {
        wasteSynchronized(11);
      }
    }, new Runnable(){
      public void run() {
        wasteSynchronized(4);
      }
    }, new Runnable(){
      public void run() {
        wasteSynchronized(6);
      }
    });
  }
 
  private void waste(int i) {
    try {
      wait(i);
    } catch (InterruptedException e) {
      fail(e.getMessage());
    }
  }
 
  private int wasteSynchronized(int i) { synchronized(this){
    try {
      wait(i);
    } catch (InterruptedException e) {
      fail(e.getMessage());
    }
    return i;
  }}
 
  @Test
  public void testForEachLine_threeNewLines() throws Exception {
    @SuppressWarnings("unchecked")
    ArgRunner<String> runner = EasyMock.createStrictMock(ArgRunner.class);
   
    runner.run("");
    EasyMock.expectLastCall();
   
    runner.run("");
    EasyMock.expectLastCall();
   
    runner.run("");
    EasyMock.expectLastCall();
   
    runner.run("");
    EasyMock.expectLastCall();
   
    EasyMock.replay(runner);
   
    TestUtils.forEachLine("\n\n\n", runner);
    EasyMock.verify(runner);
  }
 
  @Test
  public void testForEachLine_spaceNewLineNewLine(){
    @SuppressWarnings("unchecked")
    ArgRunner<String> runner = EasyMock.createStrictMock(ArgRunner.class);
   
    runner.run(" ");
    EasyMock.expectLastCall();
   
    runner.run("");
    EasyMock.expectLastCall();
   
    runner.run("");
    EasyMock.expectLastCall();
   
    EasyMock.replay(runner);
   
    TestUtils.forEachLine(" \n\n", runner);
    EasyMock.verify(runner);
  }
 
  @Test
  public void testForEachLine_newLineNewLineSpace(){
    @SuppressWarnings("unchecked")
    ArgRunner<String> runner = EasyMock.createStrictMock(ArgRunner.class);
   
    runner.run("");
    EasyMock.expectLastCall();
   
    runner.run("");
    EasyMock.expectLastCall();
   
    runner.run(" ");
    EasyMock.expectLastCall();
   
    EasyMock.replay(runner);
   
    TestUtils.forEachLine("\n\n ", runner);
    EasyMock.verify(runner);
  }
 
  @Test
  public void testMixingBackslashRAndBackslashNNewLines() throws Exception {
    @SuppressWarnings("unchecked")
    ArgRunner<String> runner = EasyMock.createStrictMock(ArgRunner.class);
   
    runner.run("");
    EasyMock.expectLastCall();
   
    runner.run(" ");
    EasyMock.expectLastCall();
   
    runner.run(" ");
    EasyMock.expectLastCall();
   
    EasyMock.replay(runner);
   
    TestUtils.forEachLine("\r \n ", runner); // can mix and match \r and \n
    EasyMock.verify(runner);
  }
 
  @Test
  public void testMixingBackslashNAndBackslashRNewLines() throws Exception {
    @SuppressWarnings("unchecked")
    ArgRunner<String> runner = EasyMock.createStrictMock(ArgRunner.class);
   
    runner.run("");
    EasyMock.expectLastCall();
   
    runner.run(" ");
    EasyMock.expectLastCall();
   
    runner.run(" ");
    EasyMock.expectLastCall();
   
    EasyMock.replay(runner);
   
    TestUtils.forEachLine("\n \r ", runner); // can mix and match \r and \n
    EasyMock.verify(runner);
  }
 
  @Test
  public void testForEachLine_emptyString() throws Exception {
    @SuppressWarnings("unchecked")
    ArgRunner<String> runner = EasyMock.createStrictMock(ArgRunner.class);
    runner.run("");
    EasyMock.expectLastCall();
   
    EasyMock.replay(runner);
   
    TestUtils.forEachLine("", runner);
    EasyMock.verify(runner);
  }
 
  @Test
  public void testForEachLine_nothingThreeNewLinesSeperatedBy1Space() throws Exception {
    @SuppressWarnings("unchecked")
    ArgRunner<String> runner = EasyMock.createStrictMock(ArgRunner.class);
   
    runner.run("");
    EasyMock.expectLastCall();
   
    runner.run(" ");
    EasyMock.expectLastCall();
   
    runner.run(" ");
    EasyMock.expectLastCall();
   
    runner.run("");
    EasyMock.expectLastCall();
   
    EasyMock.replay(runner);
   
    TestUtils.forEachLine("\n \n \n", runner);
    EasyMock.verify(runner);
  }
 
  @Test
  public void testForEachLine_nothingThreeNewLinesSeperatedBy1SpaceThen2Spaces() throws Exception {
    @SuppressWarnings("unchecked")
    ArgRunner<String> runner = EasyMock.createStrictMock(ArgRunner.class);
   
    runner.run("");
    EasyMock.expectLastCall();
   
    runner.run(" ");
    EasyMock.expectLastCall();
   
    runner.run("  ");
    EasyMock.expectLastCall();
   
    runner.run("");
    EasyMock.expectLastCall();
   
    EasyMock.replay(runner);
   
    TestUtils.forEachLine("\n \n  \n", runner);
    EasyMock.verify(runner);
  }
}
TOP

Related Classes of com.sandwich.koan.TestUtilsTest$ContractEnforcementBase

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.