This commit is contained in:
THINK 2020-10-26 19:12:52 +01:00
parent 13be85b707
commit a5a8af76ed
16 changed files with 565 additions and 12 deletions

3
.gitignore vendored Normal file
View File

@ -0,0 +1,3 @@
.idea
log.log
.iml

61
pom.xml
View File

@ -4,12 +4,65 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>Pracownia2020-2021</artifactId>
<groupId>Pracownia</groupId>
<artifactId>PracowniaMain</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<build>
<finalName>${project.artifactId}-${project.version}</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<attach>false</attach>
<appendAssemblyId>false</appendAssemblyId>
<archive>
<manifest>
<mainClass>
second.debug.Breakpoints
</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>3.17.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>

View File

@ -1,8 +0,0 @@
package introduction;
public class HelloWorld {
public static void main(String [ ] args) {
System.out.println("Hello World");
}
}

View File

@ -0,0 +1,20 @@
package second.debug;
import second.debug.hidden.MakeThings;
public class Breakpoints {
public static void main(final String... args) {
//create objects
Object o = MakeThings.makeAThing();
System.out.println("Going inside print");
printThis(o);
}
private static void printThis(final Object o) {
System.out.println("I will print you something very soon");
System.out.println(o.toString());
}
}

View File

@ -0,0 +1,27 @@
package second.debug;
import second.debug.hidden.ObjectAnalyzer;
import second.debug.hidden.ObjectMaker;
public class ConditionalBreak {
public static void main(final String... args) {
// In E2, getList didn't work so well. So let's try an array this time...
final Object[] myArray = ObjectMaker.getArray(100);
boolean everythingIsOK = true;
int i = 0;
while (i < myArray.length && everythingIsOK) {
// This time we're using an external library to process objects.
// If something goes wrong, this is the line where we'll want to set a
// breakpoint.
everythingIsOK = ObjectAnalyzer.processElementAtIndex(myArray, i);
i++;
}
if (!everythingIsOK) {
throw new RuntimeException(
"Oh noes - analysis incomplete! See console for more information.");
}
}
}

View File

@ -0,0 +1,44 @@
package second.debug;
import second.debug.hidden.ObjectMaker;
import java.util.List;
/**
* Exercise 2: Using the Expression Window in the Debug perspective.
*
* @author Mark Hiner
*/
public class EvaluateExpressions {
public static void main(final String... args) {
// Let's make a list of 100000 objects
final List<Integer> myList = ObjectMaker.getList(100000);
// Now let's process some objects from our list
// Process first object
processElementAtIndex(myList, 0);
// Process middle object
processElementAtIndex(myList, 100000 / 2);
// Process last object
processElementAtIndex(myList, 100000 - 1);
}
private static void processElementAtIndex(final List<Integer> list,
final int index)
{
// First let's check our method arguments to see if they're valid
if (index < 0 || index >= list.size()) {
throw new IllegalArgumentException(
"If you don't mind, I would prefer not to process your object...");
}
System.out.println(100 * list.get(index));
// OK now we can process the argument.
// ... just kidding, I'm totally going to delete your precious objects.
list.set(index, null);
}
}

View File

@ -0,0 +1,10 @@
package second.debug.hidden;
public class MakeThings {
public static Object makeAThing() {
final Object o = new Object();
System.out.println(o);
return null;
}
}

View File

@ -0,0 +1,38 @@
package second.debug.hidden;
public class ObjectAnalyzer {
public static boolean processElementAtIndex(final Object[] myArray,
final int i) {
final Object o = myArray[i];
if (o == null) {
System.out.println("Something is wrong with the " + (i + 1) + suffix(i +
1) + " object... :(\n\n");
return false;
}
return true;
}
private static String suffix(int i) {
i = i % 10;
String suffix = "th";
switch (i) {
case 1:
suffix = "rst";
break;
case 2:
suffix = "nd";
break;
case 3:
suffix = "rd";
break;
}
return suffix;
}
}

View File

@ -0,0 +1,74 @@
/*
* #%L
* ImageJ interactive debugging tutorials.
* %%
* Copyright (C) 2009 - 2016 Board of Regents of the University of
* Wisconsin-Madison.
* %%
* To the extent possible under law, the ImageJ developers have waived
* all copyright and related or neighboring rights to this tutorial code.
*
* See the CC0 1.0 Universal license for details:
* http://creativecommons.org/publicdomain/zero/1.0/
* #L%
*/
package second.debug.hidden;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
* STOP LOOKING AT THIS CLASS!! IT'S OFF LIMITS!
*
* @author Mark Hiner
*/
public class ObjectMaker {
final static Set<Object> cache = new HashSet<Object>();
public static List<Integer> getList(final int size) {
final List<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < size - 1; i++) {
list.add(new Double(Math.random() * 100000).intValue());
}
list.add(null);
return list;
}
public static Object[] getArray(final int size) {
final Object[] array = new Object[size];
for (int i = 0; i < size - 1; i++) {
array[i] = new Double(Math.random() * 100000);
}
array[(int) (Math.random() * (size - 1))] = null;
return array;
}
public static Double[] getDoubleArray(final int size) {
final Double[] array = new Double[size];
return array;
}
public static Float[] getFloatArray(final int size) {
final Float[] array = new Float[size];
cache.add(array);
return array;
}
public static Long[] getLongArray(final int size) {
final Long[] array = new Long[size];
return array;
}
}

View File

@ -0,0 +1,23 @@
package second.junit;
public class AdvanceMath {
public int addition(int a, int b) {
return a+b;
}
public int addition(String a, int b) {
Integer i = Integer.valueOf(a);
return i+b;
}
public int multiply(int a, int b) throws Exception {
long la = a;
long lb = b;
if (la*lb > Integer.MAX_VALUE) throw new Exception("value over the limit");
return a*b;
}
}

