Skip to content
This repository was archived by the owner on Mar 25, 2025. It is now read-only.

Commit 078790e

Browse files
committed
refactored the most of the inernal classes
Byte Buddy is now used to generate classes at runtime instead of Dynamic Proxies.
1 parent 64945b7 commit 078790e

File tree

94 files changed

+2023
-1332
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

94 files changed

+2023
-1332
lines changed

pom.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@
8585
<version.commons.codec>1.10</version.commons.codec>
8686

8787
<version.lombok>1.16.16</version.lombok>
88+
<version.bytebuddy>1.7.1</version.bytebuddy>
8889

8990
<!-- plugin versions -->
9091

@@ -200,6 +201,12 @@
200201
<version>${version.lombok}</version>
201202
</dependency>
202203

204+
<dependency>
205+
<groupId>net.bytebuddy</groupId>
206+
<artifactId>byte-buddy</artifactId>
207+
<version>${version.bytebuddy}</version>
208+
</dependency>
209+
203210
<!-- Selenium -->
204211

205212
<dependency>

webtester-core/pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,11 @@
3434
<groupId>commons-io</groupId>
3535
<artifactId>commons-io</artifactId>
3636
</dependency>
37+
<dependency>
38+
<!-- Runtime bytecode generation for interface implementations. -->
39+
<groupId>net.bytebuddy</groupId>
40+
<artifactId>byte-buddy</artifactId>
41+
</dependency>
3742

3843
<dependency>
3944
<!-- Used for data transport classes and other POJOS. -->

webtester-core/src/main/java/info/novatec/testit/webtester/adhoc/AdHocFinder.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import lombok.NonNull;
1010

