package beginner;
import com.sandwich.koan.Koan;
import static com.sandwich.koan.constant.KoanConstants.__;
import static com.sandwich.util.Assert.assertEquals;
public class AboutConditionals {
@Koan
public void basicIf() {
int x = 1;
if (true) {
x++;
}
assertEquals(x, __);
}
@Koan
public void basicIfElse() {
int x = 1;
boolean secretBoolean = false;
if (secretBoolean) {
x++;
} else {
x--;
}
assertEquals(x, __);
}
@Koan
public void basicIfElseIfElse() {
int x = 1;
boolean secretBoolean = false;
boolean otherBooleanCondition = true;
if (secretBoolean) {
x++;
} else if (otherBooleanCondition) {
x = 10;
} else {
x--;
}
assertEquals(x, __);
}
@Koan
public void nestedIfsWithoutCurlysAreReallyMisleading() {
// Why are these ugly you ask? Well, try for yourself
int x = 1;
boolean secretBoolean = false;
boolean otherBooleanCondition = true;
// Ifs without curly braces are ugly and not recommended but still valid:
if (secretBoolean) {
x++;
}
if (otherBooleanCondition) {
x = 10;
} else {
x--;
}
// Where does this else belong to!?
assertEquals(x, __);
}
@Koan
public void basicSwitchStatement() {
int i = 1;
String result = "Basic ";
switch (i) {
case 1:
result += "One";
break;
case 2:
result += "Two";
break;
default:
result += "Nothing";
}
assertEquals(result, __);
}
@Koan
public void switchStatementFallThrough() {
int i = 1;
String result = "Basic ";
switch (i) {
case 1:
result += "One";
case 2:
result += "Two";
default:
result += "Nothing";
}
assertEquals(result, __);
}
@Koan
public void switchStatementCrazyFallThrough() {
int i = 5;
String result = "Basic ";
switch (i) {
case 1:
result += "One";
default:
result += "Nothing";
case 2:
result += "Two";
}
assertEquals(result, __);
}
@Koan
public void switchStatementConstants() {
int i = 5;
// What happens if you remove the 'final' modifier?
// What does this mean for case values?
final int caseOne = 1;
String result = "Basic ";
switch (i) {
case caseOne:
result += "One";
break;
default:
result += "Nothing";
}
assertEquals(result, __);
}
@Koan
public void switchStatementSwitchValues() {
// Try different (primitive) types for 'c'
// Which types do compile?
// Does boxing work?
char c = 'a';
String result = "Basic ";
switch (c) {
case 'a':
result += "One";
break;
default:
result += "Nothing";
}
assertEquals(result, __);
}
@Koan
public void shortCircuit() {
int i = 1;
int a = 6;
// Why did we use a variable here?
// What happens if you replace 'a' with '6' below?
if ((a < 9) || (++i < 8)) i = i + 1;
assertEquals(i, __);
}
}