コード例 #1
0
        public void EditMoveDown()
        {
            InterlinLineChoices choices = new EditableInterlinLineChoices(m_lp, kwsVernInPara, kwsAnalysis);

            // To make it less confusing, here we add them in an order that does not produce
            // reordering.
            MakeStandardState(choices);

            //choices.Add(InterlinLineChoices.kflidWord); // 0
            //choices.Add(InterlinLineChoices.kflidMorphemes); // 1
            //choices.Add(InterlinLineChoices.kflidLexEntries); //2
            //choices.Add(InterlinLineChoices.kflidLexGloss); //3
            //choices.Add(InterlinLineChoices.kflidLexPos); //4
            //choices.Add(InterlinLineChoices.kflidWordGloss); //5
            //choices.Add(InterlinLineChoices.kflidWordPos); //6
            //choices.Add(InterlinLineChoices.kflidFreeTrans); //7
            //choices.Add(InterlinLineChoices.kflidLitTrans); //8

            Assert.IsTrue(choices.OkToMoveDown(0));             // word line
            Assert.IsTrue(choices.OkToMoveDown(1));             // morphemes
            Assert.IsTrue(choices.OkToMoveDown(2));             // lex entries
            Assert.IsTrue(choices.OkToMoveDown(3));             // lex gloss
            Assert.IsTrue(choices.OkToMoveDown(4));             // lex pos -- whole morph bundle moves down
            Assert.IsTrue(choices.OkToMoveDown(5));             // Word gloss
            Assert.IsFalse(choices.OkToMoveDown(6));            // Word pos can't go past free
            Assert.IsTrue(choices.OkToMoveDown(7));             // free trans
            Assert.IsFalse(choices.OkToMoveDown(8));            // lit trans -- last can't go down

            choices.MoveDown(3);
            // nothing complicated, two items changed place.
            Assert.AreEqual(InterlinLineChoices.kflidLexPos, choices[3].Flid);
            Assert.AreEqual(InterlinLineChoices.kflidLexGloss, choices[4].Flid);

            choices = new EditableInterlinLineChoices(m_lp, kwsVernInPara, kwsAnalysis);
            MakeStandardState(choices);
            choices.MoveDown(4);
            // Moves past whole morpheme bundle
            Assert.AreEqual(InterlinLineChoices.kflidWordGloss, choices[1].Flid);
            Assert.AreEqual(InterlinLineChoices.kflidMorphemes, choices[2].Flid);
            Assert.AreEqual(InterlinLineChoices.kflidLexEntries, choices[3].Flid);

            // Now, the morphemes line can move up, to move the whole bundle.
            Assert.IsTrue(choices.OkToMoveDown(1)); // morphemes line now below word gloss.
            choices.MoveDown(1);                    // whole bundle moves.
            Assert.AreEqual(InterlinLineChoices.kflidWordGloss, choices[5].Flid);
            Assert.AreEqual(InterlinLineChoices.kflidMorphemes, choices[1].Flid);
            Assert.AreEqual(InterlinLineChoices.kflidLexEntries, choices[2].Flid);

            choices = new EditableInterlinLineChoices(m_lp, kwsVernInPara, kwsAnalysis);
            MakeStandardState(choices);
            choices.MoveDown(5);
            // nothing complicated, two items changed place.
            Assert.AreEqual(InterlinLineChoices.kflidWordPos, choices[5].Flid);
            Assert.AreEqual(InterlinLineChoices.kflidWordGloss, choices[6].Flid);

            choices = new EditableInterlinLineChoices(m_lp, kwsVernInPara, kwsAnalysis);
            MakeStandardState(choices);
            choices.MoveDown(7);
            // nothing complicated, two items changed place.
            Assert.AreEqual(InterlinLineChoices.kflidLitTrans, choices[7].Flid);
            Assert.AreEqual(InterlinLineChoices.kflidFreeTrans, choices[8].Flid);

            // Left out a lot of the complicated cases, since move down is just implemented
            // as an inverse MoveUp.
        }
コード例 #2
0
		public void EditMoveDown()
		{
			InterlinLineChoices choices = new EditableInterlinLineChoices(0, kwsAnalysis);
			// To make it less confusing, here we add them in an order that does not produce
			// reordering.
			MakeStandardState(choices);

			//choices.Add(InterlinLineChoices.kflidWord); // 0
			//choices.Add(InterlinLineChoices.kflidMorphemes); // 1
			//choices.Add(InterlinLineChoices.kflidLexEntries); //2
			//choices.Add(InterlinLineChoices.kflidLexGloss); //3
			//choices.Add(InterlinLineChoices.kflidLexPos); //4
			//choices.Add(InterlinLineChoices.kflidWordGloss); //5
			//choices.Add(InterlinLineChoices.kflidWordPos); //6
			//choices.Add(InterlinLineChoices.kflidFreeTrans); //7
			//choices.Add(InterlinLineChoices.kflidLitTrans); //8

			Assert.IsTrue(choices.OkToMoveDown(0)); // word line
			Assert.IsTrue(choices.OkToMoveDown(1)); // morphemes
			Assert.IsTrue(choices.OkToMoveDown(2)); // lex entries
			Assert.IsTrue(choices.OkToMoveDown(3));  // lex gloss
			Assert.IsTrue(choices.OkToMoveDown(4));	 // lex pos -- whole morph bundle moves down
			Assert.IsTrue(choices.OkToMoveDown(5));  // Word gloss
			Assert.IsFalse(choices.OkToMoveDown(6)); // Word pos can't go past free
			Assert.IsTrue(choices.OkToMoveDown(7));	 // free trans
			Assert.IsFalse(choices.OkToMoveDown(8)); // lit trans -- last can't go down

			choices.MoveDown(3);
			// nothing complicated, two items changed place.
			Assert.AreEqual(InterlinLineChoices.kflidLexPos, choices[3].Flid);
			Assert.AreEqual(InterlinLineChoices.kflidLexGloss, choices[4].Flid);

			choices = new EditableInterlinLineChoices(0, kwsAnalysis);
			MakeStandardState(choices);
			choices.MoveDown(4);
			// Moves past whole morpheme bundle
			Assert.AreEqual(InterlinLineChoices.kflidWordGloss, choices[1].Flid);
			Assert.AreEqual(InterlinLineChoices.kflidMorphemes, choices[2].Flid);
			Assert.AreEqual(InterlinLineChoices.kflidLexEntries, choices[3].Flid);

			// Now, the morphemes line can move up, to move the whole bundle.
			Assert.IsTrue(choices.OkToMoveDown(1)); // morphemes line now below word gloss.
			choices.MoveDown(1); // whole bundle moves.
			Assert.AreEqual(InterlinLineChoices.kflidWordGloss, choices[5].Flid);
			Assert.AreEqual(InterlinLineChoices.kflidMorphemes, choices[1].Flid);
			Assert.AreEqual(InterlinLineChoices.kflidLexEntries, choices[2].Flid);

			choices = new EditableInterlinLineChoices(0, kwsAnalysis);
			MakeStandardState(choices);
			choices.MoveDown(5);
			// nothing complicated, two items changed place.
			Assert.AreEqual(InterlinLineChoices.kflidWordPos, choices[5].Flid);
			Assert.AreEqual(InterlinLineChoices.kflidWordGloss, choices[6].Flid);

			choices = new EditableInterlinLineChoices(0, kwsAnalysis);
			MakeStandardState(choices);
			choices.MoveDown(7);
			// nothing complicated, two items changed place.
			Assert.AreEqual(InterlinLineChoices.kflidLitTrans, choices[7].Flid);
			Assert.AreEqual(InterlinLineChoices.kflidFreeTrans, choices[8].Flid);

			// Left out a lot of the complicated cases, since move down is just implemented
			// as an inverse MoveUp.
		}
コード例 #3
0
        public void EditMoveUp()
        {
            InterlinLineChoices choices = new EditableInterlinLineChoices(m_lp, kwsVernInPara, kwsAnalysis);

            // To make it less confusing, here we add them in an order that does not produce
            // reordering.
            MakeStandardState(choices);
            //choices.Add(InterlinLineChoices.kflidWord); // 0
            //choices.Add(InterlinLineChoices.kflidMorphemes); // 1
            //choices.Add(InterlinLineChoices.kflidLexEntries); //2
            //choices.Add(InterlinLineChoices.kflidLexGloss); //3
            //choices.Add(InterlinLineChoices.kflidLexPos); //4
            //choices.Add(InterlinLineChoices.kflidWordGloss); //5
            //choices.Add(InterlinLineChoices.kflidWordPos); //6
            //choices.Add(InterlinLineChoices.kflidFreeTrans); //7
            //choices.Add(InterlinLineChoices.kflidLitTrans); //8

            Assert.IsFalse(choices.OkToMoveUp(0));            // words line already at top
            Assert.IsTrue(choices.OkToMoveUp(1));             // morphemes
            Assert.IsTrue(choices.OkToMoveUp(2));             // lex entries
            Assert.IsTrue(choices.OkToMoveUp(3));             // lex gloss
            Assert.IsTrue(choices.OkToMoveUp(4));             // lex pos
            Assert.IsTrue(choices.OkToMoveUp(5));             // will move past whole morph bundle
            Assert.IsTrue(choices.OkToMoveUp(6));
            Assert.IsFalse(choices.OkToMoveUp(7));            // free can't go anywhere
            Assert.IsTrue(choices.OkToMoveUp(8));

            choices.MoveUp(4);
            // nothing complicated, two items changed place.
            Assert.AreEqual(InterlinLineChoices.kflidLexPos, choices[3].Flid);
            Assert.AreEqual(InterlinLineChoices.kflidLexGloss, choices[4].Flid);

            choices = new EditableInterlinLineChoices(m_lp, kwsVernInPara, kwsAnalysis);
            MakeStandardState(choices);
            choices.MoveUp(5);
            // Moves past whole morpheme bundle
            Assert.AreEqual(InterlinLineChoices.kflidWordGloss, choices[1].Flid);
            Assert.AreEqual(InterlinLineChoices.kflidMorphemes, choices[2].Flid);
            Assert.AreEqual(InterlinLineChoices.kflidLexEntries, choices[3].Flid);

            // Now, the morphemes line can move up, to move the whole bundle.
            Assert.IsTrue(choices.OkToMoveUp(2)); // morphemes line now below word gloss.
            choices.MoveUp(2);                    // whole bundle moves.
            Assert.AreEqual(InterlinLineChoices.kflidWordGloss, choices[5].Flid);
            Assert.AreEqual(InterlinLineChoices.kflidMorphemes, choices[1].Flid);
            Assert.AreEqual(InterlinLineChoices.kflidLexEntries, choices[2].Flid);

            choices = new EditableInterlinLineChoices(m_lp, kwsVernInPara, kwsAnalysis);
            MakeStandardState(choices);
            choices.MoveUp(6);
            // nothing complicated, two items changed place.
            Assert.AreEqual(InterlinLineChoices.kflidWordPos, choices[5].Flid);
            Assert.AreEqual(InterlinLineChoices.kflidWordGloss, choices[6].Flid);

            choices = new EditableInterlinLineChoices(m_lp, kwsVernInPara, kwsAnalysis);
            MakeStandardState(choices);
            choices.MoveUp(8);
            // nothing complicated, two items changed place.
            Assert.AreEqual(InterlinLineChoices.kflidLitTrans, choices[7].Flid);
            Assert.AreEqual(InterlinLineChoices.kflidFreeTrans, choices[8].Flid);

            // Try finding some default ws values.
            choices = new EditableInterlinLineChoices(m_lp, kwsVernInPara, kwsAnalysis);
            Assert.AreEqual(0, choices.Count);
            List <int> wsList = choices.WritingSystemsForFlid(InterlinLineChoices.kflidWord);

            Assert.AreEqual(0, wsList.Count);
            wsList = choices.WritingSystemsForFlid(InterlinLineChoices.kflidWord, true);
            Assert.AreEqual(1, wsList.Count);
            Assert.AreEqual(kwsVernInPara, wsList[0]);
            wsList = choices.WritingSystemsForFlid(InterlinLineChoices.kflidWordGloss);
            Assert.AreEqual(0, wsList.Count);
            wsList = choices.WritingSystemsForFlid(InterlinLineChoices.kflidWordGloss, true);
            Assert.AreEqual(1, wsList.Count);
            Assert.AreEqual(Cache.DefaultAnalWs, wsList[0]);

            // Try one with another WS.
            choices = new EditableInterlinLineChoices(m_lp, kwsVernInPara, kwsAnalysis);
            MakeStandardState(choices);
            wsList = choices.WritingSystemsForFlid(InterlinLineChoices.kflidLexGloss);
            Assert.AreEqual(1, wsList.Count);
            Assert.AreEqual(WritingSystemServices.kwsFirstAnal, wsList[0]);
            choices.Add(InterlinLineChoices.kflidLexGloss, 3004);             //becomes 4 (by default, after existing field with same flid)
            wsList = choices.WritingSystemsForFlid(InterlinLineChoices.kflidLexGloss);
            Assert.AreEqual(2, wsList.Count);
            Assert.AreEqual(WritingSystemServices.kwsFirstAnal, wsList[0]);
            Assert.AreEqual(3004, wsList[1]);
            Assert.AreEqual(InterlinLineChoices.kflidLexGloss, choices[4].Flid);
            choices.MoveDown(4);
            Assert.AreEqual(InterlinLineChoices.kflidLexGloss, choices[5].Flid);
            Assert.IsTrue(choices.OkToMoveUp(5));
            choices.MoveUp(5);
            Assert.AreEqual(InterlinLineChoices.kflidLexGloss, choices[4].Flid);
            Assert.AreEqual(3004, choices[4].WritingSystem);
            Assert.AreEqual(InterlinLineChoices.kflidLexPos, choices[5].Flid);
            Assert.IsTrue(choices.OkToMoveUp(5));

            Assert.IsTrue(choices.OkToMoveUp(4));
            choices.MoveUp(4);
            Assert.AreEqual(InterlinLineChoices.kflidLexGloss, choices[3].Flid);
            Assert.AreEqual(3004, choices[3].WritingSystem);
            Assert.AreEqual(InterlinLineChoices.kflidLexGloss, choices[4].Flid);
            Assert.AreEqual(WritingSystemServices.kwsFirstAnal, choices[4].WritingSystem);
            Assert.IsTrue(choices.OkToMoveUp(3));

            // Another ws of entries can move up just as far (not past the primary
            // one that has the controls).
            choices = new EditableInterlinLineChoices(m_lp, kwsVernInPara, kwsAnalysis);
            MakeStandardState(choices);
            wsList = choices.WritingSystemsForFlid(InterlinLineChoices.kflidLexEntries);
            Assert.AreEqual(1, wsList.Count);
            Assert.AreEqual(kwsVernInPara, wsList[0]);
            choices.Add(InterlinLineChoices.kflidLexEntries, 3005);             //becomes 3
            wsList = choices.WritingSystemsForFlid(InterlinLineChoices.kflidLexEntries);
            Assert.AreEqual(2, wsList.Count);
            Assert.AreEqual(kwsVernInPara, wsList[0]);
            Assert.AreEqual(3005, wsList[1]);
            Assert.AreEqual(InterlinLineChoices.kflidLexEntries, choices[3].Flid);
            choices.MoveDown(3);
            choices.MoveDown(4);
            Assert.AreEqual(InterlinLineChoices.kflidLexEntries, choices[5].Flid);
            Assert.IsTrue(choices.OkToMoveUp(5));
            choices.MoveUp(5);
            Assert.IsTrue(choices.OkToMoveUp(4));
            choices.MoveUp(4);
            Assert.AreEqual(InterlinLineChoices.kflidLexEntries, choices[3].Flid);
            Assert.AreEqual(3005, choices[3].WritingSystem);
            Assert.AreEqual(InterlinLineChoices.kflidLexGloss, choices[4].Flid);
            Assert.AreEqual(WritingSystemServices.kwsFirstAnal, choices[4].WritingSystem);
            Assert.IsTrue(choices.OkToMoveUp(3));             // not past primary LexEntry.

            // Another ws of morphemes can move up just under the primary one (not past the primary
            // one that has the controls).
            choices = new EditableInterlinLineChoices(m_lp, kwsVernInPara, kwsAnalysis);
            MakeStandardState(choices);
            choices.Add(InterlinLineChoices.kflidMorphemes, 3006);             //becomes 2
            wsList = choices.WritingSystemsForFlid(InterlinLineChoices.kflidMorphemes);
            Assert.AreEqual(2, wsList.Count);
            Assert.AreEqual(InterlinLineChoices.kflidMorphemes, choices[2].Flid);
            choices.MoveDown(2);
            choices.MoveDown(3);
            choices.MoveDown(4);
            Assert.AreEqual(InterlinLineChoices.kflidMorphemes, choices[5].Flid);
            Assert.IsTrue(choices.OkToMoveUp(5));
            choices.MoveUp(5);
            Assert.IsTrue(choices.OkToMoveUp(4));
            choices.MoveUp(4);
            Assert.IsTrue(choices.OkToMoveUp(3));
            choices.MoveUp(3);
            Assert.AreEqual(InterlinLineChoices.kflidMorphemes, choices[2].Flid);
            Assert.AreEqual(3006, choices[2].WritingSystem);
            Assert.AreEqual(InterlinLineChoices.kflidLexEntries, choices[3].Flid);
            Assert.IsTrue(choices.OkToMoveUp(2));             // not past primary morphemes.

            // Another ws of word starts out right after it.
            choices = new EditableInterlinLineChoices(m_lp, kwsVernInPara, kwsAnalysis);
            MakeStandardState(choices);
            choices.Add(InterlinLineChoices.kflidWord, 3007);             //becomes 1
            Assert.AreEqual(InterlinLineChoices.kflidWord, choices[1].Flid);
            wsList = choices.WritingSystemsForFlid(InterlinLineChoices.kflidWord);
            Assert.AreEqual(2, wsList.Count);
        }
コード例 #4
0
		public void EditMoveUp()
		{
			InterlinLineChoices choices = new EditableInterlinLineChoices(0, kwsAnalysis);
			// To make it less confusing, here we add them in an order that does not produce
			// reordering.
			MakeStandardState(choices);
			//choices.Add(InterlinLineChoices.kflidWord); // 0
			//choices.Add(InterlinLineChoices.kflidMorphemes); // 1
			//choices.Add(InterlinLineChoices.kflidLexEntries); //2
			//choices.Add(InterlinLineChoices.kflidLexGloss); //3
			//choices.Add(InterlinLineChoices.kflidLexPos); //4
			//choices.Add(InterlinLineChoices.kflidWordGloss); //5
			//choices.Add(InterlinLineChoices.kflidWordPos); //6
			//choices.Add(InterlinLineChoices.kflidFreeTrans); //7
			//choices.Add(InterlinLineChoices.kflidLitTrans); //8

			Assert.IsFalse(choices.OkToMoveUp(0)); // words line already at top
			Assert.IsTrue(choices.OkToMoveUp(1)); // morphemes
			Assert.IsTrue(choices.OkToMoveUp(2)); // lex entries
			Assert.IsTrue(choices.OkToMoveUp(3)); // lex gloss
			Assert.IsTrue(choices.OkToMoveUp(4)); // lex pos
			Assert.IsTrue(choices.OkToMoveUp(5)); // will move past whole morph bundle
			Assert.IsTrue(choices.OkToMoveUp(6));
			Assert.IsFalse(choices.OkToMoveUp(7)); // free can't go anywhere
			Assert.IsTrue(choices.OkToMoveUp(8));

			choices.MoveUp(4);
			// nothing complicated, two items changed place.
			Assert.AreEqual(InterlinLineChoices.kflidLexPos, choices[3].Flid);
			Assert.AreEqual(InterlinLineChoices.kflidLexGloss, choices[4].Flid);

			choices = new EditableInterlinLineChoices(0, kwsAnalysis);
			MakeStandardState(choices);
			choices.MoveUp(5);
			// Moves past whole morpheme bundle
			Assert.AreEqual(InterlinLineChoices.kflidWordGloss, choices[1].Flid);
			Assert.AreEqual(InterlinLineChoices.kflidMorphemes, choices[2].Flid);
			Assert.AreEqual(InterlinLineChoices.kflidLexEntries, choices[3].Flid);

			// Now, the morphemes line can move up, to move the whole bundle.
			Assert.IsTrue(choices.OkToMoveUp(2)); // morphemes line now below word gloss.
			choices.MoveUp(2); // whole bundle moves.
			Assert.AreEqual(InterlinLineChoices.kflidWordGloss, choices[5].Flid);
			Assert.AreEqual(InterlinLineChoices.kflidMorphemes, choices[1].Flid);
			Assert.AreEqual(InterlinLineChoices.kflidLexEntries, choices[2].Flid);

			choices = new EditableInterlinLineChoices(0, kwsAnalysis);
			MakeStandardState(choices);
			choices.MoveUp(6);
			// nothing complicated, two items changed place.
			Assert.AreEqual(InterlinLineChoices.kflidWordPos, choices[5].Flid);
			Assert.AreEqual(InterlinLineChoices.kflidWordGloss, choices[6].Flid);

			choices = new EditableInterlinLineChoices(0, kwsAnalysis);
			MakeStandardState(choices);
			choices.MoveUp(8);
			// nothing complicated, two items changed place.
			Assert.AreEqual(InterlinLineChoices.kflidLitTrans, choices[7].Flid);
			Assert.AreEqual(InterlinLineChoices.kflidFreeTrans, choices[8].Flid);

			// Try finding some default ws values.
			choices = new EditableInterlinLineChoices(0, kwsAnalysis);
			Assert.AreEqual(0, choices.Count);
			List<int> wsList = choices.WritingSystemsForFlid(InterlinLineChoices.kflidWord);
			Assert.AreEqual(0, wsList.Count);
			wsList = choices.WritingSystemsForFlid(InterlinLineChoices.kflidWord, true);
			Assert.AreEqual(1, wsList.Count);
			Assert.AreEqual(kwsVern, wsList[0]);
			wsList = choices.WritingSystemsForFlid(InterlinLineChoices.kflidWordGloss);
			Assert.AreEqual(0, wsList.Count);
			wsList = choices.WritingSystemsForFlid(InterlinLineChoices.kflidWordGloss, true);
			Assert.AreEqual(1, wsList.Count);
			Assert.AreEqual(kwsAnalysis, wsList[0]);

			// Try one with another WS.
			choices = new EditableInterlinLineChoices(0, kwsAnalysis);
			MakeStandardState(choices);
			wsList = choices.WritingSystemsForFlid(InterlinLineChoices.kflidLexGloss);
			Assert.AreEqual(1, wsList.Count);
			Assert.AreEqual(LangProject.kwsFirstAnal, wsList[0]);
			choices.Add(InterlinLineChoices.kflidLexGloss, 3004); //becomes 4 (by default, after existing field with same flid)
			wsList = choices.WritingSystemsForFlid(InterlinLineChoices.kflidLexGloss);
			Assert.AreEqual(2, wsList.Count);
			Assert.AreEqual(LangProject.kwsFirstAnal, wsList[0]);
			Assert.AreEqual(3004, wsList[1]);
			Assert.AreEqual(InterlinLineChoices.kflidLexGloss, choices[4].Flid);
			choices.MoveDown(4);
			Assert.AreEqual(InterlinLineChoices.kflidLexGloss, choices[5].Flid);
			Assert.IsTrue(choices.OkToMoveUp(5));
			choices.MoveUp(5);
			Assert.AreEqual(InterlinLineChoices.kflidLexGloss, choices[4].Flid);
			Assert.AreEqual(3004, choices[4].WritingSystem);
			Assert.AreEqual(InterlinLineChoices.kflidLexPos, choices[5].Flid);
			Assert.IsTrue(choices.OkToMoveUp(5));

			Assert.IsTrue(choices.OkToMoveUp(4));
			choices.MoveUp(4);
			Assert.AreEqual(InterlinLineChoices.kflidLexGloss, choices[3].Flid);
			Assert.AreEqual(3004, choices[3].WritingSystem);
			Assert.AreEqual(InterlinLineChoices.kflidLexGloss, choices[4].Flid);
			Assert.AreEqual((int)LangProject.kwsFirstAnal, choices[4].WritingSystem);
			Assert.IsTrue(choices.OkToMoveUp(3));

			// Another ws of entries can move up just as far (not past the primary
			// one that has the controls).
			choices = new EditableInterlinLineChoices(0, kwsAnalysis);
			MakeStandardState(choices);
			wsList = choices.WritingSystemsForFlid(InterlinLineChoices.kflidLexEntries);
			Assert.AreEqual(1, wsList.Count);
			Assert.AreEqual(kwsVern, wsList[0]);
			choices.Add(InterlinLineChoices.kflidLexEntries, 3005); //becomes 3
			wsList = choices.WritingSystemsForFlid(InterlinLineChoices.kflidLexEntries);
			Assert.AreEqual(2, wsList.Count);
			Assert.AreEqual(kwsVern, wsList[0]);
			Assert.AreEqual(3005, wsList[1]);
			Assert.AreEqual(InterlinLineChoices.kflidLexEntries, choices[3].Flid);
			choices.MoveDown(3);
			choices.MoveDown(4);
			Assert.AreEqual(InterlinLineChoices.kflidLexEntries, choices[5].Flid);
			Assert.IsTrue(choices.OkToMoveUp(5));
			choices.MoveUp(5);
			Assert.IsTrue(choices.OkToMoveUp(4));
			choices.MoveUp(4);
			Assert.AreEqual(InterlinLineChoices.kflidLexEntries, choices[3].Flid);
			Assert.AreEqual(3005, choices[3].WritingSystem);
			Assert.AreEqual(InterlinLineChoices.kflidLexGloss, choices[4].Flid);
			Assert.AreEqual((int)LangProject.kwsFirstAnal, choices[4].WritingSystem);
			Assert.IsTrue(choices.OkToMoveUp(3)); // not past primary LexEntry.

			// Another ws of morphemes can move up just under the primary one (not past the primary
			// one that has the controls).
			choices = new EditableInterlinLineChoices(0, kwsAnalysis);
			MakeStandardState(choices);
			choices.Add(InterlinLineChoices.kflidMorphemes, 3006); //becomes 2
			wsList = choices.WritingSystemsForFlid(InterlinLineChoices.kflidMorphemes);
			Assert.AreEqual(2, wsList.Count);
			Assert.AreEqual(InterlinLineChoices.kflidMorphemes, choices[2].Flid);
			choices.MoveDown(2);
			choices.MoveDown(3);
			choices.MoveDown(4);
			Assert.AreEqual(InterlinLineChoices.kflidMorphemes, choices[5].Flid);
			Assert.IsTrue(choices.OkToMoveUp(5));
			choices.MoveUp(5);
			Assert.IsTrue(choices.OkToMoveUp(4));
			choices.MoveUp(4);
			Assert.IsTrue(choices.OkToMoveUp(3));
			choices.MoveUp(3);
			Assert.AreEqual(InterlinLineChoices.kflidMorphemes, choices[2].Flid);
			Assert.AreEqual(3006, choices[2].WritingSystem);
			Assert.AreEqual(InterlinLineChoices.kflidLexEntries, choices[3].Flid);
			Assert.IsTrue(choices.OkToMoveUp(2)); // not past primary morphemes.

			// Another ws of word starts out right after it.
			choices = new EditableInterlinLineChoices(0, kwsAnalysis);
			MakeStandardState(choices);
			choices.Add(InterlinLineChoices.kflidWord, 3007); //becomes 1
			Assert.AreEqual(InterlinLineChoices.kflidWord, choices[1].Flid);
			wsList = choices.WritingSystemsForFlid(InterlinLineChoices.kflidWord);
			Assert.AreEqual(2, wsList.Count);
		}