📄 testlinkvalidation.java
字号:
testLinkValidation(MODE_XMLCONTENT_HTML_ONLY);
}
/**
* Test link validation for xml pages.<p>
*
* @throws Throwable if something goes wrong
*/
public void testLinkValidationXmlPages() throws Throwable {
echo("Testing link validation for xml pages");
testLinkValidation(MODE_XMLPAGE);
}
/**
* Deletes a resource and publish it.<p>
*
* @param cms the cms context
* @param resName the resource name
* @param report the report
*
* @throws Exception if something goes wrong
*/
private void delete(CmsObject cms, String resName, CmsShellReport report) throws Exception {
cms.lockResource(resName);
cms.deleteResource(resName, CmsResource.DELETE_REMOVE_SIBLINGS);
cms.unlockResource(resName);
OpenCms.getPublishManager().publishResource(cms, resName, true, report);
OpenCms.getPublishManager().waitWhileRunning();
}
/**
* Restores the first version of a resource.<p>
*
* @param cms the cms context
* @param resource the resource
* @param report the report
*
* @throws Exception if something goes wrong
*/
private void restore(CmsObject cms, CmsResource resource, CmsShellReport report) throws Exception {
String resName = cms.getRequestContext().getSitePath(resource);
// restore the first historical resource
cms.importResource(resName, resource, "import".getBytes(), null);
List historicalVersions = cms.readAllAvailableVersions(resName);
I_CmsHistoryResource history = (I_CmsHistoryResource)historicalVersions.get(historicalVersions.size() - 1);
cms.restoreResourceVersion(history.getStructureId(), history.getVersion());
cms.unlockResource(resName);
OpenCms.getPublishManager().publishResource(cms, resName, true, report);
OpenCms.getPublishManager().waitWhileRunning();
cms.lockResource(resName);
}
/**
* Sets the content of a xmlcontent resource.<p>
*
* @param cms the cms context
* @param filename the resource name
* @param link1 the 1st vfs file reference to set
* @param link2 the 2nd vfs file reference to set
*
* @throws CmsException if something goes wrong
*/
private void setXmlContentFileRef(CmsObject cms, String filename, String link1, String link2) throws CmsException {
CmsResource res = cms.readResource(filename);
CmsFile file = cms.readFile(res);
CmsXmlContent content = CmsXmlContentFactory.unmarshal(cms, file);
if (!content.hasValue("Homepage", Locale.ENGLISH, 0) && (link1 != null)) {
content.addValue(cms, "Homepage", Locale.ENGLISH, 0);
}
if (link1 != null) {
content.getValue("Homepage", Locale.ENGLISH, 0).setStringValue(cms, link1);
} else {
if (content.hasValue("Homepage", Locale.ENGLISH, 0)) {
content.removeValue("Homepage", Locale.ENGLISH, 0);
}
}
if (!content.hasValue("Homepage", Locale.ENGLISH, 1) && (link2 != null)) {
content.addValue(cms, "Homepage", Locale.ENGLISH, 1);
}
if (link2 != null) {
content.getValue("Homepage", Locale.ENGLISH, 1).setStringValue(cms, link2);
} else {
if (content.hasValue("Homepage", Locale.ENGLISH, 1)) {
content.removeValue("Homepage", Locale.ENGLISH, 1);
}
}
file.setContents(content.marshal());
cms.lockResource(filename);
cms.writeFile(file);
}
/**
* Sets the content of a xmlcontent resource.<p>
*
* @param cms the cms context
* @param filename the resource name
* @param html the content to set in the text field
*
* @throws CmsException if something goes wrong
*/
private void setXmlContentHtml(CmsObject cms, String filename, String html) throws CmsException {
CmsResource res = cms.readResource(filename);
CmsFile file = cms.readFile(res);
CmsXmlContent content = CmsXmlContentFactory.unmarshal(cms, file);
if (!content.hasValue("Text", Locale.ENGLISH, 0)) {
content.addValue(cms, "Text", Locale.ENGLISH, 0);
}
content.getValue("Text", Locale.ENGLISH, 0).setStringValue(cms, html);
file.setContents(content.marshal());
cms.lockResource(filename);
cms.writeFile(file);
}
/**
* Test the link validation for different resource types.<p>
*
* @param mode the mode:
* <code>0</code> for hmlpage,
* <code>1</code> for xmlcontent with html and file ref,
* <code>2</code> for xmlcontent with html only,
* <code>3</code> for xmlcontent with file ref only
*
* @throws Exception if something goes wrong
*/
private void testLinkValidation(int mode) throws Exception {
CmsObject cms = getCmsObject();
String filename1, filename2, filename3, filename4, filename5, filename6, filename7, filename8;
switch (mode) {
case MODE_XMLCONTENT_BOTH:
filename1 = "/xmlcontent1.html";
filename2 = "/xmlcontent2.html";
filename3 = "/xmlcontent3.html";
filename4 = "/xmlcontent4.html";
filename5 = "/xmlcontent5.html";
filename6 = "/xmlcontent6.html";
filename7 = "/xmlcontent7.html";
filename8 = "/xmlcontent8.html";
break;
case MODE_XMLCONTENT_HTML_ONLY:
filename1 = "/xmlcontent1html.html";
filename2 = "/xmlcontent2html.html";
filename3 = "/xmlcontent3html.html";
filename4 = "/xmlcontent4html.html";
filename5 = "/xmlcontent5html.html";
filename6 = "/xmlcontent6html.html";
filename7 = "/xmlcontent7html.html";
filename8 = "/xmlcontent8html.html";
break;
case MODE_XMLCONTENT_FILEREF_ONLY:
filename1 = "/xmlcontent1ref.html";
filename2 = "/xmlcontent2ref.html";
filename3 = "/xmlcontent3ref.html";
filename4 = "/xmlcontent4ref.html";
filename5 = "/xmlcontent5ref.html";
filename6 = "/xmlcontent6ref.html";
filename7 = "/xmlcontent7ref.html";
filename8 = "/xmlcontent8ref.html";
break;
default:
filename1 = "/xmlpage1.html";
filename2 = "/xmlpage2.html";
filename3 = "/xmlpage3.html";
filename4 = "/xmlpage4.html";
filename5 = "/xmlpage5.html";
filename6 = "/xmlpage6.html";
filename7 = "/xmlpage7.html";
filename8 = "/xmlpage8.html";
break;
}
// create files
int type;
if (mode > MODE_XMLPAGE) {
type = OpenCmsTestCase.ARTICLE_TYPEID; // article
} else {
type = CmsResourceTypeXmlPage.getStaticTypeId();
}
CmsResource res1 = cms.createResource(filename1, type);
CmsResource res2 = cms.createResource(filename2, type);
CmsResource res3 = cms.createResource(filename3, type);
CmsResource res4 = cms.createResource(filename4, type);
CmsResource res5 = cms.createResource(filename5, type);
CmsResource res6 = cms.createResource(filename6, type);
CmsResource res7 = cms.createResource(filename7, type);
// set the content
String content1 = "<a href='" + filename2 + "'>file2</a><br><a href='" + filename3 + "'>file3</a>";
String content4 = "<a href='" + filename2 + "'>file2</a>";
String content5 = "<a href='" + filename6 + "'>file6</a>";
String content6 = "<a href='" + filename5 + "'>file5</a>";
CmsRelationType relType1 = null;
switch (mode) {
case MODE_XMLCONTENT_BOTH:
setXmlContent(cms, filename1, content1, filename2);
setXmlContent(cms, filename4, content4, filename2);
setXmlContent(cms, filename5, content5, filename6);
setXmlContent(cms, filename6, content6, filename5);
relType1 = CmsRelationType.HYPERLINK;
break;
case MODE_XMLCONTENT_HTML_ONLY:
setXmlContentHtml(cms, filename1, content1);
setXmlContentHtml(cms, filename4, content4);
setXmlContentHtml(cms, filename5, content5);
setXmlContentHtml(cms, filename6, content6);
relType1 = CmsRelationType.HYPERLINK;
break;
case MODE_XMLCONTENT_FILEREF_ONLY:
setXmlContentFileRef(cms, filename1, filename2, filename3);
setXmlContentFileRef(cms, filename4, filename2, null);
setXmlContentFileRef(cms, filename5, filename6, null);
setXmlContentFileRef(cms, filename6, filename5, null);
relType1 = CmsRelationType.XML_WEAK;
break;
default:
setContent(cms, filename1, content1);
setContent(cms, filename4, content4);
setContent(cms, filename5, content5);
setContent(cms, filename6, content6);
relType1 = CmsRelationType.HYPERLINK;
break;
}
// check the links before publishing
CmsShellReport report = new CmsShellReport(cms.getRequestContext().getLocale());
cms.unlockProject(cms.getRequestContext().currentProject().getUuid());
Map validation = OpenCms.getPublishManager().validateRelations(
cms,
OpenCms.getPublishManager().getPublishList(cms, Collections.singletonList(res1), false),
report);
assertEquals(validation.size(), 1);
assertTrue(validation.keySet().contains(cms.getRequestContext().addSiteRoot(filename1)));
List brokenLinks = (List)validation.get(cms.getRequestContext().addSiteRoot(filename1));
assertEquals(brokenLinks.size(), (mode == MODE_XMLCONTENT_BOTH ? 3 : 2));
assertTrue(brokenLinks.contains(new CmsRelation(res1, res2, relType1)));
assertTrue(brokenLinks.contains(new CmsRelation(res1, res3, relType1)));
if (mode == MODE_XMLCONTENT_BOTH) {
assertTrue(brokenLinks.contains(new CmsRelation(res1, res2, CmsRelationType.XML_WEAK)));
}
validation = OpenCms.getPublishManager().validateRelations(
cms,
OpenCms.getPublishManager().getPublishList(cms, Collections.singletonList(res2), false),
report);
assertTrue(validation.isEmpty());
validation = OpenCms.getPublishManager().validateRelations(
cms,
OpenCms.getPublishManager().getPublishList(cms, Collections.singletonList(res3), false),
report);
assertTrue(validation.isEmpty());
validation = OpenCms.getPublishManager().validateRelations(
cms,
OpenCms.getPublishManager().getPublishList(cms, Collections.singletonList(res4), false),
report);
assertEquals(validation.size(), 1);
assertTrue(validation.keySet().contains(cms.getRequestContext().addSiteRoot(filename4)));
brokenLinks = (List)validation.get(cms.getRequestContext().addSiteRoot(filename4));
assertEquals(brokenLinks.size(), (mode == MODE_XMLCONTENT_BOTH ? 2 : 1));
assertTrue(brokenLinks.contains(new CmsRelation(res4, res2, relType1)));
if (mode == MODE_XMLCONTENT_BOTH) {
assertTrue(brokenLinks.contains(new CmsRelation(res4, res2, CmsRelationType.XML_WEAK)));
}
validation = OpenCms.getPublishManager().validateRelations(
cms,
OpenCms.getPublishManager().getPublishList(cms, Collections.singletonList(res5), false),
report);
assertEquals(validation.size(), 1);
assertTrue(validation.keySet().contains(cms.getRequestContext().addSiteRoot(filename5)));
brokenLinks = (List)validation.get(cms.getRequestContext().addSiteRoot(filename5));
assertEquals(brokenLinks.size(), (mode == MODE_XMLCONTENT_BOTH ? 2 : 1));
assertTrue(brokenLinks.contains(new CmsRelation(res5, res6, relType1)));
if (mode == MODE_XMLCONTENT_BOTH) {
assertTrue(brokenLinks.contains(new CmsRelation(res5, res6, CmsRelationType.XML_WEAK)));
}
validation = OpenCms.getPublishManager().validateRelations(
cms,
OpenCms.getPublishManager().getPublishList(cms, Collections.singletonList(res6), false),
report);
assertEquals(validation.size(), 1);
assertTrue(validation.keySet().contains(cms.getRequestContext().addSiteRoot(filename6)));
brokenLinks = (List)validation.get(cms.getRequestContext().addSiteRoot(filename6));
assertEquals(brokenLinks.size(), (mode == MODE_XMLCONTENT_BOTH ? 2 : 1));
assertTrue(brokenLinks.contains(new CmsRelation(res6, res5, relType1)));
if (mode == MODE_XMLCONTENT_BOTH) {
assertTrue(brokenLinks.contains(new CmsRelation(res6, res5, CmsRelationType.XML_WEAK)));
}
validation = OpenCms.getPublishManager().validateRelations(
cms,
OpenCms.getPublishManager().getPublishList(cms, Collections.singletonList(res7), false),
report);
assertTrue(validation.isEmpty());
List res56 = new ArrayList();
res56.add(res5);
res56.add(res6);
validation = OpenCms.getPublishManager().validateRelations(
cms,
OpenCms.getPublishManager().getPublishList(cms, res56, false),
report);
assertTrue(validation.isEmpty());
List res123 = new ArrayList();
res123.add(res1);
res123.add(res2);
res123.add(res3);
validation = OpenCms.getPublishManager().validateRelations(
cms,
OpenCms.getPublishManager().getPublishList(cms, res123, false),
report);
assertTrue(validation.isEmpty());
List resAll = new ArrayList();
resAll.add(res1);
resAll.add(res2);
resAll.add(res3);
resAll.add(res4);
resAll.add(res5);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -