package org.softlang.company.tests;
import org.softlang.company.model.company.*;
import org.softlang.company.model.company.factory.*;
import org.softlang.company.features.features.*;
import org.junit.*;
import static org.junit.Assert.*;
/**
* Test/demonstrate basic operations for totaling and cutting salaries.
*/
public class Basics {
static Company createSampleCompany(Factory f) {
// Create company
Company sampleCompany = f.mkCompany();
sampleCompany.setName("ACME Corporation");
// Create all employees
Employee craig = f.mkEmployee();
craig.setName("Craig");
craig.setAddress("Redmond");
craig.setSalary(123456);
craig.setManager(true);
Employee erik = f.mkEmployee();
erik.setName("Erik");
erik.setAddress("Utrecht");
erik.setSalary(12345);
Employee ralf = f.mkEmployee();
ralf.setName("Ralf");
ralf.setAddress("Koblenz");
ralf.setSalary(1234);
Employee ray = f.mkEmployee();
ray.setName("Ray");
ray.setAddress("Redmond");
ray.setSalary(234567);
ray.setManager(true);
Employee klaus = f.mkEmployee();
klaus.setName("Klaus");
klaus.setAddress("Boston");
klaus.setSalary(23456);
klaus.setManager(true);
Employee karl = f.mkEmployee();
karl.setName("Karl");
karl.setAddress("Riga");
karl.setSalary(2345);
karl.setManager(true);
Employee joe = f.mkEmployee();
joe.setName("Joe");
joe.setAddress("Wifi City");
joe.setSalary(2344);
// Create research department
Department research = f.mkDepartment();
research.setName("Research");
research.add(craig);
research.add(erik);
research.add(ralf);
sampleCompany.add(research);
// Create development department
Department development = f.mkDepartment();
development.setName("Development");
development.add(ray);
sampleCompany.add(development);
// Create sub-department dev1
Department dev1 = f.mkDepartment();
dev1.setName("Dev1");
dev1.add(klaus);
development.add(dev1);
// Create sub-department dev11
Department dev11 = f.mkDepartment();
dev11.setName("Dev1.1");
dev11.add(karl);
dev11.add(joe);
dev1.add(dev11);
return sampleCompany;
}
private void testTotal(Factory f) {
Company sampleCompany = createSampleCompany(f);
TotalReducer reducer = new TotalReducer();
assertEquals(399747, reducer.reduce(sampleCompany), 0);
TotalWalker walker = new TotalWalker();
walker.preorder(sampleCompany);
assertEquals(399747, walker.getTotal(), 0);
}
@Test
public void testTotalPojo() {
testTotal(new PojoFactory());
}
@Test
public void testTotalBean() {
testTotal(new BeanFactory());
}
private void testCut(Factory f) {
Company sampleCompany = createSampleCompany(f);
TotalReducer total = new TotalReducer();
SimpleCut cut = new SimpleCut();
double before = total.reduce(sampleCompany);
cut.postorder(sampleCompany);
double after = total.reduce(sampleCompany);
assertEquals(before / 2.0d, after, 0);
}
@Test
public void testCutPojo() {
testCut(new PojoFactory());
}
@Test
public void testCutBean() {
testCut(new BeanFactory());
}
}