View File

@ -0,0 +1,51 @@
package second.shortcuts;
import java.util.List;
public class ClassThatHaveItAll implements InterfaceOne {
String name;
Integer number;
List<Long> list;
public ClassThatHaveItAll() {
}
public ClassThatHaveItAll(String name, Integer number, List<Long> list) {
this.name = name;
this.number = number;
this.list = list;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getNumber() {
return number;
}
public void setNumber(Integer number) {
this.number = number;
}
public List<Long> getList() {
return list;
}
public void setList(List<Long> list) {
this.list = list;
}
public void printMe(String info) {
System.out.println(info);
}
public void usageOfPrint() {
printMe("Hi");
}
}

View File

@ -0,0 +1,29 @@
package second.shortcuts;
public class ClassThatHaveItAllBis implements InterfaceOne {
String name;
Integer number;
public void printMe(String info) {
System.out.println(info);
}
public void spam() {
long i = 0;
i = 10;
i = 110;
i = 1110;
i = 11110;
i = 111110;
i = 1111110;
i = 11111110;
i = 111111110;
i = 1111111110;
printMe(String.valueOf(i));
}
public void usageOfPrint() {
printMe("Hi");
}
}

View File

@ -0,0 +1,7 @@
package second.shortcuts;
public interface InterfaceOne {
public void printMe(String info);
}

View File

@ -0,0 +1,16 @@
# Root logger option
log4j.rootLogger=DEBUG, stdout, file
# Redirect log messages to console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
# Redirect log messages to a log file, support file rolling.
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=log.log
log4j.appender.file.MaxFileSize=5MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

View File

@ -0,0 +1,38 @@
package second.junit;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.assertTrue;
public class AdvanceMathTest {
AdvanceMath math;
@Before
public void setUp() {
System.out.println("Run setUp");
math = new AdvanceMath();
}
@Test
public void additionTest() {
Integer a = math.addition(1, 4);
assertTrue(a == 5);
}
@Test
public void additionTestString() {
long a = math.addition("1", 4);
Assert.assertEquals(5L, a);
}
@Test(expected = Exception.class)
public void additionTestString2() {
int a = math.addition("a1", 4);
}
}

View File

@ -0,0 +1,128 @@
package second.junit;
import org.junit.Before;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
import static org.assertj.core.api.Assertions.*;
public class FrodoTest {
Creature frodo = new Creature("Frodo", 33L, Race.HOBBIT);
Creature sauron = new Creature("Sauron", 10000L, Race.WIZARD);
List<Creature> fellowshipOfTheRing = new ArrayList<Creature>();
Creature boromir = new Creature("Boromir", 37L, Race.MAN);
Creature sam = new Creature("Sam", 38L, Race.HOBBIT);
Creature merry = new Creature("Merry", 36L, Race.HOBBIT);
Creature pippin = new Creature("Pippin", 28L, Race.HOBBIT);
Creature legolas = new Creature("Legolas", 2500L, Race.ELF);
Creature aragorn = new Creature("Aragorn", 87L, Race.MAN);
Creature gimli = new Creature("Gimli", 139L, Race.DWARF);
Creature gandalf = new Creature("Gandalf", 3000L, Race.WIZARD);
@Before
public void prepareData() {
fellowshipOfTheRing.add(frodo);
fellowshipOfTheRing.add(sam);
fellowshipOfTheRing.add(merry);
fellowshipOfTheRing.add(pippin);
fellowshipOfTheRing.add(legolas);
fellowshipOfTheRing.add(aragorn);
fellowshipOfTheRing.add(boromir);
fellowshipOfTheRing.add(gimli);
fellowshipOfTheRing.add(gandalf);
}
@Test
public void assertJtestexample() {
// basic assertions
assertThat(frodo.getName()).isEqualTo("Frodo");
assertThat(frodo).isNotEqualTo(sauron);
// chaining string specific assertions
assertThat(frodo.getName()).startsWith("Fro")
.endsWith("do")
.isEqualToIgnoringCase("frodo");
// collection specific assertions (there are plenty more)
assertThat(fellowshipOfTheRing).hasSize(9)
.contains(frodo, sam)
.doesNotContain(sauron);
// as() is used to describe the test and will be shown before the error message
assertThat(frodo.getAge()).isEqualTo(33);
}
@Test
public void test() {
// using the 'extracting' feature to check fellowshipOfTheRing character's names
assertThat(fellowshipOfTheRing).extracting(Creature::getName)
.doesNotContain("Sauron", "Elrond");
// extracting multiple values at once grouped in tuples
assertThat(fellowshipOfTheRing).extracting("name", "age", "race")
.contains(tuple("Boromir", 37L, Race.MAN),
tuple("Sam", 38L, Race.HOBBIT),
tuple("Legolas", 2500L, Race.ELF));
// filtering a collection before asserting
assertThat(fellowshipOfTheRing).filteredOn(character -> character.getName().contains("o"))
.containsOnly(aragorn, frodo, legolas, boromir);
// combining filtering and extraction (yes we can)
assertThat(fellowshipOfTheRing).filteredOn(character -> character.getName().contains("o"))
.containsOnly(aragorn, frodo, legolas, boromir)
.extracting(character -> character.getRace())
.contains(Race.HOBBIT, Race.ELF, Race.MAN);
}
}
class Creature {
String name;
Long age;
Race race;
public Creature(String name, Long age, Race race) {
this.name = name;
this.age = age;
this.race = race;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Long getAge() {
return age;
}
public void setAge(Long age) {
this.age = age;
}
public Race getRace() {
return race;
}
public void setRace(Race race) {
this.race = race;
}
}
enum Race {
HOBBIT,
ORK,
WIZARD,
ELF,
MAN,
DWARF
}