public void ToCSVStringLayerPropertyTest()
        {
            const TiledMapSave.CSVPropertyType type = TiledMapSave.CSVPropertyType.Layer;
            var target = new TiledMapSave
            {
                Layers = new List<MapLayer> {new MapLayer()
                {
                    properties = new List<property>
                    {
                        new property() {name = "name1", value = "val"},
                        new property() {name = "name2", value = "val2"}
                    },
                    Name="layer1"
                }, new MapLayer()
                    {
                        properties = new List<property>
                        {
                            new property() {name = "name1", value = "val"},
                            new property() {name = "name3", value = "val3"}
                        },
                        Name="layer2"
                    }}
            };

            var expected =
                "Name (required),name2,name1,name3\r\nlayer1,\"val2\",\"val\",\r\nlayer2,,\"val\",\"val3\"\r\n";
            // TODO: Initialize to an appropriate value
            var actual = target.ToCSVString(type, null);
            Assert.AreEqual(expected, actual);

            string layerName = "layer1";
            expected = "Name (required),name2,name1\r\nlayer1,\"val2\",\"val\"\r\n";
            actual = target.ToCSVString(type, layerName);
            Assert.AreEqual(expected, actual);
        }
        public void ToCSVStringTilesetPropertyTest()
        {
            var target = new TiledMapSave
                {
                    tileset = new List<mapTileset>()
                        {
                            new mapTileset
                                {
                                    Firstgid = 1,
                                    Name = "tileset1",
                                    Tiles = new List<mapTilesetTile>
                                        {
                                            new mapTilesetTile
                                                {
                                                    id = 1,
                                                    properties = new List<property>
                                                        {
                                                            new property
                                                                {
                                                                    name = "commonPropertyName",
                                                                    value = "commonPropertyValueTileset1Tile1"
                                                                },
                                                            new property
                                                                {
                                                                    name = "tileset1Tile1PropertyName",
                                                                    value = "tileset1Tile1PropertyValue"
                                                                },
                                                            new property
                                                                {
                                                                    name = "name",
                                                                    value = "tileset1Tile1"
                                                                }
                                                        }
                                                },
                                            new mapTilesetTile
                                                {
                                                    id = 2,
                                                    properties = new List<property>
                                                        {
                                                            new property
                                                                {
                                                                    name = "name",
                                                                    value = "tileset1Tile2"
                                                                },
                                                            new property
                                                                {
                                                                    name = "commonPropertyName",
                                                                    value = "commonPropertyValueTileset1Tile2"
                                                                },
                                                            new property
                                                                {
                                                                    name = "tileset1Tile2PropertyName",
                                                                    value = "tileset1Tile2PropertyValue"
                                                                }
                                                        }
                                                },
                                        },
                                },
                            new mapTileset
                                {
                                    Firstgid = 3,
                                    Name = "tileset2",
                                    Tiles = new List<mapTilesetTile>
                                        {
                                            new mapTilesetTile
                                                {
                                                    id = 1,
                                                    properties = new List<property>
                                                        {
                                                            new property
                                                                {
                                                                    name = "name",
                                                                    value = "tileset2Tile1"
                                                                },
                                                            new property
                                                                {
                                                                    name = "commonPropertyName",
                                                                    value = "commonPropertyValueTileset2Tile1"
                                                                },
                                                            new property
                                                                {
                                                                    name = "tileset2Tile1PropertyName",
                                                                    value = "tileset2Tile1PropertyValue"
                                                                }
                                                        }
                                                }
                                        }
                                }
                        },
                    Layers = new List<MapLayer>()
                        {
                            new MapLayer
                                {
                                    height = 32,
                                    width = 96,
                                    Name = "layer1",
                                    visible = 1,
                                    data = new mapLayerData[1]
                                        {
                                            new mapLayerData
                                                {
                                                    dataTiles = new mapLayerDataTile[3]
                                                        {
                                                            new mapLayerDataTile
                                                                {
                                                                    gid = "1"
                                                                },
                                                            new mapLayerDataTile
                                                                {
                                                                    gid = "2"
                                                                },
                                                            new mapLayerDataTile
                                                                {
                                                                    gid = "3"
                                                                }
                                                        }
                                                }
                                        },
                                }
                        },
                    orientation = "Orthogonal",
                    tileheight = 32,
                    tilewidth = 32
                };

            string expected =
                "Name (required),tileset1Tile1PropertyName,commonPropertyName,tileset1Tile2PropertyName,tileset2Tile1PropertyName\r\ntileset1Tile1,\"tileset1Tile1PropertyValue\",\"commonPropertyValueTileset1Tile1\",,\r\ntileset1Tile2,,\"commonPropertyValueTileset1Tile2\",\"tileset1Tile2PropertyValue\",\r\ntileset2Tile1,,\"commonPropertyValueTileset2Tile1\",,\"tileset2Tile1PropertyValue\"\r\n";
            string actual = target.ToCSVString(type: TiledMapSave.CSVPropertyType.Tile, layerName: null);
            Assert.AreEqual(expected, actual);

            expected =
                "Name (required),tileset1Tile1PropertyName,commonPropertyName,tileset1Tile2PropertyName,tileset2Tile1PropertyName\r\ntileset1Tile1,\"tileset1Tile1PropertyValue\",\"commonPropertyValueTileset1Tile1\",,\r\ntileset1Tile2,,\"commonPropertyValueTileset1Tile2\",\"tileset1Tile2PropertyValue\",\r\ntileset2Tile1,,\"commonPropertyValueTileset2Tile1\",,\"tileset2Tile1PropertyValue\"\r\n";
        }
        public void ToCSVStringObjectPropertyTest()
        {
            var target = new TiledMapSave
            {
                objectgroup = new mapObjectgroup[2]
                    {
                        new mapObjectgroup
                            {
                                name = "objectGroup1",
                                @object= new mapObjectgroupObject[1]
                                    {
                                        new mapObjectgroupObject
                                            {
                                                Name="object1",
                                                properties = new List<property>
                                                    {
                                                        new property
                                                            {
                                                                name="prop1",
                                                                value = "val1"
                                                            },
                                                        new property
                                                            {
                                                                name="prop2",
                                                                value = "val2"
                                                            }
                                                    }
                                            }
                                    }
                            },
                        new mapObjectgroup
                            {
                                    @object=new mapObjectgroupObject[1]
                                        {
                                            new mapObjectgroupObject
                                                {
                                                    Name = "object2",
                                                    properties = new List<property>
                                                        {
                                                            new property
                                                                {
                                                                    name = "prop3",
                                                                    value="val3"
                                                                },
                                                            new property
                                                                {
                                                                    name="prop2",
                                                                    value = "val4"
                                                                }
                                                        }
                                                }
                                        }
                            }
                    }
            };
            string actual = target.ToCSVString(TiledMapSave.CSVPropertyType.Object);
            const string expected =
                "Name (required),X (int),Y (int),prop1,prop2,prop3\r\nobject1,0,0,\"val1\",\"val2\",\r\nobject2,0,0,,\"val4\",\"val3\"\r\n";

            Assert.AreEqual(expected, actual);
        }
        public void ToCSVStringMapPropertyTest()
        {
            var target = new TiledMapSave
                {
                    properties = new List<property>
                        {
                            new property
                                {
                                    name = "mapProperty1",
                                    value = "mapValue1"
                                },
                            new property
                                {
                                    name = "mapProperty2",
                                    value = "mapValue2"
                                }
                        }
                };
            string actual = target.ToCSVString(TiledMapSave.CSVPropertyType.Map);
            const string expected = "Name (required),mapProperty1,mapProperty2\r\nmap,\"mapValue1\",\"mapValue2\"\r\n";

            Assert.AreEqual(expected, actual);
        }
        public void ToCSVStringTilesetPropertyTest()
        {
            var target = new TiledMapSave
            {
                Tilesets = new List<Tileset>
                {
                    new Tileset
                    {
                        Firstgid = 1,
                        Name = "tileset1",
                        Tiles = new List<mapTilesetTile>
                        {
                            new mapTilesetTile
                            {
                                id = 1,
                                properties = new List<property>
                                {
                                    new property
                                    {
                                        name = "commonPropertyName",
                                        value = "commonPropertyValueTileset1Tile1"
                                    },
                                    new property
                                    {
                                        name = "tileset1Tile1PropertyName",
                                        value = "tileset1Tile1PropertyValue"
                                    },
                                    new property
                                    {
                                        name = "name",
                                        value = "tileset1Tile1"
                                    }
                                }
                            },
                            new mapTilesetTile
                            {
                                id = 2,
                                properties = new List<property>
                                {
                                    new property
                                    {
                                        name = "name",
                                        value = "tileset1Tile2"
                                    },
                                    new property
                                    {
                                        name = "commonPropertyName",
                                        value = "commonPropertyValueTileset1Tile2"
                                    },
                                    new property
                                    {
                                        name = "tileset1Tile2PropertyName",
                                        value = "tileset1Tile2PropertyValue"
                                    }
                                }
                            },
                        },
                    },
                    new Tileset
                    {
                        Firstgid = 3,
                        Name = "tileset2",
                        Tiles = new List<mapTilesetTile>
                        {
                            new mapTilesetTile
                            {
                                id = 1,
                                properties = new List<property>
                                {
                                    new property
                                    {
                                        name = "name",
                                        value = "tileset2Tile1"
                                    },
                                    new property
                                    {
                                        name = "commonPropertyName",
                                        value = "commonPropertyValueTileset2Tile1"
                                    },
                                    new property
                                    {
                                        name = "tileset2Tile1PropertyName",
                                        value = "tileset2Tile1PropertyValue"
                                    }
                                }
                            }
                        }
                    }
                },
                Layers = new List<MapLayer>
                {
                    new MapLayer
                    {
                        height = 32,
                        width = 96,
                        Name = "layer1",
                        visible = 1,
                        data = new[]
                        {
                            new mapLayerData
                            {
                                dataTiles = new[]
                                {
                                    new mapLayerDataTile
                                    {
                                        gid = "1"
                                    },
                                    new mapLayerDataTile
                                    {
                                        gid = "2"
                                    },
                                    new mapLayerDataTile
                                    {
                                        gid = "3"
                                    }
                                }
                            }
                        },
                    }
                },
                orientation = "Orthogonal",
                tileheight = 32,
                tilewidth = 32
            };

            string expected =
                "Name (required),EmbeddedAnimation (List<FlatRedBall.Content.AnimationChain.AnimationFrameSaveBase>),tileset1Tile1PropertyName,commonPropertyName,tileset1Tile2PropertyName,tileset2Tile1PropertyName\r\n\"tileset1Tile1\",\"\",\"tileset1Tile1PropertyValue\",\"commonPropertyValueTileset1Tile1\",\"\",\"\"\r\n\"tileset1Tile2\",\"\",\"\",\"commonPropertyValueTileset1Tile2\",\"tileset1Tile2PropertyValue\",\"\"\r\n\"tileset2Tile1\",\"\",\"\",\"commonPropertyValueTileset2Tile1\",\"\",\"tileset2Tile1PropertyValue\"\r\n";
            string actual = target.ToCSVString();
            Assert.AreEqual(expected, actual);
        }
        public void ToCSVStringLayerPropertyTest()
        {
            const TiledMapSave.CSVPropertyType type = TiledMapSave.CSVPropertyType.Layer;
            var target = new TiledMapSave
            {
                Layers = new List<MapLayer>
                {
                    new MapLayer
                    {
                        properties = new List<property>
                        {
                            new property {name = "name1", value = "val"},
                            new property {name = "name2", value = "val2"}
                        },
                        Name = "layer1"
                    },
                    new MapLayer
                    {
                        properties = new List<property>
                        {
                            new property {name = "name1", value = "val"},
                            new property {name = "name3", value = "val3"}
                        },
                        Name = "layer2"
                    }
                }
            };

            var expected =
                "Name (required),name1,name2,name3\r\n\"layer1\",\"val\",\"val2\",\"\"\r\n\"layer2\",\"val\",\"\",\"val3\"\r\n";
            var actual = target.ToCSVString(type);
            Assert.AreEqual(expected, actual);

            string layerName = "layer1";
            expected = "Name (required),name1,name2\r\n\"layer1\",\"val\",\"val2\"\r\n";
            actual = target.ToCSVString(type, layerName);
            Assert.AreEqual(expected, actual);
        }