You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

ManifestParserTest.java 5.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. /*
  2. * Copyright (C) 2015, Google Inc. and others
  3. *
  4. * This program and the accompanying materials are made available under the
  5. * terms of the Eclipse Distribution License v. 1.0 which is available at
  6. * https://www.eclipse.org/org/documents/edl-v10.php.
  7. *
  8. * SPDX-License-Identifier: BSD-3-Clause
  9. */
  10. package org.eclipse.jgit.gitrepo;
  11. import static java.nio.charset.StandardCharsets.UTF_8;
  12. import static org.junit.Assert.assertEquals;
  13. import static org.junit.Assert.assertTrue;
  14. import static org.junit.Assert.fail;
  15. import java.io.ByteArrayInputStream;
  16. import java.io.IOException;
  17. import java.net.URI;
  18. import java.util.HashSet;
  19. import java.util.Set;
  20. import java.util.stream.Collectors;
  21. import java.util.stream.Stream;
  22. import org.junit.Test;
  23. import org.xml.sax.SAXException;
  24. public class ManifestParserTest {
  25. @Test
  26. public void testManifestParser() throws Exception {
  27. String baseUrl = "https://git.google.com/";
  28. StringBuilder xmlContent = new StringBuilder();
  29. Set<String> results = new HashSet<>();
  30. xmlContent.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n")
  31. .append("<manifest>")
  32. .append("<remote name=\"remote1\" fetch=\".\" />")
  33. .append("<default revision=\"master\" remote=\"remote1\" />")
  34. .append("<project path=\"foo\" name=\"")
  35. .append("foo")
  36. .append("\" groups=\"a,test\" />")
  37. .append("<project path=\"bar\" name=\"")
  38. .append("bar")
  39. .append("\" groups=\"notdefault\" />")
  40. .append("<project path=\"foo/a\" name=\"")
  41. .append("a")
  42. .append("\" groups=\"a\" />")
  43. .append("<project path=\"b\" name=\"")
  44. .append("b")
  45. .append("\" groups=\"b\" />")
  46. .append("</manifest>");
  47. ManifestParser parser = new ManifestParser(
  48. null, null, "master", baseUrl, null, null);
  49. parser.read(new ByteArrayInputStream(xmlContent.toString().getBytes(UTF_8)));
  50. // Unfiltered projects should have them all.
  51. results.clear();
  52. results.add("foo");
  53. results.add("bar");
  54. results.add("foo/a");
  55. results.add("b");
  56. for (RepoProject proj : parser.getProjects()) {
  57. String msg = String.format(
  58. "project \"%s\" should be included in unfiltered projects",
  59. proj.getPath());
  60. assertTrue(msg, results.contains(proj.getPath()));
  61. results.remove(proj.getPath());
  62. }
  63. assertTrue(
  64. "Unfiltered projects shouldn't contain any unexpected results",
  65. results.isEmpty());
  66. // Filtered projects should have foo & b
  67. results.clear();
  68. results.add("foo");
  69. results.add("b");
  70. for (RepoProject proj : parser.getFilteredProjects()) {
  71. String msg = String.format(
  72. "project \"%s\" should be included in filtered projects",
  73. proj.getPath());
  74. assertTrue(msg, results.contains(proj.getPath()));
  75. results.remove(proj.getPath());
  76. }
  77. assertTrue(
  78. "Filtered projects shouldn't contain any unexpected results",
  79. results.isEmpty());
  80. }
  81. @Test
  82. public void testManifestParserWithMissingFetchOnRemote() throws Exception {
  83. String baseUrl = "https://git.google.com/";
  84. StringBuilder xmlContent = new StringBuilder();
  85. xmlContent.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n")
  86. .append("<manifest>")
  87. .append("<remote name=\"remote1\" />")
  88. .append("<default revision=\"master\" remote=\"remote1\" />")
  89. .append("<project path=\"foo\" name=\"").append("foo")
  90. .append("\" groups=\"a,test\" />")
  91. .append("<project path=\"bar\" name=\"").append("bar")
  92. .append("\" groups=\"notdefault\" />")
  93. .append("<project path=\"foo/a\" name=\"").append("a")
  94. .append("\" groups=\"a\" />")
  95. .append("<project path=\"b\" name=\"").append("b")
  96. .append("\" groups=\"b\" />").append("</manifest>");
  97. ManifestParser parser = new ManifestParser(null, null, "master",
  98. baseUrl, null, null);
  99. try {
  100. parser.read(new ByteArrayInputStream(
  101. xmlContent.toString().getBytes(UTF_8)));
  102. fail("ManifestParser did not throw exception for missing fetch");
  103. } catch (IOException e) {
  104. assertTrue(e.getCause() instanceof SAXException);
  105. assertTrue(e.getCause().getMessage()
  106. .contains("is missing fetch attribute"));
  107. }
  108. }
  109. @Test
  110. public void testRemoveProject() throws Exception {
  111. StringBuilder xmlContent = new StringBuilder();
  112. xmlContent.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n")
  113. .append("<manifest>")
  114. .append("<remote name=\"remote1\" fetch=\".\" />")
  115. .append("<default revision=\"master\" remote=\"remote1\" />")
  116. .append("<project path=\"foo\" name=\"foo\" />")
  117. .append("<project path=\"bar\" name=\"bar\" />")
  118. .append("<remove-project name=\"foo\" />")
  119. .append("<project path=\"foo\" name=\"baz\" />")
  120. .append("</manifest>");
  121. ManifestParser parser = new ManifestParser(null, null, "master",
  122. "https://git.google.com/", null, null);
  123. parser.read(new ByteArrayInputStream(
  124. xmlContent.toString().getBytes(UTF_8)));
  125. assertEquals(Stream.of("bar", "baz").collect(Collectors.toSet()),
  126. parser.getProjects().stream().map(RepoProject::getName)
  127. .collect(Collectors.toSet()));
  128. }
  129. void testNormalize(String in, String want) {
  130. URI got = ManifestParser.normalizeEmptyPath(URI.create(in));
  131. if (!got.toString().equals(want)) {
  132. fail(String.format("normalize(%s) = %s want %s", in, got, want));
  133. }
  134. }
  135. @Test
  136. public void testNormalizeEmptyPath() {
  137. testNormalize("http://a.b", "http://a.b/");
  138. testNormalize("http://a.b/", "http://a.b/");
  139. testNormalize("", "");
  140. testNormalize("a/b", "a/b");
  141. }
  142. }