New tests.
[mono.git] / mcs / class / corlib / System / ConsoleKeyInfo.cs
index aea760932f919a64bf0864b8205db54adfb5d555..c62c8d0d039ef4e9b679ed87094d12fb475b1767 100644 (file)
@@ -1,5 +1,5 @@
 //
-// System.ConsoleKeyInfo
+// System.ConsoleKeyInfo.cs
 //
 // Authors:
 //     Gonzalo Paniagua Javier (gonzalo@ximian.com)
 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
-#if NET_2_0
 namespace System {
+       [Serializable]
        public struct ConsoleKeyInfo {
+               internal static ConsoleKeyInfo Empty = new ConsoleKeyInfo ('\0', 0, false, false, false);
                ConsoleKey key;
                char keychar;
                ConsoleModifiers modifiers;
@@ -38,6 +39,29 @@ namespace System {
                {
                        this.key = key;
                        this.keychar = keyChar;
+                       modifiers = 0;
+                       SetModifiers (shift, alt, control);
+               }
+
+               internal ConsoleKeyInfo (ConsoleKeyInfo other)
+               {
+                       this.key = other.key;
+                       this.keychar = other.keychar;
+                       this.modifiers = other.modifiers;
+               }
+
+               internal void SetKey (ConsoleKey key)
+               {
+                       this.key = key;
+               }
+
+               internal void SetKeyChar (char keyChar)
+               {
+                       this.keychar = keyChar;
+               }
+
+               internal void SetModifiers (bool shift, bool alt, bool control)
+               {
                        this.modifiers = (shift) ? ConsoleModifiers.Shift : 0;
                        this.modifiers |= (alt) ? ConsoleModifiers.Alt : 0;
                        this.modifiers |= (control) ? ConsoleModifiers.Control : 0;
@@ -54,7 +78,33 @@ namespace System {
                public ConsoleModifiers Modifiers {
                        get { return modifiers; }
                }
+               
+               public override bool Equals (object value)
+               {
+                       if (!(value is ConsoleKeyInfo))
+                               return false;
+                       return Equals ((ConsoleKeyInfo) value);
+               }
+               
+               public static bool operator == (ConsoleKeyInfo a, ConsoleKeyInfo b)
+               {
+                       return a.Equals (b);
+               }
+               
+               public static bool operator != (ConsoleKeyInfo a, ConsoleKeyInfo b)
+               {
+                       return !a.Equals (b);
+               }
+               
+               public bool Equals (ConsoleKeyInfo obj)
+               {
+                       return key == obj.key && obj.keychar == keychar && obj.modifiers == modifiers;
+               }
+               
+               public override int GetHashCode ()
+               {
+                       return key.GetHashCode () ^ keychar.GetHashCode () ^ modifiers.GetHashCode ();
+               }
        }
 }
-#endif