示例#1
0
        public void CharacterStreamCloseTest()
        {
            StringReaderHarness harness = new StringReaderHarness("Test");
            CharacterScanner sut = new CharacterScanner(harness);

            sut.Close();

            Assert.AreEqual(true, harness.DisposeInvoked, "Dispose should have been invoked");
            Assert.AreEqual(true, sut.IsEOF(), "Should now indicate EOF");
        }
示例#2
0
        public void CharacterStreamConstructorTest_StringReader()
        {
            StringReader testInput = new StringReader("Test");
            StreamLocation expectedLocation = new StreamLocation(0, 1, 1);

            CharacterScanner sut = new CharacterScanner(testInput);

            Assert.AreEqual(false, sut.IsEOF(), "Should not be at EOF");
            Assert.AreEqual(true, sut.HasNext(), "Should have next");
            Assert.AreEqual(expectedLocation, sut.Location);
            Assert.AreEqual('T', sut.Peek());
        }
示例#3
0
    public static void ScanAllCharacters()
    {
        var configName     = "skill_anims.json";
        var configFilename = FI.ConfigPath + configName;

        var jsonWriter = new CharacterJsonWriter();

        jsonWriter.WriteObjectStart();

        UnityEditor.SceneManagement.EditorSceneManager.NewScene(
            UnityEditor.SceneManagement.NewSceneSetup.EmptyScene, UnityEditor.SceneManagement.NewSceneMode.Single);

        var all = Directory.GetFiles("Assets/Prefab/characters", "*.prefab", SearchOption.AllDirectories).ToList();

        for (int i = 0; i < all.Count; ++i)
        {
            var filename = all[i];
            EditorUtility.DisplayProgressBar("Scan all characters", "scanning " + filename, (float)i / all.Count);

            var prefab = AssetDatabase.LoadAssetAtPath <GameObject>(filename);
            var name   = System.IO.Path.GetFileNameWithoutExtension(filename);

            if (name.EndsWith("_model"))
            {
                name = name.Substring(0, name.Length - "_model".Length);
            }

            var scanner = new CharacterScanner(jsonWriter);
            scanner.ScanPrefab(name, prefab);

            LogUtil.Debug("Prefab " + filename + " scan success");
        }
        ;

        jsonWriter.WriteObjectEnd();
        jsonWriter.OutputToFile(configFilename);

        LogUtil.Debug("Config " + configFilename + " successfully scanned and generated in game-config folder");
        EditorUtility.ClearProgressBar();
    }
