CreateXml() private method

private CreateXml ( ) : System.Xml.Linq.XElement
return System.Xml.Linq.XElement
        internal override XElement CreateXml()
        {
            XElement xRoot;

            if (Set == false)
            {
                xRoot = new XElement(XmlConstants.UserVariable, Name);
                Set   = true;
                XmlParserTempProjectHelper.currentVariableNum++;

                ObjectNum   = XmlParserTempProjectHelper.currentObjectNum;
                ScriptNum   = XmlParserTempProjectHelper.currentScriptNum;
                BrickNum    = XmlParserTempProjectHelper.currentBrickNum;
                VariableNum = XmlParserTempProjectHelper.currentVariableNum;
            }
            else if (Set)
            {
                XmlUserVariableReference userVariableReference = new XmlUserVariableReference();
                userVariableReference.UserVariable = this;
                userVariableReference.LoadReference();
                xRoot = userVariableReference.CreateXml();
            }
            else
            {
                xRoot = new XElement("XmlUserVarialbe.cs Error");
            }

            return(xRoot);
        }
        public void XmlObjectUservariableReferenceTest()
        {
            XmlProgram programm = new XmlProgram()
            {
                SpriteList = new XmlSpriteList()
                {
                    Sprites = new List<XmlSprite>(),
                },
                VariableList = new XmlVariableList()
                {
                    ObjectVariableList = new XmlObjectVariableList()
                    {

                    }
                }
            };

            TextReader sr = new StringReader("<objectList>" +
                                            "  <object name=\"Hintergrund\">" +
                                            "  </object>" +
                                            "  <object name=\"FlaPacMan\">" +
                                            "  <scriptList>" +
                                            "	<script type=\"BroadcastScript\">" +
                                            "     <brickList>" +
                                            "		<brick type=\"SetVariableBrick\">" +
                                            "            <formulaList>" +
                                            "              <formula category=\"VARIABLE\">" +
                                            "                <type>NUMBER</type>" +
                                            "                <value>1</value>" +
                                            "              </formula>" +
                                            "            </formulaList>" +
                                            "            <userVariable>paclives</userVariable>" +
                                            "          </brick>" +
                                            "          <brick type=\"SetVariableBrick\">" +
                                            "            <formulaList>" +
                                            "              <formula category=\"VARIABLE\">" +
                                            "                <type>NUMBER</type>" +
                                            "                <value>0.0</value>" +
                                            "              </formula>" +
                                            "            </formulaList>" +
                                            "            <userVariable>change anim</userVariable>" +
                                            "          </brick>" +
                                            "          <brick type=\"SetVariableBrick\">" +
                                            "            <formulaList>" +
                                            "              <formula category=\"VARIABLE\">" +
                                            "                <type>NUMBER</type>" +
                                            "                <value>1</value>" +
                                            "              </formula>" +
                                            "            </formulaList>" +
                                            "            <userVariable>animframe</userVariable>" +
                                            "          </brick>" +
                                            "       </brickList>" +
                                            "     </script>" +
                                            "   </scriptList>" +
                                            "  </object>" +
                                            "  <object name =\"handmade referenceobject\">" +
                                            "  <scriptList>" +
                                            "	<script type=\"BroadcastScript\">" +
                                            "     <brickList>" +
                                            "       <brick type =\"ChangeVariableBrick\">" +
                                            "            <formulaList>" +
                                            "              <formula category=\"VARIABLE_CHANGE\">" +
                                            "                <type>NUMBER</type>" +
                                            "                <value>7</value>" +
                                            "              </formula>" +
                                            "            </formulaList>" +
                                            "            <userVariable reference=\"../../../../../../object[2]/scriptList/script/brickList/brick[3]/userVariable\" />" +
                                            "       </brick>" +
                                            "      </brickList > " +
                                            "     </script>" +
                                            "   </scriptList>" +
                                            "  </object>" + 
                                            "</objectList>");
            var objectList = XElement.Load(sr);

            programm.SpriteList.LoadFromXml(objectList);
            
            XmlParserTempProjectHelper.Program = programm;

            //change these 3 to get differnt deep references as you are specifying the "iterator" in the imaginary XML-Docucment
            XmlParserTempProjectHelper.currentObjectNum = 3; 
            XmlParserTempProjectHelper.currentBrickNum = 1;
            XmlParserTempProjectHelper.currentVariableNum = 1;

            //the variable you wanna reference to from the position of the "iterator"  - ! it has to exist in the above XML-snippet but you can also modify this if you know what you are doing! 
            var userVariableRefTest = new XmlUserVariableReference(); 
            userVariableRefTest.UserVariable = ((XmlSetVariableBrick) programm.SpriteList.Sprites[1].Scripts.Scripts[0].Bricks.Bricks[2]).UserVariable;
            userVariableRefTest.UserVariable.ObjectNum = 2;
            userVariableRefTest.UserVariable.ScriptNum = 1;
            userVariableRefTest.UserVariable.BrickNum = 3;
            userVariableRefTest.UserVariable.VariableNum = 1;

            String testString = userVariableRefTest.CreateXml().ToString();

            //string of variable reference from xml-snippet
            //be in mind to adapt the deep accordingly to your changes above
            //if you change the refence be in mind that in the Catrobat XML language (at leats until 0.94) counting starts at 1 not at 0 and [1]'s are not shown/written 
            var referenceXElement = objectList.Descendants(XmlConstants.UserVariable).Where(uservar => uservar.HasAttributes).First();
            String referenceString = referenceXElement.ToString();//should be "<userVariable reference=\"../../../../../../object[2]/scriptList/script/brickList/brick[3]/userVariable\" />";
            Assert.AreEqual(referenceString, testString, "XmlObjectUservariableReferenceTest failed at the CreateXML part");

            var userVariableRefLoaded = new XmlUserVariableReference();
            userVariableRefLoaded.LoadFromXml(referenceXElement);
            userVariableRefLoaded.UserVariable.ObjectNum = 2;
            userVariableRefLoaded.UserVariable.ScriptNum = 1;
            userVariableRefLoaded.UserVariable.BrickNum = 3;
            userVariableRefLoaded.UserVariable.VariableNum = 1;

            Assert.AreEqual(userVariableRefLoaded.UserVariable, userVariableRefTest.UserVariable, "XmlObjectUservariableReferenceTest failed at the LoadXML part");
            


        }
        internal override XElement CreateXml()
        {
            XElement xRoot;

            if (Set == false)
            {
                xRoot = new XElement(XmlConstants.UserVariable, Name);
                Set = true;
                XmlParserTempProjectHelper.currentVariableNum++;

                ObjectNum = XmlParserTempProjectHelper.currentObjectNum;
                ScriptNum = XmlParserTempProjectHelper.currentScriptNum;
                BrickNum = XmlParserTempProjectHelper.currentBrickNum;
                VariableNum = XmlParserTempProjectHelper.currentVariableNum;

            }
            else if(Set)
            {
                XmlUserVariableReference userVariableReference = new XmlUserVariableReference();
                userVariableReference.UserVariable = this;
                userVariableReference.LoadReference();
                xRoot = userVariableReference.CreateXml();
            }
            else
                xRoot = new XElement("XmlUserVarialbe.cs Error");

            return xRoot;
        }