test/tc_nadol_disks.rb in dsktool-0.2.1 vs test/tc_nadol_disks.rb in dsktool-0.4.1
- old
+ new
@@ -8,29 +8,71 @@
class TestNADOLDisks <Test::Unit::TestCase
def test_empty_dsk
dsk=DSK.new()
- assert(!dsk.is_nadol?,"empty DSK should not be NADOL format")
+ assert(dsk.file_system!=:nadol,"empty DSK should not be NADOL format")
+ dsk.set_sector(0,0,"*")
+ assert_equal(dsk.get_sector(0,0)[0],"*"[0],"set_sector wrote 1st byte OK")
+ assert_equal(dsk.get_sector(0,0)[1],0,"set_sector wrote 2nd byte OK")
end
def test_simple_nadol_dsk
dskname=File.dirname(__FILE__)+"//nadol.dsk"
dsk=DSK.read(dskname)
- assert(dsk.is_nadol?,"#{dskname} should be NADOL format")
+ assert_equal(:nadol,dsk.file_system,"#{dskname} should be NADOL format")
assert(dsk.files.length>0,"#{dskname} should have at least one file")
- dsk.dump_catalog
nadol_file=dsk.files["NADOL"]
assert(nadol_file!=nil,"#{dskname} should have a file called NADOL")
assert(nadol_file.to_s.length==16128,"NADOL should be 16128 bytes long")
assert(nadol_file.respond_to?(:disassembly),"NADOL can be disassembled")
assert(!NADOLTokenisedFile.can_be_nadol_tokenised_file?(nadol_file.contents),"NADOL should not be NADOL tokenised file")
brickout_file=dsk.files["BRICKOUT"]
assert(brickout_file!=nil,"#{dskname} should have a file called BRICKOUT")
assert(NADOLTokenisedFile.can_be_nadol_tokenised_file?(dsk.files["BRICKOUT"].contents),"BRICKOUT should be NADOL tokenised file")
assert(nadol_file.respond_to?(:disassembly),"BRICKOUT can't be disassembled")
- s=brickout_file.to_s
+ s=brickout_file.to_s
+ assert(!brickout_file.can_be_picture?,"BRICK-OUT should NOT be viewable as a picture")
assert_equal("; LORES BRICK-OUT GAME",s[0..21],"BRICK-OUT source should detokenise")
- assert_equal("; @ \"NAIII\"",dsk.files["NAIII"].to_s[0..10],"NAIII source should detokenise")
+ assert_equal("; @ \"NAIII\"",dsk.files["NAIII"].to_s[0..10],"NAIII source should detokenise")
+
+ test_file=NADOLFile.new("TESTFILE","Is this mike on?")
+ assert(test_file!=dsk.files["LOGO"],"comparison between files doesn't have false positive")
+ dsk.add_file(test_file)
+ assert(dsk.files[test_file.filename]!=nil,"#{dskname} should have a file called #{test_file.filename}")
+ assert_equal(test_file,dsk.files[test_file.filename])
+
+ #try to round_trip a tokenised NADOL file
+ copy_of_tokenised_file=dsk.make_file("BBALL2",dsk.files["BOUNCINGBALL"].to_s,{:tokenise=>true})
+ assert_equal(dsk.files["BOUNCINGBALL"].to_s,copy_of_tokenised_file.to_s,"NADOL tokenised file should round-trip")
+ dsk.add_file(copy_of_tokenised_file)
+
+ #test we can write muliple files (this also tests we are correctly tracking sectors as being used)
+ test_files=[]
+ for i in 0..20
+ t=dsk.make_file("TEST#{i}","TEST #{i} "+"*"*i*100)
+ test_files<<t
+ dsk.add_file(t)
+ end
+ puts dsk.dump_catalog
+ dsk.save_as("nadol2.po")
+ for i in 0..20
+ assert_equal(test_files[i],dsk.files[test_files[i].filename])
+ end
+
+ #make sure we can overwrite the same file (which also tests we are freeing sectors when files are deleted)
+ for i in 0..250
+ t=dsk.make_file("MULTICOPY","TEST #{i} ")
+ puts "iteratio #{i}"
+ dsk.add_file(t)
+ assert_equal(t,dsk.files[t.filename])
+ end
+
+ #check picture files can be extracted
+ pic_file=dsk.files["LOGO"]
+ assert(pic_file!=nil,"#{dskname} should have a file called LOGO")
+ assert(pic_file.can_be_picture?,"LOGO should be viewable as a picture")
+ assert_equal("\211PNG\r\n\032\n",pic_file.to_png[0..7])
+
end
end