示例#4
0
        public void CharacterStreamConsumeAndLocationTest()
        {
            char EOF = new CharacterScanner("").EOF;
            // A three line input containing embedded "EOF" characters (which should be skipped over)
            string testInput = "A test\nof the " + EOF + EOF + " character stream.\nThree lines of stuff.";
            ExpectedOutcome[] expected = { new ExpectedOutcome() {ch= 'A',  loc= new StreamLocation( 0, 1,  1)},
                                           new ExpectedOutcome() {ch= ' ',  loc= new StreamLocation( 1, 1,  2)},
                                           new ExpectedOutcome() {ch= 't',  loc= new StreamLocation( 2, 1,  3)},
                                           new ExpectedOutcome() {ch= 'e',  loc= new StreamLocation( 3, 1,  4)},
                                           new ExpectedOutcome() {ch= 's',  loc= new StreamLocation( 4, 1,  5)},
                                           new ExpectedOutcome() {ch= 't',  loc= new StreamLocation( 5, 1,  6)},
                                           new ExpectedOutcome() {ch= '\n', loc= new StreamLocation( 6, 1,  7)},
                                           new ExpectedOutcome() {ch= 'o',  loc= new StreamLocation( 7, 2,  1)},
                                           new ExpectedOutcome() {ch= 'f',  loc= new StreamLocation( 8, 2,  2)},
                                           new ExpectedOutcome() {ch= ' ',  loc= new StreamLocation( 9, 2,  3)},
                                           new ExpectedOutcome() {ch= 't',  loc= new StreamLocation(10, 2,  4)},
                                           new ExpectedOutcome() {ch= 'h',  loc= new StreamLocation(11, 2,  5)},
                                           new ExpectedOutcome() {ch= 'e',  loc= new StreamLocation(12, 2,  6)},
                                           new ExpectedOutcome() {ch= ' ',  loc= new StreamLocation(13, 2,  7)},
                                           new ExpectedOutcome() {ch= ' ',  loc= new StreamLocation(16, 2, 10)},
                                           new ExpectedOutcome() {ch= 'c',  loc= new StreamLocation(17, 2, 11)},
                                           new ExpectedOutcome() {ch= 'h',  loc= new StreamLocation(18, 2, 12)},
                                           new ExpectedOutcome() {ch= 'a',  loc= new StreamLocation(19, 2, 13)},
                                           new ExpectedOutcome() {ch= 'r',  loc= new StreamLocation(20, 2, 14)},
                                           new ExpectedOutcome() {ch= 'a',  loc= new StreamLocation(21, 2, 15)},
                                           new ExpectedOutcome() {ch= 'c',  loc= new StreamLocation(22, 2, 16)},
                                           new ExpectedOutcome() {ch= 't',  loc= new StreamLocation(23, 2, 17)},
                                           new ExpectedOutcome() {ch= 'e',  loc= new StreamLocation(24, 2, 18)},
                                           new ExpectedOutcome() {ch= 'r',  loc= new StreamLocation(25, 2, 19)},
                                           new ExpectedOutcome() {ch= ' ',  loc= new StreamLocation(26, 2, 20)},
                                           new ExpectedOutcome() {ch= 's',  loc= new StreamLocation(27, 2, 21)},
                                           new ExpectedOutcome() {ch= 't',  loc= new StreamLocation(28, 2, 22)},
                                           new ExpectedOutcome() {ch= 'r',  loc= new StreamLocation(29, 2, 23)},
                                           new ExpectedOutcome() {ch= 'e',  loc= new StreamLocation(30, 2, 24)},
                                           new ExpectedOutcome() {ch= 'a',  loc= new StreamLocation(31, 2, 25)},
                                           new ExpectedOutcome() {ch= 'm',  loc= new StreamLocation(32, 2, 26)},
                                           new ExpectedOutcome() {ch= '.',  loc= new StreamLocation(33, 2, 27)},
                                           new ExpectedOutcome() {ch= '\n', loc= new StreamLocation(34, 2, 28)},
                                           new ExpectedOutcome() {ch= 'T',  loc= new StreamLocation(35, 3,  1)},
                                           new ExpectedOutcome() {ch= 'h',  loc= new StreamLocation(36, 3,  2)},
                                           new ExpectedOutcome() {ch= 'r',  loc= new StreamLocation(37, 3,  3)},
                                           new ExpectedOutcome() {ch= 'e',  loc= new StreamLocation(38, 3,  4)},
                                           new ExpectedOutcome() {ch= 'e',  loc= new StreamLocation(39, 3,  5)},
                                           new ExpectedOutcome() {ch= ' ',  loc= new StreamLocation(40, 3,  6)},
                                           new ExpectedOutcome() {ch= 'l',  loc= new StreamLocation(41, 3,  7)},
                                           new ExpectedOutcome() {ch= 'i',  loc= new StreamLocation(42, 3,  8)},
                                           new ExpectedOutcome() {ch= 'n',  loc= new StreamLocation(43, 3,  9)},
                                           new ExpectedOutcome() {ch= 'e',  loc= new StreamLocation(44, 3, 10)},
                                           new ExpectedOutcome() {ch= 's',  loc= new StreamLocation(45, 3, 11)},
                                           new ExpectedOutcome() {ch= ' ',  loc= new StreamLocation(46, 3, 12)},
                                           new ExpectedOutcome() {ch= 'o',  loc= new StreamLocation(47, 3, 13)},
                                           new ExpectedOutcome() {ch= 'f',  loc= new StreamLocation(48, 3, 14)},
                                           new ExpectedOutcome() {ch= ' ',  loc= new StreamLocation(49, 3, 15)},
                                           new ExpectedOutcome() {ch= 's',  loc= new StreamLocation(50, 3, 16)},
                                           new ExpectedOutcome() {ch= 't',  loc= new StreamLocation(51, 3, 17)},
                                           new ExpectedOutcome() {ch= 'u',  loc= new StreamLocation(52, 3, 18)},
                                           new ExpectedOutcome() {ch= 'f',  loc= new StreamLocation(53, 3, 19)},
                                           new ExpectedOutcome() {ch= 'f',  loc= new StreamLocation(54, 3, 20)},
                                           new ExpectedOutcome() {ch= '.',  loc= new StreamLocation(55, 3, 21)},
                                           new ExpectedOutcome() {ch= EOF, loc= new StreamLocation(56, 3, 22)},
                                           new ExpectedOutcome() {ch= EOF, loc= new StreamLocation(56, 3, 22)}
                                         };

            CharacterScanner sut = new CharacterScanner(testInput);
            sut.Start();

            int index = 0;
            foreach (ExpectedOutcome it in expected)
            {
                StreamLocation loc = sut.Location;
                char ch = sut.Consume();

                Assert.AreEqual(it.ch, ch, String.Format("Unexpected character @ {0}", index));
                Assert.AreEqual(it.loc, loc);

                ++index;
            }
        }
