]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-6416 apply naming conventions to response of api/tests/list
authorSimon Brandhof <simon.brandhof@sonarsource.com>
Mon, 19 Oct 2015 14:07:00 +0000 (16:07 +0200)
committerSimon Brandhof <simon.brandhof@sonarsource.com>
Wed, 21 Oct 2015 12:07:34 +0000 (14:07 +0200)
server/sonar-server/src/main/java/org/sonar/server/test/ws/ListAction.java
server/sonar-server/src/main/resources/org/sonar/server/test/ws/tests-example-list.json
server/sonar-server/src/test/resources/org/sonar/server/test/ws/ListActionTest/list-main-file.json
server/sonar-server/src/test/resources/org/sonar/server/test/ws/ListActionTest/list-test-uuid.json
sonar-ws/src/main/gen-java/org/sonarqube/ws/WsTests.java [new file with mode: 0644]
sonar-ws/src/main/protobuf/ws-tests.proto [new file with mode: 0644]

index 345d988d094c0c7a6fc2b5dbd22f2377de59bfb1..17917e5728af59ec5d226c48ffcfbc8b97b48821 100644 (file)
@@ -28,11 +28,12 @@ import java.util.List;
 import java.util.Map;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
+import org.apache.commons.lang.StringUtils;
 import org.sonar.api.server.ws.Request;
 import org.sonar.api.server.ws.Response;
 import org.sonar.api.server.ws.WebService;
-import org.sonar.api.utils.text.JsonWriter;
 import org.sonar.api.web.UserRole;
+import org.sonar.core.util.Uuids;
 import org.sonar.db.DbClient;
 import org.sonar.db.DbSession;
 import org.sonar.db.MyBatis;
@@ -45,6 +46,9 @@ import org.sonar.server.test.index.CoveredFileDoc;
 import org.sonar.server.test.index.TestDoc;
 import org.sonar.server.test.index.TestIndex;
 import org.sonar.server.user.UserSession;
