internal void CallGetWordGroupCellsBorderingChOrph(AnalysisOccurrence occurrence,
			out ChartLocation precCell, out ChartLocation follCell)
		{
			var iPara = m_ccl.CallGetParaIndexForOccurrence(occurrence);
			Assert.Greater(iPara, -1, "Can't get ChOrph paragraph index.");
			var offset = occurrence.GetMyBeginOffsetInPara();
			Assert.Greater(offset, -1, "Can't get ChOrph offset.");
			m_ccl.GetWordGroupCellsBorderingChOrph(iPara, offset, out precCell, out follCell);
		}
		public void FindWhereAddChOrph_MultiWordGroups_SurroundLoc()
		{
			var para1 = MakeParagraphSpecificContent("Five very wild wordforms here.");
			var seg1 = para1.SegmentsOS[0];
			var w0 = new AnalysisOccurrence(seg1, 0); // Five
			var w1 = new AnalysisOccurrence(seg1, 1); // very
			var w2 = new AnalysisOccurrence(seg1, 2); // wild
			var w3 = new AnalysisOccurrence(seg1, 3); // wordforms
			var w4 = new AnalysisOccurrence(seg1, 4); // here

			// Chart most words
			// I just made an arbitrary set of more-or-less reasonable chart cells.
			var row1 = m_helper.MakeFirstRow();
			var wg1_1 = MakeWordGroup(row1, 1, w0, w1);
			// Left w2 uncharted
			MakeWordGroup(row1, 1, w3, w3);
			MakeWordGroup(row1, 4, w4, w4); // leaves nothing in Ribbon, except ChOrph
			// This tests what happens if we try to put the ChOrph in column index 1.
			var testCell = m_ccl.MakeLocObj(1, row1);

			int whereToInsertActual;
			IConstChartWordGroup existingWordGroupActual;

			// SUT; icol of WordGroup in question = 1, iPara of ChOrph = 0
			var result = m_ccl.FindWhereToAddChOrph(testCell, 0, w2.GetMyBeginOffsetInPara(),
				out whereToInsertActual, out existingWordGroupActual);

			// Test results
			Assert.AreEqual(ConstituentChartLogic.FindWhereToAddResult.kAppendToExisting, result);
			Assert.AreEqual(wg1_1.Hvo, existingWordGroupActual.Hvo);
		}
		public void FindWhereAddChOrph_InsertBeforeLaterPara()
		{
			var para1 = MakeParagraphSpecificContent("Five very wild wordforms here.");
			var para2 = MakeParagraphSpecificContent("Entirely different words.");
			var seg1 = para1.SegmentsOS[0];
			var seg2 = para2.SegmentsOS[0];
			var w0 = new AnalysisOccurrence(seg1, 0); // Five
			var w1 = new AnalysisOccurrence(seg1, 1); // very
			var w2 = new AnalysisOccurrence(seg1, 2); // wild
			var w3 = new AnalysisOccurrence(seg1, 3); // wordforms
			var w4 = new AnalysisOccurrence(seg1, 4); // here
			var w5 = new AnalysisOccurrence(seg2, 0); // Entirely
			var w6 = new AnalysisOccurrence(seg2, 1); // different
			var w7 = new AnalysisOccurrence(seg2, 2); // words

			// Chart most words
			// I just made an arbitrary set of more-or-less reasonable chart cells.
			var row1 = m_helper.MakeFirstRow();
			var row2 = m_helper.MakeSecondRow();
			MakeWordGroup(row1, 1, w0, w1);
			MakeWordGroup(row1, 2, w2, w3);
			var wg2_0 = MakeWordGroup(row2, 0, w5, w6); // Left w4 uncharted
			MakeWordGroup(row2, 3, w7, w7);
			var testCell = m_ccl.MakeLocObj(0, row2);

			int whereToInsertActual;
			IConstChartWordGroup existingWordGroupActual;

			// SUT; icol of WordGroup in question = 0, iPara of ChOrph = 0
			var result = m_ccl.FindWhereToAddChOrph(testCell, 0, w4.GetMyBeginOffsetInPara(),
				out whereToInsertActual, out existingWordGroupActual);

			// Test results
			Assert.AreEqual(ConstituentChartLogic.FindWhereToAddResult.kInsertChOrphInWordGrp, result);
			Assert.AreEqual(0, whereToInsertActual);
			Assert.AreEqual(wg2_0.Hvo, existingWordGroupActual.Hvo);
		}
		public void FindWhereAddChOrph_AppendByPara()
		{
			var para1 = MakeParagraphSpecificContent("Three wordforms here.");
			var para2 = MakeParagraphSpecificContent("Entirely different words.");
			var seg1 = para1.SegmentsOS[0];
			var seg2 = para2.SegmentsOS[0];
			var w0 = new AnalysisOccurrence(seg1, 0); // Three
			var w1 = new AnalysisOccurrence(seg1, 1); // wordforms
			var w2 = new AnalysisOccurrence(seg1, 2); // here
			var w3 = new AnalysisOccurrence(seg2, 0); // Entirely
			var w4 = new AnalysisOccurrence(seg2, 1); // different

			// Chart most words
			// I just made an arbitrary set of more-or-less reasonable chart cells.
			var row1 = m_helper.MakeFirstRow();
			var row2 = m_helper.MakeSecondRow();
			MakeWordGroup(row1, 1, w0, w0);
			var wg1_2 = MakeWordGroup(row1, 2, w1, w2); // Left w3 uncharted
			MakeWordGroup(row2, 0, w4, w4); // Leaves 1 wordform uncharted (in the ribbon)
			var testCell = m_ccl.MakeLocObj(2, row1);

			int whereToInsertActual;
			IConstChartWordGroup existingWordGroupActual;

			// SUT; icol of WordGroup in question = 2, iPara of ChOrph = 1
			var result = m_ccl.FindWhereToAddChOrph(testCell, 1, w3.GetMyBeginOffsetInPara(),
				out whereToInsertActual, out existingWordGroupActual);

			// Test results
			Assert.AreEqual(ConstituentChartLogic.FindWhereToAddResult.kAppendToExisting, result,
				"Wrong enum result.");
			Assert.AreEqual(2, whereToInsertActual, "The index whereToInsert is wrong.");
			Assert.AreEqual(wg1_2.Hvo, existingWordGroupActual.Hvo, "Wrong WordGroup.");
		}