Skip to content

Instantly share code, notes, and snippets.

@koduki
Created December 29, 2013 23:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save koduki/8175811 to your computer and use it in GitHub Desktop.
Save koduki/8175811 to your computer and use it in GitHub Desktop.
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package pascal.orz.cn.sandbox.problem02;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
/**
*
* @author koduki
*/
public class Greeter {
public Greeter() {
}
public String greet(int hour, int minute, Locale locale) {
Time time = getTime(hour, minute);
String message = getMessage(time, locale);
return message;
}
public String greet(Date time, Locale locale) {
Calendar cal = Calendar.getInstance();
cal.setTime(time);
return this.greet(cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), locale);
}
String getMessage(Time time, Locale locale) {
String message;
if (Locale.JAPAN == locale) {
message = getMessageJP(time);
} else if (Locale.ENGLISH == locale) {
message = getMessageEN(time);
} else {
message = null;
}
return message;
}
String getMessageJP(Time time) {
String message;
switch (time) {
case MORNING:
message = "おはようございます";
break;
case AFTERNOON:
message = "こんにちは";
break;
case EVENING:
message = "こんばんは";
break;
default:
message = null;
}
return message;
}
String getMessageEN(Time time) {
String message;
switch (time) {
case MORNING:
message = "Good Morning";
break;
case AFTERNOON:
message = "Good Afternoon";
break;
case EVENING:
message = "Good Evening";
break;
default:
message = null;
}
return message;
}
Time getTime(int hour, int minute) throws IllegalArgumentException {
if (!(0 <= minute && minute <= 59)) {
throw new IllegalArgumentException("argument is from 00:00, to 23:59.");
}
if (5 <= hour && hour < 12) {
return Time.MORNING;
} else if (12 <= hour && hour < 18) {
return Time.AFTERNOON;
} else if (((18 <= hour && hour <= 23)) || (hour < 5)) {
return Time.EVENING;
} else {
throw new IllegalArgumentException("argument is from 00:00, to 23:59.");
}
}
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package pascal.orz.cn.sandbox.problem02;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import org.junit.Test;
import static org.junit.Assert.*;
import static org.hamcrest.core.Is.*;
/**
*
* @author koduki
*/
public class GreeterTest {
public GreeterTest() {
}
public Date time(int h, int m) {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, h);
cal.set(Calendar.MINUTE, m);
cal.setLenient(false);
return cal.getTime();
}
@Test
public void getTimeWithMorning() {
Greeter greeter = new Greeter();
assertThat(greeter.getTime(5, 0), is(Time.MORNING));
assertThat(greeter.getTime(11, 59), is(Time.MORNING));
}
@Test
public void getTimeWithAfternoon() {
Greeter greeter = new Greeter();
assertThat(greeter.getTime(12, 0), is(Time.AFTERNOON));
assertThat(greeter.getTime(17, 59), is(Time.AFTERNOON));
}
@Test
public void ggetTimeWithEvening() {
Greeter greeter = new Greeter();
assertThat(greeter.getTime(18, 0), is(Time.EVENING));
assertThat(greeter.getTime(23, 0), is(Time.EVENING));
assertThat(greeter.getTime(4, 59), is(Time.EVENING));
}
@Test(expected = IllegalArgumentException.class)
public void getTimeWithIvalidHour() {
Greeter greeter = new Greeter();
greeter.getTime(24, 0);
}
@Test(expected = IllegalArgumentException.class)
public void getTimeWithIvalidMinute() {
Greeter greeter = new Greeter();
greeter.getTime(23, 60);
}
@Test
public void getMessageWithMorningAndJA() {
Greeter greeter = new Greeter();
assertThat(greeter.getMessage(Time.MORNING, Locale.JAPAN), is("おはようございます"));
}
@Test
public void getMessageWithAfternoonAndJA() {
Greeter greeter = new Greeter();
assertThat(greeter.getMessage(Time.AFTERNOON, Locale.JAPAN), is("こんにちは"));
}
@Test
public void getMessageWithEveningAndJA() {
Greeter greeter = new Greeter();
assertThat(greeter.getMessage(Time.EVENING, Locale.JAPAN), is("こんばんは"));
}
@Test
public void getMessageWithMorningAndEN() {
Greeter greeter = new Greeter();
assertThat(greeter.getMessage(Time.MORNING, Locale.ENGLISH), is("Good Morning"));
}
@Test
public void getMessageWithAfternoonAndEN() {
Greeter greeter = new Greeter();
assertThat(greeter.getMessage(Time.AFTERNOON, Locale.ENGLISH), is("Good Afternoon"));
}
@Test
public void getMessageWithEveningAndEN() {
Greeter greeter = new Greeter();
assertThat(greeter.getMessage(Time.EVENING, Locale.ENGLISH), is("Good Evening"));
}
@Test
public void greeterWithAndJa() {
Greeter greeter = new Greeter();
assertThat(greeter.greet(time(6, 0), Locale.JAPAN), is("おはようございます"));
assertThat(greeter.greet(time(12, 0), Locale.JAPAN), is("こんにちは"));
assertThat(greeter.greet(time(23, 0), Locale.JAPAN), is("こんばんは"));
}
@Test
public void greeterWithAndEn() {
Greeter greeter = new Greeter();
assertThat(greeter.greet(time(6, 0), Locale.ENGLISH), is("Good Morning"));
assertThat(greeter.greet(time(12, 0), Locale.ENGLISH), is("Good Afternoon"));
assertThat(greeter.greet(time(23, 0), Locale.ENGLISH), is("Good Evening"));
}
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package pascal.orz.cn.sandbox.problem02;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import lombok.AllArgsConstructor;
import lombok.ToString;
import org.junit.Test;
import static org.junit.Assert.*;
import static org.hamcrest.core.Is.*;
import org.junit.experimental.theories.DataPoints;
import org.junit.experimental.theories.Theories;
import org.junit.experimental.theories.Theory;
import org.junit.runner.RunWith;
/**
*
* @author koduki
*/
@RunWith(Theories.class)
public class GreeterTest2 {
public GreeterTest2() {
}
public Date time(int h, int m) {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, h);
cal.set(Calendar.MINUTE, m);
cal.setLenient(false);
return cal.getTime();
}
@ToString
@AllArgsConstructor
public static class GetTimeParameter {
int hour;
int minute;
Time expected;
}
@DataPoints
public static GetTimeParameter[] moning() {
GetTimeParameter[] dataset = {
new GetTimeParameter(5, 0, Time.MORNING),
new GetTimeParameter(11, 59, Time.MORNING)
};
return dataset;
}
@DataPoints
public static GetTimeParameter[] afternoon() {
GetTimeParameter[] dataset = {
new GetTimeParameter(12, 0, Time.AFTERNOON),
new GetTimeParameter(17, 59, Time.AFTERNOON)
};
return dataset;
}
@DataPoints
public static GetTimeParameter[] evening() {
GetTimeParameter[] dataset = {
new GetTimeParameter(18, 0, Time.EVENING),
new GetTimeParameter(23, 59, Time.EVENING),
new GetTimeParameter(4, 59, Time.EVENING)
};
return dataset;
}
@Theory
public void getTimeWith(GetTimeParameter parameter) {
Greeter greeter = new Greeter();
assertThat(parameter.toString(), greeter.getTime(parameter.hour, parameter.minute), is(parameter.expected));
}
@Test(expected = IllegalArgumentException.class)
public void getTimeWithIvalidHour() {
Greeter greeter = new Greeter();
greeter.getTime(24, 0);
}
@Test(expected = IllegalArgumentException.class)
public void getTimeWithIvalidMinute() {
Greeter greeter = new Greeter();
greeter.getTime(23, 60);
}
@Test
public void getMessageWithMorningAndJA() {
Greeter greeter = new Greeter();
assertThat(greeter.getMessage(Time.MORNING, Locale.JAPAN), is("おはようございます"));
}
@Test
public void getMessageWithAfternoonAndJA() {
Greeter greeter = new Greeter();
assertThat(greeter.getMessage(Time.AFTERNOON, Locale.JAPAN), is("こんにちは"));
}
@Test
public void getMessageWithEveningAndJA() {
Greeter greeter = new Greeter();
assertThat(greeter.getMessage(Time.EVENING, Locale.JAPAN), is("こんばんは"));
}
@Test
public void getMessageWithMorningAndEN() {
Greeter greeter = new Greeter();
assertThat(greeter.getMessage(Time.MORNING, Locale.ENGLISH), is("Good Morning"));
}
@Test
public void getMessageWithAfternoonAndEN() {
Greeter greeter = new Greeter();
assertThat(greeter.getMessage(Time.AFTERNOON, Locale.ENGLISH), is("Good Afternoon"));
}
@Test
public void getMessageWithEveningAndEN() {
Greeter greeter = new Greeter();
assertThat(greeter.getMessage(Time.EVENING, Locale.ENGLISH), is("Good Evening"));
}
@Test
public void greeterWithMorningAndJa() {
Greeter greeter = new Greeter();
assertThat(greeter.greet(time(6, 0), Locale.JAPAN), is("おはようございます"));
}
@Test
public void greeterWithAfternoonAndJa() {
Greeter greeter = new Greeter();
assertThat(greeter.greet(time(12, 0), Locale.JAPAN), is("こんにちは"));
}
@Test
public void greeterWithEveningAndJa() {
Greeter greeter = new Greeter();
assertThat(greeter.greet(time(18, 0), Locale.JAPAN), is("こんばんは"));
}
@Test
public void greeterWithMorningAndEn() {
Greeter greeter = new Greeter();
assertThat(greeter.greet(time(6, 0), Locale.ENGLISH), is("Good Morning"));
}
@Test
public void greeterWithAfternoonAndEn() {
Greeter greeter = new Greeter();
assertThat(greeter.greet(time(12, 0), Locale.ENGLISH), is("Good Afternoon"));
}
@Test
public void greeterWithEveningAndEn() {
Greeter greeter = new Greeter();
assertThat(greeter.greet(time(18, 0), Locale.ENGLISH), is("Good Evening"));
}
}
package pascal.orz.cn.sandbox.problem02;
/**
*
* @author koduki
*/
public enum Time {
MORNING,
AFTERNOON,
EVENING
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment