Пример #1
0
        public void ConditionsIsTypeTest()
        {
            // テストコードを追加
            CreateFileData(CreateSource(CreatePattern.ConditionsIsType), (ev) =>
            {
                // IItemClassインスタンスを取得
                var itemClass = GetClassInstance(ev, "ConditionsIsType.cs");

                // 外部参照の存在確認
                Assert.Single(ev.FileRoot.OtherFiles);

                // 対象インスタンスのリストを取得
                var targetInstances = GetTargetInstances(itemClass);

                // 対象の親インスタンスを取得
                Assert.Single(targetInstances);
                var targetParentInstance = targetInstances.First() as IItemMethod;

                // 対象インスタンスを取得
                var targetInstance = GetTargetInstances(targetParentInstance).FirstOrDefault() as IItemIf;

                // 対象インスタンスの存在確認
                Assert.NotNull(targetInstance);

                // 分岐構造の確認
                checkIf(targetInstance, "val is string", 0);
            });

            // 解析実行
            CSAnalyze.Analyze(string.Empty, Files);
        }
Пример #2
0
        public void DecrementTest()
        {
            // テストコードを追加
            CreateFileData(CreateSource(CreatePattern.Decrement), (ev) =>
            {
                // IItemClassインスタンスを取得
                var itemClass = GetClassInstance(ev, "Decrement.cs");

                // 対象インスタンスのリストを取得
                var targetInstances = GetTargetInstances(itemClass);

                // 対象の親インスタンスを取得
                Assert.Single(targetInstances);
                var targetParentInstance = targetInstances.First() as IItemMethod;

                // 対象インスタンスを取得
                var targetInstance = GetTargetInstances <IItemDo>(targetParentInstance).First();

                // 外部参照の存在確認
                Assert.Empty(ev.FileRoot.OtherFiles);

                // 条件の確認
                Assert.Equal("--val>=0", GetExpressionsToString(targetInstance.Conditions));
            });

            // 解析実行
            CSAnalyze.Analyze(string.Empty, Files);
        }
Пример #3
0
        public void InstanceMethodTest()
        {
            // テストコードを追加
            CreateFileData(CreateSource(CreatePattern.InstanceMethod), (ev) =>
            {
                // IItemClassインスタンスを取得
                var itemClass = GetClassInstance(ev, "InstanceMethod.cs");

                // 外部参照の存在確認
                Assert.Empty(ev.FileRoot.OtherFiles);

                // 対象インスタンスのリストを取得
                var targetInstances = GetTargetInstances(itemClass);

                // 対象の親インスタンスを取得
                Assert.Equal(2, targetInstances.Count);
                var targetParentInstance = targetInstances.First() as IItemMethod;

                // 対象インスタンスを取得
                var targetInstance = GetTargetInstances(targetParentInstance).FirstOrDefault() as IItemIf;

                // 対象インスタンスの存在確認
                Assert.NotNull(targetInstance);

                // 分岐構造の確認
                checkIf(targetInstance, "this.GetValue()", 0);
            });

            // 解析実行
            CSAnalyze.Analyze(string.Empty, Files);
        }
Пример #4
0
        public void ReturnAddIntTostringTest()
        {
            // テストコードを追加
            CreateFileData(CreateSource(CreatePattern.ReturnAddIntTostring), (ev) =>
            {
                // IItemClassインスタンスを取得
                var itemClass = GetClassInstance(ev, "ReturnAddIntTostring.cs");

                // 対象インスタンスのリストを取得
                var targetInstances = GetTargetInstances(itemClass);

                // 対象の親インスタンスを取得
                Assert.Single(targetInstances);
                var targetParentInstance = targetInstances.First() as IItemMethod;

                // 外部参照の存在確認
                Assert.Empty(ev.FileRoot.OtherFiles);

                // 対象インスタンスを取得
                var targetInstance = GetTargetInstances(targetParentInstance).FirstOrDefault();
                Assert.NotNull(targetInstance);

                // 戻り値の確認
                Assert.Equal("(10+100).ToString()", GetExpressionsToString(targetInstance.ReturnValue));
            });

            // 解析実行
            CSAnalyze.Analyze(string.Empty, Files);
        }
