fix test-fs-chmod test
authorIgor Zinkovsky <igorzi@microsoft.com>
Fri, 9 Sep 2011 06:24:45 +0000 (23:24 -0700)
committerBert Belder <bertbelder@gmail.com>
Fri, 9 Sep 2011 12:45:37 +0000 (14:45 +0200)
test/simple/test-fs-chmod.js

index ea1b354..c40d4fc 100644 (file)
 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
 // USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-// libuv-broken
-
-
 var common = require('../common');
 var assert = require('assert');
 var path = require('path');
 var fs = require('fs');
 var got_error = false;
 var success_count = 0;
+var mode_async;
+var mode_sync;
+var is_windows = process.platform === 'win32';
+
+// On Windows chmod is only able to manipulate read-only bit
+if (is_windows) {
+  mode_async = 0400;  // read-only
+  mode_sync = 0600;   // read-write
+} else {
+  mode_async = 0777;
+  mode_sync = 0644;
+}
 
 var file = path.join(common.fixturesDir, 'a.js');
 
-fs.chmod(file, '0777', function(err) {
+fs.chmod(file, mode_async.toString(), function(err) {
   if (err) {
     got_error = true;
   } else {
     console.log(fs.statSync(file).mode);
-    assert.equal(0777, fs.statSync(file).mode & 0777);
 
-    fs.chmodSync(file, 0644);
-    assert.equal(0644, fs.statSync(file).mode & 0777);
+    if (is_windows) {
+      assert.ok((fs.statSync(file).mode & 0777) & mode_async);
+    } else {
+      assert.equal(mode_async, fs.statSync(file).mode & 0777);
+    }
+
+    fs.chmodSync(file, mode_sync);
+    if (is_windows) {
+      assert.ok((fs.statSync(file).mode & 0777) & mode_sync);
+    } else {
+      assert.equal(mode_sync, fs.statSync(file).mode & 0777);
+    }
     success_count++;
   }
 });
@@ -50,15 +68,24 @@ fs.open(file, 'a', function(err, fd) {
     console.error(err.stack);
     return;
   }
-  fs.fchmod(fd, '0777', function(err) {
+  fs.fchmod(fd, mode_async.toString(), function(err) {
     if (err) {
       got_error = true;
     } else {
       console.log(fs.fstatSync(fd).mode);
-      assert.equal(0777, fs.fstatSync(fd).mode & 0777);
 
-      fs.fchmodSync(fd, 0644);
-      assert.equal(0644, fs.fstatSync(fd).mode & 0777);
+      if (is_windows) {
+        assert.ok((fs.fstatSync(fd).mode & 0777) & mode_async);
+      } else {
+        assert.equal(mode_async, fs.fstatSync(fd).mode & 0777);
+      }
+
+      fs.fchmodSync(fd, mode_sync);
+      if (is_windows) {
+        assert.ok((fs.fstatSync(fd).mode & 0777) & mode_sync);
+      } else {
+        assert.equal(mode_sync, fs.fstatSync(fd).mode & 0777);
+      }
       success_count++;
     }
   });