Beispiel #1
0
def database_tests():
    # FIX ME: SET SAFETY OFF
    # FIX ME: SET ASSERTS ON
    try:
        DB.create_table('report',
                        'name c(50); st c(2); quantity n(5, 0); received l',
                        'free')
        assert os.path.isfile('report.dbf')
        assert DB.used('report')
        try:
            DB.use('report', 0, 'shared')
            assert False
        except Exception as err:
            S.oerr = vfpfunc.Exception.from_pyexception(err)
            print(S.oerr.message)
            assert S.oerr.message == 'File is in use.'
        _add_db_record(0)
        _add_db_record(1)
        _add_db_record(2)
        _add_db_record(3)
        assert DB.cpdbf() == 0
        assert DB.fcount() == 4
        DB.alter_table('report', 'add', 'age n(3, 0)')
        assert DB.fcount() == 5
        assert DB.field(2) == 'st'
        assert not DB.found()
        DB.goto(None, 0)
        M.add_local('loopcount')
        S.loopcount = 0
        for _ in DB.scanner(scope=('rest', )):
            assert len(S.name.strip()) > 0
            S.loopcount += 1
        assert S.loopcount == 4
        DB.goto(None, 3)
        S.loopcount = 0
        for _ in DB.scanner(scope=('all', ),
                            condition=lambda: S.st.strip() == 'ID'):
            assert len(S.name.strip()) > 0
            S.loopcount += 1
        assert S.loopcount == 2
        S.loopcount = 0
        for _ in DB.scanner(scope=('rest', ),
                            condition=lambda: S.st.strip() == 'ID'):
            assert len(S.name.strip()) > 0
            S.loopcount += 1
        assert S.loopcount == 0
        DB.goto(None, 0)
        S.loopcount = 0
        for _ in DB.scanner(scope=('rest', ),
                            condition=lambda: S.st.strip() == 'ID'):
            assert len(S.name.strip()) > 0
            S.loopcount += 1
        assert S.loopcount == 2
        del M.loopcount
        assert S.name.strip(
        ) == 'Norma Fisher', S.name.strip() + ' should be Norma Fisher'
        assert DB.recno() == 1
        S.report_record = vfpfunc.scatter(totype='name')
        assert S.report_record.name.strip(
        ) == 'Norma Fisher', S.report_record.name.strip(
        ) + ' should be Norma Fisher'
        DB.goto(None, -1)
        assert S.name.strip(
        ) == 'Joshua Wood', S.name.strip() + ' should be Joshua Wood'
        assert S.report_record.name.strip(
        ) == 'Norma Fisher', S.report_record.name.strip(
        ) + ' should be Norma Fisher'
        assert DB.recno() == 4
        DB.goto(None, 1)
        DB.locate(for_cond=lambda: S.st == 'ID')
        assert S.name.strip(
        ) == 'Norma Fisher', S.name.strip() + ' should be Norma Fisher'
        assert DB.found()
        DB.continue_locate()
        assert S.name.strip(
        ) == 'Ryan Gallagher', S.name.strip() + ' should be Ryan Gallagher'
        DB.continue_locate()
        assert DB.eof()
        assert DB.recno() == DB.reccount() + 1
        assert not DB.found()
        S.countval = DB.count(None, ('all', ),
                              for_cond=lambda: S.quantity > 60)
        assert S.countval == 2
        assert DB.eof()
        S.sumval = DB.sum(None, ('rest', ),
                          lambda: math.sqrt(S.quantity + 205),
                          for_cond=lambda: S.quantity > 50,
                          while_cond=lambda: S.quantity != 63)
        assert S.sumval == 0
        DB.goto(None, 0)
        S.sumval = DB.sum(None, ('rest', ),
                          lambda: math.sqrt(S.quantity + 205),
                          for_cond=lambda: S.quantity > 50,
                          while_cond=lambda: S.quantity != 63)
        assert S.sumval == 17 + 16
        DB.index_on('st', 'st', 'ascending', True, False, False)
        DB.seek(None, 'CA')
        assert S.st.strip() == 'CA'
        DB.goto(None, 0)
        DB.delete_record(None, ('rest', ), for_cond=lambda: S.quantity > 60)
        DB.pack('both', None, None)
        DB.goto(None, 0)
        assert DB.reccount() == 2
        DB.replace('report', ('next', 1), 'name', 'N/A')
        assert S.name.strip() == 'N/A'
        DB.replace(None, ('all', ), 'name', 'Not Available')
        assert DB.recno() == DB.reccount() + 1
        DB.goto(None, -1)
        assert S.name.strip() == 'Not Available'
        DB.zap(None)
        assert DB.reccount() == 0
        DB.copy_structure('report2')
        DB.use('report2', 0, 'shared', alias='somethingelse')
        assert DB.alias() == 'report'
        DB.select('report2')
        assert DB.alias() == 'somethingelse'
        assert DB.fcount() == 5
        DB.alter_table('report2', 'drop', 'st')
        assert DB.fcount() == 4
        assert S.report_record.name.strip(
        ) == 'Norma Fisher', S.report_record.name.strip(
        ) + ' should be Norma Fisher'
        DB.append(None, False)
        vfpfunc.gather(val=S.report_record)
        assert S.name.strip(
        ) == 'Norma Fisher', S.name.strip() + ' should be Norma Fisher'
        assert DB.dbf() == 'report2.dbf'
        DB.use(None, DB.select_function('report2'), None)
        DB.use(None, DB.select_function('report'), None)
        os.remove('report2.dbf')
    except Exception as err:
        S.err = vfpfunc.Exception.from_pyexception(err)
        print(S.err.message)
        DB.browse()
        raise
    finally:
        os.remove('report.dbf')
    S.sqlconn = vfpfunc.sqlconnect('testodbc')
    assert S.sqlconn > 0
    assert vfpfunc.sqlexec(
        S.sqlconn,
        'CREATE TABLE REPORT (NAME varchar(50), ST char(2), QUANTITY int(5), RECEIVED bit)'
    ) > 0
    assert _sqlexec_add_record(S.sqlconn, 0) > 0
    assert _sqlexec_add_record(S.sqlconn, 1) > 0
    assert _sqlexec_add_record(S.sqlconn, 2) > 0
    assert _sqlexec_add_record(S.sqlconn, 3) > 0
    assert vfpfunc.sqlexec(S.sqlconn, 'SELECT * FROM REPORT')
    DB.select('sqlresult')
    assert S.name.strip() == 'Norma Fisher'
    vfpfunc.sqlcommit(S.sqlconn)
    vfpfunc.sqldisconnect(S.sqlconn)
    S.sqlconn = vfpfunc.sqlstringconnect('dsn=testodbc')
    assert S.sqlconn > 0
    assert vfpfunc.sqltables(S.sqlconn) > 0
    DB.select('sqlresult')
    assert S.table_name.strip().lower() == 'report'
    assert vfpfunc.sqlexec(S.sqlconn, 'DELETE FROM REPORT;')
    assert vfpfunc.sqlrollback(S.sqlconn)
    assert vfpfunc.sqlexec(S.sqlconn, 'SELECT * FROM REPORT')
    DB.select('sqlresult')
    assert S.name.strip() == 'Norma Fisher'
    assert vfpfunc.sqlexec(S.sqlconn, 'DROP TABLE REPORT') > 0
    vfpfunc.sqlcommit(S.sqlconn)
    vfpfunc.sqldisconnect(S.sqlconn)
    DB.close_tables(False)
