Beispiel #1
0
 protected EnumMemberAttribute(string valueString, bool _isFragment, string description, string css,
                               Mechanisms mechanism, bool isCollection = false, HtmlTagName tag = HtmlTagName.Any)
 {
     this._isFragment  = _isFragment;
     this._value       = valueString;
     this.description  = description;
     this._css         = css;
     this.mechanism    = mechanism;
     this.isCollection = isCollection;
     this.tagName      = tag;
 }
Beispiel #2
0
        public static string CssSelectorOf(EnumTypeAttribute typeAttribute, EnumMemberAttribute memberAttribute, string memberValue)
        {
            HtmlTagName tagName         = typeAttribute.TagName;
            string      tagLocator      = tagName.Value();
            Mechanisms  mechanism       = typeAttribute.Mechanism;
            string      mechanismFormat = typeAttribute.Mechanism.Value();

            string css;

            switch (mechanism)
            {
            case Mechanisms.ByAttr:
            case Mechanisms.ByAttribute:
            {
                int index = memberValue.IndexOf(EnumValueSplitter);
                if (index == -1) //The Value of the Enum entry shall be treated as the attribute name
                {
                    string withAttr = string.Format("[{0}]", memberValue);
                    css = string.Format(tagLocator, string.Empty, withAttr);
                }
                else
                {
                    string attrString = string.Format(mechanismFormat,
                                                      memberValue.Substring(0, index), memberValue.Substring(index + 1));
                    css = string.Format(tagLocator, string.Empty, attrString);
                }
                break;
            }

            case Mechanisms.ByOrder:
            case Mechanisms.ByOrderLast:
            case Mechanisms.ByChild:
            case Mechanisms.ByChildLast:
            {
                string[] pair = memberValue.Split(EnumValueSplitter);

                string attrString = null;
                switch (pair.Count())
                {
                case 2:
                    attrString = string.Format(mechanismFormat, string.Empty, pair[1]).Trim();
                    css        = string.Format(tagLocator, pair[0], attrString);
                    break;

                case 1:
                    attrString = string.Format(mechanismFormat, string.Empty, memberValue).TrimStart();
                    css        = string.Format(tagLocator, string.Empty, attrString);
                    break;

                default:
                    throw new InvalidEnumArgumentException(mechanismFormat +
                                                           " expects one item or two items seperated by '='.");
                }
                break;
            }

            case Mechanisms.ByText:
            case Mechanisms.ByTag:
            {
                //Notice: this is not preferrable with CSS Locator.
                //The value of the Enum member shall be used afterwards
                css = string.Format(tagLocator, string.Empty, string.Empty);
                break;
            }

            case Mechanisms.ByCustom:
            {
                css = memberValue;
                break;
            }

            case Mechanisms.ByAdjacent:
            case Mechanisms.ByAncestor:
            case Mechanisms.ByParent:
            case Mechanisms.BySibling:
            {
                string[] pair = memberValue.Split(EnumValueSplitter);

                string attrString = null;
                switch (pair.Count())
                {
                case 2:
                    attrString = string.Format(mechanismFormat, pair[0], string.Empty);
                    css        = string.Format(tagLocator, attrString, pair[1]);
                    break;

                case 1:
                    attrString = string.Format(mechanismFormat, memberValue, string.Empty);
                    css        = string.Format(tagLocator, attrString, string.Empty);
                    break;

                default:
                    throw new InvalidEnumArgumentException(mechanismFormat +
                                                           " expects one item or two items seperated by '='.");
                }
                break;
            }

            default:
                //case Mechanisms.ById:
                //case Mechanisms.ByClass:
                //case Mechanisms.ByUrl:
                //case Mechanisms.ByName:
                //case Mechanisms.ByValue:
            {
                string[] pair = memberValue.Split(EnumValueSplitter);
                string   byId = string.Format(mechanismFormat, pair.Last());
                css = string.Format(tagLocator, string.Empty, byId);
                break;
            }
            }
            return(css);
        }