public void AddLanguage() { File.Delete(TestUtil.GetTestFile("desclocalize\\symbols_working.xml")); File.Copy(TestUtil.GetTestFile("desclocalize\\symbols.xml"), TestUtil.GetTestFile("desclocalize\\symbols_working.xml")); SymbolDB symbolDB = new SymbolDB(TestUtil.GetTestFile("desclocalize\\symbols_working.xml")); DescriptionLocalize localizer = new DescriptionLocalize(symbolDB); localizer.AddLanguage(new SymbolLanguage("Dutch", "nl", false, false, false, null, false, null), "en"); localizer.AddLanguage(new SymbolLanguage("Korean", "ko", true, false, true, new string[] { "masculine", "feminine" }, false, null), "en"); SymbolLanguage[] expected = { new SymbolLanguage("English", "en", true, false, false, null, false, null), new SymbolLanguage("Francais", "fr", true, true, true, new string[] { "masculine", "feminine" }, false, null), new SymbolLanguage("Deutsch", "de", true, true, true, new string[] {"masculine", "feminine", "neuter"}, false, null), new SymbolLanguage("Dutch", "nl", false, false, false, null, false, null), new SymbolLanguage("Korean", "ko", true, false, true, new string[] { "masculine", "feminine" }, false, null)}; List<SymbolLanguage> languages = new List<SymbolLanguage>(symbolDB.AllLanguages); CollectionAssert.AreEquivalent(expected, languages); SymbolText[] expectedTerraces = { new SymbolText() {Lang = "en", Plural = false, Gender = "", Text = "terrace", Case="", CaseOfModified = ""}, new SymbolText() {Lang = "en", Plural = true, Gender = "", Text = "terraces", Case="", CaseOfModified = ""}, new SymbolText() {Lang = "nl", Plural = false, Gender = "", Text = "terrace", Case="", CaseOfModified = ""}, new SymbolText() {Lang = "nl", Plural = true, Gender = "", Text = "terraces", Case="", CaseOfModified = ""}, new SymbolText() {Lang = "ko", Plural = false, Gender = "", Text = "terrace", Case="", CaseOfModified = ""}, new SymbolText() {Lang = "ko", Plural = true, Gender = "", Text = "terraces", Case="", CaseOfModified = ""}, }; CollectionAssert.AreEquivalent(expectedTerraces, symbolDB["1.1"].SymbolTexts); Assert.AreEqual("Terrace", symbolDB["1.1"].GetName("nl")); Assert.AreEqual("Terrace", symbolDB["1.1"].GetName("ko")); }
public void AllControlsEquals() { SymbolDB symbolDB = new SymbolDB(Util.GetFileInAppDirectory("symbols.xml")); UndoMgr undomgr = new UndoMgr(5); EventDB eventDB = new EventDB(undomgr); CourseView courseView, courseView2; CourseLayout course, course2; eventDB.Load(TestUtil.GetTestFile("courselayout\\marymoor1.coursescribe")); eventDB.Validate(); // Create the all controls course courseView = CourseView.CreateViewingCourseView(eventDB, CourseDesignator.AllControls); course = new CourseLayout(); course.SetLayerColor(CourseLayer.Descriptions, 0, "Black", 0, 0, 0, 1F, false); course.SetLayerColor(CourseLayer.MainCourse, 12, "Purple", 0.2F, 1, 0, 0.1F, false); CourseFormatter.FormatCourseToLayout(symbolDB, courseView, defaultCourseAppearance, course, CourseLayer.MainCourse); // Create the all controls course again courseView2 = CourseView.CreateViewingCourseView(eventDB, CourseDesignator.AllControls); course2 = new CourseLayout(); course2.SetLayerColor(CourseLayer.Descriptions, 0, "Black", 0, 0, 0, 1F, false); course2.SetLayerColor(CourseLayer.MainCourse, 12, "Purple", 0.2F, 1, 0, 0.1F, false); CourseFormatter.FormatCourseToLayout(symbolDB, courseView2, defaultCourseAppearance, course2, CourseLayer.MainCourse); // Make sure that they are equal. Assert.AreEqual(course, course, "CourseLayouts that are equivalent should compare equal."); Assert.AreEqual(course, course2, "CourseLayouts that are equivalent should compare equal."); }
public void HasLanguage() { SymbolDB symbolDB = new SymbolDB(TestUtil.GetTestFile("symbols\\intl_symbols.xml")); Assert.IsTrue(symbolDB.HasLanguage("en")); Assert.IsTrue(symbolDB.HasLanguage("bg")); Assert.IsFalse(symbolDB.HasLanguage("az")); }
public void Initialize(SymbolDB symbolDB) { this.symbolDB = symbolDB; foreach (Symbol sym in symbolDB.AllSymbols) { listBoxSymbols.Items.Add(sym.Id + " - " + sym.GetName(Util.CurrentLangName())); } }
public void AllControlsCourseView() { UndoMgr undomgr = new UndoMgr(5); EventDB eventDB = new EventDB(undomgr); SymbolDB symbolDB = new SymbolDB(Util.GetFileInAppDirectory("symbols.xml")); StringWriter writer = new StringWriter(); string actual, expected; eventDB.Load(TestUtil.GetTestFile("courseview\\sampleevent1.coursescribe")); eventDB.Validate(); CourseView courseView = CourseView.CreateViewingCourseView(eventDB, CourseDesignator.AllControls); DumpCourseView(courseView, writer); actual = writer.ToString(); expected = @"Name='All controls', Kind='AllControls', CourseId=0 Total Length=0 Part Length=0 Total Climb=-1 ScoreColumn=-1 Total Score=0 Total Controls=17 0: [-1] Ids: 1, 0 1: [-1] Ids: 23, 0 2: [-1] Ids: 2, 0 3: [-1] Ids: 4, 0 4: [-1] Ids: 12, 0 5: [-1] Ids: 7, 0 6: [-1] Ids: 10, 0 7: [-1] Ids: 11, 0 8: [-1] Ids: 8, 0 9: [-1] Ids: 9, 0 10: [-1] Ids: 13, 0 11: [-1] Ids: 14, 0 12: [-1] Ids: 16, 0 13: [-1] Ids: 17, 0 14: [-1] Ids: 18, 0 15: [-1] Ids: 19, 0 16: [-1] Ids: 20, 0 17: [-1] Ids: 21, 0 18: [-1] Ids: 5, 0 19: [-1] Ids: 6, 0 20: [-1] Ids: 24, 0 21: [-1] Ids: 3, 0 22: [-1] Ids: 15, 0 23: [-1] Ids: 22, 0 Special 1 (FirstAid) Special 2 (OptCrossing) Special 3 (Boundary) Special 4 (OOB) Special 5 (Text) "; Assert.AreEqual(expected, actual); }
public void Initialize(EventDB eventDB, SymbolDB symbolDB) { eventDB.Validate(); this.eventDB = eventDB; this.symbolDB = symbolDB; descriptionControl1.SymbolDB = symbolDB; listBoxCourses.Items.Add(new CourseItem(eventDB, Id<Course>.None)); foreach (Id<Course> courseId in QueryEvent.SortedCourseIds(eventDB)) { listBoxCourses.Items.Add(new CourseItem(eventDB, courseId)); } listBoxCourses.SelectedIndex = 0; }
public void LanguageList() { SymbolDB symbolDB = new SymbolDB(TestUtil.GetTestFile("symbols\\intl_symbols.xml")); List<SymbolLanguage> languages = new List<SymbolLanguage>(symbolDB.AllLanguages); Assert.AreEqual(2, languages.Count); Assert.AreEqual("en", languages[0].LangId); Assert.AreEqual("English", languages[0].Name); Assert.AreEqual(false, languages[0].PluralModifiers); Assert.AreEqual(true, languages[0].PluralNouns); Assert.AreEqual(false, languages[0].GenderModifiers); Assert.AreEqual("bg", languages[1].LangId); Assert.AreEqual("Bulgarish", languages[1].Name); Assert.AreEqual(true, languages[1].PluralModifiers); Assert.AreEqual(true, languages[1].PluralNouns); Assert.AreEqual(true, languages[1].GenderModifiers); CollectionAssert.AreEqual(new string[] { "masculine", "feminine" }, languages[1].Genders); }
// Sets up with special symbols.xml that has fake german text in it, to test gender/plural stuff. public void SetupWithGerman() { undomgr = new UndoMgr(5); eventDB = new EventDB(undomgr); symbolDB = new SymbolDB(TestUtil.GetTestFile("textifier\\de_symbols.xml")); eventDB.Load(TestUtil.GetTestFile("textifier\\sampleevent2.coursescribe")); eventDB.Validate(); }
void CheckCourse(string testfileName, Id<Course> courseId, CourseLayer layer, string expected) { SymbolDB symbolDB = new SymbolDB(Util.GetFileInAppDirectory("symbols.xml")); UndoMgr undomgr = new UndoMgr(5); EventDB eventDB = new EventDB(undomgr); CourseView courseView; CourseLayout course; eventDB.Load(TestUtil.GetTestFile(testfileName)); eventDB.Validate(); // Create the course courseView = CourseView.CreateViewingCourseView(eventDB, new CourseDesignator(courseId)); course = new CourseLayout(); CourseFormatter.FormatCourseToLayout(symbolDB, courseView, defaultCourseAppearance, course, layer); // Dump it to a string. StringWriter writer = new StringWriter(); course.Dump(writer); // Check that the string is correct. string actual = writer.ToString(); if (expected != actual) { for (int i = 0; i < Math.Min(expected.Length, actual.Length); ++i) if (actual[i] != expected[i]) { Console.WriteLine("Difference at -->{0}", actual.Substring(i, 30)); break; } } Assert.AreEqual(expected, writer.ToString()); }
public void ExpandTextMapExchange() { SymbolDB symbolDB = new SymbolDB(Util.GetFileInAppDirectory("symbols.xml")); UndoMgr undomgr = new UndoMgr(5); EventDB eventDB = new EventDB(undomgr); CourseView courseView; // Map Exchange eventDB.Load(TestUtil.GetTestFile("courseformat\\mapexchange1.ppen")); eventDB.Validate(); courseView = CourseView.CreateViewingCourseView(eventDB, new CourseDesignator(CourseId(6))); string result; result = CourseFormatter.ExpandText(eventDB, courseView, "$(CourseName)"); Assert.AreEqual("Course 5", result); result = CourseFormatter.ExpandText(eventDB, courseView, "$(CoursePart)"); Assert.AreEqual("", result); courseView = CourseView.CreateViewingCourseView(eventDB, new CourseDesignator(CourseId(6), 0)); result = CourseFormatter.ExpandText(eventDB, courseView, "$(CourseName)"); Assert.AreEqual("Course 5", result); result = CourseFormatter.ExpandText(eventDB, courseView, "$(CoursePart)"); Assert.AreEqual("1", result); courseView = CourseView.CreateViewingCourseView(eventDB, new CourseDesignator(CourseId(6), 3)); result = CourseFormatter.ExpandText(eventDB, courseView, "$(CourseName)"); Assert.AreEqual("Course 5", result); result = CourseFormatter.ExpandText(eventDB, courseView, "$(CoursePart)"); Assert.AreEqual("4", result); }
public void DisplayAllCourses() { SymbolDB symbolDB = new SymbolDB(Util.GetFileInAppDirectory("symbols.xml")); UndoMgr undomgr = new UndoMgr(5); EventDB eventDB = new EventDB(undomgr); CourseView courseView; CourseLayout course; eventDB.Load(TestUtil.GetTestFile("courseformat\\marymoor1.coursescribe")); eventDB.Validate(); foreach (Id<Course> courseId in QueryEvent.SortedCourseIds(eventDB)) { courseView = CourseView.CreateViewingCourseView(eventDB, new CourseDesignator(courseId)); course = new CourseLayout(); CourseFormatter.FormatCourseToLayout(symbolDB, courseView, defaultCourseAppearance, course, 0); course.Dump(Console.Out); Console.WriteLine(); } courseView = CourseView.CreateViewingCourseView(eventDB, CourseDesignator.AllControls); course = new CourseLayout(); CourseFormatter.FormatCourseToLayout(symbolDB, courseView, defaultCourseAppearance, course, 0); course.Dump(Console.Out); }
// Render the given course id (0 = all controls) and kind to a bitmap, and compare it to the saved version. internal void CheckRenderBitmapPixelAtATime(Id<Course> id, DescriptionKind kind) { SymbolDB symbolDB = new SymbolDB(Util.GetFileInAppDirectory("symbols.xml")); UndoMgr undomgr = new UndoMgr(5); EventDB eventDB = new EventDB(undomgr); CourseView courseView; eventDB.Load(TestUtil.GetTestFile("descriptions\\sampleevent1.coursescribe")); eventDB.Validate(); courseView = CourseView.CreateViewingCourseView(eventDB, new CourseDesignator(id)); DescriptionFormatter descFormatter = new DescriptionFormatter(courseView, symbolDB); DescriptionLine[] description = descFormatter.CreateDescription(false); Bitmap bmNew = RenderToBitmapPixelAtATime(symbolDB, description, kind); TestUtil.CheckBitmapsBase(bmNew, DescriptionBrowser.GetBitmapFileName(eventDB, id, "", kind)); }
// Render a description to a bitmap for testing purposes. Does one pixel at a time to test clip rectangle. internal static Bitmap RenderToBitmapPixelAtATime(SymbolDB symbolDB, DescriptionLine[] description, DescriptionKind kind) { DescriptionRenderer descriptionRenderer = new DescriptionRenderer(symbolDB); descriptionRenderer.Description = description; descriptionRenderer.DescriptionKind = kind; descriptionRenderer.CellSize = 40; descriptionRenderer.Margin = 4; SizeF size = descriptionRenderer.Measure(); Bitmap bm = new Bitmap((int)size.Width, (int)size.Height); Graphics g = Graphics.FromImage(bm); g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias; g.Clear(Color.White); for (int x = 0; x < size.Width; ++x) { for (int y = 0; y < size.Height; ++y) { Rectangle clip = new Rectangle(x, y, 1, 1); g.SetClip(clip); descriptionRenderer.RenderToGraphics(g, clip); } } g.Dispose(); return bm; }
public void HitTestRegular() { SymbolDB symbolDB = new SymbolDB(Util.GetFileInAppDirectory("symbols.xml")); UndoMgr undomgr = new UndoMgr(5); EventDB eventDB = new EventDB(undomgr); eventDB.Load(TestUtil.GetTestFile("descriptions\\sampleevent1.coursescribe")); eventDB.Validate(); CourseView courseView = CourseView.CreateViewingCourseView(eventDB, new CourseDesignator(CourseId(4))); DescriptionFormatter descFormatter = new DescriptionFormatter(courseView, symbolDB); DescriptionLine[] description = descFormatter.CreateDescription(false); DescriptionRenderer descriptionRenderer = new DescriptionRenderer(symbolDB); descriptionRenderer.Description = description; descriptionRenderer.CellSize = 40; descriptionRenderer.Margin = 5; descriptionRenderer.DescriptionKind = DescriptionKind.Symbols; CheckHitTest(descriptionRenderer, new Point(201,36), HitTestKind.Title, 0, 0, 0, new RectangleF(5, 5, 320, 40)); CheckHitTest(descriptionRenderer, new Point(79,50), HitTestKind.Header, 1, 1, 0, new RectangleF(5, 45, 120, 40)); CheckHitTest(descriptionRenderer, new Point(145,80), HitTestKind.Header, 1, 1, 1, new RectangleF(125, 45, 120, 40)); CheckHitTest(descriptionRenderer, new Point(289, 60), HitTestKind.Header, 1, 1, 2, new RectangleF(245, 45, 80, 40)); CheckHitTest(descriptionRenderer, new Point(175,216), HitTestKind.NormalBox, 5, 5,4, new RectangleF(165,205, 40, 40)); CheckHitTest(descriptionRenderer, new Point(285,365), HitTestKind.NormalBox, 9, 9,7, new RectangleF(285, 365, 40, 40)); CheckHitTest(descriptionRenderer, new Point(81,193), HitTestKind.Directive, 4, 4,0, new RectangleF(5,165, 320, 40)); CheckHitTest(descriptionRenderer, new Point(328,147), HitTestKind.None, -1, -1, -1, new RectangleF(0, 0, 0, 0)); CheckHitTest(descriptionRenderer, new Point(255, 427), HitTestKind.OtherTextLine, 10, 10, 0, new RectangleF(5, 405, 320, 40)); descriptionRenderer.DescriptionKind = DescriptionKind.Text; CheckHitTest(descriptionRenderer, new Point(201, 36), HitTestKind.Title, 0, 0, 0, new RectangleF(5, 5, 320, 40)); CheckHitTest(descriptionRenderer, new Point(79, 50), HitTestKind.Header, 1, 1, 0, new RectangleF(5, 45, 120, 40)); CheckHitTest(descriptionRenderer, new Point(145, 80), HitTestKind.Header, 1, 1, 1, new RectangleF(125, 45, 120, 40)); CheckHitTest(descriptionRenderer, new Point(289, 60), HitTestKind.Header, 1, 1, 2, new RectangleF(245, 45, 80, 40)); CheckHitTest(descriptionRenderer, new Point(175, 216), HitTestKind.NormalText, 5, 5, -1, new RectangleF(85, 205, 240, 40)); CheckHitTest(descriptionRenderer, new Point(285, 365), HitTestKind.NormalText, 9, 9, -1, new RectangleF(85, 365, 240, 40)); CheckHitTest(descriptionRenderer, new Point(59, 302), HitTestKind.NormalBox, 7, 7, 1, new RectangleF(45,285, 40, 40)); CheckHitTest(descriptionRenderer, new Point(81, 193), HitTestKind.DirectiveText, 4, 4, -1, new RectangleF(5, 165, 320, 40)); CheckHitTest(descriptionRenderer, new Point(328, 147), HitTestKind.None, -1, -1, -1, new RectangleF(0, 0, 0, 0)); CheckHitTest(descriptionRenderer, new Point(255, 427), HitTestKind.OtherTextLine, 10, 10, 0, new RectangleF(5, 405, 320, 40)); descriptionRenderer.DescriptionKind = DescriptionKind.SymbolsAndText; CheckHitTest(descriptionRenderer, new Point(201, 36), HitTestKind.Title, 0, 0, 0, new RectangleF(5, 5, 520, 40)); CheckHitTest(descriptionRenderer, new Point(79, 50), HitTestKind.Header, 1, 1, 0, new RectangleF(5, 45, 120, 40)); CheckHitTest(descriptionRenderer, new Point(145, 80), HitTestKind.Header, 1, 1, 1, new RectangleF(125, 45, 120, 40)); CheckHitTest(descriptionRenderer, new Point(289, 60), HitTestKind.Header, 1, 1, 2, new RectangleF(245, 45, 80, 40)); CheckHitTest(descriptionRenderer, new Point(175, 216), HitTestKind.NormalBox, 5, 5, 4, new RectangleF(165, 205, 40, 40)); CheckHitTest(descriptionRenderer, new Point(285, 365), HitTestKind.NormalBox, 9, 9, 7, new RectangleF(285, 365, 40, 40)); CheckHitTest(descriptionRenderer, new Point(81, 193), HitTestKind.Directive, 4, 4, 0, new RectangleF(5, 165, 320, 40)); CheckHitTest(descriptionRenderer, new Point(431, 56), HitTestKind.None, 1, 1, -1, new RectangleF(325, 45, 200, 40)); CheckHitTest(descriptionRenderer, new Point(333, 131), HitTestKind.NormalText, 3, 3, -1, new RectangleF(325, 125, 200, 40)); CheckHitTest(descriptionRenderer, new Point(491,252), HitTestKind.DirectiveText, 6, 6, -1, new RectangleF(325, 245, 200, 40)); CheckHitTest(descriptionRenderer, new Point(527,433), HitTestKind.None, -1, -1, -1, new RectangleF(0, 0, 0, 0)); CheckHitTest(descriptionRenderer, new Point(255, 427), HitTestKind.OtherTextLine, 10, 10, 0, new RectangleF(5, 405, 520, 40)); }
public void HitTestAllControls() { SymbolDB symbolDB = new SymbolDB(Util.GetFileInAppDirectory("symbols.xml")); UndoMgr undomgr = new UndoMgr(5); EventDB eventDB = new EventDB(undomgr); eventDB.Load(TestUtil.GetTestFile("descriptions\\sampleevent1.coursescribe")); eventDB.Validate(); CourseView courseView = CourseView.CreateViewingCourseView(eventDB, CourseDesignator.AllControls); DescriptionFormatter descFormatter = new DescriptionFormatter(courseView, symbolDB); DescriptionLine[] description = descFormatter.CreateDescription(false); DescriptionRenderer descriptionRenderer = new DescriptionRenderer(symbolDB); descriptionRenderer.Description = description; descriptionRenderer.CellSize = 40; descriptionRenderer.Margin = 5; descriptionRenderer.DescriptionKind = DescriptionKind.Symbols; CheckHitTest(descriptionRenderer, new Point(143, 22), HitTestKind.Title, 0, 0, 0, new RectangleF(5, 5, 320, 40)); CheckHitTest(descriptionRenderer, new Point(116, 53), HitTestKind.Header, 1, 1, 0, new RectangleF(5, 45, 120, 40)); CheckHitTest(descriptionRenderer, new Point(259,78), HitTestKind.Header, 1, 1, 1, new RectangleF(125, 45, 200, 40)); CheckHitTest(descriptionRenderer, new Point(38,97), HitTestKind.NormalBox, 2, 2, 0, new RectangleF(5,85, 40, 40)); CheckHitTest(descriptionRenderer, new Point(226,260), HitTestKind.NormalBox, 6, 6, 5, new RectangleF(205,245, 40, 40)); CheckHitTest(descriptionRenderer, new Point(68,999), HitTestKind.Directive, 24, 24, 0, new RectangleF(5, 965, 320, 40)); CheckHitTest(descriptionRenderer, new Point(3, 184), HitTestKind.None, -1, -1, -1, new RectangleF(0, 0, 0, 0)); CheckHitTest(descriptionRenderer, new Point(262,745), HitTestKind.OtherTextLine, 18, 18,0, new RectangleF(5, 725, 320, 40)); descriptionRenderer.DescriptionKind = DescriptionKind.Text; CheckHitTest(descriptionRenderer, new Point(311,12), HitTestKind.Title, 0, 0, 0, new RectangleF(5, 5, 320, 40)); CheckHitTest(descriptionRenderer, new Point(16,82), HitTestKind.Header, 1, 1, 0, new RectangleF(5, 45, 120, 40)); CheckHitTest(descriptionRenderer, new Point(178,76), HitTestKind.Header, 1, 1, 1, new RectangleF(125, 45, 200, 40)); CheckHitTest(descriptionRenderer, new Point(38, 97), HitTestKind.NormalBox, 2, 2, 0, new RectangleF(5, 85, 40, 40)); CheckHitTest(descriptionRenderer, new Point(182,234), HitTestKind.NormalText, 5, 5, -1, new RectangleF(85,205, 240, 40)); CheckHitTest(descriptionRenderer, new Point(60,942), HitTestKind.DirectiveText, 23, 23,-1, new RectangleF(5,925, 320, 40)); CheckHitTest(descriptionRenderer, new Point(3, 184), HitTestKind.None, -1, -1, -1, new RectangleF(0, 0, 0, 0)); CheckHitTest(descriptionRenderer, new Point(262,745), HitTestKind.OtherTextLine, 18, 18,0, new RectangleF(5, 725, 320, 40)); descriptionRenderer.DescriptionKind = DescriptionKind.SymbolsAndText; CheckHitTest(descriptionRenderer, new Point(143, 22), HitTestKind.Title, 0, 0, 0, new RectangleF(5, 5, 520, 40)); CheckHitTest(descriptionRenderer, new Point(434, 25), HitTestKind.Title, 0, 0, 0, new RectangleF(5, 5, 520, 40)); CheckHitTest(descriptionRenderer, new Point(116, 53), HitTestKind.Header, 1, 1, 0, new RectangleF(5, 45, 120, 40)); CheckHitTest(descriptionRenderer, new Point(259, 78), HitTestKind.Header, 1, 1, 1, new RectangleF(125, 45, 200, 40)); CheckHitTest(descriptionRenderer, new Point(380, 76), HitTestKind.None, 1, 1, -1, new RectangleF(325,45, 200, 40)); CheckHitTest(descriptionRenderer, new Point(38, 97), HitTestKind.NormalBox, 2, 2, 0, new RectangleF(5, 85, 40, 40)); CheckHitTest(descriptionRenderer, new Point(226, 260), HitTestKind.NormalBox, 6, 6, 5, new RectangleF(205, 245, 40, 40)); CheckHitTest(descriptionRenderer, new Point(68, 999), HitTestKind.Directive, 24, 24, 0, new RectangleF(5, 965, 320, 40)); CheckHitTest(descriptionRenderer, new Point(398,554), HitTestKind.NormalText, 13, 13, -1, new RectangleF(325,525, 200, 40)); CheckHitTest(descriptionRenderer, new Point(401, 934), HitTestKind.DirectiveText, 23, 23, -1, new RectangleF(325, 925, 200, 40)); CheckHitTest(descriptionRenderer, new Point(3, 184), HitTestKind.None, -1, -1, -1, new RectangleF(0, 0, 0, 0)); CheckHitTest(descriptionRenderer, new Point(262,745), HitTestKind.OtherTextLine, 18, 18,0, new RectangleF(5, 725, 520, 40)); }
public void SymbolRendering() { SymbolDB symbolDB = new SymbolDB(TestUtil.GetTestFile("symbols\\testread.xml")); foreach (Symbol symbol in symbolDB.AllSymbols) { Bitmap bmNew = RenderToBitmap(symbol); TestUtil.CheckBitmapsBase(bmNew, "symbols\\" + symbol.Id); } }
public void MapExchangeParts() { UndoMgr undomgr = new UndoMgr(5); EventDB eventDB = new EventDB(undomgr); SymbolDB symbolDB = new SymbolDB(Util.GetFileInAppDirectory("symbols.xml")); StringWriter writer = new StringWriter(); string actual, expected; CourseView courseView; eventDB.Load(TestUtil.GetTestFile("courseview\\mapexchange2.ppen")); eventDB.Validate(); courseView = CourseView.CreateViewingCourseView(eventDB, new CourseDesignator(CourseId(6), 0)); DumpCourseView(courseView, writer); actual = writer.ToString(); expected = @"Name='Course 5', Kind='Normal', CourseId=6, Part=0 Total Length=5002.4 Part Length=2643.7 Total Climb=-1 ScoreColumn=-1 Total Score=0 Total Controls=9 0: [ 0] Ids: 1,601 Legs: (Next:1,Id:5,length:191.38) 1: [ 1] Ids: 59,602 Legs: (Next:2,Id:0,length:379.35) 2: [ 2] Ids: 51,603 Legs: (Next:3,Id:6,length:326.1) 3: [ 3] Ids: 46,604 Legs: (Next:4,Id:0,length:258.27) 4: [ 4] Ids: 47,605 Legs: (Next:5,Id:0,length:209.64) 5: [ 5] Ids: 48,606 Legs: (Next:6,Id:0,length:294.02) 6: [ 6] Ids: 50,607 Legs: (Next:7,Id:0,length:361.2) 7: [ 7] Ids: 56,608 Legs: (Next:8,Id:0,length:98.884) 8: [ 8] Ids: 57,609 Legs: (Next:9,Id:0,length:316.63) 9: [ 9] Ids: 79,610 Legs: (Next:10,Id:1,length:208.28) 10: [ 0] Ids: 35,611 hidden "; Assert.AreEqual(expected, actual); writer = new StringWriter(); courseView = CourseView.CreateViewingCourseView(eventDB, new CourseDesignator(CourseId(6), 1)); DumpCourseView(courseView, writer); actual = writer.ToString(); expected = @"Name='Course 5', Kind='Normal', CourseId=6, Part=1 Total Length=5002.4 Part Length=1195.6 Total Climb=-1 ScoreColumn=-1 Total Score=0 Total Controls=4 0: [ 0] Ids: 35,611 Legs: (Next:1,Id:4,length:128.02) 1: [10] Ids: 37,612 Legs: (Next:2,Id:0,length:298.39) 2: [11] Ids: 36,613 Legs: (Next:3,Id:0,length:316.1) 3: [12] Ids: 39,614 Legs: (Next:4,Id:0,length:453.13) 4: [13] Ids: 43,615 "; Assert.AreEqual(expected, actual); writer = new StringWriter(); courseView = CourseView.CreateViewingCourseView(eventDB, new CourseDesignator(CourseId(6), 2)); DumpCourseView(courseView, writer); actual = writer.ToString(); expected = @"Name='Course 5', Kind='Normal', CourseId=6, Part=2 Total Length=5002.4 Part Length=401.22 Total Climb=-1 ScoreColumn=-1 Total Score=0 Total Controls=2 0: [13] Ids: 43,615 Legs: (Next:1,Id:2,length:401.22) 1: [14] Ids: 54,616 Extra course control 620 "; Assert.AreEqual(expected, actual); writer = new StringWriter(); courseView = CourseView.CreateViewingCourseView(eventDB, new CourseDesignator(CourseId(6), 3)); DumpCourseView(courseView, writer); actual = writer.ToString(); expected = @"Name='Course 5', Kind='Normal', CourseId=6, Part=3 Total Length=5002.4 Part Length=761.76 Total Climb=-1 ScoreColumn=-1 Total Score=0 Total Controls=4 0: [14] Ids: 54,616 Legs: (Next:1,Id:3,length:257.78) 1: [15] Ids: 41,617 Legs: (Next:2,Id:0,length:227.2) 2: [16] Ids: 42,618 Legs: (Next:3,Id:0,length:200.69) 3: [17] Ids: 38,619 Legs: (Next:4,Id:0,length:76.097) 4: [-1] Ids: 2,620 "; Assert.AreEqual(expected, actual); }
public void AllVariations() { UndoMgr undomgr = new UndoMgr(5); EventDB eventDB = new EventDB(undomgr); SymbolDB symbolDB = new SymbolDB(Util.GetFileInAppDirectory("symbols.xml")); StringWriter writer = new StringWriter(); string actual, expected; eventDB.Load(TestUtil.GetTestFile("queryevent\\variations.ppen")); eventDB.Validate(); CourseView courseView = CourseView.CreateViewingCourseView(eventDB, new CourseDesignator(CourseId(1))); DumpCourseView(courseView, writer); actual = writer.ToString(); expected = @"Name='Course 1', Kind='AllVariations', CourseId=1 Total Length=4732.2 Part Length=4732.2 Total Climb=-1 ScoreColumn=-1 Total Score=0 Total Controls=21 0: [-1] Ids: 1, 1 Legs: (Next:1,Id:0,length:158.84) 1: [-1] Ids: 2, 2, 24 Legs: (Next:3,Id:0,length:209.04) (Next:2,Id:0,length:826.15) 2: [-1] Ids: 24, 12 Legs: (Next:21,Id:0,length:1333.7) 3: [-1] Ids: 3, 3 Legs: (Next:4,Id:0,length:209.04) 4: [-1] Ids: 4, 4, 25, 26, 27 Legs: (Next:14,Id:0,length:236.21) (Next:5,Id:0,length:292.06) (Next:7,Id:0,length:266.23) (Next:9,Id:0,length:301.32) 5: [-1] Ids: 12, 15 Legs: (Next:6,Id:0,length:146.69) 6: [-1] Ids: 13, 16 Legs: (Next:4,Id:0,length:262.42) 7: [-1] Ids: 14, 17 Legs: (Next:8,Id:0,length:152.29) 8: [-1] Ids: 15, 18 Legs: (Next:4,Id:0,length:374.25) 9: [-1] Ids: 16, 19 Legs: (Next:10,Id:0,length:200.8) 10: [-1] Ids: 18, 30, 21 Legs: (Next:11,Id:0,length:158.77) (Next:12,Id:0,length:155.02) 11: [-1] Ids: 17, 20 Legs: (Next:13,Id:0,length:142.48) 12: [-1] Ids: 19, 22 Legs: (Next:13,Id:0,length:140.25) 13: [-1] Ids: 20, 23 Legs: (Next:4,Id:0,length:260.01) 14: [-1] Ids: 5, 5 Legs: (Next:15,Id:0,length:187.87) 15: [-1] Ids: 6, 6 Legs: (Next:16,Id:0,length:248.72) 16: [-1] Ids: 7, 7 Legs: (Next:17,Id:0,length:206.65) 17: [-1] Ids: 8, 8 Legs: (Next:18,Id:0,length:212.08) 18: [-1] Ids: 9, 9, 28, 29 Legs: (Next:21,Id:0,length:159.1) (Next:19,Id:0,length:153.82) (Next:20,Id:0,length:121.19) 19: [-1] Ids: 21, 13 Legs: (Next:21,Id:0,length:155.63) 20: [-1] Ids: 22, 14 Legs: (Next:21,Id:0,length:139.25) 21: [-1] Ids: 10, 10 Legs: (Next:22,Id:0,length:196.93) 22: [-1] Ids: 11, 11 "; Assert.AreEqual(expected, actual); }
public void ReadSymbols() { SymbolDB symbolDB = new SymbolDB(TestUtil.GetTestFile("symbols\\testread.xml")); ICollection <Symbol> symbolCollection = symbolDB.AllSymbols; Assert.AreEqual(7, symbolCollection.Count); Symbol[] symbols = new Symbol[symbolCollection.Count]; symbolCollection.CopyTo(symbols, 0); Assert.AreSame(symbols[0], symbolDB["1.10"]); Assert.AreEqual('D', symbols[0].Kind); Assert.AreEqual(symbols[0].Id, "1.10"); Assert.AreEqual(symbols[0].GetName("en"), "Knoll"); Assert.AreEqual(symbols[0].GetText("en"), "knoll"); Assert.AreEqual(1, symbols[0].strokes.Length); Assert.AreEqual(Symbol.SymbolStrokes.Disc, symbols[0].strokes[0].kind); Assert.AreEqual(10F, symbols[0].strokes[0].radius); Assert.AreEqual(1, symbols[0].strokes[0].points.Length); Assert.AreEqual(0F, symbols[0].strokes[0].points[0].X); Assert.AreEqual(10F, symbols[0].strokes[0].points[0].Y); Assert.AreSame(symbols[1], symbolDB["1.14"]); Assert.AreEqual('D', symbols[1].Kind); Assert.AreEqual(symbols[1].Id, "1.14"); Assert.AreEqual(symbols[1].GetName("en"), "Pit"); Assert.AreEqual(symbols[1].GetText("en"), "pit"); Assert.AreEqual(symbols[1].GetPluralText("en"), "pits"); Assert.AreEqual(1, symbols[1].strokes.Length); Assert.AreEqual(Symbol.SymbolStrokes.Polyline, symbols[1].strokes[0].kind); Assert.AreEqual(5F, symbols[1].strokes[0].thickness); Assert.AreEqual(LineCap.Round, symbols[1].strokes[0].ends); Assert.AreEqual(LineJoin.Miter, symbols[1].strokes[0].corners); Assert.AreEqual(3, symbols[1].strokes[0].points.Length); Assert.AreEqual(-40F, symbols[1].strokes[0].points[0].X); Assert.AreEqual(50F, symbols[1].strokes[0].points[0].Y); Assert.AreEqual(0.0F, symbols[1].strokes[0].points[1].X); Assert.AreEqual(-20F, symbols[1].strokes[0].points[1].Y); Assert.AreEqual(40F, symbols[1].strokes[0].points[2].X); Assert.AreEqual(50F, symbols[1].strokes[0].points[2].Y); Assert.AreSame(symbols[2], symbolDB["5.17"]); Assert.AreEqual('D', symbols[2].Kind); Assert.AreEqual(symbols[2].Id, "5.17"); Assert.AreEqual(symbols[2].GetName("en"), "Boundary stone, Cairn"); Assert.AreEqual(symbols[2].GetText("en"), "cairn"); Assert.AreEqual(symbols[2].GetPluralText("en"), "cairns"); Assert.AreEqual(2, symbols[2].strokes.Length); Assert.AreEqual(Symbol.SymbolStrokes.Circle, symbols[2].strokes[0].kind); Assert.AreEqual(50F, symbols[2].strokes[0].radius); Assert.AreEqual(5F, symbols[2].strokes[0].thickness); Assert.AreEqual(1, symbols[2].strokes[0].points.Length); Assert.AreEqual(0.0F, symbols[2].strokes[0].points[0].X); Assert.AreEqual(10F, symbols[2].strokes[0].points[0].Y); Assert.AreEqual(Symbol.SymbolStrokes.Disc, symbols[2].strokes[1].kind); Assert.AreEqual(10F, symbols[2].strokes[1].radius); Assert.AreEqual(1, symbols[2].strokes[1].points.Length); Assert.AreEqual(0F, symbols[2].strokes[1].points[0].X); Assert.AreEqual(10F, symbols[2].strokes[1].points[0].Y); Assert.AreSame(symbols[3], symbolDB["4.1"]); Assert.AreEqual('D', symbols[3].Kind); Assert.AreEqual(symbols[3].Id, "4.1"); Assert.AreEqual(symbols[3].GetName("en"), "Open land"); Assert.AreEqual(symbols[3].GetText("en"), "open land"); Assert.AreEqual(symbols[3].GetPluralText("en"), "open land"); Assert.AreEqual(symbols[3].GetText("de"), "smelly"); Assert.AreEqual(symbols[3].GetText("xx"), "gibberish"); Assert.AreEqual(symbols[3].GetPluralText("xx"), "plural gibberish"); Assert.AreEqual(1, symbols[3].strokes.Length); Assert.AreEqual(Symbol.SymbolStrokes.Polygon, symbols[3].strokes[0].kind); Assert.AreEqual(5F, symbols[3].strokes[0].thickness); Assert.AreEqual(LineJoin.Miter, symbols[3].strokes[0].corners); Assert.AreEqual(4, symbols[3].strokes[0].points.Length); Assert.AreEqual(0.0, symbols[3].strokes[0].points[0].X); Assert.AreEqual(50F, symbols[3].strokes[0].points[0].Y); Assert.AreEqual(50F, symbols[3].strokes[0].points[1].X); Assert.AreEqual(0.0F, symbols[3].strokes[0].points[1].Y); Assert.AreEqual(0.0F, symbols[3].strokes[0].points[2].X); Assert.AreEqual(-50F, symbols[3].strokes[0].points[2].Y); Assert.AreEqual(-50F, symbols[3].strokes[0].points[3].X); Assert.AreEqual(0.0F, symbols[3].strokes[0].points[3].Y); Assert.AreSame(symbols[4], symbolDB["2.2"]); Assert.AreEqual('D', symbols[4].Kind); Assert.AreEqual("2.2", symbols[4].Id); Assert.AreEqual(symbols[4].GetName("en"), "Rock pillar"); Assert.AreEqual(symbols[4].GetText("en"), "rock pillar"); Assert.AreEqual(1, symbols[4].strokes.Length); Assert.AreEqual(Symbol.SymbolStrokes.FilledPolygon, symbols[4].strokes[0].kind); Assert.AreEqual(3, symbols[4].strokes[0].points.Length); Assert.AreEqual(0.0, symbols[4].strokes[0].points[0].X); Assert.AreEqual(70F, symbols[4].strokes[0].points[0].Y); Assert.AreEqual(50F, symbols[4].strokes[0].points[1].X); Assert.AreEqual(-50F, symbols[4].strokes[0].points[1].Y); Assert.AreEqual(-50F, symbols[4].strokes[0].points[2].X); Assert.AreEqual(-50F, symbols[4].strokes[0].points[2].Y); Assert.AreSame(symbols[5], symbolDB["1.3"]); Assert.AreEqual('D', symbols[5].Kind); Assert.AreEqual("1.3", symbols[5].Id); Assert.AreEqual(symbols[5].GetName("en"), "Reentrant"); Assert.AreEqual(symbols[5].GetText("en"), "reentrant"); Assert.AreEqual(1, symbols[5].strokes.Length); Assert.AreEqual(Symbol.SymbolStrokes.PolyBezier, symbols[5].strokes[0].kind); Assert.AreEqual(12.5F, symbols[5].strokes[0].thickness); Assert.AreEqual(LineCap.Flat, symbols[5].strokes[0].ends); Assert.AreEqual(13, symbols[5].strokes[0].points.Length); Assert.AreEqual(-80F, symbols[5].strokes[0].points[0].X); Assert.AreEqual(-80F, symbols[5].strokes[0].points[0].Y); Assert.AreEqual(-50F, symbols[5].strokes[0].points[1].X); Assert.AreEqual(-80F, symbols[5].strokes[0].points[1].Y); Assert.AreEqual(-50F, symbols[5].strokes[0].points[2].X); Assert.AreEqual(-30F, symbols[5].strokes[0].points[2].Y); Assert.AreEqual(-45F, symbols[5].strokes[0].points[3].X); Assert.AreEqual(0.0F, symbols[5].strokes[0].points[3].Y); Assert.AreEqual(-40F, symbols[5].strokes[0].points[4].X); Assert.AreEqual(30F, symbols[5].strokes[0].points[4].Y); Assert.AreEqual(-35F, symbols[5].strokes[0].points[5].X); Assert.AreEqual(80F, symbols[5].strokes[0].points[5].Y); Assert.AreEqual(0F, symbols[5].strokes[0].points[6].X); Assert.AreEqual(80F, symbols[5].strokes[0].points[6].Y); Assert.AreEqual(35F, symbols[5].strokes[0].points[7].X); Assert.AreEqual(80F, symbols[5].strokes[0].points[7].Y); Assert.AreEqual(40F, symbols[5].strokes[0].points[8].X); Assert.AreEqual(30F, symbols[5].strokes[0].points[8].Y); Assert.AreEqual(45F, symbols[5].strokes[0].points[9].X); Assert.AreEqual(0.0F, symbols[5].strokes[0].points[9].Y); Assert.AreEqual(50, symbols[5].strokes[0].points[10].X); Assert.AreEqual(-30F, symbols[5].strokes[0].points[10].Y); Assert.AreEqual(50F, symbols[5].strokes[0].points[11].X); Assert.AreEqual(-80F, symbols[5].strokes[0].points[11].Y); Assert.AreEqual(80F, symbols[5].strokes[0].points[12].X); Assert.AreEqual(-80F, symbols[5].strokes[0].points[12].Y); Assert.AreSame(symbols[6], symbolDB["0.4"]); Assert.AreEqual('Q', symbols[6].Kind); Assert.AreEqual("0.4", symbols[6].Id); Assert.AreEqual(symbols[6].GetName("en"), "Filled ellipse"); Assert.AreEqual(symbols[6].GetText("en"), "ellipse"); Assert.AreEqual(1, symbols[6].strokes.Length); Assert.AreEqual(Symbol.SymbolStrokes.FilledPolyBezier, symbols[6].strokes[0].kind); Assert.AreEqual(13, symbols[6].strokes[0].points.Length); Assert.AreEqual(0.0F, symbols[6].strokes[0].points[0].X); Assert.AreEqual(50F, symbols[6].strokes[0].points[0].Y); Assert.AreEqual(38F, symbols[6].strokes[0].points[1].X); Assert.AreEqual(50F, symbols[6].strokes[0].points[1].Y); Assert.AreEqual(70F, symbols[6].strokes[0].points[2].X); Assert.AreEqual(28F, symbols[6].strokes[0].points[2].Y); Assert.AreEqual(70F, symbols[6].strokes[0].points[3].X); Assert.AreEqual(0.0F, symbols[6].strokes[0].points[3].Y); Assert.AreEqual(70F, symbols[6].strokes[0].points[4].X); Assert.AreEqual(-28F, symbols[6].strokes[0].points[4].Y); Assert.AreEqual(38F, symbols[6].strokes[0].points[5].X); Assert.AreEqual(-50F, symbols[6].strokes[0].points[5].Y); Assert.AreEqual(0.0F, symbols[6].strokes[0].points[6].X); Assert.AreEqual(-50F, symbols[6].strokes[0].points[6].Y); Assert.AreEqual(-38F, symbols[6].strokes[0].points[7].X); Assert.AreEqual(-50F, symbols[6].strokes[0].points[7].Y); Assert.AreEqual(-70F, symbols[6].strokes[0].points[8].X); Assert.AreEqual(-28F, symbols[6].strokes[0].points[8].Y); Assert.AreEqual(-70F, symbols[6].strokes[0].points[9].X); Assert.AreEqual(0.0F, symbols[6].strokes[0].points[9].Y); Assert.AreEqual(-70F, symbols[6].strokes[0].points[10].X); Assert.AreEqual(28F, symbols[6].strokes[0].points[10].Y); Assert.AreEqual(-38F, symbols[6].strokes[0].points[11].X); Assert.AreEqual(50F, symbols[6].strokes[0].points[11].Y); Assert.AreEqual(0.0F, symbols[6].strokes[0].points[12].X); Assert.AreEqual(50F, symbols[6].strokes[0].points[12].Y); }
public void MultiStandard() { SymbolDB symbolDB = new SymbolDB(Util.GetFileInAppDirectory("symbols.xml"), "2004"); Debug.Assert(symbolDB.SymbolExistsInStandard("1.10", "2004")); Debug.Assert(symbolDB.SymbolExistsInStandard("1.10", "2018")); Symbol knoll = symbolDB["1.10"]; Debug.Assert(knoll.InStandard("2004")); Debug.Assert(!knoll.InStandard("2018")); symbolDB.Standard = "2018"; knoll = symbolDB["1.10"]; Debug.Assert(!knoll.InStandard("2004")); Debug.Assert(knoll.InStandard("2018")); Debug.Assert(symbolDB.SymbolExistsInStandard("1.11", "2004")); Debug.Assert(symbolDB.SymbolExistsInStandard("1.11", "2018")); symbolDB.Standard = "2004"; Symbol saddle = symbolDB["1.11"]; Debug.Assert(saddle.InStandard("2004")); Debug.Assert(saddle.InStandard("2018")); symbolDB.Standard = "2018"; saddle = symbolDB["1.11"]; Debug.Assert(saddle.InStandard("2004")); Debug.Assert(saddle.InStandard("2018")); Debug.Assert(!symbolDB.SymbolExistsInStandard("2.10", "2004")); Debug.Assert(symbolDB.SymbolExistsInStandard("2.10", "2018")); symbolDB.Standard = "2018"; Symbol trench = symbolDB["2.10"]; Debug.Assert(!trench.InStandard("2004")); Debug.Assert(trench.InStandard("2018")); Debug.Assert(trench.ReplacementId == "1.7"); symbolDB.Standard = "2004"; try { trench = symbolDB["2.10"]; Debug.Fail("should throw exception"); } catch (Exception e) { Debug.Assert(e is InvalidOperationException); } symbolDB.Standard = "2004"; Debug.Assert(symbolDB.SymbolExistsInStandard("11.7", "2004")); Debug.Assert(symbolDB.SymbolExistsInStandard("11.7", "2018")); Symbol bend = symbolDB["11.7"]; Debug.Assert(bend.InStandard("2004")); Debug.Assert(!bend.InStandard("2018")); Debug.Assert(bend.Kind == 'G'); symbolDB.Standard = "2018"; bend = symbolDB["11.7"]; Debug.Assert(!bend.InStandard("2004")); Debug.Assert(bend.InStandard("2018")); Debug.Assert(bend.Kind == 'F'); }
// Sets up with special symbols.xml that has fake polish text in it, to test case agreement stuff. public void SetupWithPolish() { undomgr = new UndoMgr(5); eventDB = new EventDB(undomgr); symbolDB = new SymbolDB(TestUtil.GetTestFile("textifier\\pl-symbols.xml")); eventDB.Load(TestUtil.GetTestFile("textifier\\PolishTest.ppen")); eventDB.Validate(); }
public void AddSymbolText() { File.Delete(TestUtil.GetTestFile("desclocalize\\symbols_working.xml")); File.Copy(TestUtil.GetTestFile("desclocalize\\symbols.xml"), TestUtil.GetTestFile("desclocalize\\symbols_working.xml")); SymbolDB symbolDB = new SymbolDB(TestUtil.GetTestFile("desclocalize\\symbols_working.xml")); DescriptionLocalize localizer = new DescriptionLocalize(symbolDB); Dictionary <string, List <SymbolText> > dictionary = new Dictionary <string, List <SymbolText> >(); dictionary["1.1"] = new List <SymbolText>() { new SymbolText() { Lang = "de", Plural = false, Gender = "masculine", Text = "german-terrace", Case = "", CaseOfModified = "" }, new SymbolText() { Lang = "de", Plural = true, Gender = "masculine", Text = "german-terraces", Case = "", CaseOfModified = "" }, new SymbolText() { Lang = "fr", Plural = false, Gender = "feminine", Text = "french-terrace", Case = "", CaseOfModified = "" }, new SymbolText() { Lang = "fr", Plural = true, Gender = "feminine", Text = "french-terraces", Case = "", CaseOfModified = "" }, }; dictionary["5.20"] = new List <SymbolText>() { new SymbolText() { Lang = "de", Plural = false, Gender = "neuter", Text = "german-statue", Case = "", CaseOfModified = "" }, new SymbolText() { Lang = "de", Plural = true, Gender = "neuter", Text = "german-statues", Case = "", CaseOfModified = "" }, }; localizer.CustomizeDescriptionTexts(dictionary); SymbolText[] expectedTerraces = { new SymbolText() { Lang = "en", Plural = false, Gender = "", Text = "terrace", Case = "", CaseOfModified = "" }, new SymbolText() { Lang = "en", Plural = true, Gender = "", Text = "terraces", Case = "", CaseOfModified = "" }, new SymbolText() { Lang = "de", Plural = false, Gender = "masculine", Text = "german-terrace", Case = "", CaseOfModified = "" }, new SymbolText() { Lang = "de", Plural = true, Gender = "masculine", Text = "german-terraces", Case = "", CaseOfModified = "" }, new SymbolText() { Lang = "fr", Plural = false, Gender = "feminine", Text = "french-terrace", Case = "", CaseOfModified = "" }, new SymbolText() { Lang = "fr", Plural = true, Gender = "feminine", Text = "french-terraces", Case = "", CaseOfModified = "" } }; SymbolText[] expectedStatues = { new SymbolText() { Lang = "en", Plural = false, Gender = "", Text = "statue", Case = "", CaseOfModified = "" }, new SymbolText() { Lang = "en", Plural = true, Gender = "", Text = "statues", Case = "", CaseOfModified = "" }, new SymbolText() { Lang = "de", Plural = false, Gender = "neuter", Text = "german-statue", Case = "", CaseOfModified = "" }, new SymbolText() { Lang = "de", Plural = true, Gender = "neuter", Text = "german-statues", Case = "", CaseOfModified = "" }, }; CollectionAssert.AreEquivalent(expectedTerraces, symbolDB["1.1"].SymbolTexts); CollectionAssert.AreEquivalent(expectedStatues, symbolDB["5.20"].SymbolTexts); }
public void LanguageTexts() { SymbolDB symbolDB = new SymbolDB(TestUtil.GetTestFile("symbols\\intl_symbols.xml")); Symbol pitSymbol = symbolDB["1.14"]; Symbol deepSymbol = symbolDB["8.3"]; Assert.AreEqual("pito", pitSymbol.GetText("bg")); Assert.AreEqual("masculine", pitSymbol.GetGender("bg")); Assert.AreEqual("deepo", deepSymbol.GetText("bg", "masculine")); Assert.AreEqual("deepa", deepSymbol.GetText("bg", "feminine")); Assert.AreEqual("deepos", deepSymbol.GetPluralText("bg", "masculine")); Assert.AreEqual("deepas", deepSymbol.GetPluralText("bg", "feminine")); Assert.AreEqual("pit", pitSymbol.GetText("xx")); Assert.AreEqual("pits", pitSymbol.GetPluralText("xx")); }
public void Merge() { File.Delete(TestUtil.GetTestFile("desclocalize\\symbols_working.xml")); File.Copy(TestUtil.GetTestFile("desclocalize\\symbols.xml"), TestUtil.GetTestFile("desclocalize\\symbols_working.xml")); SymbolDB symbolDB = new SymbolDB(TestUtil.GetTestFile("desclocalize\\symbols_working.xml")); DescriptionLocalize localizer = new DescriptionLocalize(symbolDB); localizer.MergeSymbolsFile(TestUtil.GetTestFile("desclocalize\\symbols-to-merge.xml"), "fr"); SymbolLanguage[] expected = { new SymbolLanguage("English", "en", true, false, false, null, false, null), new SymbolLanguage("French", "fr", true, true, true, new string[] { "masculine","feminine" }, false, null), new SymbolLanguage("Deutsch", "de", true, true, true, new string[] { "masculine","feminine", "neuter" }, false, null) }; List <SymbolLanguage> languages = new List <SymbolLanguage>(symbolDB.AllLanguages); CollectionAssert.AreEquivalent(expected, languages); SymbolText[] expectedTexts = { new SymbolText() { Lang = "en", Plural = false, Gender = "", Text = "Length {0}, climb {1}" }, new SymbolText() { Lang = "fr", Plural = false, Gender = "feminine", Text = "Frenchy Length {0}, climb {1}" }, }; List <SymbolText> actualTexts = symbolDB["course_length_climb"].SymbolTexts; CollectionAssert.AreEquivalent(expectedTexts, actualTexts); expectedTexts = new SymbolText[] { new SymbolText() { Lang = "en", Plural = false, Gender = "", Text = "overgrown {0}" }, new SymbolText() { Lang = "fr", Plural = false, Gender = "feminine", Text = "fr sing fem overgrown {0}" }, new SymbolText() { Lang = "fr", Plural = true, Gender = "feminine", Text = "fr plur fem overgrown {0}" }, new SymbolText() { Lang = "fr", Plural = false, Gender = "masculine", Text = "fr sing masc overgrown {0}" }, new SymbolText() { Lang = "fr", Plural = true, Gender = "masculine", Text = "fr plur masc overgrown {0}" }, }; actualTexts = symbolDB["8.4"].SymbolTexts; CollectionAssert.AreEquivalent(expectedTexts, actualTexts); Assert.AreEqual("Fr Overgrown", symbolDB["8.4"].GetName("fr")); }
public void HitTestMultiLine() { SymbolDB symbolDB = new SymbolDB(Util.GetFileInAppDirectory("symbols.xml")); UndoMgr undomgr = new UndoMgr(5); EventDB eventDB = new EventDB(undomgr); eventDB.Load(TestUtil.GetTestFile("descriptions\\sampleevent6.coursescribe")); eventDB.Validate(); CourseView courseView = CourseView.CreateViewingCourseView(eventDB, DesignatorFromCourseId(eventDB, CourseId(1))); DescriptionFormatter descFormatter = new DescriptionFormatter(courseView, symbolDB); DescriptionLine[] description = descFormatter.CreateDescription(false); DescriptionRenderer descriptionRenderer = new DescriptionRenderer(symbolDB); descriptionRenderer.Description = description; descriptionRenderer.CellSize = 40; descriptionRenderer.Margin = 5; descriptionRenderer.DescriptionKind = DescriptionKind.Symbols; CheckHitTest(descriptionRenderer, new Point(143, 22), HitTestKind.Title, 0, 1, 0, new RectangleF(5, 5, 320, 80)); CheckHitTest(descriptionRenderer, new Point(13, 51), HitTestKind.Title, 0, 1, 0, new RectangleF(5, 5, 320, 80)); CheckHitTest(descriptionRenderer, new Point(178, 101), HitTestKind.SecondaryTitle, 2, 4, 0, new RectangleF(5, 85, 320, 120)); CheckHitTest(descriptionRenderer, new Point(178, 141), HitTestKind.SecondaryTitle, 2, 4, 0, new RectangleF(5, 85, 320, 120)); CheckHitTest(descriptionRenderer, new Point(178, 181), HitTestKind.SecondaryTitle, 2, 4, 0, new RectangleF(5, 85, 320, 120)); CheckHitTest(descriptionRenderer, new Point(116, 213), HitTestKind.Header, 5, 5, 0, new RectangleF(5, 205, 120, 40)); descriptionRenderer.DescriptionKind = DescriptionKind.Text; CheckHitTest(descriptionRenderer, new Point(143, 22), HitTestKind.Title, 0, 1, 0, new RectangleF(5, 5, 320, 80)); CheckHitTest(descriptionRenderer, new Point(13, 51), HitTestKind.Title, 0, 1, 0, new RectangleF(5, 5, 320, 80)); CheckHitTest(descriptionRenderer, new Point(178, 101), HitTestKind.SecondaryTitle, 2, 4, 0, new RectangleF(5, 85, 320, 120)); CheckHitTest(descriptionRenderer, new Point(178, 141), HitTestKind.SecondaryTitle, 2, 4, 0, new RectangleF(5, 85, 320, 120)); CheckHitTest(descriptionRenderer, new Point(178, 181), HitTestKind.SecondaryTitle, 2, 4, 0, new RectangleF(5, 85, 320, 120)); CheckHitTest(descriptionRenderer, new Point(116, 213), HitTestKind.Header, 5, 5, 0, new RectangleF(5, 205, 120, 40)); descriptionRenderer.DescriptionKind = DescriptionKind.SymbolsAndText; CheckHitTest(descriptionRenderer, new Point(143, 22), HitTestKind.Title, 0, 1, 0, new RectangleF(5, 5, 520, 80)); CheckHitTest(descriptionRenderer, new Point(13, 51), HitTestKind.Title, 0, 1, 0, new RectangleF(5, 5, 520, 80)); CheckHitTest(descriptionRenderer, new Point(178, 101), HitTestKind.SecondaryTitle, 2, 4, 0, new RectangleF(5, 85, 520, 120)); CheckHitTest(descriptionRenderer, new Point(178, 141), HitTestKind.SecondaryTitle, 2, 4, 0, new RectangleF(5, 85, 520, 120)); CheckHitTest(descriptionRenderer, new Point(178, 181), HitTestKind.SecondaryTitle, 2, 4, 0, new RectangleF(5, 85, 520, 120)); CheckHitTest(descriptionRenderer, new Point(116, 213), HitTestKind.Header, 5, 5, 0, new RectangleF(5, 205, 120, 40)); }
public void SingleVariation() { SymbolDB symbolDB = new SymbolDB(Util.GetFileInAppDirectory("symbols.xml")); UndoMgr undomgr = new UndoMgr(5); EventDB eventDB = new EventDB(undomgr); eventDB.Load(TestUtil.GetTestFile("queryevent\\variations.ppen")); eventDB.Validate(); VariationInfo.VariationPath variationPath = new VariationInfo.VariationPath(new[] { CourseControlId(2), CourseControlId(27), CourseControlId(30), CourseControlId(26), CourseControlId(25), CourseControlId(4), CourseControlId(28), }); VariationInfo variationInfo = new VariationInfo("AEFDCI", variationPath); CourseDesignator courseDesignator = new CourseDesignator(CourseId(1), variationInfo); CheckCourseBothAppearances("queryevent\\variations.ppen", courseDesignator, false, "singlevariation", new RectangleF(-15, -100, 230, 230)); }
public void HitTestScore() { SymbolDB symbolDB = new SymbolDB(Util.GetFileInAppDirectory("symbols.xml")); UndoMgr undomgr = new UndoMgr(5); EventDB eventDB = new EventDB(undomgr); eventDB.Load(TestUtil.GetTestFile("descriptions\\sampleevent1.coursescribe")); eventDB.Validate(); CourseView courseView = CourseView.CreateViewingCourseView(eventDB, new CourseDesignator(CourseId(5))); DescriptionFormatter descFormatter = new DescriptionFormatter(courseView, symbolDB); DescriptionLine[] description = descFormatter.CreateDescription(false); DescriptionRenderer descriptionRenderer = new DescriptionRenderer(symbolDB); descriptionRenderer.Description = description; descriptionRenderer.CellSize = 40; descriptionRenderer.Margin = 5; descriptionRenderer.DescriptionKind = DescriptionKind.Symbols; CheckHitTest(descriptionRenderer, new Point(143, 22), HitTestKind.Title, 0, 0, 0, new RectangleF(5, 5, 320, 40)); CheckHitTest(descriptionRenderer, new Point(178,51), HitTestKind.SecondaryTitle, 1, 1, 0, new RectangleF(5, 45, 320, 40)); CheckHitTest(descriptionRenderer, new Point(116, 93), HitTestKind.Header, 2, 2, 0, new RectangleF(5, 85, 120, 40)); CheckHitTest(descriptionRenderer, new Point(259, 118), HitTestKind.Header, 2, 2, 1, new RectangleF(125, 85, 200, 40)); CheckHitTest(descriptionRenderer, new Point(38, 137), HitTestKind.NormalBox, 3, 3, 0, new RectangleF(5, 125, 40, 40)); CheckHitTest(descriptionRenderer, new Point(226, 260), HitTestKind.NormalBox, 6, 6, 5, new RectangleF(205, 245, 40, 40)); CheckHitTest(descriptionRenderer, new Point(3, 184), HitTestKind.None, -1, -1, -1, new RectangleF(0, 0, 0, 0)); CheckHitTest(descriptionRenderer, new Point(228,534), HitTestKind.OtherTextLine, 13, 13,0, new RectangleF(5, 525, 320, 40)); descriptionRenderer.DescriptionKind = DescriptionKind.Text; CheckHitTest(descriptionRenderer, new Point(311, 12), HitTestKind.Title, 0, 0, 0, new RectangleF(5, 5, 320, 40)); CheckHitTest(descriptionRenderer, new Point(178, 51), HitTestKind.SecondaryTitle, 1, 1, 0, new RectangleF(5, 45, 320, 40)); CheckHitTest(descriptionRenderer, new Point(16, 112), HitTestKind.Header, 2, 2, 0, new RectangleF(5, 85, 120, 40)); CheckHitTest(descriptionRenderer, new Point(178, 116), HitTestKind.Header, 2, 2, 1, new RectangleF(125, 85, 200, 40)); CheckHitTest(descriptionRenderer, new Point(38, 137), HitTestKind.NormalBox, 3, 3, 0, new RectangleF(5, 125, 40, 40)); CheckHitTest(descriptionRenderer, new Point(182, 234), HitTestKind.NormalText, 5, 5, -1, new RectangleF(85, 205, 240, 40)); CheckHitTest(descriptionRenderer, new Point(3, 184), HitTestKind.None, -1, -1, -1, new RectangleF(0, 0, 0, 0)); CheckHitTest(descriptionRenderer, new Point(228, 534), HitTestKind.OtherTextLine, 13, 13, 0, new RectangleF(5, 525, 320, 40)); descriptionRenderer.DescriptionKind = DescriptionKind.SymbolsAndText; CheckHitTest(descriptionRenderer, new Point(143, 22), HitTestKind.Title, 0, 0, 0, new RectangleF(5, 5, 520, 40)); CheckHitTest(descriptionRenderer, new Point(178, 51), HitTestKind.SecondaryTitle, 1, 1, 0, new RectangleF(5, 45, 520, 40)); CheckHitTest(descriptionRenderer, new Point(434, 25), HitTestKind.Title, 0, 0, 0, new RectangleF(5, 5, 520, 40)); CheckHitTest(descriptionRenderer, new Point(116, 93), HitTestKind.Header, 2, 2, 0, new RectangleF(5, 85, 120, 40)); CheckHitTest(descriptionRenderer, new Point(259, 118), HitTestKind.Header, 2, 2, 1, new RectangleF(125, 85, 200, 40)); CheckHitTest(descriptionRenderer, new Point(380, 116), HitTestKind.None, 2, 2, -1, new RectangleF(325, 85, 200, 40)); CheckHitTest(descriptionRenderer, new Point(38, 137), HitTestKind.NormalBox, 3, 3, 0, new RectangleF(5, 125, 40, 40)); CheckHitTest(descriptionRenderer, new Point(226, 260), HitTestKind.NormalBox, 6, 6, 5, new RectangleF(205, 245, 40, 40)); CheckHitTest(descriptionRenderer, new Point(398, 594), HitTestKind.NormalText, 14, 14, -1, new RectangleF(325, 565, 200, 40)); CheckHitTest(descriptionRenderer, new Point(3, 184), HitTestKind.None, -1, -1, -1, new RectangleF(0, 0, 0, 0)); CheckHitTest(descriptionRenderer, new Point(451, 534), HitTestKind.OtherTextLine, 13, 13, 0, new RectangleF(5, 525, 520, 40)); }
void CheckCourse(string filename, CourseDesignator courseDesignator, bool addAllControls, string testName, RectangleF rect, CourseAppearance appearance) { SymbolDB symbolDB = new SymbolDB(Util.GetFileInAppDirectory("symbols.xml")); UndoMgr undomgr = new UndoMgr(5); EventDB eventDB = new EventDB(undomgr); CourseView courseView; CourseLayout course; eventDB.Load(TestUtil.GetTestFile(filename)); eventDB.Validate(); // Create the course courseView = CourseView.CreateViewingCourseView(eventDB, courseDesignator); course = new CourseLayout(); course.SetLayerColor(CourseLayer.Descriptions, 0, "Black", 0, 0, 0, 1F, false); course.SetLayerColor(CourseLayer.MainCourse, 11, "Purple", 0.2F, 1.0F, 0.0F, 0.07F, false); CourseFormatter.FormatCourseToLayout(symbolDB, courseView, appearance, course, CourseLayer.MainCourse); // Add all controls if requested. if (addAllControls && courseDesignator.IsNotAllControls) { courseView = CourseView.CreateFilteredAllControlsView(eventDB, new CourseDesignator[] { courseDesignator }, ControlPointKind.None, false, true); course.SetLayerColor(CourseLayer.AllControls, 12, "LightPurple", 0.1F, 0.5F, 0.0F, 0.0F, false); CourseFormatter.FormatCourseToLayout(symbolDB, courseView, appearance, course, CourseLayer.AllControls); } // Render to a map Map map = course.RenderToMap(); // Render map to the graphics. Bitmap bm = new Bitmap(1000,1000); using (Graphics g = Graphics.FromImage(bm)) { RenderOptions options = new RenderOptions(); options.usePatternBitmaps = true; options.minResolution = (float) (rect.Width / bm.Width); options.renderTemplates = RenderTemplateOption.MapAndTemplates; g.ScaleTransform((float) (bm.Width / rect.Width), - (float) (bm.Height / rect.Height)); g.TranslateTransform(-rect.Left, -rect.Top-rect.Height); g.Clear(Color.White); using (map.Read()) map.Draw(new GDIPlus_GraphicsTarget(g), rect, options, null); } TestUtil.CheckBitmapsBase(bm, "courserenderer\\" + testName); }
// Render a description to a map, then to a bitmap for testing purposes. Hardcoded 6 mm box size. internal static Bitmap RenderToMapThenToBitmap(SymbolDB symbolDB, DescriptionLine[] description, DescriptionKind kind, int numColumns) { DescriptionRenderer descriptionRenderer = new DescriptionRenderer(symbolDB); descriptionRenderer.Description = description; descriptionRenderer.DescriptionKind = kind; descriptionRenderer.CellSize = 6.0F; descriptionRenderer.Margin = 0.7F; descriptionRenderer.NumberOfColumns = numColumns; PointF location = new PointF(30, -100); SizeF size = descriptionRenderer.Measure(); Bitmap bm = new Bitmap((int) size.Width * 8, (int) size.Height * 8); Graphics g = Graphics.FromImage(bm); g.ScaleTransform(bm.Width / size.Width, -bm.Height / size.Height); g.TranslateTransform(-location.X, -location.Y); g.Clear(Color.White); Map map = new Map(new GDIPlus_TextMetrics(), null); using (map.Write()) { Dictionary<object, SymDef> dict = new Dictionary<object, SymDef>(); // Create white color and white-out symdef. SymColor white = map.AddColorBottom("White", 44, 0, 0, 0, 0, false); AreaSymDef whiteArea = new AreaSymDef("White out", "890", white, null); whiteArea.ToolboxImage = MapUtil.CreateToolboxIcon(Properties.Resources.WhiteOut_OcadToolbox); map.AddSymdef(whiteArea); dict[CourseLayout.KeyWhiteOut] = whiteArea; SymColor color = map.AddColor("Purple", 11, 0.045F, 0.59F, 0, 0.255F, false); descriptionRenderer.RenderToMap(map, color, location, dict); } InputOutput.WriteFile(TestUtil.GetTestFile("descriptions\\desc_temp.ocd"), map, new MapFileFormat(MapFileFormatKind.OCAD, 8)); using (map.Read()) { RenderOptions renderOpts = new RenderOptions(); renderOpts.usePatternBitmaps = true; renderOpts.minResolution = 0.1F; renderOpts.renderTemplates = RenderTemplateOption.MapAndTemplates; map.Draw(new GDIPlus_GraphicsTarget(g), new RectangleF(location.X, location.Y - size.Height, size.Width, size.Height), renderOpts, null); } g.Dispose(); return bm; }
public void Initialize(EventDB eventDB, SymbolDB symbolDB) { this.symbolDB = symbolDB; this.eventDB = eventDB; eventDB.Validate(); popup = new SymbolPopup(symbolDB, 26); popup.Selected += PopupSelected; popup.Canceled += PopupCanceled; descriptionRenderer = new DescriptionRenderer(symbolDB); listBoxCourses.Items.Add(new CourseItem(eventDB, Id<Course>.None)); foreach (Id<Course> courseId in QueryEvent.SortedCourseIds(eventDB)) { listBoxCourses.Items.Add(new CourseItem(eventDB, courseId)); } comboBoxKind.SelectedIndex = 0; listBoxCourses.SelectedIndex = 0; }
// Render the given course id (0 = all controls) and kind to a map, and compare it to the saved version. internal void CheckRenderMap(string filename, Id<Course> id, DescriptionKind kind, int numColumns = 1) { SymbolDB symbolDB = new SymbolDB(Util.GetFileInAppDirectory("symbols.xml")); UndoMgr undomgr = new UndoMgr(5); EventDB eventDB = new EventDB(undomgr); CourseView courseView; eventDB.Load(filename); eventDB.Validate(); courseView = CourseView.CreateViewingCourseView(eventDB, DesignatorFromCourseId(eventDB, id)); DescriptionFormatter descFormatter = new DescriptionFormatter(courseView, symbolDB); DescriptionLine[] description = descFormatter.CreateDescription(kind == DescriptionKind.Symbols); Bitmap bmNew = RenderToMapThenToBitmap(symbolDB, description, kind, numColumns); if (numColumns > 1) TestUtil.CheckBitmapsBase(bmNew, DescriptionBrowser.GetBitmapFileName(eventDB, id, "_ocad_" + numColumns + "col", kind)); else TestUtil.CheckBitmapsBase(bmNew, DescriptionBrowser.GetBitmapFileName(eventDB, id, "_ocad", kind)); }
// Render a description to a bitmap for testing purposes. Hardcoded 40 pixel box size. public static Bitmap RenderToBitmap(SymbolDB symbolDB, DescriptionLine[] description, DescriptionKind kind, int numColumns) { DescriptionRenderer descriptionRenderer = new DescriptionRenderer(symbolDB); descriptionRenderer.Description = description; descriptionRenderer.DescriptionKind = kind; descriptionRenderer.CellSize = 40; descriptionRenderer.Margin = 4; descriptionRenderer.NumberOfColumns = numColumns; SizeF size = descriptionRenderer.Measure(); Bitmap bm = new Bitmap((int) size.Width, (int) size.Height); Graphics g = Graphics.FromImage(bm); g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias; g.Clear(Color.White); descriptionRenderer.RenderToGraphics(g, new RectangleF(0, 0, size.Width, size.Height)); g.Dispose(); return bm; }
public void ExpandText() { SymbolDB symbolDB = new SymbolDB(Util.GetFileInAppDirectory("symbols.xml")); UndoMgr undomgr = new UndoMgr(5); EventDB eventDB = new EventDB(undomgr); CourseView courseView; eventDB.Load(TestUtil.GetTestFile("courseformat\\marymoor6.coursescribe")); eventDB.Validate(); // Use course 1 courseView = CourseView.CreateViewingCourseView(eventDB, new CourseDesignator(CourseId(1))); string result; result = CourseFormatter.ExpandText(eventDB, courseView, "Simple text"); Assert.AreEqual("Simple text", result); result = CourseFormatter.ExpandText(eventDB, courseView, "$10 bill < $20 bill"); Assert.AreEqual("$10 bill < $20 bill", result); result = CourseFormatter.ExpandText(eventDB, courseView, ""); Assert.AreEqual("", result); result = CourseFormatter.ExpandText(eventDB, courseView, "$(CourseName)"); Assert.AreEqual("Course 1", result); result = CourseFormatter.ExpandText(eventDB, courseView, "$(CoursePart)"); Assert.AreEqual("", result); result = CourseFormatter.ExpandText(eventDB, courseView, "$(EventTitle): $(CourseName)"); Assert.AreEqual("Marymoor WIOL 2 The remake: Course 1", result); result = CourseFormatter.ExpandText(eventDB, courseView, "Course: $(CourseName) Length: $(CourseLength) km Scale: $(PrintScale)"); Assert.AreEqual("Course: Course 1 Length: 1.5 km Scale: 1:7,500", result); result = CourseFormatter.ExpandText(eventDB, courseView, "Course: $(CourseName) Climb: $(CourseClimb) m"); Assert.AreEqual("Course: Course 1 Climb: 20 m", result); result = CourseFormatter.ExpandText(eventDB, courseView, "$(CourseName) / $(ClassList)"); Assert.AreEqual("Course 1 / This is cool very cool", result); result = CourseFormatter.ExpandText(eventDB, courseView, "$(Variation)"); Assert.AreEqual("", result); result = CourseFormatter.ExpandText(eventDB, courseView, "$(RelayTeam)"); Assert.AreEqual("--", result); result = CourseFormatter.ExpandText(eventDB, courseView, "$(RelayLeg)"); Assert.AreEqual("-", result); // All Controls courseView = CourseView.CreateViewingCourseView(eventDB, CourseDesignator.AllControls); result = CourseFormatter.ExpandText(eventDB, courseView, "Course: $(CourseName) Length: $(CourseLength) km Scale: $(PrintScale)"); Assert.AreEqual("Course: All controls Length: 0.0 km Scale: 1:10,000", result); result = CourseFormatter.ExpandText(eventDB, courseView, "$(CourseName) / $(ClassList)"); Assert.AreEqual("All controls / ", result); result = CourseFormatter.ExpandText(eventDB, courseView, "$(CoursePart)"); Assert.AreEqual("", result); result = CourseFormatter.ExpandText(eventDB, courseView, "$(Variation)"); Assert.AreEqual("", result); result = CourseFormatter.ExpandText(eventDB, courseView, "$(RelayTeam)"); Assert.AreEqual("--", result); result = CourseFormatter.ExpandText(eventDB, courseView, "$(RelayLeg)"); Assert.AreEqual("-", result); }
void CheckCourse(string filename, CourseDesignator courseDesignator, string testName) { SymbolDB symbolDB = new SymbolDB(Util.GetFileInAppDirectory("symbols.xml")); UndoMgr undomgr = new UndoMgr(5); EventDB eventDB = new EventDB(undomgr); CourseView courseView, courseViewAllVariations; CourseLayout course; eventDB.Load(TestUtil.GetTestFile(filename)); eventDB.Validate(); // Create the course courseView = CourseView.CreateViewingCourseView(eventDB, courseDesignator); if (courseDesignator.IsVariation) { courseViewAllVariations = CourseView.CreateViewingCourseView(eventDB, courseDesignator.WithAllVariations()); } else { courseViewAllVariations = courseView; } course = new CourseLayout(); course.SetLayerColor(CourseLayer.AllVariations, 1, "Gray", 0, 0, 0, 0.4F, false); course.SetLayerColor(CourseLayer.MainCourse, 0, "Black", 0, 0, 0, 1F, false); course.SetLayerColor(CourseLayer.InvisibleObjects, 2, "DropTargets", 1F, 1F, 0, 0, false); TopologyFormatter formatter = new TopologyFormatter(); RectangleF rect = formatter.FormatCourseToLayout(symbolDB, courseViewAllVariations, courseView, course, Id <CourseControl> .None, Id <CourseControl> .None, CourseLayer.AllVariations, CourseLayer.MainCourse); // Render to a map Map map = course.RenderToMap(new CourseLayout.MapRenderOptions()); // Make drop targets visible. using (map.Write()) { foreach (SymDef symdef in map.AllSymdefs) { if (symdef.SymbolId == "781") { map.SetSymdefVisible(symdef, true); } } } // Render map to the graphics. Bitmap bm = new Bitmap((int)(1000 * rect.Width / rect.Height), 1000); using (Graphics g = Graphics.FromImage(bm)) { RenderOptions options = new RenderOptions(); options.usePatternBitmaps = true; options.minResolution = (float)(rect.Width / bm.Width); options.renderTemplates = RenderTemplateOption.MapAndTemplates; g.ScaleTransform((float)(bm.Width / rect.Width), -(float)(bm.Height / rect.Height)); g.TranslateTransform(-rect.Left, -rect.Top - rect.Height); g.Clear(Color.White); using (map.Read()) map.Draw(new GDIPlus_GraphicsTarget(g), rect, options, null); } TestUtil.CheckBitmapsBase(bm, "topologyformatter\\" + testName); }
public void ExpandTextRelay() { SymbolDB symbolDB = new SymbolDB(Util.GetFileInAppDirectory("symbols.xml")); UndoMgr undomgr = new UndoMgr(5); EventDB eventDB = new EventDB(undomgr); CourseView courseView; string result; eventDB.Load(TestUtil.GetTestFile("queryevent\\variations.ppen")); eventDB.Validate(); // Use course 1 List<VariationInfo> variations = QueryEvent.GetAllVariations(eventDB, CourseId(1)).ToList(); courseView = CourseView.CreateViewingCourseView(eventDB, new CourseDesignator(CourseId(1), variations[0])); result = CourseFormatter.ExpandText(eventDB, courseView, "$(CourseName)"); Assert.AreEqual("Course 1", result); result = CourseFormatter.ExpandText(eventDB, courseView, "$(Variation)"); Assert.AreEqual("ACDEFH", result); result = CourseFormatter.ExpandText(eventDB, courseView, "$(RelayTeam)"); Assert.AreEqual("--", result); result = CourseFormatter.ExpandText(eventDB, courseView, "$(RelayLeg)"); Assert.AreEqual("-", result); CourseDesignator designator = QueryEvent.EnumerateCourseDesignators(eventDB, new[] { CourseId(1) }, new Dictionary<Id<Course>, VariationChoices>() { { CourseId(1), new VariationChoices() { Kind = VariationChoices.VariationChoicesKind.ChosenTeams, FirstTeam = 4, LastTeam = 6 } } }, true).Skip(1).First(); courseView = CourseView.CreateViewingCourseView(eventDB, designator); result = CourseFormatter.ExpandText(eventDB, courseView, "$(CourseName)"); Assert.AreEqual("Course 1", result); result = CourseFormatter.ExpandText(eventDB, courseView, "$(Variation)"); Assert.AreEqual("ADEFCH", result); result = CourseFormatter.ExpandText(eventDB, courseView, "$(RelayTeam)"); Assert.AreEqual("4", result); result = CourseFormatter.ExpandText(eventDB, courseView, "$(RelayLeg)"); Assert.AreEqual("2", result); }
public void ReadSymbols() { SymbolDB symbolDB = new SymbolDB(TestUtil.GetTestFile("symbols\\testread.xml")); ICollection<Symbol> symbolCollection = symbolDB.AllSymbols; Assert.AreEqual(7, symbolCollection.Count); Symbol[] symbols = new Symbol[symbolCollection.Count]; symbolCollection.CopyTo(symbols, 0); Assert.AreSame(symbols[0], symbolDB["1.10"]); Assert.AreEqual('D', symbols[0].Kind); Assert.AreEqual(symbols[0].Id, "1.10"); Assert.AreEqual(symbols[0].GetName("en"), "Knoll"); Assert.AreEqual(symbols[0].GetText("en"), "knoll"); Assert.AreEqual(1, symbols[0].strokes.Length); Assert.AreEqual(Symbol.SymbolStrokes.Disc, symbols[0].strokes[0].kind); Assert.AreEqual(10F, symbols[0].strokes[0].radius); Assert.AreEqual(1, symbols[0].strokes[0].points.Length); Assert.AreEqual(0F, symbols[0].strokes[0].points[0].X); Assert.AreEqual(10F, symbols[0].strokes[0].points[0].Y); Assert.AreSame(symbols[1], symbolDB["1.14"]); Assert.AreEqual('D', symbols[1].Kind); Assert.AreEqual(symbols[1].Id, "1.14"); Assert.AreEqual(symbols[1].GetName("en"), "Pit"); Assert.AreEqual(symbols[1].GetText("en"), "pit"); Assert.AreEqual(symbols[1].GetPluralText("en"), "pits"); Assert.AreEqual(1, symbols[1].strokes.Length); Assert.AreEqual(Symbol.SymbolStrokes.Polyline, symbols[1].strokes[0].kind); Assert.AreEqual(5F, symbols[1].strokes[0].thickness); Assert.AreEqual(LineCap.Round, symbols[1].strokes[0].ends); Assert.AreEqual(LineJoin.Miter, symbols[1].strokes[0].corners); Assert.AreEqual(3, symbols[1].strokes[0].points.Length); Assert.AreEqual(-40F, symbols[1].strokes[0].points[0].X); Assert.AreEqual(50F, symbols[1].strokes[0].points[0].Y); Assert.AreEqual(0.0F, symbols[1].strokes[0].points[1].X); Assert.AreEqual(-20F, symbols[1].strokes[0].points[1].Y); Assert.AreEqual(40F, symbols[1].strokes[0].points[2].X); Assert.AreEqual(50F, symbols[1].strokes[0].points[2].Y); Assert.AreSame(symbols[2], symbolDB["5.17"]); Assert.AreEqual('D', symbols[2].Kind); Assert.AreEqual(symbols[2].Id, "5.17"); Assert.AreEqual(symbols[2].GetName("en"), "Boundary stone, Cairn"); Assert.AreEqual(symbols[2].GetText("en"), "cairn"); Assert.AreEqual(symbols[2].GetPluralText("en"), "cairns"); Assert.AreEqual(2, symbols[2].strokes.Length); Assert.AreEqual(Symbol.SymbolStrokes.Circle, symbols[2].strokes[0].kind); Assert.AreEqual(50F, symbols[2].strokes[0].radius); Assert.AreEqual(5F, symbols[2].strokes[0].thickness); Assert.AreEqual(1, symbols[2].strokes[0].points.Length); Assert.AreEqual(0.0F, symbols[2].strokes[0].points[0].X); Assert.AreEqual(10F, symbols[2].strokes[0].points[0].Y); Assert.AreEqual(Symbol.SymbolStrokes.Disc, symbols[2].strokes[1].kind); Assert.AreEqual(10F, symbols[2].strokes[1].radius); Assert.AreEqual(1, symbols[2].strokes[1].points.Length); Assert.AreEqual(0F, symbols[2].strokes[1].points[0].X); Assert.AreEqual(10F, symbols[2].strokes[1].points[0].Y); Assert.AreSame(symbols[3], symbolDB["4.1"]); Assert.AreEqual('D', symbols[3].Kind); Assert.AreEqual(symbols[3].Id, "4.1"); Assert.AreEqual(symbols[3].GetName("en"), "Open land"); Assert.AreEqual(symbols[3].GetText("en"), "open land"); Assert.AreEqual(symbols[3].GetPluralText("en"), "open land"); Assert.AreEqual(symbols[3].GetText("de"), "smelly"); Assert.AreEqual(symbols[3].GetText("xx"), "gibberish"); Assert.AreEqual(symbols[3].GetPluralText("xx"), "plural gibberish"); Assert.AreEqual(1, symbols[3].strokes.Length); Assert.AreEqual(Symbol.SymbolStrokes.Polygon, symbols[3].strokes[0].kind); Assert.AreEqual(5F, symbols[3].strokes[0].thickness); Assert.AreEqual(LineJoin.Miter, symbols[3].strokes[0].corners); Assert.AreEqual(4, symbols[3].strokes[0].points.Length); Assert.AreEqual(0.0, symbols[3].strokes[0].points[0].X); Assert.AreEqual(50F, symbols[3].strokes[0].points[0].Y); Assert.AreEqual(50F, symbols[3].strokes[0].points[1].X); Assert.AreEqual(0.0F, symbols[3].strokes[0].points[1].Y); Assert.AreEqual(0.0F, symbols[3].strokes[0].points[2].X); Assert.AreEqual(-50F, symbols[3].strokes[0].points[2].Y); Assert.AreEqual(-50F, symbols[3].strokes[0].points[3].X); Assert.AreEqual(0.0F, symbols[3].strokes[0].points[3].Y); Assert.AreSame(symbols[4], symbolDB["2.2"]); Assert.AreEqual('D', symbols[4].Kind); Assert.AreEqual("2.2", symbols[4].Id); Assert.AreEqual(symbols[4].GetName("en"), "Rock pillar"); Assert.AreEqual(symbols[4].GetText("en"), "rock pillar"); Assert.AreEqual(1, symbols[4].strokes.Length); Assert.AreEqual(Symbol.SymbolStrokes.FilledPolygon, symbols[4].strokes[0].kind); Assert.AreEqual(3, symbols[4].strokes[0].points.Length); Assert.AreEqual(0.0, symbols[4].strokes[0].points[0].X); Assert.AreEqual(70F, symbols[4].strokes[0].points[0].Y); Assert.AreEqual(50F, symbols[4].strokes[0].points[1].X); Assert.AreEqual(-50F, symbols[4].strokes[0].points[1].Y); Assert.AreEqual(-50F, symbols[4].strokes[0].points[2].X); Assert.AreEqual(-50F, symbols[4].strokes[0].points[2].Y); Assert.AreSame(symbols[5], symbolDB["1.3"]); Assert.AreEqual('D', symbols[5].Kind); Assert.AreEqual("1.3", symbols[5].Id); Assert.AreEqual(symbols[5].GetName("en"), "Reentrant"); Assert.AreEqual(symbols[5].GetText("en"), "reentrant"); Assert.AreEqual(1, symbols[5].strokes.Length); Assert.AreEqual(Symbol.SymbolStrokes.PolyBezier, symbols[5].strokes[0].kind); Assert.AreEqual(12.5F, symbols[5].strokes[0].thickness); Assert.AreEqual(LineCap.Flat, symbols[5].strokes[0].ends); Assert.AreEqual(13, symbols[5].strokes[0].points.Length); Assert.AreEqual(-80F, symbols[5].strokes[0].points[0].X); Assert.AreEqual(-80F, symbols[5].strokes[0].points[0].Y); Assert.AreEqual(-50F, symbols[5].strokes[0].points[1].X); Assert.AreEqual(-80F, symbols[5].strokes[0].points[1].Y); Assert.AreEqual(-50F, symbols[5].strokes[0].points[2].X); Assert.AreEqual(-30F, symbols[5].strokes[0].points[2].Y); Assert.AreEqual(-45F, symbols[5].strokes[0].points[3].X); Assert.AreEqual(0.0F, symbols[5].strokes[0].points[3].Y); Assert.AreEqual(-40F, symbols[5].strokes[0].points[4].X); Assert.AreEqual(30F, symbols[5].strokes[0].points[4].Y); Assert.AreEqual(-35F, symbols[5].strokes[0].points[5].X); Assert.AreEqual(80F, symbols[5].strokes[0].points[5].Y); Assert.AreEqual(0F, symbols[5].strokes[0].points[6].X); Assert.AreEqual(80F, symbols[5].strokes[0].points[6].Y); Assert.AreEqual(35F, symbols[5].strokes[0].points[7].X); Assert.AreEqual(80F, symbols[5].strokes[0].points[7].Y); Assert.AreEqual(40F, symbols[5].strokes[0].points[8].X); Assert.AreEqual(30F, symbols[5].strokes[0].points[8].Y); Assert.AreEqual(45F, symbols[5].strokes[0].points[9].X); Assert.AreEqual(0.0F, symbols[5].strokes[0].points[9].Y); Assert.AreEqual(50, symbols[5].strokes[0].points[10].X); Assert.AreEqual(-30F, symbols[5].strokes[0].points[10].Y); Assert.AreEqual(50F, symbols[5].strokes[0].points[11].X); Assert.AreEqual(-80F, symbols[5].strokes[0].points[11].Y); Assert.AreEqual(80F, symbols[5].strokes[0].points[12].X); Assert.AreEqual(-80F, symbols[5].strokes[0].points[12].Y); Assert.AreSame(symbols[6], symbolDB["0.4"]); Assert.AreEqual('Q', symbols[6].Kind); Assert.AreEqual("0.4", symbols[6].Id); Assert.AreEqual(symbols[6].GetName("en"), "Filled ellipse"); Assert.AreEqual(symbols[6].GetText("en"), "ellipse"); Assert.AreEqual(1, symbols[6].strokes.Length); Assert.AreEqual(Symbol.SymbolStrokes.FilledPolyBezier, symbols[6].strokes[0].kind); Assert.AreEqual(13, symbols[6].strokes[0].points.Length); Assert.AreEqual(0.0F, symbols[6].strokes[0].points[0].X); Assert.AreEqual(50F, symbols[6].strokes[0].points[0].Y); Assert.AreEqual(38F, symbols[6].strokes[0].points[1].X); Assert.AreEqual(50F, symbols[6].strokes[0].points[1].Y); Assert.AreEqual(70F, symbols[6].strokes[0].points[2].X); Assert.AreEqual(28F, symbols[6].strokes[0].points[2].Y); Assert.AreEqual(70F, symbols[6].strokes[0].points[3].X); Assert.AreEqual(0.0F, symbols[6].strokes[0].points[3].Y); Assert.AreEqual(70F, symbols[6].strokes[0].points[4].X); Assert.AreEqual(-28F, symbols[6].strokes[0].points[4].Y); Assert.AreEqual(38F, symbols[6].strokes[0].points[5].X); Assert.AreEqual(-50F, symbols[6].strokes[0].points[5].Y); Assert.AreEqual(0.0F, symbols[6].strokes[0].points[6].X); Assert.AreEqual(-50F, symbols[6].strokes[0].points[6].Y); Assert.AreEqual(-38F, symbols[6].strokes[0].points[7].X); Assert.AreEqual(-50F, symbols[6].strokes[0].points[7].Y); Assert.AreEqual(-70F, symbols[6].strokes[0].points[8].X); Assert.AreEqual(-28F, symbols[6].strokes[0].points[8].Y); Assert.AreEqual(-70F, symbols[6].strokes[0].points[9].X); Assert.AreEqual(0.0F, symbols[6].strokes[0].points[9].Y); Assert.AreEqual(-70F, symbols[6].strokes[0].points[10].X); Assert.AreEqual(28F, symbols[6].strokes[0].points[10].Y); Assert.AreEqual(-38F, symbols[6].strokes[0].points[11].X); Assert.AreEqual(50F, symbols[6].strokes[0].points[11].Y); Assert.AreEqual(0.0F, symbols[6].strokes[0].points[12].X); Assert.AreEqual(50F, symbols[6].strokes[0].points[12].Y); }
// Render the given course id (0 = all controls) and kind to a bitmap, and compare it to the saved version. internal void CheckRenderBitmap(string filename, Id<Course> id, PunchcardFormat format) { SymbolDB symbolDB = new SymbolDB(Util.GetFileInAppDirectory("symbols.xml")); UndoMgr undomgr = new UndoMgr(5); EventDB eventDB = new EventDB(undomgr); CourseView courseView; eventDB.Load(filename); eventDB.Validate(); courseView = CourseView.CreateViewingCourseView(eventDB, new CourseDesignator(id)); Bitmap bmNew = RenderToBitmap(eventDB, courseView, format); TestUtil.CheckBitmapsBase(bmNew, GetBitmapFileName(eventDB, id, "")); }
public NewLanguage(SymbolDB symbolDB) : this() { this.symbolDB = symbolDB; }