Skip to content

Instantly share code, notes, and snippets.

@coderunner
Created October 11, 2011 00:09
Show Gist options
  • Select an option

  • Save coderunner/1276930 to your computer and use it in GitHub Desktop.

Select an option

Save coderunner/1276930 to your computer and use it in GitHub Desktop.

Revisions

  1. coderunner revised this gist Oct 11, 2011. 1 changed file with 2 additions and 1 deletion.
    3 changes: 2 additions & 1 deletion gistfile1.java
    Original file line number Diff line number Diff line change
    @@ -27,7 +27,8 @@ public void setup()
    requirementsImporter = createStrictMock(RequirementsImporter.class);
    requirements = createStrictMock(Requirements.class);
    requirement = createStrictMock(Requirement.class);
    designDiscussionGenerator = createStrictMock(DesignDiscussionGenerator.class);
    designDiscussionGenerator =
    createStrictMock(DesignDiscussionGenerator.class);
    discussions = createStrictMock(DesignDiscussions.class);
    discussion = createStrictMock(DesignDiscussion.class);
    problems = createStrictMock(Problems.class);
  2. coderunner revised this gist Oct 11, 2011. 1 changed file with 13 additions and 7 deletions.
    20 changes: 13 additions & 7 deletions gistfile1.java
    Original file line number Diff line number Diff line change
    @@ -39,20 +39,26 @@ public void setup()
    designDiscussionGenerator, discussions, discussion, problems,
    problem, designPatternFactory, designPattern, code};

    coder = new ExpertCoder(requirementsImporter, designDiscussionGenerator, designPatternFactory);
    coder = new ExpertCoder(requirementsImporter,
    designDiscussionGenerator,
    designPatternFactory);
    }

    @Test
    public void shouldWriteSimpleCode()
    {
    reset(allMocks);
    expect(requirementsImporter.importRequirements(REQUIREMENTS)).andReturn(requirements);
    expect(requirements.getRequirement(0)).andReturn(requirement);
    expect(designDiscussionGenerator.discussDesign(requirement)).andReturn(discussions);
    expect(requirementsImporter.importRequirements(REQUIREMENTS))
    .andReturn(requirements);
    expect(requirements.getRequirement(0))
    .andReturn(requirement);
    expect(designDiscussionGenerator.discussDesign(requirement))
    .andReturn(discussions);
    expect(discussions.getNextDiscussion()).andReturn(discussion);
    expect(discussion.discuss()).andReturn(problems);
    expect(problems.getNextProblem()).andReturn(problem);
    expect(designPatternFactory.choosePattern(problem)).andReturn(designPattern);
    expect(designPatternFactory.choosePattern(problem))
    .andReturn(designPattern);
    expect(designPattern.apply()).andReturn(code);
    replay(allMocks);

    @@ -61,8 +67,8 @@ public void shouldWriteSimpleCode()
    verify(allMocks);
    assertEquals(Correctness.MINOR_ISSUES, code.getCorrectness());
    //TODO FIX THIS!
    /* assertion failed -->*/ //assertEquals(Complexity.LOW, code.getComplexity());
    /* assertion failed -->*/ //assertEquals(Size.SMALL, code.getCodeSize());
    /*failed-->*/ //assertEquals(Complexity.LOW, code.getComplexity());
    /*failed-->*/ //assertEquals(Size.SMALL, code.getCodeSize());
    }
    }

  3. coderunner revised this gist Oct 11, 2011. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion gistfile1.java
    Original file line number Diff line number Diff line change
    @@ -43,7 +43,7 @@ public void setup()
    }

    @Test
    public void testCodeWithSimpleRequirements()
    public void shouldWriteSimpleCode()
    {
    reset(allMocks);
    expect(requirementsImporter.importRequirements(REQUIREMENTS)).andReturn(requirements);
  4. coderunner created this gist Oct 11, 2011.
    104 changes: 104 additions & 0 deletions gistfile1.java
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,104 @@
    public interface Coder
    {
    public Code writeCodeFor(String[] requirements);
    }

    public class TestExpertCoder
    {
    private static final String[] REQUIREMENTS = {"simple requirement"};
    private ExpertCoder coder;
    private RequirementsImporter requirementsImporter;
    private Requirements requirements;
    private Requirement requirement;
    private DesignDiscussionGenerator designDiscussionGenerator;
    private DesignDiscussions discussions;
    private DesignDiscussion discussion;
    private Problems problems;
    private Problem problem;
    private DesignPatternFactory designPatternFactory;
    private DesignPattern designPattern;
    private Code code;

    private Object[] allMocks;

    @Before
    public void setup()
    {
    requirementsImporter = createStrictMock(RequirementsImporter.class);
    requirements = createStrictMock(Requirements.class);
    requirement = createStrictMock(Requirement.class);
    designDiscussionGenerator = createStrictMock(DesignDiscussionGenerator.class);
    discussions = createStrictMock(DesignDiscussions.class);
    discussion = createStrictMock(DesignDiscussion.class);
    problems = createStrictMock(Problems.class);
    problem = createStrictMock(Problem.class);
    designPatternFactory = createStrictMock(DesignPatternFactory.class);
    designPattern = createStrictMock(DesignPattern.class);
    code = createStrictMock(Code.class);
    allMocks = new Object[]{requirementsImporter, requirements, requirement,
    designDiscussionGenerator, discussions, discussion, problems,
    problem, designPatternFactory, designPattern, code};

    coder = new ExpertCoder(requirementsImporter, designDiscussionGenerator, designPatternFactory);
    }

    @Test
    public void testCodeWithSimpleRequirements()
    {
    reset(allMocks);
    expect(requirementsImporter.importRequirements(REQUIREMENTS)).andReturn(requirements);
    expect(requirements.getRequirement(0)).andReturn(requirement);
    expect(designDiscussionGenerator.discussDesign(requirement)).andReturn(discussions);
    expect(discussions.getNextDiscussion()).andReturn(discussion);
    expect(discussion.discuss()).andReturn(problems);
    expect(problems.getNextProblem()).andReturn(problem);
    expect(designPatternFactory.choosePattern(problem)).andReturn(designPattern);
    expect(designPattern.apply()).andReturn(code);
    replay(allMocks);

    Code code = coder.writeCodeFor(REQUIREMENTS);

    verify(allMocks);
    assertEquals(Correctness.MINOR_ISSUES, code.getCorrectness());
    //TODO FIX THIS!
    /* assertion failed -->*/ //assertEquals(Complexity.LOW, code.getComplexity());
    /* assertion failed -->*/ //assertEquals(Size.SMALL, code.getCodeSize());
    }
    }

    public class TestMasterCoder
    {
    private static final String[] REQUIREMENTS = {"simple requirement"};

    private MasterCoder coder;
    private Task task;
    private Task[] tasks;
    private Experience experience;
    private DesignPrinciples principles;
    private Code code;

    @Before
    public void setup()
    {
    experience = mock(Experience.class);
    principles = mock(DesignPrinciples.class);
    code = mock(Code.class);
    task = new Task();
    tasks = new Task[]{task};

    coder = new MasterCoder(principles, experience);
    }

    @Test
    public void shouldWriteSimpleCode()
    {
    when(experience.breakIntoTasks(REQUIREMENTS)).thenReturn(tasks);
    when(principles.apply(task)).thenReturn(code);

    Code code = coder.writeCodeFor(REQUIREMENTS);

    assertEquals(Complexity.LOW, code.getComplexity());
    assertEquals(Correctness.PERFECT, code.getCorrectness());
    assertEquals(Size.SMALL, code.getCodeSize());
    }
    }