Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ local.properties
.settings/
.loadpath
.recommenders
*.plantuml

# External tool builders
.externalToolBuilders/
Expand Down
23 changes: 23 additions & 0 deletions src/main/java/com/github/curriculeon/Instructor.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.github.curriculeon;
/*
The Instructor class is a person and can teach.
*/
public class Instructor extends Person implements Teacher{

public Instructor(long id, String name) {
super(id, name);
}

@Override
public void teach(Learner learner, double numberOfHours) {
learner.learn(numberOfHours);
}

@Override
public void lecture(Learner[] learners, double numberOfHours) {
double numberOfHoursPerLearner = numberOfHours / learners.length;
for (Learner learner : learners) {
learner.learn(numberOfHoursPerLearner);
}
}
}
9 changes: 9 additions & 0 deletions src/main/java/com/github/curriculeon/Learner.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.github.curriculeon;
/*
Interfaces do not implement their own methods, they only provide the signature and final variables.
Classes that use the interface must implement the methods on their own.
*/
public interface Learner {
public void learn(double numberOfHours);
public Double getTotalStudyTime();
}
55 changes: 55 additions & 0 deletions src/main/java/com/github/curriculeon/People.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package com.github.curriculeon;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class People implements Iterable<Person> {
private List<Person> personList = new ArrayList<>();

public void add(Person person){
personList.add(person);
}

public Person findById(long id){
try {
for(Person person : personList){
if(person.getId().equals(id)){
return person;
}
}
} catch (Exception e) {
System.out.println("Person not found!!!");
}
return null;
}

public Boolean contains(Person person){
return personList.contains(person);
}

public void remove(Person person){
personList.remove(person);
}

public void remove(long id){
personList.remove(findById(id));
}

public void removeAll(){
personList.clear();
}

public Integer count(){
return personList.size();
}

public Person[] toArray(){
return (Person[]) personList.toArray();
}

@Override
public Iterator<Person> iterator() {
return personList.iterator();
}
}
18 changes: 18 additions & 0 deletions src/main/java/com/github/curriculeon/Person.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,23 @@
package com.github.curriculeon;

public class Person {
final private long id;
private String name;

public Person(long id, String name) {
this.id = id;
this.name = name;
}

public Long getId() {
return id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}
24 changes: 24 additions & 0 deletions src/main/java/com/github/curriculeon/Student.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.github.curriculeon;
/*
The Student class is a Person and can learn.
Student must call parent's constructor using keyword super if that constructor uses arguments to be instantiated.
*/
public class Student extends Person implements Learner{
private double totalStudyTime;

public Student(long id, String name) {
super(id, name);
this.totalStudyTime = 0;
}


@Override
public void learn(double numberOfHours) {
totalStudyTime += numberOfHours;
}

@Override
public Double getTotalStudyTime() {
return totalStudyTime;
}
}
6 changes: 6 additions & 0 deletions src/main/java/com/github/curriculeon/Teacher.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.github.curriculeon;

public interface Teacher {
public void teach(Learner learner, double numberOfHours);
public void lecture(Learner[] learners, double numberOfHours);
}
62 changes: 62 additions & 0 deletions src/test/java/com/github/curriculeon/TestInstructor.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
package com.github.curriculeon;

import junit.framework.TestCase;
import org.junit.Test;

public class TestInstructor extends TestCase {

@Test
public void testImplementation(){
//given & when
Instructor instructor = new Instructor(1, "test");

//then
assert instructor instanceof Teacher;
}

@Test
public void testInheritance(){
//given & when
Instructor instructor = new Instructor(1, "test");

//then
assert instructor instanceof Person;
}

@Test
public void testTeach() {
//given
Instructor instructor = new Instructor(1, "test");
Student student = new Student(1, "test");

//when
double expected = 5;
instructor.teach(student, expected);

//then
assertEquals(expected, student.getTotalStudyTime());
}

@Test
public void testLecture() {
//given
Instructor instructor = new Instructor(1, "test");
Student student1 = new Student(1, "test1");
Student student2 = new Student(2, "test2");
Student student3 = new Student(3, "test3");
Student student4 = new Student(4, "test4");
Student[] students = new Student[]{
student1, student2, student3, student4
};
double numberOfHours = 50;
double numberOfHoursPerStudent = numberOfHours / students.length;

//when
instructor.lecture(students, numberOfHours);

//then
for (Student student: students) {
assertEquals(numberOfHoursPerStudent, student.getTotalStudyTime());
}
}
}
40 changes: 40 additions & 0 deletions src/test/java/com/github/curriculeon/TestPeople.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package com.github.curriculeon;

import junit.framework.TestCase;
import org.junit.Test;

import java.util.ArrayList;

public class TestPeople extends TestCase {

@Test
public void testAdd() {
Person expectedPerson = new Person(22, "Ezra");
People peopleList = new People();

peopleList.add(expectedPerson);

assertTrue(peopleList.contains(expectedPerson));
}

@Test
public void testFindById() {
Long expectedId = 5L;
Person expectedPerson = new Person(expectedId, "Ezra");
People peopleList = new People();
peopleList.add(expectedPerson);

assertEquals(expectedPerson.getId(), peopleList.findById(expectedId).getId());
}

@Test
public void testRemove() {
Person expectedPerson = new Person(7, "Ezra");
People peopleList = new People();
peopleList.add(expectedPerson);

peopleList.remove(expectedPerson);

assertFalse(peopleList.contains(expectedPerson));
}
}
28 changes: 26 additions & 2 deletions src/test/java/com/github/curriculeon/TestPerson.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,29 @@
package com.github.curriculeon;

public class TestPerson {
import junit.framework.TestCase;
import org.junit.Test;

}
public class TestPerson extends TestCase {

@Test
public void testConstructor() {
//given & when
Long expectedID = 1L;
String expectedName = "Ezra";
Person guy = new Person(expectedID, expectedName);
//then
assertEquals(expectedID, guy.getId());
assertEquals(expectedName, guy.getName());
}

@Test
public void testSetName() {
//given
Person guy = new Person(0,"test");
//when
String expected = "Ezra";
guy.setName(expected);
//then
assertEquals(expected, guy.getName());
}
}
38 changes: 38 additions & 0 deletions src/test/java/com/github/curriculeon/TestStudent.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package com.github.curriculeon;

import junit.framework.TestCase;
import org.junit.Test;

public class TestStudent extends TestCase {

@Test
public void testImplementation(){
//given & when
Student student = new Student(1, "Test");

//then
assert student instanceof Learner;
}

@Test
public void testInheritance(){
//given & when
Student student = new Student(1, "Test");

//then
assert student instanceof Person;
}

@Test
public void testLearn() {
//given
Student student = new Student(1, "Test");

//when
double hours = 5;
student.learn(hours);

//then
assertEquals(hours, student.getTotalStudyTime());
}
}