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"));
        }
Пример #2
0
        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.");
        }
Пример #3
0
 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"));
 }
Пример #4
0
        public void Initialize(SymbolDB symbolDB)
        {
            this.symbolDB = symbolDB;

            foreach (Symbol sym in symbolDB.AllSymbols) {
                listBoxSymbols.Items.Add(sym.Id + " - " + sym.GetName(Util.CurrentLangName()));
            }
        }
Пример #5
0
        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);
        }
Пример #6
0
        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;
        }
Пример #7
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);
        }
Пример #8
0
 // 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();
 }
Пример #9
0
        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());
        }
Пример #10
0
        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);
        }
Пример #11
0
        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));
        }
Пример #16
0
        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);
            }
        }
Пример #17
0
        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);
        }
Пример #18
0
        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);
        }
Пример #19
0
        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);
        }
Пример #20
0
        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');
        }
Пример #21
0
 // 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);
        }
Пример #23
0
        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));
        }
Пример #26
0
        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));
        }
Пример #28
0
        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;
        }
Пример #30
0
        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));
        }
Пример #32
0
        // 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;
        }
Пример #33
0
        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);
        }
Пример #34
0
        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);
        }
Пример #35
0
        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);
        }
Пример #36
0
        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);
        }
Пример #37
0
        // 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, ""));
        }
Пример #38
0
 public NewLanguage(SymbolDB symbolDB) : this()
 {
     this.symbolDB = symbolDB;
 }