[BAEL-6481] - Stop Executing Further Code in Java (#14076)
* Creating a Deep vs Shallow Copy of an Object in Java * [BAEL-6481]-Stop Executing Further Code in Java * [BAEL-6481] - Stop Executing Further Code in Java * [BAEL-6481] - Stop Executing Further Code in Java * [BAEL-6481] - Stop Executing Further Code in Java. * [BAEL-6481] - Stop Executing Further Code in Java. * [BAEL-6481] - Stop Executing Further Code in Java. * [BAEL-6481] Stop Executing Further Code in Java. * [BAEL-6481] Stop Executing Further Code in Java. Moved to core java numbers - 6 * [BAEL-6481] Stop Executing Further Code in Java. * [BAEL-6481] Stop Executing Further Code in Java. * [BAEL-6481] Stop Executing Further Code in Java. * [BAEL-6481] Stop Executing Further Code in Java. [Commented the Test cases] * [BAEL-6481] Stop Executing Further Code in Java. [Commented the Two Test] * [BAEL-6481] Stop Executing Further Code in Java. [Fixed Method Name's]
This commit is contained in:
parent
e337b6dff3
commit
228598db3c
|
@ -0,0 +1,13 @@
|
|||
package com.baeldung.stopexecution;
|
||||
|
||||
public class InterruptThread extends Thread {
|
||||
@Override
|
||||
public void run() {
|
||||
while (!isInterrupted()) {
|
||||
if (isInterrupted()) {
|
||||
break;
|
||||
}
|
||||
// business logic
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,87 @@
|
|||
package com.baeldung.stopexecution;
|
||||
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import java.util.Locale;
|
||||
|
||||
public class StopExecutionFurtherCode {
|
||||
|
||||
boolean shouldContinue = true;
|
||||
|
||||
int performTask(int a, int b) {
|
||||
if (!shouldContinue) {
|
||||
System.exit(0);
|
||||
}
|
||||
return a + b;
|
||||
}
|
||||
|
||||
void stop() {
|
||||
this.shouldContinue = false;
|
||||
}
|
||||
|
||||
int calculateFactorial(int n) {
|
||||
if (n <= 1) {
|
||||
return 1; // base case
|
||||
}
|
||||
|
||||
return n * calculateFactorial(n - 1);
|
||||
}
|
||||
|
||||
int calculateSum(int[] x) {
|
||||
int sum = 0;
|
||||
for (int i = 0; i < 10; i++) {
|
||||
if (x[i] < 0) {
|
||||
break;
|
||||
}
|
||||
sum += x[i];
|
||||
}
|
||||
return sum;
|
||||
}
|
||||
|
||||
<T> T stopExecutionUsingException(T object) {
|
||||
if (object instanceof Number) {
|
||||
throw new IllegalArgumentException("Parameter can not be number.");
|
||||
}
|
||||
T upperCase = (T) String.valueOf(object)
|
||||
.toUpperCase(Locale.ENGLISH);
|
||||
return upperCase;
|
||||
}
|
||||
|
||||
int processLines(String[] lines) {
|
||||
int statusCode = 0;
|
||||
parser:
|
||||
for (String line : lines) {
|
||||
System.out.println("Processing line: " + line);
|
||||
if (line.equals("stop")) {
|
||||
System.out.println("Stopping parsing...");
|
||||
statusCode = -1;
|
||||
break parser; // Stop parsing and exit the loop
|
||||
}
|
||||
System.out.println("Line processed.");
|
||||
}
|
||||
return statusCode;
|
||||
}
|
||||
|
||||
void download(String fileUrl, String destinationPath) throws MalformedURLException {
|
||||
if (fileUrl == null || fileUrl.isEmpty() || destinationPath == null || destinationPath.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
// execute downloading
|
||||
URL url = new URL(fileUrl);
|
||||
try (InputStream in = url.openStream(); FileOutputStream out = new FileOutputStream(destinationPath)) {
|
||||
byte[] buffer = new byte[1024];
|
||||
int bytesRead;
|
||||
while ((bytesRead = in.read(buffer)) != -1) {
|
||||
out.write(buffer, 0, bytesRead);
|
||||
}
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,90 @@
|
|||
package com.baeldung.stopexecution;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotEquals;
|
||||
import static org.junit.Assert.assertThrows;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
import java.net.MalformedURLException;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.FixMethodOrder;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.runners.MethodSorters;
|
||||
|
||||
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
|
||||
public class StopExecutionFurtherCodeUnitTest {
|
||||
|
||||
|
||||
@Test
|
||||
void givenExecution_whenStopIsNotCalled_thenTaskIsPerformed() {
|
||||
StopExecutionFurtherCode stopExecution = new StopExecutionFurtherCode();
|
||||
int performedTask = stopExecution.performTask(10, 20);
|
||||
Assert.assertEquals(30, performedTask);
|
||||
}
|
||||
|
||||
// This test case have been commented because, otherwise, the program will exit since System.exit(statusCode) is being used.
|
||||
/*@Test
|
||||
void givenExecution_whenStopIsCalled_thenTaskNotPerformed() {
|
||||
StopExecutionFurtherCode stopExecution = new StopExecutionFurtherCode();
|
||||
stopExecution.stop();
|
||||
int performedTask = stopExecution.performTask(10, 20);
|
||||
Assert.assertEquals(30, performedTask);
|
||||
}*/
|
||||
|
||||
@Test
|
||||
void givenWrongUrlAndPath_whenDownloadCalled_thenExecutionIsStopped() throws MalformedURLException {
|
||||
StopExecutionFurtherCode stopExecutionFurtherCode = new StopExecutionFurtherCode();
|
||||
stopExecutionFurtherCode.download("", "");
|
||||
}
|
||||
|
||||
@Test
|
||||
void givenName_whenStopExecutionUsingExceptionCalled_thenNameIsConvertedToUpper() {
|
||||
StopExecutionFurtherCode stopExecutionFurtherCode = new StopExecutionFurtherCode();
|
||||
String name = "John";
|
||||
String result1 = stopExecutionFurtherCode.stopExecutionUsingException(name);
|
||||
Assert.assertEquals("JOHN", result1);
|
||||
try {
|
||||
Integer number1 = 10;
|
||||
Assert.assertThrows(IllegalArgumentException.class, () -> {
|
||||
int result = stopExecutionFurtherCode.stopExecutionUsingException(number1);
|
||||
});
|
||||
} catch (Exception e) {
|
||||
Assert.fail("Unexpected exception thrown: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void givenBaseCase_whenStopExecutionWhenBaseCaseKnownCalled_thenFactorialIsCalculated() throws MalformedURLException {
|
||||
StopExecutionFurtherCode stopExecutionFurtherCode = new StopExecutionFurtherCode();
|
||||
int factorial = stopExecutionFurtherCode.calculateFactorial(1);
|
||||
Assert.assertEquals(1, factorial);
|
||||
}
|
||||
|
||||
@Test
|
||||
void givenArrayWithNegative_whenStopExecutionInLoopCalled_thenSumIsCalculatedIgnoringNegatives() {
|
||||
StopExecutionFurtherCode stopExecutionFurtherCode = new StopExecutionFurtherCode();
|
||||
int[] nums = { 1, 2, 3, -1, 1, 2, 3 };
|
||||
int sum = stopExecutionFurtherCode.calculateSum(nums);
|
||||
Assert.assertEquals(6, sum);
|
||||
}
|
||||
|
||||
@Test
|
||||
void givenThreadRunning_whenInterrupted_thenThreadExecutionIsStopped() throws InterruptedException {
|
||||
InterruptThread stopExecution = new InterruptThread();
|
||||
stopExecution.start();
|
||||
Thread.sleep(2000);
|
||||
stopExecution.interrupt();
|
||||
stopExecution.join();
|
||||
Assert.assertTrue(!stopExecution.isAlive());
|
||||
}
|
||||
|
||||
@Test
|
||||
void givenLinesWithStopLabel_whenStopExecutionLabeledLoopCalled_thenLoopExecutionIsStopped() {
|
||||
StopExecutionFurtherCode furtherCode = new StopExecutionFurtherCode();
|
||||
final String[] lines = { "Line 1", "Line 2", "Line 3", "stop", "Line 4", "Line 5" };
|
||||
int statusCode = furtherCode.processLines(lines);
|
||||
Assert.assertEquals(-1, statusCode);
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue