Esempio n. 1
0
 public ControlTestHelper(bool debug = true, Action <DotvvmConfiguration> config = null, Action <IServiceCollection> services = null)
 {
     fileLoader         = new FakeMarkupFileLoader(null);
     this.configuration = DotvvmTestHelper.CreateConfiguration(s => {
         s.AddSingleton <IMarkupFileLoader>(fileLoader);
         services?.Invoke(s);
     });
     this.configuration.Markup.AddCodeControls("tc", exampleControl: typeof(FakeHeadResourceLink));
     this.configuration.ApplicationPhysicalPath = Path.GetTempPath();
     this.configuration.Debug = debug;
     config?.Invoke(this.configuration);
     presenter = (DotvvmPresenter)this.configuration.ServiceProvider.GetRequiredService <IDotvvmPresenter>();
 }
Esempio n. 2
0
        public void ResourceManager_DependentResources()
        {
            var configuration = DotvvmTestHelper.CreateConfiguration();
            var manager       = new ResourceManager(configuration.Resources);

            manager.AddRequiredResource(ResourceConstants.DotvvmResourceName);
            var resourcesInCorrectOrder = manager.GetResourcesInOrder().ToList();

            Assert.AreEqual(configuration.Resources.FindResource(ResourceConstants.KnockoutJSResourceName), resourcesInCorrectOrder[0]);
            Assert.AreEqual(configuration.Resources.FindResource(ResourceConstants.PolyfillResourceName), resourcesInCorrectOrder[1]);
            Assert.AreEqual(configuration.Resources.FindResource(ResourceConstants.DotvvmResourceName + ".internal"), resourcesInCorrectOrder[2]);
            Assert.AreEqual(configuration.Resources.FindResource(ResourceConstants.DotvvmResourceName), resourcesInCorrectOrder[3]);
        }
Esempio n. 3
0
        public void ResourceManager_ConfigurationDeserialization()
        {
            //define
            var config1 = DotvvmTestHelper.CreateConfiguration();

            config1.Resources.Register("rs1", new ScriptResource(new FileResourceLocation("file.js")));
            config1.Resources.Register("rs2", new StylesheetResource(new UrlResourceLocation("http://c.c/")));
            config1.Resources.Register("rs3", new StylesheetResource(new EmbeddedResourceLocation(typeof(DotvvmConfiguration).GetTypeInfo().Assembly, "DotVVM.Framework.Resources.Scripts.knockout-latest.js", "../file.js")));
            config1.Resources.Register("rs4", new InlineScriptResource("CODE", ResourceRenderPosition.Head));
            config1.Resources.Register("rs5", new NullResource());
            config1.Resources.Register("rs6", new ScriptResource(
                                           new UrlResourceLocation("http://d.d/"))
            {
                LocationFallback = new ResourceLocationFallback("condition", new FileResourceLocation("file1.js"))
            });
            config1.Resources.Register("rs7", new PolyfillResource()
            {
                RenderPosition = ResourceRenderPosition.Head
            });
            config1.Resources.Register("rs8", new ScriptResource(new JQueryGlobalizeResourceLocation(CultureInfo.GetCultureInfo("en-US"))));

            // serialize & deserialize
            JsonSerializerSettings settings = new JsonSerializerSettings {
                TypeNameHandling = TypeNameHandling.Auto
            };
            var config2 = JsonConvert.DeserializeObject <DotvvmConfiguration>(JsonConvert.SerializeObject(config1, settings), settings);

            //test
            Assert.IsTrue(config2.Resources.FindResource("rs1") is ScriptResource rs1 &&
                          rs1.Location is FileResourceLocation rs1loc &&
                          rs1loc.FilePath == "file.js");
            Assert.IsTrue(config2.Resources.FindResource("rs2") is StylesheetResource rs2 &&
                          rs2.Location is UrlResourceLocation rs2loc &&
                          rs2loc.Url == "http://c.c/");
            Assert.IsTrue(config2.Resources.FindResource("rs3") is StylesheetResource rs3 &&
                          rs3.Location is EmbeddedResourceLocation rs3loc &&
                          rs3loc.Assembly.GetName().Name == "DotVVM.Framework" &&
                          rs3loc.Name == "DotVVM.Framework.Resources.Scripts.knockout-latest.js" &&
                          rs3loc.DebugFilePath == "../file.js");
            Assert.IsTrue(config2.Resources.FindResource("rs4") is InlineScriptResource rs4 &&
                          rs4.RenderPosition == ResourceRenderPosition.Head &&
                          rs4.Code == "CODE");
            Assert.IsTrue(config2.Resources.FindResource("rs5") is NullResource);
            Assert.IsTrue(config2.Resources.FindResource("rs6") is ScriptResource rs6 &&
                          rs6.Location is UrlResourceLocation rs6loc && rs6loc.Url == "http://d.d/" &&
                          rs6.LocationFallback.JavascriptCondition == "condition" &&
                          rs6.LocationFallback.AlternativeLocations.Single() is FileResourceLocation rs6loc2 &&
                          rs6loc2.FilePath == "file1.js");
            Assert.IsTrue(config2.Resources.FindResource("rs7") is PolyfillResource rs7 && rs7.RenderPosition == ResourceRenderPosition.Head);
            Assert.IsTrue(config2.Resources.FindResource("rs8") is ScriptResource rs8 && rs8.Location is JQueryGlobalizeResourceLocation rs8loc);
        }
Esempio n. 4
0
 public string CompileBinding(Func<Dictionary<string, Expression>, Expression> expr, Type[] contexts)
 {
     var context = DataContextStack.Create(contexts.FirstOrDefault() ?? typeof(object), extensionParameters: new BindingExtensionParameter[]{
         new BindingPageInfoExtensionParameter()
         });
     for (int i = 1; i < contexts.Length; i++)
     {
         context = DataContextStack.Create(contexts[i], context);
     }
     var expressionTree = expr(BindingExpressionBuilder.GetParameters(context).ToDictionary(e => e.Name, e => (Expression)e));
     var configuration = DotvvmTestHelper.CreateConfiguration();
     var jsExpression = new JsParenthesizedExpression(configuration.ServiceProvider.GetRequiredService<JavascriptTranslator>().CompileToJavascript(expressionTree, context));
     jsExpression.AcceptVisitor(new KnockoutObservableHandlingVisitor(true));
     JsTemporaryVariableResolver.ResolveVariables(jsExpression);
     return JavascriptTranslator.FormatKnockoutScript(jsExpression.Expression);
 }
Esempio n. 5
0
        public void ResourceManager_ConfigurationOldDeserialization()
        {
            var json          = string.Format(@"
{{ 
    'resources': {{
        'scripts': {{ '{0}': {{ 'url': 'different url', 'globalObjectName': '$'}} }},
        'stylesheets': {{ 'newResource': {{ 'url': 'test' }} }}
    }}
}}", ResourceConstants.GlobalizeResourceName);
            var configuration = DotvvmTestHelper.CreateConfiguration();

            JsonConvert.PopulateObject(json.Replace("'", "\""), configuration);

            Assert.IsTrue(configuration.Resources.FindResource(ResourceConstants.GlobalizeResourceName) is ScriptResource);
            Assert.IsTrue(configuration.Resources.FindResource("newResource") is StylesheetResource);
        }
Esempio n. 6
0
        public void PropertyPath_GetPropertyPath()
        {
            var viewModel = new SampleViewModel
            {
                Context = new TestDotvvmRequestContext
                {
                    Configuration = DotvvmTestHelper.CreateConfiguration(),
                    ModelState    = new ModelState()
                }
            };

            viewModel.Context.ModelState.ValidationTarget = viewModel;

            var error = viewModel.AddModelError(vm => vm.Users[0].Post.PostText, "Testing validation error.");

            Assert.AreEqual("Users()[0]().Post().PostText", error.PropertyPath);
        }
Esempio n. 7
0
        public void IntegrityCheck_ShouldSucceed()
        {
            //Arrange
            var configuration = DotvvmTestHelper.CreateConfiguration();

            configuration.Resources.Register("jquery", new ScriptResource {
                Location = new UrlResourceLocation(_jqueryUri), VerifyResourceIntegrity = true, IntegrityHash = _integrityHash
            });

            var jquery = configuration.Resources.FindResource("jquery") as ScriptResource;

            //Act
            string scriptTag = RenderResource(configuration, jquery);

            //Assert
            Assert.IsTrue(scriptTag.Contains("integrity"));
            Assert.IsTrue(scriptTag.Contains(_integrityHash));
        }
        public void RouteTable_Deserialization()
        {
            var config1 = DotvvmTestHelper.CreateConfiguration();
            config1.RouteTable.Add("route1", "url1", "file1.dothtml", new { a = "ccc" });
            config1.RouteTable.Add("route2", "url2/{int:posint}", "file1.dothtml", new { a = "ccc" });

            // Add unknwon constraint, simulate user defined constraint that is not known to the VS Extension
            var r = new DotvvmRoute("url3", "file1.dothtml", new { }, () => null, config1);
            typeof(RouteBase).GetProperty("Url").SetMethod.Invoke(r, new[] { "url3/{a:unsuppotedConstraint}" });
            config1.RouteTable.Add("route3", r);

            var settings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Auto };
            var config2 = JsonConvert.DeserializeObject<DotvvmConfiguration>(JsonConvert.SerializeObject(config1, settings), settings);

            Assert.AreEqual(config2.RouteTable["route1"].Url, "url1");
            Assert.AreEqual(config2.RouteTable["route2"].Url, "url2/{int:posint}");
            Assert.AreEqual(config2.RouteTable["route3"].Url, "url3/{a:unsuppotedConstraint}");
        }
        public string CompileBinding(string expression, Type[] contexts, Type expectedType)
        {
            var context = DataContextStack.Create(contexts.FirstOrDefault() ?? typeof(object), extensionParameters: new BindingExtensionParameter[] {
                new BindingPageInfoExtensionParameter()
            });

            for (int i = 1; i < contexts.Length; i++)
            {
                context = DataContextStack.Create(contexts[i], context);
            }
            var parser         = new BindingExpressionBuilder();
            var expressionTree = TypeConversion.ImplicitConversion(parser.Parse(expression, context, BindingParserOptions.Create <ValueBindingExpression>()), expectedType, true, true);
            var configuration  = DotvvmTestHelper.CreateConfiguration();
            var jsExpression   = new JsParenthesizedExpression(configuration.ServiceLocator.GetService <JavascriptTranslator>().CompileToJavascript(expressionTree, context));

            jsExpression.AcceptVisitor(new KnockoutObservableHandlingVisitor(true));
            JsTemporaryVariableResolver.ResolveVariables(jsExpression);
            return(JavascriptTranslator.FormatKnockoutScript(jsExpression.Expression));
        }
Esempio n. 10
0
        public void PropertyPath_GetPropertyPath()
        {
            var viewModel = new SampleViewModel
            {
                Context = new TestDotvvmRequestContext
                {
                    Configuration = DotvvmTestHelper.CreateConfiguration(),
                    ModelState    = new ModelState()
                }
            };

            var error = new ViewModelValidationError
            {
                ErrorMessage = "Testing validation error.",
                PropertyPath = PropertyPath.BuildPath <SampleViewModel>(vm => vm.Users[0].Post.PostText,
                                                                        viewModel.Context.Configuration)
            };

            viewModel.Context.ModelState.Errors.Add(error);

            Assert.AreEqual("Users()[0].Post().PostText", error.PropertyPath);
        }
Esempio n. 11
0
 public void TestInit()
 {
     configuration = DotvvmTestHelper.CreateConfiguration();
     configuration.Markup.AddCodeControls("cc", typeof(ClassWithInnerElementProperty));
 }
Esempio n. 12
0
 private IViewModelValidator CreateValidator() => DotvvmTestHelper.CreateConfiguration().ServiceLocator.GetService <IViewModelValidator>();
 public virtual void Initialize()
 {
     Configuration  = DotvvmTestHelper.CreateConfiguration();
     BindingService = Configuration.ServiceProvider.GetRequiredService <BindingCompilationService>();
 }
Esempio n. 14
0
 public void INIT()
 {
     this.configuration  = DotvvmTestHelper.CreateConfiguration();
     this.bindingService = configuration.ServiceProvider.GetRequiredService <BindingCompilationService>();
 }
Esempio n. 15
0
 private IViewModelValidator CreateValidator() => DotvvmTestHelper.CreateConfiguration().ServiceProvider.GetRequiredService <IViewModelValidator>();
Esempio n. 16
0
 public void TestInit()
 {
     configuration = DotvvmTestHelper.CreateConfiguration();
     configuration.Markup.AddCodeControls("cc", typeof(ClassWithInnerElementProperty));
     controlTreeResolver = configuration.ServiceProvider.GetRequiredService <IControlTreeResolver>();
 }
Esempio n. 17
0
 public void INIT()
 {
     this.configuration  = DotvvmTestHelper.CreateConfiguration();
     this.bindingService = configuration.ServiceLocator.GetService <BindingCompilationService>();
 }
 public void INIT()
 {
     this.configuration = DotvvmTestHelper.CreateConfiguration();
     configuration.RegisterApiClient(typeof(TestApiClient), "http://server/api", "./apiscript.js", "_testApi");
     this.bindingService = configuration.ServiceProvider.GetRequiredService <BindingCompilationService>();
 }
Esempio n. 19
0
 private DotvvmConfiguration ApplyPatches(params JObject[] patches) => ApplyPatches(DotvvmTestHelper.CreateConfiguration(), patches);