public void SerializeEmptyCookbook()
        {
            // arrange
            var ns = new XmlSerializerNamespaces();
            ns.Add("", "");
            var s = new XmlSerializer(typeof(Cookbook));
            var cookbook = new Cookbook { Version = 1 };

            // act
            string result = null;
            using (var writer = new Utf8StringWriter())
            {
                s.Serialize(writer, cookbook, ns);
                result = writer.GetStringBuilder().ToString();
            }

            // assert
            Assert.AreEqual(
            @"<?xml version=""1.0"" encoding=""utf-8""?>
            <cookbook version=""1"" />"
            , result);
        }
        public void SerializeSingleRecipe()
        {
            // arrange
            var ns = new XmlSerializerNamespaces();
            ns.Add("", "");
            var s = new XmlSerializer(typeof(Cookbook));
            var cookbook = new Cookbook { Version = 1 };
            cookbook.Recipes.Add(
                new Recipe
                {
                    Title = "My recipe",
                    PrepTime = "15 min",
                    CookTime = "20 min",
                    Categories = "fish",
                    Quantity = "4",
                    ImagePath = @"/mnt/sdcard/MyCookBook/images/recipe_img.png",
                    SourceUri = @"http://www.recipeurl",
                    Comments = "Your comments",
                    TextLines = new List<string>
                    {
                        @"Step 1",
                        @"Step 2",
                    },
                    Ingredients = new List<Ingredient>
                    {
                        new Ingredient { NameAndAmount = "Ingredient 1" },
                        new Ingredient { NameAndAmount = "Ingredient 2" },
                    }
                }
            );

            // act
            string result = null;
            using (var writer = new Utf8StringWriter())
            {
                s.Serialize(writer, cookbook, ns);
                result = writer.GetStringBuilder().ToString();
            }

            // assert
            Assert.AreEqual(
            @"<?xml version=""1.0"" encoding=""utf-8""?>
            <cookbook version=""1"">
              <recipe>
            <title>My recipe</title>
            <preptime>15 min</preptime>
            <cooktime>20 min</cooktime>
            <ingredient>
              <li>Ingredient 1</li>
              <li>Ingredient 2</li>
            </ingredient>
            <recipetext>
              <li>Step 1</li>
              <li>Step 2</li>
            </recipetext>
            <url>http://www.recipeurl</url>
            <imagepath>/mnt/sdcard/MyCookBook/images/recipe_img.png</imagepath>
            <quantity>4</quantity>
            <comments>Your comments</comments>
            <category>fish</category>
              </recipe>
            </cookbook>"
            , result);
        }
        public void SerializeTwoRecipes()
        {
            // arrange
            var ns = new XmlSerializerNamespaces();
            ns.Add("", "");
            var s = new XmlSerializer(typeof(Cookbook));
            var cookbook = new Cookbook { Version = 1 };
            cookbook.Recipes.Add(
                new Recipe
                {
                    Title = "My recipe",
                    PrepTime = "15 min",
                    CookTime = "20 min",
                    Categories = "fish",
                    Quantity = "4",
                    ImagePath = @"/mnt/sdcard/MyCookBook/images/recipe_img.png",
                    SourceUri = @"http://www.recipeurl",
                    Comments = "Your comments",
                    TextLines = new List<string>
                    {
                        @"Step 1",
                        @"Step 2",
                    },
                    Ingredients = new List<Ingredient>
                    {
                        new Ingredient { NameAndAmount = "Ingredient 1" },
                        new Ingredient { NameAndAmount = "Ingredient 2" },
                    }
                }
            );
            cookbook.Recipes.Add(
                new Recipe
                {
                    Title = "Crepes",
                    PrepTime = "10 min",
                    CookTime = "20 min",
                    Categories = "breakfast",
                    Quantity = string.Empty,
                    ImagePath = @"/mnt/sdcard/MyCookBook/images/crepes.png",
                    SourceUri = string.Empty,
                    Comments = string.Empty,
                    TextLines = new List<string>
                    {
                        @"Pour the milk into the flour. Stir.",
                        @"Add the oil, the beaten eggs and the sugar. Stir again.",
                        @"Let the batter rest for 2 hours. The batter must be fluid. If not, add a little more milk.",
                        string.Empty,
                        @"Take a frying pan, oil it and pour a small amount of batter and spread it on the bottom. Cook it on one side, then the other.",
                        @"The ""French Crepes"" must be very thin.",
                        @"You can put butter or sugar or jelly or melted chocolate on them.",
                    },
                    Ingredients = new List<Ingredient>
                                {
                                    new Ingredient { NameAndAmount = "1 1/2 c. flour" },
                                    new Ingredient { NameAndAmount = "2 c. milk" },
                                    new Ingredient { NameAndAmount = "2 eggs" },
                                    new Ingredient { NameAndAmount = "1 1/2 tbsp. oil" },
                                    new Ingredient { NameAndAmount = "1 tbsp. sugar" },
                                    new Ingredient { NameAndAmount = "Little salt melted" },
                                }
                }
            );

            // act
            string result = null;
            using (var writer = new Utf8StringWriter())
            {
                s.Serialize(writer, cookbook, ns);
                result = writer.GetStringBuilder().ToString();
            }

            // assert
            Assert.AreEqual(
            @"<?xml version=""1.0"" encoding=""utf-8""?>
            <cookbook version=""1"">
              <recipe>
            <title>My recipe</title>
            <preptime>15 min</preptime>
            <cooktime>20 min</cooktime>
            <ingredient>
              <li>Ingredient 1</li>
              <li>Ingredient 2</li>
            </ingredient>
            <recipetext>
              <li>Step 1</li>
              <li>Step 2</li>
            </recipetext>
            <url>http://www.recipeurl</url>
            <imagepath>/mnt/sdcard/MyCookBook/images/recipe_img.png</imagepath>
            <quantity>4</quantity>
            <comments>Your comments</comments>
            <category>fish</category>
              </recipe>
              <recipe>
            <title>Crepes</title>
            <preptime>10 min</preptime>
            <cooktime>20 min</cooktime>
            <ingredient>
              <li>1 1/2 c. flour</li>
              <li>2 c. milk</li>
              <li>2 eggs</li>
              <li>1 1/2 tbsp. oil</li>
              <li>1 tbsp. sugar</li>
              <li>Little salt melted</li>
            </ingredient>
            <recipetext>
              <li>Pour the milk into the flour. Stir.</li>
              <li>Add the oil, the beaten eggs and the sugar. Stir again.</li>
              <li>Let the batter rest for 2 hours. The batter must be fluid. If not, add a little more milk.</li>
              <li />
              <li>Take a frying pan, oil it and pour a small amount of batter and spread it on the bottom. Cook it on one side, then the other.</li>
              <li>The ""French Crepes"" must be very thin.</li>
              <li>You can put butter or sugar or jelly or melted chocolate on them.</li>
            </recipetext>
            <url />
            <imagepath>/mnt/sdcard/MyCookBook/images/crepes.png</imagepath>
            <quantity />
            <comments />
            <category>breakfast</category>
              </recipe>
            </cookbook>"
            , result);
        }