r4659: *** empty log message ***
authorKevin M. Rosenberg <kevin@rosenberg.net>
Mon, 28 Apr 2003 16:07:43 +0000 (16:07 +0000)
committerKevin M. Rosenberg <kevin@rosenberg.net>
Mon, 28 Apr 2003 16:07:43 +0000 (16:07 +0000)
hyperobject.asd
tests.lisp [new file with mode: 0644]

index 91d2d2b0454ae1bed74c99c269c747403fced19a..3c47f1687768688683c66892321dabefae02cb6c 100644 (file)
@@ -7,7 +7,7 @@
 ;;;; Programmer:    Kevin M. Rosenberg
 ;;;; Date Started:  Apr 2000
 ;;;;
-;;;; $Id: hyperobject.asd,v 1.20 2003/04/25 04:53:52 kevin Exp $
+;;;; $Id: hyperobject.asd,v 1.21 2003/04/28 16:07:11 kevin Exp $
 ;;;;
 ;;;; This file is Copyright (c) 2000-2002 by Kevin M. Rosenberg
 ;;;; *************************************************************************
@@ -15,7 +15,7 @@
 (in-package :asdf)
 
 #+(or allegro lispworks sbcl cmu scl)
-(defsystem :hyperobject 
+(defsystem hyperobject 
   :name "cl-hyperobject"
   :author "Kevin M. Rosenberg <kevin@rosenberg.net>"
   :version "2.6.x"
    )
   :depends-on (:kmrcl :clsql))
 
+(defmethod perform ((o test-op) (c (eql (find-system :hyperobject))))
+  (oos 'load-op 'hyperobject-tests)
+  (oos 'test-op 'hyperobject-tests))
 
+(defsystem hyperobject-tests
+    :depends-on (rt)
+    :components ((:file "tests")))
+
+(defmethod perform ((o test-op) (c (eql (find-system :sb-aclrepl-tests))))
+  (or (funcall (intern (symbol-name '#:do-tests)
+                      (find-package '#:sb)))
+      (error "test-op failed")))
diff --git a/tests.lisp b/tests.lisp
new file mode 100644 (file)
index 0000000..c7dbfa4
--- /dev/null
@@ -0,0 +1,100 @@
+;;;; -*- Mode: Lisp; Syntax: ANSI-Common-Lisp; Base: 10 -*-
+;;;; *************************************************************************
+;;;; FILE IDENTIFICATION
+;;;;
+;;;; Name:          hyperobject-tests.lisp
+;;;; Purpose:       Hyperobject tests file
+;;;; Programmer:    Kevin M. Rosenberg
+;;;; Date Started:  Apr 2003
+;;;;
+;;;; $Id: tests.lisp,v 1.1 2003/04/28 16:03:57 kevin Exp $
+;;;;
+;;;; This file is Copyright (c) 2000-2002 by Kevin M. Rosenberg
+;;;;
+;;;; *************************************************************************
+(in-package :hyperobject-user)
+
+(defclass person (hyperobject)
+  ((first-name :value-type (varchar 20) :initarg :first-name :accessor first-name
+              :value-constraint stringp :null-allowed nil)
+   (last-name :value-type (varchar 30) :initarg :last-name :accessor last-name
+             :value-constraint stringp
+             :hyperlink find-person-by-last-name :null-allowed nil)
+   (full-name :value-type string :stored nil)
+   (dob :value-type integer :initarg :dob :accessor dob :print-formatter format-date
+       :value-constraint integerp :input-filter convert-to-date)
+   (resume :value-type string :initarg :resume :accessor resume
+          :value-constraint stringp)
+;;   (addresses :value-type (list-of subobject) :initarg :addresses :accessor addresses))
+   (addresses :subobject t :initarg :addresses :accessor addresses))
+  (:metaclass hyperobject-class)
+  (:default-initargs :first-name "" :last-name "" :dob 0 :resume nil) 
+  (:default-print-slots first-name last-name dob resume)
+  (:user-name "Person")
+  (:description "A Person")
+  (:direct-rules
+   (:rule-1 (:dependants (last-name first-name) :volatile full-name)
+             (setf full-name (concatenate 'string first-name " " last-name)))))
+
+(defun format-date (ut)
+  (when (typep ut 'integer)
+      (multiple-value-bind (sec min hr day mon year dow daylight-p zone)
+         (decode-universal-time ut)
+       (declare (ignore daylight-p zone))
+       (format nil "~[Mon~;Tue~;Wed~;Thu~;Fri~;Sat~;Sun~], ~d ~[Jan~;Feb~;Mar~;Apr~;May~;Jun~;Jul~;Aug~;Sep~;Oct~;Nov~;Dec~] ~d ~2,'0d:~2,'0d:~2,'0d" 
+               dow
+               day
+               (1- mon)
+               year
+               hr min sec))))
+
+(defclass address (hyperobject)
+  ((title :value-type (varchar 20) :initarg :title :accessor title
+         :value-constraint stringp)
+   (street :value-type (varchar 30) :initarg :street :accessor street
+          :value-constraint stringp)
+   (phones :subobject t :initarg :phones :accessor phones))
+  (:metaclass hyperobject-class)
+  (:default-initargs :title nil :street nil) 
+  (:user-name "Address")
+  (:default-print-slots title street)
+  (:description "An address"))
+
+(defclass phone (hyperobject)
+  ((title :value-type (varchar 20) :initarg :title :accessor title
+         :value-constraint stringp)
+   (phone-number :value-type (varchar 16) :initarg :phone-number :accessor phone-number
+                :value-constraint stringp))
+  (:metaclass hyperobject-class)
+  (:user-name "Phone Number")
+  (:default-initargs :title nil :phone-number nil)
+  (:default-print-slots title phone-number)
+  (:description "A phone number"))
+
+
+(defparameter home-phone-1 (make-instance 'phone :title "Voice" :phone-number "367-9812"))
+(defparameter home-phone-2 (make-instance 'phone :title "Fax" :phone-number "367-9813"))
+
+(defparameter office-phone-1 (make-instance 'phone :title "Main line" :phone-number "123-0001"))
+(defparameter office-phone-2 (make-instance 'phone :title "Staff line" :phone-number "123-0002"))
+(defparameter office-phone-3 (make-instance 'phone :title "Fax" :phone-number "123-0005"))
+
+(defparameter home (make-instance 'address :title "Home" :street "321 Shady Lane"
+                                 :phones (list home-phone-1 home-phone-2)))
+
+(defparameter office (make-instance 'address :title "Office" :street "113 Main St."
+                                   :phones (list office-phone-1 office-phone-2 office-phone-3)))
+
+                             
+(defparameter mary (make-instance 'person :first-name "Mary" :last-name "Jackson"
+                           :dob (get-universal-time)
+                           :addresses (list home office)
+                           :resume "Style & Grace"))
+
+
+(format t "~&Text Format~%")
+(view mary :subobjects t)
+
+(format t "~&XML Format with field labels and hyperlinks~%")
+(view mary :subobjects t :category :xml-link-labels)