Permalink
Browse files

Unittest

  • Loading branch information...
1 parent 5b20deb commit 299949a736b9dbf498217c6d362140412d0c310d @paul999 committed Mar 6, 2012
View
5 README
@@ -19,3 +19,8 @@ If you want to run the emulator, there is debug information written into the con
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License version 2 as published by
the Free Software Foundation.
+
+
+Running tests:
+To run the tests included with the emulator you will need to download the QUnit files seperatly, and place them in the src/ directory. Without these files the emulator will not run at all.
+After that, open test.html in a browser (Not file the file:// protocol, the test will fail!)
@@ -51,7 +51,7 @@ class ProtectedModeUBlock extends MicrocodeSet
opcodeCounter.addBlock(@getMicrocodes())
seg0 = null
- seg0 = proc.ecx
+# seg0 = proc.ecx
addr0 = 0
reg0 = 0
reg1 = 0
@@ -63,15 +63,18 @@ class ProtectedModeUBlock extends MicrocodeSet
eipUpdated = false
position = 0
-# log "Going to execute the next microcodes: "
+ log "Going to execute the next microcodes: "
-# for i in [position...@microcodes.length]
-# log @microcodes[i]
+ for i in [position...@microcodes.length]
+ log @microcodes[i]
try
while position < @microcodes.length
- switch @microcodes[position]
+ code = @microcodes[position]
+ log "Microcode: #{code}"
+ position++
+ switch code
when @EIP_UPDATE
if (!eipUpdated)
eipUpdated = true
@@ -106,6 +109,7 @@ class ProtectedModeUBlock extends MicrocodeSet
proc.esp = (proc.esp & ~0xffff) | (reg0 & 0xffff)
when @LOAD0_MEM_WORD
+ log "Segment: " + seg0
reg0 = 0xffff & seg0.getWord(addr0)
when @LOAD_SEG_DS
seg0 = proc.ds
@@ -428,7 +432,7 @@ class ProtectedModeUBlock extends MicrocodeSet
else
throw "File: ProtectedModeUBlock: Not added opcode yet? #{@microcodes[position]}"
- position++
+
catch e
throw e
@@ -235,8 +235,6 @@ class ProtectedModeUDecoder extends MicrocodeSet
bytesRead += 1
- log "Bytesread: #{bytesRead}"
-
switch (opcode)
when 0x0f
opcodePrefix = (opcodePrefix << 8) | opcode
@@ -301,8 +299,6 @@ class ProtectedModeUDecoder extends MicrocodeSet
opcode = (opcodePrefix << 8) | opcode;
log "Executing opcode: #{opcode}"
- t = getBytes(opcode)
- log t[0] + " " +t[1] + " " +t[2] + " " +t[3]
switch opcodePrefix
when 0x00
@@ -390,6 +386,8 @@ class ProtectedModeUDecoder extends MicrocodeSet
else
log "Immediate byte invalid"
+ log "displacement: #{displacement} immediate: #{immediate}"
+
@writeInputOperands(prefices, opcode, modrm, sib, displacement, immediate)
@writeOperation(prefices, opcode, modrm)
@@ -727,7 +725,7 @@ class ProtectedModeUDecoder extends MicrocodeSet
return 0
writeInputOperands: (prefices, opcode, modrm, sib, displacement, immediate) ->
-# log "WriteInputOperands(#{opcode})"
+ log "WriteInputOperands(#{opcode})"
switch (opcode)
when 0xf9
log "no action"
@@ -1559,7 +1557,7 @@ class ProtectedModeUDecoder extends MicrocodeSet
class Operation
constructor: ->
@microcodes = new Array()
- @microcodesLength = null
+ @microcodesLength = 0
@x86Length = null
@readOffset = null
@decoded = null
@@ -1570,7 +1568,9 @@ class Operation
throw new NotImplementedError("Cant set a undefined/null microcode: " + microcode)
try
- @microcodes[@microcodesLength++] = microcode
+ log "Adding microcode #{microcode} to @microcodes[#{@microcodesLength}]"
+ @microcodes[@microcodesLength] = microcode
+ @microcodesLength++
catch e
throw e
# int[] temp = new int[2*microcodes.length];
@@ -27,7 +27,8 @@ class RealModeSegment extends Segment
log "Base of this: " + @base
translateAddressRead: (offset) ->
- return @base + offset
+ #return @base + offset
+ return offset
getDefaultSizeFlag: ->
return @defaultSize
View
@@ -0,0 +1,232 @@
+/**
+ * QUnit v1.4.0pre - A JavaScript Unit Testing Framework
+ *
+ * http://docs.jquery.com/QUnit
+ *
+ * Copyright (c) 2012 John Resig, Jörn Zaefferer
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * or GPL (GPL-LICENSE.txt) licenses.
+ */
+
+/** Font Family and Sizes */
+
+#qunit-tests, #qunit-header, #qunit-banner, #qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult {
+ font-family: "Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial, sans-serif;
+}
+
+#qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult, #qunit-tests li { font-size: small; }
+#qunit-tests { font-size: smaller; }
+
+
+/** Resets */
+
+#qunit-tests, #qunit-tests ol, #qunit-header, #qunit-banner, #qunit-userAgent, #qunit-testresult {
+ margin: 0;
+ padding: 0;
+}
+
+
+/** Header */
+
+#qunit-header {
+ padding: 0.5em 0 0.5em 1em;
+
+ color: #8699a4;
+ background-color: #0d3349;
+
+ font-size: 1.5em;
+ line-height: 1em;
+ font-weight: normal;
+
+ border-radius: 15px 15px 0 0;
+ -moz-border-radius: 15px 15px 0 0;
+ -webkit-border-top-right-radius: 15px;
+ -webkit-border-top-left-radius: 15px;
+}
+
+#qunit-header a {
+ text-decoration: none;
+ color: #c2ccd1;
+}
+
+#qunit-header a:hover,
+#qunit-header a:focus {
+ color: #fff;
+}
+
+#qunit-header label {
+ display: inline-block;
+}
+
+#qunit-banner {
+ height: 5px;
+}
+
+#qunit-testrunner-toolbar {
+ padding: 0.5em 0 0.5em 2em;
+ color: #5E740B;
+ background-color: #eee;
+}
+
+#qunit-userAgent {
+ padding: 0.5em 0 0.5em 2.5em;
+ background-color: #2b81af;
+ color: #fff;
+ text-shadow: rgba(0, 0, 0, 0.5) 2px 2px 1px;
+}
+
+
+/** Tests: Pass/Fail */
+
+#qunit-tests {
+ list-style-position: inside;
+}
+
+#qunit-tests li {
+ padding: 0.4em 0.5em 0.4em 2.5em;
+ border-bottom: 1px solid #fff;
+ list-style-position: inside;
+}
+
+#qunit-tests.hidepass li.pass, #qunit-tests.hidepass li.running {
+ display: none;
+}
+
+#qunit-tests li strong {
+ cursor: pointer;
+}
+
+#qunit-tests li a {
+ padding: 0.5em;
+ color: #c2ccd1;
+ text-decoration: none;
+}
+#qunit-tests li a:hover,
+#qunit-tests li a:focus {
+ color: #000;
+}
+
+#qunit-tests ol {
+ margin-top: 0.5em;
+ padding: 0.5em;
+
+ background-color: #fff;
+
+ border-radius: 15px;
+ -moz-border-radius: 15px;
+ -webkit-border-radius: 15px;
+
+ box-shadow: inset 0px 2px 13px #999;
+ -moz-box-shadow: inset 0px 2px 13px #999;
+ -webkit-box-shadow: inset 0px 2px 13px #999;
+}
+
+#qunit-tests table {
+ border-collapse: collapse;
+ margin-top: .2em;
+}
+
+#qunit-tests th {
+ text-align: right;
+ vertical-align: top;
+ padding: 0 .5em 0 0;
+}
+
+#qunit-tests td {
+ vertical-align: top;
+}
+
+#qunit-tests pre {
+ margin: 0;
+ white-space: pre-wrap;
+ word-wrap: break-word;
+}
+
+#qunit-tests del {
+ background-color: #e0f2be;
+ color: #374e0c;
+ text-decoration: none;
+}
+
+#qunit-tests ins {
+ background-color: #ffcaca;
+ color: #500;
+ text-decoration: none;
+}
+
+/*** Test Counts */
+
+#qunit-tests b.counts { color: black; }
+#qunit-tests b.passed { color: #5E740B; }
+#qunit-tests b.failed { color: #710909; }
+
+#qunit-tests li li {
+ margin: 0.5em;
+ padding: 0.4em 0.5em 0.4em 0.5em;
+ background-color: #fff;
+ border-bottom: none;
+ list-style-position: inside;
+}
+
+/*** Passing Styles */
+
+#qunit-tests li li.pass {
+ color: #5E740B;
+ background-color: #fff;
+ border-left: 26px solid #C6E746;
+}
+
+#qunit-tests .pass { color: #528CE0; background-color: #D2E0E6; }
+#qunit-tests .pass .test-name { color: #366097; }
+
+#qunit-tests .pass .test-actual,
+#qunit-tests .pass .test-expected { color: #999999; }
+
+#qunit-banner.qunit-pass { background-color: #C6E746; }
+
+/*** Failing Styles */
+
+#qunit-tests li li.fail {
+ color: #710909;
+ background-color: #fff;
+ border-left: 26px solid #EE5757;
+ white-space: pre;
+}
+
+#qunit-tests > li:last-child {
+ border-radius: 0 0 15px 15px;
+ -moz-border-radius: 0 0 15px 15px;
+ -webkit-border-bottom-right-radius: 15px;
+ -webkit-border-bottom-left-radius: 15px;
+}
+
+#qunit-tests .fail { color: #000000; background-color: #EE5757; }
+#qunit-tests .fail .test-name,
+#qunit-tests .fail .module-name { color: #000000; }
+
+#qunit-tests .fail .test-actual { color: #EE5757; }
+#qunit-tests .fail .test-expected { color: green; }
+
+#qunit-banner.qunit-fail { background-color: #EE5757; }
+
+
+/** Result */
+
+#qunit-testresult {
+ padding: 0.5em 0.5em 0.5em 2.5em;
+
+ color: #2b81af;
+ background-color: #D2E0E6;
+
+ border-bottom: 1px solid white;
+}
+
+/** Fixture */
+
+#qunit-fixture {
+ position: absolute;
+ top: -10000px;
+ left: -10000px;
+ width: 1000px;
+ height: 1000px;
+}
View
@@ -0,0 +1,35 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <head>
+ <link rel="stylesheet" href="src/qunit.css" type="text/css"/>
+ <script src="http://code.jquery.com/jquery-latest.js"> </script>
+ <script src="http://js-linux.nl/testswarm/js/inject.js"></script>
+ <script type="text/javascript" src="src/qunit.js"></script>
+ <script type="text/javascript">
+ // --- Unittest Code goes here ---
+
+ $(document).ready(function(){
+ module("Basic Unit Test");
+ test("Sample test", function()
+ {
+ expect(1);
+ equal(divide(4,2),
+ 2,
+ 'Expected 2 as the result, result was: ' + divide(4,2));
+ });
+ });
+ function divide(a,b)
+ {
+ return a / b;
+ }
+ </script>
+ </head>
+ <body>
+ <h1 id="qunit-header">QUnit example</h1>
+ <h2 id="qunit-banner"></h2>
+ <h2 id="qunit-userAgent"></h2>
+ <ol id="qunit-tests">
+ </ol>
+ </body>
+</html>

0 comments on commit 299949a

Please sign in to comment.