1111
import info.novatec.testit.webtester.browser.Browser;
12-
import info.novatec.testit.webtester.internal.PageFragmentFactory;
12+
import info.novatec.testit.webtester.internal.implementation.PageFragmentFactory;
1313
import info.novatec.testit.webtester.pagefragments.GenericElement;
1414
import info.novatec.testit.webtester.pagefragments.PageFragment;
1515
import info.novatec.testit.webtester.pagefragments.identification.ByProducer;
@@ -51,7 +51,7 @@ public final class AdHocFinder {
5151
* @since 2.0
5252
*/
5353
public AdHocFinder(Browser browser) {
54-
this.factory = new PageFragmentFactory(browser);
54+
this.factory = PageFragmentFactory.createInstanceFor(browser);
5555
this.searchContext = browser.webDriver();
5656
}
5757

@@ -66,7 +66,7 @@ public AdHocFinder(Browser browser) {
6666
* @since 2.0
6767
*/
6868
public AdHocFinder(PageFragment parent) {
69-
this.factory = new PageFragmentFactory(parent.browser());
69+
this.factory = PageFragmentFactory.createInstanceFor(parent.browser());
7070
this.searchContext = parent.webElement();
7171
}
7272

webtester-core/src/main/java/info/novatec/testit/webtester/adhoc/ByFinder.java

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,9 @@
1212
import lombok.Getter;
1313
import lombok.NonNull;
1414

15-
import info.novatec.testit.webtester.internal.PageFragmentFactory;
15+
import info.novatec.testit.webtester.internal.implementation.PageFragmentFactory;
16+
import info.novatec.testit.webtester.internal.implementation.PageFragmentFactory.PageFragmentDescriptor;
17+
import info.novatec.testit.webtester.internal.implementation.pagefragments.StaticWebElementSupplier;
1618
import info.novatec.testit.webtester.pagefragments.GenericElement;
1719
import info.novatec.testit.webtester.pagefragments.PageFragment;
1820
import info.novatec.testit.webtester.pagefragments.identification.ByProducer;
@@ -75,9 +77,14 @@ public GenericElement asGeneric() {
7577
* @see PageFragment
7678
* @since 2.0
7779
*/
80+
@SuppressWarnings("unchecked")
7881
public <T extends PageFragment> T as(Class<T> fragmentClass) {
7982
WebElement webElement = searchContext.findElement(by);
80-
return factory.pageFragment(fragmentClass, webElement);
83+
PageFragmentDescriptor descriptor = PageFragmentDescriptor.builder()
84+
.pageFragmentType(fragmentClass)
85+
.webElementSupplier(new StaticWebElementSupplier(webElement))
86+
.build();
87+
return ( T ) factory.createInstanceOf(descriptor);
8188
}
8289

8390
/**
@@ -108,8 +115,15 @@ public Stream<GenericElement> asManyGenerics() {
108115
* @see PageFragment
109116
* @since 2.0
110117
*/
118+
@SuppressWarnings("unchecked")
111119
public <T extends PageFragment> Stream<T> asMany(Class<T> fragmentClass) {
112-
return searchContext.findElements(by).stream().map(webElement -> factory.pageFragment(fragmentClass, webElement));
120+
return searchContext.findElements(by).stream().map(webElement -> {
121+
PageFragmentDescriptor descriptor = PageFragmentDescriptor.builder()
122+
.pageFragmentType(fragmentClass)
123+
.webElementSupplier(new StaticWebElementSupplier(webElement))
124+
.build();
125+
return ( T ) factory.createInstanceOf(descriptor);
126+
});
113127
}
114128

115129
}

webtester-core/src/main/java/info/novatec/testit/webtester/adhoc/TypeFinder.java

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,9 @@
1212
import lombok.Getter;
1313
import lombok.NonNull;
1414

15-
import info.novatec.testit.webtester.internal.PageFragmentFactory;
15+
import info.novatec.testit.webtester.internal.implementation.PageFragmentFactory;
16+
import info.novatec.testit.webtester.internal.implementation.PageFragmentFactory.PageFragmentDescriptor;
17+
import info.novatec.testit.webtester.internal.implementation.pagefragments.StaticWebElementSupplier;
1618
import info.novatec.testit.webtester.pagefragments.PageFragment;
1719
import info.novatec.testit.webtester.pagefragments.identification.ByProducers;
1820

@@ -77,9 +79,14 @@ public T by(String cssSelector) {
7779
* @see PageFragment
7880
* @since 2.0
7981
*/
82+
@SuppressWarnings("unchecked")
8083
public T by(By by) {
8184
WebElement webElement = searchContext.findElement(by);
82-
return factory.pageFragment(fragmentClass, webElement);
85+
PageFragmentDescriptor descriptor = PageFragmentDescriptor.builder()
86+
.pageFragmentType(fragmentClass)
87+
.webElementSupplier(new StaticWebElementSupplier(webElement))
88+
.build();
89+
return ( T ) factory.createInstanceOf(descriptor);
8390
}
8491

8592
/**
@@ -114,10 +121,15 @@ public Stream<T> manyBy(String cssSelector) {
114121
* @see Stream
115122
* @since 2.0
116123
*/
124+
@SuppressWarnings("unchecked")
117125
public Stream<T> manyBy(By by) {
118-
return searchContext.findElements(by)
119-
.stream()
120-
.map(webElement -> factory.pageFragment(fragmentClass, webElement));
126+
return searchContext.findElements(by).stream().map(webElement -> {
127+
PageFragmentDescriptor descriptor = PageFragmentDescriptor.builder()
128+
.pageFragmentType(fragmentClass)
129+
.webElementSupplier(new StaticWebElementSupplier(webElement))
130+
.build();
131+
return ( T ) factory.createInstanceOf(descriptor);
132+
});
121133
}
122134

123135
}

webtester-core/src/main/java/info/novatec/testit/webtester/browser/WebDriverBrowser.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
import info.novatec.testit.webtester.events.DispatchingEventSystem;
2020
import info.novatec.testit.webtester.events.EventSystem;
2121
import info.novatec.testit.webtester.events.browser.ClosedBrowserEvent;
22-
import info.novatec.testit.webtester.internal.PageFactory;
22+
import info.novatec.testit.webtester.internal.implementation.PageFactory;
2323
import info.novatec.testit.webtester.pages.Page;
2424

2525

@@ -77,13 +77,13 @@ private WebDriverBrowser(Configuration configuration, WebDriver webDriver) {
7777
this.eventSystem = new DispatchingEventSystem(this);
7878

7979
this.adHocFinder = new AdHocFinder(this);
80-
this.pageFactory = new PageFactory(this);
80+
this.pageFactory = PageFactory.createInstanceFor(this);
8181

8282
}
8383

8484
@Override
8585
public <T extends Page> T create(Class<T> pageClass) {
86-
return pageFactory.page(pageClass);
86+
return pageFactory.createInstanceOf(pageClass);
8787
}
8888

8989
@Override

webtester-core/src/main/java/info/novatec/testit/webtester/internal/ClasspathUtils.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,17 @@
22

33
public final class ClasspathUtils {
44

5-
public static final boolean KOTLIN_AVAILABLE = isKotlinOnClasspath();
5+
public static final String KOTLIN_PAGE_CLASS = "info.novatec.testit.webtester.kotlin.pages.Page";
6+
public static final String KOTLIN_PAGE_FRAGMENT_CLASS =
7+
"info.novatec.testit.webtester.kotlin.pagefragments.PageFragment";
68

7-
private static boolean isKotlinOnClasspath() {
9+
public static final boolean KOTLIN_AVAILABLE = isClassAvailable("kotlin.KotlinVersion");
10+
public static final boolean KOTLIN_MODULE_LOADED =
11+
isClassAvailable(KOTLIN_PAGE_CLASS) && isClassAvailable(KOTLIN_PAGE_FRAGMENT_CLASS);
12+
13+
private static boolean isClassAvailable(String className) {
814
try {
9-
Class.forName("kotlin.KotlinVersion");
15+
Class.forName(className);
1016
return true;
1117
} catch (ClassNotFoundException e) {
1218
return false;

webtester-core/src/main/java/info/novatec/testit/webtester/internal/PageFactory.java

Lines changed: 0 additions & 36 deletions
This file was deleted.

webtester-core/src/main/java/info/novatec/testit/webtester/internal/PageFragmentFactory.java

Lines changed: 0 additions & 54 deletions
This file was deleted.

webtester-core/src/main/java/info/novatec/testit/webtester/internal/exceptions/IllegalSignatureException.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,4 @@ public IllegalSignatureException(String message) {
99
super(message);
1010
}
1111

12-
public IllegalSignatureException(String message, Throwable cause) {
13-
super(message, cause);
14-
}
15-
1612
}

0 commit comments

Comments
 (0)