Author: rolf
Date: 2007-12-24 07:16:09 -0500 (Mon, 24 Dec 2007)
New Revision: 91855

Added:
   
trunk/mono-basic/vbruntime/Microsoft.VisualBasic/Microsoft.VisualBasic/FileData.vb
   trunk/mono-basic/vbruntime/Test/Microsoft.VisualBasic/FileSystemTests2.vb
Modified:
   
trunk/mono-basic/vbruntime/Microsoft.VisualBasic/Microsoft.VisualBasic/ChangeLog
   trunk/mono-basic/vbruntime/Test/Microsoft.VisualBasic/ChangeLog
Log:
* Microsoft.VisualBasic/Microsoft.VisualBasic/FileData.vb,
  Test/Microsoft.VisualBasic/FileSystemTests2.vb: Added, contains
  code for the missing fileio support. Not included in build yet,
  since it's not working for the moment.

Modified: 
trunk/mono-basic/vbruntime/Microsoft.VisualBasic/Microsoft.VisualBasic/ChangeLog
===================================================================
--- 
trunk/mono-basic/vbruntime/Microsoft.VisualBasic/Microsoft.VisualBasic/ChangeLog
    2007-12-24 10:22:40 UTC (rev 91854)
+++ 
trunk/mono-basic/vbruntime/Microsoft.VisualBasic/Microsoft.VisualBasic/ChangeLog
    2007-12-24 12:16:09 UTC (rev 91855)
@@ -1,3 +1,8 @@
+2007-12-24  Rolf Bjarne Kvinge <[EMAIL PROTECTED]> 
+
+       * FileData.vb: Added, contains code for the missing fileio support. Not
+         included in build yet, since it's not working for the moment.
+
 2007-12-17  Rolf Bjarne Kvinge <[EMAIL PROTECTED]> 
 
        * FileSystem.vb: Make this compile with vbc 7.

Added: 
trunk/mono-basic/vbruntime/Microsoft.VisualBasic/Microsoft.VisualBasic/FileData.vb
===================================================================
--- 
trunk/mono-basic/vbruntime/Microsoft.VisualBasic/Microsoft.VisualBasic/FileData.vb
  2007-12-24 10:22:40 UTC (rev 91854)
+++ 
trunk/mono-basic/vbruntime/Microsoft.VisualBasic/Microsoft.VisualBasic/FileData.vb
  2007-12-24 12:16:09 UTC (rev 91855)