Пример #5
0
        public void ExistsElseTest()
        {
            // テストコードを追加
            CreateFileData(CreateSource(CreatePattern.ExistsElse), (ev) =>
            {
                // IItemClassインスタンスを取得
                var itemClass = GetClassInstance(ev, "ExistsElse.cs");

                // 外部参照の存在確認
                Assert.Empty(ev.FileRoot.OtherFiles);

                // 対象インスタンスのリストを取得
                var targetInstances = GetTargetInstances(itemClass);

                // 対象の親インスタンスを取得
                Assert.Single(targetInstances);
                var targetParentInstance = targetInstances.First() as IItemMethod;

                // 対象インスタンスを取得
                var targetInstance = GetTargetInstances(targetParentInstance).FirstOrDefault() as IItemIf;

                // 対象インスタンスの存在確認
                Assert.NotNull(targetInstance);

                // 分岐構造の確認
                checkIf(targetInstance, "true", 1);

                Assert.Single(targetInstance.FalseBlocks);
                checkElse(targetInstance.FalseBlocks.First() as IItemElseClause, "");
            });

            // 解析実行
            CSAnalyze.Analyze(string.Empty, Files);
        }
Пример #6
0
        public void InstanceMethodTest()
        {
            // テストコードを追加
            CreateFileData(CreateSource(CreatePattern.InstanceMethod), (ev) =>
            {
                // IItemClassインスタンスを取得
                var itemClass = GetClassInstance(ev, "InstanceMethod.cs");

                // 対象インスタンスのリストを取得
                var targetInstances = GetTargetInstances(itemClass);

                // 対象の親インスタンスを取得
                Assert.Equal(2, targetInstances.Count);
                var targetParentInstance = targetInstances.First() as IItemMethod;

                // 対象インスタンスを取得
                var targetInstance = GetTargetInstances <IItemWhile>(targetParentInstance).First();

                // 外部参照の存在確認
                Assert.Empty(ev.FileRoot.OtherFiles);

                // 条件の確認
                Assert.Equal("val<this.GetMaxCount()", GetExpressionsToString(targetInstance.Conditions));
            });

            // 解析実行
            CSAnalyze.Analyze(string.Empty, Files);
        }
Пример #7
0
        public void InstanceMethodTest()
        {
            // テストコードを追加
            CreateFileData(CreateSource(CreatePattern.InstanceMethod), (ev) =>
            {
                // IItemClassインスタンスを取得
                var itemClass = GetClassInstance(ev, "InstanceMethod.cs");

                // 外部参照の存在確認
                Assert.Empty(ev.FileRoot.OtherFiles);

                // 対象インスタンスのリストを取得
                var targetInstances = GetTargetInstances(itemClass);

                // 対象の親インスタンスを取得
                Assert.Equal(2, targetInstances.Count);
                var targetParentInstance = targetInstances.First() as IItemMethod;

                // 対象インスタンスを取得
                var targetInstance = GetTargetInstances(targetParentInstance).First() as IItemSwitch;

                // 分岐構造の確認
                checkSwitch(targetInstance, "this.GetValue()", 1);

                var caseLables = new List <string>()
                {
                    "1",
                };
                checkSwitchCase(targetInstance.Cases.First() as IItemSwitchCase, caseLables);
            });

            // 解析実行
            CSAnalyze.Analyze(string.Empty, Files);
        }
Пример #8
0
        public void NestSwitchTest()
        {
            // テストコードを追加
            CreateFileData(CreateSource(CreatePattern.NestSwitch), (ev) =>
            {
                // IItemClassインスタンスを取得
                var itemClass = GetClassInstance(ev, "NestSwitch.cs");

                // 外部参照の存在確認
                Assert.Empty(ev.FileRoot.OtherFiles);

                // 対象インスタンスのリストを取得
                var targetInstances = GetTargetInstances(itemClass);

                // 対象の親インスタンスを取得
                Assert.Single(targetInstances);
                var targetParentInstance = targetInstances.First() as IItemMethod;

                // 対象インスタンスを取得
                var targetInstance = GetTargetInstances(targetParentInstance).First() as IItemSwitch;

                // 分岐構造の確認
                checkSwitch(targetInstance, "val", 1);

                var caseLablesList = new List <List <string> >()
                {
                    new List <string>()
                    {
                        "int b"
                    },
                };
                var caseIndex = 0;
                foreach (IItemSwitchCase itemCase in targetInstance.Cases)
                {
                    checkSwitchCase(itemCase, caseLablesList[caseIndex++]);
                }

                // caseのメンバーの確認
                var caseBlockMembers = targetInstance.Cases.First().Members;
                Assert.Equal(2, caseBlockMembers.Count);

                // ネスト内の分岐構造の確認
                var innerSwitch = caseBlockMembers.First() as IItemSwitch;
                Assert.NotNull(innerSwitch);
                checkSwitch(innerSwitch, "b", 1);

                Assert.NotEmpty(innerSwitch.Cases);
                checkSwitchCase(innerSwitch.Cases.First() as IItemSwitchCase,
                                new List <string>()
                {
                    "1"
                });
            });

            // 解析実行
            CSAnalyze.Analyze(string.Empty, Files);
        }
