public void ReadToDescendantTest() { NbtReader reader = new NbtReader(MakeTest()); Assert.IsTrue(reader.ReadToDescendant("third-comp")); Assert.AreEqual(reader.TagName, "third-comp"); Assert.IsTrue(reader.ReadToDescendant("inComp2")); Assert.AreEqual(reader.TagName, "inComp2"); Assert.IsFalse(reader.ReadToDescendant("derp")); Assert.AreEqual(reader.TagName, "inComp3"); reader.ReadToFollowing(); // at fourth-list Assert.IsTrue(reader.ReadToDescendant("inList2")); Assert.AreEqual(reader.TagName, "inList2"); }
public void ErrorTest() { var root = new NbtCompound("root"); byte[] testData = new NbtFile(root).SaveToBuffer(NbtCompression.None); // creating NbtReader without a stream, or with a non-readable stream Assert.Throws <ArgumentNullException>(() => new NbtReader(null)); Assert.Throws <ArgumentException>(() => new NbtReader(new NonReadableStream())); // corrupt the data testData[0] = 123; var reader = new NbtReader(new MemoryStream(testData)); // attempt to use ReadValue when not at value Assert.Throws <InvalidOperationException>(() => reader.ReadValue()); reader.CacheTagValues = true; Assert.Throws <InvalidOperationException>(() => reader.ReadValue()); // attempt to read a corrupt stream Assert.Throws <NbtFormatException>(() => reader.ReadToFollowing()); // make sure we've properly entered the error state Assert.IsTrue(reader.IsInErrorState); Assert.IsFalse(reader.HasName); Assert.Throws <InvalidReaderStateException>(() => reader.ReadToFollowing()); Assert.Throws <InvalidReaderStateException>(() => reader.ReadListAsArray <int>()); Assert.Throws <InvalidReaderStateException>(() => reader.ReadToNextSibling()); Assert.Throws <InvalidReaderStateException>(() => reader.ReadToDescendant("derp")); Assert.Throws <InvalidReaderStateException>(() => reader.ReadAsTag()); Assert.Throws <InvalidReaderStateException>(() => reader.Skip()); }
public void EndTagTest() { using (MemoryStream ms = new MemoryStream()) { var root = new NbtCompound("root") { new NbtInt("test", 0) }; new NbtFile(root).SaveToStream(ms, NbtCompression.None); ms.Position = 0; NbtReader reader = new NbtReader(ms) { SkipEndTags = false }; reader.ReadToDescendant("test"); Assert.AreEqual(NbtTagType.Int, reader.TagType); Assert.IsTrue(reader.ReadToNextSibling()); // should be at root's End tag now Assert.AreEqual(NbtTagType.End, reader.TagType); Assert.IsFalse(reader.IsInErrorState); Assert.IsFalse(reader.IsAtStreamEnd); Assert.IsFalse(reader.IsCompound); Assert.IsFalse(reader.IsList); Assert.IsFalse(reader.IsListElement); Assert.IsFalse(reader.HasValue); Assert.IsFalse(reader.HasName); Assert.IsFalse(reader.HasLength); Assert.Throws <InvalidOperationException>(() => reader.ReadAsTag()); // Cannot create NbtTag from TAG_END // We done now Assert.IsFalse(reader.ReadToFollowing()); Assert.IsTrue(reader.IsAtStreamEnd); } }
private static (string, Dictionary <string, Object>) GetNbtVal(MemoryStream ms) { string name = ""; var nbt = new NbtReader(ms, false); var dictParams = new Dictionary <string, Object>(); nbt.ReadToFollowing(); if (!nbt.IsCompound) { throw new Exception("Could not read nbt"); } if (nbt.ReadToDescendant("name")) { name = nbt.ReadValueAs <string>(); nbt.ReadToNextSibling(); while (nbt.TagType != NbtTagType.End) { fNbt.Tags.NbtTag tag = nbt.ReadAsTag(); switch (tag.Name) { case "version": continue; case "states": IEnumerable <fNbt.Tags.NbtTag> enumTag = (IEnumerable <fNbt.Tags.NbtTag>)tag; foreach (var subtag in enumTag) { if ((subtag.Name == "direction") || (subtag.Name == "facing_direction") || (subtag.Name == "open_bit")) { int subtagvalue = GetTagValue(subtag); dictParams.Add(subtag.Name, subtagvalue); } if ((subtag.Name == "color") || (subtag.Name == "lever_direction")) { if (subtag.TagType == NbtTagType.String) { dictParams.Add(subtag.Name, subtag.StringValue); } } } break; case "val": int value = GetTagValue(tag); dictParams.Add(tag.Name, value); break; } } } while (!nbt.IsAtStreamEnd) { nbt.ReadToFollowing(); } return(name, dictParams); }
private static (string, Dictionary <string, Object>) GetNbtVal(MemoryStream ms) { string name = ""; var nbt = new NbtReader(ms, false); var dictParams = new Dictionary <string, Object>(); nbt.ReadToFollowing(); if (!nbt.IsCompound) { throw new Exception("Could not read nbt"); } if (nbt.ReadToDescendant("name")) { name = nbt.ReadValueAs <string>(); nbt.ReadToNextSibling(); while (nbt.TagType != NbtTagType.End) { fNbt.Tags.NbtTag tag = nbt.ReadAsTag(); switch (tag.Name) { case "version": continue; case "states": IEnumerable <fNbt.Tags.NbtTag> enumTag = (IEnumerable <fNbt.Tags.NbtTag>)tag; foreach (var subtag in enumTag) { if ((subtag.Name == "direction") || (subtag.Name == "facing_direction") || (subtag.Name == "open_bit") || (subtag.Name == "multi_face_direction_bits") || (subtag.Name == "stripped_bit") || (subtag.Name == "wall_post_bit") || (subtag.Name == "button_pressed_bit") || (subtag.Name == "rail_direction") || (subtag.Name == "rail_data_bit") || (subtag.Name == "bite_counter") || (subtag.Name == "respawn_anchor_charge") || (subtag.Name == "growth") || (subtag.Name == "powered_bit") || (subtag.Name == "upper_block_bit") || (subtag.Name == "hanging") || (subtag.Name == "coral_direction") || (subtag.Name == "coral_hang_type_bit") || (subtag.Name == "dead_bit") || (subtag.Name == "end_portal_eye_bit") || (subtag.Name == "head_piece_bit") || (subtag.Name == "age")) { int subtagvalue = GetTagValue(subtag); dictParams.Add(subtag.Name, subtagvalue); } if ((subtag.Name == "color") || (subtag.Name == "lever_direction") || (subtag.Name == "wall_block_type") || (subtag.Name == "pillar_axis") || (subtag.Name == "wood_type") || (subtag.Name == "old_log_type") || (subtag.Name == "new_log_type") || (subtag.Name == "old_leaf_type") || (subtag.Name == "new_leaf_type") || (subtag.Name == "sapling_type") || subtag.Name.StartsWith("wall_connection_type_") || (subtag.Name == "chisel_type") || subtag.Name.StartsWith("stone_slab_type") || (subtag.Name == "sponge_type") || (subtag.Name == "double_plant_type") || (subtag.Name == "flower_type") || (subtag.Name == "sand_type") || (subtag.Name == "stone_type") || (subtag.Name == "damage") || (subtag.Name == "dripstone_thickness") || (subtag.Name == "coral_color") || (subtag.Name == "monster_egg_stone_type") || (subtag.Name == "stone_brick_type")) { dictParams.Add(subtag.Name, subtag.StringValue); } } break; case "val": int value = GetTagValue(tag); dictParams.Add(tag.Name, value); break; } } } while (!nbt.IsAtStreamEnd) { nbt.ReadToFollowing(); } return(name, dictParams); }
public void ReadToDescendantTest() { var reader = new NbtReader(TestFiles.MakeReaderTest()); Assert.IsTrue(reader.ReadToDescendant("third-comp")); Assert.AreEqual("third-comp", reader.TagName); Assert.IsTrue(reader.ReadToDescendant("inComp2")); Assert.AreEqual("inComp2", reader.TagName); Assert.IsFalse(reader.ReadToDescendant("derp")); Assert.AreEqual("inComp3", reader.TagName); reader.ReadToFollowing(); // at fourth-list Assert.IsTrue(reader.ReadToDescendant("inList2")); Assert.AreEqual("inList2", reader.TagName); // Ensure ReadToDescendant returns false when at end-of-stream while (reader.ReadToFollowing()) { } Assert.IsFalse(reader.ReadToDescendant("*")); }
public void ReadToDescendantTest() { var reader = new NbtReader(TestFiles.MakeReaderTest()); Assert.IsTrue(reader.ReadToDescendant("third-comp")); Assert.AreEqual("third-comp", reader.TagName); Assert.IsTrue(reader.ReadToDescendant("inComp2")); Assert.AreEqual("inComp2", reader.TagName); Assert.IsFalse(reader.ReadToDescendant("derp")); Assert.AreEqual("inComp3", reader.TagName); reader.ReadToFollowing(); // at fourth-list Assert.IsTrue(reader.ReadToDescendant("inList2")); Assert.AreEqual("inList2", reader.TagName); // Read through the rest of the file until we run out of tags in a compound Assert.IsFalse(reader.ReadToDescendant("*")); // Ensure ReadToDescendant returns false when at end-of-stream while (reader.ReadToFollowing()) { } Assert.IsFalse(reader.ReadToDescendant("*")); // Ensure that this works even on the root Assert.IsFalse(new NbtReader(TestFiles.MakeReaderTest()).ReadToDescendant("*")); }
private static (string, int) GetNbtVal(MemoryStream ms) { int value = 0; string name = ""; var nbt = new NbtReader(ms, false); nbt.ReadToFollowing(); if (!nbt.IsCompound) { throw new Exception("Could not read nbt"); } if (nbt.ReadToDescendant("name")) { name = nbt.ReadValueAs <string>(); } if (nbt.ReadToNextSibling("val")) { switch (nbt.TagType) { case NbtTagType.Int: value = nbt.ReadValueAs <int>(); break; case NbtTagType.Short: value = nbt.ReadValueAs <short>(); break; case NbtTagType.Long: value = (int)nbt.ReadValueAs <long>(); break; default: Console.WriteLine("could not comprehend val"); break; } } while (!nbt.IsAtStreamEnd) { nbt.ReadToFollowing(); } return(name, value); }
public void ErrorTest() { var root = new NbtCompound("root"); byte[] testData = new NbtFile(root).SaveToBuffer(NbtCompression.None); // creating NbtReader without a stream, or with a non-readable stream Assert.Throws<ArgumentNullException>(() => new NbtReader(null)); Assert.Throws<ArgumentException>(() => new NbtReader(new NonReadableStream())); // corrupt the data testData[0] = 123; var reader = new NbtReader(new MemoryStream(testData)); // attempt to use ReadValue when not at value Assert.Throws<InvalidOperationException>(() => reader.ReadValue()); reader.CacheTagValues = true; Assert.Throws<InvalidOperationException>(() => reader.ReadValue()); // attempt to read a corrupt stream Assert.Throws<NbtFormatException>(() => reader.ReadToFollowing()); // make sure we've properly entered the error state Assert.True(reader.IsInErrorState); Assert.False(reader.HasName); Assert.Throws<InvalidReaderStateException>(() => reader.ReadToFollowing()); Assert.Throws<InvalidReaderStateException>(() => reader.ReadListAsArray<int>()); Assert.Throws<InvalidReaderStateException>(() => reader.ReadToNextSibling()); Assert.Throws<InvalidReaderStateException>(() => reader.ReadToDescendant("derp")); Assert.Throws<InvalidReaderStateException>(() => reader.ReadAsTag()); Assert.Throws<InvalidReaderStateException>(() => reader.Skip()); }
public void ReadToDescendantTest() { var reader = new NbtReader(TestFiles.MakeReaderTest()); Assert.True(reader.ReadToDescendant("third-comp")); Assert.Equal("third-comp", reader.TagName); Assert.True(reader.ReadToDescendant("inComp2")); Assert.Equal("inComp2", reader.TagName); Assert.False(reader.ReadToDescendant("derp")); Assert.Equal("inComp3", reader.TagName); reader.ReadToFollowing(); // at fourth-list Assert.True(reader.ReadToDescendant("inList2")); Assert.Equal("inList2", reader.TagName); // Ensure ReadToDescendant returns false when at end-of-stream while (reader.ReadToFollowing()) { } Assert.False(reader.ReadToDescendant("*")); }
public void ReadToDescendantTest() { var reader = new NbtReader(TestFiles.MakeReaderTest()); Assert.IsTrue(reader.ReadToDescendant("third-comp")); Assert.AreEqual(reader.TagName, "third-comp"); Assert.IsTrue(reader.ReadToDescendant("inComp2")); Assert.AreEqual(reader.TagName, "inComp2"); Assert.IsFalse(reader.ReadToDescendant("derp")); Assert.AreEqual(reader.TagName, "inComp3"); reader.ReadToFollowing(); // at fourth-list Assert.IsTrue(reader.ReadToDescendant("inList2")); Assert.AreEqual(reader.TagName, "inList2"); }