@@ -0,0 +1,636 @@
+'
+' FileData.vb
+'
+' Author:
+'   Rolf Bjarne Kvinge ([EMAIL PROTECTED])
+'
+' Copyright (C) 2007 Novell, Inc (http://www.novell.com)
+'
+' Permission is hereby granted, free of charge, to any person obtaining
+' a copy of this software and associated documentation files (the
+' "Software"), to deal in the Software without restriction, including
+' without limitation the rights to use, copy, modify, merge, publish,
+' distribute, sublicense, and/or sell copies of the Software, and to
+' permit persons to whom the Software is furnished to do so, subject to
+' the following conditions:
+' 
+' The above copyright notice and this permission notice shall be
+' included in all copies or substantial portions of the Software.
+' 
+' THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+' EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+' MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+' NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+' LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+' OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+' WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+'
+
+Imports System
+Imports System.IO
+Imports System.Text
+Imports Microsoft.VisualBasic.CompilerServices
+Imports System.Collections
+
+Namespace Microsoft.VisualBasic
+    Friend Class FileData
+        Public FileNumber As Integer
+        Public FileName As String
+        Public Mode As Microsoft.VisualBasic.OpenMode
+        Public Access As Microsoft.VisualBasic.OpenAccess
+        Public Share As Microsoft.VisualBasic.OpenShare
+        Public RecordLength As Integer = -1
+        Public RecordWidth As Integer = 0
+        Public Stream As FileStream
+        Public Reader As StreamReader
+        Public Writer As StreamWriter
+        Public BinaryWriter As BinaryWriter
+        Public BinaryReader As BinaryReader
+
+        Public Sub New(ByVal FileNumber As Integer, ByVal FileName As String, 
ByVal Mode As Microsoft.VisualBasic.OpenMode, ByVal Access As 
Microsoft.VisualBasic.OpenAccess, ByVal Share As 
Microsoft.VisualBasic.OpenShare, ByVal RecordLength As Integer)
+            Me.FileNumber = FileNumber
+            Me.FileName = FileName
+            Me.Mode = Mode
+            Me.Access = Access
+            Me.Share = Share
+            Me.RecordLength = RecordLength
+            If Me.Access = OpenAccess.Read OrElse Me.Access = OpenAccess.Write 
Then
+                Reader = New StreamReader(Stream)
+                BinaryReader = New BinaryReader(Stream)
+            End If
+            If Me.Access = OpenAccess.Write OrElse Me.Access = 
OpenAccess.ReadWrite Then
+                Writer = New StreamWriter(Stream)
+                Writer.AutoFlush = True
+                BinaryWriter = New BinaryWriter(Stream)
+            End If
+        End Sub
+
+        Public Sub CreateStream()
+            If Access = OpenAccess.Default Then Access = OpenAccess.ReadWrite
+            If Share = OpenShare.Default Then Share = OpenShare.LockReadWrite
+
+            Dim ioAccess As System.IO.FileAccess
+            Dim ioShare As System.IO.FileShare
+            Dim ioMode As System.IO.FileMode
+
+            Select Case Access
+                Case OpenAccess.Read
+                    ioAccess = FileAccess.Read
+                Case OpenAccess.ReadWrite
+                    ioAccess = FileAccess.ReadWrite
+                Case OpenAccess.Write
+                    ioAccess = FileAccess.Write
+                Case Else
+                    Throw 
Microsoft.VisualBasic.CompilerServices.ExceptionUtils.GetVBException(VBErrors.ERR5_Invalid_procedure_call)
+            End Select
+
+            Select Case Mode
+                Case OpenMode.Append
+                    ioMode = FileMode.Append
+                Case OpenMode.Binary
+                    ioMode = FileMode.OpenOrCreate
+                Case OpenMode.Input
+                    ioMode = FileMode.Open
+                Case OpenMode.Output
+                    ioMode = FileMode.OpenOrCreate
+                Case OpenMode.Random
+                    ioMode = FileMode.OpenOrCreate
+                Case Else
+                    Throw 
Microsoft.VisualBasic.CompilerServices.ExceptionUtils.GetVBException(VBErrors.ERR5_Invalid_procedure_call)
+            End Select
+
+            Select Case Share
+                Case OpenShare.LockRead
+                    ioShare = FileShare.Write
+                Case OpenShare.LockReadWrite
+                    ioShare = FileShare.None
+                Case OpenShare.LockWrite
+                    ioShare = FileShare.Read
+                Case OpenShare.Shared
+                    ioShare = FileShare.ReadWrite
+                Case Else
+                    Throw 
Microsoft.VisualBasic.CompilerServices.ExceptionUtils.GetVBException(VBErrors.ERR5_Invalid_procedure_call)
+            End Select
+
+            Stream = New IO.FileStream(FileName, ioMode, ioAccess, ioShare)
+        End Sub
+
+        Public Sub Close()
+            Stream.Close()
+            Stream = Nothing
+        End Sub
+
+        Public Sub VerifyFileModes(ByVal ParamArray Modes As OpenMode())
+            For i As Integer = 0 To Modes.Length - 1
+                If Modes(i) = Mode Then Return
+            Next
+            Throw 
Microsoft.VisualBasic.CompilerServices.ExceptionUtils.GetVBException(VBErrors.ERR54_Bad_file_mode)
+        End Sub
+
+        Public Sub VerifyFileAccess(ByVal ParamArray Accesses As OpenAccess())
+            For i As Integer = 0 To Accesses.Length - 1
+                If Accesses(i) = Access Then Return
+            Next
+            Throw New ArgumentException("Invalid access.") 'TODO: Find correct 
error message
+        End Sub
+
+        Public Function EOF() As Boolean
+            VerifyFileModes(OpenMode.Input, OpenMode.Random, OpenMode.Random)
+            Return Stream.Length = Stream.Position
+        End Function
+
+        Public Sub FileGet(ByRef Value As Boolean, Optional ByVal RecordNumber 
As Long = -1)
+            VerifyFileModes(OpenMode.Random, OpenMode.Binary)
+            If RecordNumber >= 0 Then Seek(RecordNumber)
+            Value = BinaryReader.ReadBoolean
+        End Sub
+
+        Public Sub FileGet(ByRef Value As Byte, Optional ByVal RecordNumber As 
Long = -1)
+            VerifyFileModes(OpenMode.Random, OpenMode.Binary)
+            If RecordNumber >= 0 Then Seek(RecordNumber)
+            Value = BinaryReader.ReadByte
+        End Sub
+
+        Public Sub FileGet(ByRef Value As Char, Optional ByVal RecordNumber As 
Long = -1)
+            VerifyFileModes(OpenMode.Random, OpenMode.Binary)
+            If RecordNumber >= 0 Then Seek(RecordNumber)
+            Value = BinaryReader.ReadChar
+        End Sub
+
+        Public Sub FileGet(ByRef Value As Date, Optional ByVal RecordNumber As 
Long = -1)
+            VerifyFileModes(OpenMode.Random, OpenMode.Binary)
+            If RecordNumber >= 0 Then Seek(RecordNumber)
+            Value = Date.FromOADate(BinaryReader.ReadDouble)
+        End Sub
+
+        Public Sub FileGet(ByRef Value As Decimal, Optional ByVal RecordNumber 
As Long = -1)
+            VerifyFileModes(OpenMode.Random, OpenMode.Binary)
+            If RecordNumber >= 0 Then Seek(RecordNumber)
+            Value = BinaryReader.ReadDecimal
+        End Sub
+
+        Public Sub FileGet(ByRef Value As Double, Optional ByVal RecordNumber 
As Long = -1)
+            VerifyFileModes(OpenMode.Random, OpenMode.Binary)
+            If RecordNumber >= 0 Then Seek(RecordNumber)
+            Value = BinaryReader.ReadDouble
+        End Sub
+
+        Public Sub FileGet(ByRef Value As Integer, Optional ByVal RecordNumber 
As Long = -1)
+            VerifyFileModes(OpenMode.Random, OpenMode.Binary)
+            If RecordNumber >= 0 Then Seek(RecordNumber)
+            Value = BinaryReader.ReadInt32
+        End Sub
+
+        Public Sub FileGet(ByRef Value As Long, Optional ByVal RecordNumber As 
Long = -1)
+            VerifyFileModes(OpenMode.Random, OpenMode.Binary)
+            If RecordNumber >= 0 Then Seek(RecordNumber)
+            Value = BinaryReader.ReadInt64
+        End Sub
+
+        Public Sub FileGet(ByRef Value As Short, Optional ByVal RecordNumber 
As Long = -1)
+            VerifyFileModes(OpenMode.Random, OpenMode.Binary)
+            If RecordNumber >= 0 Then Seek(RecordNumber)
+            Value = BinaryReader.ReadInt16
+        End Sub
+
+        Public Sub FileGet(ByRef Value As Single, Optional ByVal RecordNumber 
As Long = -1)
+            VerifyFileModes(OpenMode.Random, OpenMode.Binary)
+            If RecordNumber >= 0 Then Seek(RecordNumber)
+            Value = BinaryReader.ReadSingle
+        End Sub
+
+        Public Sub FileGet(ByRef Value As String, Optional ByVal RecordNumber 
As Long = -1, Optional ByVal StringIsFixedLength As Boolean = False)
+            VerifyFileModes(OpenMode.Random, OpenMode.Binary)
+            If RecordNumber >= 0 Then Seek(RecordNumber)
+
+            Dim length As Integer
+            If StringIsFixedLength = False Then
+                length = BinaryReader.ReadInt16()
+            ElseIf Not Value Is Nothing Then
+                length = Value.Length
+            Else
+                length = 0
+            End If
+            Value = New String(BinaryReader.ReadChars(length))
+        End Sub
+
+        Public Sub FileGet(ByRef Value As System.Array, Optional ByVal 
RecordNumber As Long = -1, Optional ByVal ArrayIsDynamic As Boolean = False, 
Optional ByVal StringIsFixedLength As Boolean = False)
+            Throw New NotImplementedException
+        End Sub
+
+        Public Sub FileGet(ByRef Value As System.ValueType, Optional ByVal 
RecordNumber As Long = -1)
+            Throw New NotImplementedException
+        End Sub
+
+        Public Sub FileGetObject(ByRef Value As Object, Optional ByVal 
RecordNumber As Long = -1)
+            Throw New NotImplementedException
+        End Sub
+
+        Public Sub FilePut(ByVal Value As Boolean, Optional ByVal RecordNumber 
As Long = -1)
+            VerifyFileModes(OpenMode.Random, OpenMode.Binary)
+            If RecordNumber >= 0 Then Seek(RecordNumber)
+            BinaryWriter.Write(Value)
+        End Sub
+
+        Public Sub FilePut(ByVal Value As Byte, Optional ByVal RecordNumber As 
Long = -1)
+            VerifyFileModes(OpenMode.Random, OpenMode.Binary)
+            If RecordNumber >= 0 Then Seek(RecordNumber)
+            BinaryWriter.Write(Value)
+        End Sub
+
+        Public Sub FilePut(ByVal Value As Char, Optional ByVal RecordNumber As 
Long = -1)
+            VerifyFileModes(OpenMode.Random, OpenMode.Binary)
+            If RecordNumber >= 0 Then Seek(RecordNumber)
+            BinaryWriter.Write(Value)
+        End Sub
+
+        Public Sub FilePut(ByVal Value As Date, Optional ByVal RecordNumber As 
Long = -1)
+            VerifyFileModes(OpenMode.Random, OpenMode.Binary)
+            If RecordNumber >= 0 Then Seek(RecordNumber)
+            BinaryWriter.Write(Value.ToOADate)
+        End Sub
+
+        Public Sub FilePut(ByVal Value As Decimal, Optional ByVal RecordNumber 
As Long = -1)
+            VerifyFileModes(OpenMode.Random, OpenMode.Binary)
+            If RecordNumber >= 0 Then Seek(RecordNumber)
+            BinaryWriter.Write(Value)
+        End Sub
+
+        Public Sub FilePut(ByVal Value As Double, Optional ByVal RecordNumber 
As Long = -1)
+            VerifyFileModes(OpenMode.Random, OpenMode.Binary)
+            If RecordNumber >= 0 Then Seek(RecordNumber)
+            BinaryWriter.Write(Value)
+        End Sub
+
+        Public Sub FilePut(ByVal Value As Integer, Optional ByVal RecordNumber 
As Long = -1)
+            VerifyFileModes(OpenMode.Random, OpenMode.Binary)
+            If RecordNumber >= 0 Then Seek(RecordNumber)
+            BinaryWriter.Write(Value)
+        End Sub
+
+        Public Sub FilePut(ByVal Value As Long, Optional ByVal RecordNumber As 
Long = -1)
+            VerifyFileModes(OpenMode.Random, OpenMode.Binary)
+            If RecordNumber >= 0 Then Seek(RecordNumber)
+            BinaryWriter.Write(Value)
+        End Sub
+
+        Public Sub FilePut(ByVal Value As Short, Optional ByVal RecordNumber 
As Long = -1)
+            VerifyFileModes(OpenMode.Random, OpenMode.Binary)
+            If RecordNumber >= 0 Then Seek(RecordNumber)
+            BinaryWriter.Write(Value)
+        End Sub
+
+        Public Sub FilePut(ByVal Value As Single, Optional ByVal RecordNumber 
As Long = -1)
+            VerifyFileModes(OpenMode.Random, OpenMode.Binary)
+            If RecordNumber >= 0 Then Seek(RecordNumber)
+            BinaryWriter.Write(Value)
+        End Sub
+
+        Public Sub FilePut(ByVal Value As String, Optional ByVal RecordNumber 
As Long = -1, Optional ByVal StringIsFixedLength As Boolean = False)
+            VerifyFileModes(OpenMode.Random, OpenMode.Binary)
+            If RecordNumber >= 0 Then Seek(RecordNumber)
+
+            If StringIsFixedLength = False Then
+                If Value.Length > Short.MaxValue Then
+                    Throw New ArgumentException("String is too long") 'FIXME: 
Check error condition and message
+                End If
+                BinaryWriter.Write(CShort(Value.Length))
+            End If
+            Writer.Write(Value) 'Binary writer writes a length-prefixed string 
(and the length-prefix doesn't match VB's length prefix)
+        End Sub
+
+        Public Sub FilePut(ByVal Value As System.Array, Optional ByVal 
RecordNumber As Long = -1, Optional ByVal ArrayIsDynamic As Boolean = False, 
Optional ByVal StringIsFixedLength As Boolean = False)
+            Throw New NotImplementedException
+        End Sub
+
+        Public Sub FilePut(ByVal Value As System.ValueType, Optional ByVal 
RecordNumber As Long = -1)
+            Throw New NotImplementedException
+        End Sub
+
+        Public Sub FilePutObject(ByVal Value As Object, Optional ByVal 
RecordNumber As Long = -1)
+            Throw New NotImplementedException
+        End Sub
+
+        Public Sub FileWidth(ByVal RecordWidth As Integer)
+            Me.RecordWidth = RecordWidth
+        End Sub
+
+        Private Function ReadRecord() As String
+            Dim ch As Char
+            Dim builder As New StringBuilder
+
+            ch = BinaryReader.ReadChar()
+            While ch <> ","c AndAlso ch <> vbCr AndAlso ch <> vbLf
+                builder.Append(ch)
+                ch = BinaryReader.ReadChar()
+            End While
+
+            If ch = vbCr AndAlso Chr(BinaryReader.PeekChar) = vbLf Then
+                BinaryReader.ReadChar()
+            End If
+
+            Return builder.ToString
+        End Function
+
+        Public Sub Input(ByRef Value As Boolean)
+            VerifyFileAccess(OpenAccess.Read, OpenAccess.ReadWrite)
+            Dim record As String = ReadRecord()
+            If String.Equals("#TRUE#", record, StringComparison.Ordinal) Then
+                Value = True
+            ElseIf String.Equals("#FALSE#", record, StringComparison.Ordinal) 
Then
+                Value = False
+            Else
+                Throw New ArgumentException("Invalid boolean value.")
+            End If
+        End Sub
+
+        Public Sub Input(ByRef Value As Byte)
+            VerifyFileAccess(OpenAccess.Read, OpenAccess.ReadWrite)
+            Value = CByte(ReadRecord())
+        End Sub
+
+        Public Sub Input(ByRef Value As Char)
+            VerifyFileAccess(OpenAccess.Read, OpenAccess.ReadWrite)
+            Value = CChar(ReadRecord())
+        End Sub
+
+        Public Sub Input(ByRef Value As Date)
+            VerifyFileAccess(OpenAccess.Read, OpenAccess.ReadWrite)
+            Value = CDate(ReadRecord())
+        End Sub
+
+        Public Sub Input(ByRef Value As Decimal)
+            VerifyFileAccess(OpenAccess.Read, OpenAccess.ReadWrite)
+            Value = CDec(ReadRecord())
+        End Sub
+
+        Public Sub Input(ByRef Value As Double)
+            VerifyFileAccess(OpenAccess.Read, OpenAccess.ReadWrite)
+            Value = CDbl(ReadRecord())
+        End Sub
+
+        Public Sub Input(ByRef Value As Integer)
+            VerifyFileAccess(OpenAccess.Read, OpenAccess.ReadWrite)
+            Value = CInt(ReadRecord())
+        End Sub
+
+        Public Sub Input(ByRef Value As Long)
+            VerifyFileAccess(OpenAccess.Read, OpenAccess.ReadWrite)
+            Value = CLng(ReadRecord())
+        End Sub
+
+        Public Sub Input(ByRef Value As Object)
+            VerifyFileAccess(OpenAccess.Read, OpenAccess.ReadWrite)
+            Dim record As String = ReadRecord()
+            If record Is Nothing Then
+                Value = Nothing
+            ElseIf String.Equals("#FALSE#", record, StringComparison.Ordinal) 
Then
+                Value = False
+            ElseIf String.Equals("#TRUE#", record, StringComparison.Ordinal) 
Then
+                Value = True
+            ElseIf String.Equals("#NULL#", record, StringComparison.Ordinal) 
Then
+                Value = DBNull.Value
+            ElseIf record.StartsWith("#ERROR ") AndAlso record.EndsWith("#") 
Then
+                record = record.Substring(7, record.Length - 8)
+                Dim errNumber As Integer = Integer.Parse(record)
+                Dim errObj As New ErrObject
+                errObj.Number = errNumber
+                Value = errObj
+            ElseIf record.StartsWith("#") AndAlso record.EndsWith("#") Then
+                record = record.Substring(1, record.Length - 1)
+                Value = Date.Parse(record)
+            ElseIf record.StartsWith("""") AndAlso record.EndsWith("""") Then
+                Value = record.Substring(1, record.Length - 1)
+            Else
+                'FIXME: Do some real parsing here
+                ' Should probably return int/long values for non-floating 
point numbers
+                Value = Double.Parse(record)
+            End If
+        End Sub
+
+        Public Sub Input(ByRef Value As Short)
+            VerifyFileAccess(OpenAccess.Read, OpenAccess.ReadWrite)
+            Value = CShort(ReadRecord())
+        End Sub
+
+        Public Sub Input(ByRef Value As Single)
+            VerifyFileAccess(OpenAccess.Read, OpenAccess.ReadWrite)
+            Value = CSng(ReadRecord())
+        End Sub
+
+        Public Sub Input(ByRef Value As String)
+            VerifyFileAccess(OpenAccess.Read, OpenAccess.ReadWrite)
+            Value = ReadRecord()
+        End Sub
+
+        Public Function InputString(ByVal CharCount As Integer) As String
+            VerifyFileAccess(OpenAccess.Read, OpenAccess.ReadWrite)
+            Dim chars(CharCount - 1) As Char
+            If Reader.ReadBlock(chars, 0, CharCount) <> CharCount Then
+                Throw New EndOfStreamException() 'TODO: Find exact message
+            End If
+            Return New String(chars)
+        End Function
+
+        Public Function LineInput() As String
+            VerifyFileAccess(OpenAccess.Read, OpenAccess.ReadWrite)
+            Return Reader.ReadLine()
+        End Function
+
+        Public Function Loc() As Long
+            Return Stream.Position
+        End Function
+
+        Public Sub Lock()
+            Stream.Lock(0, Long.MaxValue)
+        End Sub
+
+        Public Sub Lock(ByVal Record As Long)
+            Lock(Record, Record + 1)
+        End Sub
+
+        Public Sub Lock(ByVal FromRecord As Long, ByVal ToRecord As Long)
+            If RecordLength = -1 Then
+                Stream.Lock(FromRecord - 1, ToRecord - FromRecord)
+            Else
+                Stream.Lock((FromRecord - 1) * RecordLength, (ToRecord - 
FromRecord) * RecordLength)
+            End If
+        End Sub
+
+        Public Function LOF() As Long
+            Return Stream.Length
+        End Function
+
+        Public Sub Print(ByVal ParamArray Output() As Object)
+            VerifyFileAccess(OpenAccess.Write, OpenAccess.ReadWrite)
+            For i As Integer = 0 To Output.Length - 1
+                Dim item As Object = Output(i)
+
+                If item IsNot Nothing Then
+                    Dim iConv As IConvertible = TryCast(item, IConvertible)
+                    Dim tc As TypeCode
+                    If iConv IsNot Nothing Then
+                        tc = iConv.GetTypeCode
+                    Else
+                        tc = Type.GetTypeCode(item.GetType)
+                    End If
+                    Select Case tc
+                        Case TypeCode.Boolean
+                            If DirectCast(item, Boolean) Then
+                                Writer.Write("True")
+                            Else
+                                Writer.Write("False")
+                            End If
+                        Case TypeCode.Byte
+                            Writer.Write(DirectCast(item, Byte))
+                        Case TypeCode.Char
+                            Writer.Write("""")
+                            Writer.Write(DirectCast(item, Char))
+                            Writer.Write("""")
+                        Case TypeCode.DateTime
+                            Writer.Write(DirectCast(item, Date).ToString()) 
'FIXME: Check date format
+                        Case TypeCode.DBNull
+                            Writer.Write("Null")
+                        Case TypeCode.Decimal
+                            Writer.Write(DirectCast(item, Decimal))
+                        Case TypeCode.Double
+                            Writer.Write(DirectCast(item, Double))
+                        Case TypeCode.Int16
+                            Writer.Write(DirectCast(item, Short))
+                        Case TypeCode.Int32
+                            Writer.Write(DirectCast(item, Integer))
+                        Case TypeCode.Int64
+                            Writer.Write(DirectCast(item, Long))
+                        Case TypeCode.SByte
+                            Writer.Write(DirectCast(item, SByte))
+                        Case TypeCode.Single
+                            Writer.Write(DirectCast(item, Single))
+                        Case TypeCode.String
+                            Writer.Write("""")
+                            Writer.Write(DirectCast(item, String))
+                            Writer.Write("""")
+                        Case TypeCode.UInt16
+                            Writer.Write(DirectCast(item, UShort))
+                        Case TypeCode.UInt32
+                            Writer.Write(DirectCast(item, UInteger))
+                        Case TypeCode.UInt64
+                            Writer.Write(DirectCast(item, ULong))
+                        Case TypeCode.Object
+                            If TypeOf item Is ErrObject Then
+                                Writer.Write("Error ")
+                                Writer.Write(DirectCast(item, 
ErrObject).Number)
+                            Else
+                                Throw New NotImplementedException("Can't write 
object of type: " & item.GetType().FullName)
+                            End If
+                    End Select
+                End If
+
+                If i < Output.Length - 1 Then
+                    Writer.Write(","c)
+                End If
+            Next
+        End Sub
+
+        Public Sub PrintLine(ByVal ParamArray Output() As Object)
+            Print(Output)
+            Writer.Write(vbCrLf)
+        End Sub
+
+        Public Function Seek() As Long
+            Return Stream.Position
+        End Function
+
+        Public Sub Seek(ByVal Position As Long)
+            Stream.Position = Position
+        End Sub
+
+        Public Sub Unlock()
+            Stream.Unlock(0, Long.MaxValue)
+        End Sub
+
+        Public Sub Unlock(ByVal Record As Long)
+            Stream.Unlock(Record, Record + 1)
+        End Sub
+
+        Public Sub Unlock(ByVal FromRecord As Long, ByVal ToRecord As Long)
+            If Me.RecordLength = -1 Then
+                Stream.Unlock(FromRecord - 1, ToRecord - FromRecord)
+            Else
+                Stream.Unlock((FromRecord - 1) * RecordLength, (ToRecord - 
FromRecord) * RecordLength)
+            End If
+        End Sub
+
+        Public Sub Write(ByVal ParamArray Output() As Object)
+            For i As Integer = 0 To Output.Length - 1
+                Dim item As Object = Output(i)
+
+                If item IsNot Nothing Then
+                    Dim iConv As IConvertible = TryCast(item, IConvertible)
+                    Dim tc As TypeCode
+                    If iConv IsNot Nothing Then
+                        tc = iConv.GetTypeCode
+                    Else
+                        tc = Type.GetTypeCode(item.GetType)
+                    End If
+                    Select Case tc
+                        Case TypeCode.Boolean
+                            If DirectCast(item, Boolean) Then
+                                Writer.Write("#TRUE#")
+                            Else
+                                Writer.Write("#FALSE")
+                            End If
+                        Case TypeCode.Byte
+                            Writer.Write(DirectCast(item, Byte))
+                        Case TypeCode.Char
+                            Writer.Write("""")
+                            Writer.Write(DirectCast(item, Char))
+                            Writer.Write("""")
+                        Case TypeCode.DateTime
+                            Writer.Write(DirectCast(item, Date).ToString()) 
'FIXME: Check date format
+                        Case TypeCode.DBNull
+                            Writer.Write("#NULL#")
+                        Case TypeCode.Decimal
+                            Writer.Write(DirectCast(item, Decimal))
+                        Case TypeCode.Double
+                            Writer.Write(DirectCast(item, Double))
+                        Case TypeCode.Int16
+                            Writer.Write(DirectCast(item, Short))
+                        Case TypeCode.Int32
+                            Writer.Write(DirectCast(item, Integer))
+                        Case TypeCode.Int64
+                            Writer.Write(DirectCast(item, Long))
+                        Case TypeCode.SByte
+                            Writer.Write(DirectCast(item, SByte))
+                        Case TypeCode.Single
+                            Writer.Write(DirectCast(item, Single))
+                        Case TypeCode.String
+                            Writer.Write("""")
+                            Writer.Write(DirectCast(item, String))
+                            Writer.Write("""")
+                        Case TypeCode.UInt16
+                            Writer.Write(DirectCast(item, UShort))
+                        Case TypeCode.UInt32
+                            Writer.Write(DirectCast(item, UInteger))
+                        Case TypeCode.UInt64
+                            Writer.Write(DirectCast(item, ULong))
+                        Case TypeCode.Object
+                            If TypeOf item Is ErrObject Then
+                                Writer.Write("#ERROR " & DirectCast(item, 
ErrObject).Number & "#")
+                            Else
+                                Throw New NotImplementedException("Can't write 
object of type: " & item.GetType().FullName)
+                            End If
+                    End Select
+                End If
+
+                If i < Output.Length - 1 Then
+                    Writer.Write(","c)
+                End If
+            Next
+        End Sub
+
+        Public Sub WriteLine(ByVal ParamArray Output() As Object)
+            Write(Output)
+            Writer.Write(vbCrLf)
+        End Sub
+    End Class
+End Namespace


Property changes on: 
trunk/mono-basic/vbruntime/Microsoft.VisualBasic/Microsoft.VisualBasic/FileData.vb
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: trunk/mono-basic/vbruntime/Test/Microsoft.VisualBasic/ChangeLog
===================================================================
--- trunk/mono-basic/vbruntime/Test/Microsoft.VisualBasic/ChangeLog     
2007-12-24 10:22:40 UTC (rev 91854)
+++ trunk/mono-basic/vbruntime/Test/Microsoft.VisualBasic/ChangeLog     
2007-12-24 12:16:09 UTC (rev 91855)
@@ -1,3 +1,8 @@
+2007-12-24  Rolf Bjarne Kvinge <[EMAIL PROTECTED]> 
+
+       * FileSystemTests2.vb: Added, contains code for the missing fileio 
support.
+         Not included in build yet, since it's not working for the moment.
+
 2007-08-14  Rolf Bjarne Kvinge <[EMAIL PROTECTED]> 
 
        * FileSystemTests.vb: Remove some warnings and make assert messages more

Added: trunk/mono-basic/vbruntime/Test/Microsoft.VisualBasic/FileSystemTests2.vb
===================================================================
--- trunk/mono-basic/vbruntime/Test/Microsoft.VisualBasic/FileSystemTests2.vb   
2007-12-24 10:22:40 UTC (rev 91854)
+++ trunk/mono-basic/vbruntime/Test/Microsoft.VisualBasic/FileSystemTests2.vb   
2007-12-24 12:16:09 UTC (rev 91855)
@@ -0,0 +1,714 @@
+'
+' FileSystemTests2.vb - NUnit Test Cases for Microsoft.VisualBasic.FileSystem 
+'
+' Rolf Bjarne Kvinge  ([EMAIL PROTECTED])
+'
+' 
+'
+' Copyright (C) 2007 Novell, Inc (http://www.novell.com)
+'
+' Permission is hereby granted, free of charge, to any person obtaining
+' a copy of this software and associated documentation files (the
+' "Software"), to deal in the Software without restriction, including
+' without limitation the rights to use, copy, modify, merge, publish,
+' distribute, sublicense, and/or sell copies of the Software, and to
+' permit persons to whom the Software is furnished to do so, subject to
+' the following conditions:
+' 
+' The above copyright notice and this permission notice shall be
+' included in all copies or substantial portions of the Software.
+' 
+' THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+' EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+' MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+' NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+' LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+' OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+' WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+'
+Imports NUnit.Framework
+Imports System
+Imports System.IO
+Imports System.Text
+Imports System.Collections
+Imports System.Threading
+Imports Microsoft.VisualBasic
+
+<Category("Broken"), TestFixture(), Category("MayFailOnSharedDrived"), 
Ignore("Not implemented yet")> _
+Public Class FileSystemTests2
+    Private DATA_DIR As String
+
+    Sub New()
+        DATA_DIR = Environment.GetEnvironmentVariable("DATA_DIR")
+        If DATA_DIR Is Nothing OrElse DATA_DIR = String.Empty Then
+            DATA_DIR = Path.Combine(Directory.GetCurrentDirectory(), 
"FileSystemTests2")
+        End If
+    End Sub
+
+    Private Function JoinBytes(ByVal Bytes() As Byte) As String
+        Dim result As New StringBuilder
+
+        For i As Integer = 0 To Bytes.Length - 1
+            result.Append(Hex(Bytes(i)))
+            If i < Bytes.Length - 1 Then
+                result.Append("-"c)
+            End If
+        Next
+
+        Return result.ToString
+    End Function
+
+
+    Private Sub Initialize(ByVal FilenameToCreate As String, ByVal Contents As 
String)
+        Initialize()
+        IO.File.WriteAllText(FilenameToCreate, Contents, 
System.Text.ASCIIEncoding.ASCII)
+    End Sub
+
+    Private Sub Initialize(ByVal FilenameToCreate As String)
+        Initialize()
+        IO.File.WriteAllBytes(FilenameToCreate, New Byte() {})
+    End Sub
+
+    Private Sub Initialize()
+        If Not Directory.Exists(DATA_DIR) Then
+            Directory.CreateDirectory(DATA_DIR)
+        End If
+    End Sub
+
+    Private Sub CleanUp()
+        'Close all files and delete them
+        Microsoft.VisualBasic.FileSystem.FileClose()
+        If Directory.Exists(DATA_DIR) Then
+            Directory.Delete(DATA_DIR, True)
+        End If
+    End Sub
+
+#Region "FreeFile"
+    <Test()> _
+    Public Sub FreeFileTest1()
+        'First free file# is 1
+        'This test may fail if there are open files.
+        'Besides, there are no guarantees that the first file# will be 1
+        Assert.AreEqual(1, FreeFile, "#01")
+    End Sub
+
+    <Test(), ExpectedException(GetType(IOException), "Too many files.")> _
+    Public Sub FreeFileTest2()
+        Dim openedAll As Boolean
+        Try
+            'Use up all the file numbers
+            For i As Integer = 1 To 255
+                FileOpen(i, 
System.Reflection.Assembly.GetExecutingAssembly.Location, OpenMode.Binary, 
OpenAccess.Read, OpenShare.Shared)
+            Next
+            openedAll = True
+            FreeFile() 'This should cause the exception
+        Finally
+            CleanUp()
+            Assert.IsTrue(openedAll, "Opened all files")
+        End Try
+    End Sub
+#End Region
+
+#Region "FileOpen"
+    <Test()> _
+    Public Sub FileOpenTestRandom1()
+        Try
+            Dim data As String
+            Dim filename As String = IO.Path.Combine(DATA_DIR, 
System.Reflection.MethodInfo.GetCurrentMethod.Name)
+            Initialize()
+
+            'Default access and share
+            FileOpen(1, filename, OpenMode.Random, OpenAccess.Default, 
OpenShare.Default)
+            data = "abc"
+            FilePut(1, data) 'We can write
+            FileGet(1, data) 'We can read
+            Assert.AreEqual("", data, "#01")
+            Seek(1, 1)
+            FileGet(1, data)
+            Assert.AreEqual("abc", data, "#02")
+            FileClose(1)
+        Finally
+            CleanUp()
+        End Try
+    End Sub
+
+    <Test(), ExpectedException(GetType(IOException))> _
+    Public Sub FileOpenTestRandom1_Locked()
+        Try
+            Dim data As String
+            Dim filename As String = IO.Path.Combine(DATA_DIR, 
System.Reflection.MethodInfo.GetCurrentMethod.Name)
+            Initialize()
+
+            'Default access and share
+            FileOpen(1, filename, OpenMode.Random, OpenAccess.Default, 
OpenShare.Default)
+            data = "abc"
+            FilePut(1, data)
+            data = IO.File.ReadAllText(filename) 'Default share is none at 
all, so this should throw an exception
+        Finally
+            CleanUp()
+        End Try
+    End Sub
+
+    <Test()> _
+    Public Sub FileOpenTestRandom2()
+        Try
+            Dim data As String
+            Dim filename As String = IO.Path.Combine(DATA_DIR, 
System.Reflection.MethodInfo.GetCurrentMethod.Name)
+            Initialize()
+
+            'Read access and default share
+            FileOpen(1, filename, OpenMode.Random, OpenAccess.Read, 
OpenShare.Default)
+            data = "abc"
+            FileGet(1, data) 'We can read
+            Assert.AreEqual("", data, "#01")
+            FileClose(1)
+        Finally
+            CleanUp()
+        End Try
+    End Sub
+
+    <Test(), ExpectedException(GetType(IOException), "File is not opened for 
write access.")> _
+    Public Sub FileOpenTestRandom2_b()
+        Try
+            Dim data As String
+            Dim filename As String = IO.Path.Combine(DATA_DIR, 
System.Reflection.MethodInfo.GetCurrentMethod.Name)
+            Initialize()
+
+            'Read access and default share
+            FileOpen(1, filename, OpenMode.Random, OpenAccess.Read, 
OpenShare.Default)
+            data = "abc"
+            FileGet(1, data) 'We can read
+            FilePut(1, data) 'We can't write
+        Finally
+            CleanUp()
+        End Try
+    End Sub
+
+    <Test()> _
+    Public Sub FileOpenTestRandom3()
+        Try
+            Dim data As String
+            Dim filename As String = IO.Path.Combine(DATA_DIR, 
System.Reflection.MethodInfo.GetCurrentMethod.Name)
+            Initialize()
+
+            'Write access and default share
+            FileOpen(1, filename, OpenMode.Random, OpenAccess.Write, 
OpenShare.Default)
+            data = "abc"
+            FilePut(1, data) 'We can write
+            FileClose(1)
+        Finally
+            CleanUp()
+        End Try
+    End Sub
+
+    <Test(), ExpectedException(GetType(IOException), "File is not opened for 
read access.")> _
+    Public Sub FileOpenTestRandom3_b()
+        Try
+            Dim data As String
+            Dim filename As String = IO.Path.Combine(DATA_DIR, 
System.Reflection.MethodInfo.GetCurrentMethod.Name)
+            Initialize()
+
+            'Write access and default share
+            FileOpen(1, filename, OpenMode.Random, OpenAccess.Write, 
OpenShare.Default)
+            data = "abc"
+            FilePut(1, data) 'We can write
+            FileGet(1, data) 'We can't read
+        Finally
+            CleanUp()
+        End Try
+    End Sub
+
+    <Test()> _
+    Public Sub FileOpenTestRandom4()
+        Try
+            Dim data As String
+            Dim filename As String = IO.Path.Combine(DATA_DIR, 
System.Reflection.MethodInfo.GetCurrentMethod.Name)
+            Initialize()
+
+            'R/W access and default share
+            FileOpen(1, filename, OpenMode.Random, OpenAccess.ReadWrite, 
OpenShare.Default)
+            data = "abc"
+            FilePut(1, data) 'We can write
+            FileGet(1, data) 'We can read
+            Assert.AreEqual("", data, "#01")
+            Seek(1, 1)
+            FileGet(1, data)
+            Assert.AreEqual("abc", data, "#02")
+            FileClose(1)
+        Finally
+            CleanUp()
+        End Try
+    End Sub
+
+
+    <Test()> _
+    Public Sub FileOpenTestInput1()
+        Try
+            Dim data As String = Nothing
+            Dim filename As String = IO.Path.Combine(DATA_DIR, 
System.Reflection.MethodInfo.GetCurrentMethod.Name)
+            Initialize(filename, "abc")
+
+            'Default access and share
+            FileOpen(1, filename, OpenMode.Input, OpenAccess.Default, 
OpenShare.Default)
+            data = LineInput(1) 'We can read
+            Assert.AreEqual("abc", data, "#01")
+        Finally
+            CleanUp()
+        End Try
+    End Sub
+
+    <Test(), ExpectedException(GetType(IOException))> _
+    Public Sub FileOpenTestInput1_Locked()
+        Try
+            Dim data As String
+            Dim filename As String = IO.Path.Combine(DATA_DIR, 
System.Reflection.MethodInfo.GetCurrentMethod.Name)
+            Initialize(filename, "abc")
+
+            'Default access and share
+            FileOpen(1, filename, OpenMode.Input, OpenAccess.Default, 
OpenShare.Default)
+            data = IO.File.ReadAllText(filename) 'Default share is none at 
all, so this should throw an exception
+        Finally
+            CleanUp()
+        End Try
+    End Sub
+
+    <Test()> _
+    Public Sub FileOpenTestInput2()
+        Try
+            Dim data As String = Nothing
+            Dim filename As String = IO.Path.Combine(DATA_DIR, 
System.Reflection.MethodInfo.GetCurrentMethod.Name)
+            Initialize(filename, "abc")
+
+            'Read access and default share
+            FileOpen(1, filename, OpenMode.Input, OpenAccess.Read, 
OpenShare.Default)
+            data = LineInput(1) 'We can read
+            Assert.AreEqual("abc", data, "#01")
+            FileClose(1)
+        Finally
+            CleanUp()
+        End Try
+    End Sub
+
+    <Test(), ExpectedException(GetType(IOException), "Bad file mode.")> _
+    Public Sub FileOpenTestInput2_b()
+        Try
+            Dim data As String = Nothing
+            Dim filename As String = IO.Path.Combine(DATA_DIR, 
System.Reflection.MethodInfo.GetCurrentMethod.Name)
+            Initialize(filename, "bcd")
+
+            'Read access and default share
+            FileOpen(1, filename, OpenMode.Input, OpenAccess.Read, 
OpenShare.Default)
+            Write(1, "abc") 'We can't write
+        Finally
+            CleanUp()
+        End Try
+    End Sub
+
+    <Test(), ExpectedException(GetType(ArgumentException), "Argument 'Access' 
is not valid. Valid values for Input mode are 'OpenAccess.Read' and 
'OpenAccess.Default'.")> _
+    Public Sub FileOpenTestInput3()
+        Try
+            Dim filename As String = IO.Path.Combine(DATA_DIR, 
System.Reflection.MethodInfo.GetCurrentMethod.Name)
+            Initialize(filename)
+
+            'Write access and default share
+            FileOpen(1, filename, OpenMode.Input, OpenAccess.Write, 
OpenShare.Default)
+        Finally
+            CleanUp()
+        End Try
+    End Sub
+
+    <Test(), ExpectedException(GetType(ArgumentException), "Argument 'Access' 
is not valid. Valid values for Input mode are 'OpenAccess.Read' and 
'OpenAccess.Default'.")> _
+    Public Sub FileOpenTestInput4()
+        Try
+            Dim filename As String = IO.Path.Combine(DATA_DIR, 
System.Reflection.MethodInfo.GetCurrentMethod.Name)
+            Initialize(filename)
+
+            'R/W access and default share
+            FileOpen(1, filename, OpenMode.Input, OpenAccess.ReadWrite, 
OpenShare.Default)
+        Finally
+            CleanUp()
+        End Try
+    End Sub
+
+
+    <Test(), ExpectedException(GetType(FileNotFoundException))> _
+    Public Sub FileOpenTestInput5()
+        Try
+            Dim filename As String = IO.Path.Combine(DATA_DIR, 
System.Reflection.MethodInfo.GetCurrentMethod.Name)
+            Initialize() 'Not creating the file here
+
+            'Default access and share
+            FileOpen(1, filename, OpenMode.Input, OpenAccess.Default, 
OpenShare.Default)
+            FileClose(1)
+        Finally
+            CleanUp()
+        End Try
+    End Sub
+
+    <Test(), ExpectedException(GetType(IOException), "Bad file mode.")> _
+    Public Sub FileOpenTestInput6()
+        Try
+            Dim data As String = Nothing
+            Dim filename As String = IO.Path.Combine(DATA_DIR, 
System.Reflection.MethodInfo.GetCurrentMethod.Name)
+            Initialize(filename, "abc")
+
+            'Default access and share
+            FileOpen(1, filename, OpenMode.Input, OpenAccess.Default, 
OpenShare.Default)
+            FileGet(1, data) 'We can't use FileGet for sequential files
+        Finally
+            CleanUp()
+        End Try
+    End Sub
+
+    <Test()> _
+    Public Sub FileOpenTestOutput1()
+        Try
+            Dim data As String
+            Dim filename As String = IO.Path.Combine(DATA_DIR, 
System.Reflection.MethodInfo.GetCurrentMethod.Name)
+            Initialize()
+
+            'Default access and share
+            FileOpen(1, filename, OpenMode.Output, OpenAccess.Default, 
OpenShare.Default)
+            Assert.IsTrue(File.Exists(filename), "exists")
+            data = "abc"
+            Print(1, data) 'We can write
+            'Seek(1, 1)
+            'data = LineInput(1) 'We can read
+            'Assert.AreEqual("abc", data, "#01")
+            FileClose(1)
+            Assert.AreEqual("abc", File.ReadAllText(filename))
+        Finally
+            CleanUp()
+        End Try
+    End Sub
+
+    <Test(), ExpectedException(GetType(IOException))> _
+    Public Sub FileOpenTestOutput1_Locked()
+        Try
+            Dim data As String
+            Dim filename As String = IO.Path.Combine(DATA_DIR, 
System.Reflection.MethodInfo.GetCurrentMethod.Name)
+            Initialize()
+
+            'Default access and share
+            FileOpen(1, filename, OpenMode.Output, OpenAccess.Default, 
OpenShare.Default)
+            Assert.IsTrue(File.Exists(filename), "exists")
+            data = "abc"
+            Write(1, data)
+            data = IO.File.ReadAllText(filename) 'Default share is none at 
all, so this should throw an exception
+        Finally
+            CleanUp()
+        End Try
+    End Sub
+
+    <Test()> _
+    Public Sub FileOpenTestOutput2()
+        Try
+            Dim data As String
+            Dim filename As String = IO.Path.Combine(DATA_DIR, 
System.Reflection.MethodInfo.GetCurrentMethod.Name)
+            Initialize()
+
+            'Read access and default share
+            FileOpen(1, filename, OpenMode.Output, OpenAccess.Write, 
OpenShare.Default)
+            Assert.IsTrue(File.Exists(filename), "exists")
+            data = "abc"
+            Write(1, data) 'We can write
+            FileClose(1)
+            Assert.AreEqual("""abc"",", File.ReadAllText(filename))
+        Finally
+            CleanUp()
+        End Try
+    End Sub
+
+    <Test(), ExpectedException(GetType(IOException), "Bad file mode.")> _
+    Public Sub FileOpenTestOutput2_b()
+        Try
+            Dim data As String
+            Dim filename As String = IO.Path.Combine(DATA_DIR, 
System.Reflection.MethodInfo.GetCurrentMethod.Name)
+            Initialize()
+
+            'Read access and default share
+            FileOpen(1, filename, OpenMode.Output, OpenAccess.Write, 
OpenShare.Default)
+            Assert.IsTrue(File.Exists(filename), "exists")
+            data = "abc"
+            Write(1, data) 'We can write
+            data = LineInput(1) 'We can't read
+        Finally
+            CleanUp()
+        End Try
+    End Sub
+
+    <Test(), ExpectedException(GetType(ArgumentException), "Argument 'Access' 
is not valid. Valid values for Output mode are 'OpenAccess.Write' and 
'OpenAccess.Default'.")> _
+    Public Sub FileOpenTestOutput3()
+        Try
+            Dim filename As String = IO.Path.Combine(DATA_DIR, 
System.Reflection.MethodInfo.GetCurrentMethod.Name)
+            Initialize()
+
+            'Write access and default share
+            FileOpen(1, filename, OpenMode.Output, OpenAccess.Read, 
OpenShare.Default)
+        Finally
+            CleanUp()
+        End Try
+    End Sub
+
+    <Test(), ExpectedException(GetType(ArgumentException), "Argument 'Access' 
is not valid. Valid values for Output mode are 'OpenAccess.Write' and 
'OpenAccess.Default'.")> _
+    Public Sub FileOpenTestOutput4()
+        Try
+            Dim filename As String = IO.Path.Combine(DATA_DIR, 
System.Reflection.MethodInfo.GetCurrentMethod.Name)
+            Initialize()
+
+            'R/W access and default share
+            FileOpen(1, filename, OpenMode.Output, OpenAccess.ReadWrite, 
OpenShare.Default)
+        Finally
+            CleanUp()
+        End Try
+    End Sub
+
+    <Test()> _
+    Public Sub FileOpenTestAppend1()
+        Try
+            Dim data As String = Nothing
+            Dim filename As String = IO.Path.Combine(DATA_DIR, 
System.Reflection.MethodInfo.GetCurrentMethod.Name)
+            Initialize(filename, "abc")
+
+            'Default access and share
+            FileOpen(1, filename, OpenMode.Append, OpenAccess.Default, 
OpenShare.Default)
+            Print(1, "def") 'We can write
+            FileClose(1)
+            Assert.AreEqual("abcdef", File.ReadAllText(filename), "#01")
+        Finally
+            CleanUp()
+        End Try
+    End Sub
+
+    <Test(), ExpectedException(GetType(IOException))> _
+    Public Sub FileOpenTestAppend1_Locked()
+        Try
+            Dim data As String
+            Dim filename As String = IO.Path.Combine(DATA_DIR, 
System.Reflection.MethodInfo.GetCurrentMethod.Name)
+            Initialize(filename, "abc")
+
+            'Default access and share
+            FileOpen(1, filename, OpenMode.Append, OpenAccess.Default, 
OpenShare.Default)
+            data = IO.File.ReadAllText(filename) 'Default share is none at 
all, so this should throw an exception
+        Finally
+            CleanUp()
+        End Try
+    End Sub
+
+    <Test()> _
+    Public Sub FileOpenTestAppend2()
+        Try
+            Dim data As String = Nothing
+            Dim filename As String = IO.Path.Combine(DATA_DIR, 
System.Reflection.MethodInfo.GetCurrentMethod.Name)
+            Initialize(filename, "abc")
+
+            'Write access and default share
+            FileOpen(1, filename, OpenMode.Append, OpenAccess.Write, 
OpenShare.Default)
+            Print(1, "def") 'We can write
+            FileClose(1)
+            Assert.AreEqual("abcdef", File.ReadAllText(filename), "#01")
+        Finally
+            CleanUp()
+        End Try
+    End Sub
+
+    <Test(), ExpectedException(GetType(ArgumentException), "Argument 'Access' 
is not valid. Valid values for Append mode are 'OpenAccess.Write' and 
'OpenAccess.Default'.")> _
+    Public Sub FileOpenTestAppend3()
+        Try
+            Dim filename As String = IO.Path.Combine(DATA_DIR, 
System.Reflection.MethodInfo.GetCurrentMethod.Name)
+            Initialize(filename)
+
+            'Read access and default share
+            FileOpen(1, filename, OpenMode.Append, OpenAccess.Read, 
OpenShare.Default)
+        Finally
+            CleanUp()
+        End Try
+    End Sub
+
+    <Test()> _
+    Public Sub FileOpenTestAppend4()
+        Try
+            Dim filename As String = IO.Path.Combine(DATA_DIR, 
System.Reflection.MethodInfo.GetCurrentMethod.Name)
+            Initialize(filename, "abc")
+
+            'R/W access and default share
+            FileOpen(1, filename, OpenMode.Append, OpenAccess.ReadWrite, 
OpenShare.Default)
+            Seek(1, 1)
+            Print(1, "def") 'We can write
+            FileClose(1)
+            Assert.AreEqual("def", File.ReadAllText(filename), "#01")
+        Finally
+            CleanUp()
+        End Try
+    End Sub
+
+
+    <Test()> _
+    Public Sub FileOpenTestAppend5()
+        Try
+            Dim filename As String = IO.Path.Combine(DATA_DIR, 
System.Reflection.MethodInfo.GetCurrentMethod.Name)
+            Initialize() 'Not creating the file here
+
+            'Default access and share
+            FileOpen(1, filename, OpenMode.Append, OpenAccess.Default, 
OpenShare.Default)
+            FileClose(1)
+        Finally
+            CleanUp()
+        End Try
+    End Sub
+
+    <Test(), ExpectedException(GetType(IOException), "Bad file mode.")> _
+    Public Sub FileOpenTestAppend6()
+        Try
+            Dim data As String = Nothing
+            Dim filename As String = IO.Path.Combine(DATA_DIR, 
System.Reflection.MethodInfo.GetCurrentMethod.Name)
+            Initialize(filename, "abc")
+
+            'Default access and share
+            FileOpen(1, filename, OpenMode.Input, OpenAccess.Default, 
OpenShare.Default)
+            FileGet(1, data) 'We can't use FileGet for sequential files
+        Finally
+            CleanUp()
+        End Try
+    End Sub
+
+    <Test()> _
+    Public Sub FileOpenTestBinary1()
+        Try
+            Dim data As String = Nothing
+            Dim b As Byte
+            Dim filename As String = IO.Path.Combine(DATA_DIR, 
System.Reflection.MethodInfo.GetCurrentMethod.Name)
+            Initialize(filename, "abc")
+
+            'Default access and share
+            FileOpen(1, filename, OpenMode.Binary, OpenAccess.Default, 
OpenShare.Default)
+            FileGet(1, b) 'We can read
+            Assert.AreEqual(Asc("a"), b, "#01")
+            FilePut(1, "def") 'We can write
+            FileClose(1)
+            Assert.AreEqual("adef", File.ReadAllText(filename), "#02")
+            Assert.AreEqual("61-64-65-66", 
JoinBytes(File.ReadAllBytes(filename)), "#03")
+        Finally
+            CleanUp()
+        End Try
+    End Sub
+
+    <Test(), ExpectedException(GetType(IOException))> _
+    Public Sub FileOpenTestBinary1_Locked()
+        Try
+            Dim data As String
+            Dim filename As String = IO.Path.Combine(DATA_DIR, 
System.Reflection.MethodInfo.GetCurrentMethod.Name)
+            Initialize(filename, "abc")
+
+            'Default access and share
+            FileOpen(1, filename, OpenMode.Binary, OpenAccess.Default, 
OpenShare.Default)
+            data = IO.File.ReadAllText(filename) 'Default share is none at 
all, so this should throw an exception
+        Finally
+            CleanUp()
+        End Try
+    End Sub
+
+    <Test()> _
+    Public Sub FileOpenTestBinary2()
+        Try
+            Dim data As String = Nothing
+            Dim filename As String = IO.Path.Combine(DATA_DIR, 
System.Reflection.MethodInfo.GetCurrentMethod.Name)
+            Initialize(filename, "abc")
+
+            'R/W access and default share
+            FileOpen(1, filename, OpenMode.Binary, OpenAccess.ReadWrite, 
OpenShare.Default)
+            FileGet(1, data) 'We can read
+            Assert.AreEqual(Nothing, data, "#01")
+            FilePut(1, "abc") 'We can write
+            Seek(1, 2) 'We can seek
+            FilePut(1, "ghi")
+            FileClose(1)
+            Assert.AreEqual("aghi", File.ReadAllText(filename), "#02")
+        Finally
+            CleanUp()
+        End Try
+    End Sub
+
+    <Test(), ExpectedException(GetType(IOException), "File is not opened for 
write access.")> _
+    Public Sub FileOpenTestBinary2_b()
+        Try
+            Dim data As String = Nothing
+            Dim filename As String = IO.Path.Combine(DATA_DIR, 
System.Reflection.MethodInfo.GetCurrentMethod.Name)
+            Initialize(filename, "bcd")
+
+            'Read access and default share
+            FileOpen(1, filename, OpenMode.Binary, OpenAccess.Read, 
OpenShare.Default)
+            FilePut(1, data) 'We can't write
+        Finally
+            CleanUp()
+        End Try
+    End Sub
+
+    <Test(), ExpectedException(GetType(IOException), "File is not opened for 
read access.")> _
+    Public Sub FileOpenTestBinary3()
+        Try
+            Dim data As String = Nothing
+            Dim filename As String = IO.Path.Combine(DATA_DIR, 
System.Reflection.MethodInfo.GetCurrentMethod.Name)
+            Initialize(filename)
+
+            'Write access and default share
+            FileOpen(1, filename, OpenMode.Binary, OpenAccess.Write, 
OpenShare.Default)
+            FileGet(1, data) 'We can't read
+        Finally
+            CleanUp()
+        End Try
+    End Sub
+
+    <Test()> _
+    Public Sub FileOpenTestBinary4()
+        Try
+            Dim data As String = Nothing
+            Dim filename As String = IO.Path.Combine(DATA_DIR, 
System.Reflection.MethodInfo.GetCurrentMethod.Name)
+            Initialize(filename)
+
+            'R/W access and default share
+            FileOpen(1, filename, OpenMode.Binary, OpenAccess.ReadWrite, 
OpenShare.Default)
+            FileGet(1, data) 'We can read
+            Assert.AreEqual(Nothing, data, "#01")
+            Seek(1, 3) 'We can seek
+            FilePut(1, "abc") 'We can write
+            Seek(1, 1) 'We can seek
+            FilePut(1, "ghi")
+            FileClose(1)
+            Assert.AreEqual("ghibc", File.ReadAllText(filename), "#02")
+        Finally
+            CleanUp()
+        End Try
+    End Sub
+
+
+    <Test()> _
+    Public Sub FileOpenTestBinary5()
+        Try
+            Dim filename As String = IO.Path.Combine(DATA_DIR, 
System.Reflection.MethodInfo.GetCurrentMethod.Name)
+            Initialize() 'Not creating the file here
+
+            'Default access and share
+            FileOpen(1, filename, OpenMode.Binary, OpenAccess.Default, 
OpenShare.Default)
+            FileClose(1)
+        Finally
+            CleanUp()
+        End Try
+    End Sub
+
+    <Test()> _
+    Public Sub FileOpenTestBinary6()
+        Try
+            Dim data As String = Nothing
+            Dim filename As String = IO.Path.Combine(DATA_DIR, 
System.Reflection.MethodInfo.GetCurrentMethod.Name)
+            Initialize(filename, "abc")
+
+            'Default access and share
+            FileOpen(1, filename, OpenMode.Binary, OpenAccess.Default, 
OpenShare.Default)
+            data = LineInput(1) 'We can use (Line)Input for binary files
+        Finally
+            CleanUp()
+        End Try
+    End Sub
+#End Region
+End Class


Property changes on: 
trunk/mono-basic/vbruntime/Test/Microsoft.VisualBasic/FileSystemTests2.vb
___________________________________________________________________
Name: svn:eol-style
   + native

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to