Beispiel #2
0
def database_tests():
    # FIX ME: SET SAFETY OFF
    # FIX ME: SET ASSERTS ON
    try:
        DB.create_table('report',
                        'name c(50); st c(2); quantity n(5, 0); received l',
                        'free')
        assert os.path.isfile('report.dbf')
        assert DB.used('report')
        try:
            DB.use('report', 0, 'shared')
            assert False
        except Exception as S.oerr:
            S.oerr = vfpfunc.Exception.from_pyexception(S.oerr)
            print(S.oerr.message)
            assert S.oerr.message == 'File is in use.'
        _add_db_record(0)
        _add_db_record(1)
        _add_db_record(2)
        _add_db_record(3)
        assert DB.fcount() == 4
        DB.alter_table('report', 'add', 'age n(3, 0)')
        assert DB.fcount() == 5
        assert DB.field(2) == 'st'
        assert not DB.found()
        DB.goto(None, 0)
        M.add_local('loopcount')
        S.loopcount = 0
        for _ in DB.scanner(scope=('rest', )):
            assert len(S.name.strip()) > 0
            S.loopcount += 1
        assert S.loopcount == 4
        DB.goto(None, 3)
        S.loopcount = 0
        for _ in DB.scanner(scope=('all', ),
                            condition=lambda: S.st.strip() == 'ID'):
            assert len(S.name.strip()) > 0
            S.loopcount += 1
        assert S.loopcount == 2
        S.loopcount = 0
        for _ in DB.scanner(scope=('rest', ),
                            condition=lambda: S.st.strip() == 'ID'):
            assert len(S.name.strip()) > 0
            S.loopcount += 1
        assert S.loopcount == 0
        DB.goto(None, 0)
        S.loopcount = 0
        for _ in DB.scanner(scope=('rest', ),
                            condition=lambda: S.st.strip() == 'ID'):
            assert len(S.name.strip()) > 0
            S.loopcount += 1
        assert S.loopcount == 2
        del M.loopcount
        assert S.name.strip(
        ) == 'Norma Fisher', S.name.strip() + ' should be Norma Fisher'
        assert DB.recno() == 1
        S.report_record = vfpfunc.scatter(totype='name')
        assert S.report_record.name.strip(
        ) == 'Norma Fisher', S.report_record.name.strip(
        ) + ' should be Norma Fisher'
        DB.goto(None, -1)
        assert S.name.strip(
        ) == 'Joshua Wood', S.name.strip() + ' should be Joshua Wood'
        assert S.report_record.name.strip(
        ) == 'Norma Fisher', S.report_record.name.strip(
        ) + ' should be Norma Fisher'
        assert DB.recno() == 4
        DB.goto(None, 1)
        DB.locate(for_cond=lambda: S.st == 'ID')
        assert S.name.strip(
        ) == 'Norma Fisher', S.name.strip() + ' should be Norma Fisher'
        assert DB.found()
        DB.continue_locate()
        assert S.name.strip(
        ) == 'Ryan Gallagher', S.name.strip() + ' should be Ryan Gallagher'
        DB.continue_locate()
        assert DB.eof()
        assert DB.recno() == DB.reccount() + 1
        assert not DB.found()
        S.countval = DB.count(None, ('all', ),
                              for_cond=lambda: S.quantity > 60)
        assert S.countval == 2
        assert DB.eof()
        S.sumval = DB.sum(None, ('rest', ),
                          lambda: math.sqrt(S.quantity + 205),
                          for_cond=lambda: S.quantity > 50,
                          while_cond=lambda: S.quantity != 63)
        assert S.sumval == 0
        DB.goto(None, 0)
        S.sumval = DB.sum(None, ('rest', ),
                          lambda: math.sqrt(S.quantity + 205),
                          for_cond=lambda: S.quantity > 50,
                          while_cond=lambda: S.quantity != 63)
        assert S.sumval == 17 + 16
        DB.index_on('st', 'st', 'ascending', True, False, False)
        DB.seek(None, 'CA')
        assert S.st.strip() == 'CA'
        DB.goto(None, 0)
        DB.delete_record(None, ('rest', ), for_cond=lambda: S.quantity > 60)
        DB.pack('both', None, None)
        DB.goto(None, 0)
        assert DB.reccount() == 2
        DB.replace('report', ('next', 1), 'name', 'N/A')
        assert S.name.strip() == 'N/A'
        DB.replace(None, ('all', ), 'name', 'Not Available')
        assert DB.recno() == DB.reccount() + 1
        DB.goto(None, -1)
        assert S.name.strip() == 'Not Available'
        DB.zap(None)
        assert DB.reccount() == 0
        DB.copy_structure('report2')
        DB.use('report2', 0, 'shared', alias='somethingelse')
        assert DB.alias() == 'report'
        DB.select('report2')
        assert DB.alias() == 'somethingelse'
        assert DB.fcount() == 5
        DB.alter_table('report2', 'drop', 'st')
        assert DB.fcount() == 4
        assert S.report_record.name.strip(
        ) == 'Norma Fisher', S.report_record.name.strip(
        ) + ' should be Norma Fisher'
        DB.append(None, False)
        vfpfunc.gather(val=S.report_record)
        assert S.name.strip(
        ) == 'Norma Fisher', S.name.strip() + ' should be Norma Fisher'
        assert DB.dbf() == 'report2.dbf'
        DB.use(None, DB.select_function('report2'), None)
        DB.use(None, DB.select_function('report'), None)
        os.remove('report2.dbf')