Add Wrapper (#179)
* Update copyright year * Alias: added * bump release-drafter from 5.11.0 to 5.14.0 * Version set to 2.3.0 * Rename Alias as Wrapper and drop map method Simplify tests.
This commit is contained in:
parent
19e3a06ac2
commit
a501c506a4
44 changed files with 220 additions and 94 deletions
2
.github/workflows/draft-release.yml
vendored
2
.github/workflows/draft-release.yml
vendored
|
@ -9,6 +9,6 @@ jobs:
|
||||||
update_draft_release:
|
update_draft_release:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: release-drafter/release-drafter@v5.11.0
|
- uses: release-drafter/release-drafter@v5.14.0
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/**
|
/**
|
||||||
* The MIT License (MIT)
|
* The MIT License (MIT)
|
||||||
*
|
*
|
||||||
* Copyright (c) 2018 Paul Campbell
|
* Copyright (c) 2021 Paul Campbell
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||||
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||||
|
|
107
README.org
107
README.org
|
@ -1,11 +1,12 @@
|
||||||
* Mon
|
* Mon
|
||||||
* TypeAlias, Maybe and Result for Java.
|
* Alias, TypeAlias, Maybe and Result for Java.
|
||||||
|
|
||||||
[[https://oss.sonatype.org/content/repositories/releases/net/kemitix/mon][file:https://img.shields.io/nexus/r/https/oss.sonatype.org/net.kemitix/mon.svg?style=for-the-badge]]
|
[[https://oss.sonatype.org/content/repositories/releases/net/kemitix/mon][file:https://img.shields.io/nexus/r/https/oss.sonatype.org/net.kemitix/mon.svg?style=for-the-badge]]
|
||||||
[[https://search.maven.org/#search%7Cga%7C1%7Cg%3A%22net.kemitix%22%20AND%20a%3A%22mon%22][file:https://img.shields.io/maven-central/v/net.kemitix/mon.svg?style=for-the-badge]]
|
[[https://search.maven.org/#search%7Cga%7C1%7Cg%3A%22net.kemitix%22%20AND%20a%3A%22mon%22][file:https://img.shields.io/maven-central/v/net.kemitix/mon.svg?style=for-the-badge]]
|
||||||
[[http://i.jpeek.org/net.kemitix/mon/index.html][file:http://i.jpeek.org/net.kemitix/mon/badge.svg]]
|
[[http://i.jpeek.org/net.kemitix/mon/index.html][file:http://i.jpeek.org/net.kemitix/mon/badge.svg]]
|
||||||
|
|
||||||
- [Maven Usage]
|
- [Maven Usage]
|
||||||
|
- [Alias]
|
||||||
- [TypeAlias]
|
- [TypeAlias]
|
||||||
- [Maybe]
|
- [Maybe]
|
||||||
- [Result]
|
- [Result]
|
||||||
|
@ -26,7 +27,10 @@
|
||||||
The latest version should be shown above with the nexus and maven-central
|
The latest version should be shown above with the nexus and maven-central
|
||||||
badges or can be found on [[https://search.maven.org/#search%7Cga%7C1%7Cg%3A%22net.kemitix%22%20AND%20a%3A%22mon%22][Maven Central]].
|
badges or can be found on [[https://search.maven.org/#search%7Cga%7C1%7Cg%3A%22net.kemitix%22%20AND%20a%3A%22mon%22][Maven Central]].
|
||||||
|
|
||||||
* TypeAlias
|
* Wrapper
|
||||||
|
|
||||||
|
A simple FunctionalInterface that contains a value. Can be used to implement
|
||||||
|
a form of type-alias in Java.
|
||||||
|
|
||||||
In Haskell it is possible to create an alias for a Type, and to then use
|
In Haskell it is possible to create an alias for a Type, and to then use
|
||||||
that alias with the same behaviour as the original, except that the compiler
|
that alias with the same behaviour as the original, except that the compiler
|
||||||
|
@ -39,20 +43,62 @@
|
||||||
newtype PhoneBookEntry = PhoneBookEntry (Name, PhoneNumber)
|
newtype PhoneBookEntry = PhoneBookEntry (Name, PhoneNumber)
|
||||||
newtype PhoneBook = PhoneBook [PhoneBookEntry]
|
newtype PhoneBook = PhoneBook [PhoneBookEntry]
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
In Java we don't have the ability to have that true alias, so TypeAlias is
|
|
||||||
more of a type-wrapper. It's as close as I could get to a Haskell type alias
|
|
||||||
in Java.
|
|
||||||
|
|
||||||
The benefits of using TypeAlias are:
|
In Java we don't have the ability to have that true alias, so Wrapper simply
|
||||||
|
wraps the value within a new type. It's as close as I could get to a Haskell
|
||||||
|
type alias in Java.
|
||||||
|
|
||||||
|
The benefits of using Wrapper are:
|
||||||
|
|
||||||
- encapsulation of the wrapped type when passing references through code
|
- encapsulation of the wrapped type when passing references through code
|
||||||
that doesn't need to access the actual value, but only to pass it on
|
that doesn't need to access the actual value, but only to pass it on
|
||||||
- type-safe parameters where you would otherwise be passing Strings,
|
- type-safe parameters where you would otherwise be passing Strings,
|
||||||
Integers, Lists, or other general classes
|
Integers, Lists, or other general classes
|
||||||
- equality and hashcode
|
|
||||||
- less verbose than implementing your own
|
- less verbose than implementing your own
|
||||||
|
|
||||||
|
*Wrapper Example:*
|
||||||
|
|
||||||
|
#+BEGIN_SRC java
|
||||||
|
interface PhoneNumber extends Wrapper<String> {}
|
||||||
|
|
||||||
|
PhoneNumber pn = () -> "01234 567890";
|
||||||
|
String v = pn.value();
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
*Roll your own:*
|
||||||
|
|
||||||
|
#+BEGIN_SRC java
|
||||||
|
class PhoneNumber {
|
||||||
|
private final String value;
|
||||||
|
public PhoneNumber(final String value) {
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
public String value() {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
*Lombok:*
|
||||||
|
|
||||||
|
Using Lombok we can achieve it in 8 lines, compared to 24 for rolling your
|
||||||
|
own, or 1 for Alias:
|
||||||
|
|
||||||
|
#+BEGIN_SRC java
|
||||||
|
@Value
|
||||||
|
@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
|
||||||
|
class PhoneNumber {
|
||||||
|
private final String value;
|
||||||
|
public static PhoneNumber of(final String phoneNumber) {
|
||||||
|
return new PhoneNumber(phoneNumber);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
* TypeAlias
|
||||||
|
|
||||||
|
Note: this is a precursor to `Wrapper` and should be considered deprecated.
|
||||||
|
|
||||||
*TypeAlias Example:*
|
*TypeAlias Example:*
|
||||||
|
|
||||||
#+BEGIN_SRC java
|
#+BEGIN_SRC java
|
||||||
|
@ -66,51 +112,6 @@
|
||||||
}
|
}
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
*Roll your own:*
|
|
||||||
|
|
||||||
#+BEGIN_SRC java
|
|
||||||
class PhoneNumber {
|
|
||||||
private final String value;
|
|
||||||
private PhoneNumber(final String value) {
|
|
||||||
this.value = value;
|
|
||||||
}
|
|
||||||
public static PhoneNumber of(final String phoneNumber) {
|
|
||||||
return new PhoneNumber(phoneNumber);
|
|
||||||
}
|
|
||||||
@Override
|
|
||||||
public boolean equals(Object o) {
|
|
||||||
if (this == o) return true;
|
|
||||||
if (o == null || getClass() != o.getClass()) return false;
|
|
||||||
PhoneNumber that = (PhoneNumber) o;
|
|
||||||
return Objects.equals(value, that.value);
|
|
||||||
}
|
|
||||||
@Override
|
|
||||||
public int hashCode() {
|
|
||||||
return Objects.hash(value);
|
|
||||||
}
|
|
||||||
public String getValue() {
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#+END_SRC
|
|
||||||
|
|
||||||
*Lombok:*
|
|
||||||
|
|
||||||
Although, if you are using Lombok, that can be equally terse, both it and
|
|
||||||
TypeAlias<String> coming in at 8 lines each, compared to 24 for rolling your
|
|
||||||
own:
|
|
||||||
|
|
||||||
#+BEGIN_SRC java
|
|
||||||
@Value
|
|
||||||
@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
|
|
||||||
class PhoneNumber {
|
|
||||||
private final String value;
|
|
||||||
public static PhoneNumber of(final String phoneNumber) {
|
|
||||||
return new PhoneNumber(phoneNumber);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#+END_SRC
|
|
||||||
|
|
||||||
** =TypeAlias= *can* be a Monad
|
** =TypeAlias= *can* be a Monad
|
||||||
|
|
||||||
#+BEGIN_SRC java
|
#+BEGIN_SRC java
|
||||||
|
|
2
pom.xml
2
pom.xml
|
@ -11,7 +11,7 @@
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>mon</artifactId>
|
<artifactId>mon</artifactId>
|
||||||
<version>2.2.1-SNAPSHOT</version>
|
<version>2.3.0</version>
|
||||||
|
|
||||||
<name>Mon</name>
|
<name>Mon</name>
|
||||||
<description>TypeAlias, Result and Maybe for Java</description>
|
<description>TypeAlias, Result and Maybe for Java</description>
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/**
|
/**
|
||||||
* The MIT License (MIT)
|
* The MIT License (MIT)
|
||||||
*
|
*
|
||||||
* Copyright (c) 2018 Paul Campbell
|
* Copyright (c) 2021 Paul Campbell
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||||
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/**
|
/**
|
||||||
* The MIT License (MIT)
|
* The MIT License (MIT)
|
||||||
*
|
*
|
||||||
* Copyright (c) 2018 Paul Campbell
|
* Copyright (c) 2021 Paul Campbell
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||||
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/**
|
/**
|
||||||
* The MIT License (MIT)
|
* The MIT License (MIT)
|
||||||
*
|
*
|
||||||
* Copyright (c) 2018 Paul Campbell
|
* Copyright (c) 2021 Paul Campbell
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||||
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||||
|
|
42
src/main/java/net/kemitix/mon/Wrapper.java
Normal file
42
src/main/java/net/kemitix/mon/Wrapper.java
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
/**
|
||||||
|
* The MIT License (MIT)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2021 Paul Campbell
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||||
|
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||||
|
* including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||||
|
* and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
|
||||||
|
* subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all copies
|
||||||
|
* or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||||
|
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||||||
|
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package net.kemitix.mon;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A wrapper for other types.
|
||||||
|
*
|
||||||
|
* <p>Can be used as a form of type-alias, where the value is held in the wrapper.</p>
|
||||||
|
*
|
||||||
|
* @param <T> the type of the wrapper's value
|
||||||
|
* @author Paul Campbell (pcampbell@kemitix.net)
|
||||||
|
*/
|
||||||
|
@FunctionalInterface
|
||||||
|
public interface Wrapper<T> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The wrapped value.
|
||||||
|
*
|
||||||
|
* @return the value
|
||||||
|
*/
|
||||||
|
public abstract T value();
|
||||||
|
|
||||||
|
}
|
|
@ -1,7 +1,7 @@
|
||||||
/**
|
/**
|
||||||
* The MIT License (MIT)
|
* The MIT License (MIT)
|
||||||
*
|
*
|
||||||
* Copyright (c) 2018 Paul Campbell
|
* Copyright (c) 2021 Paul Campbell
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||||
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/**
|
/**
|
||||||
* The MIT License (MIT)
|
* The MIT License (MIT)
|
||||||
*
|
*
|
||||||
* Copyright (c) 2018 Paul Campbell
|
* Copyright (c) 2021 Paul Campbell
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||||
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/**
|
/**
|
||||||
* The MIT License (MIT)
|
* The MIT License (MIT)
|
||||||
*
|
*
|
||||||
* Copyright (c) 2018 Paul Campbell
|
* Copyright (c) 2021 Paul Campbell
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||||
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/**
|
/**
|
||||||
* The MIT License (MIT)
|
* The MIT License (MIT)
|
||||||
*
|
*
|
||||||
* Copyright (c) 2018 Paul Campbell
|
* Copyright (c) 2021 Paul Campbell
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||||
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/**
|
/**
|
||||||
* The MIT License (MIT)
|
* The MIT License (MIT)
|
||||||
*
|
*
|
||||||
* Copyright (c) 2018 Paul Campbell
|
* Copyright (c) 2021 Paul Campbell
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||||
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/**
|
/**
|
||||||
* The MIT License (MIT)
|
* The MIT License (MIT)
|
||||||
*
|
*
|
||||||
* Copyright (c) 2018 Paul Campbell
|
* Copyright (c) 2021 Paul Campbell
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||||
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/**
|
/**
|
||||||
* The MIT License (MIT)
|
* The MIT License (MIT)
|
||||||
*
|
*
|
||||||
* Copyright (c) 2018 Paul Campbell
|
* Copyright (c) 2021 Paul Campbell
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||||
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/**
|
/**
|
||||||
* The MIT License (MIT)
|
* The MIT License (MIT)
|
||||||
*
|
*
|
||||||
* Copyright (c) 2018 Paul Campbell
|
* Copyright (c) 2021 Paul Campbell
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||||
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/**
|
/**
|
||||||
* The MIT License (MIT)
|
* The MIT License (MIT)
|
||||||
*
|
*
|
||||||
* Copyright (c) 2018 Paul Campbell
|
* Copyright (c) 2021 Paul Campbell
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||||
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/**
|
/**
|
||||||
* The MIT License (MIT)
|
* The MIT License (MIT)
|
||||||
*
|
*
|
||||||
* Copyright (c) 2018 Paul Campbell
|
* Copyright (c) 2021 Paul Campbell
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||||
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/**
|
/**
|
||||||
* The MIT License (MIT)
|
* The MIT License (MIT)
|
||||||
*
|
*
|
||||||
* Copyright (c) 2018 Paul Campbell
|
* Copyright (c) 2021 Paul Campbell
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||||
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/**
|
/**
|
||||||
* The MIT License (MIT)
|
* The MIT License (MIT)
|
||||||
*
|
*
|
||||||
* Copyright (c) 2018 Paul Campbell
|
* Copyright (c) 2021 Paul Campbell
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||||
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/**
|
/**
|
||||||
* The MIT License (MIT)
|
* The MIT License (MIT)
|
||||||
*
|
*
|
||||||
* Copyright (c) 2018 Paul Campbell
|
* Copyright (c) 2021 Paul Campbell
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||||
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/**
|
/**
|
||||||
* The MIT License (MIT)
|
* The MIT License (MIT)
|
||||||
*
|
*
|
||||||
* Copyright (c) 2018 Paul Campbell
|
* Copyright (c) 2021 Paul Campbell
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||||
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/**
|
/**
|
||||||
* The MIT License (MIT)
|
* The MIT License (MIT)
|
||||||
*
|
*
|
||||||
* Copyright (c) 2018 Paul Campbell
|
* Copyright (c) 2021 Paul Campbell
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||||
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/**
|
/**
|
||||||
* The MIT License (MIT)
|
* The MIT License (MIT)
|
||||||
*
|
*
|
||||||
* Copyright (c) 2018 Paul Campbell
|
* Copyright (c) 2021 Paul Campbell
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||||
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/**
|
/**
|
||||||
* The MIT License (MIT)
|
* The MIT License (MIT)
|
||||||
*
|
*
|
||||||
* Copyright (c) 2018 Paul Campbell
|
* Copyright (c) 2021 Paul Campbell
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||||
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/**
|
/**
|
||||||
* The MIT License (MIT)
|
* The MIT License (MIT)
|
||||||
*
|
*
|
||||||
* Copyright (c) 2018 Paul Campbell
|
* Copyright (c) 2021 Paul Campbell
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||||
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/**
|
/**
|
||||||
* The MIT License (MIT)
|
* The MIT License (MIT)
|
||||||
*
|
*
|
||||||
* Copyright (c) 2018 Paul Campbell
|
* Copyright (c) 2021 Paul Campbell
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||||
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/**
|
/**
|
||||||
* The MIT License (MIT)
|
* The MIT License (MIT)
|
||||||
*
|
*
|
||||||
* Copyright (c) 2018 Paul Campbell
|
* Copyright (c) 2021 Paul Campbell
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||||
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/**
|
/**
|
||||||
* The MIT License (MIT)
|
* The MIT License (MIT)
|
||||||
*
|
*
|
||||||
* Copyright (c) 2018 Paul Campbell
|
* Copyright (c) 2021 Paul Campbell
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||||
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/**
|
/**
|
||||||
* The MIT License (MIT)
|
* The MIT License (MIT)
|
||||||
*
|
*
|
||||||
* Copyright (c) 2018 Paul Campbell
|
* Copyright (c) 2021 Paul Campbell
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||||
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/**
|
/**
|
||||||
* The MIT License (MIT)
|
* The MIT License (MIT)
|
||||||
*
|
*
|
||||||
* Copyright (c) 2018 Paul Campbell
|
* Copyright (c) 2021 Paul Campbell
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||||
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/**
|
/**
|
||||||
* The MIT License (MIT)
|
* The MIT License (MIT)
|
||||||
*
|
*
|
||||||
* Copyright (c) 2018 Paul Campbell
|
* Copyright (c) 2021 Paul Campbell
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||||
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/**
|
/**
|
||||||
* The MIT License (MIT)
|
* The MIT License (MIT)
|
||||||
*
|
*
|
||||||
* Copyright (c) 2018 Paul Campbell
|
* Copyright (c) 2021 Paul Campbell
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||||
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/**
|
/**
|
||||||
* The MIT License (MIT)
|
* The MIT License (MIT)
|
||||||
*
|
*
|
||||||
* Copyright (c) 2018 Paul Campbell
|
* Copyright (c) 2021 Paul Campbell
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||||
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/**
|
/**
|
||||||
* The MIT License (MIT)
|
* The MIT License (MIT)
|
||||||
*
|
*
|
||||||
* Copyright (c) 2018 Paul Campbell
|
* Copyright (c) 2021 Paul Campbell
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||||
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/**
|
/**
|
||||||
* The MIT License (MIT)
|
* The MIT License (MIT)
|
||||||
*
|
*
|
||||||
* Copyright (c) 2018 Paul Campbell
|
* Copyright (c) 2021 Paul Campbell
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||||
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/**
|
/**
|
||||||
* The MIT License (MIT)
|
* The MIT License (MIT)
|
||||||
*
|
*
|
||||||
* Copyright (c) 2018 Paul Campbell
|
* Copyright (c) 2021 Paul Campbell
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||||
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/**
|
/**
|
||||||
* The MIT License (MIT)
|
* The MIT License (MIT)
|
||||||
*
|
*
|
||||||
* Copyright (c) 2018 Paul Campbell
|
* Copyright (c) 2021 Paul Campbell
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||||
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/**
|
/**
|
||||||
* The MIT License (MIT)
|
* The MIT License (MIT)
|
||||||
*
|
*
|
||||||
* Copyright (c) 2018 Paul Campbell
|
* Copyright (c) 2021 Paul Campbell
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||||
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/**
|
/**
|
||||||
* The MIT License (MIT)
|
* The MIT License (MIT)
|
||||||
*
|
*
|
||||||
* Copyright (c) 2018 Paul Campbell
|
* Copyright (c) 2021 Paul Campbell
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||||
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/**
|
/**
|
||||||
* The MIT License (MIT)
|
* The MIT License (MIT)
|
||||||
*
|
*
|
||||||
* Copyright (c) 2018 Paul Campbell
|
* Copyright (c) 2021 Paul Campbell
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||||
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/**
|
/**
|
||||||
* The MIT License (MIT)
|
* The MIT License (MIT)
|
||||||
*
|
*
|
||||||
* Copyright (c) 2018 Paul Campbell
|
* Copyright (c) 2021 Paul Campbell
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||||
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/**
|
/**
|
||||||
* The MIT License (MIT)
|
* The MIT License (MIT)
|
||||||
*
|
*
|
||||||
* Copyright (c) 2018 Paul Campbell
|
* Copyright (c) 2021 Paul Campbell
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||||
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||||
|
|
83
src/test/java/net/kemitix/mon/WrapperTest.java
Normal file
83
src/test/java/net/kemitix/mon/WrapperTest.java
Normal file
|
@ -0,0 +1,83 @@
|
||||||
|
package net.kemitix.mon;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Disabled;
|
||||||
|
import org.junit.jupiter.api.DisplayName;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
class WrapperTest {
|
||||||
|
|
||||||
|
interface WrappedString extends Wrapper<String> {}
|
||||||
|
|
||||||
|
interface WrappedInteger extends Wrapper<Integer> {}
|
||||||
|
|
||||||
|
interface WrappedIterableString extends Wrapper<Iterable<String>> { }
|
||||||
|
|
||||||
|
interface WrappedListInteger extends Wrapper<List<Integer>> {}
|
||||||
|
|
||||||
|
interface AWrapper extends Wrapper<String> {}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void shouldCreateAWrapperAndGetTheValue() {
|
||||||
|
//given
|
||||||
|
final String value = "value";
|
||||||
|
//when
|
||||||
|
// - anonymous class syntax
|
||||||
|
final WrappedString wrappedString = new WrappedString() {
|
||||||
|
@Override
|
||||||
|
public String value() {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
//then
|
||||||
|
assertThat(wrappedString.value()).isSameAs(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void shouldCreateAWrapperWithNestedGenericTypes() {
|
||||||
|
//given
|
||||||
|
final Iterable<String> iterable = Collections.emptyList();
|
||||||
|
//when
|
||||||
|
// - functional interface / lambda syntax
|
||||||
|
final WrappedIterableString wrappedIterableString = () -> iterable;
|
||||||
|
//then
|
||||||
|
assertThat(wrappedIterableString.value()).isSameAs(iterable);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void shouldCreateAWrapperSubclassAndGetTheValue() {
|
||||||
|
//given
|
||||||
|
final String value = "value";
|
||||||
|
//when
|
||||||
|
final AWrapper aWrapper = () -> value;
|
||||||
|
//then
|
||||||
|
assertThat(aWrapper.value()).isSameAs(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void shouldNotBeEqualWhenValueTypesAreDifferent() {
|
||||||
|
//given
|
||||||
|
final WrappedString wrappedString = () -> "1";
|
||||||
|
final WrappedInteger wrappedInteger = () -> 1;
|
||||||
|
//then
|
||||||
|
assertThat(wrappedString).isNotEqualTo(wrappedInteger);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void shouldNotBeEqualEvenWhenValuesAreTheSame() {
|
||||||
|
//given
|
||||||
|
final String value = "value";
|
||||||
|
final AWrapper aWrapper1 = () -> value;
|
||||||
|
final AWrapper aWrapper2 = () -> value;
|
||||||
|
//then
|
||||||
|
assertThat(aWrapper1).isNotEqualTo(aWrapper2);
|
||||||
|
// instead compare `.value()`s
|
||||||
|
assertThat(aWrapper1.value()).isEqualTo(aWrapper2.value());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in a new issue