diff --git a/changelog.html b/changelog.html
index 6a672a1106..75b82f874d 100644
--- a/changelog.html
+++ b/changelog.html
@@ -70,6 +70,9 @@ Upcoming changes
Startup can be broken by deeply recursive causes in build records.
(issue 24161)
+
+ Displaying unabridged test result trend on project index page defeated lazy loading.
+ (issue 23945)
Added support for host:port format in X-Forwarded-Host header.
(commit 19d8b80)
diff --git a/core/src/main/java/hudson/tasks/test/AbstractTestResultAction.java b/core/src/main/java/hudson/tasks/test/AbstractTestResultAction.java
index c813ab954b..ad0ad68a35 100644
--- a/core/src/main/java/hudson/tasks/test/AbstractTestResultAction.java
+++ b/core/src/main/java/hudson/tasks/test/AbstractTestResultAction.java
@@ -34,6 +34,7 @@ import java.io.IOException;
import java.util.Collections;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import jenkins.model.RunAction2;
import org.jfree.chart.ChartFactory;
@@ -187,13 +188,14 @@ public abstract class AbstractTestResultAction U getPreviousResult(Class type) {
+ private U getPreviousResult(Class type, boolean eager) {
+ Set loadedBuilds = eager ? null : owner.getProject()._getRuns().getLoadedBuilds().keySet();
AbstractBuild,?> b = owner;
while(true) {
- b = b.getPreviousBuild();
+ b = eager || loadedBuilds.contains(b.number - /* assuming there are no gaps */1) ? b.getPreviousBuild() : null;
if(b==null)
return null;
U r = b.getAction(type);
@@ -276,7 +278,7 @@ public abstract class AbstractTestResultAction dsb = new DataSetBuilder();
- for( AbstractTestResultAction> a=this; a!=null; a=a.getPreviousResult(AbstractTestResultAction.class) ) {
+ for (AbstractTestResultAction> a = this; a != null; a = a.getPreviousResult(AbstractTestResultAction.class, false)) {
dsb.add( a.getFailCount(), "failed", new NumberOnlyBuildLabel(a.owner));
if(!failureOnly) {
dsb.add( a.getSkipCount(), "skipped", new NumberOnlyBuildLabel(a.owner));