PubsubClient implements Closeable { public static ProjectPath projectPathFromId(String projectId) { return new ProjectPath(String.format("projects/%s", projectId)); }  static ProjectPath projectPathFromPath(String path); static ProjectPath projectPathFromId(String projectId); static SubscriptionPath subscriptionPathFromPath(String path); static SubscriptionPath subscriptionPathFromName(
      String projectId, String subscriptionName); static TopicPath topicPathFromPath(String path); static TopicPath topicPathFromName(String projectId, String topicName); abstract int publish(TopicPath topic, List<OutgoingMessage> outgoingMessages); abstract List<IncomingMessage> pull(
      long requestTimeMsSinceEpoch,
      SubscriptionPath subscription,
      int batchSize,
      boolean returnImmediately); abstract void acknowledge(SubscriptionPath subscription, List<String> ackIds); abstract void modifyAckDeadline(
      SubscriptionPath subscription, List<String> ackIds, int deadlineSeconds); abstract void createTopic(TopicPath topic); abstract void deleteTopic(TopicPath topic); abstract List<TopicPath> listTopics(ProjectPath project); abstract void createSubscription(
      TopicPath topic, SubscriptionPath subscription, int ackDeadlineSeconds); SubscriptionPath createRandomSubscription(
      ProjectPath project, TopicPath topic, int ackDeadlineSeconds); abstract void deleteSubscription(SubscriptionPath subscription); abstract List<SubscriptionPath> listSubscriptions(ProjectPath project, TopicPath topic); abstract int ackDeadlineSeconds(SubscriptionPath subscription); abstract boolean isEOF();  }
@Test public void projectPathFromIdWellFormed() { ProjectPath path = PubsubClient.projectPathFromId("test"); assertEquals("projects/test", path.getPath()); }