+import org.sonar.server.ws.WsUtils;
+import org.sonarqube.ws.Common;
+import org.sonarqube.ws.WsTests;
 
 public class ListAction implements TestsWsAction {
   public static final String TEST_UUID = "testUuid";
@@ -86,7 +90,7 @@ public class ListAction implements TestsWsAction {
     action
       .createParam(TEST_FILE_UUID)
       .setDescription("Test file UUID")
-      .setExampleValue("ce4c03d6-430f-40a9-b777-ad877c00aa4d");
+      .setExampleValue(Uuids.UUID_EXAMPLE_01);
 
     action
       .createParam(TEST_FILE_KEY)
@@ -96,12 +100,12 @@ public class ListAction implements TestsWsAction {
     action
       .createParam(TEST_UUID)
       .setDescription("Test UUID")
-      .setExampleValue("c526ef20-131b-4486-9357-063fa64b5079");
+      .setExampleValue(Uuids.UUID_EXAMPLE_02);
 
     action
       .createParam(SOURCE_FILE_UUID)
       .setDescription("Source file UUID. Must be provided with the source file line number.")
-      .setExampleValue("584a89f2-8037-4f7b-b82c-8b45d2d63fb2");
+      .setExampleValue(Uuids.UUID_EXAMPLE_03);
 
     action
       .createParam(SOURCE_FILE_LINE_NUMBER)
@@ -110,7 +114,7 @@ public class ListAction implements TestsWsAction {
   }
 
   @Override
-  public void handle(Request request, Response response) {
+  public void handle(Request request, Response response) throws Exception {
     String testUuid = request.param(TEST_UUID);
     String testFileUuid = request.param(TEST_FILE_UUID);
     String testFileKey = request.param(TEST_FILE_KEY);
@@ -119,7 +123,7 @@ public class ListAction implements TestsWsAction {
     SearchOptions searchOptions = new SearchOptions().setPage(
       request.mandatoryParamAsInt(WebService.Param.PAGE),
       request.mandatoryParamAsInt(WebService.Param.PAGE_SIZE)
-    );
+      );
 
     DbSession dbSession = dbClient.openSession(false);
     SearchResult<TestDoc> tests;
@@ -131,34 +135,39 @@ public class ListAction implements TestsWsAction {
       MyBatis.closeQuietly(dbSession);
     }
 
-    JsonWriter json = response.newJsonWriter().beginObject();
-    writeTests(tests.getDocs(), componentsByTestFileUuid, json);
-    searchOptions.writeJson(json, tests.getTotal());
-    json.endObject().close();
-  }
-
-  private static void writeTests(List<TestDoc> tests, Map<String, ComponentDto> componentsByTestFileUuid, JsonWriter json) {
-    json.name("tests").beginArray();
-    for (TestDoc test : tests) {
-      String fileUuid = test.fileUuid();
-      json.beginObject();
-      json.prop("testUuid", test.testUuid());
-      json.prop("fileUuid", fileUuid);
-      json.prop("name", test.name());
-      json.prop("status", test.status());
-      json.prop("durationInMs", test.durationInMs());
-      json.prop("message", test.message());
-      json.prop("stacktrace", test.stackTrace());
-      json.prop("coveredLines", coveredLines(test.coveredFiles()));
-      json.prop("fileKey", componentsByTestFileUuid.get(fileUuid).key());
-      json.prop("fileLongName", componentsByTestFileUuid.get(fileUuid).longName());
-      json.endObject();
+    WsTests.ListResponse.Builder responseBuilder = WsTests.ListResponse.newBuilder();
+    responseBuilder.setPaging(Common.Paging.newBuilder()
+      .setPageIndex(searchOptions.getPage())
+      .setPageSize(searchOptions.getLimit())
+      .setTotal((int) tests.getTotal())
+      .build());
+
+    for (TestDoc testDoc : tests.getDocs()) {
+      WsTests.Test.Builder testBuilder = WsTests.Test.newBuilder();
+      testBuilder.setId(testDoc.testUuid());
+      testBuilder.setName(StringUtils.defaultString(testDoc.name()));
+      testBuilder.setFileId(testDoc.fileUuid());
+      ComponentDto component = componentsByTestFileUuid.get(testDoc.fileUuid());
+      if (component != null) {
+        testBuilder.setFileKey(component.getKey());
+        testBuilder.setFileName(component.longName());
+      }
+      testBuilder.setStatus(WsTests.TestStatus.valueOf(testDoc.status()));
+      testBuilder.setDurationInMs(testDoc.durationInMs());
+      testBuilder.setCoveredLines(coveredLines(testDoc.coveredFiles()));
+      if (testDoc.message() != null) {
+        testBuilder.setMessage(testDoc.message());
+      }
+      if (testDoc.stackTrace() != null) {
+        testBuilder.setStacktrace(testDoc.stackTrace());
+      }
+      responseBuilder.addTests(testBuilder.build());
     }
-    json.endArray();
+    WsUtils.writeProtobuf(responseBuilder.build(), request, response);
   }
 
-  private static long coveredLines(List<CoveredFileDoc> coveredFiles) {
-    long numberOfLinesCovered = 0L;
+  private static int coveredLines(List<CoveredFileDoc> coveredFiles) {
+    int numberOfLinesCovered = 0;
     for (CoveredFileDoc coveredFile : coveredFiles) {
       numberOfLinesCovered += coveredFile.coveredLines().size();
     }
@@ -181,7 +190,7 @@ public class ListAction implements TestsWsAction {
   }
 
   private SearchResult<TestDoc> searchTests(DbSession dbSession, @Nullable String testUuid, @Nullable String testFileUuid, @Nullable String testFileKey,
-                                            @Nullable String sourceFileUuid, @Nullable Integer sourceFileLineNumber, SearchOptions searchOptions) {
+    @Nullable String sourceFileUuid, @Nullable Integer sourceFileLineNumber, SearchOptions searchOptions) {
     if (testUuid != null) {
       return searchTestsByTestUuid(dbSession, testUuid, searchOptions);
     }
index 2665f1fa40912efc44f1505ac6180d12bcf30fe3..5eee2e39f961e942ce57e9d264edfc01402b8053 100644 (file)
@@ -1,28 +1,31 @@
 {
+  "paging": {
+    "pageIndex": 1,
+    "pageSize": 10,
+    "total": 2
+  },
   "tests": [
     {
-      "testUuid": "ce4c03d6-430f-40a9-b777-ad877c00aa4d",
-      "fileUuid": "c526ef20-131b-4486-9357-063fa64b5079",
+      "id": "AU-TpxcB-iU5OvuD2FL7",
       "name": "find_by_params",
       "status": "OK",
-      "durationInMs": 10,
-      "status": "OK",
-      "durationInMs": 10,
-      "coveredLines": 89,
+      "fileId": "AU-TpxcB-iU5OvuD2Fd8",
       "fileKey": "org.codehaus.sonar:sonar-server:src/test/java/org/sonar/server/rule/RubyRuleServiceTest.java",
-      "fileLongName": "src/test/java/org/sonar/server/rule/RubyRuleServiceTest.java"
+      "fileName": "src/test/java/org/sonar/server/rule/RubyRuleServiceTest.java",
+      "durationInMs": 10,
+      "coveredLines": 89
     },
     {
-      "testUuid": "584a89f2-8037-4f7b-b82c-8b45d2d63fb2",
-      "fileUuid": "c526ef20-131b-4486-9357-063fa64b5079",
+      "id": "AU-TpxcB-iU5OvuD2FP9",
       "name": "find_rules_by_characteristics",
       "status": "ERROR",
+      "fileId": "AU-TpxcB-iU5OvuD2FR2",
+      "fileKey": "org.codehaus.sonar:sonar-server:src/test/java/org/sonar/server/rule/RubyRuleServiceTest.java",
+      "fileName": "src/test/java/org/sonar/server/rule/RubyRuleServiceTest.java",
       "durationInMs": 97,
       "coveredLines": 0,
       "message": "expected:<true> but was:<false>",
-      "stackTrace": "java.lang.AssertionError: expected:<true> but was:<false>\n\tat org.junit.Assert.fail(Assert.java:91)\n\tat org.junit.Assert.failNotEquals(Assert.java:645)\n\tat org.junit.Assert.assertEquals(Assert.java:126)\n\tat org.junit.Assert.assertEquals(Assert.java:145)\n\tat sonar.samples.testFailures.moduleA.FailTest.testAWithFailure(FailTest.java:12)\n",
-      "fileKey": "org.codehaus.sonar:sonar-server:src/test/java/org/sonar/server/rule/RubyRuleServiceTest.java",
-      "fileLongName": "src/test/java/org/sonar/server/rule/RubyRuleServiceTest.java"
+      "stackTrace": "java.lang.AssertionError: expected:<true> but was:<false>\n\tat org.junit.Assert.fail(Assert.java:91)\n\tat org.junit.Assert.failNotEquals(Assert.java:645)\n\tat org.junit.Assert.assertEquals(Assert.java:126)\n\tat org.junit.Assert.assertEquals(Assert.java:145)\n\tat sonar.samples.testFailures.moduleA.FailTest.testAWithFailure(FailTest.java:12)\n"
     }
   ]
 }
index 5a1e62547be93d3ae38e70a05120b14004521893..d3f146cd87ea5bdac72e0ea3bbd6d02f7e5a755f 100644 (file)
@@ -1,28 +1,34 @@
 {
+  "paging": {
+    "pageIndex": 1,
+    "pageSize": 100,
+    "total": 2
+  },
   "tests": [
     {
-      "testUuid": "TEST-UUID-1",
-      "fileUuid": "ABCD",
+      "id": "TEST-UUID-1",
       "name": "test1",
       "status": "OK",
+      "fileId": "ABCD",
+      "fileKey": "org.foo.BarTest.java",
+      "fileName": "src/test/java/org/foo/BarTest.java",
       "durationInMs": 10,
       "coveredLines": 4,
       "message": "MESSAGE-1",
-      "stacktrace": "STACKTRACE-1",
-      "fileKey": "org.foo.BarTest.java",
-      "fileLongName": "src/test/java/org/foo/BarTest.java"
+      "stacktrace": "STACKTRACE-1"
     },
     {
-      "testUuid": "TEST-UUID-2",
-      "fileUuid": "BCDE",
+      "id": "TEST-UUID-2",
       "name": "test2",
       "status": "ERROR",
+      "fileId": "BCDE",
+      "fileKey": "org.foo.FileTest.java",
+      "fileName": "src/test/java/org/foo/FileTest.java",
       "durationInMs": 97,
       "coveredLines": 4,
       "message": "MESSAGE-2",
-      "stacktrace": "STACKTRACE-2",
-      "fileKey": "org.foo.FileTest.java",
-      "fileLongName": "src/test/java/org/foo/FileTest.java"
+      "stacktrace": "STACKTRACE-2"
+
     }
   ]
 }
index de6d8d86fa2ea8eac4f19010cff63d6395cb60d5..07b6072e3c0527e0e4ba77d04cb5f7c0add5d0fe 100644 (file)
@@ -1,16 +1,16 @@
 {
   "tests": [
     {
-      "testUuid": "TEST-UUID-1",
-      "fileUuid": "ABCD",
+      "id": "TEST-UUID-1",
       "name": "test1",
       "status": "OK",
+      "fileId": "ABCD",
+      "fileKey": "org.foo.BarTest.java",
+      "fileName": "src/test/java/org/foo/BarTest.java",
       "durationInMs": 10,
       "coveredLines": 4,
       "message": "MESSAGE-1",
-      "stacktrace": "STACKTRACE-1",
-      "fileKey": "org.foo.BarTest.java",
-      "fileLongName": "src/test/java/org/foo/BarTest.java"
+      "stacktrace": "STACKTRACE-1"
     }
   ]
 }
diff --git a/sonar-ws/src/main/gen-java/org/sonarqube/ws/WsTests.java b/sonar-ws/src/main/gen-java/org/sonarqube/ws/WsTests.java
new file mode 100644 (file)
index 0000000..091e5e3
--- /dev/null
@@ -0,0 +1,4276 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: ws-tests.proto
+
+package org.sonarqube.ws;
+
+public final class WsTests {
+  private WsTests() {}
+  public static void registerAllExtensions(
+      com.google.protobuf.ExtensionRegistry registry) {
+  }
+  /**
+   * Protobuf enum {@code sonarqube.ws.tests.TestStatus}
+   */
+  public enum TestStatus
+      implements com.google.protobuf.ProtocolMessageEnum {
+    /**
+     * <code>OK = 1;</code>
+     */
+    OK(0, 1),
+    /**
+     * <code>FAILURE = 2;</code>
+     */
+    FAILURE(1, 2),
+    /**
+     * <code>ERROR = 3;</code>
+     */
+    ERROR(2, 3),
+    /**
+     * <code>SKIPPED = 4;</code>
+     */
+    SKIPPED(3, 4),
+    ;
+
+    /**
+     * <code>OK = 1;</code>
+     */
+    public static final int OK_VALUE = 1;
+    /**
+     * <code>FAILURE = 2;</code>
+     */
+    public static final int FAILURE_VALUE = 2;
+    /**
+     * <code>ERROR = 3;</code>
+     */
+    public static final int ERROR_VALUE = 3;
+    /**
+     * <code>SKIPPED = 4;</code>
+     */
+    public static final int SKIPPED_VALUE = 4;
+
+
+    public final int getNumber() {
+      return value;
+    }
+
+    public static TestStatus valueOf(int value) {
+      switch (value) {
+        case 1: return OK;
+        case 2: return FAILURE;
+        case 3: return ERROR;
+        case 4: return SKIPPED;
+        default: return null;
+      }
+    }
+
+    public static com.google.protobuf.Internal.EnumLiteMap<TestStatus>
+        internalGetValueMap() {
+      return internalValueMap;
+    }
+    private static com.google.protobuf.Internal.EnumLiteMap<TestStatus>
+        internalValueMap =
+          new com.google.protobuf.Internal.EnumLiteMap<TestStatus>() {
+            public TestStatus findValueByNumber(int number) {
+              return TestStatus.valueOf(number);
+            }
+          };
+
+    public final com.google.protobuf.Descriptors.EnumValueDescriptor
+        getValueDescriptor() {
+      return getDescriptor().getValues().get(index);
+    }
+    public final com.google.protobuf.Descriptors.EnumDescriptor
+        getDescriptorForType() {
+      return getDescriptor();
+    }
+    public static final com.google.protobuf.Descriptors.EnumDescriptor
+        getDescriptor() {
+      return org.sonarqube.ws.WsTests.getDescriptor().getEnumTypes().get(0);
+    }
+
+    private static final TestStatus[] VALUES = values();
+
+    public static TestStatus valueOf(
+        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
+      if (desc.getType() != getDescriptor()) {
+        throw new java.lang.IllegalArgumentException(
+          "EnumValueDescriptor is not for this type.");
+      }
+      return VALUES[desc.getIndex()];
+    }
+
+    private final int index;
+    private final int value;
+
+    private TestStatus(int index, int value) {
+      this.index = index;
+      this.value = value;
+    }
+
+    // @@protoc_insertion_point(enum_scope:sonarqube.ws.tests.TestStatus)
+  }
+
+  public interface ListResponseOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:sonarqube.ws.tests.ListResponse)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>optional .sonarqube.ws.commons.Paging paging = 1;</code>
+     */
+    boolean hasPaging();
+    /**
+     * <code>optional .sonarqube.ws.commons.Paging paging = 1;</code>
+     */
+    org.sonarqube.ws.Common.Paging getPaging();
+    /**
+     * <code>optional .sonarqube.ws.commons.Paging paging = 1;</code>
+     */
+    org.sonarqube.ws.Common.PagingOrBuilder getPagingOrBuilder();
+
+    /**
+     * <code>repeated .sonarqube.ws.tests.Test tests = 2;</code>
+     */
+    java.util.List<org.sonarqube.ws.WsTests.Test> 
+        getTestsList();
+    /**
+     * <code>repeated .sonarqube.ws.tests.Test tests = 2;</code>
+     */
+    org.sonarqube.ws.WsTests.Test getTests(int index);
+    /**
+     * <code>repeated .sonarqube.ws.tests.Test tests = 2;</code>
+     */
+    int getTestsCount();
+    /**
+     * <code>repeated .sonarqube.ws.tests.Test tests = 2;</code>
+     */
+    java.util.List<? extends org.sonarqube.ws.WsTests.TestOrBuilder> 
+        getTestsOrBuilderList();
+    /**
+     * <code>repeated .sonarqube.ws.tests.Test tests = 2;</code>
+     */
+    org.sonarqube.ws.WsTests.TestOrBuilder getTestsOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code sonarqube.ws.tests.ListResponse}
+   *
+   * <pre>
+   * WS api/tests/list
+   * </pre>
+   */
+  public  static final class ListResponse extends
+      com.google.protobuf.GeneratedMessage implements
+      // @@protoc_insertion_point(message_implements:sonarqube.ws.tests.ListResponse)
+      ListResponseOrBuilder {
+    // Use ListResponse.newBuilder() to construct.
+    private ListResponse(com.google.protobuf.GeneratedMessage.Builder builder) {
+      super(builder);
+    }
+    private ListResponse() {
+      tests_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private ListResponse(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+      this();
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            default: {
+              if (!parseUnknownField(input, unknownFields,
+                                     extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+            case 10: {
+              org.sonarqube.ws.Common.Paging.Builder subBuilder = null;
+              if (((bitField0_ & 0x00000001) == 0x00000001)) {
+                subBuilder = paging_.toBuilder();
+              }
+              paging_ = input.readMessage(org.sonarqube.ws.Common.Paging.PARSER, extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(paging_);
+                paging_ = subBuilder.buildPartial();
+              }
+              bitField0_ |= 0x00000001;
+              break;
+            }
+            case 18: {
+              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
+                tests_ = new java.util.ArrayList<org.sonarqube.ws.WsTests.Test>();
+                mutable_bitField0_ |= 0x00000002;
+              }
+              tests_.add(input.readMessage(org.sonarqube.ws.WsTests.Test.PARSER, extensionRegistry));
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw new RuntimeException(e.setUnfinishedMessage(this));
+      } catch (java.io.IOException e) {
+        throw new RuntimeException(
+            new com.google.protobuf.InvalidProtocolBufferException(
+                e.getMessage()).setUnfinishedMessage(this));
+      } finally {
+        if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
+          tests_ = java.util.Collections.unmodifiableList(tests_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return org.sonarqube.ws.WsTests.internal_static_sonarqube_ws_tests_ListResponse_descriptor;
+    }
+
+    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return org.sonarqube.ws.WsTests.internal_static_sonarqube_ws_tests_ListResponse_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              org.sonarqube.ws.WsTests.ListResponse.class, org.sonarqube.ws.WsTests.ListResponse.Builder.class);
+    }
+
+    private int bitField0_;
+    public static final int PAGING_FIELD_NUMBER = 1;
+    private org.sonarqube.ws.Common.Paging paging_;
+    /**
+     * <code>optional .sonarqube.ws.commons.Paging paging = 1;</code>
+     */
+    public boolean hasPaging() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    /**
+     * <code>optional .sonarqube.ws.commons.Paging paging = 1;</code>
+     */
+    public org.sonarqube.ws.Common.Paging getPaging() {
+      return paging_ == null ? org.sonarqube.ws.Common.Paging.getDefaultInstance() : paging_;
+    }
+    /**
+     * <code>optional .sonarqube.ws.commons.Paging paging = 1;</code>
+     */
+    public org.sonarqube.ws.Common.PagingOrBuilder getPagingOrBuilder() {
+      return paging_ == null ? org.sonarqube.ws.Common.Paging.getDefaultInstance() : paging_;
+    }
+
+    public static final int TESTS_FIELD_NUMBER = 2;
+    private java.util.List<org.sonarqube.ws.WsTests.Test> tests_;
+    /**
+     * <code>repeated .sonarqube.ws.tests.Test tests = 2;</code>
+     */
+    public java.util.List<org.sonarqube.ws.WsTests.Test> getTestsList() {
+      return tests_;
+    }
+    /**
+     * <code>repeated .sonarqube.ws.tests.Test tests = 2;</code>
+     */
+    public java.util.List<? extends org.sonarqube.ws.WsTests.TestOrBuilder> 
+        getTestsOrBuilderList() {
+      return tests_;
+    }
+    /**
+     * <code>repeated .sonarqube.ws.tests.Test tests = 2;</code>
+     */
+    public int getTestsCount() {
+      return tests_.size();
+    }
+    /**
+     * <code>repeated .sonarqube.ws.tests.Test tests = 2;</code>
+     */
+    public org.sonarqube.ws.WsTests.Test getTests(int index) {
+      return tests_.get(index);
+    }
+    /**
+     * <code>repeated .sonarqube.ws.tests.Test tests = 2;</code>
+     */
+    public org.sonarqube.ws.WsTests.TestOrBuilder getTestsOrBuilder(
+        int index) {
+      return tests_.get(index);
+    }
+
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeMessage(1, getPaging());
+      }
+      for (int i = 0; i < tests_.size(); i++) {
+        output.writeMessage(2, tests_.get(i));
+      }
+      unknownFields.writeTo(output);
+    }
+
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getPaging());
+      }
+      for (int i = 0; i < tests_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, tests_.get(i));
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSerializedSize = size;
+      return size;
+    }
+
+    private static final long serialVersionUID = 0L;
+    public static org.sonarqube.ws.WsTests.ListResponse parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static org.sonarqube.ws.WsTests.ListResponse parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static org.sonarqube.ws.WsTests.ListResponse parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static org.sonarqube.ws.WsTests.ListResponse parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static org.sonarqube.ws.WsTests.ListResponse parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input);
+    }
+    public static org.sonarqube.ws.WsTests.ListResponse parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input, extensionRegistry);
+    }
+    public static org.sonarqube.ws.WsTests.ListResponse parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return PARSER.parseDelimitedFrom(input);
+    }
+    public static org.sonarqube.ws.WsTests.ListResponse parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+    }
+    public static org.sonarqube.ws.WsTests.ListResponse parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input);
+    }
+    public static org.sonarqube.ws.WsTests.ListResponse parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input, extensionRegistry);
+    }
+
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(org.sonarqube.ws.WsTests.ListResponse prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code sonarqube.ws.tests.ListResponse}
+     *
+     * <pre>
+     * WS api/tests/list
+     * </pre>
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessage.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:sonarqube.ws.tests.ListResponse)
+        org.sonarqube.ws.WsTests.ListResponseOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return org.sonarqube.ws.WsTests.internal_static_sonarqube_ws_tests_ListResponse_descriptor;
+      }
+
+      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return org.sonarqube.ws.WsTests.internal_static_sonarqube_ws_tests_ListResponse_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                org.sonarqube.ws.WsTests.ListResponse.class, org.sonarqube.ws.WsTests.ListResponse.Builder.class);
+      }
+
+      // Construct using org.sonarqube.ws.WsTests.ListResponse.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+          getPagingFieldBuilder();
+          getTestsFieldBuilder();
+        }
+      }
+      public Builder clear() {
+        super.clear();
+        if (pagingBuilder_ == null) {
+          paging_ = null;
+        } else {
+          pagingBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00000001);
+        if (testsBuilder_ == null) {
+          tests_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000002);
+        } else {
+          testsBuilder_.clear();
+        }
+        return this;
+      }
+
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return org.sonarqube.ws.WsTests.internal_static_sonarqube_ws_tests_ListResponse_descriptor;
+      }
+
+      public org.sonarqube.ws.WsTests.ListResponse getDefaultInstanceForType() {
+        return org.sonarqube.ws.WsTests.ListResponse.getDefaultInstance();
+      }
+
+      public org.sonarqube.ws.WsTests.ListResponse build() {
+        org.sonarqube.ws.WsTests.ListResponse result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      public org.sonarqube.ws.WsTests.ListResponse buildPartial() {
+        org.sonarqube.ws.WsTests.ListResponse result = new org.sonarqube.ws.WsTests.ListResponse(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+          to_bitField0_ |= 0x00000001;
+        }
+        if (pagingBuilder_ == null) {
+          result.paging_ = paging_;
+        } else {
+          result.paging_ = pagingBuilder_.build();
+        }
+        if (testsBuilder_ == null) {
+          if (((bitField0_ & 0x00000002) == 0x00000002)) {
+            tests_ = java.util.Collections.unmodifiableList(tests_);
+            bitField0_ = (bitField0_ & ~0x00000002);
+          }
+          result.tests_ = tests_;
+        } else {
+          result.tests_ = testsBuilder_.build();
+        }
+        result.bitField0_ = to_bitField0_;
+        onBuilt();
+        return result;
+      }
+
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof org.sonarqube.ws.WsTests.ListResponse) {
+          return mergeFrom((org.sonarqube.ws.WsTests.ListResponse)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(org.sonarqube.ws.WsTests.ListResponse other) {
+        if (other == org.sonarqube.ws.WsTests.ListResponse.getDefaultInstance()) return this;
+        if (other.hasPaging()) {
+          mergePaging(other.getPaging());
+        }
+        if (testsBuilder_ == null) {
+          if (!other.tests_.isEmpty()) {
+            if (tests_.isEmpty()) {
+              tests_ = other.tests_;
+              bitField0_ = (bitField0_ & ~0x00000002);
+            } else {
+              ensureTestsIsMutable();
+              tests_.addAll(other.tests_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.tests_.isEmpty()) {
+            if (testsBuilder_.isEmpty()) {
+              testsBuilder_.dispose();
+              testsBuilder_ = null;
+              tests_ = other.tests_;
+              bitField0_ = (bitField0_ & ~0x00000002);
+              testsBuilder_ = 
+                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
+                   getTestsFieldBuilder() : null;
+            } else {
+              testsBuilder_.addAllMessages(other.tests_);
+            }
+          }
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        org.sonarqube.ws.WsTests.ListResponse parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (org.sonarqube.ws.WsTests.ListResponse) e.getUnfinishedMessage();
+          throw e;
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private org.sonarqube.ws.Common.Paging paging_ = null;
+      private com.google.protobuf.SingleFieldBuilder<
+          org.sonarqube.ws.Common.Paging, org.sonarqube.ws.Common.Paging.Builder, org.sonarqube.ws.Common.PagingOrBuilder> pagingBuilder_;
+      /**
+       * <code>optional .sonarqube.ws.commons.Paging paging = 1;</code>
+       */
+      public boolean hasPaging() {
+        return ((bitField0_ & 0x00000001) == 0x00000001);
+      }
+      /**
+       * <code>optional .sonarqube.ws.commons.Paging paging = 1;</code>
+       */
+      public org.sonarqube.ws.Common.Paging getPaging() {
+        if (pagingBuilder_ == null) {
+          return paging_ == null ? org.sonarqube.ws.Common.Paging.getDefaultInstance() : paging_;
+        } else {
+          return pagingBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>optional .sonarqube.ws.commons.Paging paging = 1;</code>
+       */
+      public Builder setPaging(org.sonarqube.ws.Common.Paging value) {
+        if (pagingBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          paging_ = value;
+          onChanged();
+        } else {
+          pagingBuilder_.setMessage(value);
+        }
+        bitField0_ |= 0x00000001;
+        return this;
+      }
+      /**
+       * <code>optional .sonarqube.ws.commons.Paging paging = 1;</code>
+       */
+      public Builder setPaging(
+          org.sonarqube.ws.Common.Paging.Builder builderForValue) {
+        if (pagingBuilder_ == null) {
+          paging_ = builderForValue.build();
+          onChanged();
+        } else {
+          pagingBuilder_.setMessage(builderForValue.build());
+        }
+        bitField0_ |= 0x00000001;
+        return this;
+      }
+      /**
+       * <code>optional .sonarqube.ws.commons.Paging paging = 1;</code>
+       */
+      public Builder mergePaging(org.sonarqube.ws.Common.Paging value) {
+        if (pagingBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) == 0x00000001) &&
+              paging_ != null &&
+              paging_ != org.sonarqube.ws.Common.Paging.getDefaultInstance()) {
+            paging_ =
+              org.sonarqube.ws.Common.Paging.newBuilder(paging_).mergeFrom(value).buildPartial();
+          } else {
+            paging_ = value;
+          }
+          onChanged();
+        } else {
+          pagingBuilder_.mergeFrom(value);
+        }
+        bitField0_ |= 0x00000001;
+        return this;
+      }
+      /**
+       * <code>optional .sonarqube.ws.commons.Paging paging = 1;</code>
+       */
+      public Builder clearPaging() {
+        if (pagingBuilder_ == null) {
+          paging_ = null;
+          onChanged();
+        } else {
+          pagingBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00000001);
+        return this;
+      }
+      /**
+       * <code>optional .sonarqube.ws.commons.Paging paging = 1;</code>
+       */
+      public org.sonarqube.ws.Common.Paging.Builder getPagingBuilder() {
+        bitField0_ |= 0x00000001;
+        onChanged();
+        return getPagingFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>optional .sonarqube.ws.commons.Paging paging = 1;</code>
+       */
+      public org.sonarqube.ws.Common.PagingOrBuilder getPagingOrBuilder() {
+        if (pagingBuilder_ != null) {
+          return pagingBuilder_.getMessageOrBuilder();
+        } else {
+          return paging_ == null ?
+              org.sonarqube.ws.Common.Paging.getDefaultInstance() : paging_;
+        }
+      }
+      /**
+       * <code>optional .sonarqube.ws.commons.Paging paging = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilder<
+          org.sonarqube.ws.Common.Paging, org.sonarqube.ws.Common.Paging.Builder, org.sonarqube.ws.Common.PagingOrBuilder> 
+          getPagingFieldBuilder() {
+        if (pagingBuilder_ == null) {
+          pagingBuilder_ = new com.google.protobuf.SingleFieldBuilder<
+              org.sonarqube.ws.Common.Paging, org.sonarqube.ws.Common.Paging.Builder, org.sonarqube.ws.Common.PagingOrBuilder>(
+                  getPaging(),
+                  getParentForChildren(),
+                  isClean());
+          paging_ = null;
+        }
+        return pagingBuilder_;
+      }
+
+      private java.util.List<org.sonarqube.ws.WsTests.Test> tests_ =
+        java.util.Collections.emptyList();
+      private void ensureTestsIsMutable() {
+        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
+          tests_ = new java.util.ArrayList<org.sonarqube.ws.WsTests.Test>(tests_);
+          bitField0_ |= 0x00000002;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilder<
+          org.sonarqube.ws.WsTests.Test, org.sonarqube.ws.WsTests.Test.Builder, org.sonarqube.ws.WsTests.TestOrBuilder> testsBuilder_;
+
+      /**
+       * <code>repeated .sonarqube.ws.tests.Test tests = 2;</code>
+       */
+      public java.util.List<org.sonarqube.ws.WsTests.Test> getTestsList() {
+        if (testsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(tests_);
+        } else {
+          return testsBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .sonarqube.ws.tests.Test tests = 2;</code>
+       */
+      public int getTestsCount() {
+        if (testsBuilder_ == null) {
+          return tests_.size();
+        } else {
+          return testsBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .sonarqube.ws.tests.Test tests = 2;</code>
+       */
+      public org.sonarqube.ws.WsTests.Test getTests(int index) {
+        if (testsBuilder_ == null) {
+          return tests_.get(index);
+        } else {
+          return testsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .sonarqube.ws.tests.Test tests = 2;</code>
+       */
+      public Builder setTests(
+          int index, org.sonarqube.ws.WsTests.Test value) {
+        if (testsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureTestsIsMutable();
+          tests_.set(index, value);
+          onChanged();
+        } else {
+          testsBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .sonarqube.ws.tests.Test tests = 2;</code>
+       */
+      public Builder setTests(
+          int index, org.sonarqube.ws.WsTests.Test.Builder builderForValue) {
+        if (testsBuilder_ == null) {
+          ensureTestsIsMutable();
+          tests_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          testsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .sonarqube.ws.tests.Test tests = 2;</code>
+       */
+      public Builder addTests(org.sonarqube.ws.WsTests.Test value) {
+        if (testsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureTestsIsMutable();
+          tests_.add(value);
+          onChanged();
+        } else {
+          testsBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .sonarqube.ws.tests.Test tests = 2;</code>
+       */
+      public Builder addTests(
+          int index, org.sonarqube.ws.WsTests.Test value) {
+        if (testsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureTestsIsMutable();
+          tests_.add(index, value);
+          onChanged();
+        } else {
+          testsBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .sonarqube.ws.tests.Test tests = 2;</code>
+       */
+      public Builder addTests(
+          org.sonarqube.ws.WsTests.Test.Builder builderForValue) {
+        if (testsBuilder_ == null) {
+          ensureTestsIsMutable();
+          tests_.add(builderForValue.build());
+          onChanged();
+        } else {
+          testsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .sonarqube.ws.tests.Test tests = 2;</code>
+       */
+      public Builder addTests(
+          int index, org.sonarqube.ws.WsTests.Test.Builder builderForValue) {
+        if (testsBuilder_ == null) {
+          ensureTestsIsMutable();
+          tests_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          testsBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .sonarqube.ws.tests.Test tests = 2;</code>
+       */
+      public Builder addAllTests(
+          java.lang.Iterable<? extends org.sonarqube.ws.WsTests.Test> values) {
+        if (testsBuilder_ == null) {
+          ensureTestsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, tests_);
+          onChanged();
+        } else {
+          testsBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .sonarqube.ws.tests.Test tests = 2;</code>
+       */
+      public Builder clearTests() {
+        if (testsBuilder_ == null) {
+          tests_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000002);
+          onChanged();
+        } else {
+          testsBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .sonarqube.ws.tests.Test tests = 2;</code>
+       */
+      public Builder removeTests(int index) {
+        if (testsBuilder_ == null) {
+          ensureTestsIsMutable();
+          tests_.remove(index);
+          onChanged();
+        } else {
+          testsBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .sonarqube.ws.tests.Test tests = 2;</code>
+       */
+      public org.sonarqube.ws.WsTests.Test.Builder getTestsBuilder(
+          int index) {
+        return getTestsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .sonarqube.ws.tests.Test tests = 2;</code>
+       */
+      public org.sonarqube.ws.WsTests.TestOrBuilder getTestsOrBuilder(
+          int index) {
+        if (testsBuilder_ == null) {
+          return tests_.get(index);  } else {
+          return testsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .sonarqube.ws.tests.Test tests = 2;</code>
+       */
+      public java.util.List<? extends org.sonarqube.ws.WsTests.TestOrBuilder> 
+           getTestsOrBuilderList() {
+        if (testsBuilder_ != null) {
+          return testsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(tests_);
+        }
+      }
+      /**
+       * <code>repeated .sonarqube.ws.tests.Test tests = 2;</code>
+       */
+      public org.sonarqube.ws.WsTests.Test.Builder addTestsBuilder() {
+        return getTestsFieldBuilder().addBuilder(
+            org.sonarqube.ws.WsTests.Test.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .sonarqube.ws.tests.Test tests = 2;</code>
+       */
+      public org.sonarqube.ws.WsTests.Test.Builder addTestsBuilder(
+          int index) {
+        return getTestsFieldBuilder().addBuilder(
+            index, org.sonarqube.ws.WsTests.Test.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .sonarqube.ws.tests.Test tests = 2;</code>
+       */
+      public java.util.List<org.sonarqube.ws.WsTests.Test.Builder> 
+           getTestsBuilderList() {
+        return getTestsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilder<
+          org.sonarqube.ws.WsTests.Test, org.sonarqube.ws.WsTests.Test.Builder, org.sonarqube.ws.WsTests.TestOrBuilder> 
+          getTestsFieldBuilder() {
+        if (testsBuilder_ == null) {
+          testsBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
+              org.sonarqube.ws.WsTests.Test, org.sonarqube.ws.WsTests.Test.Builder, org.sonarqube.ws.WsTests.TestOrBuilder>(
+                  tests_,
+                  ((bitField0_ & 0x00000002) == 0x00000002),
+                  getParentForChildren(),
+                  isClean());
+          tests_ = null;
+        }
+        return testsBuilder_;
+      }
+
+      // @@protoc_insertion_point(builder_scope:sonarqube.ws.tests.ListResponse)
+    }
+
+    // @@protoc_insertion_point(class_scope:sonarqube.ws.tests.ListResponse)
+    private static final org.sonarqube.ws.WsTests.ListResponse DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new org.sonarqube.ws.WsTests.ListResponse();
+    }
+
+    public static org.sonarqube.ws.WsTests.ListResponse getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    public static final com.google.protobuf.Parser<ListResponse> PARSER =
+        new com.google.protobuf.AbstractParser<ListResponse>() {
+      public ListResponse parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        try {
+          return new ListResponse(input, extensionRegistry);
+        } catch (RuntimeException e) {
+          if (e.getCause() instanceof
+              com.google.protobuf.InvalidProtocolBufferException) {
+            throw (com.google.protobuf.InvalidProtocolBufferException)
+                e.getCause();
+          }
+          throw e;
+        }
+      }
+    };
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<ListResponse> getParserForType() {
+      return PARSER;
+    }
+
+    public org.sonarqube.ws.WsTests.ListResponse getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface CoveredFilesResponseOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:sonarqube.ws.tests.CoveredFilesResponse)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>repeated .sonarqube.ws.tests.CoveredFilesResponse.CoveredFile files = 1;</code>
+     */
+    java.util.List<org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFile> 
+        getFilesList();
+    /**
+     * <code>repeated .sonarqube.ws.tests.CoveredFilesResponse.CoveredFile files = 1;</code>
+     */
+    org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFile getFiles(int index);
+    /**
+     * <code>repeated .sonarqube.ws.tests.CoveredFilesResponse.CoveredFile files = 1;</code>
+     */
+    int getFilesCount();
+    /**
+     * <code>repeated .sonarqube.ws.tests.CoveredFilesResponse.CoveredFile files = 1;</code>
+     */
+    java.util.List<? extends org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFileOrBuilder> 
+        getFilesOrBuilderList();
+    /**
+     * <code>repeated .sonarqube.ws.tests.CoveredFilesResponse.CoveredFile files = 1;</code>
+     */
+    org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFileOrBuilder getFilesOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code sonarqube.ws.tests.CoveredFilesResponse}
+   *
+   * <pre>
+   * WS api/tests/covered_files
+   * </pre>
+   */
+  public  static final class CoveredFilesResponse extends
+      com.google.protobuf.GeneratedMessage implements
+      // @@protoc_insertion_point(message_implements:sonarqube.ws.tests.CoveredFilesResponse)
+      CoveredFilesResponseOrBuilder {
+    // Use CoveredFilesResponse.newBuilder() to construct.
+    private CoveredFilesResponse(com.google.protobuf.GeneratedMessage.Builder builder) {
+      super(builder);
+    }
+    private CoveredFilesResponse() {
+      files_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private CoveredFilesResponse(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+      this();
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            default: {
+              if (!parseUnknownField(input, unknownFields,
+                                     extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+            case 10: {
+              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
+                files_ = new java.util.ArrayList<org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFile>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              files_.add(input.readMessage(org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFile.PARSER, extensionRegistry));
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw new RuntimeException(e.setUnfinishedMessage(this));
+      } catch (java.io.IOException e) {
+        throw new RuntimeException(
+            new com.google.protobuf.InvalidProtocolBufferException(
+                e.getMessage()).setUnfinishedMessage(this));
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
+          files_ = java.util.Collections.unmodifiableList(files_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return org.sonarqube.ws.WsTests.internal_static_sonarqube_ws_tests_CoveredFilesResponse_descriptor;
+    }
+
+    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return org.sonarqube.ws.WsTests.internal_static_sonarqube_ws_tests_CoveredFilesResponse_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              org.sonarqube.ws.WsTests.CoveredFilesResponse.class, org.sonarqube.ws.WsTests.CoveredFilesResponse.Builder.class);
+    }
+
+    public interface CoveredFileOrBuilder extends
+        // @@protoc_insertion_point(interface_extends:sonarqube.ws.tests.CoveredFilesResponse.CoveredFile)
+        com.google.protobuf.MessageOrBuilder {
+
+      /**
+       * <code>optional string id = 1;</code>
+       */
+      boolean hasId();
+      /**
+       * <code>optional string id = 1;</code>
+       */
+      java.lang.String getId();
+      /**
+       * <code>optional string id = 1;</code>
+       */
+      com.google.protobuf.ByteString
+          getIdBytes();
+
+      /**
+       * <code>optional string key = 2;</code>
+       */
+      boolean hasKey();
+      /**
+       * <code>optional string key = 2;</code>
+       */
+      java.lang.String getKey();
+      /**
+       * <code>optional string key = 2;</code>
+       */
+      com.google.protobuf.ByteString
+          getKeyBytes();
+
+      /**
+       * <code>optional string longName = 3;</code>
+       */
+      boolean hasLongName();
+      /**
+       * <code>optional string longName = 3;</code>
+       */
+      java.lang.String getLongName();
+      /**
+       * <code>optional string longName = 3;</code>
+       */
+      com.google.protobuf.ByteString
+          getLongNameBytes();
+
+      /**
+       * <code>optional int32 coveredLines = 4;</code>
+       */
+      boolean hasCoveredLines();
+      /**
+       * <code>optional int32 coveredLines = 4;</code>
+       */
+      int getCoveredLines();
+    }
+    /**
+     * Protobuf type {@code sonarqube.ws.tests.CoveredFilesResponse.CoveredFile}
+     */
+    public  static final class CoveredFile extends
+        com.google.protobuf.GeneratedMessage implements
+        // @@protoc_insertion_point(message_implements:sonarqube.ws.tests.CoveredFilesResponse.CoveredFile)
+        CoveredFileOrBuilder {
+      // Use CoveredFile.newBuilder() to construct.
+      private CoveredFile(com.google.protobuf.GeneratedMessage.Builder builder) {
+        super(builder);
+      }
+      private CoveredFile() {
+        id_ = "";
+        key_ = "";
+        longName_ = "";
+        coveredLines_ = 0;
+      }
+
+      @java.lang.Override
+      public final com.google.protobuf.UnknownFieldSet
+      getUnknownFields() {
+        return this.unknownFields;
+      }
+      private CoveredFile(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+        this();
+        int mutable_bitField0_ = 0;
+        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+            com.google.protobuf.UnknownFieldSet.newBuilder();
+        try {
+          boolean done = false;
+          while (!done) {
+            int tag = input.readTag();
+            switch (tag) {
+              case 0:
+                done = true;
+                break;
+              default: {
+                if (!parseUnknownField(input, unknownFields,
+                                       extensionRegistry, tag)) {
+                  done = true;
+                }
+                break;
+              }
+              case 10: {
+                com.google.protobuf.ByteString bs = input.readBytes();
+                bitField0_ |= 0x00000001;
+                id_ = bs;
+                break;
+              }
+              case 18: {
+                com.google.protobuf.ByteString bs = input.readBytes();
+                bitField0_ |= 0x00000002;
+                key_ = bs;
+                break;
+              }
+              case 26: {
+                com.google.protobuf.ByteString bs = input.readBytes();
+                bitField0_ |= 0x00000004;
+                longName_ = bs;
+                break;
+              }
+              case 32: {
+                bitField0_ |= 0x00000008;
+                coveredLines_ = input.readInt32();
+                break;
+              }
+            }
+          }
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          throw new RuntimeException(e.setUnfinishedMessage(this));
+        } catch (java.io.IOException e) {
+          throw new RuntimeException(
+              new com.google.protobuf.InvalidProtocolBufferException(
+                  e.getMessage()).setUnfinishedMessage(this));
+        } finally {
+          this.unknownFields = unknownFields.build();
+          makeExtensionsImmutable();
+        }
+      }
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return org.sonarqube.ws.WsTests.internal_static_sonarqube_ws_tests_CoveredFilesResponse_CoveredFile_descriptor;
+      }
+
+      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return org.sonarqube.ws.WsTests.internal_static_sonarqube_ws_tests_CoveredFilesResponse_CoveredFile_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFile.class, org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFile.Builder.class);
+      }
+
+      private int bitField0_;
+      public static final int ID_FIELD_NUMBER = 1;
+      private volatile java.lang.Object id_;
+      /**
+       * <code>optional string id = 1;</code>
+       */
+      public boolean hasId() {
+        return ((bitField0_ & 0x00000001) == 0x00000001);
+      }
+      /**
+       * <code>optional string id = 1;</code>
+       */
+      public java.lang.String getId() {
+        java.lang.Object ref = id_;
+        if (ref instanceof java.lang.String) {
+          return (java.lang.String) ref;
+        } else {
+          com.google.protobuf.ByteString bs = 
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          if (bs.isValidUtf8()) {
+            id_ = s;
+          }
+          return s;
+        }
+      }
+      /**
+       * <code>optional string id = 1;</code>
+       */
+      public com.google.protobuf.ByteString
+          getIdBytes() {
+        java.lang.Object ref = id_;
+        if (ref instanceof java.lang.String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          id_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+
+      public static final int KEY_FIELD_NUMBER = 2;
+      private volatile java.lang.Object key_;
+      /**
+       * <code>optional string key = 2;</code>
+       */
+      public boolean hasKey() {
+        return ((bitField0_ & 0x00000002) == 0x00000002);
+      }
+      /**
+       * <code>optional string key = 2;</code>
+       */
+      public java.lang.String getKey() {
+        java.lang.Object ref = key_;
+        if (ref instanceof java.lang.String) {
+          return (java.lang.String) ref;
+        } else {
+          com.google.protobuf.ByteString bs = 
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          if (bs.isValidUtf8()) {
+            key_ = s;
+          }
+          return s;
+        }
+      }
+      /**
+       * <code>optional string key = 2;</code>
+       */
+      public com.google.protobuf.ByteString
+          getKeyBytes() {
+        java.lang.Object ref = key_;
+        if (ref instanceof java.lang.String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          key_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+
+      public static final int LONGNAME_FIELD_NUMBER = 3;
+      private volatile java.lang.Object longName_;
+      /**
+       * <code>optional string longName = 3;</code>
+       */
+      public boolean hasLongName() {
+        return ((bitField0_ & 0x00000004) == 0x00000004);
+      }
+      /**
+       * <code>optional string longName = 3;</code>
+       */
+      public java.lang.String getLongName() {
+        java.lang.Object ref = longName_;
+        if (ref instanceof java.lang.String) {
+          return (java.lang.String) ref;
+        } else {
+          com.google.protobuf.ByteString bs = 
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          if (bs.isValidUtf8()) {
+            longName_ = s;
+          }
+          return s;
+        }
+      }
+      /**
+       * <code>optional string longName = 3;</code>
+       */
+      public com.google.protobuf.ByteString
+          getLongNameBytes() {
+        java.lang.Object ref = longName_;
+        if (ref instanceof java.lang.String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          longName_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+
+      public static final int COVEREDLINES_FIELD_NUMBER = 4;
+      private int coveredLines_;
+      /**
+       * <code>optional int32 coveredLines = 4;</code>
+       */
+      public boolean hasCoveredLines() {
+        return ((bitField0_ & 0x00000008) == 0x00000008);
+      }
+      /**
+       * <code>optional int32 coveredLines = 4;</code>
+       */
+      public int getCoveredLines() {
+        return coveredLines_;
+      }
+
+      private byte memoizedIsInitialized = -1;
+      public final boolean isInitialized() {
+        byte isInitialized = memoizedIsInitialized;
+        if (isInitialized == 1) return true;
+        if (isInitialized == 0) return false;
+
+        memoizedIsInitialized = 1;
+        return true;
+      }
+
+      public void writeTo(com.google.protobuf.CodedOutputStream output)
+                          throws java.io.IOException {
+        if (((bitField0_ & 0x00000001) == 0x00000001)) {
+          output.writeBytes(1, getIdBytes());
+        }
+        if (((bitField0_ & 0x00000002) == 0x00000002)) {
+          output.writeBytes(2, getKeyBytes());
+        }
+        if (((bitField0_ & 0x00000004) == 0x00000004)) {
+          output.writeBytes(3, getLongNameBytes());
+        }
+        if (((bitField0_ & 0x00000008) == 0x00000008)) {
+          output.writeInt32(4, coveredLines_);
+        }
+        unknownFields.writeTo(output);
+      }
+
+      private int memoizedSerializedSize = -1;
+      public int getSerializedSize() {
+        int size = memoizedSerializedSize;
+        if (size != -1) return size;
+
+        size = 0;
+        if (((bitField0_ & 0x00000001) == 0x00000001)) {
+          size += com.google.protobuf.CodedOutputStream
+            .computeBytesSize(1, getIdBytes());
+        }
+        if (((bitField0_ & 0x00000002) == 0x00000002)) {
+          size += com.google.protobuf.CodedOutputStream
+            .computeBytesSize(2, getKeyBytes());
+        }
+        if (((bitField0_ & 0x00000004) == 0x00000004)) {
+          size += com.google.protobuf.CodedOutputStream
+            .computeBytesSize(3, getLongNameBytes());
+        }
+        if (((bitField0_ & 0x00000008) == 0x00000008)) {
+          size += com.google.protobuf.CodedOutputStream
+            .computeInt32Size(4, coveredLines_);
+        }
+        size += unknownFields.getSerializedSize();
+        memoizedSerializedSize = size;
+        return size;
+      }
+
+      private static final long serialVersionUID = 0L;
+      public static org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFile parseFrom(
+          com.google.protobuf.ByteString data)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return PARSER.parseFrom(data);
+      }
+      public static org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFile parseFrom(
+          com.google.protobuf.ByteString data,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return PARSER.parseFrom(data, extensionRegistry);
+      }
+      public static org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFile parseFrom(byte[] data)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return PARSER.parseFrom(data);
+      }
+      public static org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFile parseFrom(
+          byte[] data,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return PARSER.parseFrom(data, extensionRegistry);
+      }
+      public static org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFile parseFrom(java.io.InputStream input)
+          throws java.io.IOException {
+        return PARSER.parseFrom(input);
+      }
+      public static org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFile parseFrom(
+          java.io.InputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        return PARSER.parseFrom(input, extensionRegistry);
+      }
+      public static org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFile parseDelimitedFrom(java.io.InputStream input)
+          throws java.io.IOException {
+        return PARSER.parseDelimitedFrom(input);
+      }
+      public static org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFile parseDelimitedFrom(
+          java.io.InputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        return PARSER.parseDelimitedFrom(input, extensionRegistry);
+      }
+      public static org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFile parseFrom(
+          com.google.protobuf.CodedInputStream input)
+          throws java.io.IOException {
+        return PARSER.parseFrom(input);
+      }
+      public static org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFile parseFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        return PARSER.parseFrom(input, extensionRegistry);
+      }
+
+      public Builder newBuilderForType() { return newBuilder(); }
+      public static Builder newBuilder() {
+        return DEFAULT_INSTANCE.toBuilder();
+      }
+      public static Builder newBuilder(org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFile prototype) {
+        return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+      }
+      public Builder toBuilder() {
+        return this == DEFAULT_INSTANCE
+            ? new Builder() : new Builder().mergeFrom(this);
+      }
+
+      @java.lang.Override
+      protected Builder newBuilderForType(
+          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+        Builder builder = new Builder(parent);
+        return builder;
+      }
+      /**
+       * Protobuf type {@code sonarqube.ws.tests.CoveredFilesResponse.CoveredFile}
+       */
+      public static final class Builder extends
+          com.google.protobuf.GeneratedMessage.Builder<Builder> implements
+          // @@protoc_insertion_point(builder_implements:sonarqube.ws.tests.CoveredFilesResponse.CoveredFile)
+          org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFileOrBuilder {
+        public static final com.google.protobuf.Descriptors.Descriptor
+            getDescriptor() {
+          return org.sonarqube.ws.WsTests.internal_static_sonarqube_ws_tests_CoveredFilesResponse_CoveredFile_descriptor;
+        }
+
+        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+            internalGetFieldAccessorTable() {
+          return org.sonarqube.ws.WsTests.internal_static_sonarqube_ws_tests_CoveredFilesResponse_CoveredFile_fieldAccessorTable
+              .ensureFieldAccessorsInitialized(
+                  org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFile.class, org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFile.Builder.class);
+        }
+
+        // Construct using org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFile.newBuilder()
+        private Builder() {
+          maybeForceBuilderInitialization();
+        }
+
+        private Builder(
+            com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+          super(parent);
+          maybeForceBuilderInitialization();
+        }
+        private void maybeForceBuilderInitialization() {
+          if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+          }
+        }
+        public Builder clear() {
+          super.clear();
+          id_ = "";
+          bitField0_ = (bitField0_ & ~0x00000001);
+          key_ = "";
+          bitField0_ = (bitField0_ & ~0x00000002);
+          longName_ = "";
+          bitField0_ = (bitField0_ & ~0x00000004);
+          coveredLines_ = 0;
+          bitField0_ = (bitField0_ & ~0x00000008);
+          return this;
+        }
+
+        public com.google.protobuf.Descriptors.Descriptor
+            getDescriptorForType() {
+          return org.sonarqube.ws.WsTests.internal_static_sonarqube_ws_tests_CoveredFilesResponse_CoveredFile_descriptor;
+        }
+
+        public org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFile getDefaultInstanceForType() {
+          return org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFile.getDefaultInstance();
+        }
+
+        public org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFile build() {
+          org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFile result = buildPartial();
+          if (!result.isInitialized()) {
+            throw newUninitializedMessageException(result);
+          }
+          return result;
+        }
+
+        public org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFile buildPartial() {
+          org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFile result = new org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFile(this);
+          int from_bitField0_ = bitField0_;
+          int to_bitField0_ = 0;
+          if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+            to_bitField0_ |= 0x00000001;
+          }
+          result.id_ = id_;
+          if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
+            to_bitField0_ |= 0x00000002;
+          }
+          result.key_ = key_;
+          if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
+            to_bitField0_ |= 0x00000004;
+          }
+          result.longName_ = longName_;
+          if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
+            to_bitField0_ |= 0x00000008;
+          }
+          result.coveredLines_ = coveredLines_;
+          result.bitField0_ = to_bitField0_;
+          onBuilt();
+          return result;
+        }
+
+        public Builder mergeFrom(com.google.protobuf.Message other) {
+          if (other instanceof org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFile) {
+            return mergeFrom((org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFile)other);
+          } else {
+            super.mergeFrom(other);
+            return this;
+          }
+        }
+
+        public Builder mergeFrom(org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFile other) {
+          if (other == org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFile.getDefaultInstance()) return this;
+          if (other.hasId()) {
+            bitField0_ |= 0x00000001;
+            id_ = other.id_;
+            onChanged();
+          }
+          if (other.hasKey()) {
+            bitField0_ |= 0x00000002;
+            key_ = other.key_;
+            onChanged();
+          }
+          if (other.hasLongName()) {
+            bitField0_ |= 0x00000004;
+            longName_ = other.longName_;
+            onChanged();
+          }
+          if (other.hasCoveredLines()) {
+            setCoveredLines(other.getCoveredLines());
+          }
+          this.mergeUnknownFields(other.unknownFields);
+          onChanged();
+          return this;
+        }
+
+        public final boolean isInitialized() {
+          return true;
+        }
+
+        public Builder mergeFrom(
+            com.google.protobuf.CodedInputStream input,
+            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+            throws java.io.IOException {
+          org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFile parsedMessage = null;
+          try {
+            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+            parsedMessage = (org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFile) e.getUnfinishedMessage();
+            throw e;
+          } finally {
+            if (parsedMessage != null) {
+              mergeFrom(parsedMessage);
+            }
+          }
+          return this;
+        }
+        private int bitField0_;
+
+        private java.lang.Object id_ = "";
+        /**
+         * <code>optional string id = 1;</code>
+         */
+        public boolean hasId() {
+          return ((bitField0_ & 0x00000001) == 0x00000001);
+        }
+        /**
+         * <code>optional string id = 1;</code>
+         */
+        public java.lang.String getId() {
+          java.lang.Object ref = id_;
+          if (!(ref instanceof java.lang.String)) {
+            com.google.protobuf.ByteString bs =
+                (com.google.protobuf.ByteString) ref;
+            java.lang.String s = bs.toStringUtf8();
+            if (bs.isValidUtf8()) {
+              id_ = s;
+            }
+            return s;
+          } else {
+            return (java.lang.String) ref;
+          }
+        }
+        /**
+         * <code>optional string id = 1;</code>
+         */
+        public com.google.protobuf.ByteString
+            getIdBytes() {
+          java.lang.Object ref = id_;
+          if (ref instanceof String) {
+            com.google.protobuf.ByteString b = 
+                com.google.protobuf.ByteString.copyFromUtf8(
+                    (java.lang.String) ref);
+            id_ = b;
+            return b;
+          } else {
+            return (com.google.protobuf.ByteString) ref;
+          }
+        }
+        /**
+         * <code>optional string id = 1;</code>
+         */
+        public Builder setId(
+            java.lang.String value) {
+          if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000001;
+          id_ = value;
+          onChanged();
+          return this;
+        }
+        /**
+         * <code>optional string id = 1;</code>
+         */
+        public Builder clearId() {
+          bitField0_ = (bitField0_ & ~0x00000001);
+          id_ = getDefaultInstance().getId();
+          onChanged();
+          return this;
+        }
+        /**
+         * <code>optional string id = 1;</code>
+         */
+        public Builder setIdBytes(
+            com.google.protobuf.ByteString value) {
+          if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000001;
+          id_ = value;
+          onChanged();
+          return this;
+        }
+
+        private java.lang.Object key_ = "";
+        /**
+         * <code>optional string key = 2;</code>
+         */
+        public boolean hasKey() {
+          return ((bitField0_ & 0x00000002) == 0x00000002);
+        }
+        /**
+         * <code>optional string key = 2;</code>
+         */
+        public java.lang.String getKey() {
+          java.lang.Object ref = key_;
+          if (!(ref instanceof java.lang.String)) {
+            com.google.protobuf.ByteString bs =
+                (com.google.protobuf.ByteString) ref;
+            java.lang.String s = bs.toStringUtf8();
+            if (bs.isValidUtf8()) {
+              key_ = s;
+            }
+            return s;
+          } else {
+            return (java.lang.String) ref;
+          }
+        }
+        /**
+         * <code>optional string key = 2;</code>
+         */
+        public com.google.protobuf.ByteString
+            getKeyBytes() {
+          java.lang.Object ref = key_;
+          if (ref instanceof String) {
+            com.google.protobuf.ByteString b = 
+                com.google.protobuf.ByteString.copyFromUtf8(
+                    (java.lang.String) ref);
+            key_ = b;
+            return b;
+          } else {
+            return (com.google.protobuf.ByteString) ref;
+          }
+        }
+        /**
+         * <code>optional string key = 2;</code>
+         */
+        public Builder setKey(
+            java.lang.String value) {
+          if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000002;
+          key_ = value;
+          onChanged();
+          return this;
+        }
+        /**
+         * <code>optional string key = 2;</code>
+         */
+        public Builder clearKey() {
+          bitField0_ = (bitField0_ & ~0x00000002);
+          key_ = getDefaultInstance().getKey();
+          onChanged();
+          return this;
+        }
+        /**
+         * <code>optional string key = 2;</code>
+         */
+        public Builder setKeyBytes(
+            com.google.protobuf.ByteString value) {
+          if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000002;
+          key_ = value;
+          onChanged();
+          return this;
+        }
+
+        private java.lang.Object longName_ = "";
+        /**
+         * <code>optional string longName = 3;</code>
+         */
+        public boolean hasLongName() {
+          return ((bitField0_ & 0x00000004) == 0x00000004);
+        }
+        /**
+         * <code>optional string longName = 3;</code>
+         */
+        public java.lang.String getLongName() {
+          java.lang.Object ref = longName_;
+          if (!(ref instanceof java.lang.String)) {
+            com.google.protobuf.ByteString bs =
+                (com.google.protobuf.ByteString) ref;
+            java.lang.String s = bs.toStringUtf8();
+            if (bs.isValidUtf8()) {
+              longName_ = s;
+            }
+            return s;
+          } else {
+            return (java.lang.String) ref;
+          }
+        }
+        /**
+         * <code>optional string longName = 3;</code>
+         */
+        public com.google.protobuf.ByteString
+            getLongNameBytes() {
+          java.lang.Object ref = longName_;
+          if (ref instanceof String) {
+            com.google.protobuf.ByteString b = 
+                com.google.protobuf.ByteString.copyFromUtf8(
+                    (java.lang.String) ref);
+            longName_ = b;
+            return b;
+          } else {
+            return (com.google.protobuf.ByteString) ref;
+          }
+        }
+        /**
+         * <code>optional string longName = 3;</code>
+         */
+        public Builder setLongName(
+            java.lang.String value) {
+          if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000004;
+          longName_ = value;
+          onChanged();
+          return this;
+        }
+        /**
+         * <code>optional string longName = 3;</code>
+         */
+        public Builder clearLongName() {
+          bitField0_ = (bitField0_ & ~0x00000004);
+          longName_ = getDefaultInstance().getLongName();
+          onChanged();
+          return this;
+        }
+        /**
+         * <code>optional string longName = 3;</code>
+         */
+        public Builder setLongNameBytes(
+            com.google.protobuf.ByteString value) {
+          if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000004;
+          longName_ = value;
+          onChanged();
+          return this;
+        }
+
+        private int coveredLines_ ;
+        /**
+         * <code>optional int32 coveredLines = 4;</code>
+         */
+        public boolean hasCoveredLines() {
+          return ((bitField0_ & 0x00000008) == 0x00000008);
+        }
+        /**
+         * <code>optional int32 coveredLines = 4;</code>
+         */
+        public int getCoveredLines() {
+          return coveredLines_;
+        }
+        /**
+         * <code>optional int32 coveredLines = 4;</code>
+         */
+        public Builder setCoveredLines(int value) {
+          bitField0_ |= 0x00000008;
+          coveredLines_ = value;
+          onChanged();
+          return this;
+        }
+        /**
+         * <code>optional int32 coveredLines = 4;</code>
+         */
+        public Builder clearCoveredLines() {
+          bitField0_ = (bitField0_ & ~0x00000008);
+          coveredLines_ = 0;
+          onChanged();
+          return this;
+        }
+
+        // @@protoc_insertion_point(builder_scope:sonarqube.ws.tests.CoveredFilesResponse.CoveredFile)
+      }
+
+      // @@protoc_insertion_point(class_scope:sonarqube.ws.tests.CoveredFilesResponse.CoveredFile)
+      private static final org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFile DEFAULT_INSTANCE;
+      static {
+        DEFAULT_INSTANCE = new org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFile();
+      }
+
+      public static org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFile getDefaultInstance() {
+        return DEFAULT_INSTANCE;
+      }
+
+      public static final com.google.protobuf.Parser<CoveredFile> PARSER =
+          new com.google.protobuf.AbstractParser<CoveredFile>() {
+        public CoveredFile parsePartialFrom(
+            com.google.protobuf.CodedInputStream input,
+            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+            throws com.google.protobuf.InvalidProtocolBufferException {
+          try {
+            return new CoveredFile(input, extensionRegistry);
+          } catch (RuntimeException e) {
+            if (e.getCause() instanceof
+                com.google.protobuf.InvalidProtocolBufferException) {
+              throw (com.google.protobuf.InvalidProtocolBufferException)
+                  e.getCause();
+            }
+            throw e;
+          }
+        }
+      };
+
+      @java.lang.Override
+      public com.google.protobuf.Parser<CoveredFile> getParserForType() {
+        return PARSER;
+      }
+
+      public org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFile getDefaultInstanceForType() {
+        return DEFAULT_INSTANCE;
+      }
+
+    }
+
+    public static final int FILES_FIELD_NUMBER = 1;
+    private java.util.List<org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFile> files_;
+    /**
+     * <code>repeated .sonarqube.ws.tests.CoveredFilesResponse.CoveredFile files = 1;</code>
+     */
+    public java.util.List<org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFile> getFilesList() {
+      return files_;
+    }
+    /**
+     * <code>repeated .sonarqube.ws.tests.CoveredFilesResponse.CoveredFile files = 1;</code>
+     */
+    public java.util.List<? extends org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFileOrBuilder> 
+        getFilesOrBuilderList() {
+      return files_;
+    }
+    /**
+     * <code>repeated .sonarqube.ws.tests.CoveredFilesResponse.CoveredFile files = 1;</code>
+     */
+    public int getFilesCount() {
+      return files_.size();
+    }
+    /**
+     * <code>repeated .sonarqube.ws.tests.CoveredFilesResponse.CoveredFile files = 1;</code>
+     */
+    public org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFile getFiles(int index) {
+      return files_.get(index);
+    }
+    /**
+     * <code>repeated .sonarqube.ws.tests.CoveredFilesResponse.CoveredFile files = 1;</code>
+     */
+    public org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFileOrBuilder getFilesOrBuilder(
+        int index) {
+      return files_.get(index);
+    }
+
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      for (int i = 0; i < files_.size(); i++) {
+        output.writeMessage(1, files_.get(i));
+      }
+      unknownFields.writeTo(output);
+    }
+
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      for (int i = 0; i < files_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, files_.get(i));
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSerializedSize = size;
+      return size;
+    }
+
+    private static final long serialVersionUID = 0L;
+    public static org.sonarqube.ws.WsTests.CoveredFilesResponse parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static org.sonarqube.ws.WsTests.CoveredFilesResponse parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static org.sonarqube.ws.WsTests.CoveredFilesResponse parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static org.sonarqube.ws.WsTests.CoveredFilesResponse parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static org.sonarqube.ws.WsTests.CoveredFilesResponse parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input);
+    }
+    public static org.sonarqube.ws.WsTests.CoveredFilesResponse parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input, extensionRegistry);
+    }
+    public static org.sonarqube.ws.WsTests.CoveredFilesResponse parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return PARSER.parseDelimitedFrom(input);
+    }
+    public static org.sonarqube.ws.WsTests.CoveredFilesResponse parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+    }
+    public static org.sonarqube.ws.WsTests.CoveredFilesResponse parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input);
+    }
+    public static org.sonarqube.ws.WsTests.CoveredFilesResponse parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input, extensionRegistry);
+    }
+
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(org.sonarqube.ws.WsTests.CoveredFilesResponse prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code sonarqube.ws.tests.CoveredFilesResponse}
+     *
+     * <pre>
+     * WS api/tests/covered_files
+     * </pre>
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessage.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:sonarqube.ws.tests.CoveredFilesResponse)
+        org.sonarqube.ws.WsTests.CoveredFilesResponseOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return org.sonarqube.ws.WsTests.internal_static_sonarqube_ws_tests_CoveredFilesResponse_descriptor;
+      }
+
+      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return org.sonarqube.ws.WsTests.internal_static_sonarqube_ws_tests_CoveredFilesResponse_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                org.sonarqube.ws.WsTests.CoveredFilesResponse.class, org.sonarqube.ws.WsTests.CoveredFilesResponse.Builder.class);
+      }
+
+      // Construct using org.sonarqube.ws.WsTests.CoveredFilesResponse.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+          getFilesFieldBuilder();
+        }
+      }
+      public Builder clear() {
+        super.clear();
+        if (filesBuilder_ == null) {
+          files_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          filesBuilder_.clear();
+        }
+        return this;
+      }
+
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return org.sonarqube.ws.WsTests.internal_static_sonarqube_ws_tests_CoveredFilesResponse_descriptor;
+      }
+
+      public org.sonarqube.ws.WsTests.CoveredFilesResponse getDefaultInstanceForType() {
+        return org.sonarqube.ws.WsTests.CoveredFilesResponse.getDefaultInstance();
+      }
+
+      public org.sonarqube.ws.WsTests.CoveredFilesResponse build() {
+        org.sonarqube.ws.WsTests.CoveredFilesResponse result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      public org.sonarqube.ws.WsTests.CoveredFilesResponse buildPartial() {
+        org.sonarqube.ws.WsTests.CoveredFilesResponse result = new org.sonarqube.ws.WsTests.CoveredFilesResponse(this);
+        int from_bitField0_ = bitField0_;
+        if (filesBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) == 0x00000001)) {
+            files_ = java.util.Collections.unmodifiableList(files_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.files_ = files_;
+        } else {
+          result.files_ = filesBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof org.sonarqube.ws.WsTests.CoveredFilesResponse) {
+          return mergeFrom((org.sonarqube.ws.WsTests.CoveredFilesResponse)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(org.sonarqube.ws.WsTests.CoveredFilesResponse other) {
+        if (other == org.sonarqube.ws.WsTests.CoveredFilesResponse.getDefaultInstance()) return this;
+        if (filesBuilder_ == null) {
+          if (!other.files_.isEmpty()) {
+            if (files_.isEmpty()) {
+              files_ = other.files_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureFilesIsMutable();
+              files_.addAll(other.files_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.files_.isEmpty()) {
+            if (filesBuilder_.isEmpty()) {
+              filesBuilder_.dispose();
+              filesBuilder_ = null;
+              files_ = other.files_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              filesBuilder_ = 
+                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
+                   getFilesFieldBuilder() : null;
+            } else {
+              filesBuilder_.addAllMessages(other.files_);
+            }
+          }
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        org.sonarqube.ws.WsTests.CoveredFilesResponse parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (org.sonarqube.ws.WsTests.CoveredFilesResponse) e.getUnfinishedMessage();
+          throw e;
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private java.util.List<org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFile> files_ =
+        java.util.Collections.emptyList();
+      private void ensureFilesIsMutable() {
+        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
+          files_ = new java.util.ArrayList<org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFile>(files_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilder<
+          org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFile, org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFile.Builder, org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFileOrBuilder> filesBuilder_;
+
+      /**
+       * <code>repeated .sonarqube.ws.tests.CoveredFilesResponse.CoveredFile files = 1;</code>
+       */
+      public java.util.List<org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFile> getFilesList() {
+        if (filesBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(files_);
+        } else {
+          return filesBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .sonarqube.ws.tests.CoveredFilesResponse.CoveredFile files = 1;</code>
+       */
+      public int getFilesCount() {
+        if (filesBuilder_ == null) {
+          return files_.size();
+        } else {
+          return filesBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .sonarqube.ws.tests.CoveredFilesResponse.CoveredFile files = 1;</code>
+       */
+      public org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFile getFiles(int index) {
+        if (filesBuilder_ == null) {
+          return files_.get(index);
+        } else {
+          return filesBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .sonarqube.ws.tests.CoveredFilesResponse.CoveredFile files = 1;</code>
+       */
+      public Builder setFiles(
+          int index, org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFile value) {
+        if (filesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureFilesIsMutable();
+          files_.set(index, value);
+          onChanged();
+        } else {
+          filesBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .sonarqube.ws.tests.CoveredFilesResponse.CoveredFile files = 1;</code>
+       */
+      public Builder setFiles(
+          int index, org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFile.Builder builderForValue) {
+        if (filesBuilder_ == null) {
+          ensureFilesIsMutable();
+          files_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          filesBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .sonarqube.ws.tests.CoveredFilesResponse.CoveredFile files = 1;</code>
+       */
+      public Builder addFiles(org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFile value) {
+        if (filesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureFilesIsMutable();
+          files_.add(value);
+          onChanged();
+        } else {
+          filesBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .sonarqube.ws.tests.CoveredFilesResponse.CoveredFile files = 1;</code>
+       */
+      public Builder addFiles(
+          int index, org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFile value) {
+        if (filesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureFilesIsMutable();
+          files_.add(index, value);
+          onChanged();
+        } else {
+          filesBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .sonarqube.ws.tests.CoveredFilesResponse.CoveredFile files = 1;</code>
+       */
+      public Builder addFiles(
+          org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFile.Builder builderForValue) {
+        if (filesBuilder_ == null) {
+          ensureFilesIsMutable();
+          files_.add(builderForValue.build());
+          onChanged();
+        } else {
+          filesBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .sonarqube.ws.tests.CoveredFilesResponse.CoveredFile files = 1;</code>
+       */
+      public Builder addFiles(
+          int index, org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFile.Builder builderForValue) {
+        if (filesBuilder_ == null) {
+          ensureFilesIsMutable();
+          files_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          filesBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .sonarqube.ws.tests.CoveredFilesResponse.CoveredFile files = 1;</code>
+       */
+      public Builder addAllFiles(
+          java.lang.Iterable<? extends org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFile> values) {
+        if (filesBuilder_ == null) {
+          ensureFilesIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, files_);
+          onChanged();
+        } else {
+          filesBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .sonarqube.ws.tests.CoveredFilesResponse.CoveredFile files = 1;</code>
+       */
+      public Builder clearFiles() {
+        if (filesBuilder_ == null) {
+          files_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          filesBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .sonarqube.ws.tests.CoveredFilesResponse.CoveredFile files = 1;</code>
+       */
+      public Builder removeFiles(int index) {
+        if (filesBuilder_ == null) {
+          ensureFilesIsMutable();
+          files_.remove(index);
+          onChanged();
+        } else {
+          filesBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .sonarqube.ws.tests.CoveredFilesResponse.CoveredFile files = 1;</code>
+       */
+      public org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFile.Builder getFilesBuilder(
+          int index) {
+        return getFilesFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .sonarqube.ws.tests.CoveredFilesResponse.CoveredFile files = 1;</code>
+       */
+      public org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFileOrBuilder getFilesOrBuilder(
+          int index) {
+        if (filesBuilder_ == null) {
+          return files_.get(index);  } else {
+          return filesBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .sonarqube.ws.tests.CoveredFilesResponse.CoveredFile files = 1;</code>
+       */
+      public java.util.List<? extends org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFileOrBuilder> 
+           getFilesOrBuilderList() {
+        if (filesBuilder_ != null) {
+          return filesBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(files_);
+        }
+      }
+      /**
+       * <code>repeated .sonarqube.ws.tests.CoveredFilesResponse.CoveredFile files = 1;</code>
+       */
+      public org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFile.Builder addFilesBuilder() {
+        return getFilesFieldBuilder().addBuilder(
+            org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFile.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .sonarqube.ws.tests.CoveredFilesResponse.CoveredFile files = 1;</code>
+       */
+      public org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFile.Builder addFilesBuilder(
+          int index) {
+        return getFilesFieldBuilder().addBuilder(
+            index, org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFile.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .sonarqube.ws.tests.CoveredFilesResponse.CoveredFile files = 1;</code>
+       */
+      public java.util.List<org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFile.Builder> 
+           getFilesBuilderList() {
+        return getFilesFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilder<
+          org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFile, org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFile.Builder, org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFileOrBuilder> 
+          getFilesFieldBuilder() {
+        if (filesBuilder_ == null) {
+          filesBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
+              org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFile, org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFile.Builder, org.sonarqube.ws.WsTests.CoveredFilesResponse.CoveredFileOrBuilder>(
+                  files_,
+                  ((bitField0_ & 0x00000001) == 0x00000001),
+                  getParentForChildren(),
+                  isClean());
+          files_ = null;
+        }
+        return filesBuilder_;
+      }
+
+      // @@protoc_insertion_point(builder_scope:sonarqube.ws.tests.CoveredFilesResponse)
+    }
+
+    // @@protoc_insertion_point(class_scope:sonarqube.ws.tests.CoveredFilesResponse)
+    private static final org.sonarqube.ws.WsTests.CoveredFilesResponse DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new org.sonarqube.ws.WsTests.CoveredFilesResponse();
+    }
+
+    public static org.sonarqube.ws.WsTests.CoveredFilesResponse getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    public static final com.google.protobuf.Parser<CoveredFilesResponse> PARSER =
+        new com.google.protobuf.AbstractParser<CoveredFilesResponse>() {
+      public CoveredFilesResponse parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        try {
+          return new CoveredFilesResponse(input, extensionRegistry);
+        } catch (RuntimeException e) {
+          if (e.getCause() instanceof
+              com.google.protobuf.InvalidProtocolBufferException) {
+            throw (com.google.protobuf.InvalidProtocolBufferException)
+                e.getCause();
+          }
+          throw e;
+        }
+      }
+    };
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<CoveredFilesResponse> getParserForType() {
+      return PARSER;
+    }
+
+    public org.sonarqube.ws.WsTests.CoveredFilesResponse getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface TestOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:sonarqube.ws.tests.Test)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>optional string id = 1;</code>
+     */
+    boolean hasId();
+    /**
+     * <code>optional string id = 1;</code>
+     */
+    java.lang.String getId();
+    /**
+     * <code>optional string id = 1;</code>
+     */
+    com.google.protobuf.ByteString
+        getIdBytes();
+
+    /**
+     * <code>optional string name = 2;</code>
+     */
+    boolean hasName();
+    /**
+     * <code>optional string name = 2;</code>
+     */
+    java.lang.String getName();
+    /**
+     * <code>optional string name = 2;</code>
+     */
+    com.google.protobuf.ByteString
+        getNameBytes();
+
+    /**
+     * <code>optional string fileId = 3;</code>
+     */
+    boolean hasFileId();
+    /**
+     * <code>optional string fileId = 3;</code>
+     */
+    java.lang.String getFileId();
+    /**
+     * <code>optional string fileId = 3;</code>
+     */
+    com.google.protobuf.ByteString
+        getFileIdBytes();
+
+    /**
+     * <code>optional string fileKey = 4;</code>
+     */
+    boolean hasFileKey();
+    /**
+     * <code>optional string fileKey = 4;</code>
+     */
+    java.lang.String getFileKey();
+    /**
+     * <code>optional string fileKey = 4;</code>
+     */
+    com.google.protobuf.ByteString
+        getFileKeyBytes();
+
+    /**
+     * <code>optional string fileName = 5;</code>
+     */
+    boolean hasFileName();
+    /**
+     * <code>optional string fileName = 5;</code>
+     */
+    java.lang.String getFileName();
+    /**
+     * <code>optional string fileName = 5;</code>
+     */
+    com.google.protobuf.ByteString
+        getFileNameBytes();
+
+    /**
+     * <code>optional .sonarqube.ws.tests.TestStatus status = 6;</code>
+     */
+    boolean hasStatus();
+    /**
+     * <code>optional .sonarqube.ws.tests.TestStatus status = 6;</code>
+     */
+    org.sonarqube.ws.WsTests.TestStatus getStatus();
+
+    /**
+     * <code>optional int64 durationInMs = 7;</code>
+     */
+    boolean hasDurationInMs();
+    /**
+     * <code>optional int64 durationInMs = 7;</code>
+     */
+    long getDurationInMs();
+
+    /**
+     * <code>optional int32 coveredLines = 8;</code>
+     */
+    boolean hasCoveredLines();
+    /**
+     * <code>optional int32 coveredLines = 8;</code>
+     */
+    int getCoveredLines();
+
+    /**
+     * <code>optional string message = 9;</code>
+     */
+    boolean hasMessage();
+    /**
+     * <code>optional string message = 9;</code>
+     */
+    java.lang.String getMessage();
+    /**
+     * <code>optional string message = 9;</code>
+     */
+    com.google.protobuf.ByteString
+        getMessageBytes();
+
+    /**
+     * <code>optional string stacktrace = 10;</code>
+     */
+    boolean hasStacktrace();
+    /**
+     * <code>optional string stacktrace = 10;</code>
+     */
+    java.lang.String getStacktrace();
+    /**
+     * <code>optional string stacktrace = 10;</code>
+     */
+    com.google.protobuf.ByteString
+        getStacktraceBytes();
+  }
+  /**
+   * Protobuf type {@code sonarqube.ws.tests.Test}
+   */
+  public  static final class Test extends
+      com.google.protobuf.GeneratedMessage implements
+      // @@protoc_insertion_point(message_implements:sonarqube.ws.tests.Test)
+      TestOrBuilder {
+    // Use Test.newBuilder() to construct.
+    private Test(com.google.protobuf.GeneratedMessage.Builder builder) {
+      super(builder);
+    }
+    private Test() {
+      id_ = "";
+      name_ = "";
+      fileId_ = "";
+      fileKey_ = "";
+      fileName_ = "";
+      status_ = 1;
+      durationInMs_ = 0L;
+      coveredLines_ = 0;
+      message_ = "";
+      stacktrace_ = "";
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private Test(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+      this();
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            default: {
+              if (!parseUnknownField(input, unknownFields,
+                                     extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+            case 10: {
+              com.google.protobuf.ByteString bs = input.readBytes();
+              bitField0_ |= 0x00000001;
+              id_ = bs;
+              break;
+            }
+            case 18: {
+              com.google.protobuf.ByteString bs = input.readBytes();
+              bitField0_ |= 0x00000002;
+              name_ = bs;
+              break;
+            }
+            case 26: {
+              com.google.protobuf.ByteString bs = input.readBytes();
+              bitField0_ |= 0x00000004;
+              fileId_ = bs;
+              break;
+            }
+            case 34: {
+              com.google.protobuf.ByteString bs = input.readBytes();
+              bitField0_ |= 0x00000008;
+              fileKey_ = bs;
+              break;
+            }
+            case 42: {
+              com.google.protobuf.ByteString bs = input.readBytes();
+              bitField0_ |= 0x00000010;
+              fileName_ = bs;
+              break;
+            }
+            case 48: {
+              int rawValue = input.readEnum();
+              org.sonarqube.ws.WsTests.TestStatus value = org.sonarqube.ws.WsTests.TestStatus.valueOf(rawValue);
+              if (value == null) {
+                unknownFields.mergeVarintField(6, rawValue);
+              } else {
+                bitField0_ |= 0x00000020;
+                status_ = rawValue;
+              }
+              break;
+            }
+            case 56: {
+              bitField0_ |= 0x00000040;
+              durationInMs_ = input.readInt64();
+              break;
+            }
+            case 64: {
+              bitField0_ |= 0x00000080;
+              coveredLines_ = input.readInt32();
+              break;
+            }
+            case 74: {
+              com.google.protobuf.ByteString bs = input.readBytes();
+              bitField0_ |= 0x00000100;
+              message_ = bs;
+              break;
+            }
+            case 82: {
+              com.google.protobuf.ByteString bs = input.readBytes();
+              bitField0_ |= 0x00000200;
+              stacktrace_ = bs;
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw new RuntimeException(e.setUnfinishedMessage(this));
+      } catch (java.io.IOException e) {
+        throw new RuntimeException(
+            new com.google.protobuf.InvalidProtocolBufferException(
+                e.getMessage()).setUnfinishedMessage(this));
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return org.sonarqube.ws.WsTests.internal_static_sonarqube_ws_tests_Test_descriptor;
+    }
+
+    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return org.sonarqube.ws.WsTests.internal_static_sonarqube_ws_tests_Test_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              org.sonarqube.ws.WsTests.Test.class, org.sonarqube.ws.WsTests.Test.Builder.class);
+    }
+
+    private int bitField0_;
+    public static final int ID_FIELD_NUMBER = 1;
+    private volatile java.lang.Object id_;
+    /**
+     * <code>optional string id = 1;</code>
+     */
+    public boolean hasId() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    /**
+     * <code>optional string id = 1;</code>
+     */
+    public java.lang.String getId() {
+      java.lang.Object ref = id_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        if (bs.isValidUtf8()) {
+          id_ = s;
+        }
+        return s;
+      }
+    }
+    /**
+     * <code>optional string id = 1;</code>
+     */
+    public com.google.protobuf.ByteString
+        getIdBytes() {
+      java.lang.Object ref = id_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        id_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int NAME_FIELD_NUMBER = 2;
+    private volatile java.lang.Object name_;
+    /**
+     * <code>optional string name = 2;</code>
+     */
+    public boolean hasName() {
+      return ((bitField0_ & 0x00000002) == 0x00000002);
+    }
+    /**
+     * <code>optional string name = 2;</code>
+     */
+    public java.lang.String getName() {
+      java.lang.Object ref = name_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        if (bs.isValidUtf8()) {
+          name_ = s;
+        }
+        return s;
+      }
+    }
+    /**
+     * <code>optional string name = 2;</code>
+     */
+    public com.google.protobuf.ByteString
+        getNameBytes() {
+      java.lang.Object ref = name_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        name_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int FILEID_FIELD_NUMBER = 3;
+    private volatile java.lang.Object fileId_;
+    /**
+     * <code>optional string fileId = 3;</code>
+     */
+    public boolean hasFileId() {
+      return ((bitField0_ & 0x00000004) == 0x00000004);
+    }
+    /**
+     * <code>optional string fileId = 3;</code>
+     */
+    public java.lang.String getFileId() {
+      java.lang.Object ref = fileId_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        if (bs.isValidUtf8()) {
+          fileId_ = s;
+        }
+        return s;
+      }
+    }
+    /**
+     * <code>optional string fileId = 3;</code>
+     */
+    public com.google.protobuf.ByteString
+        getFileIdBytes() {
+      java.lang.Object ref = fileId_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        fileId_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int FILEKEY_FIELD_NUMBER = 4;
+    private volatile java.lang.Object fileKey_;
+    /**
+     * <code>optional string fileKey = 4;</code>
+     */
+    public boolean hasFileKey() {
+      return ((bitField0_ & 0x00000008) == 0x00000008);
+    }
+    /**
+     * <code>optional string fileKey = 4;</code>
+     */
+    public java.lang.String getFileKey() {
+      java.lang.Object ref = fileKey_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        if (bs.isValidUtf8()) {
+          fileKey_ = s;
+        }
+        return s;
+      }
+    }
+    /**
+     * <code>optional string fileKey = 4;</code>
+     */
+    public com.google.protobuf.ByteString
+        getFileKeyBytes() {
+      java.lang.Object ref = fileKey_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        fileKey_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int FILENAME_FIELD_NUMBER = 5;
+    private volatile java.lang.Object fileName_;
+    /**
+     * <code>optional string fileName = 5;</code>
+     */
+    public boolean hasFileName() {
+      return ((bitField0_ & 0x00000010) == 0x00000010);
+    }
+    /**
+     * <code>optional string fileName = 5;</code>
+     */
+    public java.lang.String getFileName() {
+      java.lang.Object ref = fileName_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        if (bs.isValidUtf8()) {
+          fileName_ = s;
+        }
+        return s;
+      }
+    }
+    /**
+     * <code>optional string fileName = 5;</code>
+     */
+    public com.google.protobuf.ByteString
+        getFileNameBytes() {
+      java.lang.Object ref = fileName_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        fileName_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int STATUS_FIELD_NUMBER = 6;
+    private int status_;
+    /**
+     * <code>optional .sonarqube.ws.tests.TestStatus status = 6;</code>
+     */
+    public boolean hasStatus() {
+      return ((bitField0_ & 0x00000020) == 0x00000020);
+    }
+    /**
+     * <code>optional .sonarqube.ws.tests.TestStatus status = 6;</code>
+     */
+    public org.sonarqube.ws.WsTests.TestStatus getStatus() {
+      org.sonarqube.ws.WsTests.TestStatus result = org.sonarqube.ws.WsTests.TestStatus.valueOf(status_);
+      return result == null ? org.sonarqube.ws.WsTests.TestStatus.OK : result;
+    }
+
+    public static final int DURATIONINMS_FIELD_NUMBER = 7;
+    private long durationInMs_;
+    /**
+     * <code>optional int64 durationInMs = 7;</code>
+     */
+    public boolean hasDurationInMs() {
+      return ((bitField0_ & 0x00000040) == 0x00000040);
+    }
+    /**
+     * <code>optional int64 durationInMs = 7;</code>
+     */
+    public long getDurationInMs() {
+      return durationInMs_;
+    }
+
+    public static final int COVEREDLINES_FIELD_NUMBER = 8;
+    private int coveredLines_;
+    /**
+     * <code>optional int32 coveredLines = 8;</code>
+     */
+    public boolean hasCoveredLines() {
+      return ((bitField0_ & 0x00000080) == 0x00000080);
+    }
+    /**
+     * <code>optional int32 coveredLines = 8;</code>
+     */
+    public int getCoveredLines() {
+      return coveredLines_;
+    }
+
+    public static final int MESSAGE_FIELD_NUMBER = 9;
+    private volatile java.lang.Object message_;
+    /**
+     * <code>optional string message = 9;</code>
+     */
+    public boolean hasMessage() {
+      return ((bitField0_ & 0x00000100) == 0x00000100);
+    }
+    /**
+     * <code>optional string message = 9;</code>
+     */
+    public java.lang.String getMessage() {
+      java.lang.Object ref = message_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        if (bs.isValidUtf8()) {
+          message_ = s;
+        }
+        return s;
+      }
+    }
+    /**
+     * <code>optional string message = 9;</code>
+     */
+    public com.google.protobuf.ByteString
+        getMessageBytes() {
+      java.lang.Object ref = message_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        message_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int STACKTRACE_FIELD_NUMBER = 10;
+    private volatile java.lang.Object stacktrace_;
+    /**
+     * <code>optional string stacktrace = 10;</code>
+     */
+    public boolean hasStacktrace() {
+      return ((bitField0_ & 0x00000200) == 0x00000200);
+    }
+    /**
+     * <code>optional string stacktrace = 10;</code>
+     */
+    public java.lang.String getStacktrace() {
+      java.lang.Object ref = stacktrace_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        if (bs.isValidUtf8()) {
+          stacktrace_ = s;
+        }
+        return s;
+      }
+    }
+    /**
+     * <code>optional string stacktrace = 10;</code>
+     */
+    public com.google.protobuf.ByteString
+        getStacktraceBytes() {
+      java.lang.Object ref = stacktrace_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        stacktrace_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeBytes(1, getIdBytes());
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        output.writeBytes(2, getNameBytes());
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        output.writeBytes(3, getFileIdBytes());
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        output.writeBytes(4, getFileKeyBytes());
+      }
+      if (((bitField0_ & 0x00000010) == 0x00000010)) {
+        output.writeBytes(5, getFileNameBytes());
+      }
+      if (((bitField0_ & 0x00000020) == 0x00000020)) {
+        output.writeEnum(6, status_);
+      }
+      if (((bitField0_ & 0x00000040) == 0x00000040)) {
+        output.writeInt64(7, durationInMs_);
+      }
+      if (((bitField0_ & 0x00000080) == 0x00000080)) {
+        output.writeInt32(8, coveredLines_);
+      }
+      if (((bitField0_ & 0x00000100) == 0x00000100)) {
+        output.writeBytes(9, getMessageBytes());
+      }
+      if (((bitField0_ & 0x00000200) == 0x00000200)) {
+        output.writeBytes(10, getStacktraceBytes());
+      }
+      unknownFields.writeTo(output);
+    }
+
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(1, getIdBytes());
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(2, getNameBytes());
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(3, getFileIdBytes());
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(4, getFileKeyBytes());
+      }
+      if (((bitField0_ & 0x00000010) == 0x00000010)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(5, getFileNameBytes());
+      }
+      if (((bitField0_ & 0x00000020) == 0x00000020)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeEnumSize(6, status_);
+      }
+      if (((bitField0_ & 0x00000040) == 0x00000040)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(7, durationInMs_);
+      }
+      if (((bitField0_ & 0x00000080) == 0x00000080)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt32Size(8, coveredLines_);
+      }
+      if (((bitField0_ & 0x00000100) == 0x00000100)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(9, getMessageBytes());
+      }
+      if (((bitField0_ & 0x00000200) == 0x00000200)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(10, getStacktraceBytes());
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSerializedSize = size;
+      return size;
+    }
+
+    private static final long serialVersionUID = 0L;
+    public static org.sonarqube.ws.WsTests.Test parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static org.sonarqube.ws.WsTests.Test parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static org.sonarqube.ws.WsTests.Test parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static org.sonarqube.ws.WsTests.Test parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static org.sonarqube.ws.WsTests.Test parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input);
+    }
+    public static org.sonarqube.ws.WsTests.Test parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input, extensionRegistry);
+    }
+    public static org.sonarqube.ws.WsTests.Test parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return PARSER.parseDelimitedFrom(input);
+    }
+    public static org.sonarqube.ws.WsTests.Test parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+    }
+    public static org.sonarqube.ws.WsTests.Test parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input);
+    }
+    public static org.sonarqube.ws.WsTests.Test parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return PARSER.parseFrom(input, extensionRegistry);
+    }
+
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(org.sonarqube.ws.WsTests.Test prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code sonarqube.ws.tests.Test}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessage.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:sonarqube.ws.tests.Test)
+        org.sonarqube.ws.WsTests.TestOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return org.sonarqube.ws.WsTests.internal_static_sonarqube_ws_tests_Test_descriptor;
+      }
+
+      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return org.sonarqube.ws.WsTests.internal_static_sonarqube_ws_tests_Test_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                org.sonarqube.ws.WsTests.Test.class, org.sonarqube.ws.WsTests.Test.Builder.class);
+      }
+
+      // Construct using org.sonarqube.ws.WsTests.Test.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+        }
+      }
+      public Builder clear() {
+        super.clear();
+        id_ = "";
+        bitField0_ = (bitField0_ & ~0x00000001);
+        name_ = "";
+        bitField0_ = (bitField0_ & ~0x00000002);
+        fileId_ = "";
+        bitField0_ = (bitField0_ & ~0x00000004);
+        fileKey_ = "";
+        bitField0_ = (bitField0_ & ~0x00000008);
+        fileName_ = "";
+        bitField0_ = (bitField0_ & ~0x00000010);
+        status_ = 1;
+        bitField0_ = (bitField0_ & ~0x00000020);
+        durationInMs_ = 0L;
+        bitField0_ = (bitField0_ & ~0x00000040);
+        coveredLines_ = 0;
+        bitField0_ = (bitField0_ & ~0x00000080);
+        message_ = "";
+        bitField0_ = (bitField0_ & ~0x00000100);
+        stacktrace_ = "";
+        bitField0_ = (bitField0_ & ~0x00000200);
+        return this;
+      }
+
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return org.sonarqube.ws.WsTests.internal_static_sonarqube_ws_tests_Test_descriptor;
+      }
+
+      public org.sonarqube.ws.WsTests.Test getDefaultInstanceForType() {
+        return org.sonarqube.ws.WsTests.Test.getDefaultInstance();
+      }
+
+      public org.sonarqube.ws.WsTests.Test build() {
+        org.sonarqube.ws.WsTests.Test result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      public org.sonarqube.ws.WsTests.Test buildPartial() {
+        org.sonarqube.ws.WsTests.Test result = new org.sonarqube.ws.WsTests.Test(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+          to_bitField0_ |= 0x00000001;
+        }
+        result.id_ = id_;
+        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
+          to_bitField0_ |= 0x00000002;
+        }
+        result.name_ = name_;
+        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
+          to_bitField0_ |= 0x00000004;
+        }
+        result.fileId_ = fileId_;
+        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
+          to_bitField0_ |= 0x00000008;
+        }
+        result.fileKey_ = fileKey_;
+        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
+          to_bitField0_ |= 0x00000010;
+        }
+        result.fileName_ = fileName_;
+        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
+          to_bitField0_ |= 0x00000020;
+        }
+        result.status_ = status_;
+        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
+          to_bitField0_ |= 0x00000040;
+        }
+        result.durationInMs_ = durationInMs_;
+        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
+          to_bitField0_ |= 0x00000080;
+        }
+        result.coveredLines_ = coveredLines_;
+        if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
+          to_bitField0_ |= 0x00000100;
+        }
+        result.message_ = message_;
+        if (((from_bitField0_ & 0x00000200) == 0x00000200)) {
+          to_bitField0_ |= 0x00000200;
+        }
+        result.stacktrace_ = stacktrace_;
+        result.bitField0_ = to_bitField0_;
+        onBuilt();
+        return result;
+      }
+
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof org.sonarqube.ws.WsTests.Test) {
+          return mergeFrom((org.sonarqube.ws.WsTests.Test)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(org.sonarqube.ws.WsTests.Test other) {
+        if (other == org.sonarqube.ws.WsTests.Test.getDefaultInstance()) return this;
+        if (other.hasId()) {
+          bitField0_ |= 0x00000001;
+          id_ = other.id_;
+          onChanged();
+        }
+        if (other.hasName()) {
+          bitField0_ |= 0x00000002;
+          name_ = other.name_;
+          onChanged();
+        }
+        if (other.hasFileId()) {
+          bitField0_ |= 0x00000004;
+          fileId_ = other.fileId_;
+          onChanged();
+        }
+        if (other.hasFileKey()) {
+          bitField0_ |= 0x00000008;
+          fileKey_ = other.fileKey_;
+          onChanged();
+        }
+        if (other.hasFileName()) {
+          bitField0_ |= 0x00000010;
+          fileName_ = other.fileName_;
+          onChanged();
+        }
+        if (other.hasStatus()) {
+          setStatus(other.getStatus());
+        }
+        if (other.hasDurationInMs()) {
+          setDurationInMs(other.getDurationInMs());
+        }
+        if (other.hasCoveredLines()) {
+          setCoveredLines(other.getCoveredLines());
+        }
+        if (other.hasMessage()) {
+          bitField0_ |= 0x00000100;
+          message_ = other.message_;
+          onChanged();
+        }
+        if (other.hasStacktrace()) {
+          bitField0_ |= 0x00000200;
+          stacktrace_ = other.stacktrace_;
+          onChanged();
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        org.sonarqube.ws.WsTests.Test parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (org.sonarqube.ws.WsTests.Test) e.getUnfinishedMessage();
+          throw e;
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private java.lang.Object id_ = "";
+      /**
+       * <code>optional string id = 1;</code>
+       */
+      public boolean hasId() {
+        return ((bitField0_ & 0x00000001) == 0x00000001);
+      }
+      /**
+       * <code>optional string id = 1;</code>
+       */
+      public java.lang.String getId() {
+        java.lang.Object ref = id_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          if (bs.isValidUtf8()) {
+            id_ = s;
+          }
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>optional string id = 1;</code>
+       */
+      public com.google.protobuf.ByteString
+          getIdBytes() {
+        java.lang.Object ref = id_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          id_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>optional string id = 1;</code>
+       */
+      public Builder setId(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000001;
+        id_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>optional string id = 1;</code>
+       */
+      public Builder clearId() {
+        bitField0_ = (bitField0_ & ~0x00000001);
+        id_ = getDefaultInstance().getId();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>optional string id = 1;</code>
+       */
+      public Builder setIdBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000001;
+        id_ = value;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object name_ = "";
+      /**
+       * <code>optional string name = 2;</code>
+       */
+      public boolean hasName() {
+        return ((bitField0_ & 0x00000002) == 0x00000002);
+      }
+      /**
+       * <code>optional string name = 2;</code>
+       */
+      public java.lang.String getName() {
+        java.lang.Object ref = name_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          if (bs.isValidUtf8()) {
+            name_ = s;
+          }
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>optional string name = 2;</code>
+       */
+      public com.google.protobuf.ByteString
+          getNameBytes() {
+        java.lang.Object ref = name_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          name_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>optional string name = 2;</code>
+       */
+      public Builder setName(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000002;
+        name_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>optional string name = 2;</code>
+       */
+      public Builder clearName() {
+        bitField0_ = (bitField0_ & ~0x00000002);
+        name_ = getDefaultInstance().getName();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>optional string name = 2;</code>
+       */
+      public Builder setNameBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000002;
+        name_ = value;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object fileId_ = "";
+      /**
+       * <code>optional string fileId = 3;</code>
+       */
+      public boolean hasFileId() {
+        return ((bitField0_ & 0x00000004) == 0x00000004);
+      }
+      /**
+       * <code>optional string fileId = 3;</code>
+       */
+      public java.lang.String getFileId() {
+        java.lang.Object ref = fileId_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          if (bs.isValidUtf8()) {
+            fileId_ = s;
+          }
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>optional string fileId = 3;</code>
+       */
+      public com.google.protobuf.ByteString
+          getFileIdBytes() {
+        java.lang.Object ref = fileId_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          fileId_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>optional string fileId = 3;</code>
+       */
+      public Builder setFileId(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000004;
+        fileId_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>optional string fileId = 3;</code>
+       */
+      public Builder clearFileId() {
+        bitField0_ = (bitField0_ & ~0x00000004);
+        fileId_ = getDefaultInstance().getFileId();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>optional string fileId = 3;</code>
+       */
+      public Builder setFileIdBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000004;
+        fileId_ = value;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object fileKey_ = "";
+      /**
+       * <code>optional string fileKey = 4;</code>
+       */
+      public boolean hasFileKey() {
+        return ((bitField0_ & 0x00000008) == 0x00000008);
+      }
+      /**
+       * <code>optional string fileKey = 4;</code>
+       */
+      public java.lang.String getFileKey() {
+        java.lang.Object ref = fileKey_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          if (bs.isValidUtf8()) {
+            fileKey_ = s;
+          }
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>optional string fileKey = 4;</code>
+       */
+      public com.google.protobuf.ByteString
+          getFileKeyBytes() {
+        java.lang.Object ref = fileKey_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          fileKey_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>optional string fileKey = 4;</code>
+       */
+      public Builder setFileKey(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000008;
+        fileKey_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>optional string fileKey = 4;</code>
+       */
+      public Builder clearFileKey() {
+        bitField0_ = (bitField0_ & ~0x00000008);
+        fileKey_ = getDefaultInstance().getFileKey();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>optional string fileKey = 4;</code>
+       */
+      public Builder setFileKeyBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000008;
+        fileKey_ = value;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object fileName_ = "";
+      /**
+       * <code>optional string fileName = 5;</code>
+       */
+      public boolean hasFileName() {
+        return ((bitField0_ & 0x00000010) == 0x00000010);
+      }
+      /**
+       * <code>optional string fileName = 5;</code>
+       */
+      public java.lang.String getFileName() {
+        java.lang.Object ref = fileName_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          if (bs.isValidUtf8()) {
+            fileName_ = s;
+          }
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>optional string fileName = 5;</code>
+       */
+      public com.google.protobuf.ByteString
+          getFileNameBytes() {
+        java.lang.Object ref = fileName_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          fileName_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>optional string fileName = 5;</code>
+       */
+      public Builder setFileName(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000010;
+        fileName_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>optional string fileName = 5;</code>
+       */
+      public Builder clearFileName() {
+        bitField0_ = (bitField0_ & ~0x00000010);
+        fileName_ = getDefaultInstance().getFileName();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>optional string fileName = 5;</code>
+       */
+      public Builder setFileNameBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000010;
+        fileName_ = value;
+        onChanged();
+        return this;
+      }
+
+      private int status_ = 1;
+      /**
+       * <code>optional .sonarqube.ws.tests.TestStatus status = 6;</code>
+       */
+      public boolean hasStatus() {
+        return ((bitField0_ & 0x00000020) == 0x00000020);
+      }
+      /**
+       * <code>optional .sonarqube.ws.tests.TestStatus status = 6;</code>
+       */
+      public org.sonarqube.ws.WsTests.TestStatus getStatus() {
+        org.sonarqube.ws.WsTests.TestStatus result = org.sonarqube.ws.WsTests.TestStatus.valueOf(status_);
+        return result == null ? org.sonarqube.ws.WsTests.TestStatus.OK : result;
+      }
+      /**
+       * <code>optional .sonarqube.ws.tests.TestStatus status = 6;</code>
+       */
+      public Builder setStatus(org.sonarqube.ws.WsTests.TestStatus value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        bitField0_ |= 0x00000020;
+        status_ = value.getNumber();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>optional .sonarqube.ws.tests.TestStatus status = 6;</code>
+       */
+      public Builder clearStatus() {
+        bitField0_ = (bitField0_ & ~0x00000020);
+        status_ = 1;
+        onChanged();
+        return this;
+      }
+
+      private long durationInMs_ ;
+      /**
+       * <code>optional int64 durationInMs = 7;</code>
+       */
+      public boolean hasDurationInMs() {
+        return ((bitField0_ & 0x00000040) == 0x00000040);
+      }
+      /**
+       * <code>optional int64 durationInMs = 7;</code>
+       */
+      public long getDurationInMs() {
+        return durationInMs_;
+      }
+      /**
+       * <code>optional int64 durationInMs = 7;</code>
+       */
+      public Builder setDurationInMs(long value) {
+        bitField0_ |= 0x00000040;
+        durationInMs_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>optional int64 durationInMs = 7;</code>
+       */
+      public Builder clearDurationInMs() {
+        bitField0_ = (bitField0_ & ~0x00000040);
+        durationInMs_ = 0L;
+        onChanged();
+        return this;
+      }
+
+      private int coveredLines_ ;
+      /**
+       * <code>optional int32 coveredLines = 8;</code>
+       */
+      public boolean hasCoveredLines() {
+        return ((bitField0_ & 0x00000080) == 0x00000080);
+      }
+      /**
+       * <code>optional int32 coveredLines = 8;</code>
+       */
+      public int getCoveredLines() {
+        return coveredLines_;
+      }
+      /**
+       * <code>optional int32 coveredLines = 8;</code>
+       */
+      public Builder setCoveredLines(int value) {
+        bitField0_ |= 0x00000080;
+        coveredLines_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>optional int32 coveredLines = 8;</code>
+       */
+      public Builder clearCoveredLines() {
+        bitField0_ = (bitField0_ & ~0x00000080);
+        coveredLines_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object message_ = "";
+      /**
+       * <code>optional string message = 9;</code>
+       */
+      public boolean hasMessage() {
+        return ((bitField0_ & 0x00000100) == 0x00000100);
+      }
+      /**
+       * <code>optional string message = 9;</code>
+       */
+      public java.lang.String getMessage() {
+        java.lang.Object ref = message_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          if (bs.isValidUtf8()) {
+            message_ = s;
+          }
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>optional string message = 9;</code>
+       */
+      public com.google.protobuf.ByteString
+          getMessageBytes() {
+        java.lang.Object ref = message_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          message_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>optional string message = 9;</code>
+       */
+      public Builder setMessage(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000100;
+        message_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>optional string message = 9;</code>
+       */
+      public Builder clearMessage() {
+        bitField0_ = (bitField0_ & ~0x00000100);
+        message_ = getDefaultInstance().getMessage();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>optional string message = 9;</code>
+       */
+      public Builder setMessageBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000100;
+        message_ = value;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object stacktrace_ = "";
+      /**
+       * <code>optional string stacktrace = 10;</code>
+       */
+      public boolean hasStacktrace() {
+        return ((bitField0_ & 0x00000200) == 0x00000200);
+      }
+      /**
+       * <code>optional string stacktrace = 10;</code>
+       */
+      public java.lang.String getStacktrace() {
+        java.lang.Object ref = stacktrace_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          if (bs.isValidUtf8()) {
+            stacktrace_ = s;
+          }
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>optional string stacktrace = 10;</code>
+       */
+      public com.google.protobuf.ByteString
+          getStacktraceBytes() {
+        java.lang.Object ref = stacktrace_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          stacktrace_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>optional string stacktrace = 10;</code>
+       */
+      public Builder setStacktrace(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000200;
+        stacktrace_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>optional string stacktrace = 10;</code>
+       */
+      public Builder clearStacktrace() {
+        bitField0_ = (bitField0_ & ~0x00000200);
+        stacktrace_ = getDefaultInstance().getStacktrace();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>optional string stacktrace = 10;</code>
+       */
+      public Builder setStacktraceBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000200;
+        stacktrace_ = value;
+        onChanged();
+        return this;
+      }
+
+      // @@protoc_insertion_point(builder_scope:sonarqube.ws.tests.Test)
+    }
+
+    // @@protoc_insertion_point(class_scope:sonarqube.ws.tests.Test)
+    private static final org.sonarqube.ws.WsTests.Test DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new org.sonarqube.ws.WsTests.Test();
+    }
+
+    public static org.sonarqube.ws.WsTests.Test getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    public static final com.google.protobuf.Parser<Test> PARSER =
+        new com.google.protobuf.AbstractParser<Test>() {
+      public Test parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        try {
+          return new Test(input, extensionRegistry);
+        } catch (RuntimeException e) {
+          if (e.getCause() instanceof
+              com.google.protobuf.InvalidProtocolBufferException) {
+            throw (com.google.protobuf.InvalidProtocolBufferException)
+                e.getCause();
+          }
+          throw e;
+        }
+      }
+    };
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<Test> getParserForType() {
+      return PARSER;
+    }
+
+    public org.sonarqube.ws.WsTests.Test getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  private static com.google.protobuf.Descriptors.Descriptor
+    internal_static_sonarqube_ws_tests_ListResponse_descriptor;
+  private static
+    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+      internal_static_sonarqube_ws_tests_ListResponse_fieldAccessorTable;
+  private static com.google.protobuf.Descriptors.Descriptor
+    internal_static_sonarqube_ws_tests_CoveredFilesResponse_descriptor;
+  private static
+    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+      internal_static_sonarqube_ws_tests_CoveredFilesResponse_fieldAccessorTable;
+  private static com.google.protobuf.Descriptors.Descriptor
+    internal_static_sonarqube_ws_tests_CoveredFilesResponse_CoveredFile_descriptor;
+  private static
+    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+      internal_static_sonarqube_ws_tests_CoveredFilesResponse_CoveredFile_fieldAccessorTable;
+  private static com.google.protobuf.Descriptors.Descriptor
+    internal_static_sonarqube_ws_tests_Test_descriptor;
+  private static
+    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+      internal_static_sonarqube_ws_tests_Test_fieldAccessorTable;
+
+  public static com.google.protobuf.Descriptors.FileDescriptor
+      getDescriptor() {
+    return descriptor;
+  }
+  private static com.google.protobuf.Descriptors.FileDescriptor
+      descriptor;
+  static {
+    java.lang.String[] descriptorData = {
+      "\n\016ws-tests.proto\022\022sonarqube.ws.tests\032\020ws" +
+      "-commons.proto\"e\n\014ListResponse\022,\n\006paging" +
+      "\030\001 \001(\0132\034.sonarqube.ws.commons.Paging\022\'\n\005" +
+      "tests\030\002 \003(\0132\030.sonarqube.ws.tests.Test\"\253\001" +
+      "\n\024CoveredFilesResponse\022C\n\005files\030\001 \003(\01324." +
+      "sonarqube.ws.tests.CoveredFilesResponse." +
+      "CoveredFile\032N\n\013CoveredFile\022\n\n\002id\030\001 \001(\t\022\013" +
+      "\n\003key\030\002 \001(\t\022\020\n\010longName\030\003 \001(\t\022\024\n\014covered" +
+      "Lines\030\004 \001(\005\"\324\001\n\004Test\022\n\n\002id\030\001 \001(\t\022\014\n\004name" +
+      "\030\002 \001(\t\022\016\n\006fileId\030\003 \001(\t\022\017\n\007fileKey\030\004 \001(\t\022",
+      "\020\n\010fileName\030\005 \001(\t\022.\n\006status\030\006 \001(\0162\036.sona" +
+      "rqube.ws.tests.TestStatus\022\024\n\014durationInM" +
+      "s\030\007 \001(\003\022\024\n\014coveredLines\030\010 \001(\005\022\017\n\007message" +
+      "\030\t \001(\t\022\022\n\nstacktrace\030\n \001(\t*9\n\nTestStatus" +
+      "\022\006\n\002OK\020\001\022\013\n\007FAILURE\020\002\022\t\n\005ERROR\020\003\022\013\n\007SKIP" +
+      "PED\020\004B\035\n\020org.sonarqube.wsB\007WsTestsH\001"
+    };
+    com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
+        new com.google.protobuf.Descriptors.FileDescriptor.    InternalDescriptorAssigner() {
+          public com.google.protobuf.ExtensionRegistry assignDescriptors(
+              com.google.protobuf.Descriptors.FileDescriptor root) {
+            descriptor = root;
+            return null;
+          }
+        };
+    com.google.protobuf.Descriptors.FileDescriptor
+      .internalBuildGeneratedFileFrom(descriptorData,
+        new com.google.protobuf.Descriptors.FileDescriptor[] {
+          org.sonarqube.ws.Common.getDescriptor(),
+        }, assigner);
+    internal_static_sonarqube_ws_tests_ListResponse_descriptor =
+      getDescriptor().getMessageTypes().get(0);
+    internal_static_sonarqube_ws_tests_ListResponse_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+        internal_static_sonarqube_ws_tests_ListResponse_descriptor,
+        new java.lang.String[] { "Paging", "Tests", });
+    internal_static_sonarqube_ws_tests_CoveredFilesResponse_descriptor =
+      getDescriptor().getMessageTypes().get(1);
+    internal_static_sonarqube_ws_tests_CoveredFilesResponse_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+        internal_static_sonarqube_ws_tests_CoveredFilesResponse_descriptor,
+        new java.lang.String[] { "Files", });
+    internal_static_sonarqube_ws_tests_CoveredFilesResponse_CoveredFile_descriptor =
+      internal_static_sonarqube_ws_tests_CoveredFilesResponse_descriptor.getNestedTypes().get(0);
+    internal_static_sonarqube_ws_tests_CoveredFilesResponse_CoveredFile_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+        internal_static_sonarqube_ws_tests_CoveredFilesResponse_CoveredFile_descriptor,
+        new java.lang.String[] { "Id", "Key", "LongName", "CoveredLines", });
+    internal_static_sonarqube_ws_tests_Test_descriptor =
+      getDescriptor().getMessageTypes().get(2);
+    internal_static_sonarqube_ws_tests_Test_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+        internal_static_sonarqube_ws_tests_Test_descriptor,
+        new java.lang.String[] { "Id", "Name", "FileId", "FileKey", "FileName", "Status", "DurationInMs", "CoveredLines", "Message", "Stacktrace", });
+    org.sonarqube.ws.Common.getDescriptor();
+  }
+
+  // @@protoc_insertion_point(outer_class_scope)
+}
diff --git a/sonar-ws/src/main/protobuf/ws-tests.proto b/sonar-ws/src/main/protobuf/ws-tests.proto
new file mode 100644 (file)
index 0000000..037e61a
--- /dev/null
@@ -0,0 +1,53 @@
+// SonarQube, open source software quality management tool.
+// Copyright (C) 2008-2015 SonarSource
+// mailto:contact AT sonarsource DOT com
+//
+// SonarQube is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 3 of the License, or (at your option) any later version.
+//
+// SonarQube is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this program; if not, write to the Free Software Foundation,
+// Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+syntax = "proto2";
+
+package sonarqube.ws.tests;
+
+import "ws-commons.proto";
+
+option java_package = "org.sonarqube.ws";
+option java_outer_classname = "WsTests";
+option optimize_for = SPEED;
+
+// WS api/tests/list
+message ListResponse {
+  optional sonarqube.ws.commons.Paging paging = 1;
+  repeated Test tests = 2;
+}
+
+message Test {
+  optional string id = 1;
+  optional string name = 2;
+  optional string fileId = 3;
+  optional string fileKey = 4;
+  optional string fileName = 5;
+  optional TestStatus status = 6;
+  optional int64 durationInMs = 7;
+  optional int32 coveredLines = 8;
+  optional string message = 9;
+  optional string stacktrace = 10;
+}
+
+enum TestStatus {
+  OK = 1;
+  FAILURE = 2;
+  ERROR = 3;
+  SKIPPED = 4;
+}