public void ContarNosCalleeTest()
        {
            const string diretorioExecucao = "Require";
            var helper = new JavascriptHelper(Path.Combine(Environment.CurrentDirectory, diretorioExecucao), false, false);
            helper.ConfigurarGeracao();

            var scriptCode = File.ReadAllText(Path.Combine(Environment.CurrentDirectory, diretorioExecucao, "global.js"));
            var astMoment = helper.GerarAst(scriptCode);

            File.WriteAllText("astMoment.txt", helper.FormatarStringJson(astMoment));

            var nos = helper.ContarNosCallee(astMoment);

            Assert.AreEqual(592, nos.Count);
        }
        public void GerarAst()
        {
            const string diretorioExecucao = "Require";
            var scriptCode = File.ReadAllText(Path.Combine(Environment.CurrentDirectory, diretorioExecucao, "underscore.js"));
            var astUnderscore = File.ReadAllText(Path.Combine(Environment.CurrentDirectory, diretorioExecucao, "astUnderscore.txt"));

            var helper = new JavascriptHelper(Path.Combine(Environment.CurrentDirectory, diretorioExecucao), true, false);
            helper.ConfigurarGeracao();
            var ast = helper.GerarAst(scriptCode);

            File.WriteAllText("astUnderscoreNovo.txt", helper.FormatarStringJson(ast));

            Assert.AreEqual(astUnderscore, helper.FormatarStringJson(helper.JsonAst), "AST Inválida");
            Assert.AreEqual(ast, helper.JsonAst, "AST Inválida");
        }
        public void GerarCodigoDoMoment()
        {
            const string diretorioExecucao = "Require";
            var helper = new JavascriptHelper(Path.Combine(Environment.CurrentDirectory, diretorioExecucao), false, false);
            helper.ConfigurarGeracao();

            var scriptCode = File.ReadAllText(Path.Combine(Environment.CurrentDirectory, diretorioExecucao, "global.js"));
            var astMoment = helper.GerarAst(scriptCode);

            File.WriteAllText("astMoment.txt", helper.FormatarStringJson(astMoment));

            var codigo = helper.GerarCodigo(astMoment);

            File.WriteAllText("codigo.txt", scriptCode);
            File.WriteAllText("codigoNovo.txt", codigo);

            Assert.AreEqual(scriptCode, helper.Codigo, "Código Inválido");
        }
        public void ExecutarMutacaoExclusao()
        {
            var sw = new Stopwatch();
            sw.Start();

            var helper = new JavascriptHelper(Path.Combine(Environment.CurrentDirectory, "Require"), true, false);
            var scriptCode = File.ReadAllText(Path.Combine(Environment.CurrentDirectory, "Require", "global.js"));
            helper.ConfigurarGeracao();

            var ast = helper.GerarAst(scriptCode);

            int no = new Random().Next(0, helper.ContarNos(ast));

            var astNova = helper.ExecutarMutacaoExclusao(ast, no);

            sw.Stop();
            Console.WriteLine("ExecutarMutacaoExclusao {0}", sw.Elapsed.ToString(@"hh\:mm\:ss\.ffff"));

            Assert.AreNotEqual(ast, astNova);

            File.WriteAllText("astOriginal.txt", helper.FormatarStringJson(ast));
            File.WriteAllText("astMutada.txt", helper.FormatarStringJson(astNova));

            sw.Reset();
            sw.Start();

            //var codigo = helper.GerarCodigo(ast);
            var codigoNovo = helper.GerarCodigo(astNova);

            sw.Stop();
            Console.WriteLine("GerarCodigo {0}", sw.Elapsed.ToString(@"hh\:mm\:ss\.ffff"));

            Assert.AreNotEqual("", codigoNovo);
            Assert.AreNotEqual(scriptCode, codigoNovo);

            File.WriteAllText("codigo.txt", scriptCode);
            File.WriteAllText("codigoNovo.txt", codigoNovo);
        }