mirror of
https://github.com/Combodo/iTop.git
synced 2026-04-20 17:18:51 +02:00
N°4569 - Fix collision between existing nodes and saved ones
This commit is contained in:
@@ -288,8 +288,6 @@ class iTopDesignFormat
|
||||
return $this->bStatus;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Does the conversion, eventually in a recursive manner
|
||||
*
|
||||
@@ -976,6 +974,7 @@ class iTopDesignFormat
|
||||
* @param string $sNodeMetaVersion
|
||||
*
|
||||
* @return void
|
||||
* @throws \Exception
|
||||
*/
|
||||
private function RestorePreviousNodes($sNodeMetaVersion)
|
||||
{
|
||||
@@ -993,6 +992,15 @@ class iTopDesignFormat
|
||||
while ($oNode) {
|
||||
$oNextNode = $oNode->nextSibling;
|
||||
if ($oNode->nodeType == XML_ELEMENT_NODE) {
|
||||
// Check for collision
|
||||
$sId = $oNode->getAttribute('id');
|
||||
$sNodeXPath = ($sId != '') ? $oNode->nodeName.'[@id="'.$sId.'"]' : $oNode->nodeName;
|
||||
$sNodeXPath = $sXPath.'/'.$sNodeXPath;
|
||||
$oTarget = $oXPath->query($sNodeXPath)->item(0);
|
||||
if ($oTarget) {
|
||||
// Do not continue migration
|
||||
throw new Exception("Trying to restore an existing node $sNodeXPath from version $sNodeMetaVersion");
|
||||
}
|
||||
// Restore the modification flags
|
||||
$oModifiedNodeList = $oXPath->query('descendant-or-self::*[@_disabled_delta or @_disabled_rename_from]', $oNode);
|
||||
foreach ($oModifiedNodeList as $oModifiedNode) {
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.6">
|
||||
<branding _revision_id="180" _delta="define">
|
||||
<main_logo _revision_id="53">
|
||||
<branding _revision_id="180">
|
||||
<main_logo _revision_id="53" _delta="define">
|
||||
<fileref ref="smile_portal_logo_7417a491754f12f744ac6311525e4db3" _revision_id="116"/>
|
||||
</main_logo>
|
||||
<login_logo _revision_id="53">
|
||||
<login_logo _revision_id="53" _delta="define">
|
||||
<fileref ref="smile_portal_logo_7417a491754f12f744ac6311525e4db3" _revision_id="116"/>
|
||||
</login_logo>
|
||||
<portal_logo _revision_id="53">
|
||||
<portal_logo _revision_id="53" _delta="define">
|
||||
<fileref ref="smile_portal_logo_7417a491754f12f744ac6311525e4db3" _revision_id="116"/>
|
||||
</portal_logo>
|
||||
</branding>
|
||||
|
||||
94
test/setup/iTopDesignFormat/Convert-samples/1.7.input.xml
Normal file
94
test/setup/iTopDesignFormat/Convert-samples/1.7.input.xml
Normal file
@@ -0,0 +1,94 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.7">
|
||||
<branding>
|
||||
<themes>
|
||||
<theme id="test-red" _delta="define">
|
||||
<variables>
|
||||
<variable id="backoffice-environment-banner-background-color">#C53030</variable>
|
||||
<variable id="var1">#C53030</variable>
|
||||
</variables>
|
||||
<imports>
|
||||
<import id="scss-variables">../css/scss-variables.scss</import>
|
||||
<import id="css-variables">../css/css-variables.scss</import>
|
||||
</imports>
|
||||
<stylesheets>
|
||||
<stylesheet id="custom">../css/custom.scss</stylesheet>
|
||||
<stylesheet id="jqueryui">../css/ui-lightness/jqueryui.scss</stylesheet>
|
||||
<stylesheet id="main">../css/main.scss</stylesheet>
|
||||
</stylesheets>
|
||||
</theme>
|
||||
<theme id="light-grey">
|
||||
<variables/>
|
||||
<imports>
|
||||
<import id="css-variables">../css/css-variables.scss</import>
|
||||
</imports>
|
||||
<stylesheets>
|
||||
<stylesheet id="jqueryui">../css/ui-lightness/jqueryui.scss</stylesheet>
|
||||
<stylesheet id="main">../css/light-grey.scss</stylesheet>
|
||||
</stylesheets>
|
||||
</theme>
|
||||
</themes>
|
||||
</branding>
|
||||
<classes>
|
||||
<class id="ClassWithStateButNoLifecycle">
|
||||
<properties>
|
||||
<icon>images/class-with-lifecycle.png</icon>
|
||||
</properties>
|
||||
</class>
|
||||
<class id="ClassWithStateAndLifecycle">
|
||||
<properties>
|
||||
<icon>images/class-with-lifecycle.png</icon>
|
||||
</properties>
|
||||
<lifecycle>
|
||||
<attribute>foo</attribute>
|
||||
</lifecycle>
|
||||
</class>
|
||||
<class id="ClassWithStateAndImage">
|
||||
<properties>
|
||||
<icon>images/class-with-lifecycle.png</icon>
|
||||
</properties>
|
||||
</class>
|
||||
<class id="ClassWithImageOnly">
|
||||
<properties>
|
||||
<icon>images/class-with-lifecycle.png</icon>
|
||||
</properties>
|
||||
</class>
|
||||
<class id="OtherClass">
|
||||
<properties>
|
||||
<icon revisionid="2" _delta="redefine">
|
||||
<fileref ref="company_0faae3b9d86b7c382b2e4cdae570bc3c" revisionid="62"/>
|
||||
</icon>
|
||||
</properties>
|
||||
<fields>
|
||||
<field id="status" xsi:type="AttributeEnum">
|
||||
<always_load_in_tables>true</always_load_in_tables>
|
||||
<values>
|
||||
<value id="new">new</value>
|
||||
<value id="waiting_for_approval">waiting_for_approval</value>
|
||||
</values>
|
||||
</field>
|
||||
<field id="operational_status" xsi:type="AttributeMetaEnum">
|
||||
<values>
|
||||
<value id="ongoing">ongoing</value>
|
||||
<value id="resolved">resolved</value>
|
||||
</values>
|
||||
</field>
|
||||
</fields>
|
||||
</class>
|
||||
</classes>
|
||||
<menus>
|
||||
<menu id="WelcomeMenuLink1" xsi:type="WebPageMenuNode" _delta="define">
|
||||
<rank>100</rank>
|
||||
<parent>WelcomeMenu</parent>
|
||||
<url>$$http://fr.wikipedia.org/</url>
|
||||
<in_new_window>true</in_new_window>
|
||||
</menu>
|
||||
<menu id="RequestManagement" xsi:type="MenuGroup" _delta="define">
|
||||
<rank>30</rank>
|
||||
<enable_stimulus/>
|
||||
</menu>
|
||||
</menus>
|
||||
<branding>
|
||||
<main_logo _delta="define">images/itop-logo.png</main_logo>
|
||||
</branding>
|
||||
</itop_design>
|
||||
@@ -0,0 +1,127 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.0">
|
||||
<branding>
|
||||
<themes>
|
||||
<theme id="test-red" _delta="define">
|
||||
<variables>
|
||||
<variable id="backoffice-environment-banner-background-color">#C53030</variable>
|
||||
<variable id="var1">#C53030</variable>
|
||||
</variables>
|
||||
<imports>
|
||||
<import id="scss-variables">../css/scss-variables.scss</import>
|
||||
</imports>
|
||||
<stylesheets>
|
||||
<stylesheet id="custom">../css/custom.scss</stylesheet>
|
||||
</stylesheets>
|
||||
</theme>
|
||||
<theme id="light-grey" _delta="define">
|
||||
<totally_new_format>
|
||||
bla bla bla
|
||||
</totally_new_format>
|
||||
</theme>
|
||||
</themes>
|
||||
</branding>
|
||||
<classes>
|
||||
<class id="ClassWithStateButNoLifecycle">
|
||||
<properties>
|
||||
<icon>images/class-with-lifecycle.png</icon>
|
||||
</properties>
|
||||
</class>
|
||||
<class id="ClassWithStateAndLifecycle">
|
||||
<properties>
|
||||
<icon>images/class-with-lifecycle.png</icon>
|
||||
</properties>
|
||||
<lifecycle>
|
||||
<attribute>foo</attribute>
|
||||
</lifecycle>
|
||||
</class>
|
||||
<class id="ClassWithStateAndImage">
|
||||
<properties>
|
||||
<icon>images/class-with-lifecycle.png</icon>
|
||||
</properties>
|
||||
</class>
|
||||
<class id="ClassWithImageOnly">
|
||||
<properties>
|
||||
<icon>images/class-with-lifecycle.png</icon>
|
||||
</properties>
|
||||
</class>
|
||||
<class id="OtherClass">
|
||||
<properties>
|
||||
<icon revisionid="2" _delta="redefine">
|
||||
<fileref ref="company_0faae3b9d86b7c382b2e4cdae570bc3c" revisionid="62"/>
|
||||
</icon>
|
||||
</properties>
|
||||
<fields>
|
||||
<field id="status" xsi:type="AttributeEnum">
|
||||
<always_load_in_tables>true</always_load_in_tables>
|
||||
<values>
|
||||
<value id="new">new</value>
|
||||
<value id="waiting_for_approval">waiting_for_approval</value>
|
||||
</values>
|
||||
</field>
|
||||
<field id="operational_status" xsi:type="AttributeMetaEnum">
|
||||
<values>
|
||||
<value id="ongoing">ongoing</value>
|
||||
<value id="resolved">resolved</value>
|
||||
</values>
|
||||
</field>
|
||||
</fields>
|
||||
</class>
|
||||
</classes>
|
||||
<menus>
|
||||
<menu id="WelcomeMenuLink1" xsi:type="WebPageMenuNode" _delta="define">
|
||||
<rank>100</rank>
|
||||
<parent>WelcomeMenu</parent>
|
||||
<url>$$http://fr.wikipedia.org/</url>
|
||||
<in_new_window>true</in_new_window>
|
||||
</menu>
|
||||
<menu id="RequestManagement" xsi:type="MenuGroup" _delta="define">
|
||||
<rank>30</rank>
|
||||
<enable_stimulus/>
|
||||
</menu>
|
||||
</menus>
|
||||
<branding>
|
||||
<main_logo _delta="define">images/itop-logo.png</main_logo>
|
||||
</branding>
|
||||
<meta>
|
||||
<previous_versions>
|
||||
<previous_version id="1.7" _delta="define">
|
||||
<trashed_nodes>
|
||||
<trashed_node id="XXX">
|
||||
<parent_xpath>/itop_design/branding/themes</parent_xpath>
|
||||
<node_tree>
|
||||
<theme id="light-grey">
|
||||
<variables/>
|
||||
<imports>
|
||||
<import id="css-variables">../css/css-variables.scss</import>
|
||||
</imports>
|
||||
<stylesheets>
|
||||
<stylesheet id="jqueryui">../css/ui-lightness/jqueryui.scss</stylesheet>
|
||||
<stylesheet id="main">../css/light-grey.scss</stylesheet>
|
||||
</stylesheets>
|
||||
</theme>
|
||||
</node_tree>
|
||||
</trashed_node>
|
||||
<trashed_node id="XXX">
|
||||
<parent_xpath>/itop_design/branding/themes/theme[@id="test-red"]/imports</parent_xpath>
|
||||
<node_tree>
|
||||
<import id="css-variables">../css/css-variables.scss</import>
|
||||
</node_tree>
|
||||
</trashed_node>
|
||||
<trashed_node id="XXX">
|
||||
<parent_xpath>/itop_design/branding/themes/theme[@id="test-red"]/stylesheets</parent_xpath>
|
||||
<node_tree>
|
||||
<stylesheet id="jqueryui">../css/ui-lightness/jqueryui.scss</stylesheet>
|
||||
</node_tree>
|
||||
</trashed_node>
|
||||
<trashed_node id="XXX">
|
||||
<parent_xpath>/itop_design/branding/themes/theme[@id="test-red"]/stylesheets</parent_xpath>
|
||||
<node_tree>
|
||||
<stylesheet id="main">../css/main.scss</stylesheet>
|
||||
</node_tree>
|
||||
</trashed_node>
|
||||
</trashed_nodes>
|
||||
</previous_version>
|
||||
</previous_versions>
|
||||
</meta>
|
||||
</itop_design>
|
||||
@@ -0,0 +1,182 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.0">
|
||||
<branding>
|
||||
<themes>
|
||||
<theme id="test-red" _delta="define">
|
||||
<variables>
|
||||
<variable id="ibo-page-banner--background-color">#C53030</variable>
|
||||
<variable id="var1">#C53030</variable>
|
||||
</variables>
|
||||
<imports>
|
||||
<import id="scss-variables" xsi:type="utilities">../css/scss-variables.scss</import>
|
||||
</imports>
|
||||
<stylesheets>
|
||||
<stylesheet id="custom">../css/custom.scss</stylesheet>
|
||||
</stylesheets>
|
||||
</theme>
|
||||
<theme id="light-grey" _delta="define">
|
||||
<totally_new_format>
|
||||
bla bla bla
|
||||
</totally_new_format>
|
||||
</theme>
|
||||
</themes>
|
||||
</branding>
|
||||
<classes>
|
||||
<class id="ClassWithStateButNoLifecycle">
|
||||
<properties>
|
||||
<style>
|
||||
<icon>images/class-with-lifecycle.png</icon>
|
||||
</style>
|
||||
<fields_semantic>
|
||||
<state_attribute>foo</state_attribute>
|
||||
</fields_semantic>
|
||||
</properties>
|
||||
</class>
|
||||
<class id="ClassWithStateAndLifecycle">
|
||||
<properties>
|
||||
<style>
|
||||
<icon>images/class-with-lifecycle.png</icon>
|
||||
</style>
|
||||
<fields_semantic>
|
||||
<state_attribute>foo</state_attribute>
|
||||
</fields_semantic>
|
||||
</properties>
|
||||
<lifecycle/>
|
||||
</class>
|
||||
<class id="ClassWithStateAndImage">
|
||||
<properties>
|
||||
<style>
|
||||
<icon>images/class-with-lifecycle.png</icon>
|
||||
</style>
|
||||
<fields_semantic>
|
||||
<state_attribute>foo</state_attribute>
|
||||
<image_attribute>bar</image_attribute>
|
||||
</fields_semantic>
|
||||
</properties>
|
||||
</class>
|
||||
<class id="ClassWithImageOnly">
|
||||
<properties>
|
||||
<style>
|
||||
<icon>images/class-with-lifecycle.png</icon>
|
||||
</style>
|
||||
<fields_semantic>
|
||||
<image_attribute>bar</image_attribute>
|
||||
</fields_semantic>
|
||||
</properties>
|
||||
</class>
|
||||
<class id="OtherClass">
|
||||
<properties>
|
||||
<style>
|
||||
<icon revisionid="2" _delta="redefine">
|
||||
<fileref ref="company_0faae3b9d86b7c382b2e4cdae570bc3c" revisionid="62"/>
|
||||
</icon>
|
||||
<main_color>#4E79A5</main_color>
|
||||
<complementary_color>white</complementary_color>
|
||||
</style>
|
||||
</properties>
|
||||
<fields>
|
||||
<field id="status" xsi:type="AttributeEnum">
|
||||
<always_load_in_tables>true</always_load_in_tables>
|
||||
<values>
|
||||
<value id="new">
|
||||
<code>new</code>
|
||||
<style>
|
||||
<main_color>#2C5382</main_color>
|
||||
<complementary_color>#FFFFFF</complementary_color>
|
||||
<decoration_classes/>
|
||||
</style>
|
||||
</value>
|
||||
<value id="waiting_for_approval">
|
||||
<code>waiting_for_approval</code>
|
||||
</value>
|
||||
</values>
|
||||
<default_style>
|
||||
<main_color>#2B6CB0</main_color>
|
||||
<complementary_color>#FFFFFF</complementary_color>
|
||||
<decoration_classes/>
|
||||
</default_style>
|
||||
</field>
|
||||
<field id="operational_status" xsi:type="AttributeMetaEnum">
|
||||
<values>
|
||||
<value id="ongoing">
|
||||
<code>ongoing</code>
|
||||
<style>
|
||||
<main_color>#2C5382</main_color>
|
||||
<complementary_color>#FFFFFF</complementary_color>
|
||||
<decoration_classes/>
|
||||
</style>
|
||||
</value>
|
||||
<value id="resolved">
|
||||
<code>resolved</code>
|
||||
</value>
|
||||
</values>
|
||||
<default_style>
|
||||
<main_color>#2B6CB0</main_color>
|
||||
<complementary_color>#FFFFFF</complementary_color>
|
||||
<decoration_classes/>
|
||||
</default_style>
|
||||
</field>
|
||||
</fields>
|
||||
</class>
|
||||
</classes>
|
||||
<menus>
|
||||
<menu id="WelcomeMenuLink1" xsi:type="WebPageMenuNode" _delta="define">
|
||||
<rank>100</rank>
|
||||
<parent>WelcomeMenu</parent>
|
||||
<url>$$http://fr.wikipedia.org/</url>
|
||||
<in_new_window>true</in_new_window>
|
||||
</menu>
|
||||
<menu id="RequestManagement" xsi:type="MenuGroup" _delta="define">
|
||||
<rank>30</rank>
|
||||
<enable_stimulus/>
|
||||
<style>
|
||||
<decoration_classes>fas fa-comment-alt</decoration_classes>
|
||||
</style>
|
||||
</menu>
|
||||
</menus>
|
||||
<branding>
|
||||
<main_logo _delta="define">images/itop-logo.png</main_logo>
|
||||
<main_logo_compact _delta="define">images/itop-logo-square.png</main_logo_compact>
|
||||
</branding>
|
||||
<meta>
|
||||
<previous_versions>
|
||||
<previous_version id="1.7" _delta="define">
|
||||
<trashed_nodes>
|
||||
<trashed_node id="1">
|
||||
<parent_xpath>/itop_design/branding/themes</parent_xpath>
|
||||
<node_tree>
|
||||
<theme id="light-grey">
|
||||
<variables/>
|
||||
<imports>
|
||||
<import id="css-variables">../css/css-variables.scss</import>
|
||||
</imports>
|
||||
<stylesheets>
|
||||
<stylesheet id="jqueryui">../css/ui-lightness/jqueryui.scss</stylesheet>
|
||||
<stylesheet id="main">../css/light-grey.scss</stylesheet>
|
||||
</stylesheets>
|
||||
</theme>
|
||||
</node_tree>
|
||||
</trashed_node>
|
||||
<trashed_node id="2">
|
||||
<parent_xpath>/itop_design/branding/themes/theme[@id="test-red"]/imports</parent_xpath>
|
||||
<node_tree>
|
||||
<import id="css-variables">../css/css-variables.scss</import>
|
||||
</node_tree>
|
||||
</trashed_node>
|
||||
<trashed_node id="3">
|
||||
<parent_xpath>/itop_design/branding/themes/theme[@id="test-red"]/stylesheets</parent_xpath>
|
||||
<node_tree>
|
||||
<stylesheet id="jqueryui">../css/ui-lightness/jqueryui.scss</stylesheet>
|
||||
</node_tree>
|
||||
</trashed_node>
|
||||
<trashed_node id="4">
|
||||
<parent_xpath>/itop_design/branding/themes/theme[@id="test-red"]/stylesheets</parent_xpath>
|
||||
<node_tree>
|
||||
<stylesheet id="main">../css/main.scss</stylesheet>
|
||||
</node_tree>
|
||||
</trashed_node>
|
||||
</trashed_nodes>
|
||||
</previous_version>
|
||||
</previous_versions>
|
||||
</meta>
|
||||
</itop_design>
|
||||
@@ -35,11 +35,10 @@ class TestForITopDesignFormatClass extends ItopTestCase
|
||||
*
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function testConvert($sTargetVersion, $sXmlFileName)
|
||||
public function testConvert($sTargetVersion, $sXmlFileName, $iExpectedErrors = 0, $sFirstErrorMessage = '')
|
||||
{
|
||||
$sSamplesRelDirPath = 'Convert-samples/';
|
||||
$sInputXml = $this->GetFileContent($sSamplesRelDirPath.$sXmlFileName.'.input');
|
||||
$sExpectedXml = $this->GetFileContent($sSamplesRelDirPath.$sXmlFileName.'.expected');
|
||||
|
||||
$oInputDocument = new DOMDocument();
|
||||
libxml_clear_errors();
|
||||
@@ -47,24 +46,84 @@ class TestForITopDesignFormatClass extends ItopTestCase
|
||||
$oInputDocument->loadXML($sInputXml);
|
||||
$oInputDocument->formatOutput = true;
|
||||
$oDesignFormat = new iTopDesignFormat($oInputDocument);
|
||||
$oDesignFormat->Convert($sTargetVersion);
|
||||
$sConvertedXml = $oInputDocument->saveXML();
|
||||
$bResult = $oDesignFormat->Convert($sTargetVersion);
|
||||
$aErrors = $oDesignFormat->GetErrors();
|
||||
$this->assertCount($iExpectedErrors, $aErrors);
|
||||
if ($iExpectedErrors > 0) {
|
||||
$this->assertFalse($bResult);
|
||||
$this->assertEquals($sFirstErrorMessage, $aErrors[0]);
|
||||
}
|
||||
|
||||
$sConvertedXml = $oInputDocument->saveXML();
|
||||
// Erase dynamic values
|
||||
$sConvertedXml = preg_replace('@<trashed_node id="\w+"@', '<trashed_node id="XXX"', $sConvertedXml);
|
||||
|
||||
$sExpectedXml = $this->GetFileContent($sSamplesRelDirPath.$sXmlFileName.'.expected');
|
||||
$this->assertEquals($sExpectedXml, $sConvertedXml);
|
||||
}
|
||||
|
||||
public function ConvertProvider()
|
||||
{
|
||||
return [
|
||||
'1.7 to 1.6' => ['1.6', '1.7_to_1.6'],
|
||||
'1.6 to 1.7 2' => ['1.7', '1.6_to_1.7_2'],
|
||||
'1.7 to 1.6 2' => ['1.6', '1.7_to_1.6_2'],
|
||||
'1.7 to 3.0' => ['3.0', '1.7_to_3.0'],
|
||||
'3.0 to 1.7' => ['1.7', '3.0_to_1.7'],
|
||||
'3.0 to 1.7 no previous' => ['1.7', '3.0_to_1.7_no_previous'],
|
||||
'3.0 to 1.7 collision' => ['1.7', '3.0_to_1.7_collision', 1, 'Trying to restore an existing node /itop_design/branding/themes/theme[@id="light-grey"] from version 1.7'],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers iTopDesignFormat::Convert
|
||||
* @dataProvider ConvertBackAndForthProvider
|
||||
*
|
||||
* @param string $sTargetVersion
|
||||
* @param string $sXmlFileName Example "1.7_to_1.6". Corresponding files should exist with the ".input" and ".Expected" suffix
|
||||
*
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function testConvertBackAndForth($sTargetVersion, $sXmlFileName)
|
||||
{
|
||||
$sSamplesRelDirPath = 'Convert-samples/';
|
||||
$sInputXml = $this->GetFileContent($sSamplesRelDirPath.$sXmlFileName.'.input');
|
||||
|
||||
$oInputDocument = new DOMDocument();
|
||||
libxml_clear_errors();
|
||||
$oInputDocument->preserveWhiteSpace = false;
|
||||
$oInputDocument->loadXML($sInputXml);
|
||||
|
||||
$oXPath = new DOMXPath($oInputDocument);
|
||||
$oItopDesignNode = $oXPath->query('/itop_design')->item(0);
|
||||
if (!$oItopDesignNode) {
|
||||
$this->fail('Bad XML format');
|
||||
}
|
||||
$sSourceVersion = $oItopDesignNode->getAttribute('version');
|
||||
|
||||
$oInputDocument->formatOutput = true;
|
||||
$oDesignFormat = new iTopDesignFormat($oInputDocument);
|
||||
$oDesignFormat->Convert($sTargetVersion);
|
||||
$sConvertedXml = $oInputDocument->saveXML();
|
||||
|
||||
// Convert back
|
||||
$oInputDocument = new DOMDocument();
|
||||
libxml_clear_errors();
|
||||
$oInputDocument->preserveWhiteSpace = false;
|
||||
$oInputDocument->loadXML($sConvertedXml);
|
||||
$oInputDocument->formatOutput = true;
|
||||
$oDesignFormat = new iTopDesignFormat($oInputDocument);
|
||||
$oDesignFormat->Convert($sSourceVersion);
|
||||
$sConvertedXml = $oInputDocument->saveXML();
|
||||
|
||||
$this->assertEquals($sInputXml, $sConvertedXml);
|
||||
}
|
||||
|
||||
public function ConvertBackAndForthProvider()
|
||||
{
|
||||
return array(
|
||||
'1.7 to 1.6' => array('1.6', '1.7_to_1.6'),
|
||||
'1.6 to 1.7 2' => array('1.7', '1.6_to_1.7_2'),
|
||||
'1.7 to 1.6 2' => array('1.6', '1.7_to_1.6_2'),
|
||||
'1.7 to 3.0' => array('3.0', '1.7_to_3.0'),
|
||||
'3.0 to 1.7' => array('1.7', '3.0_to_1.7'),
|
||||
'3.0 to 1.7 no previous' => array('1.7', '3.0_to_1.7_no_previous'),
|
||||
'1.6 to 1.7' => array('1.7', '1.6_to_1.7_2'),
|
||||
'1.6 to 3.0' => array('3.0', '1.6_to_1.7_2'),
|
||||
'1.7 to 3.0' => array('3.0', '1.7'),
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user