public void BuildCmFilter2() { // Setup test values Cache.LangProject.PeopleOA = Cache.ServiceLocator.GetInstance <ICmPossibilityListFactory>().Create(); ICmPossibility person1 = Cache.ServiceLocator.GetInstance <ICmPersonFactory>().Create(); Cache.LangProject.PeopleOA.PossibilitiesOS.Add(person1); person1.ForeColor = 5; person1.BackColor = 10; // Setup filter ILcmOwningCollection <ICmFilter> filtersCol = Cache.LangProject.FiltersOC; ICmFilter filter = Cache.ServiceLocator.GetInstance <ICmFilterFactory>().Create(); filtersCol.Add(filter); filter.ColumnInfo = CmPossibilityTags.kClassId + "," + CmPossibilityTags.kflidForeColor + "|" + CmPossibilityTags.kClassId + "," + CmPossibilityTags.kflidBackColor; ICmRow row = Cache.ServiceLocator.GetInstance <ICmRowFactory>().Create(); filter.RowsOS.Add(row); ICmCell cell1 = Cache.ServiceLocator.GetInstance <ICmCellFactory>().Create(); row.CellsOS.Add(cell1); cell1.Contents = MakeString("= 5"); ICmCell cell2 = Cache.ServiceLocator.GetInstance <ICmCellFactory>().Create(); row.CellsOS.Add(cell2); cell2.Contents = MakeString("= 10"); // Check the result filter.InitCriteria(); Assert.IsTrue(filter.MatchesCriteria(person1.Hvo)); }
/// ------------------------------------------------------------------------------------ /// <summary> /// Implement CreateTestData, called by InMemoryLcmTestBase set up. /// </summary> /// ------------------------------------------------------------------------------------ protected override void CreateTestData() { var servloc = Cache.ServiceLocator; ICmPossibilityFactory possibilityFactory = servloc.GetInstance <ICmPossibilityFactory>(); // Add an annotation category (for Discourse) m_categoryDiscourse = possibilityFactory.Create(); var affixCatList = servloc.GetInstance <ICmPossibilityListFactory>().Create(); Cache.LangProject.AffixCategoriesOA = affixCatList; affixCatList.PossibilitiesOS.Add(m_categoryDiscourse); // Add an annotation category (for Grammar) m_categoryGrammar = possibilityFactory.Create(); affixCatList.PossibilitiesOS.Add(m_categoryGrammar); // add a sub-annotation category (for "Pronominal reference") m_categoryGrammar_PronominalRef = possibilityFactory.Create(); m_categoryGrammar.SubPossibilitiesOS.Add(m_categoryGrammar_PronominalRef); // Set up a filter, with a CmCell we can test on. ICmFilter filter = servloc.GetInstance <ICmFilterFactory>().Create(); Cache.LangProject.FiltersOC.Add(filter); ICmRow row = servloc.GetInstance <ICmRowFactory>().Create(); filter.RowsOS.Add(row); m_cell = servloc.GetInstance <ICmCellFactory>().Create(); row.CellsOS.Add(m_cell); }
public void GreaterThanOrEqual() { // Setup test values Cache.LangProject.PeopleOA = new CmPossibilityList(); ICmPossibility person1 = Cache.LangProject.PeopleOA.PossibilitiesOS.Append(new CmPerson()); person1.ForeColor = 4; ICmPossibility person2 = Cache.LangProject.PeopleOA.PossibilitiesOS.Append(new CmPerson()); person2.ForeColor = 5; ICmPossibility person3 = Cache.LangProject.PeopleOA.PossibilitiesOS.Append(new CmPerson()); person3.ForeColor = 10; // Setup filter FdoOwningCollection <ICmFilter> filtersCol = Cache.LangProject.FiltersOC; ICmFilter filter = filtersCol.Add(new CmFilter()); filter.ColumnInfo = CmPossibility.kClassId + "," + (int)CmPossibility.CmPossibilityTags.kflidForeColor; ICmRow row = filter.RowsOS.Append(new CmRow()); ICmCell cell1 = row.CellsOS.Append(new DummyCmCell()); cell1.Contents.Text = ">= 5"; // Check the result ((CmFilter)filter).InitCriteria(); Assert.IsFalse(((CmFilter)filter).MatchesCriteria(person1.Hvo)); Assert.IsTrue(((CmFilter)filter).MatchesCriteria(person2.Hvo)); Assert.IsTrue(((CmFilter)filter).MatchesCriteria(person3.Hvo)); }
/// ------------------------------------------------------------------------------------ /// <summary> /// Initialize the filter so it can check for matches. This must be called once before /// calling <see cref="MatchesCriteria"/>. /// </summary> /// ------------------------------------------------------------------------------------ public void InitCriteria() { lock (SyncRoot) { m_filteredFieldTypes.Clear(); m_filteredFlids.Clear(); m_cells.Clear(); // Get the filter's essential details string[] columns = ColumnInfo.Split('|'); ICmRow row = RowsOS[0]; for (int i = 0; i < row.CellsOS.Count; i++) { string[] columnInfo = columns[i].Split(new char[] { ',' }, 2); m_filteredFlids.Add(Int32.Parse(columnInfo[1])); m_filteredFieldTypes.Add((CellarPropertyType)m_cache.MetaDataCache.GetFieldType(m_filteredFlids[i])); ICmCell tempCell = row.CellsOS[i]; m_cells.Add(tempCell); // Determine the field value this filter wants to match switch (m_filteredFieldTypes[i]) { case CellarPropertyType.Integer: // ENHANCE: Someday handle prompting user Debug.Assert(ShowPrompt == 0, "Can't prompt for int values yet."); tempCell.ParseIntegerMatchCriteria(); break; case CellarPropertyType.ReferenceAtomic: case CellarPropertyType.ReferenceSequence: case CellarPropertyType.ReferenceCollection: InitReferenceCriteria(tempCell, m_filteredFlids[i]); break; default: throw new Exception("Attempt to filter on unexpected type of field."); } } } }