示例#5
0
 private static bool IsStarted(CharacterScanner sut)
 {
     try
     {
         sut.SetStartLocation(new StreamLocation(3, 2, 1));
         return false;
     }
     catch (ParserException)
     {
         return true;
     }
 }
示例#6
0
        public void CharacterStreamStartTest()
        {
            StreamLocation expectedLocation = new StreamLocation(0, 1, 1);
            CharacterScanner sut = new CharacterScanner("Test");

            sut.Start();

            Assert.IsTrue(IsStarted(sut), "Should not be able to set new location if started");
            Assert.AreEqual(expectedLocation, sut.Location);
        }
示例#7
0
        public void CharacterStreamResetTest()
        {
            string testInput = "abcdefghijklmnopqrstuvwxyz";
            bool expectResp = false;

            CharacterScanner sut = new CharacterScanner(testInput);
            sut.Start();
            for (int i = 0; i < 4; ++i) sut.Consume();
            bool resp = sut.Reset();

            Assert.AreEqual(expectResp, resp);
        }
示例#8
0
        public void CharacterStreamPeekTest_ReadPastEnd()
        {
            // A three line input containing embedded "EOF" characters (which should be skipped over)
            string testInput = "X";
            CharacterScanner sut = new CharacterScanner(testInput);
            sut.Start();
            sut.Consume();

            Assert.AreEqual(sut.EOF, sut.Peek());
        }
示例#9
0
        public void CharacterStreamPeekTest()
        {
            string testInput = "abcdefghijklmnopqrstuvwxyz";
            ExpectedOutcome expected = new ExpectedOutcome() { ch= 'e', loc= new StreamLocation(4, 1, 5) };

            CharacterScanner sut = new CharacterScanner(testInput);
            sut.Start();
            for (int i = 0; i < 4; ++i) sut.Consume();

            Assert.AreEqual(expected.ch, sut.Peek());
            Assert.AreEqual(expected.loc, sut.Location);

            Assert.AreEqual(expected.ch, sut.Peek(), "unexpected change!");
            Assert.AreEqual(expected.loc, sut.Location, "unexpected change!");
        }
示例#10
0
        public void CharacterStreamMatchTest_Success()
        {
            string testInput = "abcdefghijklmnopqrstuvwxyz";
            char expected = 'e';

            CharacterScanner sut = new CharacterScanner(testInput);
            sut.Start();
            for (int i = 0; i < 4; ++i) sut.Consume();

            sut.Match(expected);
        }
示例#11
0
        public void CharacterStreamIsEOFHasNextTest_NotEOF()
        {
            string testInput = "a";
            bool expectEOF = false;
            StreamLocation expectedLocation = new StreamLocation(0, 1, 1);

            CharacterScanner sut = new CharacterScanner(testInput);
            sut.Start();

            Assert.AreEqual(expectEOF, sut.IsEOF(), "EOF unexpected");
            Assert.AreEqual(!expectEOF, sut.HasNext(), "HasNext expected");
            Assert.AreEqual(expectedLocation, sut.Location);
        }
示例#12
0
        public void CharacterStreamIsEOFHasNextTest_AtEOF()
        {
            string testInput = "a";
            bool expectEOF = true;
            StreamLocation expectedLocation = new StreamLocation(1, 1, 2);

            CharacterScanner sut = new CharacterScanner(testInput);
            sut.Start();
            sut.Consume();

            Assert.AreEqual(expectEOF, sut.IsEOF(), "EOF expected");
            Assert.AreEqual(!expectEOF, sut.HasNext(), "HasNext unexpected");
            Assert.AreEqual(expectedLocation, sut.Location);
        }