Пример #9
0
        public void IndexerTest()
        {
            // テストコードを追加
            CreateFileData(CreateSource(CreatePattern.Indexer), (ev) =>
            {
                // IItemClassインスタンスを取得
                var itemClass = GetClassInstance(ev, "Indexer.cs");

                // 対象インスタンスのリストを取得
                var targetInstances = GetTargetInstances(itemClass);

                // 対象の親インスタンスを取得
                Assert.Single(targetInstances);
                var targetParentInstance = targetInstances.First() as IItemMethod;

                // 対象インスタンスを取得
                var targetInstance = GetTargetInstances(targetParentInstance).First() as IItemForEach;

                // 外部参照の存在確認
                var expectedClassName = new List <string> {
                    "Dictionary", "List"
                };
                foreach (var fileInfo in ev.FileRoot.OtherFiles)
                {
                    // クラス名が一致する場合は予想クラス名リストから対象クラス名を削除
                    if (expectedClassName.Contains(fileInfo.Key))
                    {
                        expectedClassName.Remove(fileInfo.Key);
                    }
                }
                // 予想クラス名リストがすべて削除されていることを確認
                Assert.Empty(expectedClassName);

                // ローカル部の型の確認
                Assert.Equal("string", GetExpressionsToString(targetInstance.LocalTypes));

                // ローカル部の確認
                Assert.Equal("value", GetExpressionsToString(targetInstance.Local));

                // コレクション部の型の確認
                Assert.Equal("List<string>", GetExpressionsToString(targetInstance.CollectionTypes));

                // コレクション部の確認
                Assert.Equal("values[0]", GetExpressionsToString(targetInstance.Collection));
            });

            // 解析実行
            CSAnalyze.Analyze(string.Empty, Files);
        }
Пример #10
0
        public void TypeCaseTest()
        {
            // テストコードを追加
            CreateFileData(CreateSource(CreatePattern.TypeCase), (ev) =>
            {
                // IItemClassインスタンスを取得
                var itemClass = GetClassInstance(ev, "TypeCase.cs");

                // 外部参照の存在確認
                Assert.Empty(ev.FileRoot.OtherFiles);

                // 対象インスタンスのリストを取得
                var targetInstances = GetTargetInstances(itemClass);

                // 対象の親インスタンスを取得
                Assert.Single(targetInstances);
                var targetParentInstance = targetInstances.First() as IItemMethod;

                // 対象インスタンスを取得
                var targetInstance = GetTargetInstances(targetParentInstance).First() as IItemSwitch;

                // 分岐構造の確認
                checkSwitch(targetInstance, "val", 3);

                var caseLablesList = new List <List <string> >()
                {
                    new List <string>()
                    {
                        "int b"
                    },
                    new List <string>()
                    {
                        "string b"
                    },
                    new List <string>()
                    {
                        "Standard.EnumTest e"
                    },
                };
                var caseIndex = 0;
                foreach (IItemSwitchCase itemCase in targetInstance.Cases)
                {
                    checkSwitchCase(itemCase, caseLablesList[caseIndex++]);
                }
            });

            // 解析実行
            CSAnalyze.Analyze(string.Empty, Files);
        }
Пример #11
0
        public void MultiDeclarationsTest()
        {
            // テストコードを追加
            CreateFileData(CreateSource(CreatePattern.MultiDeclarations), (ev) =>
            {
                // IItemClassインスタンスを取得
                var itemClass = GetClassInstance(ev, "MultiDeclarations.cs");

                // 対象インスタンスのリストを取得
                var targetInstances = GetTargetInstances(itemClass);

                // 対象の親インスタンスを取得
                Assert.Single(targetInstances);
                var targetParentInstance = targetInstances.First() as IItemMethod;

                // 対象インスタンスを取得
                var targetInstance = GetTargetInstances(targetParentInstance).First() as IItemFor;

                // 外部参照の存在確認
                Assert.Empty(ev.FileRoot.OtherFiles);

                // 宣言部の確認
                CheckDeclarationsCount(targetInstance, "int",
                                       new List <string>()
                {
                    "a=0",
                    "b=0",
                });

                // 条件の確認
                Assert.Equal("a<10", GetExpressionsToString(targetInstance.Conditions));

                // 計算部の確認
                CheckIncrementorsCount(targetInstance,
                                       new List <string>()
                {
                    "a++",
                    "b++",
                });
            });

            // 解析実行
            CSAnalyze.Analyze(string.Empty, Files);
        }
