public void MetaSequence() { FtMeta meta = new FtMeta(); FtMetaField rootField1 = meta.FieldList.New(FtStandardDataType.String); rootField1.Id = RootField1Id; FtMetaField rootField2 = meta.FieldList.New(FtStandardDataType.Integer); rootField2.Id = RootField2Id; FtMetaField rootField3 = meta.FieldList.New(FtStandardDataType.Boolean); rootField3.Id = RootField3Id; FtMetaField sequence1Field1 = meta.FieldList.New(FtStandardDataType.Float); sequence1Field1.Id = Sequence1Field1Id; FtMetaField sequence1Field2 = meta.FieldList.New(FtStandardDataType.Decimal); sequence1Field2.Id = Sequence1Field2Id; FtMetaField sequence2Field1 = meta.FieldList.New(FtStandardDataType.DateTime); sequence2Field1.Id = Sequence2Field1Id; FtMetaField sequence2Field2 = meta.FieldList.New(FtStandardDataType.Boolean); sequence2Field2.Id = Sequence2Field2Id; FtMetaField sequence2Field3 = meta.FieldList.New(FtStandardDataType.String); sequence2Field3.Id = Sequence2Field3Id; FtMetaField sequence2Field4 = meta.FieldList.New(FtStandardDataType.Integer); sequence2Field4.Id = Sequence2Field4Id; FtMetaField sequence3Field1 = meta.FieldList.New(FtStandardDataType.Boolean); sequence3Field1.Id = Sequence3Field1Id; FtMetaField sequence4Field1 = meta.FieldList.New(FtStandardDataType.Float); sequence4Field1.Id = Sequence4Field1Id; FtMetaField sequence4Field2 = meta.FieldList.New(FtStandardDataType.Decimal); sequence4Field2.Id = Sequence4Field2Id; FtMetaSequence rootSequence = meta.SequenceList.New(); rootSequence.Root = true; FtMetaSequenceItem rootItem1 = rootSequence.ItemList.New(); rootItem1.Field = rootField1; FtMetaSequenceItem rootItem2 = rootSequence.ItemList.New(); rootItem2.Field = rootField2; FtMetaSequenceItem rootItem3 = rootSequence.ItemList.New(); rootItem3.Field = rootField3; FtMetaSequence sequence1 = meta.SequenceList.New(); sequence1.Name = Sequence1Name; FtMetaSequenceItem sequence1Item1 = sequence1.ItemList.New(); sequence1Item1.Field = sequence1Field1; FtMetaSequenceItem sequence1Item2 = sequence1.ItemList.New(); sequence1Item2.Field = sequence1Field2; FtMetaSequence sequence2 = meta.SequenceList.New(); sequence2.Name = Sequence2Name; FtMetaSequenceItem sequence2Item1 = sequence2.ItemList.New(); sequence2Item1.Field = sequence2Field1; FtMetaSequenceItem sequence2Item2 = sequence2.ItemList.New(); sequence2Item2.Field = sequence2Field2; FtMetaSequenceItem sequence2Item3 = sequence2.ItemList.New(); sequence2Item3.Field = sequence2Field3; FtMetaSequenceItem sequence2Item4 = sequence2.ItemList.New(); sequence2Item4.Field = sequence2Field4; FtMetaSequence sequence3 = meta.SequenceList.New(); sequence3.Name = Sequence3Name; FtMetaSequenceItem sequence3Item1 = sequence3.ItemList.New(); sequence3Item1.Field = sequence3Field1; FtMetaSequence sequence4 = meta.SequenceList.New(); sequence4.Name = Sequence4Name; FtMetaSequenceItem sequence4Item1 = sequence4.ItemList.New(); sequence4Item1.Field = sequence4Field1; FtMetaSequenceItem sequence4Item2 = sequence4.ItemList.New(); sequence4Item2.Field = sequence4Field2; FtExactIntegerMetaSequenceRedirect rootRedirect1 = rootItem2.RedirectList.New(FtStandardSequenceRedirectType.ExactInteger) as FtExactIntegerMetaSequenceRedirect; rootRedirect1.InvokationDelay = RootRedirect1InvokationDelay; rootRedirect1.Value = RootRedirect1Value; rootRedirect1.Sequence = sequence1; FtExactIntegerMetaSequenceRedirect rootRedirect2 = rootItem2.RedirectList.New(FtStandardSequenceRedirectType.ExactInteger) as FtExactIntegerMetaSequenceRedirect; rootRedirect2.InvokationDelay = RootRedirect2InvokationDelay; rootRedirect2.Value = 2; rootRedirect2.Sequence = sequence2; FtExactIntegerMetaSequenceRedirect rootRedirect3 = rootItem2.RedirectList.New(FtStandardSequenceRedirectType.ExactInteger) as FtExactIntegerMetaSequenceRedirect; rootRedirect3.InvokationDelay = RootRedirect3InvokationDelay; rootRedirect3.Value = 3; rootRedirect3.Sequence = sequence3; FtNullMetaSequenceRedirect sequence1Redirect1 = sequence1Item2.RedirectList.New(FtStandardSequenceRedirectType.Null) as FtNullMetaSequenceRedirect; sequence1Redirect1.InvokationDelay = Sequence1Redirect1InvokationDelay; sequence1Redirect1.Sequence = sequence4; FtCaseInsensitiveStringMetaSequenceRedirect sequence2Redirect1 = sequence2Item3.RedirectList.New(FtStandardSequenceRedirectType.CaseInsensitiveString) as FtCaseInsensitiveStringMetaSequenceRedirect; sequence2Redirect1.InvokationDelay = Sequence2Redirect1InvokationDelay; sequence2Redirect1.Value = Sequence2Redirect1Value; sequence2Redirect1.Sequence = sequence4; // Serialize Meta XmlWriter writer = XmlWriter.Create(filePath, xmlWriterSettings); FtMetaSerializer.Serialize(meta, writer); writer.Close(); string DataFilePath = Path.Combine(DataFolder, SequenceFileName); if (!TextFilesAreEqual(filePath, DataFilePath)) { Assert.Fail("MetaSequence does not match Test Data"); } else { FtMeta deserializedMeta = FtMetaSerializer.Deserialize(filePath); AssertDeserializedMeta(deserializedMeta); string foreignFilePath = Path.Combine(DataFolder, ForeignFileName); FtMeta deserializedForeign = FtMetaSerializer.Deserialize(foreignFilePath); AssertDeserializedMeta(deserializedForeign); } }
private void AssertDeserializedMeta(FtMeta meta) { Assert.AreEqual <int>(12, meta.FieldList.Count); for (int i = 0; i < 12; i++) { Assert.AreEqual <int>(i, meta.FieldList[i].Id); } FtMetaField rootField1 = meta.FieldList[0]; Assert.AreEqual <int>(FtStandardDataType.String, rootField1.DataType); FtMetaField rootField2 = meta.FieldList[1]; Assert.AreEqual <int>(FtStandardDataType.Integer, rootField2.DataType); FtMetaField rootField3 = meta.FieldList[2]; Assert.AreEqual <int>(FtStandardDataType.Boolean, rootField3.DataType); FtMetaField sequence1Field1 = meta.FieldList[3]; Assert.AreEqual <int>(FtStandardDataType.Float, sequence1Field1.DataType); FtMetaField sequence1Field2 = meta.FieldList[4]; Assert.AreEqual <int>(FtStandardDataType.Decimal, sequence1Field2.DataType); FtMetaField sequence2Field1 = meta.FieldList[5]; Assert.AreEqual <int>(FtStandardDataType.DateTime, sequence2Field1.DataType); FtMetaField sequence2Field2 = meta.FieldList[6]; Assert.AreEqual <int>(FtStandardDataType.Boolean, sequence2Field2.DataType); FtMetaField sequence2Field3 = meta.FieldList[7]; Assert.AreEqual <int>(FtStandardDataType.String, sequence2Field3.DataType); FtMetaField sequence2Field4 = meta.FieldList[8]; Assert.AreEqual <int>(FtStandardDataType.Integer, sequence2Field4.DataType); FtMetaField sequence3Field1 = meta.FieldList[9]; Assert.AreEqual <int>(FtStandardDataType.Boolean, sequence3Field1.DataType); FtMetaField sequence4Field1 = meta.FieldList[10]; Assert.AreEqual <int>(FtStandardDataType.Float, sequence4Field1.DataType); FtMetaField sequence4Field2 = meta.FieldList[11]; Assert.AreEqual <int>(FtStandardDataType.Decimal, sequence4Field2.DataType); Assert.AreEqual <int>(5, meta.SequenceList.Count); FtMetaSequence rootSequence = meta.SequenceList[0]; Assert.AreEqual <bool>(true, rootSequence.Root); Assert.AreEqual <string>(RootSequenceName, rootSequence.Name); Assert.AreEqual <int>(3, rootSequence.ItemList.Count); FtMetaSequence sequence1 = meta.SequenceList[1]; Assert.AreEqual <bool>(false, sequence1.Root); Assert.AreEqual <string>(Sequence1Name, sequence1.Name); Assert.AreEqual <int>(2, sequence1.ItemList.Count); FtMetaSequence sequence2 = meta.SequenceList[2]; Assert.AreEqual <bool>(false, sequence2.Root); Assert.AreEqual <string>(Sequence2Name, sequence2.Name); Assert.AreEqual <int>(4, sequence2.ItemList.Count); FtMetaSequence sequence3 = meta.SequenceList[3]; Assert.AreEqual <bool>(false, sequence3.Root); Assert.AreEqual <string>(Sequence3Name, sequence3.Name); Assert.AreEqual <int>(1, sequence3.ItemList.Count); FtMetaSequence sequence4 = meta.SequenceList[4]; Assert.AreEqual <bool>(false, sequence4.Root); Assert.AreEqual <string>(Sequence4Name, sequence4.Name); Assert.AreEqual <int>(2, sequence4.ItemList.Count); Assert.AreEqual <FtMetaField>(rootSequence.ItemList[0].Field, rootField1); FtMetaSequenceItem rootItem2 = rootSequence.ItemList[1]; Assert.AreEqual <FtMetaField>(rootItem2.Field, rootField2); Assert.AreEqual <FtMetaField>(rootSequence.ItemList[2].Field, rootField3); Assert.AreEqual <FtMetaField>(sequence1.ItemList[0].Field, sequence1Field1); FtMetaSequenceItem sequence1Item2 = sequence1.ItemList[1]; Assert.AreEqual <FtMetaField>(sequence1Item2.Field, sequence1Field2); Assert.AreEqual <FtMetaField>(sequence2.ItemList[0].Field, sequence2Field1); Assert.AreEqual <FtMetaField>(sequence2.ItemList[1].Field, sequence2Field2); FtMetaSequenceItem sequence2Item3 = sequence2.ItemList[2]; Assert.AreEqual <FtMetaField>(sequence2Item3.Field, sequence2Field3); Assert.AreEqual <FtMetaField>(sequence2.ItemList[3].Field, sequence2Field4); Assert.AreEqual <FtMetaField>(sequence3.ItemList[0].Field, sequence3Field1); Assert.AreEqual <FtMetaField>(sequence4.ItemList[0].Field, sequence4Field1); Assert.AreEqual <FtMetaField>(sequence4.ItemList[1].Field, sequence4Field2); FtExactIntegerMetaSequenceRedirect rootRedirect1 = rootItem2.RedirectList[0] as FtExactIntegerMetaSequenceRedirect; Assert.AreEqual <int>(FtStandardSequenceRedirectType.ExactInteger, ((FtMetaSequenceRedirect)rootRedirect1).Type); Assert.AreEqual <FtSequenceInvokationDelay>(RootRedirect1InvokationDelay, rootRedirect1.InvokationDelay); Assert.AreEqual <long>(RootRedirect1Value, rootRedirect1.Value); Assert.AreEqual <FtMetaSequence>(sequence1, rootRedirect1.Sequence); FtExactIntegerMetaSequenceRedirect rootRedirect2 = rootItem2.RedirectList[1] as FtExactIntegerMetaSequenceRedirect; Assert.AreEqual <int>(FtStandardSequenceRedirectType.ExactInteger, ((FtMetaSequenceRedirect)rootRedirect2).Type); Assert.AreEqual <FtSequenceInvokationDelay>(RootRedirect2InvokationDelay, rootRedirect2.InvokationDelay); Assert.AreEqual <long>(RootRedirect2Value, rootRedirect2.Value); Assert.AreEqual <FtMetaSequence>(sequence2, rootRedirect2.Sequence); FtExactIntegerMetaSequenceRedirect rootRedirect3 = rootItem2.RedirectList[2] as FtExactIntegerMetaSequenceRedirect; Assert.AreEqual <int>(FtStandardSequenceRedirectType.ExactInteger, ((FtMetaSequenceRedirect)rootRedirect3).Type); Assert.AreEqual <FtSequenceInvokationDelay>(RootRedirect3InvokationDelay, rootRedirect3.InvokationDelay); Assert.AreEqual <long>(RootRedirect3Value, rootRedirect3.Value); Assert.AreEqual <FtMetaSequence>(sequence3, rootRedirect3.Sequence); FtNullMetaSequenceRedirect sequence1Redirect1 = sequence1Item2.RedirectList[0] as FtNullMetaSequenceRedirect; Assert.AreEqual <int>(FtStandardSequenceRedirectType.Null, ((FtMetaSequenceRedirect)sequence1Redirect1).Type); Assert.AreEqual <FtSequenceInvokationDelay>(Sequence1Redirect1InvokationDelay, sequence1Redirect1.InvokationDelay); Assert.AreEqual <FtMetaSequence>(sequence4, sequence1Redirect1.Sequence); FtCaseInsensitiveStringMetaSequenceRedirect sequence2Redirect1 = sequence2Item3.RedirectList[0] as FtCaseInsensitiveStringMetaSequenceRedirect; Assert.AreEqual <int>(FtStandardSequenceRedirectType.CaseInsensitiveString, ((FtMetaSequenceRedirect)sequence2Redirect1).Type); Assert.AreEqual <FtSequenceInvokationDelay>(Sequence2Redirect1InvokationDelay, sequence2Redirect1.InvokationDelay); Assert.AreEqual <FtMetaSequence>(sequence4, sequence2Redirect1.Sequence); }