diff --git a/src/AddIns/BackendBindings/VBNetBinding/Test/CodeCompletionTests.cs b/src/AddIns/BackendBindings/VBNetBinding/Test/CodeCompletionTests.cs index 97bc88d0b6..a16f27a629 100644 --- a/src/AddIns/BackendBindings/VBNetBinding/Test/CodeCompletionTests.cs +++ b/src/AddIns/BackendBindings/VBNetBinding/Test/CodeCompletionTests.cs @@ -119,5 +119,21 @@ End Module"; TestCtrlSpace(text, true, list => Assert.IsFalse(list.Items.Any(i => i.Text == "InnerException"))); } + + [Test] + public void TestLocalVariablesAvailableAtEndOfForLoop() + { + string text = @"Module Test + Public Sub f() + Dim cheeses = { ""cheddar"", ""brie"", ""edam"" } + For Each cheese As String In cheeses + Dim gouda = ""is tasty"" + | + Next + End Sub +End Module"; + + TestKeyPress(text, 'g', CodeCompletionKeyPressResult.CompletedIncludeKeyInCompletion, list => Assert.IsTrue(list.Items.Any(i => i.Text == "gouda"))); + } } } diff --git a/src/AddIns/DisplayBindings/Data/ICSharpCode.Data.Core.UI/Windows/ConnectionWizardWindow.xaml b/src/AddIns/DisplayBindings/Data/ICSharpCode.Data.Core.UI/Windows/ConnectionWizardWindow.xaml index 28d9173495..c88f6c4bdf 100644 --- a/src/AddIns/DisplayBindings/Data/ICSharpCode.Data.Core.UI/Windows/ConnectionWizardWindow.xaml +++ b/src/AddIns/DisplayBindings/Data/ICSharpCode.Data.Core.UI/Windows/ConnectionWizardWindow.xaml @@ -84,7 +84,7 @@ Database: + ItemsSource="{Binding SelectedDatasource.Databases, ElementName=This}"> diff --git a/src/AddIns/DisplayBindings/Data/ICSharpCode.Data.Core.UI/Windows/ConnectionWizardWindow.xaml.cs b/src/AddIns/DisplayBindings/Data/ICSharpCode.Data.Core.UI/Windows/ConnectionWizardWindow.xaml.cs index 334708f3c2..e214369b8e 100644 --- a/src/AddIns/DisplayBindings/Data/ICSharpCode.Data.Core.UI/Windows/ConnectionWizardWindow.xaml.cs +++ b/src/AddIns/DisplayBindings/Data/ICSharpCode.Data.Core.UI/Windows/ConnectionWizardWindow.xaml.cs @@ -92,6 +92,7 @@ namespace ICSharpCode.Data.Core.UI.Windows set { _selectedDatabase = value; + btnAdd.IsEnabled = (_selectedDatabase != null); OnPropertyChanged("SelectedDatabase"); } } @@ -212,11 +213,6 @@ namespace ICSharpCode.Data.Core.UI.Windows } } - private void cboDatabases_SelectionChanged(object sender, SelectionChangedEventArgs e) - { - btnAdd.IsEnabled = true; - } - private void btnAdd_Click(object sender, RoutedEventArgs e) { if (_addAction == null) diff --git a/src/AddIns/DisplayBindings/Data/ICSharpCode.Data.EDMDesigner.Core.UI/DisplayBinding/EDMDesignerViewContent.cs b/src/AddIns/DisplayBindings/Data/ICSharpCode.Data.EDMDesigner.Core.UI/DisplayBinding/EDMDesignerViewContent.cs index b4a511815b..7068621414 100644 --- a/src/AddIns/DisplayBindings/Data/ICSharpCode.Data.EDMDesigner.Core.UI/DisplayBinding/EDMDesignerViewContent.cs +++ b/src/AddIns/DisplayBindings/Data/ICSharpCode.Data.EDMDesigner.Core.UI/DisplayBinding/EDMDesignerViewContent.cs @@ -1,9 +1,8 @@ // Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) // This code is distributed under the GNU LGPL (for details please see \doc\license.txt) -#region Usings - using System; +using System.Collections.ObjectModel; using System.Diagnostics; using System.IO; using System.Linq; @@ -11,8 +10,11 @@ using System.Windows; using System.Windows.Controls; using System.Xml.Linq; +using ICSharpCode.Data.EDMDesigner.Core.EDMObjects.Common; using ICSharpCode.Data.EDMDesigner.Core.EDMObjects.Designer; using ICSharpCode.Data.EDMDesigner.Core.EDMObjects.Designer.ChangeWatcher; +using ICSharpCode.Data.EDMDesigner.Core.EDMObjects.Designer.CSDL; +using ICSharpCode.Data.EDMDesigner.Core.EDMObjects.Designer.CSDL.Property; using ICSharpCode.Data.EDMDesigner.Core.EDMObjects.Designer.CSDL.Type; using ICSharpCode.Data.EDMDesigner.Core.IO; using ICSharpCode.Data.EDMDesigner.Core.UI.UserControls; @@ -22,29 +24,22 @@ using ICSharpCode.SharpDevelop.Gui; using ICSharpCode.SharpDevelop.Project; using ICSharpCode.SharpDevelop.Workbench; -#endregion - namespace ICSharpCode.Data.EDMDesigner.Core.UI.DisplayBinding { public class EDMDesignerViewContent : AbstractViewContent, IHasPropertyContainer, IToolsHost, IEDMDesignerChangeWatcherObserver { - #region Fields - - private ScrollViewer _scrollViewer = new ScrollViewer() { HorizontalScrollBarVisibility = ScrollBarVisibility.Auto, VerticalScrollBarVisibility = ScrollBarVisibility.Auto }; + private ScrollViewer _scrollViewer = new ScrollViewer() { + HorizontalScrollBarVisibility = ScrollBarVisibility.Auto, + VerticalScrollBarVisibility = ScrollBarVisibility.Auto + }; private DesignerCanvas _designerCanvas = null; private PropertyContainer _propertyContainer = new PropertyContainer(); private EDMView _edmView = null; private object _selection = null; - #endregion - - #region Properties - - public object Selection - { + public object Selection { get { return _selection; } - set - { + set { if (_selection == null) _propertyContainer.Clear(); else @@ -54,30 +49,22 @@ namespace ICSharpCode.Data.EDMDesigner.Core.UI.DisplayBinding } } - public Window Window - { + public Window Window { get { return Application.Current.MainWindow; } } - public EDMView EDMView - { + public EDMView EDMView { get { return _edmView; } } - public override object Control - { + public override object Control { get { return _scrollViewer; } } - public DesignerCanvas DesignerCanvas - { + public DesignerCanvas DesignerCanvas { get { return _designerCanvas; } } - - #endregion - - #region Constructor - + public EDMDesignerViewContent(OpenedFile primaryFile) : base(primaryFile) { @@ -89,10 +76,6 @@ namespace ICSharpCode.Data.EDMDesigner.Core.UI.DisplayBinding EDMDesignerChangeWatcher.AddEDMDesignerViewContent(this); } - #endregion - - #region Methods - public override void Load(OpenedFile file, Stream stream) { Debug.Assert(file == this.PrimaryFile); @@ -105,17 +88,13 @@ namespace ICSharpCode.Data.EDMDesigner.Core.UI.DisplayBinding _edmView = new EDMView(stream, readMoreAction); // If EDMX is empty run EDM Wizard - if (_edmView.EDM.IsEmpty) - { + if (_edmView.EDM.IsEmpty) { edmxElement = null; string ns = String.Empty; - if (ProjectService.CurrentProject == null) - { + if (ProjectService.CurrentProject == null) { ns = ICSharpCode.Core.MessageService.ShowInputBox("EDMDesigner","Enter NameSpace","DefaultNamespace"); - } - else - { + } else { ns = ProjectService.CurrentProject.RootNamespace; } @@ -132,8 +111,7 @@ namespace ICSharpCode.Data.EDMDesigner.Core.UI.DisplayBinding XElement designerViewsElement = null; - if (edmxElement == null || (designerViewsElement = EDMXIO.ReadSection(edmxElement, EDMXIO.EDMXSection.DesignerViews)) == null) - { + if (edmxElement == null || (designerViewsElement = EDMXIO.ReadSection(edmxElement, EDMXIO.EDMXSection.DesignerViews)) == null) { designerViewsElement = DesignerIO.GenerateNewDesignerViewsFromCSDLView(_edmView); } @@ -147,11 +125,15 @@ namespace ICSharpCode.Data.EDMDesigner.Core.UI.DisplayBinding _scrollViewer.Content = _designerCanvas; // Register CSDL of EDMX in CSDL DatabaseTreeView - CSDLDatabaseTreeViewAdditionalNode.Instance.CSDLViews.Add(_edmView.CSDL); + CSDLViews.Add(_edmView.CSDL); EDMDesignerChangeWatcher.Init = false; } + ObservableCollection CSDLViews { + get { return CSDLDatabaseTreeViewAdditionalNode.Instance.CSDLViews; } + } + public override void Save(OpenedFile file, Stream stream) { EDMXIO.WriteXDocument(_edmView).Save(stream); @@ -159,7 +141,7 @@ namespace ICSharpCode.Data.EDMDesigner.Core.UI.DisplayBinding private EDMWizardWindow RunWizard(OpenedFile file, string projectStandardNamespace) { - EDMWizardWindow wizard = new EDMWizardWindow(file, projectStandardNamespace); + var wizard = new EDMWizardWindow(file, projectStandardNamespace); wizard.Owner = Application.Current.MainWindow; wizard.WindowStartupLocation = WindowStartupLocation.CenterOwner; wizard.ShowDialog(); @@ -169,21 +151,20 @@ namespace ICSharpCode.Data.EDMDesigner.Core.UI.DisplayBinding public override void Dispose() { - if (CSDLDatabaseTreeViewAdditionalNode.Instance.CSDLViews.Contains(_edmView.CSDL)) - CSDLDatabaseTreeViewAdditionalNode.Instance.CSDLViews.Remove(_edmView.CSDL); + if (_edmView != null) { + CSDLViews.Remove(_edmView.CSDL); + } EDMDesignerChangeWatcher.RemoveEDMDesignerViewContent(this); } public void ShowMappingTab(IUIType uiType) - { } - - #endregion + { + } #region IHasPropertyContainer - public PropertyContainer PropertyContainer - { + public PropertyContainer PropertyContainer { get { return _propertyContainer; } } @@ -191,8 +172,7 @@ namespace ICSharpCode.Data.EDMDesigner.Core.UI.DisplayBinding #region IToolsHost - object IToolsHost.ToolsContent - { + object IToolsHost.ToolsContent { get { return null; } } @@ -202,18 +182,14 @@ namespace ICSharpCode.Data.EDMDesigner.Core.UI.DisplayBinding public bool ObjectChanged(object changedObject) { - foreach (DesignerView designerView in _edmView.DesignerViews) - { - foreach (ITypeDesigner uiType in designerView) - { - if (uiType == changedObject || uiType.UIType.BusinessInstance == changedObject) - { + foreach (DesignerView designerView in _edmView.DesignerViews) { + foreach (ITypeDesigner uiType in designerView) { + if (uiType == changedObject || uiType.UIType.BusinessInstance == changedObject) { PrimaryFile.IsDirty = true; return true; } } } - return false; } diff --git a/src/AddIns/DisplayBindings/Data/ICSharpCode.Data.EDMDesigner.Core/IO/MSLIO.cs b/src/AddIns/DisplayBindings/Data/ICSharpCode.Data.EDMDesigner.Core/IO/MSLIO.cs index eacb020c92..7704bb2d9d 100644 --- a/src/AddIns/DisplayBindings/Data/ICSharpCode.Data.EDMDesigner.Core/IO/MSLIO.cs +++ b/src/AddIns/DisplayBindings/Data/ICSharpCode.Data.EDMDesigner.Core/IO/MSLIO.cs @@ -25,10 +25,6 @@ namespace ICSharpCode.Data.EDMDesigner.Core.IO { public class MSLIO : IO { - #region Methods - - #region Read - public static XDocument GenerateTypeMapping(XDocument mslDocument) { XElement mappingElement = mslDocument.Element(XName.Get("Mapping", mslNamespace.NamespaceName)); @@ -41,8 +37,10 @@ namespace ICSharpCode.Data.EDMDesigner.Core.IO if (entityContainerMappingElement == null || entityContainerMappingElement.IsEmpty) return null; - foreach (XElement entitySetMapping in entityContainerMappingElement.Elements(mslNamespace + "EntitySetMapping")) - { + foreach (XElement entitySetMapping in entityContainerMappingElement.Elements(mslNamespace + "EntitySetMapping")) { + if (entitySetMapping.HasEntityTypeMappingChildElement()) + continue; + string name = entitySetMapping.Attribute("Name").Value; string storeEntitySet = entitySetMapping.Attribute("StoreEntitySet").Value; string typeName = entitySetMapping.Attribute("TypeName").Value; @@ -61,7 +59,7 @@ namespace ICSharpCode.Data.EDMDesigner.Core.IO return mslDocument; } - + public static CSDLContainer IntegrateMSLInCSDLContainer(CSDLContainer csdlContainer, SSDLContainer ssdlContainer, XElement edmxRuntime) { XElement mappingsElement = edmxRuntime.Element(XName.Get("Mappings", edmxNamespace.NamespaceName)); @@ -263,10 +261,6 @@ namespace ICSharpCode.Data.EDMDesigner.Core.IO } } - #endregion - - #region Write - public static XElement Write(EDM edm) { CSDLContainer csdlContainer = edm.CSDLContainer; @@ -533,10 +527,6 @@ namespace ICSharpCode.Data.EDMDesigner.Core.IO new XAttribute("ColumnName", result.Value)); } } - - #endregion - - #endregion } #region Extension methods @@ -560,6 +550,11 @@ namespace ICSharpCode.Data.EDMDesigner.Core.IO return element; } + + public static bool HasEntityTypeMappingChildElement(this XElement entitySetMapping) + { + return entitySetMapping.Elements().Any(e => e.Name.LocalName == "EntityTypeMapping"); + } } #endregion diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/ModelTools.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/ModelTools.cs index 88676aaa4b..ace1ad51eb 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/ModelTools.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/ModelTools.cs @@ -37,6 +37,7 @@ namespace ICSharpCode.WpfDesign.Designer return 0; } } + tmp = tmp.Parent; } return 0; } diff --git a/src/AddIns/DisplayBindings/XmlEditor/Project/Src/XmlSchemaCompletion.cs b/src/AddIns/DisplayBindings/XmlEditor/Project/Src/XmlSchemaCompletion.cs index 63906827bb..4ac0f68b85 100644 --- a/src/AddIns/DisplayBindings/XmlEditor/Project/Src/XmlSchemaCompletion.cs +++ b/src/AddIns/DisplayBindings/XmlEditor/Project/Src/XmlSchemaCompletion.cs @@ -335,11 +335,25 @@ namespace ICSharpCode.XmlEditor { XmlSchemaComplexType complexType = element.SchemaType as XmlSchemaComplexType; if (complexType == null) { - complexType = FindNamedType(schema, element.SchemaTypeName); + if (element.SchemaTypeName.IsEmpty) { + return GetComplexTypeFromSubstitutionGroup(element); + } + return FindNamedType(schema, element.SchemaTypeName); } return complexType; } + XmlSchemaComplexType GetComplexTypeFromSubstitutionGroup(XmlSchemaElement element) + { + if (!element.SubstitutionGroup.IsEmpty) { + XmlSchemaElement substitutedElement = FindElement(element.SubstitutionGroup); + if (substitutedElement != null) { + return GetElementAsComplexType(substitutedElement); + } + } + return null; + } + /// /// Handler for schema validation errors. /// diff --git a/src/AddIns/DisplayBindings/XmlEditor/Test/Resources/xslt.xsd b/src/AddIns/DisplayBindings/XmlEditor/Test/Resources/xslt.xsd new file mode 100644 index 0000000000..2b71d914c5 --- /dev/null +++ b/src/AddIns/DisplayBindings/XmlEditor/Test/Resources/xslt.xsd @@ -0,0 +1,1134 @@ + + + + + + + + This is a schema for XSLT 2.0 stylesheets. + + It defines all the elements that appear in the XSLT namespace; it also + provides hooks that allow the inclusion of user-defined literal result elements, + extension instructions, and top-level data elements. + + The schema is derived (with kind permission) from a schema for XSLT 1.0 stylesheets + produced by Asir S Vedamuthu of WebMethods Inc. + + This schema is available for use under the conditions of the W3C Software License + published at http://www.w3.org/Consortium/Legal/copyright-software-19980720 + + The schema is organized as follows: + + PART A: definitions of complex types and model groups used as the basis + for element definitions + PART B: definitions of individual XSLT elements + PART C: definitions for literal result elements + PART D: definitions of simple types used in attribute definitions + + This schema does not attempt to define all the constraints that apply to a valid + XSLT 2.0 stylesheet module. It is the intention that all valid stylesheet modules + should conform to this schema; however, the schema is non-normative and in the event + of any conflict, the text of the Recommendation takes precedence. + + This schema does not implement the special rules that apply when a stylesheet + has sections that use forwards-compatible-mode. In this mode, setting version="3.0" + allows elements from the XSLT namespace to be used that are not defined in XSLT 2.0. + + Simplified stylesheets (those with a literal result element as the outermost element) + will validate against this schema only if validation starts in lax mode. + + This version is dated 2007-03-16 + Authors: Michael H Kay, Saxonica Limited + Jeni Tennison, Jeni Tennison Consulting Ltd. + + 2007-03-15: added xsl:document element + revised xsl:sequence element + see http://www.w3.org/Bugs/Public/show_bug.cgi?id=4237 + + + + + + + + + + + + + + + + + PART A: definitions of complex types and model groups used as the basis + for element definitions + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PART B: definitions of individual XSLT elements + Elements are listed in alphabetical order. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PART C: definition of literal result elements + + There are three ways to define the literal result elements + permissible in a stylesheet. + + (a) do nothing. This allows any element to be used as a literal + result element, provided it is not in the XSLT namespace + + (b) declare all permitted literal result elements as members + of the xsl:literal-result-element substitution group + + (c) redefine the model group xsl:result-elements to accommodate + all permitted literal result elements. + + Literal result elements are allowed to take certain attributes + in the XSLT namespace. These are defined in the attribute group + literal-result-element-attributes, which can be included in the + definition of any literal result element. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PART D: definitions of simple types used in stylesheet attributes + + + + + + + + This type is used for all attributes that allow an attribute value template. + The general rules for the syntax of attribute value templates, and the specific + rules for each such attribute, are described in the XSLT 2.0 Recommendation. + + + + + + + + + A string containing exactly one character. + + + + + + + + + + + An XPath 2.0 expression. + + + + + + + + + + + Describes how type annotations in source documents are handled. + + + + + + + + + + + + + The level attribute of xsl:number: + one of single, multiple, or any. + + + + + + + + + + + + + The mode attribute of xsl:apply-templates: + either a QName, or #current, or #default. + + + + + + + + + + + + + + + + The mode attribute of xsl:template: + either a list, each member being either a QName or #default; + or the value #all + + + + + + + + + + + + + + + + + + + + + + + + + + + + A list of NameTests, as defined in the XPath 2.0 Recommendation. + Each NameTest is either a QName, or "*", or "prefix:*", or "*:localname" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The method attribute of xsl:output: + Either one of the recognized names "xml", "xhtml", "html", "text", + or a QName that must include a prefix. + + + + + + + + + + + + + + + + + + + + + + + A match pattern as defined in the XSLT 2.0 Recommendation. + The syntax for patterns is a restricted form of the syntax for + XPath 2.0 expressions. + + + + + + + + + Either a namespace prefix, or #default. + Used in the xsl:namespace-alias element. + + + + + + + + + + + + + + + A list of QNames. + Used in the [xsl:]use-attribute-sets attribute of various elements, + and in the cdata-section-elements attribute of xsl:output + + + + + + + + + A QName. + This schema does not use the built-in type xs:QName, but rather defines its own + QName type. Although xs:QName would define the correct validation on these attributes, + a schema processor would expand unprefixed QNames incorrectly when constructing the PSVI, + because (as defined in XML Schema errata) an unprefixed xs:QName is assumed to be in + the default namespace, which is not the correct assumption for XSLT. + The data type is defined as a restriction of the built-in type Name, restricted + so that it can only contain one colon which must not be the first or last character. + + + + + + + + + + + The description of a data type, conforming to the + SequenceType production defined in the XPath 2.0 Recommendation + + + + + + + + + + + + + + + Describes different ways of type-annotating an element or attribute. + + + + + + + + + + + + Describes different ways of type-annotating an element or attribute. + + + + + + + + + + + + + + One of the values "yes" or "no". + + + + + + + + + + + + One of the values "yes" or "no" or "omit". + + + + + + + + + + \ No newline at end of file diff --git a/src/AddIns/DisplayBindings/XmlEditor/Test/Schema/SubstitutionGroupTests.cs b/src/AddIns/DisplayBindings/XmlEditor/Test/Schema/SubstitutionGroupTests.cs new file mode 100644 index 0000000000..586ab3de4a --- /dev/null +++ b/src/AddIns/DisplayBindings/XmlEditor/Test/Schema/SubstitutionGroupTests.cs @@ -0,0 +1,38 @@ +// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) +// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) + +using System; +using ICSharpCode.XmlEditor; +using NUnit.Framework; + +namespace XmlEditor.Tests.Schema +{ + [TestFixture] + public class SubstitutionGroupTests : SchemaTestFixtureBase + { + string namespaceURI = "http://www.w3.org/1999/XSL/Transform"; + + protected override string GetSchema() + { + return + "\r\n" + + " \r\n" + + ""; + } + + [Test] + public void GetChildElementCompletion_ParentElementIsSubstitutionGroupButNoCorrespondingElementInSchema_NullReferenceExceptionIsNotThrown() + { + var path = new XmlElementPath(); + path.AddElement(new QualifiedName("stylesheet", namespaceURI)); + + XmlCompletionItemCollection items = SchemaCompletion.GetChildElementCompletion(path); + + Assert.AreEqual(0, items.Count); + } + } +} diff --git a/src/AddIns/DisplayBindings/XmlEditor/Test/Schema/XsltSchemaTests.cs b/src/AddIns/DisplayBindings/XmlEditor/Test/Schema/XsltSchemaTests.cs new file mode 100644 index 0000000000..7b47dda446 --- /dev/null +++ b/src/AddIns/DisplayBindings/XmlEditor/Test/Schema/XsltSchemaTests.cs @@ -0,0 +1,48 @@ +// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) +// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) + +using System; +using ICSharpCode.XmlEditor; +using NUnit.Framework; +using XmlEditor.Tests.Utils; + +namespace XmlEditor.Tests.Schema +{ + [TestFixture] + public class XsltSchemaTests + { + string namespaceURI = "http://www.w3.org/1999/XSL/Transform"; + XmlSchemaCompletion schemaCompletion; + + [TestFixtureSetUp] + public void SetUp() + { + schemaCompletion = new XmlSchemaCompletion(ResourceManager.ReadXsltSchema()); + } + + [Test] + public void GetChildElementCompletion_StylesheetElement_SubstitutionGroupUsedForTemplateAndTemplateElementReturned() + { + var path = new XmlElementPath(); + path.AddElement(new QualifiedName("stylesheet", namespaceURI)); + + XmlCompletionItemCollection completionItems = schemaCompletion.GetChildElementCompletion(path); + bool contains = completionItems.Contains("template"); + + Assert.IsTrue(contains); + } + + [Test] + public void GetAttributeCompletion_TemplateElementIsChildOfStylesheetElement_SubstitutionGroupUsedForTemplateAndMatchAttributeReturned() + { + var path = new XmlElementPath(); + path.AddElement(new QualifiedName("stylesheet", namespaceURI)); + path.AddElement(new QualifiedName("template", namespaceURI)); + + XmlCompletionItemCollection completionItems = schemaCompletion.GetAttributeCompletion(path); + bool contains = completionItems.Contains("match"); + + Assert.IsTrue(contains); + } + } +} diff --git a/src/AddIns/DisplayBindings/XmlEditor/Test/Utils/ResourceManager.cs b/src/AddIns/DisplayBindings/XmlEditor/Test/Utils/ResourceManager.cs index 6df5d1d277..39bb1ef7ff 100644 --- a/src/AddIns/DisplayBindings/XmlEditor/Test/Utils/ResourceManager.cs +++ b/src/AddIns/DisplayBindings/XmlEditor/Test/Utils/ResourceManager.cs @@ -35,6 +35,14 @@ namespace XmlEditor.Tests.Utils return manager.ReadXml("XMLSchema.xsd"); } + /// + /// Reads the XSL Transforms schema. + /// + public static StreamReader ReadXsltSchema() + { + return manager.ReadXml("xslt.xsd"); + } + /// /// Returns the xml read from the specified file which is embedded /// in this assembly as a resource. diff --git a/src/AddIns/DisplayBindings/XmlEditor/Test/XmlEditor.Tests.csproj b/src/AddIns/DisplayBindings/XmlEditor/Test/XmlEditor.Tests.csproj index 111417191b..ad1a166920 100644 --- a/src/AddIns/DisplayBindings/XmlEditor/Test/XmlEditor.Tests.csproj +++ b/src/AddIns/DisplayBindings/XmlEditor/Test/XmlEditor.Tests.csproj @@ -172,6 +172,8 @@ + + @@ -378,5 +380,8 @@ + + + \ No newline at end of file diff --git a/src/AddIns/Misc/PackageManagement/RequiredLibraries/NuGet.Console.Types.dll b/src/AddIns/Misc/PackageManagement/RequiredLibraries/NuGet.Console.Types.dll index ce3a40d220..aa48faeffb 100644 Binary files a/src/AddIns/Misc/PackageManagement/RequiredLibraries/NuGet.Console.Types.dll and b/src/AddIns/Misc/PackageManagement/RequiredLibraries/NuGet.Console.Types.dll differ diff --git a/src/AddIns/Misc/PackageManagement/RequiredLibraries/NuGet.Core.dll b/src/AddIns/Misc/PackageManagement/RequiredLibraries/NuGet.Core.dll index 5d18cfd5b3..d3f6d3aaa2 100644 Binary files a/src/AddIns/Misc/PackageManagement/RequiredLibraries/NuGet.Core.dll and b/src/AddIns/Misc/PackageManagement/RequiredLibraries/NuGet.Core.dll differ diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/Dialogs/FormatStringConverte.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/Dialogs/FormatStringConverte.cs index c89c34815b..3371fca99d 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/Dialogs/FormatStringConverte.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/Dialogs/FormatStringConverte.cs @@ -38,10 +38,7 @@ namespace ICSharpCode.Reports.Addin.Dialogs public override TypeConverter.StandardValuesCollection GetStandardValues(ITypeDescriptorContext context) { -// return new StandardValuesCollection( -// new string[] { "entry1", "entry2", "entry3" }); return new StandardValuesCollection(GlobalLists.Formats()); - } } diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/ICSharpCode.Reports.Core.csproj b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/ICSharpCode.Reports.Core.csproj index f48e252e50..9985834ef6 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/ICSharpCode.Reports.Core.csproj +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/ICSharpCode.Reports.Core.csproj @@ -176,6 +176,7 @@ + diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/StandardFormatter.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/StandardFormatter.cs index 98f9865cca..120e319376 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/StandardFormatter.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/StandardFormatter.cs @@ -18,30 +18,27 @@ namespace ICSharpCode.Reports.Core.BaseClasses.Printing internal static class StandardFormatter { - public static string FormatOutput(string valueToFormat,string format, string dataType, string nullValue ) { + if (String.IsNullOrEmpty(format)) { + return valueToFormat; + } + + if (String.IsNullOrEmpty(valueToFormat)) { + return nullValue; + } + TypeCode typeCode = TypeHelpers.TypeCodeFromString(dataType); - return StandardFormatter.FormatItem(valueToFormat,format, - typeCode,nullValue); + return FormatItem(valueToFormat,format,typeCode,nullValue); } - public static string FormatItem (string valueToFormat,string format, + private static string FormatItem (string valueToFormat,string format, TypeCode typeCode,string nullValue) { string retValue = String.Empty; - if (String.IsNullOrEmpty(format)) { - retValue = valueToFormat; - return retValue; - } - - if (String.IsNullOrEmpty(valueToFormat)) { - return nullValue; - } - switch (typeCode) { case TypeCode.Int16: case TypeCode.Int32: @@ -124,24 +121,30 @@ namespace ICSharpCode.Reports.Core.BaseClasses.Printing return str; } +// http://stackoverflow.com/questions/4710455/i-need-code-to-validate-any-time-in-c-sharp-in-hhmmss-format private static string FormatDate(string toFormat, string format) { - try { - DateTime date = DateTime.Parse (toFormat.Trim(), - CultureInfo.CurrentCulture.DateTimeFormat); + DateTime date; + if (DateTime.TryParse(toFormat, out date)) + { string str = date.ToString(format, DateTimeFormatInfo.CurrentInfo); - return str.Trim(); - } catch (System.FormatException ) { -// string s = String.Format("< {0} > {1}",toFormat,e.Message); -// System.Console.WriteLine("\t\tDateValue {0}",s); } - - return toFormat.Trim(); + + TimeSpan time; + bool valid = TimeSpan.TryParseExact(toFormat, + "g", + CultureInfo.CurrentCulture, + out time); + if (valid) { + return time.ToString("g"); + } + return toFormat; } + private static bool CheckValue (string toFormat) { if (String.IsNullOrEmpty(toFormat)) { diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/TypeHelpers.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/TypeHelpers.cs index a1c67a2cc9..4327a5cd43 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/TypeHelpers.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/TypeHelpers.cs @@ -67,6 +67,9 @@ namespace ICSharpCode.Reports.Core.Project.BaseClasses if (String.IsNullOrEmpty(type)) { throw new ArgumentNullException("type"); } +// var x = Type.GetType(type,false,true); +// var s = Type.GetTypeCode( Type.GetType(type)); +// Console.WriteLine ("typeCode for {0} - {1}",type,s); return Type.GetTypeCode( Type.GetType(type)); } } diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Expressions/SimpleExpressionEvaluator/Compilation/Functions/DateAdd.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Expressions/SimpleExpressionEvaluator/Compilation/Functions/DateAdd.cs index 1273c3a8e9..4e8e72ca3a 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Expressions/SimpleExpressionEvaluator/Compilation/Functions/DateAdd.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Expressions/SimpleExpressionEvaluator/Compilation/Functions/DateAdd.cs @@ -31,7 +31,6 @@ $Log: /CoreServices/Hsi/ExpressionEvaluator/Parser/Functions/ToString.cs $ using System; using System.Text.RegularExpressions; -using SimpleExpressionEvaluator.Compilation.Functions; using SimpleExpressionEvaluator.Utilities; namespace SimpleExpressionEvaluator.Compilation.Functions diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Expressions/SimpleExpressionEvaluator/Compilation/Functions/DateSubtract.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Expressions/SimpleExpressionEvaluator/Compilation/Functions/DateSubtract.cs new file mode 100644 index 0000000000..8c4520a729 --- /dev/null +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Expressions/SimpleExpressionEvaluator/Compilation/Functions/DateSubtract.cs @@ -0,0 +1,45 @@ +/* + * Created by SharpDevelop. + * User: Peter Forstmeier + * Date: 06.02.2013 + * Time: 20:18 + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ +using System; +using SimpleExpressionEvaluator.Utilities; + +namespace SimpleExpressionEvaluator.Compilation.Functions +{ + /// + /// DateSubtract (endDate,startDate) + /// + public class DateSubtract: Function + { + + protected override int ExpectedArgumentCount + { + get{return 2;} + } + + + protected override TimeSpan EvaluateFunction(object[] args) + { + + args[0] = args[0] == null ? DateTime.Today : TypeNormalizer.EnsureType(args[0], typeof (DateTime)); + + args[1] = args[1] == null ? DateTime.Today : TypeNormalizer.EnsureType(args[1], typeof (DateTime)); + + var endDate = (DateTime) args[0]; + if (endDate == DateTime.MinValue) { + endDate = DateTime.Today; + } + var startDate = (DateTime) args[1]; + if (startDate == DateTime.MinValue) + startDate = DateTime.Today; + + return endDate.Subtract(startDate); + } + } +} + diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Expressions/SimpleExpressionEvaluator/Utilities/TypeNormalizer.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Expressions/SimpleExpressionEvaluator/Utilities/TypeNormalizer.cs index 22495cdfae..fb36bcace9 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Expressions/SimpleExpressionEvaluator/Utilities/TypeNormalizer.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Expressions/SimpleExpressionEvaluator/Utilities/TypeNormalizer.cs @@ -107,29 +107,23 @@ namespace SimpleExpressionEvaluator.Utilities public static object EnsureType(object value,Type targetType,object nullValue) { - if (value == null) - return nullValue; - - if (targetType == typeof(object)) - return value; + if (value == null) + return nullValue; + + if (targetType == typeof(object)) + return value; - if (value.GetType() == targetType) - return value; + if (value.GetType() == targetType) + return value; - /* - TypeConverter converter = TypeDescriptor.GetConverter(targetType); - if (converter != null && converter.CanConvertFrom(value.GetType())) - { - return converter.ConvertFrom(value); - } - */ - try - { - return Convert.ChangeType(value, targetType); - } - catch - { } - return nullValue; + try { + return Convert.ChangeType(value, targetType); + } catch (Exception e) { + + Console.WriteLine("TypeNormalizer {0} - {1}",value.ToString(),e.Message); + return value.ToString(); + //throw new Exception()String.Format("TypeNormalizer for <{0}> - {1}",value.ToString(),e.Message)); + } } } } \ No newline at end of file diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Globals/GlobalLists.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Globals/GlobalLists.cs index c4f164beaf..19d09bd4e2 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Globals/GlobalLists.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Globals/GlobalLists.cs @@ -64,6 +64,7 @@ namespace ICSharpCode.Reports.Core.Globals private static readonly string[] MyDataTypeList = new string[] { "System.String", "System.DateTime", + "System.TimeSpan", "System.Decimal", "System.Int"}; #endregion @@ -155,7 +156,9 @@ namespace ICSharpCode.Reports.Core.Globals "Ddd, dd MMM yyyy HH\':\'mm\'\"ss \'GMT\'", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm:ss GMT", - "HH:mm", "HH:mm:ss", + "HH:mm", + "HH:mm:ss", + "hh:mm:ss", "yyyy-MM-dd HH:mm:ss", "html"}; #endregion diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/ICSharpCode.Reports.Core.Test.csproj b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/ICSharpCode.Reports.Core.Test.csproj index ce12c82bdd..ea0b847503 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/ICSharpCode.Reports.Core.Test.csproj +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/ICSharpCode.Reports.Core.Test.csproj @@ -81,6 +81,7 @@ + @@ -89,7 +90,7 @@ - + diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/Printing/FormattingFixture.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/Printing/FormattingFixture.cs new file mode 100644 index 0000000000..22b9a681ba --- /dev/null +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/Printing/FormattingFixture.cs @@ -0,0 +1,138 @@ +/* + * Created by SharpDevelop. + * User: Peter Forstmeier + * Date: 13.02.2013 + * Time: 19:48 + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ +using System; +using System.Globalization; +using ICSharpCode.Reports.Core.BaseClasses.Printing; +using NUnit.Framework; + +namespace ICSharpCode.Reports.Core.Test.Printing +{ + [TestFixture] + public class FormattingFixture + { + private const string stringType = "System.String"; + private const string dateTimetype = "System.DateTime"; + private const string nullValue ="NullValue"; + [Test] + public void String_Is_Not_Formatted() + { + string toFormat = "Hello World"; + string format = "dd/MM/yy"; + var result = StandardFormatter.FormatOutput(toFormat,format,stringType,nullValue); + Assert.That(result,Is.EqualTo(toFormat)); + } + + [Test] + public void Empty_Input_Returns_NullValue() + { + string toFormat = string.Empty;; + string format = "dd/MM/yy"; + var result = StandardFormatter.FormatOutput(toFormat,format,stringType,nullValue); + Assert.That(result,Is.EqualTo(nullValue)); + } + + #region DateTime + + [Test] + public void DateTime_dd_MM_YY () + { + string toFormat = "2012/02/12"; + string format = "dd.MM.yy"; + var result = StandardFormatter.FormatOutput(toFormat,format,dateTimetype,nullValue); + Assert.That(result,Is.EqualTo("12.02.12")); + } + + + [Test] + public void TypeDateTimeOfResultIsString() + { + string toFormat = "2012/02/12"; + string format = "dd.MM.yy"; + var result = StandardFormatter.FormatOutput(toFormat,format,dateTimetype,nullValue); + Assert.That(result,Is.TypeOf(typeof(string))); + } + + + [Test] + public void ConvertResultToDateTime() + { + DateTime date; + string toFormat = "2012/02/12"; + string format = "dd.MM.yy"; + var result = StandardFormatter.FormatOutput(toFormat,format,dateTimetype,nullValue); + + + bool valid = DateTime.TryParse(toFormat, out date); + + Assert.That(valid,Is.True); + Assert.That(date,Is.EqualTo(new DateTime(2012,02,12))); + } + + #endregion + + #region TimeSpan + + [Test] + public void TimeSpan_HH_mm_ss () + { + string toFormat = "5:50:10"; + string format = "HH:mm:ss"; + var result = StandardFormatter.FormatOutput(toFormat,format,dateTimetype,nullValue); + Assert.That(result,Is.EqualTo("05:50:10")); + } + + [Test] + public void TimeSpan_H_mm_ss () + { + string toFormat = "5:50:10"; + string format = "H:mm:ss"; + var result = StandardFormatter.FormatOutput(toFormat,format,dateTimetype,nullValue); + Assert.That(result,Is.EqualTo("5:50:10")); + } + + + [Test] + public void TimeSpan_D_H_mm_ss () + { + string toFormat = "1,5:50:10"; + string format = "H:mm:ss"; + var result = StandardFormatter.FormatOutput(toFormat,format,dateTimetype,nullValue); + Assert.That(result,Is.EqualTo("1,5:50:10")); + } + + + [Test] + public void TypeOfTimeSpanResultIsString() + { + string toFormat = "5,50,10"; + string format = "H:mm:ss"; + var result = StandardFormatter.FormatOutput(toFormat,format,dateTimetype,nullValue); + Assert.That(result,Is.TypeOf(typeof(string))); + } + + + [Test] + public void ConvertResultToTimeSpan() + { + TimeSpan time; + string toFormat = "5:50:10"; + string format = "H:mm:ss"; + var result = StandardFormatter.FormatOutput(toFormat,format,dateTimetype,nullValue); + + bool valid = TimeSpan.TryParseExact(result, + "c", + CultureInfo.CurrentCulture, + out time); + Assert.That(valid,Is.True); + Assert.That(time,Is.EqualTo(new TimeSpan(5,50,10))); + } + + #endregion + } +} diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/ReportingLanguage/DateTimeFunctionsFixture.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/ReportingLanguage/DateTimeFunctionsFixture.cs new file mode 100644 index 0000000000..171ecf1abe --- /dev/null +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/ReportingLanguage/DateTimeFunctionsFixture.cs @@ -0,0 +1,82 @@ +// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) +// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) + +using System; +using ICSharpCode.Reports.Expressions.ReportingLanguage; +using NUnit.Framework; +using SimpleExpressionEvaluator; + +namespace ICSharpCode.Reports.Core.Test.ReportingLanguage.LanguageTests +{ + [TestFixture] + public class DateTimeFunctionsFixture + { + + [Test] + public void Can_Compile_Function() + { + const string expression = "today()"; + IExpression expr = CreateExpression(expression); + Assert.That(expr.Evaluate(null), Is.EqualTo(DateTime.Today)); + } + + + [Test] + public void Can_Compile_Expr_With_Generic_Return() + { + const string expression = "Today()"; + IExpression expr = CreateExpression(expression); + Assert.That(expr.Evaluate(null), Is.EqualTo(DateTime.Today)); + } + + [Test] + public void Can_Compile_DateAdd() + { + const string expression = "dateAdd(today(),d,1)"; + IExpression expr = CreateExpression(expression); + Assert.That(expr.Evaluate(null), Is.EqualTo(DateTime.Today.AddDays(1))); + } + + [Test] + public void Can_Compile_DateDiff () + { + const string expression = "dateSubtract('10.02.2013','09.02.2013')"; + IExpression expr = CreateExpression(expression); + Assert.That(expr.Evaluate(null), Is.EqualTo(new TimeSpan(1,0,0,0).Duration())); + } + + + [Test] + public void Can_Compile_DateDiff_Start_Greater_End () + { + const string expression = "dateSubtract('09.02.2013','10.02.2013')"; + IExpression expr = CreateExpression(expression); + Assert.That(expr.Evaluate(null), Is.EqualTo(new TimeSpan(1,0,0,0))); + } + + [Test] + public void Can_Compile_DateDiff_Include_Hours_Minutes() + { + + // Example found at: + // http://msdn.microsoft.com/en-us/library/ae6246z1.aspx + + System.DateTime date1 = new System.DateTime(1996, 6, 3, 22, 15, 0); + System.DateTime date2 = new System.DateTime(1996, 12, 6, 13, 2, 0); + // diff1 gets 185 days, 14 hours, and 47 minutes. + System.TimeSpan diff1 = date2.Subtract(date1); + + const string expression = "dateSubtract('1996.12.6 13:2:0','1996.6.3 22:15:0')"; + + IExpression expr = CreateExpression(expression); + Assert.That(expr.Evaluate(null), Is.EqualTo(diff1)); + } + + + private static IExpression CreateExpression (string expression) + { + var compiler = new ReportingLanguageCompiler(); + return compiler.CompileExpression(expression); + } + } +} diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/ReportingLanguage/FunctionsFixture.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/ReportingLanguage/FunctionsFixture.cs deleted file mode 100644 index 60d7a64af2..0000000000 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/ReportingLanguage/FunctionsFixture.cs +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) -// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) - -using System; -using ICSharpCode.Reports.Expressions.ReportingLanguage; -using NUnit.Framework; -using SimpleExpressionEvaluator; - -namespace ICSharpCode.Reports.Core.Test.ReportingLanguage.LanguageTests -{ - [TestFixture] - public class FunctionsFixture - { - - [Test] - public void Can_Compile_Function() - { - const string expression = "today()"; - var compiler = new ReportingLanguageCompiler(); - IExpression expr = compiler.CompileExpression(expression); - Assert.That(expr.Evaluate(null), Is.EqualTo(DateTime.Today)); - } - - - [Test] - public void Can_Compile_Expr_With_Generic_Return() - { - const string expression = "Today()"; - var compiler = new ReportingLanguageCompiler(); - IExpression expr = compiler.CompileExpression(expression); - Assert.That(expr.Evaluate(null), Is.EqualTo(DateTime.Today)); - } - - [Test] - public void Can_Compile_DateAdd() - { - const string expression = "dateAdd(today(),d,1)"; - var compiler = new ReportingLanguageCompiler(); - IExpression expr = compiler.CompileExpression(expression); - Assert.That(expr.Evaluate(null), Is.EqualTo(DateTime.Today.AddDays(1))); - } - } -} diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/ReportingLanguage/IntegrationTests/AggregateFunctionsFixture.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/ReportingLanguage/IntegrationTests/AggregateFunctionsFixture.cs index e3ca3e4a51..f3b37c6d41 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/ReportingLanguage/IntegrationTests/AggregateFunctionsFixture.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/ReportingLanguage/IntegrationTests/AggregateFunctionsFixture.cs @@ -15,7 +15,7 @@ namespace ICSharpCode.Reports.Core.Test.ReportingLanguage.IntegrationTests { [TestFixture] - [SetCulture("en-US")] +// [SetCulture("en-US")] public class AggregateFunctionsFromTableFixture { @@ -107,7 +107,7 @@ namespace ICSharpCode.Reports.Core.Test.ReportingLanguage.IntegrationTests const string expression = "=max(amount)"; //var s = this.evaluator.Evaluate(expression); Assert.That(this.evaluator.Evaluate(expression), - Is.EqualTo("400.5")); + Is.EqualTo("400,5")); } @@ -134,8 +134,6 @@ namespace ICSharpCode.Reports.Core.Test.ReportingLanguage.IntegrationTests [TestFixtureSetUp] public void Init() { - - this.singlePage = TestHelper.CreateSinglePage(); this.evaluator = new ExpressionEvaluatorFacade(this.singlePage); @@ -151,6 +149,5 @@ namespace ICSharpCode.Reports.Core.Test.ReportingLanguage.IntegrationTests this.dataManager = ICSharpCode.Reports.Core.DataManager.CreateInstance(this.testTable, new ReportSettings()); this.singlePage.IDataNavigator = this.dataManager.GetNavigator; } - } } diff --git a/src/AddIns/VersionControl/GitAddIn/GitAddIn.addin b/src/AddIns/VersionControl/GitAddIn/GitAddIn.addin index efa587b95a..3d84bb11e1 100644 --- a/src/AddIns/VersionControl/GitAddIn/GitAddIn.addin +++ b/src/AddIns/VersionControl/GitAddIn/GitAddIn.addin @@ -36,6 +36,10 @@ label = "Git ${res:AddIns.Subversion.Diff}..." icon = "Svn.Diff" class = "ICSharpCode.GitAddIn.GitDiffCommand"/> + + diff --git a/src/AddIns/VersionControl/GitAddIn/Src/Commands.cs b/src/AddIns/VersionControl/GitAddIn/Src/Commands.cs index 0c7a7ad68d..642605d8db 100644 --- a/src/AddIns/VersionControl/GitAddIn/Src/Commands.cs +++ b/src/AddIns/VersionControl/GitAddIn/Src/Commands.cs @@ -93,4 +93,12 @@ namespace ICSharpCode.GitAddIn GitGuiWrapper.Diff(filename, callback); } } + + public class GitLogCommand : GitCommand + { + protected override void Run(string filename, Action callback) + { + GitGuiWrapper.Log(filename, callback); + } + } } diff --git a/src/AddIns/VersionControl/GitAddIn/Src/GitGuiWrapper.cs b/src/AddIns/VersionControl/GitAddIn/Src/GitGuiWrapper.cs index 428c4e15d6..d6b36c8160 100644 --- a/src/AddIns/VersionControl/GitAddIn/Src/GitGuiWrapper.cs +++ b/src/AddIns/VersionControl/GitAddIn/Src/GitGuiWrapper.cs @@ -99,5 +99,10 @@ namespace ICSharpCode.GitAddIn { Proc("diff", fileName, callback); } + + public static void Log(string fileName, Action callback) + { + Proc("log", fileName, callback); + } } } diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Search/SearchPanel.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Search/SearchPanel.cs index ec9119b0cf..634309520e 100644 --- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Search/SearchPanel.cs +++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Search/SearchPanel.cs @@ -183,7 +183,6 @@ namespace ICSharpCode.AvalonEdit.Search DataContext = this; renderer = new SearchResultBackgroundRenderer(); - textArea.TextView.BackgroundRenderers.Add(renderer); currentDocument = textArea.Document; currentDocument.TextChanged += textArea_Document_TextChanged; textArea.DocumentChanged += textArea_DocumentChanged; diff --git a/src/Libraries/ICSharpCode.Build.Tasks/Project/Resources.cs b/src/Libraries/ICSharpCode.Build.Tasks/Project/Resources.cs index e6315d40e7..1bf30034d0 100644 --- a/src/Libraries/ICSharpCode.Build.Tasks/Project/Resources.cs +++ b/src/Libraries/ICSharpCode.Build.Tasks/Project/Resources.cs @@ -36,7 +36,11 @@ namespace ICSharpCode.Build.Tasks } if (resourceService != null) { const BindingFlags flags = BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Static; - return (string)resourceService.InvokeMember("Parse", flags, null, null, new object[] { key }); + string translation = (string)resourceService.InvokeMember("Parse", flags, null, null, new object[] { key }); + if (translation != null && translation.StartsWith("${res")) { + return null; + } + return translation; } else { return null; } diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ExternalToolPanel.xaml b/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ExternalToolPanel.xaml index 927641d53d..4fab456852 100644 --- a/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ExternalToolPanel.xaml +++ b/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ExternalToolPanel.xaml @@ -73,7 +73,7 @@ + Text="{Binding SelectedTool.MenuCommand,UpdateSourceTrigger=PropertyChanged}">