Пример #12
0
        public void ExistsManyElseTest()
        {
            // テストコードを追加
            CreateFileData(CreateSource(CreatePattern.ExistsManyElse), (ev) =>
            {
                // IItemClassインスタンスを取得
                var itemClass = GetClassInstance(ev, "ExistsManyElse.cs");

                // 外部参照の存在確認
                Assert.Empty(ev.FileRoot.OtherFiles);

                // 対象インスタンスのリストを取得
                var targetInstances = GetTargetInstances(itemClass);

                // 対象の親インスタンスを取得
                Assert.Single(targetInstances);
                var targetParentInstance = targetInstances.First() as IItemMethod;

                // 対象インスタンスを取得
                var targetInstance = GetTargetInstances(targetParentInstance).FirstOrDefault() as IItemIf;

                // 対象インスタンスの存在確認
                Assert.NotNull(targetInstance);

                // 分岐構造の確認
                checkIf(targetInstance, "true", 2);

                var elseConditions = new List <string>()
                {
                    "1==1",
                    "",
                };
                var elseConditionIndex = 0;
                foreach (var elseItem in targetInstance.FalseBlocks)
                {
                    checkElse(elseItem as IItemElseClause, elseConditions[elseConditionIndex]);
                    elseConditionIndex++;
                }
                Assert.True(targetInstance.FalseBlocks.Count == elseConditionIndex);
            });

            // 解析実行
            CSAnalyze.Analyze(string.Empty, Files);
        }
Пример #13
0
        public void InnerClassMethodTest()
        {
            // テストコードを追加
            CreateFileData(CreateSource(CreatePattern.InnerClassMethod), (ev) =>
            {
                // IItemClassインスタンスを取得
                var itemClass = GetClassInstance(ev, "InnerClassMethod.cs");

                // 対象インスタンスのリストを取得
                var targetInstances = GetTargetInstances(itemClass);

                // 対象の親インスタンスを取得
                Assert.Single(targetInstances);
                var targetParentInstance = targetInstances.First() as IItemMethod;

                // 対象インスタンスを取得
                var targetInstance = GetTargetInstances(targetParentInstance).First() as IItemFor;

                // 外部参照の存在確認
                Assert.Single(ev.FileRoot.OtherFiles);
                Assert.Equal("List", ev.FileRoot.OtherFiles.First().Key);

                // 宣言部の確認
                CheckDeclarationsCount(targetInstance, "int",
                                       new List <string>()
                {
                    "index=0",
                });

                // 条件の確認
                Assert.Equal("index<Standard.InnerClass.GetValues().Count", GetExpressionsToString(targetInstance.Conditions));

                // 計算部の確認
                CheckIncrementorsCount(targetInstance,
                                       new List <string>()
                {
                    "index++"
                });
            });

            // 解析実行
            CSAnalyze.Analyze(string.Empty, Files);
        }
Пример #14
0
        public void StandardArgsTest()
        {
            // テストコードを追加
            CreateFileData(CreateSource(CreatePattern.Standard), (ev) =>
            {
                // IItemClassインスタンスを取得
                var itemClass = GetClassInstance(ev, "Standard.cs");

                // 対象インスタンスのリストを取得
                var targetInstances = GetTargetInstances(itemClass);

                // 対象の親インスタンスを取得
                Assert.Single(targetInstances);
                var targetParentInstance = targetInstances.First() as IItemMethod;

                // 対象インスタンスを取得
                var targetInstance = GetTargetInstances(targetParentInstance).First() as IItemLocalFunction;

                //ジェネリックの確認
                var expectedGenericTypes = new List <string>();
                Assert.Equal(expectedGenericTypes, targetInstance.GenericTypes);

                // 型タイプの確認
                Assert.Equal("void", GetExpressionsToString(targetInstance.MethodTypes));

                // 外部参照の存在確認
                Assert.Empty(ev.FileRoot.OtherFiles);

                // パラメータの確認
                var expectedArgs = new List <(string name, string expressions, string refType, string defaultValue)>()
                {
                };
                Assert.Equal(expectedArgs.Count, GetMemberCount(targetInstance, expectedArgs));

                // 内部処理の確認
                Assert.Empty(targetInstance.Members);
            });

            // 解析実行
            CSAnalyze.Analyze(string.Empty, Files);
        }
Пример #15
0
        public void InnerClassMethodTest()
        {
            // テストコードを追加
            CreateFileData(CreateSource(CreatePattern.InnerClassMethod), (ev) =>
            {
                // IItemClassインスタンスを取得
                var itemClass = GetClassInstance(ev, "InnerClassMethod.cs");

                // 対象インスタンスのリストを取得
                var targetInstances = GetTargetInstances(itemClass);

                // 対象の親インスタンスを取得
                Assert.Equal(2, targetInstances.Count);
                var targetParentInstance = targetInstances.First() as IItemMethod;

                // 対象インスタンスを取得
                var targetInstance = GetTargetInstances(targetParentInstance).First() as IItemForEach;

                // 外部参照の存在確認
                Assert.Single(ev.FileRoot.OtherFiles);
                Assert.Equal("List", ev.FileRoot.OtherFiles.First().Key);

                // ローカル部の型の確認
                Assert.Equal("Standard.InnerClass", GetExpressionsToString(targetInstance.LocalTypes));

                // ローカル部の確認
                Assert.Equal("value", GetExpressionsToString(targetInstance.Local));

                // コレクション部の型の確認
                Assert.Equal("List<Standard.InnerClass>", GetExpressionsToString(targetInstance.CollectionTypes));

                // コレクション部の確認
                Assert.Equal("this.GetValues()", GetExpressionsToString(targetInstance.Collection));
            });

            // 解析実行
            CSAnalyze.Analyze(string.Empty, Files);
        }
Пример #16
0
        public void StandardTest()
        {
            // テストコードを追加
            CreateFileData(CreateSource(CreatePattern.Standard), (ev) =>
            {
                // IItemClassインスタンスを取得
                var itemClass = GetClassInstance(ev, "Standard.cs");

                // IItemConstructorsインスタンスのリストを取得
                var constructors = GetIItemConstructors(itemClass);

                // constructorインスタンスを取得
                Assert.Single(constructors);
                var constructor = constructors.First() as IItemConstructor;

                // 外部参照の存在確認
                Assert.Empty(ev.FileRoot.OtherFiles);

                // パラメータの確認
                var expectedModifiers = new List <string>()
                {
                    "public"
                };
                var expectedArgs = new List <(string name, string expressions, string refType, string defaultValue)>();
                // 期待値数と一致要素数の確認
                Assert.Equal(expectedArgs.Count, GetMemberCount(constructor, expectedModifiers, expectedArgs));
                // 実際の要素数との一致確認
                Assert.Equal(expectedArgs.Count, constructor.Args.Count);

                // スーパークラスのコンストラクタ呼び出し確認
                var expectedBaseArgs = new List <string>();
                Assert.Equal(expectedBaseArgs, constructor.BaseArgs);
            });

            // 解析実行
            CSAnalyze.Analyze(string.Empty, Files);
        }
Пример #17
0
        public void StandardTest()
        {
            // テストコードを追加
            CreateFileData(CreateSource(CreatePattern.Standard), (ev) =>
            {
                // IItemClassインスタンスを取得
                var itemClass = GetClassInstance(ev, "Standard.cs");

                // メンバー数確認
                Assert.Single(itemClass.Members);

                // 列挙型であることを確認
                Assert.IsAssignableFrom <IItemEnum>(itemClass.Members[0]);

                var itemEmun = itemClass.Members[0] as IItemEnum;

                // アクセス修飾子の確認
                var modifiers = new List <string>()
                {
                    "private"
                };
                Assert.Equal(modifiers, itemEmun.Modifiers);

                // 要素の確認
                var items = new Dictionary <string, string>()
                {
                    { "First", "0" },
                    { "Second", "1" },
                    { "Third", "2" },
                };
                Assert.Equal(items, itemEmun.Items);
            });

            // 解析実行
            CSAnalyze.Analyze(string.Empty, Files);
        }